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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

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

  1. Мы создаем группу в которой будут собраны некие игровые механики (например идти в указанную точку , идти в указанном направлении, идти за указанным объектом)

  2. Мы указываем таймаут вызова механик этой группы в секундах или в виде кода по результатам которого будет выдано число с плавающей точкой (например пауза между движениями 1 / скорость * магнитуду направлении, но она может быть и 0 - например на механику получения урона)

  3. Мы указываем может ли игрок вызвать механику напрямую (если нет - ее можно будет вызвать лишь из другой механик, например вызов механики получения урона при атаке )

  4. Мы можем указать какие дополнительные параметры могут быть при вызове механики (например объем регенерации жизней или объем урона)

  5. Мы указываем нужно ли рассылать пакет с данными когда механика будет применятся на каком либо существе (например можно высылать время таймаута, доп параметры механики такие как объем урона)

  6. И наконец мы указываем сам код механики который манипулирует параметрами объекта на котором механика сработала и теми объектами которые на карте

  7. Дополнительно можно указать - нужно ли вешать событие на то же существо когда оно отработает (например регенерацию - нужно)

Пример создания группы игровой механики
Пример создания группы игровой механики
пример нескольких игровых механик в одной группе
пример нескольких игровых механик в одной группе
пример кода при создание игровой механики в группе механик
пример кода при создание игровой механики в группе механик
Пример кода добавления простой механик на LUA
Пример кода добавления простой механик на LUA

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

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

  • сохранение в БД игрока (несмотря на то что оно уже асинхронно делается)

  • расчет поиска пути при движении до точки

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

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

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

Источник: https://habr.com/ru/articles/739576/


Интересные статьи

Интересные статьи

В первой части статьи мы рассмотрели подход к обработке аннотаций (и возможной генерации дополнительных исходных текстов), который используется в мире Java и долгое время применялся также для Kotlin (...
Данную статью я представляю вниманию новичков для обеспечения защиты своего софта. Защита реализуется путем привязки к железу компа + онлайн проверка.
Здравствуйте, меня зовут Екатерина, уже 11 лет я работаю учителем в школе. Почти год назад я решила сменить профессию и пошла на курсы тестировщиков в одну разрекламированную онлайн школу, разочаровал...
Привет! В среду, 10 марта, мы проведем митап, посвященный работе системных аналитиков и не только. В программе 4 доклада от наших спикеров, начинаем в 18.30 МСК. Главное — зарегистрируйте...
Период самоизоляции привел к взрыву популярности образовательных онлайн-платформ. Именитые MOOC-провайдеры сообщали о рекордных притоках трафика и студентов, а многие крупные компании...