Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
api_engine_main [2021/08/08 07:59] admin [Данные задания] |
api_engine_main [2021/10/21 07:35] (текущий) phaust |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== API для написания своей версии фронтенда ====== | + | {{indexmenu_n>30}} |
+ | ===== Игровая API ===== | ||
+ | Игровая API - это API для написания своей версии фронтенда, либо взаимодействия с информацией про игру изнутри игры. | ||
Можно использовать для телеграмм ботов, нативных приложений или браузерных расширений | Можно использовать для телеграмм ботов, нативных приложений или браузерных расширений | ||
Строка 15: | Строка 17: | ||
===== Авторизация ===== | ===== Авторизация ===== | ||
- | Используется **game.php** | + | Используется **login.php** |
- | + | ||
- | **GET параметры:** | + | |
- | + | ||
- | **gid** надо задать ID игры. | + | |
**POST параметры:** | **POST параметры:** | ||
Строка 47: | Строка 45: | ||
<code> | <code> | ||
class PublicContext { | class PublicContext { | ||
- | int version = 1; // Версия протокола | + | int version = 1; // Версия протокола |
- | ?string error; // Ошибка. | + | ?string error ; // Ошибка. |
- | ?string login_error; // Ошибка при логине | + | ?string login_error; // Ошибка при логине |
- | ?int game_id; // ID игры | + | string domain_time_zone; // Временная зона текущего домена |
- | ?int task_id; // ID текущего уровня | + | ?int game_id; // ID игры |
- | ?int user_id; // ID залогиненого игрока | + | ?int task_id; // ID текущего уровня |
- | ?string user_name; // login игрока | + | ?int user_id; // ID залогиненого игрока |
- | ?int team_id; // ID команды игрока, в одиночных играх может совпадать с ID текущего игрока | + | ?string user_name; // login игрока |
- | ?int refresh_time_ms; // Время последнего обновления страницы unix_time миллисекундах | + | ?int team_id; // ID команды игрока, в одиночных играх может совпадать с ID текущего игрока |
- | ?int refresh_check_limit_ms; // Промежуток времени в миллисекундах, в течении которого не надо без причины дергать сервер. | + | ?int refresh_time_ms; // Время последнего обновления страницы unix_time миллисекундах |
+ | ?int refresh_check_limit_ms; // Промежуток времени в миллисекундах, в течении которого не надо без причины дергать сервер. | ||
- | PublicGame game; // Данные об игре | + | PublicGame game; // Данные об игре |
- | PublicTask task; // Данные о текущем задании | + | /*?PublicGamep[]*/ available_games; // Данные об активных/ближайших играх домена. Доступно, если вызвать без gid |
- | PublicLastAnswers last_answers; // Мониторинг недавно вбитых ответов | + | |
- | ?PublicAnswerResult answer_result; // Результат последнего вбития ответов | + | PublicTask task; // Данные о текущем задании |
- | ?PublicAnswerForm answer_form; // Данные о форме ответов | + | PublicLastAnswers last_answers; // Мониторинг недавно вбитых ответов |
- | /* ?[n => PublicCode] */ codes; // Данные о кодах | + | ?PublicAnswerResult answer_result; // Результат последнего вбития ответов |
- | /* ?PublicHint[] */ hints; // Подсказки | + | ?PublicAnswerForm answer_form; // Данные о форме ответов |
- | ?int n_bonuses; // Общее число бонусов, если они есть в задании | + | /* ?[n => PublicCode] */ codes; // Данные о кодах |
- | ?int compact_n_bonuses; // Общее число бонусов, если автор выбрал компактный режим бонусов | + | /* ?PublicHint[] */ hints; // Подсказки |
- | ?int compact_bonus; // Суммарный полученный бонус/штраф, если автор выбрал компактный режим бонусов | + | ?int n_bonuses; // Общее число бонусов, если они есть в задании |
- | /* ?string[] */ compact_bonus_answers; // Известные ответы на бонусы, если автор выбрал компактный режим бонусов | + | ?int compact_n_bonuses; // Общее число бонусов, если автор выбрал компактный режим бонусов |
- | /* ?string[] */ compact_bonus_hints; // Подсказки на вбитые бонусы, если автор выбрал компактный режим бонусов | + | ?int compact_bonus; // Суммарный полученный бонус/штраф, если автор выбрал компактный режим бонусов |
- | /* ? PublicBonus[] */ bonuses; // Бонусы | + | /* ?string[] */ compact_bonus_answers; // Известные ответы на бонусы, если автор выбрал компактный режим бонусов |
- | /* ? PublicBonus[] */ global_bonuses; // Сквозные бонусы | + | /* ?string[] */ compact_bonus_hints; // Подсказки на вбитые бонусы, если автор выбрал компактный режим бонусов |
+ | /* ? PublicBonus[] */ bonuses; // Бонусы | ||
+ | /* ? PublicBonus[] */ global_bonuses; // Сквозные бонусы | ||
/* ?PublicTaskButton[] */ active_tasks; // Доступные сейчас задания | /* ?PublicTaskButton[] */ active_tasks; // Доступные сейчас задания | ||
/* ?PublicTaskButton[] */ closed_tasks; // Уже закрытые задания - только в штурме | /* ?PublicTaskButton[] */ closed_tasks; // Уже закрытые задания - только в штурме | ||
Строка 78: | Строка 79: | ||
class PublicGame { | class PublicGame { | ||
- | ?string name; // Название игры | + | int id; // ID игры |
- | ?int type; // Тип игры - 0 или отсутсвует - штурмовая последовательность, 1 - линейная последовательность | + | string name; // Название игры |
- | ?bool single; // Одиночная или командная игра | + | int start_time; // Время старта игры в unix_time |
+ | int end_time; // Время окончания игры в unix_time | ||
+ | ?int type; // Тип игры - 0 или отсутсвует - штурмовая последовательность, 1 - линейная последовательность | ||
+ | ?bool single; // Одиночная или командная игра | ||
} | } | ||
class PublicTask { | class PublicTask { | ||
- | int n; // Номер задания | + | int n; // Номер задания |
- | string name; // Название задания | + | string name; // Название задания |
- | string task; // Текст задания | + | ?string task; // Текст задания |
- | string answer_format; // Формат ответа | + | ?string answer_format; // Формат ответа |
- | int n_codes; // Сколько всего кодов в задании | + | ?int n_codes; // Сколько всего кодов в задании |
- | int need_n_codes; // Сколько надо кодов для прохождения задания | + | ?int need_n_codes; // Сколько надо кодов для прохождения задания |
- | ?int start_time_ms; // Время начала задания в unix_time миллисекундах | + | ?int start_time_ms; // Время начала задания в unix_time миллисекундах |
- | ?int time_left_ms; // Сколько осталось времени в миллисекундах до автоперехода | + | ?int time_left_ms; // Сколько осталось времени в миллисекундах до автоперехода |
- | ?int delay_left_ms; // Задержка в миллисекундах до появления задания | + | ?int delay_left_ms; // Задержка в миллисекундах до появления задания |
- | int is_complete; // Задание уже закончено | + | int is_complete; // Задание уже закончено |
} | } | ||
Строка 100: | Строка 104: | ||
class PublicLastAnswers { | class PublicLastAnswers { | ||
/* ?PublicLastAnswer[] */ answers; // Массив с информацией об ответах | /* ?PublicLastAnswer[] */ answers; // Массив с информацией об ответах | ||
- | int last_update_ms; // Время последнего обновления в unix_time миллисекундах | + | int last_update_ms; // Время последнего обновления в unix_time миллисекундах |
} | } | ||
class PublicLastAnswer { | class PublicLastAnswer { | ||
- | int time_ms; // Время в unix_time миллисекундах, когда ответ отправлен | + | int time_ms; // Время в unix_time миллисекундах, когда ответ отправлен |
- | ?string user; // Кто вбил - в одиночных играх нет | + | ?string user; // Кто вбил - в одиночных играх нет |
string answers; // Вбитые ответы через запятую | string answers; // Вбитые ответы через запятую | ||
- | string type; // Одно значени из right, wrong, repeat - правильно, но уже было, nonsubmit - не приняты из-за блокировки | + | string type; // Одно значени из right, wrong, repeat - правильно, но уже было, nonsubmit - не приняты из-за блокировки |
- | ?string bonus; // Полученный бонус или штраф за ответы | + | ?string bonus; // Полученный бонус или штраф за ответы |
} | } | ||
class PublicAnswerResult { | class PublicAnswerResult { | ||
- | int task_id; // ID уровня для которого посчитано | + | int task_id; // ID уровня для которого посчитано |
- | /* ?strings[] */ right_answers = []; // правильные ответы | + | /* ?strings[] */ right_answers = []; // правильные ответы |
- | /* ?strings[] */ wrong_answers = []; // неправильные | + | /* ?strings[] */ wrong_answers = []; // неправильные |
- | /* ?strings[] */ repeat_answers = []; // правильные, но повторные | + | /* ?strings[] */ repeat_answers = []; // правильные, но повторные |
/* ?strings[] */ nonsubmit_answers = []; // не принятые из-за блокировки | /* ?strings[] */ nonsubmit_answers = []; // не принятые из-за блокировки | ||
- | ?string bonus = ''; // Бонус полученные за ответы | + | ?string bonus = ''; // Бонус полученный за ответы |
- | ?string penalty = ''; // Штраф полученный за ответы | + | ?string penalty = ''; // Штраф полученный за ответы |
} | } | ||
Строка 125: | Строка 129: | ||
public bool show_finish_task = false; // Надо ли показывать кнопку закрывающую задание. Если надо то задание можно закрыть отправив код !finish! | public bool show_finish_task = false; // Надо ли показывать кнопку закрывающую задание. Если надо то задание можно закрыть отправив код !finish! | ||
- | bool hide_answer_form = false; // Ответы больше приниматься не будут, можно убрать поле ввода | + | bool hide_answer_form = false; // Ответы больше приниматься не будут, можно убрать поле ввода |
- | ?int block_time_left_ms; // Сколько осталось до снятия ограничения на ввод. Время в миллисекундах. Если penalty не 0, значит ответы можно вводить, но со штрафом за неправильные. | + | ?int block_time_left_ms; // Сколько осталось до снятия ограничения на ввод. Время в миллисекундах. Если penalty не 0, значит ответы можно вводить, но со штрафом за неправильные. |
- | ?int limit_n_answers; // Ограничение на число неправильных ответов. Константа - как задана автором. | + | ?int limit_n_answers; // Ограничение на число неправильных ответов. Константа - как задана автором. |
- | ?int time_limit; // Время в секундах. За какой промежуток времени учитывается ограничение на число ответов limit_n_answers. Если 0, то limit_n_answers - ограничение на весь уровень. | + | ?int time_limit; // Время в секундах. За какой промежуток времени учитывается ограничение на число ответов limit_n_answers. Если 0, то limit_n_answers - ограничение на весь уровень. |
- | ?int penalty; // Штраф за каждый неправильный ответ сверх допустимого | + | ?int penalty; // Штраф за каждый неправильный ответ сверх допустимого |
- | ?int n_answers_left; // Сколько ответов команда может вбить до того как будет ограничение. Меняется после каждого вбития ответов. Если 0 - значит ограничение активно. | + | ?int n_answers_left; // Сколько ответов команда может вбить до того как будет ограничение. Меняется после каждого вбития ответов. Если 0 - значит ограничение активно. |
} | } | ||
Строка 136: | Строка 140: | ||
class PublicCode { | class PublicCode { | ||
- | ?string name; // Название кода | + | ?string name; // Название кода |
- | ?string answer; // Ответ на код | + | ?string answer; // Ответ на код |
+ | ?string user_name; // Кто вбил первый | ||
+ | ?int user_id; // Кто вбил первый | ||
+ | ?int answered_ms; // Когда вбил первый | ||
} | } | ||
class PublicBonus { | class PublicBonus { | ||
- | int n; // Номер бонуса | + | ?int n; // Номер бонуса |
- | int bonus; // Получаемый бонус или штраф, если значение отрицательное. В секундах или баллах | + | ?int bonus; // Получаемый бонус или штраф, если значение отрицательное. В секундах или баллах |
- | ?string answer; // Ответ на бонус | + | ?string answer; // Ответ на бонус |
- | ?string description; // Описание бонуса (загадка) | + | ?string description; // Описание бонуса (загадка) |
- | ?string hint; // Подсказка, если бонус решен | + | ?string hint; // Подсказка, если бонус решен |
?int time_to_open_ms; // Время в миллисекундах до открытия бонуса | ?int time_to_open_ms; // Время в миллисекундах до открытия бонуса | ||
?int time_to_close_ms;// Время в миллисекундах секундах до закрытия бонуса | ?int time_to_close_ms;// Время в миллисекундах секундах до закрытия бонуса | ||
- | ?bool is_closed; // Время на ввод бонуса истекло - больше для ввода ответов он недоступен | + | ?bool is_closed; // Время на ввод бонуса истекло - больше для ввода ответов он недоступен |
+ | ?string user_name; // Кто вбил первый | ||
+ | ?int user_id; // Кто вбил первый | ||
+ | ?int answered_ms; // Когда вбил первый | ||
} | } | ||
Строка 237: | Строка 246: | ||
<code> | <code> | ||
class PublicAutoUpdateResult { | class PublicAutoUpdateResult { | ||
- | ?string $error; // Ошибка | + | ?string error; // Ошибка |
- | ?bool $refresh; // Надо обновить страницу, кто-то вбил правильный код или взял штрафную подсказку | + | ?bool refresh; // Надо обновить страницу, кто-то вбил правильный код или взял штрафную подсказку |
- | ?bool $reload; // Кто-то прошел уровень | + | ?bool reload; // Кто-то прошел уровень |
- | ?bool $refersh_monitoring; // Есть новые неправильные ответы в мониторинге. Можно их загрузить, если надо. | + | ?bool refersh_monitoring; // Есть новые неправильные ответы в мониторинге. Можно их загрузить, если надо. |
- | ?int $next_check_ms; // Сколько ждать(в миллисекундах) до следующей проверки - вычисляется сервером в зависимости от нагрузки | + | ?int next_check_ms; // Сколько ждать(в миллисекундах) до следующей проверки - вычисляется сервером в зависимости от нагрузки |
} | } | ||
</code> | </code> |