@maxyc_webber
Web-программист

PhpGameDev: Сохранение состояния рандомного NPC во время боя. Как?

Решил попробовать свои силы в геймдеве. Первый же вопрос.
Есть модель NPC и модель User.
С User все понятно, его скилы вычисляются на основании конкретных данных из бд или еще откуда то.
Как дела обстоят с NPC? Есть страница где я генерирую случайно скилы объекта NPC. Показываю эти характеристики на странице. Но как напасть на NPC? На новой странице прийдется создавать новый объект, а это новый NPC получится, с другими характеристиками.
На текущий момент пришел к тому, что сохраняю обьект NPC в сессию. На сколько верно такое решение? Хранить данные NPC в бд считаю накладно.
Если рассчитывать на 20 тыс игроков в онлайне, не нагнется ли у меня сервер, если сессии храниться будут, например, в редисе?

ja4uL8UKZJ4.jpg
  • Вопрос задан
  • 2272 просмотра
Решения вопроса 2
Tiendil
@Tiendil
Разработчик ПО.
- Хранить NPC имеет смысл в сущности «текущий бой», а вот где её хранить уже есть разница.
- Если под сохранением в сессию подразумевается сохранение в cookies, то это плохая идея, т.к., в случае двух одновременных запросов от пользователя, будут конфликты.
- Если под сохранением в сессию подразумевается сохранение на стороне сервера, то это скорее всего и есть сохранение в БД.
- «Если рассчитывать на 20 тыс игроков в онлайне, не нагнется ли…» — вопрос не корректен, т.к. не описана логика игры и железо на сервере. Если расчёт хода раз в сутки, то не нагнётся, если раз в секунду, то может и нагнуться.
- Число онлайна, кстати, дико оптимистично.

Варианта два:

1. Хранить в БД.
2. Хранить в фоновом процессе в памяти, который и делает обсчет логики, не обращаясь к БД.

Во втором случае, общаться с таким процессом можно, например, через отправку сообщений amqp. Результаты вычислений процесс может как ложить в кэш (который много быстрее БД), так и слать сразу клиенту (websockets).

Если это коммерческий проект ОБЪЕКТИВНО имеющий возможность получить 20к онлайна, заморочайтись 2-ым вариантом. Если это хобби, прототип или просто изучение новой технологии — не заморачивайтесь и начните с 1-ого, когда игра разовьётся, всё станет более очевидным.
Ответ написан
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
NPC должны быть описаны в какой-либо базе монстров. А если хочется рандомно что-то делать, то вешайте на него бонусы с рандомным прибавлением статов.

Генерировать полностью рандомно не лучшая идея
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы