Перейти к контенту
Halford

[SoC] Ковыряемся в файлах

Рекомендуемые сообщения

Прошу помощи у специалистов.

Давным-давно, "когда еще людей на свете не было" :), Vano_Santuri в этой теме предложил вариант определения координат ГГ через выход в меню и кнопку "Титры":

function main_menu:OnButton_credits_clicked()

local text

local vid

local gvid

local a = vector()

local text

a = db.actor:position()

vid = db.actor:level_vertex_id()

gvid = db.actor:game_vertex_id()

text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid

news_manager.send_tip(db.actor, text, nil, nil, 30000)

end

 

Мне захотелось получать еще и направление взгляда и я чуть-чуть переработал код:

function main_menu:OnButton_credits_clicked()

local vid = db.actor:level_vertex_id()

local gvid = db.actor:game_vertex_id()

local a = db.actor:position()

local dir = db.actor:direction()

local text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nDirX= "..dir.x.."\\nDirY= "..dir.y.."\\nDirZ= "..dir.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid

news_manager.send_tip(db.actor, text, nil, nil, 30000)

end

 

Все работает, цифирки исправно выдаются на экран. Однако у меня появились два вопроса.

1. Все ли здесь верно?

2. При задании стартовой позиции ГГ в all.spawn и начале новой игры direction у меня вроде бы вообще не учитывается. Влияет только параметр upd:o_torso. Так и должно быть?

Старый сюжет ТЧ - в топку!

Ссылка на комментарий

У меня сегодня просто день вопросов.

Слышал, что в "Зове Припяти" в скрипте db.script есть таблица level_doors = {}, которая содержит список всех дверей на уровне, чтобы НПС могли, бегая по этому уровню, открывать нужные двери. В "ТЧ" такого нет. Можно ли каким-либо образом изменить логику двери (например, Сидоровича), чтобы ее с любой стороны могли открывать НПС? Если подскажете, как это сделать, то дальше можно не читать. :)

Запасной вариант есть - спавн рестриктора возле двери и отслеживание входа в него НПС. Но он мне кажется более сложным и что-то пока не работает.

1. В all.spawn на нужном уровне (в моем случае - на Затоне) размещаю рестриктор с такой секцией логики:

[logic]

active = sr_idle

[sr_idle]

on_actor_inside = %+ship_open_door%

on_actor_outside = %-ship_open_door%

 

2. Выделенный жирным инфопоршень регистрирую в одном из файлов с инфопоршнями.

 

3. Вношу изменения (также выделены жирным) в логику двери:

[logic]

active = ph_door@closed

 

[ph_door@locked]

locked = false

snd_open_start = trader_door_unlock

on_info = {+esc_trader_can_leave} ph_door@closed %=play_snd(device\door_servomotor)%

 

[ph_door@closed]

closed = true

locked = false

on_info = {+ship_open_door} ph_door@open

on_use = ph_door@open %-esc_close_door%

snd_open_start = trader_door_open_start

snd_close_start = trader_door_close_start

snd_close_stop = trader_door_close_stop

 

[ph_door@open]

closed = false

locked = false

on_info = {+esc_close_door} ph_door@closed

on_info = {-ship_open_door} ph_door@closed

on_use = ph_door@closed

snd_open_start = trader_door_open_start

snd_close_start = trader_door_close_start

snd_close_stop = trader_door_close_stop

 

 

После входа ГГ (экспериментирую на нем) в зону рестриктора дверь распахивается, после выхода - захлопывается. Но пока не все гладко. Во-первых, находясь в зоне рестриктора, невозможно "вручную" закрыть дверь, а вне рестриктора - ее открыть (пробовал). Во-вторых, и это более важно, нужно, чтобы дверь открывалась при приближении к ней не ГГ, а НПС. Как это сделать, вообще не представляю. Буду очень признателен за любую помощь.

 

KD87, Charsi, спасибо за помощь в решении прошлого вопроса.

 

Старый сюжет ТЧ - в топку!

Ссылка на комментарий
_Призрак_, Проще туда сунуть спейс_рестриктор и вызвать функцию... (Это вариант, как альтернатива, если нет предусмотренного метода)

Что-то кончается, что-то начинается...

Ссылка на комментарий

Дело в том что я сделал очень интересный дебагер - при наведении на НПС прицела, на экран выводится информация о нем - имя, айди, сид (если есть), смарт, количество НПС в сматре, активную логику, бест_дангер и здоровье + в логе сохраняется позиция НПС и его гейм/левел вертикс. На случай когда АИ-сетка глючит. Но во время тестов я понял что хотелось бы знать на какой вейпоинт идет НПС и достиг ли он его.

 

Поэтому вариант со спейсами не прокатит

Изменено пользователем _Призрак_

Freedom

Ссылка на комментарий

Здравствуйте, я пытался сделать мод про вояк, но сталкнулся с такой проблемой, мне надо поставить все диалоги Сидоровича одному вояке, прописываю диалог нужному НПС ну и вообщем, прихожу я к этому генералу, а у него не то что нет диалолгов Сидора, он даже говорить со мной не хочет. В чём дело подскажите пожалуйста. :blush:

Ссылка на комментарий

Поподробнее бы :)... Вообще, ГГ разговаривает с военными и при этом не хочет говорить только с этим конкретным "генералом"? Или вообще не запускаются диалоги с военными?

Во втором случае нужно править xr_meet.script - найти строку с перечислением группировок и удалить из неё вот этот фрагмент:

or npc_community == "military"

В первом случае... где прописывал диалоги этому генералу - в профиле непися или в его логике?

Ссылка на комментарий

_Призрак_,

В utils есть весь нужный функционал.

path_parse_waypoints(pathname) - получить таблицу данных по каждой точке пути

 

-- узнать, находится ли stalker рядом с точкой path_point пути patrol_path true\false

function stalker_at_waypoint(stalker, patrol_path, path_point)

Ссылка на комментарий

Камрады, помогите новичку - как прописать прямо в диалоге проигрывание в нужном месте коротенького звука, чтобы сам диалог замирал на время проигрывания(и как вариант - нет)?

Ссылка на комментарий

Просто воткни в конструктор диалога в нужную фразу action с функцией, включающей проигрывание звука, например:

 

<action>dialogs.tra_la_la</action>

 

А в файл dialogs.script добавь функцию:

 

function tra_la_la(first_speaker, second_speaker)
    local snd_obj = xr_sound.get_safe_sound_object([[monsters\poltergeist\die_2]])
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
end

 

Только измени путь к нужному тебе файлу.

Ссылка на комментарий

Люди, такой вопрос-возможно-ли реализовать (если я например сделаю модель) многоствольную стационарную турель типо ЗПУ-4?

Prefiero morir de pie, que vivir siempre arrodillado.
 

Ссылка на комментарий

Отменяю вопрос преведущего поста.

 

Такая ошибка:

FATAL ERROR

[error]Expression    : start_node && path
[error]Function      : CXml::NavigateToNode
[error]File          : E:\stalker\sources\trunk\xrXMLParser\xrXMLParser.cpp
[error]Line          : 97
[error]Description   : NavigateToNode failed in XML file 
[error]Arguments     : gameplay\alex_mod_dialogs.xml

Насколько я знаю, подобный лог часто появляется при наличии синтаксической ошибки в диалоге. Но я проверил свой диалог XML Validator, он ошибок не нашел...

В чем же дело?

 

Диалог:

<?xml version="1.0" encoding="windows-1251" ?>
<game_dialogs>
    <dialog id="labx8_test_nps_qest_start">
        <dont_has_info>labx8_find_documents_done</dont_has_info>
        <phrase_list>
            <phrase id="0">                            
                <text>labx8_test_nps_dialog_0_start</text>
                <next>1</next>
            </phrase>
            <phrase id="1"> 
                <text>labx8_test_nps_dialog_1_start</text>
                <give_info>labx8_find_documents</give_info>
                <next>2</next>
            </phrase>
            <phrase id="2"> 
                <text>labx8_test_nps_dialog_2_start</text>
                <action>dialogs.break_dialog</action>
            </phrase>
        </phrase_list>            
    </dialog>
        
    <dialog id="labx8_test_nps_qest_done">
        <has_info>labx8_find_documents</has_info>
        <dont_has_info>labx8_find_documents_done</dont_has_info>        
        <phrase_list>    
            <phrase id="1">        
                <text>labx8_test_nps_dialog_1_complite</text>            
                <next>2</next>
                <next>3</next>
            </phrase>            
            <phrase id="2"> 
                <text>labx8_test_nps_dialog_2_complite</text>
                <precondition>alex_mod.labx8_documents_have</precondition>    
                <action>alex_mod.labx8_documents_done</action>
                <next>4</next>
            </phrase>
            <phrase id="3"> 
                <text>labx8_test_nps_dialog_1_no_complite</text>            
                <next>6</next>
            </phrase>    
            <phrase id="4"> 
                <text>labx8_test_nps_dialog_3_complite</text>
                <action>alex_mod.give_labx8_qest_nagrada</action>
                <next>5</next>
            </phrase>
            <phrase id="5"> 
                <text>labx8_test_nps_dialog_4_complite</text>
                <action>dialogs.break_dialog</action>
            </phrase>
            <phrase id="6"> 
                <text>labx8_test_nps_dialog_2_no_complite</text>            
                <next>7</next>
            </phrase>
            <phrase id="7"> 
                <text>labx8_test_nps_dialog_3_no_complite</text>            
                <action>dialogs.break_dialog</action>
            </phrase>
        </phrase_list>
    </dialog>
    
    <dialog id="labx8_test_nps_qest_hello_dialog">
        <phrase_list>
            <dont_has_info>labx8_find_documents_done</dont_has_info>    
            <phrase id="1">             
                <text>labx8_test_nps_qest_hello_dialog_1</text>            
                <next>2</next>                
            </phrase>
            <phrase id="2"> 
                <text>labx8_test_nps_qest_hello_dialog_2</text>            
                <action>dialogs.break_dialog</action>            
            </phrase>
        </phrase_list>
    </dialog>    
</game_dialogs>

 

Зарегестрирован в system.ltx

Изменено пользователем Stalker_AleX333

aka Stalker_AleX333
 
Мои проекты  - ЯндексДиск   |   Я на Gamer-Mods.ru

Ссылка на комментарий
=VENOM=, Спасибо, только диалог не стопорится во время проигрывания(звук идет на фоне) - этим можно как-то управлять? И звук только в ogg должен быть, wav совсем не понимает?
Ссылка на комментарий

Stalker_AleX333, у тебя второй и третий диалоги начинаются сразу с фразы "1", а должны начинаться всегда с "0", если не ошибаюсь ;)...

Whisper, насчёт притормаживания диалога никогда не задумывался даже :)... Возможно, проще сделать два последовательных диалога - первый обрывается с тем звуком, который тебе нужен, а второй активировать следом, снова "обратившись" к NPC? Игра подерживает только ogg, есть куча конвертеров, которыми легко и просто можно перегнать любой звукофайл (не только wav) в ogg. Только если это будет каким-то "мировым" звуком (выстрел, музыка из репродукторв и т.п.), тогда придётся прогонять его (wav) через SDK - это тоже очень просто.

Ссылка на комментарий

=VENOM=, Со звуком уже разобрался, перевел в огг.

 

Но прерывать диалог там никак - там именно нужно, чтобы на длину звука(1-3 с.) диалог замер(ждем сообщения на экране от непися с которым общаемся, очередного), а потом ехало все дальше.

Ссылка на комментарий
Просто воткни в конструктор диалога в нужную фразу action с функцией, включающей проигрывание звука, например:

<action>dialogs.tra_la_la</action>

Абсолютно не нужно.

Цитата из справочника:

"Фразе можно сопоставить звук. Для этого в каталог sounds\characters_voice\dialogs\ нужно поместить звук с именем, как у тега "text" и расширением "*.ogg". Но говорить будут только NPC."

Ссылка на комментарий

Garry_Galler, Спасибо, полезно, но в данному случае фразу выдает функция, так-как она динамическая сама по себе.

 

А и, кстати, за что отвечает параметр priority в dialogs.xml ?

Ссылка на комментарий
priority - произвольное целое число. Имеет смысл только для диалогов актора. Диалоги сортируются по этому признаку в окне выбора

Почитай тему про диалоги в справочнике по функциям и классам. malandrinus там все расписал.

Ссылка на комментарий

Спасибо, читаю-изучаю! Разбил фразу на две части(да и звуков тоже два, на самом деле), первая статическая и проигрывает по встроенному методу, а вторая - функцией. Но паузы никакой нет, поэтому звуки только сливаются.

 

Есть какие-то задержки? Типа ничего не делать пару секунд?

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   1 пользователь

AMK-Team.ru

×
×
  • Создать...