Создание сервера для Российских онлайн ММО игр ч. 9 — Игровые серверные механики

После успешной оптимизации клиентской части и серверной архитектуры пришла пора писать механики самой игры для взаимодействия по API — я называю их событиями (они вешаются на какой либо игровой объект на сервере, помещаются в очередь и срабатывают когда придет их время).

Суть работы взаимодействия авторитарного сервера и клиентской части следующая:

  1. Мы создаем группу в которой будут собраны некие игровые механики (например идти в указанную точку, идти в указанном направлении, идти за указанным объектом).
  2. Мы указываем таймаут вызова механик этой группы в секундах или в виде кода по результатам которого будет выдано число с плавающей точкой (например пауза между движениями 1 / скорость * магнитуду направлении, но она может быть и 0 — например на механику получения урона).
  3. Мы указываем может ли игрок вызвать механику напрямую (если нет — ее можно будет вызвать лишь из другой механик, например вызов механики получения урона при атаке).
  4. Мы можем указать какие дополнительные параметры могут быть при вызове механики (например объем регенерации жизней или объем урона).
  5. Мы указываем нужно ли рассылать пакет с данными когда механика будет применятся на каком либо существе (например можно высылать время таймаута, доп параметры механики такие как объем урона).
  6. И наконец мы указываем сам код механики который манипулирует параметрами объекта на котором механика сработала и теми объектами которые на карте.
  7. Дополнительно можно указать — нужно ли вешать событие на то же существо когда оно отработает (например регенерацию — нужно).
Пример создания группы игровой механики
Пример создания группы игровой механики
пример нескольких игровых механик в одной группе
пример нескольких игровых механик в одной группе
пример кода при создание игровой механики в группе механик
пример кода при создание игровой механики в группе механик
Пример кода добавления простой механик на LUA
Пример кода добавления простой механик на LUA

Таким образом можно создать множество механик которые могут быть вызваны через отправку пакета по Websocket соединению со стороны клиента, а так же вызваны по цепочки внутри друг друга. Плюс ко всему мы можем менять код их работы не меняя ничего в клиенте (если это не затрагивает какую то визуальную часть которая еще не реализована).

При замерах скорости работы на VPS с 2мя ядрами процессора и 4GB оперативной памяти результаты стремятся к 1.000.000 RPS и это только на CPU (в будущем я планирую внедрить параллельные вычисления на GPU), хотя имеются и долгие механики такие как:

  • сохранение в БД игрока (несмотря на то что оно уже асинхронно делается)
  • расчет поиска пути при движении до точки
Создание сервера для Российских онлайн ММО игр ч. 9 — Игровые серверные механики

скорость выполнение игровых механик на сервере

В предыдущей статья я рассказал о горизонтальном масштабировании игрового сервера, так что при достижении работы с сервера к 60FPS (на примере выше он 1000FPS) можно переложить вычисления части открытого мира на другое железо (об открытом бесшовном мире я расскажу в следующих статьях которые вы сможете найти в моем профиле).

В заключение я подготовил пару коротких и не только видео с демонстрацией кода и работы игровых механик проекта (доступен демо доступ на сайте mmogick.ru). Впереди еще долгий путь в котором надо будет разрабатывать механики для MMO RPG связанные с физикой.

История:

88
Начать дискуссию