Расположение монстров и их обновления
| |
JanCarlo | Дата: Воскресенье, 24 Апреля 2022, 11:11 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Добрый день!
Ведется активная разработка игры браузерной, уже многое сделано. Сейчас подходит этап создания монстров с их расположением/обновлением на локациях.
Допустим что класс монстров готов, у них есть скилы, статы, уровни и тд. В игре есть система локаций, на локациях могут находиться игроки, здания, npc, предметы и так далее.
Вопрос - как сделать респавн монстров? Допустим в базе есть пару таблиц - типы монстров и сами монстры все имеющиеся. Каждый моб привязан к конкретной локации. Умирая монстр удаляется из бд, но как сделать его восстановление? Проект на Ларавеле, предположу что необходимо создать задание на проверку всех локаций на наличие монстров и как по крону проверять по времени. Допустим у монстра может быть в бд поле с заданием какой нибудь дельты - сроки респавна монстра, допустим раз в 1-5-15 минут. Но с событиями я еще не работал. У лары есть модуль Events/События, можно создать задания для событий и слушателей. Но, в игре будут тысячи локаций, их уже несколько сотен, скажем 85% локаций будут иметь монстров - получается что и событий может быть сотни? Это как бы заведомо неверно.
Предположу что, если мы имеем таблицу ТИПОВ монстров, то можно добавить поле к примеру "rooms" и в нем хранить json массив локаций где может располагаться этот тип монстров, и плюс поле респавна. Тогда создаем событие на, допустим, ежеминутный перебор (не знаю какая это будет нагрузка на систему если хотя бы пару сотен игроков будет) всех типов монстров, на каких локациях они должны располагаться, далее проверка есть ли монстр на той локации, и если нет то обновление.
В общем пока сложно понять как это грамотнее сделать.
Сразу вижу несколько проблем - на одной локации может находиться сразу несколько монстров, причем разных типов. Один и тот же тип монстров может находиться в разных частях игрового мира. Сам монстр может еще передвигаться, к примеру в радиусе нескольких соседних локаций.
Как бы саму задачу выполнить не составит проблем, проблема в грамотном подходе =)
Заранее спасибо
В общем господа, есть идеи?
VK группа игры (Разработка c 22 года): https://vk.com/browsermud
|
|
| |
Granner | Дата: Воскресенье, 24 Апреля 2022, 12:28 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| Я делал единый счетчик времени на всю игру. При выходе из локации в данные локации сохраняется дата посещения. При загрузке же сравнивается дата входа и выхода. Если разрыв большой, то создается моб из бд. Если локаций сотни - они рандомные? Если да, то при убийстве моба может не стоит удалять его из базы?
Лучше - быть, чем - казаться. P.S. Прежде чем задавать вопрос - всегда просматриваю форум и справку
|
|
| |
JanCarlo | Дата: Воскресенье, 24 Апреля 2022, 13:04 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Granner, Вобще локации статичные, типа города/леса, но есть зоны где локации могут перемещаться в пространстве. Но локации меняют только координаты расположения, на структуру данных это не влияет. То есть если моб будет привязан к локации, то локация уедет вместе с мобом, игроками, предметами на ней и тд
Думаю что монстров всё же стоит удалять из базы. Потому как на одного монстра может напасть несколько человек, это будет массовый бой, у боя записывается история ходов и пишется в отдельную базу.
Во всяком случае, у нескольких аналогичных проектов я видел, что монстр имеет айди, и убив его - монстр из базы удаляется. Судя по ID, в игре было убито уже более 450 миллионов монстров, с базы они стираются но PK как бы возрастает. К тому же, монстр делает ответную атаку, и если мы проигрываем бой, то монстр остается жить, при этом еще получает опыт и становиться сильнее - эдакая урезанная система развития как у персонажа. Немного отошел от темы. В общем пока не понятно.
VK группа игры (Разработка c 22 года): https://vk.com/browsermud
|
|
| |
TLT | Дата: Воскресенье, 24 Апреля 2022, 16:03 | Сообщение # 4 |
Сейчас нет на сайте
| Игра как Диабло? Делаешь невидимые объекты (порталы), расставляешь их на карте. Затем задаешь значение каждому объекту переменную =1, затем прописываешь, что если 1, то на координаты объекта-портала создается монстр и переменная становится 600 (10 минут) и включается --1, если переменная >2. И проверочку на наличие монстра и необходимость его генерации, если отсчёт =1 и монстра нет. И когда монстра убивают, тоже этой переменной =600.
Что-то типа.
Дао, выраженное словами, не есть истинное Дао.
|
|
| |
JanCarlo | Дата: Воскресенье, 24 Апреля 2022, 18:19 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| TLT, Не, игра текстовая, MUD, бои пошаговые. Но суть я понял, и это вариант кстати, спасибо. Тогда получается проверка наличия моба идет непосредственно во время перемещения на саму эту локацию, тогда нет необходимости создавать задания временнЫе со слушателями. Но тут тогда возникает вопрос, а если моб будет передвигаться в радиусе нескольких локаций соседних. Если моб не передвигается, то статически привязывается к локации и проблем нет. В общем мб попробую пока мобов сделать без передвижения, а потом если что доработать.
VK группа игры (Разработка c 22 года): https://vk.com/browsermud
|
|
| |
TLT | Дата: Вторник, 26 Апреля 2022, 22:18 | Сообщение # 6 |
Сейчас нет на сайте
| А что тебя смущает? Если моб ушел на другую локацию, то ты не хочешь сделать его клон или оставить локацию пустой? Это зависит от геймдизайна - можно просто переставить ушедших мобов на исходную точку, либо убить и зареспавнить с новыми параметрами.
Дао, выраженное словами, не есть истинное Дао.
|
|
| |
|