Улучшенная система диалогов

Обновление нашего предыдущего проекта, что даст возможность выстраивать более сложные цепочки диалогов. Например, у нас есть квест , суть которого в том, что игроку нужно обойти несколько персонажей и с каждым поговорить, а затем вернуться и поговорить с тем кто дал этот квест. Конкретно в этом случаи, нам нужно отслеживать четыре стадии квеста: активность, выполнение, отказ или провал, и сдача квеста. Но могут быть и другие ситуации, а соответственно нужны и иные возможности. Если прошлая версия системы диалогов, была ограничена тремя состояниями квеста, то теперь можно отслеживать цепочку диалога.

Данная версия, является улучшением Квестовой системы диалогов. Если ранее вы не использовали нашу систему, то рекомендуем сначала ознакомиться с прошлой версией.

Главное отличие, что теперь через атрибут можно отправлять любое значение типа int.

Пример диалога:

<dialogue>
  <node id="0" npc="Хмм...">
    <answer text="Как дела?" node="1" />
    <answer text="Ты можешь одолжить пару копеек?" node="2" value="1" quest="TestQuest" />
    <answer text="Пока." exit="True" />
  </node>
  <node id="1" npc="Неплохо">
    <answer text="Понятно" node="0" />
  </node>
  <node id="2" npc="Да, без проблем, вот.">
    <answer text="Пасиб" exit="True" value="1" set="1" quest="TestQuest" />
  </node>
</dialogue>

Для тега answer используются следующие атрибуты:

node - перенаправление на указанный идентификатор узла. (исключает атрибут exit)

exit - закрывает окно диалога. (исключает атрибут node)

quest - имя квеста с который нужно взаимодействовать, это обязательный атрибут, если указаны ниже следующие.

value - строка диалога будет показана, если прогресс квеста строго соответствует указанному значению. (исключает атрибут greater)

greater - строка диалога будет показана только если прогресс квеста больше или равен, указанному значению (исключает атрибут value)

set - отправка менеджеру квестов значения для конкретного квеста.

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

Скачать проект:

Внимание! Посетители, находящиеся в группе Гости, не могут скачивать файлы.
Тестировалось на: Unity 5.6.0

Комментариев 8

Офлайн
Light 8 декабря 2018
siriusspark, ошибка указывает на то, что нет ссылки на объект. Где-то что-то было нарушено, смотри оригинальный проект внимательно.
Офлайн
siriusspark 8 декабря 2018
Вопрос. Создал скрипт нового квеста по образцу TestQuest. При обращении к нему через quest manager для изменения статуса получаю ошибку Object reference not set to an instance of an object. Попробовал обратиться к TestQuest - результат тот же. В чем может быть проблема?
Офлайн
Dakurlz 8 марта 2018
Light,
Большое спасибо! Я и не подумал об этом. Пойду тестить)
Офлайн
Light 8 марта 2018
Dakurlz, не получится внутри диалога делать проверки по другим квестам. Более того в этом нет смысла в принципе. Строка появится если value квеста будет соответствовать указанному в диалоге значению. Так вот смотри внимательней пример в проекте. Когда квест завершается мы отправляем ему значение через атрибут set, потом сам квест ловит этот параметр и дальше мы внутри квеста можем делать что угодно. Если надо открыть другой квест, то просто меняем его значение через текущий.
Офлайн
Dakurlz 7 марта 2018
Light,
Благодарю за ответ, но я имел в виду то, что бы сама строка в диалоге появлялась только после прохождения первого квеста. Ну то есть первый квест - хорошо, там мы можем просто проверить чему равен value квеста с его именем. А если квест второй по очереди, то мне как то нужно проверить:
1) То что первый квест завершён
2) То что второй квест ещё не взят
Я пытался написать вот так
"Есть задание для меня?" node="2" value="3" quest="Quest" node="2" value="0" quest="Quest2"
Но естественно ничего не работает) Если можно - дайте пожалуйста простенький пример.
Офлайн
Light 7 марта 2018
Dakurlz, один квест влияет на другой, если один завершен то он должен изменить статус следующего, чтобы открыть его.
Офлайн
Dakurlz 7 марта 2018
А как сделать переход на квест номер 2? Первый мы выполнили, окей, сдали его, получили награду, но что бы этот же непись давал следующий квест - не получается сделать. Проверку не могу добавить мол что первый сдан, но второй ещё = 0
Офлайн
evan 26 мая 2017
Сидел вот и думал, что можно было бы сделать что бы не залазить в файл мэнэджера квестов и не добавлять море кейсов в свич.
Собственно вышло так, что создал QuestItem, добавил virtual метод updateQuest. В QuestManager добавил глобальный список QuestItem'ов, и допустим при изменении я создал функцию которая ищет среди QuestItem'ов имя класса который наследует данный QuestItem, тем самым при обновлении он обращается не к самому QuestItem'у, а к классу который его наследует, и уже в нём используяю override метод updateQuest изменяю какие то вещи именно в самом квесте.
Как-то так:
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика