Импорт игры из JSON
Инструменты импорта
Импорт игры или её частей из её JSON можно провести несколькими способами:
- В редакторе игры нажать “Вставить задания из буфера…“ под списком заданий. Это самый обычный путь: редактор разберёт JSON, покажет, что в нём нашлось, и добавит выбранное в черновик — на сервер оно уедет после кнопки “Сохранить…”. Подробнее: JSON задания и игры.
- Вставить нужный JSON объект на страницу https://qeng.org/import_tasks.php, указав айди игры, и нажав Импортировать. Эта же ссылка доступна из пункта меню “Импорт заданий” на вкладке “Полезные ссылки” редактора.
- В карточке конкретного задания нажать кнопку “JSON” в заголовке и вставить туда JSON одного уровня. Это позволяет быстро обновлять настройки, коды, бонусы и подсказки конкретного уровня.
- (вариант для программистов) Отправить POST запрос на https://qeng.org/import_tasks.php?gid=<ваш айди игры>&json=1, в котором в body будет корректно сформированный JSON объект. Для аутентификации необходимо удержать cookie с запроса на авторизацию, о чём детально написано тут: Встраивание движка в другие сервисы
Варианты объектов для импорта
Каждый объект, который можно импортировать, можно экспортировать для получения его структуры в текущей игре, как описано в секции инструкций экспорта.
Заливка новых уровней
Если необходимо добавить НОВЫЕ уровни в игру, то JSON будет списком из одного или нескольких уровней, разделённых запятыми. Чтобы уровень добавился, а не обновился существующий, он должен НЕ иметь поля number внутри секции настроек task. Описание структуры уровня тут.
Редактирование существующих уровней
Если необходимо обновить СУЩЕСТВУЮЩИЕ уровни в игре, то JSON будет списком из одного или нескольких уровней, разделённых запятыми, причём поле number в секции настроек task должно быть передано (отвечает номер уровня, который редактируется). Описание структуры уровня тут.
Настройки игры из секции task, если присутствуют в JSON - значения в движке будут заменены на новые. Если поля отсутствуют в предоставленном JSON - то они будут оставлены как было.
Для остальных секций (codes, bonuses, hints), если секция присутствует в JSON - то она полностью заменит существующую. Если отсутствует - то секция остаётся, как была.
Уровень можно найти не только по номеру: если в секции task передать id уровня (его выдаёт экспорт с ids=1), то обновится именно этот уровень, даже если вы одновременно меняете ему номер. Если уровня с таким id в игре нет - импорт вернёт ошибку, а не создаст новый.
Чтобы изменить отдельные коды, бонусы или подсказки, не пересылая список целиком, есть секции *_edit.
Заливка всей игры
Есть возможность залить всю игру из JSON целиком. Для этого JSON должен быть полным JSON игры, как описано на странице описания структуры JSON. Также в JSON необходимо добавить поле "delete_all_tasks": 1, чтобы удалить все существующие уровни и перезалить игру заново, например:
{ "game": { "name": "#New Unnamed Game 2", }, "tasks": [{"task": {"number": 1, "working_name": "Название"}, "codes": [], "bonuses": [], "hints": []}], "gbonuses": [], "lines": [], "delete_all_tasks": 1, }
Настройки игры из секции game, если присутствуют в JSON - значения в движке будут заменены на новые. Если поля отсутствуют в предоставленном JSON - то они будут оставлены как было в игре раньше.
Для остальных секций (gbonuses, lines), если секция присутствует в JSON - то она полностью заменит существующую. Если отсутствует - то секция остаётся, как была.
Точечное редактирование
Секции codes, bonuses, hints, gbonuses и tasks заменяют список целиком - это удобно, когда вы формируете игру заново, но значит, что ради одного изменённого кода приходится пересылать весь уровень.
Рядом с каждой такой секцией есть её “редактирующий” вариант: codes_edit, bonuses_edit, hints_edit, gbonuses_edit, tasks_edit. В нём перечисляются только те элементы, которые вы меняете:
{ "tasks_edit": [ { "task": {"id": 123, "working_name": "Новое название"}, /* у уровня меняется только название - текст задания пересылать не нужно */ "codes_edit": [ {"id": 56, "delete": 1}, /* этот код удаляется */ {"id": 55, "code": "abc"}, /* у этого меняется только поле code */ {"code": "новый код"} /* а этот добавляется в конец списка */ ] } ] }
Правила:
- элемент адресуется по
id- его можно получить экспортом с ids=1; - если
idнет, элемент ищется поnumber(порядковому номеру в списке); - если нет ни того, ни другого - элемент добавляется в конец списка;
“delete”: 1удаляет элемент. Удаления применяются раньше остальных изменений, поэтому в одном запросе можно удалить один код и добавить другой;- элементы, которые вы не упомянули, остаются нетронутыми - в этом всё отличие от обычной секции;
- передаются только изменившиеся поля, остальные остаются как были;
- поле
numberу кодов, бонусов и подсказок движок пересчитывает сам, чтобы номера шли подряд без пропусков (на них ссылаются подсказки вида%codes 2-5%).
Указывать для одного списка сразу и codes, и codes_edit нельзя - вторая секция правила бы элементы, которые первая только что удалила.
Удаление уровня
Уровень удаляется через tasks_edit:
{ "tasks_edit": [ {"task": {"id": 123}, "delete": 1}, {"task": {"id": 124, "number": 1}} /* и, например, сдвинуть следующий уровень на освободившийся номер */ ] }
Вместе с уровнем удаляются его коды, бонусы, подсказки и ответы команд - поэтому в уже начавшейся игре удаление уровня запрещено. Чтобы удалить все уровни сразу, используется "delete_all_tasks": 1 (см. выше).
Номера уровней движок не трогает: на них ссылаются линейки, поэтому после удаления уровня перенумерацию оставшихся вы задаёте сами, в том же запросе.
Ошибки
ROW_ID_NOT_FOUND- элемента с такимidнет в этом уровне (или в этой игре);TASK_ID_NOT_FOUND- уровня с такимidнет в этой игре;DUPLICATE_ROW_KEY,DUPLICATE_TASK_ID- один и тот же элемент (уровень) упомянут в запросе дважды;DELETE_TARGET_NOT_FOUND- удалять нечего: элемент не найден или не назван;LIST_AND_EDIT- в одном запросе есть иcodes, иcodes_edit;DELETE_FORBIDDEN- удаление уровня в уже начавшейся игре.
Заливка настроек игры
В JSON нужно передать только структуру настроек игры, как описано на странице структуры JSON.
Заливка сквозных бонусов
В JSON нужно передать только структуру глобальных бонусов, как описано на странице структуры JSON.
Заливка линеек
В JSON нужно передать только структуру глобальных бонусов, как описано на странице структуры JSON.
Использование ИИ (чат-ботов) для создания и редактирования уровней
Современные чат-боты (ChatGPT, Claude, Gemini и др.) отлично справляются с генерацией и редактированием уровней, кодов, подсказок и бонусов в формате JSON для движка qeng.org.
Готовый системный промпт для настройки чат-бота вы можете найти в разделе: Использование ИИ для создания заданий.