Как запускать и отслеживать выполнение квестов в браузерке на laravel?
Здравствуйте.
В браузерной игре на laravel есть разнообразные квесты. Выдаются они в разных моментах игры –при выполнении каких-либо действий (прийти на локацию, запустить работу, завершить работу, собрать ресурсы и пр.), при выполнении каких-либо действий впервые, при достижении каких-либо значений по счётчикам (убить N других игроков построить N строений, достичь N уровня для персонажа/города/строения и пр.). Хотя по сути это всё выполнение каких-либо действий.
Как видите, действия могут быть абсолютно разными, в разных модулях обрабатываемы. Каким образом лучше запускать квесты? Самый вроде бы очевидный вариант, это просто в нужном месте вызывать некий метод, в котором много всяких если и, если все проверки выполняются, то запускаем соответствующий квест.
Например, (описываю условно) квест 1 запускается при третьем запуске работы в строении А. Значит в коде, где вызывается метод запуска работы для строения А, перед этим вызываем метод проверки на выполнение условий для запуска квеста 1? Там, если этот запуск третий по счёту и у игрока уровень такой-то, то запускаем квест 1, и в бд отмечаем, что у игрока запущен квест 1 на первом его этапе. Точно также пока что и с отслеживанием квестов… Подскажите, есть ли более лаконичный вариант для выполнения таких вещей?
Может что-то наподобие событий в laravel сделать, но тоже получится, что вызывать эти «события» надо по всему коду игровых модулей…
не знаю, как насчет лаконичности, но связанность излишняя. Методу запуска работы вообще не обязательно ничего знать про квесты. Ему достаточно просто опубликовать событие: В строении А запущена работа.
А там дальше, кому надо, тот и подпишется на это событие, и сделает, что ему нужно.
Понимаю, хорошо, но тогда всё равно получается, что (рассматривая именно этот случай) квест этот запускается всего один раз за всю игру, но проверять мы это будем каждый раз при запуске работы в строении А... Как-то тоже неправильно и излишняя нагрузка...
Alixx, ну пусть будет событие "В строении А запущена работа в третий раз"
Хотя это просто переносит условие проверки из подписчика, в паблишер. все равно оно будет проверяться при каждом запуске работы в строении.
Сергей delphinpro, Нну, сколько таких вот мест с одним (и более) дополнительным if? Сколько квестов, столько и таких мест. Не отрицаю, может я рано загоняюсь. Просто думала, что есть уже подходящее решение для таких ситуаций, там может какой шаблон проектирования прямо для такого есть..
А раз нет, тогда так придётся. Но так мне уже не нравится)