Перейти к содержанию
Hardtmuth

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

Рекомендуемые сообщения

 

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

Автор: R.I.C.K.(KAIL)

Спойлер

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

Что потребуется:

  • character_desc_локация.xml
  • dialogs_локация.xml
  • stable_dialogs_локация.xml

Заходим в character_desc_локация.xml я выбрал character_desc_escape.xml и ищем торговца и в низу есть такие строки:


<start_dialog>hello_dialog</start_dialog> - какой то диалог приветствия
<actor_dialog>esc_trader_queshion_actor</actor_dialog> - наш диалог

все сохраняем.

Теперь заходим в dialogs_локация.xml, я выбрал dialogs_escape.xml:
Нужно создать скелет диалога. В самом низу начинаем писать перед словом </dialogs>:


<dialog id="esc_trader_queshion_actor"> -- название диалога должно быть как писали в character_desc_локация
<dont_has_info>esc_trader_queshion_actor</dont_has_info>
<phrase_list> - скелет
<phrase id="0"> - первый айди
<text>esc_trader_queshion_0</text> - первая фраза актера типо ответь на мои вопросы
<next>1</next> -- переходим к следующей фразе
</phrase>
<phrase id="1"> - следующий айди как писали в next
<text>esc_trader_queshion_1</text> - фраза торговца типо Спрашивай только всего я знать не могу
<next>2</next> -- вот тут переходим к следующим ветвям то есть развлетвление диалога можно спросить 3 вопроса
<next>4</next>
<next>8</next>
</phrase>
<phrase id="2">
<text>esc_trader_queshion_2</text> - расксажи мне о себе актер
<next>3</next> - что тебе расказать торговец
</phrase>
<phrase id="3">
<text>esc_trader_queshion_3</text>
</phrase>
<phrase id="4">
<text>esc_trader_queshion_4</text> -- вопрос 2 расскажи мне о зоне
<next>5</next> -- зона огромная дыра
</phrase>
<phrase id="5">
<text>esc_trader_queshion_5</text>
<next>6</next>
</phrase>
<phrase id="6">
<text>esc_trader_queshion_6</text>
<next>7</next>
</phrase>
<phrase id="7">
<text>esc_trader_queshion_7</text>
</phrase>
<phrase id="8">
<text>esc_trader_queshion_8</text> расскажи про исполнитель желаний
<next>9</next>
</phrase>
<phrase id="9">
<text>esc_trader_queshion_9</text> в двух словах сизам откройся вот и желание
</phrase>
</phrase_list>
</dialog>

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

Заходим в stable_dialogs_локация.xml, я выбрал stable_dialogs_escape.xml и пишем:


<string id="esc_trader_queshion_0">
<text>Мне нужны ответы на некоторые вопросы?</text>
</string>
<string id="esc_trader_queshion_1">
<text>Задавай помогу чем смогу</text>
</string>
<string id="esc_trader_queshion_2">
<text>Кто такой сталкер по прозвищу Клык?</text>
</string>
<string id="esc_trader_queshion_3">
<text>Хм где-то я слышал, а Клык это легенда зоны один из бойцов группы стрелка группа стрелка была в центре зоны и даже умудрились выжить, его часто видели в баре, год назад он был у меня интересовался редкими деталями а где он щас понять неимею.</text>
</string>
<string id="esc_trader_queshion_4">
<text>Расскажи О бармене.</text>
</string>
<string id="esc_trader_queshion_5">
<text>да что расказывать бармен и бармен, он находится в баре сто ренген, у него можно купить снаряжение ну и спросить насчет работы.</text>
</string>
<string id="esc_trader_queshion_6">
<text>а что за работу он может предложить </text>
</string>
<string id="esc_trader_queshion_7">
<text>разную от работы найти ценый артфекат до работы убить стаю мутантов или отнести ценый груз.</text>
</string>
<string id="esc_trader_queshion_8">
<text>что за лагерь тут неподалеку </text>
</string>
<string id="esc_trader_queshion_9">
<text>А это сдешний лагерь новичов, главный у них волк следит за порядком, если хочешь можешь пойти с ним поговорить ну или сместными сталкерами из лагеря поговорить, только они мало тебе что скажут так как там все практически зеленые</text>
</string>

Ну вот и все мы написали диалог. В следующем уроке мы напишем диалог с условием.


Спойлер

Cегодня создадим сложный диалог с двумя вариантами ответа и условием, допустим вам надо расспросить персонажа о чем то важном но он не хочет просто так говорить и за информацию требует "принеси мне водку тогда и расскажу".

Что потребуется:

  • dialogs_new.script
  • character_desc_локация.xml
  • dialogs_локация.xml
  • info_l-локация.xml
  • stable_dialogs_локация.xml

И так создаем скрипт в папке scripts с названием dialogs_new.script, и пишем функцию\условие:


-пропуск охраника
function have_vodka(first_speaker, second_speaker) -- функция имеет ли актер в инвентаре 1 бутылку водки
return first_speaker:object("vodka") ~= nil
end

function give_vodka(first_speaker, second_speaker) -- функция передаем предмет персонажу
dialogs.relocate_item_section(second_speaker, "vodka", "out")
end

Все закончили, сохраняем.

Далее заходим в character_desc_локация.xml, находим вашего персонажа, а конкретнее его профиль:


#include "gameplay\character_food.xml"
</supplies>

#include "gameplay\character_criticals_3.xml"
<!--<actor_dialog>dialog_helo</actor_dialog> -- какий то диалоги
<actor_dialog>kuda_otvesti</actor_dialog>-->
<actor_dialog>spawn_npc1_wpn_pm_m1_quest</actor_dialog>
<actor_dialog>spawn_npc1_wpn_pm_m1_quest_completed</actor_dialog>
<actor_dialog>dialog_who</actor_dialog>
<actor_dialog>esc_talk_item</actor_dialog> -- наш диалог
</specific_character>

Все сохраняем далее напишем скелет диалога.

Идем в файл dialogs_Локация.xml и после слова:


</dialogs>

пишем


<dialog id="esc_talk_item">
<has_info>new_info</has_info>-- вставить сдесь
<dont_has_info>esc_talk_item</dont_has_info>
<phrase_list>
<phrase id="0">
<text>esc_talk_item_0</text> --1-ая фраза актера
<next>1</next>
</phrase>
<phrase id="1">
<text>esc_talk_item_1</text> -- ответ персонажа
<next>2</next> - переходим к следующей фразе
</phrase>
<phrase id="2">
<text>esc_talk_item_2</text>
<next>3</next>
</phrase>
<phrase id="3">
<text>esc_talk_item_3</text>
<next>4</next>
</phrase>
<phrase id="4">
<text>esc_talk_item_4</text>
<next>5</next>
</phrase>
<phrase id="5">
<text>esc_talk_item_5</text>
<next>6</next>
</phrase>
<phrase id="6">
<text>esc_talk_item_6</text>
</phrase>
<phrase id="7">
<text>esc_talk_item_7</text>
<next>8</next>
<next>10</next>
</phrase>
<phrase id="8">
<text>esc_talk_item_8</text>
<precondition>dialogs_new.have_vodka</precondition> -- условие из скрипта
<action>dialogs_new.give_vodka</action> - активируем отдачу предмета из скрипта
<next>9</next>
<phrase id="9">
<text>trader_ohranik_whois_9</text>
<give_info>esc_talk_item</give_info> - вставим сдесь все после фразы персонажа когда он раскажет о докторе диалог завершаем
</phrase>
<phrase id="10">
<text>esc_talk_item_10</text>
<next>11</next>
</phrase>
<phrase id="11">
<text>esc_talk_item_11</text>
<next>12</next>
</phrase>
<phrase id="12">
<text>esc_talk_item_12</text> --понял
<action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>

Так скелет написали. Так напишем инфопоршень.

Если хотите что бы ваш диалог активировался по инфопоршню напишите так:


<has_info>new_info</has_info>

Идем в info_l-локация.xml и пишем:


<info_portion id="esc_talk_item"></info_portion>

Если хотите что бы ваш диалог больше не появился то выдадим инфопоршень


<give_info>esc_talk_item</give_info>

Ну вот и все остался текст написать.

Идем сюда stable_dialogs_локация.xml, открываем и пишем:


<string id="esc_talk_item_0">
<text>Мне нужна кое какая информация.</text>
</string>
<string id="esc_talk_item_1">
<text>Что имено тебе расказать.</text>
</string>
<string id="esc_talk_item_2">
<text>Ты знаешь кто такой сталкер Доктор.</text>
</string>
<string id="esc_talk_item_3">
<text>Знаю но просто так нераскажу.</text>
</string>
<string id="esc_talk_item_4">
<text>Хорошо что ты хочешь за информацию.</text>
</string>
<string id="esc_talk_item_5">
<text>Принеси мне бутылку водки тогда и поговорим.</text>
</string>
<string id="esc_talk_item_6">
<text>Хорошо.</text>
</string>
<string id="esc_talk_item_7">
<text>Ну все я жду.</text>
</string>
<string id="esc_talk_item_8">
<text>Вот твоя водка.</text>
</string>
<string id="esc_talk_item_9">
<text>Отлично попозже будет чем раслабится, что насчет доктора где его найти знает только стрелок, доктор один из первых сталкеров кто пришол в зону он лечит сталкеров от облучений радиацией , а также некоторых мутантов зоны, также вроде слышал слух что доктор бывший военый мол он пришол в зону с отрядом военых когда зона только образовалась, доктор и другие военые охраняли периметр.</text>
</string>
<string id="esc_talk_item_10">
<text>Уменя к сожелению нет водки.</text>
</string>
</string>
<string id="esc_talk_item_11">
<text>Ну тогда и разговора нет, когда принесешь тогда и поговорим.</text>
</string>
<string id="esc_talk_item_12">
<text>Понял.</text>
</string>

Ну вот и все мы закончили наш диалог. 

 

  • Лайк 1
  • Мастер! 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

А что, через диалог едитор нельзя создать тоже самое? Там же программным путем можно всё сделать гораздо проще и быстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Мда... всё меняется, не меняется только замысел этой темы. Тишина

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel урок может быть был написан до слива инструментария. Да и некоторые мододелы просто предпочитают сами диалоги писать напрямую в хмл. А так, ДЕ конечно удобнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Invincible но автор темы то здесь с 2020г, неужели нельзя было поинтересоваться о инструментарии и о том, что с 2013г как минимум существует DE. Я уроки даже в 2013 Непряхина качал по этому делу чтобы не потерять и вот только пару дней назад решил посмотреть и разобраться, а тут такое...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel Ну начнем с того, что никто не обязан делать уроки. http://stalkerin.gameru.net/wiki/index.php?title=DialogEditor вот ссылка на гайд по ДЕ. Закончим тем, что аппро это не Вики по моддингу, тут просто народ в пределах своих сил что-то выкладывает . Поэтому фразы "неужели не" "да как так" "а почему" тут не уместны. Есть урок - хорошо. Нет урока - ищем в других местах.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Invincible я требую продолжения банкета в этой теме!) сть ли какие-нибудь туторы по тому как активировать функции и скрипты через диалог? Я только вчера научился точку перехода делать с локации на локацию, а хочется еще что-нибудь узнать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Pepel Так об этом тоже расписано:

В 21.07.2020 в 19:07, Hardtmuth сказал:

<phrase id="8"> 
  <text>esc_talk_item_8</text> 
  <precondition>dialogs_new.have_vodka</precondition> -- условие из скрипта 
  <action>dialogs_new.give_vodka</action> - активируем отдачу предмета из скрипта 
  <next>9</next>

 

а сам скрипт находится в файле dialogs_new.script:

В 21.07.2020 в 19:07, Hardtmuth сказал:

-пропуск охраника
function have_vodka(first_speaker, second_speaker) -- функция имеет ли актер в инвентаре 1 бутылку водки
return first_speaker:object("vodka") ~= nil
end

function give_vodka(first_speaker, second_speaker) -- функция передаем предмет персонажу
dialogs.relocate_item_section(second_speaker, "vodka", "out")
end

 

Просто по аналогии подставляешь свой скрипт, только смотри, чтоб сигнатура функции была подходящая (обязательно строго 2 аргумента - first_speaker и second_speaker, и вроде как можно переименовывать их, но главное, чтоб их было 2).

Ну а если нужно что-то наоборот (начало диалога по скрипту), то тут не подскажу. Можно реализацию такого подсмотреть в каком-нибудь моде или даже где-то в оригиналах, то там точно без правки спавна не обойтись вроде как.

Ну и кстати, если что, DE из состава SDK не единственная программа для создания диалогов. Кому как, а мне удобнее всего пользоваться DE от RoH. 

 

Изменено пользователем Prostomod
  • Мастер! 1

Мод в разработке - X-7: Эпицентр

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Prostomod копаться в чужом моде - такое себе занятие, они там наворотят, а ты поди разберись) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
5 минут назад, Pepel сказал:

копаться в чужом моде

Ну, к сожалению, это единственный мне известный способ изучения реализации каких-то сложных фич (если не брать в расчёт перманентное нервирование вопросницы по любому чиху). О самых основах можно узнать из каких-нибудь туториалов, а дальше только подробное изучение чужих наработок.

Изменено пользователем Prostomod
  • Мастер! 1

Мод в разработке - X-7: Эпицентр

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
14 минут назад, Prostomod сказал:

Ну и кстати, если что, DE из состава SDK не единственная программа для создания диалогов. Кому как, а мне удобнее всего пользоваться DE от RoH. 

Спасибо! Попробую!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу