Сталкер как прописать диалог другому нпс

Обновлено: 05.07.2024

Все диалоги создаются в файлах типа «dialogs_локация», а регистрируются в профилях НПС (файлы типа «character_desc_локация).
Прежде чем создавать диалог нужно его зарегистрировать, ведь так? Если вы уже знаете, что означают все тэги в профиле НПС, то уже знаете как прописать диалог. Если нет, то читайте ниже как это сделать.
Открываем файл к примеру character_desc_escape. Находим профиль Сидора (trader) и находим тэги и . Отличаются они тем, что start_dialog начинается фразой НПС, а actor_dialog начинается фразой ГГ. Сейчас вы учитесь, так что лучше выбрать второе.
И так, пропишем наш диалог в профиль Сидорыча – среди различных actor_dialog-ов создадим свой (в данном случае trader_quest_1).

Теперь беремся за создание самой структуры диалога.

Вот как выглядит простейший диалог в файлах игры:

Здравствуй Сидорыч!
1


Ну привет, коли не шутишь.
2


Есть работенка какая-нибудь?
3


Притащи мне артефакт Медуза. Оплата соотвествующая.

Ничего не понятно? Тогда давайте разберем каждую строчку поподробней.

Это собственно и есть наш диалог, внутри которого прописывается все остальное. trader_quest_1 является идентификатором или попросту названием диалога в файлах игры (оно должно совпадать с тем названием, которое прописали в профиле НПС).

Как не трудно догадаться из названия – это список фраз нашего диалога. Т. е. внутри этого тэга содержаться все фразы нашего диалога.

Это одна единственная фраза. У нее есть собственный номер (id) по которому ее определяет игра.

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

Тэг, который отправляет игру к следующей фразе. Next-ов может быть несколько (об этом позже). Есть одно очень важно правило – next всегда пишется в конце фразы:

Здравствуй Сидорыч!
1

Прежде чем двигаться дальше, попробуйте создать такой незамысловатый и очень простой диалог, не обремененный никакими функциями и дополнительными тэгами (ВАЖНО: id фразы может быть ТОЛЬКО числом!). Думаю у вас все получится.

Двигаемся дальше. Как вы понимаете для полноценного диалога этого не достаточно. Очень часто используются и другие тэги, которые выполняют различные полезные функции. Сейчас я их перечислю:

info_new_quest
Данный тэг пишется в самом начале диалога или фразы. К примеру здесь:

info_new_quest
Здравствуй Сидорыч!
Внутри тэга ("info_new_quest") пишется название инфопоршня. Тэг проверяет наличие определенного инфопоршня (что это такое и где их создавать читать здесь). Если этот инфопоршень был выдан, то диалог/фраза появляются. Если данный инфопоршень вы еще не получили, то диалог/фраза не появятся.

Сталкер как прописать диалог другому нпс

Создание диалогов в ТЧ

Сегодня мы научимся создавать диалоги в игре.
Для начала нам понадобится создать несколько файлов, которые будут нам нужны.

В данном случае, stable_game_credits писать не надо! Эта строка есть, показал просто как надо дописывать свой файл.

[dialogs]
files = dialogs_test, dialogs, dialogs_escape, dialogs_garbage, dialogs_agroprom, dialogs_deadcity, dialogs_darkvalley, dialogs_pripyat, dialogs_bar, dialogs_yantar, dialogs_military, dialogs_labx18, dialogs_radar, dialogs_aes
И через запятую, дописываем название нашего файл (в нашем случае это my_dialogs). Получится так:

Все, с регистрацией файлов в игре мы закончили, теперь перейдем к написанию текста диалога. Для этого открываем наш созданный файл table_my_dialogs.xml и первым делом в него пишем такую конструкцию:

<?xml version="1.0" encoding="windows-1251" ?>
<string_table>
.
</string_table>

Вместо точек будут наши тексты. Приступим.
При написании текста, нужно знать некоторые правила его написания. Дело не в орфографии (хотя и она не маловажна, ошибка в тегах недопустима!).
Любой текст диалога начинается со строчки


Где фраза my_dialogs_01 заключенная в кавычки является идентификатором нашей фразы.
Далее идет наша фраза заключенная в тег

Отсутствие этого тега, либо ошибка в других - чревата вылетами, с руганью на синтаксис файла. Так что рекомендую использовать программы с подсветкой (Notepad++ вещь незаменимая).

Напишем простой диалог из 7 фраз:

<string >
<text>Здравствуйте профессор. Как у вас дела?</text>
</string>
<string >
<text>Здравствуйте Меченый. Дела у меня отлично, очень скоро наверно смогу создать артефакт в искусственных условиях. </text>
</string>
<string >
<text>И у меня отлично, буду ждать результатов!</text>
</string>
<string >
<text>Постойте Стрелок. Недавно к нам прилетал вертолет, искали вас какие то люди. </text>
</string>
<string >
<text>Ох профессор, они не сказали зачем я им?</text>
</string>
<string >
<text>Увы нет, обмолвились только, что будут ждать вас, если вы объявитесь, у входа в комплекс.</text>
</string>
<string >
<text>Ну что же, пойду проведаю их.</text>
</string>

Итак, текст диалога готов, осталась вторая часть. Открываем наш файл my_dialogs.xml, также пишем сначала в него такую конструкцию:

<?xml version="1.0" encoding="windows-1251" ?>
<game_dialogs>
.
</game_dialogs>

Вместо точек, будет наша конструкция - скелет диалога.
Начинаем его писать:

<dialog >
<phrase_list>
<phrase >
<text>my_dialogs_01</text>
<next>1</next>
</phrase>
<phrase >
<text>my_dialogs_02</text>
<next>2</next>
</phrase>
<phrase >
<text>my_dialogs_03</text>
<next>3</next>
</phrase>
<phrase >
<text>my_dialogs_04</text>
<next>4</next>
</phrase>
<phrase >
<text>my_dialogs_05</text>
<next>5</next>
</phrase>
<phrase >
<text>my_dialogs_06</text>
<next>6</next>
</phrase>
<phrase >
<text>my_dialogs_07</text>
</phrase>
</phrase_list>
</dialog>
Разберем эту конструкцию:
my_dialog_start - это идентификатор всего диалога (не отдельных фраз). Данный идентификатор понадобится нам позже.
- подзаголовок, "голова" диалога. Грубо говоря, является гиперссылкой на следующие фразы. Всегда начинается с 0!
- это ссылка на нашу фразу из table_my_dialogs.xml. Т.е движок игры, прочитает текст и выдаст нам его вместо фразы my_dialogs_01.
который будет содержать следующую нашу фразу диалога.

Где my_dialog_start это идентификатор нашего диалога.
Получится так:
<start_dialog>yantar_general_ucheniy_talk_start</start_dialog>
<actor_dialog>tm_ecolog_dialog</actor_dialog>
<actor_dialog>tm_ecolog_reward</actor_dialog>
<actor_dialog>my_dialog_start</actor_dialog>

.
Все. Теперь. Как только мы увидим Сахарова, у него будет наш диалог.

P.S
Наличие двух фраз


в скелете диалога позволит нам создать разветвления в диалоге. Т.е например на одну и ту же фразу, можно будет ответить несколькими вариантами.

Некоторые полезные "ф-ии" для диалогов:

- позволит нам закрыть диалоговое окно, после того, как игрок нажмет на нужную фразу. Пример использования:
<phrase >
<text>my_dialogs_07</text>
<action>dialogs.break_dialog</action>
</phrase>

Диалог исчезнет после того, как будет прочитан.
В начале ставим проверку на выданный поршень, например:


А в конце какой нибудь фразы, ставим выдачу этого поршня. Пример:
<phrase >
<text>my_dialogs_07</text>
<give_info>dialog_end</give_info>
</phrase>

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

Добавление новых диалогов, обучение N3

Сначала открываем файл dialogs_escape и в конце до
пишем:

Теперь открываем файл stable_dialogs_escape и до
пишем


Сидр а что у тебя есть в продаже


Много чего: выбирай.

Теперь открываем файл character_desc_escape и после escape_trader_start_dialog
пишем:

test_dialog
Все таким образом мы зарегистрировали у сидора этот диалог.

Теперь можете проверять.

Всего 4 строки отвечают за диалог и переход к следующему

- название ветки
test_dialog_0 - перевод на русский находится. ну вы сами поняли
1 - переход к следующей ветке
- завершение ветки

2) Добавление диалогов после которого он исчезнет, диалог с выбором ответа и после которого вам дадут гаусс-пушку и 10000.

И так начнем. Заходим в файл character_desc_escape и в конце до пишем:


2
и
3 это возможные ответы Меченого.

Все. 1 этап завершен. Переходим к следующему.

Теперь в файле stable_dialogs_escape пишем


Все дал последний раз больше ты у меня и копеки не выпросишь.

Теперь пишем в файле info_l01escape.xml инфопоршень

Теперь после того как диалог завершится он больше не появится

Теперь сделаем диалоги правдой то есть чтобы после фразы сидр дал нам деньги или гауску (как регистрировать диалоги у НПС я уже писал)

И так в папке gamedatascripts создаем любой файл формата script например файл zz

function dat_dengi(first_speaker, second_speaker)
dialogs.relocate_money(second_speaker, 10000, "in")
end

Это функция отдачи денег ГГ. На месте 10000 любое число.
На месте dat_dengi любое название.
--------------------------------------------------------------------------------

function dat_item(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "wpn_gauss", "in")
end

Это функция отдачи предмета ГГ. На месте wpn_gauss любой предмет.
На месте dat_item любое название.

Создание новых диалогов


К примеры ты хочешь написать диалог Сидоровичу, заходишь в character_desc_escape.xml и со строчки:
< specific_character id="escape_trader" no_random = "1">
и до
< /specific_character>
это описание самого Сидоровича, диалоги которые можно с ним вести написаны так:
< start_dialog>escape_trader_start_dialog< /start_dialog>
< actor_dialog>escape_trader_talk_info< /actor_dialog>
< actor_dialog>escape_trader_jobs< /actor_dialog>
< actor_dialog>tm_trader_dialog< /actor_dialog>
< actor_dialog>tm_trader_reward< /actor_dialog>
добавляешь свою строчку ну к примеру < actor_dialog> escape_trader_para_voprosov < /actor_dialog> выглядеть это будет так:
< start_dialog>escape_trader_start_dialog< /start_dialog>
< actor_dialog>escape_trader_talk_info< /actor_dialog>
< actor_dialog>escape_trader_jobs< /actor_dialog>
< actor_dialog>tm_trader_dialog< /actor_dialog>
< actor_dialog>tm_trader_reward< /actor_dialog>
< actor_dialog> escape_trader_para_voprosov < /actor_dialog>
то что подчеркнуто можно назвать по другому. Далее ты наверное определился какой у тя будет диалог, ну дак вот составляем диалог идешь в configtextrusstable_dialogs_escape.xml и начинаешь писать (у меня вот такой диалог):
< string > --это начало диалога должно быть 0
< text >Сидорович, у меня к тебе несколько вопросов. Мог ты мне на них ответить?.< /text > --сам текст
< /string>
< string >
< text >Ну задавай, че знаю то скажу.< /text >
< /string>
< string >
< text >Кто такой Стрелок.< /text >
< /string>
< string >
< text >Не могу вспомнить кто я, ты меня раньше видал?< /text >
< /string>
< string >
< text >А что дальше за военным блок-постом?< /text >
< /string>

< text >Что дальше за мостом?< /text >
< /string>

< text >Что здесь вообще нужно делать?< /text >
< /string>
< string >
< text >Как ты сюда попал?< /text >
< /string>
< string >
< text >Стрелок это очень крутой Сталкер. Говорят, что он смог пробраться к центру зоны, и вернуться обратно живым. Больше этого кроме него и его команды никто не смог сделать.< /text >
< /string>

< text >Ты мне кого то напоминаешь, вот только не могу вспомнить, заходид ко мне похожий на тебя, но така я не могу вспомнить.< /text >
< /string>
< string >
< text >А что поможет тебе вспомнить?< /text >
< /string>

< text >Ого! Серьезный ты человек, Меченый. Да ладно. Серьезно говорю что вспомнить не могу, сам понимаешь возраст.< /text >
< /string>

< text >За военным блокпостом там совершенно другой мир, там гражданские со своими правами, ну в общем это там совсем не то что зона!< /text >
< /string>
< string >
< text >Ну дальше за мостом продолжается кордон метров так 400, а там уже идет свалка - не очень хорошее место . < /text >
< /string>
< string >
< text >Что здесь нужно делать? Странный вопрос. Здесь нужно выживать, стрелять, бегать и может останешься жив.< /text >
< /string>
< string >
< text >Эх меченый, попал я сюда давно еще, когда был молодым еще зеленым сталкером. На свободе мне не было места, да и проблемы с законом. Потом освоился. А ведь на воле я тоже торговлей занимался. Тоже продавал незаконно и много вот и посадили, а потом выдался случай мне. Сидели мы не далеко от зоны ну километра так 4. И вот в одну ночь ну так как я был торгашем я всеже договорился с подполковников, не помню как его зовут, что я смогу на 2 часа в конвое съездить домой повидать родственников, за это он сменя требовал 2000 долларов! Ну что делать я согласился и мы поехали. Приехав домой никаких родственников у меня уже не было, даже не заю куда они пропали, отдал деньги майору который меня сопровождал и тут возле раковины увидал я нож, когда в дверь кто то потучал майор оглянулся, два солдата, сопровождающих меня, подошли к двери, открыли а там никого. Я в это время вспомнил что у меня под раковиной пистолет, тихо нашарив пистолет я выскочил и в это время они стояли все у двери и выстрелил.< /text >
< /string>
< string >
< text >И что дальше?< /text >
< /string>

Читайте также: