[Вход· Регистрация· Новые сообщения · Участники · Правила форума · Поиск · RSS ] |
|
Форум » Мастерская » Общее » Создание диалогов в ТЧ |
Создание диалогов в ТЧ |
Дата: Пятница, 23.06.2017, 15:23
Сообщение #1
Создание диалогов в ТЧ
Сегодня мы научимся создавать диалоги в игре. Для начала нам понадобится создать несколько файлов, которые будут нам нужны. В папке gamedata\config\gameplay\ создаем файл my_dialogs.xml В нем будут лежать наши конструкции с диалогами, которые можно будет усложнять, менять и т.д В папке gamedata\config\text\rus\ создаем файл table_my_dialogs.xml В нем будут находится непосредственно наши тексты с диалогами. Далее открываем файл gamedata\config\localization.ltx и через запятую пишем название нашего файла, где будут лежать сами тексты диалогов (без расширения!). Получится так: Цитата stable_game_credits, table_my_dialogs В данном случае, stable_game_credits писать не надо! Эта строка есть, показал просто как надо дописывать свой файл. Далее открываем файл gamedata\config\system.ltx и находим там такие строчки: Цитата [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). Получится так: Цитата dialogs_aes, my_dialogs Все, с регистрацией файлов в игре мы закончили, теперь перейдем к написанию текста диалога. Для этого открываем наш созданный файл table_my_dialogs.xml и первым делом в него пишем такую конструкцию: Код <?xml version="1.0" encoding="windows-1251" ?> <string_table> ............ </string_table> Вместо точек будут наши тексты. Приступим. При написании текста, нужно знать некоторые правила его написания. Дело не в орфографии (хотя и она не маловажна, ошибка в тегах недопустима!). Любой текст диалога начинается со строчки Код <string id="my_dialogs_01"> Где фраза my_dialogs_01 заключенная в кавычки является идентификатором нашей фразы. Далее идет наша фраза заключенная в тег Код <text>...</text> Заканчивается фраза тегом Код </string> Отсутствие этого тега, либо ошибка в других - чревата вылетами, с руганью на синтаксис файла. Так что рекомендую использовать программы с подсветкой (Notepad++ вещь незаменимая). Напишем простой диалог из 7 фраз: Код <string id="my_dialogs_01"> <text>Здравствуйте профессор...Как у вас дела?</text> </string> <string id="my_dialogs_02"> <text>Здравствуйте Меченый. Дела у меня отлично, очень скоро наверно смогу создать артефакт в искусственных условиях...</text> </string> <string id="my_dialogs_03"> <text>И у меня отлично, буду ждать результатов!</text> </string> <string id="my_dialogs_04"> <text>Постойте Стрелок...Недавно к нам прилетал вертолет, искали вас какие то люди...</text> </string> <string id="my_dialogs_05"> <text>Ох профессор, они не сказали зачем я им?</text> </string> <string id="my_dialogs_06"> <text>Увы нет, обмолвились только, что будут ждать вас, если вы объявитесь, у входа в комплекс.</text> </string> <string id="my_dialogs_07"> <text>Ну что же, пойду проведаю их.</text> </string> Итак, текст диалога готов, осталась вторая часть. Открываем наш файл my_dialogs.xml, также пишем сначала в него такую конструкцию: Код <?xml version="1.0" encoding="windows-1251" ?> <game_dialogs> ......... </game_dialogs> Вместо точек, будет наша конструкция - скелет диалога. Начинаем его писать: Код <dialog id="my_dialog_start"> <phrase_list> <phrase id="0"> <text>my_dialogs_01</text> <next>1</next> </phrase> <phrase id="1"> <text>my_dialogs_02</text> <next>2</next> </phrase> <phrase id="2"> <text>my_dialogs_03</text> <next>3</next> </phrase> <phrase id="3"> <text>my_dialogs_04</text> <next>4</next> </phrase> <phrase id="4"> <text>my_dialogs_05</text> <next>5</next> </phrase> <phrase id="5"> <text>my_dialogs_06</text> <next>6</next> </phrase> <phrase id="6"> <text>my_dialogs_07</text> </phrase> </phrase_list> </dialog> Разберем эту конструкцию: my_dialog_start - это идентификатор всего диалога (не отдельных фраз). Данный идентификатор понадобится нам позже. Код <phrase id="0"> Код <text>my_dialogs_01</text> Код <next>1</next> Код <phrase id="1"> Код </phrase> Скелет диалога готов, однако радоваться еще рано. Нужно прописать кому нибудь наше диалог - сам он там не появится. Для этого открываем профиль какого нибудь НПС (я открою профиль Сахарова, ведь диалог будет с ним...). Идем в файл gamedata\config\gameplay\character_desc_yantar.xml, там находим профиль Сахарова (самый первый). И прописываем ему наш диалог в формате: Код <actor_dialog>my_dialog_start</actor_dialog> Где 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 Наличие двух фраз Код <next>5</next> <next>6</next> в скелете диалога позволит нам создать разветвления в диалоге. Т.е например на одну и ту же фразу, можно будет ответить несколькими вариантами. Некоторые полезные "ф-ии" для диалогов: Код <action>dialogs.break_dialog</action> Код <phrase id="6"> <text>my_dialogs_07</text> <action>dialogs.break_dialog</action> </phrase> Т.е после появления 6-й фразы, окно диалога само закроется. Полезно в случаях, когда есть несколько вариантов ответа на фразу и один из ответов - отрицательный. Диалог исчезнет после того, как будет прочитан. В начале ставим проверку на выданный поршень, например: Код <dialog id="my_dialog_start"> <dont_has_info>dialog_end</dont_has_info> А в конце какой нибудь фразы, ставим выдачу этого поршня. Пример: Код <phrase id="6"> <text>my_dialogs_07</text> <give_info>dialog_end</give_info> </phrase> Как только мы прочитаем диалог, на последней фразе игроку будет выдан поршень, при наличии которого (проверка в начале) - диалог больше не появится. Не забываем, обязательно, зарегистрировать наш поршень (dialog_end) в файле gamedata\config\gameplay\info_portions.xml (либо в любом другом, начинающимся с info_...) Пример: Код <info_portion id="dialog_end"></info_portion> Условие для появления диалога. Например нам надо сделать так, чтобы диалог появлялся только после того, как будет прочитан какой нибудь другой. Делается это просто. В начало нашего диалога ставится проверка на поршень: Код <has_info>dialog_go</has_info> Сам поршень выдаем там, где нужно. Т.е пока у нас нет поршня - диалог не появится в списке. Выдача поршня есть в предыдущем примере. Не забываем свой новый поршень, предварительно зарегистрировать. Дополнительно: Код dialogs.break_dialog Является уже поумолчанию зарегистрированной в файлах игры и её нет необходимости по новой регистрировать. Код <dont_has_info>dialog_end</dont_has_info> Подразумевает под собой ситуацию, когда указанный внутри поршень не запускался или был принудительно перед этим "обнулён", происходит "пропускание" к диалогу, если выполнена не пропускает. При чём, в случае желания закрыть диалог, не обязательно регистрировать отдельный поршень, а использовать уже имеющиеся, т.е. такие, которые выдаются по выполнении каких-то событий в игре (квестовых и иных). Допустим, в конце данного диалога мы запускаем поршень, указанный внутри (в данном случае "dialog_end"), который, к примеру, является завершеним некого квеста. Код <has_info>dialog_go</has_info> Эта же "конструкция" является антиподом, указанной выше. Т.е., (о чём уже указывалось)если поршень запускался - пропускает к диалогу, не запускался - не пропускает к диалогу. Этими двумя "конструкциями", используя их одновременно, можно отслеживать массу ситуаций по условиям запуска диалога на экран. Короме того, вкупе с этим иногда очень полезно использовать: Код <precondition>имя скриптового файла.имя функции из этого файла</precondition> В данном случае производится проверка истинности условий указанных в функции. Если "истина", диалог запускается, если "нет" - не запускается. Думаю, позже тут будут рассмотрены различные моменты запуска поршней и функций в скелете диалога и другие некоторые "тонкости" написания текстов. ![]() Тема помощи по модам, битые ссылки и другое, группа ВКонтакте, Чёрный Сталкер ![]() |
| |||
| |||