Table of Contents

Импорт игры из JSON

Инструменты импорта

Импорт игры или её частей из её JSON можно провести несколькими способами:

  1. В редакторе игры нажать “Вставить задания из буфера…“ под списком заданий. Это самый обычный путь: редактор разберёт JSON, покажет, что в нём нашлось, и добавит выбранное в черновик — на сервер оно уедет после кнопки “Сохранить…”. Подробнее: JSON задания и игры.
  2. Вставить нужный JSON объект на страницу https://qeng.org/import_tasks.php, указав айди игры, и нажав Импортировать. Эта же ссылка доступна из пункта меню “Импорт заданий” на вкладке “Полезные ссылки” редактора.
  3. В карточке конкретного задания нажать кнопку “JSON” в заголовке и вставить туда JSON одного уровня. Это позволяет быстро обновлять настройки, коды, бонусы и подсказки конкретного уровня.
  4. (вариант для программистов) Отправить 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": "новый код"}
                /* а этот добавляется в конец списка */
            ]
        }
    ]
}

Правила:

Указывать для одного списка сразу и codes, и codes_edit нельзя - вторая секция правила бы элементы, которые первая только что удалила.

Удаление уровня

Уровень удаляется через tasks_edit:

{
    "tasks_edit": [
        {"task": {"id": 123}, "delete": 1},
        {"task": {"id": 124, "number": 1}}
        /* и, например, сдвинуть следующий уровень на освободившийся номер */
    ]
}

Вместе с уровнем удаляются его коды, бонусы, подсказки и ответы команд - поэтому в уже начавшейся игре удаление уровня запрещено. Чтобы удалить все уровни сразу, используется "delete_all_tasks": 1 (см. выше).

Номера уровней движок не трогает: на них ссылаются линейки, поэтому после удаления уровня перенумерацию оставшихся вы задаёте сами, в том же запросе.

Ошибки

Заливка настроек игры

В JSON нужно передать только структуру настроек игры, как описано на странице структуры JSON.

Заливка сквозных бонусов

В JSON нужно передать только структуру глобальных бонусов, как описано на странице структуры JSON.

Заливка линеек

В JSON нужно передать только структуру глобальных бонусов, как описано на странице структуры JSON.

Использование ИИ (чат-ботов) для создания и редактирования уровней

Современные чат-боты (ChatGPT, Claude, Gemini и др.) отлично справляются с генерацией и редактированием уровней, кодов, подсказок и бонусов в формате JSON для движка qeng.org.

Готовый системный промпт для настройки чат-бота вы можете найти в разделе: Использование ИИ для создания заданий.