Создание диалогов, Создание диалогов (BAC9-FLCL)

Материал из Mod Wiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 12:16, 25 июля 2007 (править)
BAC9-FLCL (Обсуждение | вклад)

← К предыдущему изменению
Текущая версия (12:17, 25 июля 2007) (править) (отменить)
BAC9-FLCL (Обсуждение | вклад)
Создание диалогов (BAC9-FLCL)» переименована в «Создание диалогов»)
 
Строка 1: Строка 1:
-__TOC__+#REDIRECT [[Создание диалогов]]
- +
-==Создание новых веток диалогов==+
-===Теория===+
- +
-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+
- +
-<pre> <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></pre>+
- +
-В свою очередь каждая ветка диалога также может ветвится.+
- +
-2) Ветвление диалогов прописывается уже в других файлах.+
- +
-Например, ветвление диалога с Сидоровичем содержится в файле gamedata/config/gameplay/dialogs_escape.xml+
-Возьмем оттуда, например, ветвление escape_trader_jobs.+
- +
-Ветвление имеет довольно большие масштабы, поэтому приведу только часть:+
- +
-<pre><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></pre>+
- +
-Здесь <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+
- +
-Функция выглядит так:+
- +
-<pre>function trader_has_talk_info_wr( trader, actor )+
- return true+
-end</pre>+
- +
-То есть, судя по его структуре, <precondition>escape_dialog.trader_has_talk_info_wr</precondition> выполняется всегда, т.к. функция всегда возвращает истину и <dialog id="escape_trader_talk_info"> пропускается в списк реплик.+
- +
-Но для конкретной ветки может быть несколько precondition и других условий.+
- +
-Далее, <has_info>tutorial_end</has_info> - это еще одна проверка, на этот раз на наличие у игрока так называемых infoportions, выдаваемы в процессе ключевых диалогов. В данном случае это проверка на то, закончена ли определенная стадия туториала, или нет. Т.е. ветка допустится в список реплик если стадия туториала закончена.+
- +
-Более детально мы это разберем в конце статьи.+
- +
-А далее идут конкретные фразы, содержащие ссылки на вытекающие фразы, например:+
- +
-<pre><phrase id="0">+
- <text>escape_trader_talk_info_0</text>+
- <next>1</next>+
-</phrase></pre>+
- +
-Это основа ветки escape_trader_talk_info. +
- +
-'''Важно!''' В любой основной ветке любого диалога фраза <phrase id="0"> будет основой, из которой далее будет все вытекать. Она должна обязательно присутствовать и в вашем диалоге.+
- +
-<next>1</next> - это ссылка на вытекающую фразу <phrase id="1">:+
- +
-<pre> <phrase id="1">+
- <text>escape_trader_talk_info_1</text>+
- <next>100</next>+
- <next>99</next>+
- <next>9995</next>+
- </phrase></pre>+
- +
-В свою очередь <next>100</next>, <next>99</next>, <next>9995</next> это ссылки на фразы веточки растущие из фразы <phrase id="1">. +
- +
-3) Текст каждой фразы содержится в третьем файле. Для диалога с Сидоровичем тексты лежат в файле gamedata/config/text/rus/stable_dialogs_escape.xml+
- +
-<pre> <string id="escape_trader_talk_info_0">+
- <text>Есть несколько вопросов.</text>+
- </string>+
- <string id="escape_trader_talk_info_1">+
- <text>Спрашивай, только я ведь всего не знаю. Сам понимаешь, сижу тут целыми днями, а жизнь - она вся там, +
-снаружи, в Зоне. Могу рассказать о Зоне вообще, а немного могу о ближайших окрестностях, где сам ходил.</text>+
- </string>+
- ...</pre>+
- +
-Эти строки содержат тексты для фраз <phrase id="0"> и <phrase id="1">+
- +
-Итого диалоги разложены по трем, а то и более файлам.+
- +
-Да кстати, путь по веткам может быть зацикленным, если того требует диалог. Например так:+
- +
-<pre><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></pre>+
- +
-===Практика===+
-Добавим в диалог с Сидоровичем ветку своего собственного изготовления.Например такую: +
- +
-<pre>+
-Меченый: Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые? +
-Сидорович: Чего?!+
-Меченый: Ты их совсем, совсем не кормишь?+
-Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже +
-до зеленых человечков долечился... Шутник.</pre>+
- +
-Для этого:+
- +
-1) В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для trader припишем свою ветку с произвольным названием. Это будет, например, <actor_dialog>escape_trader_letat_gusi</actor_dialog>.+
- +
-Т.е у нас получится так:+
- +
-<pre><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>+
- …</pre>+
-Записываем изменения, с этим файлом пока всё.+
- +
-2) Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml+
- +
-Диалогу:+
- +
-<pre>Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые? +
-Сидорович: Чего?!!+
-Меченый: Ты их совсем, совсем не кормишь?+
-Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже +
-до зеленых человечков долечился… Шутник.</pre>+
- +
-Будет соответствовать такая структура:+
- +
-<pre><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></pre>+
- +
-Условия наличия ветки в диалоге можно взять из ветки <dialog id="escape_trader_talk_info">.+
- +
-Т.е берем условия <precondition>escape_dialog.trader_has_talk_info_wr</precondition> и <has_info>tutorial_end</has_info>.+
-Можно было, конечно, прописать в скрипте еще одно условие для ветки, чтобы она появилась только один раз, а потом больше не возникала. Но об этом как-нибудь позже.+
- +
-В итоге у нас получилась такая структура:+
- +
-<pre><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></pre>+
- +
-Её нужно вставить в любом месте между dialog id'ами других веток в файле dialogs_escape.xml. Главное - не промахнутся и засунуть именно между, а не внутрь одного из dialog id.+
- +
-После сохранения внесенных изменений с файлом dialogs_escape.xml все.+
- +
-3) Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml+
- +
-Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию:+
- +
-<pre> <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></pre>+
- +
- +
-В любом месте между уже существующими string id.+
-После сохранения изменений, у нас все готово. Можно загружать игру и смотреть что получилось.+
- +
-===Дополнительно===+
- +
-'''Внимание!''' После патча 1.002 данный урок перестал работать. Причина - со вторым патчем несовместимо это условие:+
- +
-<pre><precondition>escape_dialog.trader_has_talk_info_wr</precondition></pre>+
- +
-Дело в том, что во втором патче из файла escape_dialog.script была удалена функция: +
- +
-<pre>function trader_has_talk_info_wr( trader, actor ) +
- return true +
-end</pre>+
- +
-Можно либо записать эту функцию обратно в escape_dialog.script, либо использовать другие более-менее подходящие условия, например:+
- +
-<pre><precondition>escape_dialog.trader_alredy_give_job</precondition></pre>+
- +
-Всё. Мы научились писать простые диалоги.+
- +
-==Авторы==+
- +
-Статья создана:+
- +
-* [[Участник:BAC9-FLCL|BAC9-FLCL]]+
-* [[Участник:Keha|Keha]]+
- +
-[[Категория:Статьи участников]]+

Текущая версия

  1. REDIRECT Создание диалогов
Личные инструменты