Задать вопрос
@maxyc_webber
Web-программист

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

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

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

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

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

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

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

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

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

Похожие вопросы
FoodSoul Калининград
от 160 000 до 250 000 ₽
BGStaff Москва
До 300 000 ₽
Greenway Global Новосибирск
от 150 000 до 250 000 ₽