Последнее на форуме

Уникальные вещи Шустрого (1152)
Ответил Genrybop 00:13:57

"Тайные Тропы 2". Обсуждение мода (150)
Ответил myjayl 11:22:11

Вопросы и ответы (Моды) (735)
Ответил sal777 17:57:03

Досчитай до 10000 [v.4.0] (3743)
Ответил Letopisec 18:32:57

Бар «100 рентген» v.28 (3107)
Ответил Фенрир 15:07:44

Люди говорят

kir_420 ответил в Подборка лучших фильмов про Постапокалипсис (20:26:00)
Дорога, письма мертвого человека.... гдье?

PUPS2 ответил в Вещи погибшего (13:00:55)
Блин, полгода ждал продолжения. Просто немного коротковато, для того что бы оценить по достоинству. Определённо интригует, есть "изюминка". Так что там дальше? Или уже "запал" прошёл? Зря. "Накидывая" расказы, мы можем натолкнуть режиссёров на очень интересный сюжет, который в свою очередь, может заставить ("свербить") талантливых людей сварганить С2.
Желаю удачи.

thestrelok220 ответил в Военный корреспондент 2: Зов Донбасса (15:52:58)
ЩА заценим)

geek580 ответил в Remake (15:02:35)
Ссылка нерабочая, пишет, что нет такой папки.

Oshiro ответил в Смерти Вопреки. В паутине лжи. (00:09:54)
Отличная игра. Создателям огромное спасибо!
Жаль нельзя было прокачать M4 и HK416 я так и не встретил.

Страница 1 из 11
Архив - только для чтения
Модератор форума: FAN, V@Dik008 
Форум настоящего сталкера » Техническая поддержка » Свалка » Создание новых диалогов
Создание новых диалогов
# 1
Воскресенье, 30.03.2008, 22:32:37

Ранг: Охотник
Сообщений: 593
Награды: 12
Репутация: 268 Регистрация: 29.03.2008 Город: Пенза    

Создание новых веток диалогов
Теория
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

<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_done_blockpost_box</actor_dialog>В свою очередь каждая ветка диалога также может ветвится.

2) Ветвление диалогов прописывается уже в других файлах.

Например, ветвление диалога с Сидоровичем содержится в файле gamedata/config/gameplay/dialogs_escape.xml Возьмем оттуда, например, ветвление escape_trader_jobs.

Ветвление имеет довольно большие масштабы, поэтому приведу только часть:

<dialog id="escape_trader_talk_info">
<precondition>escape_dialog.trader_has_talk_info_wr</precondition>
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id="1">
<text>escape_trader_talk_info_1</text>
<next>100</next>
<next>99</next>
<next>9995</next>
</phrase>
...
<phrase id="0">
<text>escape_trader_talk_info_0</text>
<next>1</next>
</phrase>
</phrase_list>
</dialog>Здесь <precondition>…</precondition> - это проверка выполнения условия. Ветка появится в диалоге, только если условие выполняется. Конкретно <precondition>escape_dialog.trader_has_talk_info_wr</precondition> из ветки 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То есть, судя по его структуре, <precondition>escape_dialog.trader_has_talk_info_wr</precondition> выполняется всегда, т.к. функция всегда возвращает истину и <dialog id="escape_trader_talk_info"> пропускается в списк реплик.

Но для конкретной ветки может быть несколько precondition и других условий.

Далее, <has_info>tutorial_end</has_info> - это еще одна проверка, на этот раз на наличие у игрока так называемых infoportions, выдаваемы в процессе ключевых диалогов. В данном случае это проверка на то, закончена ли определенная стадия туториала, или нет. Т.е. ветка допустится в список реплик если стадия туториала закончена.

Более детально мы это разберем в конце статьи.

А далее идут конкретные фразы, содержащие ссылки на вытекающие фразы, например:

<phrase id="0">
<text>escape_trader_talk_info_0</text>
<next>1</next>
</phrase>Это основа ветки escape_trader_talk_info.

Важно! В любой основной ветке любого диалога фраза <phrase id="0"> будет основой, из которой далее будет все вытекать. Она должна обязательно присутствовать и в вашем диалоге.

<next>1</next> - это ссылка на вытекающую фразу <phrase id="1">:

<phrase id="1">
<text>escape_trader_talk_info_1</text>
<next>100</next>
<next>99</next>
<next>9995</next>
</phrase>В свою очередь <next>100</next>, <next>99</next>, <next>9995</next> это ссылки на фразы веточки растущие из фразы <phrase id="1">.

3) Текст каждой фразы содержится в третьем файле. Для диалога с Сидоровичем тексты лежат в файле gamedata/config/text/rus/stable_dialogs_escape.xml

<string id="escape_trader_talk_info_0">
<text>Есть несколько вопросов.</text>
</string>
<string id="escape_trader_talk_info_1">
<text>Спрашивай, только я ведь всего не знаю. Сам понимаешь, сижу тут
целыми днями, а жизнь - она вся там, снаружи, в Зоне. Могу рассказать о Зоне вообще, а немного
могу о ближайших окрестностях, где сам ходил.</text>
</string>
...Эти строки содержат тексты для фраз <phrase id="0"> и <phrase id="1">

Итого диалоги разложены по трем, а то и более файлам.





Правила форума S.T.A.L.K.E.R. GSC
# 2
Воскресенье, 30.03.2008, 22:32:54

Ранг: Охотник
Сообщений: 593
Награды: 12
Репутация: 268 Регистрация: 29.03.2008 Город: Пенза    

Да кстати, путь по веткам может быть зацикленным, если того требует диалог. Например так:

<phrase id="0">
<text>...</text>
<next>1</next>
<next>2</next>
</phrase>
<phrase id="1">
<text>...</text>
<next>11</next>
<next>12</next>
</phrase>
<phrase id="11">
<text>...</text>
<next>1</next> - Это возврат к фразе №1 (зацикливание)
<next>111</next>
</phrase>Практика
Добавим в диалог с Сидоровичем ветку своего собственного изготовления.Например такую:

Меченый: Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые?
Сидорович: Чего?!
Меченый: Ты их совсем, совсем не кормишь?
Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то
мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.Для этого:

1) В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для trader припишем свою ветку с произвольным названием. Это будет, например, <actor_dialog>escape_trader_letat_gusi</actor_dialog>.

Т.е у нас получится так:

<specific_character id="escape_trader" no_random = "1">
...
<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_done_blockpost_box</actor_dialog>
<actor_dialog>escape_trader_letat_gusi</actor_dialog>
</specific_character>
…Записываем изменения, с этим файлом пока всё.

2) Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml

Диалогу:

Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые?
Сидорович: Чего?!!
Меченый: Ты их совсем, совсем не кормишь?
Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то
мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.Будет соответствовать такая структура:

<phrase id="0">
<text>escape_trader_letat_gusi_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_letat_gusi_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text> escape_trader_letat_gusi_2</text>
<next>3</next>
</phrase>
<phrase id="3">
<text> escape_trader_letat_gusi_3</text>
</phrase>Условия наличия ветки в диалоге можно взять из ветки <dialog id="escape_trader_talk_info">.

Т.е берем условия <precondition>escape_dialog.trader_has_talk_info_wr</precondition> и <has_info>tutorial_end</has_info>. Можно было, конечно, прописать в скрипте еще одно условие для ветки, чтобы она появилась только один раз, а потом больше не возникала. Но об этом как-нибудь позже.

В итоге у нас получилась такая структура:

<dialog id="escape_trader_letat_gusi">
<precondition>escape_dialog.trader_has_talk_info_wr</precondition>
<has_info>tutorial_end</has_info>
<phrase_list>
<phrase id="0">
<text>escape_trader_letat_gusi_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_letat_gusi_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text> escape_trader_letat_gusi_2</text>
<next>3</next>
</phrase>
<phrase id="3">
<text> escape_trader_letat_gusi_3</text>
</phrase>
</phrase_list>
</dialog>Её нужно вставить в любом месте между dialog id'ами других веток в файле dialogs_escape.xml. Главное - не промахнутся и засунуть именно между, а не внутрь одного из dialog id.

После сохранения внесенных изменений с файлом dialogs_escape.xml все.





Правила форума S.T.A.L.K.E.R. GSC
# 3
Воскресенье, 30.03.2008, 22:33:08

Ранг: Охотник
Сообщений: 593
Награды: 12
Репутация: 268 Регистрация: 29.03.2008 Город: Пенза    

) Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml

Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию:

<string id="escape_trader_letat_gusi_0">
<text>Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые?</text>
</string>
<string id="escape_trader_letat_gusi_1">
<text>Чего?!</text>
</string>
<string id="escape_trader_letat_gusi_2">
<text>Ты их совсем, совсем не кормишь?</text>
</string>
<string id="escape_trader_letat_gusi_3">
<text>В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше
антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился...
Шутник.</text>
</string>

В любом месте между уже существующими string id. После сохранения изменений, у нас все готово. Можно загружать игру и смотреть что получилось.

Дополнительно
Внимание! После патча 1.002 данный урок перестал работать. Причина - со вторым патчем несовместимо это условие:

<precondition>escape_dialog.trader_has_talk_info_wr</precondition>Дело в том, что во втором патче из файла escape_dialog.script была удалена функция:

function trader_has_talk_info_wr( trader, actor )
return true
endМожно либо записать эту функцию обратно в escape_dialog.script, либо использовать другие более-менее подходящие условия, например:

<precondition>escape_dialog.trader_alredy_give_job</precondition>Всё. Мы научились писать простые диалоги.

© _sdk.stalker-game.ru





Правила форума S.T.A.L.K.E.R. GSC
# 4
Вторник, 05.06.2012, 14:19:59

Ранг: Новичок
Сообщений: 44
Награды: 2
Репутация: -5 Регистрация: 27.05.2012 Город: Минск    

Спасибо за тему! Всё прекрасно получилось! B)


☺ - мой фирменный смайлик!
Неважно что ты делаешь, важно как ты делаешь!
Форум настоящего сталкера » Техническая поддержка » Свалка » Создание новых диалогов
Страница 1 из 11
Поиск:
Вверх