ru en de fr pt

Отладка API

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


Средние показатели скорости:

войдите в игру


Инструкция

Адрес текущего сервера:

185.117.153.89/?HTTP_AUTHORIZATION=base64_decode(id:token)
, частота тиков сервера от 62.5 до 62.5 FPS (циклов в секунду)

Перед использованием необходимо авторезироваться по HTTP на адрес

/server/sign/auth/
с POST данными
['login'=><логин>, 'password'=><пароль>]

Результатом возврата будen даныне:

['id'=><идентификатор игрока>, 'token'=><для соединения с Websocket>, 'host'=><хост соединения Websocket для карты>, 'map'=><данные карты сжатые в Zlib и кодированы Base64>]

После необходимо отправить запрос на соединение с Websocket сервером (адрес и порт выше) с кодироавнным по base64 параметром HTTP_AUTHORIZATION включающих полученный id и токен выше разделенные знаком : и дождаться получения массива содержащего весь игровой мир на карте

Каждый следующий запрос из клиента должен содержать данные:

['action'=><команда>, 'command_id'=><номер команды ввиде UnixTimeStamp>, '...'=><опционально доп параметры команды>]

Весь перечень доступных команд представлен на этой странице. Если нажать на них - результат их исполнения покажутся в игре, отправленные и полученные данные тела запроса - в специальном поле выше

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

Команды скомнопованы в группы и имеют общее время таймаута (паузы до следующего вызова).

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

Тут же имеется отладочное окно наглядно показвающее отправленные и полученные даныне

Ограничения

Помимо интеграции обращения к API и обработки ответов от сервера необходима нумерация каждой команды command_id в формате UnixTimeStamp с милисекундами. Необходимо сохранять список на клиенте какие номера command_id в какой группе уже высланы.

Без этого невозможно расчитать PING, помогать игрокам с медленным интернетом слать команды заранее (интерполяция) и защитить сервер от DDOS (слишком частых отправок команд). Подробнее в видео, готовый код есть так же в демонстрационной игре

К методам одной группе можно высылать не более 2х запросов до возврата результата по ним:

  • Если второй запрос придет на сервер тогда когда первый уже начал работу то сразу попадет в очередь и вызовется по окончанию таймаута даже если интернет завис и команды еще новые не пришли), тем самым достигается непрерывноть действий при медленном интернете - интерполяция
  • Если первый запрос не попал на исполнения сразу и ждет таймаута и пришел второй одной запрос той же группы - он перезапишет первый (поэтому старые command_id как описано ниже)

C сервера возвращается так же и массив с отработанными command_id всех групп вида:

[['command_id'=><номер отработанный команды>, 'wait_time'=><время между от получения до возврата результата - для расчета времени сети (ping)>], ...]

Получить PING можно по формуле: текущий UnixTimeStamp - command_id - wait_time и после и удалить command_id из списка освободив место для новых запросов по группе

Если в клиенте время ожидания опеределенной command_id ответа от сервера больше чем таймаут события + текущий пинг - удалять ее из списка (сервер делает так же), тк иногда метод может не возвращать результат (например игрок идет в стену, или первый в списке был перезаписан вторым)

Рекомендуется предусмотреть дополнительную минималную паузу в клиенте между считыванием нажатия кнопок и отправкой запросов на группу для частых команд с малым таймаутом во избежания дабл клика (например не ходить по 2 клетки за раз)


Примеры исходного кода для работы с API, раскодировки и сборки карты, интерполяции, структуры ответов и др доступны в исходниках к игре Игорь


Раздел и игра постоянно обновляется и для получения свежей копии очистите кеш (например ctrl+f5 кнопки на клавиатура ПК)

Подробнее по интеграции читайте в разеле документация

Список комманд

portal работает по приципу поиска врагов в радиусе. вешается на объекты у которых есть position параметр (координата телепортации), sort (опционально - ярус), map_id (опционально - карты номер) . Не вызовать напрямую

  • перемещение игроков на лкоацию - карту

    portal/index

disconnect вешается автоматом на игрока.когда приходят команды от игрока - время до вызова начинается по новому

  • событие запускается если долго нет команд

    disconnect/index

search вешается на NPC для поиска новой жертвы.

  • событие начинает искать вокруг себя игрока и нападает

    search/index

timeouts возвращает актуаальные таймауты (так же возвращаются ко команде Load)

  • точка входа и игру. загрузка актуального состояния мира

    timeouts/index

teleport телепор в указанную область

  • на вход принимает координаты через запятую (x и y)

    teleport/index

save вешается автоматом на игрока (срабатвает первый раз спустя таймаут). не может быть вызвано вручную

  • save/index

resurrect событие которое воскрешает объект на который повешано. не может быть вызвано вручную

  • resurrect/index

load на клиенте после запроса этого метода должна блокироваться отправка любых команд и получение любых данных (кроме этого или с ошибкой в поле error), до возврата результата с одноименным action

  • точка входа и игру. загрузка актуального состояния мира

    load/index

altar событие которое ищет и воскрешает игроков вокруг вызываемого объекта. не может быть вызвано вручную

  • altar/index

regeneration вешается на NPC для регенерации.

  • regeneration/index

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

  • подойти к указанному объекту (поле key из массива объектов, например enemys_24)

    move/follow

  • выдает следующую точку куда идти к указанной координате (выдает пока не дойдет или не прервется)

    move/to

  • ниже команды для джойстика (с направлениями движения)

    move/up

  • move/down

  • move/left

  • move/right

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

  • randommove/index