world.en.cx

Choose your language:
en ru
News:

10/28/2021 9:57:52 PM
Информационный телеграм канал
Сделали канал в телеграм, где будет только важная техническая информация о проекте Encounter.
Вступайте сами и сообщите игрокам и авторам вашего домена.
https://t.me/eninformation


News Arhive >>>

Encounter API

Encounter API. Авторизация.


Авторизация на сайте Энкаутера осуществляется путем отправки следующего запроса на сервер:


 POST <имя сайта>/login/signin?json=1
 ------------------------------------
 POST параметры:

 <Login>            = имя пользователя
 <Password>         = пароль
 [ddlNetwork]       = id игровой сети (1 – Encounter, 2 – QustUa; по умолчанию 1)
 [MagicNumbers]    = цифры из каптчи (см. секцию “Ошибка авторизации”, ошибка 1)

 

Ответом сервера будет JSON объект, который имеет следующую структуру:

  {    

   "Error":0,                   // Код ошибки

   "Message":"",                // Локализованное сообщение об ошибке

   "IpUnblockUrl":null,         // URL страницы разблокировки IP адреса

   "BruteForceUnblockUrl":null, // URL страницы страницы разблокировки при подозрении на брутфорс

   "ConfirmEmailUrl":null,      // URL страницы подтверждения E-Mail

   "CaptchaUrl":null,           // URL к картинке каптчи

   "AdminWhoCanActivate":null   // Администраторы которые могут активировать аккаунт

 }


 Также, в своем HTTP-ответе сервер вернет коллекцию кукис, в которой следует обратить внимание на:

 GUID  = 29e408d5%2D0061%2D4d1c%2Da145%2D2a07e6993c0f
 stoken = cwxi0ylkexg2mv4i1vx30hvd
 atoken = uid%3d40481%26iss%3d0%26iscd%3d1%26tkn%3d1da114767482dcb2c3505820d8c84444dc62f8


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

 

Успешная авторизация

В случае, если авторизация прошла успешно, свойство JSON-объекта Error будет равно 0, на этом авториация закончена и больше никаких действий предринимать не нужно.

 

Ошибка авторизации

Если в процессе авторизации произошла ошибка, то свойство Error будет  принимать следующие значения:

 

1 - Превышено количество неправильных  попыток авторизации 

свойство CaptchaUrl будет содержать ссылку на картинку каптчи, для загрузке картинки капчи необходимо передать header параметр Referer=/login, для повторной авторизации на сервере к POST запросу нужно добавить параметр MagicNumbers c цифрами полученными из картинки каптчи.

 

2 - Неправильный логин или пароль

 

3 - Пользователь или в Cибири, или в черном списке, или на домене нельзя авторизовываться с других доменов

 

4 - У пользователя в профиле включена блокировака по IP, текущий IP не входит в список разрешенных 

свойство IpUnblockUrl будет инициализированно ссылкой на страницу разблокировки ограничения по IP.

 

5 - В процессе авторизации произошла ошибка на сервере

 

6 - Не используется в JSON запросах

 

7 - Пользователь заблокирован администратором

 

8 - Новый пользователь не активирован 

свойство AdminWhoCanActivate будет проинициализированно массивом администраторов, которые могут   активировать аккаунт.

 

9 - Действия пользователя расценены как брутфорс 

свойство BruteForceUnblockUrl будет инициализированно ссылкой на страницу разблокировки.


10 - Пользователь не подтвердил E-Mail 

свойство ConfirmEmailUrl будет инициализированно ссылкой на страницу подтверждения E-Mail.

 

 

Описание Game Engine API Схватки, Точек и Мозгового штурма.

1.       Начало работы с API

Для начала работы с API необходимо выполнить следующие шаги:

  • Авторизация на сайте.
  • Посылка запроса на получение JSON объекта GameEngineModel
  • Оценить текущее состояние игры

 

2.       Посылка запроса для получения GameEngineModel

HTTPVERB

GET

URL

/GameEngines/Encounter/Play/{ID Игры}?json=1

Пример

/GameEngines/Encounter/Play/2020?json=1

Params

level = {номер уровня} (передается при штурмовой последовательности)


Реакцией сервера на данный запрос будет один из следующих ответов:

  • JSON объект (GameEngineModel), представляющий собой текущее состояние игры
  • Редирект на страницу логина (пользователь не залогинен или разрушена сессия)
  • Редирект на страницу защиты от DDOS (если посылается слишком много запросов от IP)
  • Редирект на страницу ошибки (если произошла ошибка на сервере)

 

3.       Оценка текущего состояния игры

После отправки вышеуказанного запроса, если не произошло ошибок, то в ответ будет возвращен JSON объект:

Event (int)

Отражает в каком состоянии находится игра

GameId (int)

ID игры

GameNumber (int)

номер игры

GameTitle (string)

название игры

LevelSequence (int)

тип последовательнсти: 0 – линейная, 1 –указанная, 2 – случайная, 3 – штурмовая, 4 – динам. случайная

UserId (int)

ID игрока

TeamId (int)

ID команды игрока

EngineAction (object)

информация о результате последнего запроса игрока

Level (object)

информация о текущем уровне

Levels (object array)

список всех уровней

GameDateTimeStart (string)

время старта игры в UTC

Login (string)

логин игрока

TeamName (string)

имя команды


После каждого запроса необходимо проверять какое значение содержит свойство Event, которое может принимать следующие значения:

Код

Описание

0

Игра в нормальном состоянии

2

Игра с указанным ID не существует

3

Запрошенная игра не соответствует запрошенному Engine

4

Игрок не залогинен на сайте

5

Игра не началась

6

Игра закончилась

7

Не подана заявка (игроком)

8

Не подана заявка (командой)

9

Игрок еще не принят в игру

10

У игрока нет команды (в командной игре)

11

Игрок не активен в команде (в командной игре)

12

В игре нет уровней

13

Превышено количество участников в команде (в командной игре)

16

Уровень снят

17

Игра закончена

18

Уровень снят

19

Уровень пройден автопереходом

20

Все сектора отгаданы

21

Уровень снят

22

Таймаут уровня


Варианты действий в зависимости от текущего значения свойства Event

Код (ы)

Необходимое действие

0

Игра в нормальном состоянии, можно продолжать посылать запросы

16, 18, 19, 20, 21, 22

Текущий уровень изменился, необходимо послать запрос на сервер еще раз

все остальные коды

Вывести сообщение игроку соответствующее коду ошибки

 

4.       Оценка текущего состояния уровня

В случае если игра активна, и допускает участие игрока (model.Event = 0), перед отправкой ответов игрока на сервер, необходимо удостовериться, что ввод ответов на данном уровне разрешен, для этого требуется проверить объект model.Level, который содержит информацию о текущем уровне и имеет следующие свойства:

LevelId (int)

ID Уровня

Name (string)

Имя уровня

Number (string)

Номер уровня

Timeout (int)

время (в секундах) срабатывания автоперехода, 0 – если нет

TimeoutAward (int)

штраф за автопереход (в секундах), 0 – если нет

TimeoutSecondsRemain (int)

осталось времени до срабатывания автоперехода (в секундах)

IsPassed (bool)

уровень пройден

Dismissed (bool)

уровень снят администратором

StartTime (datetime)

время начала уровня для игрока

HasAnswerBlockRule (bool)

есть ли на уровне блокировка ответов

BlockDuration (int)

осталось секунду блокировки; 0 – не активна

BlockTargetId (int)

блокировка установлена для: 0,1 – для игрока; 2 – для команды

AttemtsNumber (int)

количество попыток разрешенных в рамках AttemtsPeriod

AttemtsPeriod (int)

период срабатывания блокировки (в секундах)

RequiredSectorsCount (int)

Количество секторов, которые необходимо отгадать

PassedSectorsCount (int)

Количество отгаданных секторов

SectorsLeftToClose (int)

Количество неотгаданных секторов

MixedActions (object array)

История введенных ответов

Messages (object array)

Сообщения администратора

Task (object)

Текст задания

Sectors (object array)

Сектора

Helps (object array)

Подсказки

PenaltyHelps (object array)

Штрафные подсказки

Bonuses (object array)

Бонусные задания

 

Перед отправкой ответов проверяем:

  • model.Level.IsPassed == false уровень  не пройден
  • model.Level.Dismissed == false уровень не снят
  • model.Level.HasAnswerBlockRule == false ||  model.Level.BlockDuration <= 0 – активна блокировка воода ответов на задание (не действует для бонусных ответов)

Если вышеперечисленные условия справедливы, то можно посылать ответы на проверку

 

5.       Отправка ответов на задание уровня и бонусные задания если блокировка ответов не настроена

В случае если на уровне не настроена блокировка ответов, то при отправке ответа к уровню, одновременно проверяются ответы и к неотгадданным бонусным заданиям

HTTPVERB

POST

URL

/GameEngines/Encounter/Play/{ID Игры}?json=1

Params

LevelId  = {id уровня} (берем из  model.Level.LevelID)

LevelNumber =  {номер уровня} (берем из  model.Level.Number)

LevelAction.Answer {текст ответа}       


Пример:

HTTPVERB

POST

URL

/GameEngines/Encounter/Play/222?json=1

Params

LevelId  = 1356 (берем из  model.Level.LevelID)

LevelNumber = 2  {номер уровня} (берем из  model.Level.Number)

LevelAction.Answer = ответ

 

После получения ответа в виде JSON объекта, необходимо проверить корректность состояния игры (п 3)

Результат последнего действия игрока хранится в объекте  model.EngineAction, который имеет след свойства

GameId (int)

ID игры

LevelId (int)

ID уровня

LevelNumber (int)

Номер уровня на который был введен ответ

LevelAction (object)

инфо о результате отправки ответа на уровень и бонус;

BonusAction (object)

инфо о результате отправки ответа на бонус;


Для того что бы узнать, был ли введенный ответ правильным, необходимо проверить свойство model.EngineAction.LevelAction:

Answer (string)

Введенный ответ

IsCorrectAnswer (bool)

null – ответа не было, false – неправильный ответ; true – правильный ответ;


Таким образом, вначале проверяем, был ли введен ответ model.EngineAction.LevelAction.IsCorrect != null и только потом смотрим остальные свойства.

 

 

 

6.       Отправка бонусных ответов на уровень на сервер если на уровне настроена блокировка ответов

Если на уровне настроена блокирока ответов, то ответы на уровень и ответы на бонусные задания отправляются отдельными запросами, для уровня формат запроса тот же что и в п 5, для бонусных заданий запрос имеет следующий формат:

HTTPVERB

POST

URL

/GameEngines/Encounter/Play/{ID Игры}?json=1

Params

LevelId  = {id уровня} (берем из  model.Level.LevelID)

LevelNumber =  {номер уровня} (берем из  model.Level.Number)

BonusAction.Answer {текст ответа на бонусное задание}        


Пример:

HTTPVERB

POST

URL

/GameEngines/Encounter/Play/222?json=1

Params

LevelId  = 1356 (берем из  model.Level.LevelID)

LevelNumber = 2  {номер уровня} (берем из  model.Level.Number)

BonusAction.Answer = ответ

 

После получения ответа в виде JSON объекта, необходимо проверить корректность состояния игры (п 3)

Для того что бы узнать, был ли введенный ответ к бонусному заданию правильным, необходимо проверить свойство model.EngineAction.BonusAction:

Answer (string)

Введенный ответ

IsCorrectAnswer (bool)

null – ответа не было, false – неправильный ответ; true – правильный ответ;


Таким образом, вначале проверяем, был ли введен ответ model.EngineAction. BonusAction.IsCorrect != null и только потом смотрим остальные свойства.

 

7.       Отправка запроса на открытие штрафной подсказки

Информация о имеющихся штрафных подсказка хранится в масиве объектов model.Level. PenaltyHelps, каждый из которых имеет следующую cтруктуру:

HelpId (int)

ID подсказки

Number (int)

Номер пп

HelpText (string)

Текст подсказки

IsPenalty (bool)

Штрафная/Обычная

Penalty (int)

Штраф в секундах

PenaltyComment (string)

Описание подсказки

RequestConfirm (bool)

Требует дополнительного подтверждения

PenaltyHelpState (int)

Состояние, 0 - не открыта; 2 -  открыта

RemainSeconds (int)

осталось секуд до того как подскзка будет доступна для игрока

      
Перед отправкой запроса на отрытие подсказки необходимо проверить, требует ли данная подсказка дополнительного подтверждения (penalty. RequestConfirm), в этом случае в вашей реализации UI, игрока нужно предупредить о том что он получит штраф и запросить его подтверждение на открытие подсказки.

 

 

Формат запроса на открытие подсказки:

HTTPVERB

GET

URL

/GameEngines/Encounter/Play/{ID Игры}?json=1&pid={ ID подсказки}&pact=1


Пример:

HTTPVERB

GET

URL

/GameEngines/Encounter/Play/222?json=1&pid=9645pact=1

 

 

8.       Описание остальных объектов GameEngineModel

8.1. История введенных ответов

model.Level.MixedActions

ActionId (int)

 

LevelId (int)

ID уровня к которому был введен ответ

LevelNumber (int)

Номер уровня к которому был введен ответ

UserId (int)

ID игрока который ввел ответ

Kind (int)

1 – ответ к уровню, 2 – ответ к бонусу

Login (string)

Логин игрока который ввел ответ

Answer (string)

Текст ответа

AnswForm (string)

Текст ответа с подсветкой русских букв

EnterDateTime (datetime)

Время ввода ответа (UTC+0)

LocDateTime (string)

Локализованное время ввода ответа

IsCorrect (bool)

Верен/неверен

 

8.2. Сообщения администратора

model.Level.Messages

OwnerId (int)

ID Администратора

OwnerLogin (string)

Логин администратора

MessageId (int)

ID Сообщения

MessageText (string)

Оригинальный текст сообщения

WrappedText (string)

Отформатированный текст сообщения с учетом ReplaceNl2Br

ReplaceNl2Br (bool)

Заменять ли \n на  <BR>

 

8.3. Задание к уровню

model.Level.Tasks

TaskText (string)

Оригинальный текст задания

TaskTextFormatted

Отформатированный текст задания с учетом ReplaceNlToBr

ReplaceNlToBr

Заменять ли \n на  <BR>

 

 

 

 

8.4. Сектора

model.Level.Sectors

SectorId (int)

ID сектора

Order (int)

№ пп

Name (string)

Название зектора

Answer (string)

Отгаданный ответ

IsAnswered (bool)

отгадан / не отгадан

 

8.5. Подсказки и штрафные подсказки

model.Level.Helps, model.Level.PenaltyHelps

HelpId (int)

ID подсказки

Number (int)

Номер пп

HelpText (string)

Текст подсказки

IsPenalty (bool)

Штрафная/Обычная

Penalty (int)

Штраф в секундах (для штрафной)

PenaltyComment (string)

Описание подсказки (для штрафной)

RequestConfirm (bool)

Требует дополнительного подтверждения (для штрафной)

PenaltyHelpState (int)

Состояние, 0 - не открыта; 2 -  открыта (для штрафной)

RemainSeconds (int)

осталось секуд до того как подскзка будет доступна для игрока


8.6
Бонусы

model.Level.Bonuses

BonusId (int)

ID Бонуса

Name (string)

Название

Number (int)

Номер пп

Task (string)

Задание

Help (string)

Бонусная подсказка

IsAnswered (bool)

Разгадан / не разгадан

Expired (bool)

Время на выполнение истекло

SecondsToStart (int)

Будет доступен через

SecondsLeft (int)

Будет еще доступен

AwardTime (int)

Начисленный бонус в секндах

Negative(bool)

"Отрицательность" начисляемого времени 

 

 

9. Прочее

 

Список игр домена можно вытащить вот так - https://domain.en.cx/home/?json=1

 







fairplay
4/19/2024 11:04:40 PM
(UTC +3)

www.en.cx
EncounterTM Ltd.
2004-2024 ©