Добавление пользовательского кода в ММО игру





Фреймворк игрового сервера

Для того что бы разработка была проста . а количество кода было сведено к минимуму нужен определенный фоновый код который делает рутинные вещи и проверки сам (например запускает бесконечный цикл while игрового цикла. собирает изменения сделанные в этом кадре для рассылки игрокам и локациям и пр) необходим некий набор библиотек со своими правилами и функциями - такой программный комплекс называется фреймворк.
В руководстве ниже будут приведены примеры серверного кода механик будет предоставлен на языке программирования PHP (в сервисе есть поддержка LUA и Java Script) на фреймворке подробное описание которого доступно п отдельном разделе (для опытных разработчиков)

Добавление пользовательского кода

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

Код применяемый к объекту:

  1. Изменение значения компонента сущности (триггер) . 
  2. Добавления событий (они же пользовательские команды если сделать их публичными) . 
  3. Описания таймаута группы событий (может быть фиксированным числом, может иметь некую логику зависящую от события или значения компонентов и окружающего мира но по итогу ожидается так же цифра что берется при каждом исполнении событии группы).
  4. Код зарабатываемый когда сущность заходит в игру (меняется в соответствующем разделе сущности) и выходит. В основном что бы повесить события на сущность, можно манипулировать использую if - else конструкцию из данных сущности object
  5. Код при изменении позиций сущности
И общий код: 
  1. Код срабатываемый в начале каждого кадра 
  2. Код запускаемый перед инициализацией локации после добавления в ее всех сущностей и инициализаций
В разделах где добавляется указанный код есть краткая подсказка по параметрам, однако имеются следующие общие правила:
  • код срабатываемsq на объекте  имеет переменную $object - текущий объект
  • для получения всех объектов с текущей и смежной локации открытого мира используется World::all()  и World::filter (подробнее о них читайте в разделе для опытных разработчиков)
  • у объектов всегда есть стандартные поля , а так же поля events и components с методами (add, get, isset) представляющие собой классы для управления содержащимися в них массивами значений событий и компонентов соответственно

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

Каждая игровая механика индивидуальна, но для демонстрации мы подготовили набор стандартных для примера так же доступных в GIT (работают с Unity игрой выше) . При регистрации в нашем сервисе демонстрационная игра со всеми ее механиками уже будет доступна (можно менять текущие и добавлять свои)


На нашем Youtube канале предоставлено видео руководство как создать игровые механики самому, ниже приведены пару из них









Что нового?


Статьи про разработку продукта

PHP, Разработка игр, Unity, Unreal Engine, Облачные сервисы, php, unity, mmo, mmorpg, сервер для игры

С 2021 года я начал делать свою MMO игру обнаружив что нет готовых сервисов ни в России, ни за рубежом. Но сделать игру я мечтал со времен «Бойцовского клуба» и текстового «Амулета дракона», вдобавок уже был неплохим программистом.

Так и родилась идея написать свое решение Авторитарного сервера для 2D Mmo RPG игр и, как говорил Илон Маск, «Батут работает».

Читать далее
ч.15 Игровой авторитарный сервер на процессах и его архитектура в картинках — Создание сервера для онлайн ММО игр на PHP
PHP, Программирование, Разработка игр, Unity, Unreal Engine, php, игровой сервер, разработка сервисов, онлайн-игры, разработка онлайн-игр
Создание сервера для онлайн ММО игр на PHP ч.14 — Сетевая карта и задержка кадра (Latency frame) по RFC 2544 (1242)
PHP, Проектирование и рефакторинг, Разработка игр, Сетевые технологии, Параллельное программирование, php, go, c#, онлан игры
Создание сервера для онлайн ММО игр на PHP ч.13 — Event-driven паттерн, JSON-RPC и почему не сервисная (SOA) архитектура
PHP, Программирование, Проектирование и рефакторинг, Разработка игр, Алгоритмы, php, event-driven, разработка игр, mmo, mmorpg, шаблон проектирования

Кабинет

Игры