Veliri. Дневник разработки 4

диалоги и миссии

Veliri. Дневник разработки 4

Приветствую, DTF. Я все еще продолжаю делать ММО игру:)

Расскажу про то, как устроены диалоги и миссии в моей игре с технической точки зрения.

Диалоги

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

Veliri. Дневник разработки 4

То есть диалог состоит из массива страниц, внутри которых есть текст и заготовленный набор ответов (а еще портрет персонажа который говорит).

Ответ содержит в себе текст, который будет показан игроку, номер страницы на которую попадет игрок, если выберет именно этот ответ, и какое-то действие, которое произойдет после выбора.

Действия ответов могут содержать в себе все что угодно, от смены страницы или диалога, до обмена предметов или принятия/провала задания.

<p>мой страшненький редактор диалогов</p>

мой страшненький редактор диалогов

Диалог диспетчера базы, который предлагает задание. Если игрок ответит “запросить задание”, то сервер пойдет искать доступные для игрока задания и, в случае если найдет такое, то сменит диалог приветствия на диалог брифинга, а если не найдет, то отдаст вторую страницу.

Задания

Задания в игре бывают разные (доставка, убийство, сопровождение, исследования и тд), но все они работают по единому принципу. Чтобы не городить огород из логики под каждый тип заданий, я сделал универсальную структуру задания, где логику определяют “действия”, и туда можно затолкать все, на что хватит фантазии и геймплея).

В упрощенном варианте это выглядит примерно так:

Veliri. Дневник разработки 4

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

Например некоторые из них:

  • достигнуть точки х:у

  • завязать разговор с нпс

  • добыть определенный предмет (в трюм)

  • убить кого-то

Но действия это не только пункты, которые надо выполнить игроку, это также определенные задачи серверу:

  • создать предмет, который надо доставить

  • сгенерировать нпс, которого надо убить/сопроводить

  • создать персональную локацию

  • ну и прочие такие вещи Х)

Например самое элементарное задание по доставке предмета будет состоять из четырёх действий, первое из которых будет для сервера, а не игрока (сгенерировать предмет доставки).

еще более страшный редактор заданий
еще более страшный редактор заданий

Все действия отслеживаются по порядку (если конечно не указан специальный флаг), и нельзя выполнить действие под номером 4 не получив статус “завершено” в действиях 1, 2 и 3.

Следит за выполнением миссии очень некрасивый код из набора if’оф под каждый тип действия.

Veliri. Дневник разработки 4

Каждое действие имеет свою реализацию, но, например, достигнуть х:у выглядит так:

Veliri. Дневник разработки 4

В конце каждого задания надо поговорить с базой, которая выдаст специальный диалог с ответом, действие которого будет “завершить задание”, если игрок завершил все действия задания, то он попадет на страницу с наградой, а если нет, то “иди работай...”

Хоть все задания работают в одной системе, я делю их на 3 вида:

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

Сложные в открытом мире - задания которые не вписываются в шаблоны и их придется делать руками :С, “в открытом мире” значит что для них не надо генерировать локации и связывать их телепортами и, обычно, ограничиваются стандартными действиями.

Veliri. Дневник разработки 4

Персональные - это миссии, во время выполнения которых для каждого игрока генерируются персональные локации. На текущий момент это сюжетные миссии, из-за сложности сценариев предполагающие уникальные действия я пока их не доделал :С

Примерно так оно и работает. ¯\_(ツ)_/¯

22
5 комментариев