мы считаем квест выполненным когда условие его выполнения в базе состояния мира становится истинным. Например, у нас есть условие "Ганон мёртв". Пока мы его не убьём и игра не повесит на него тэг "мёртв", мы считаем квест незавершенным. проверяем истинность этого условия мы при попытке сдать квест, но можно это делать по таймеру, либо триггерить после любого изменения состояния мира.
ну будет дженерик принеси-подай только если задать только это действие, но мы довольно долго собирали набор действий и, опираясь на кучу игр. В итоге с помощью этой схемы возможно было описать около 80% квестов из Skyrim, Oblivion, Witcher 2 и 3, Dragon Age: Origins. Именно на квестах из этих игр мы валидировались.
для первого этапа вообще не собирали данные - модель сама генерировала и отбраковывала варианты с помощью эвристик, которые в приложенных статьях описаны. Для второго этапа мы самостоятельно ставили оценки сгенерированным квестам и уже на этих оценках обучали.
проблема в том, что невозможно прописать столько квестов чтобы учесть все возможные состояния мира, к которым могут привести действия игрока. А игры бывают не только сюжетно ориентированными, но еще и песочницами, построенными на разных системах , взаимодействие которых и создает весёлый геймплей.
Если кого-то интересуют технические подробности - готов ответить на вопросы.
Доделали тестовую локацию
ммм, запостил это не в коммент, а отдельным сообщением...
Инвентарь
А это диалоговое окно
Начали делать UI для нашей guild-like RPG.
В частности вот так выглядит окно рынка
по сути мы обучили оценщик качества квестов на наших отзывах, потом добавили его к базовой сетке. После этого мы включили оценку этого модуля добавили в лосс всей модели.