Создаем диалоги
Создание новых веток диалогов Теория 1) Списки веток диалогов содержатся в файлах вида gamedata/config/gameplay/character_desc_*.xml Это, например: character_desc_zombied.xml character_desc_stalker.xml character_desc_garbage.xml ... Файлы character_desc_*.xml можно сравнить со стволом дерева диалогов. В них перечисляется названия прикрепляемых веток диалогов Например вот список веток диалога с Сидоровичем взятый из файла character_desc_escape.xml escape_trader_start_dialog escape_trader_talk_info escape_trader_jobs tm_trader_dialog tm_trader_reward escape_trader_done_blockpost_box В свою очередь каждая ветка диалога также может ветвится. 2) Ветвление диалогов прописывается уже в других файлах. Например, ветвление диалога с Сидоровичем содержится в файле gamedata/config/gameplay/dialogs_escape.xml Возьмем оттуда, например, ветвление escape_trader_jobs. Ветвление имеет довольно большие масштабы, поэтому приведу только часть: escape_dialog.trader_has_talk_info_wr tutorial_end escape_trader_talk_info_1 100 99 9995 ... escape_trader_talk_info_0 1 Здесь … - это проверка выполнения условия. Ветка появится в диалоге, только если условие выполняется. Конкретно escape_dialog.trader_has_talk_info_wr из ветки escape_trader_talk_info - это обращение к функции trader_has_talk_info_wr, находящейся в файле скрипте gamedata/scripts/escape_dialog.script Функция выглядит так: function trader_has_talk_info_wr( trader, actor ) return true end То есть, судя по его структуре, escape_dialog.trader_has_talk_info_wr выполняется всегда, т.к. функция всегда возвращает истину и пропускается в списк реплик. Но для конкретной ветки может быть несколько precondition и других условий. Далее, tutorial_end - это еще одна проверка, на этот раз на наличие у игрока так называемых infoportions, выдаваемы в процессе ключевых диалогов. В данном случае это проверка на то, закончена ли определенная стадия туториала, или нет. Т.е. ветка допустится в список реплик если стадия туториала закончена. Более детально мы это разберем в конце статьи. А далее идут конкретные фразы, содержащие ссылки на вытекающие фразы, например: escape_trader_talk_info_0 1 Это основа ветки escape_trader_talk_info. Важно! В любой основной ветке любого диалога фраза будет основой, из которой далее будет все вытекать. Она должна обязательно присутствовать и в вашем диалоге. 1 - это ссылка на вытекающую фразу : escape_trader_talk_info_1 100 99 9995 В свою очередь 100 , 99 , 9995 это ссылки на фразы веточки растущие из фразы . 3) Текст каждой фразы содержится в третьем файле. Для диалога с Сидоровичем тексты лежат в файле gamedata/config/text/rus/stable_dialogs_escape.xml Есть несколько вопросов. Спрашивай, только я ведь всего не знаю. Сам понимаешь, сижу тут целыми днями, а жизнь - она вся там, снаружи, в Зоне. Могу рассказать о Зоне вообще, а немного могу о ближайших окрестностях, где сам ходил. ... Эти строки содержат тексты для фраз и Итого диалоги разложены по трем, а то и более файлам. Да кстати, путь по веткам может быть зацикленным, если того требует диалог. Например так: ... 1 2 ... 11 12 ... 1 - Это возврат к фразе №1 (зацикливание) 111 Практика Добавим в диалог с Сидоровичем ветку своего собственного изготовления.Например такую: Меченый: Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые? Сидорович: Чего?! Меченый: Ты их совсем, совсем не кормишь? Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник. Для этого: 1) В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для trader припишем свою ветку с произвольным названием. Это будет, например, escape_trader_letat_gusi . Т.е у нас получится так: ... escape_trader_start_dialog escape_trader_talk_info escape_trader_jobs tm_trader_dialog tm_trader_reward escape_trader_done_blockpost_box escape_trader_letat_gusi … Записываем изменения, с этим файлом пока всё. 2) Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml Диалогу: Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые? Сидорович: Чего?!! Меченый: Ты их совсем, совсем не кормишь? Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник. Будет соответствовать такая структура: escape_trader_letat_gusi_0 1 escape_trader_letat_gusi_1 2 escape_trader_letat_gusi_2 3 escape_trader_letat_gusi_3 Условия наличия ветки в диалоге можно взять из ветки . Т.е берем условия escape_dialog.trader_has_talk_info_wr и tutorial_end . Можно было, конечно, прописать в скрипте еще одно условие для ветки, чтобы она появилась только один раз, а потом больше не возникала. Но об этом как-нибудь позже. В итоге у нас получилась такая структура: escape_dialog.trader_has_talk_info_wr tutorial_end escape_trader_letat_gusi_0 1 escape_trader_letat_gusi_1 2 escape_trader_letat_gusi_2 3 escape_trader_letat_gusi_3 Её нужно вставить в любом месте между dialog id'ами других веток в файле dialogs_escape.xml. Главное - не промахнутся и засунуть именно между, а не внутрь одного из dialog id. После сохранения внесенных изменений с файлом dialogs_escape.xml все. 3) Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию: Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые? Чего?! Ты их совсем, совсем не кормишь? В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник. В любом месте между уже существующими string id. После сохранения изменений, у нас все готово. Можно загружать игру и смотреть что получилось. Если вы сделали всё правильно,но при обращении к НПЦ вылетает с таким логом Expression : no_assert Function : CXML_IdToIndex::GetById File : e:\stalker\patch_1_0004\xr_3da\xrgame\xml_str_id_loader.h Line : 112 Description : item not found, id Arguments : escape_trader_letat_gusi Создайте свой файл и назовите его как душе угодно,пример: letat_gusi_my_test.xml Впишите туда:
escape_dialog.trader_has_talk_info_wr
tutorial_end
escape_trader_letat_gusi_0
1
escape_trader_letat_gusi_1
2
escape_trader_letat_gusi_2
3
escape_trader_letat_gusi_3
Сохраните.Далее в gamedata\config\system.ltx добавьть в секцию [dialogs] название файла,который мы создали.Пример:
[dialogs]
files = ..., letat_gusi_my_test ,где ... список других файлов,letat_gusi_my_test - название вашего,нового файла.
Дополнительно
Внимание! После патча 1.002 данный урок перестал работать. Причина - со вторым патчем несовместимо это условие:
escape_dialog.trader_has_talk_info_wr
Дело в том, что во втором патче из файла escape_dialog.script была удалена функция:
function trader_has_talk_info_wr( trader, actor )
return true
end
Можно либо записать эту функцию обратно в escape_dialog.script, либо использовать другие более-менее подходящие условия, например:
escape_dialog.trader_alredy_give_job
Всё. Мы научились писать простые диалоги.
Категория: Информация, рассказы - все что касается STALKER | Добавил: ferr-um (01.05.2011)
| Автор: ferr-um E
Просмотров: 836
| Теги: информация для мододелов , модификации для сталкер , создаем диалоги в игре сталкер
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]
Статистика
Онлайн всего: 2
Гостей: 2
Пользователей: 0