Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. {{indexmenu_n>2}} ===== Импорт игры из JSON ===== ===== Инструменты импорта ===== Импорт игры или её частей из её JSON можно провести несколькими способами: - В [[authors_main:task_editor:editor|редакторе игры]] нажать **"Вставить задания из буфера..."** под списком заданий. Это самый обычный путь: редактор разберёт JSON, покажет, что в нём нашлось, и добавит выбранное в черновик — на сервер оно уедет после кнопки "Сохранить...". Подробнее: [[authors_main:task_editor:task_json|JSON задания и игры]]. - Вставить нужный JSON объект на страницу https://qeng.org/import_tasks.php, указав айди игры, и нажав Импортировать. Эта же ссылка доступна из пункта меню "Импорт заданий" на вкладке "Полезные ссылки" редактора. - В карточке конкретного задания нажать кнопку **"JSON"** в заголовке и вставить туда JSON одного уровня. Это позволяет быстро обновлять настройки, коды, бонусы и подсказки конкретного уровня. - (вариант для программистов) Отправить POST запрос на https://qeng.org/import_tasks.php?gid=<ваш айди игры>&json=1, в котором в body будет корректно сформированный JSON объект. Для аутентификации необходимо удержать cookie с запроса на авторизацию, о чём детально написано тут: [[api_embed_engine|Встраивание движка в другие сервисы]] ===== Варианты объектов для импорта ===== Каждый объект, который можно импортировать, можно экспортировать для получения его структуры в текущей игре, как описано в секции [[admin_json_export|инструкций экспорта]]. ==== Заливка новых уровней ==== Если необходимо добавить НОВЫЕ уровни в игру, то JSON будет списком из одного или нескольких уровней, разделённых запятыми. Чтобы уровень добавился, а не обновился существующий, он должен НЕ иметь поля number внутри секции настроек task. Описание структуры уровня [[admin_api_json#Пример уровня целиком|тут]]. ==== Редактирование существующих уровней ==== Если необходимо обновить СУЩЕСТВУЮЩИЕ уровни в игре, то JSON будет списком из одного или нескольких уровней, разделённых запятыми, причём поле number в секции настроек task должно быть передано (отвечает номер уровня, который редактируется). Описание структуры уровня [[admin_api_json#Пример уровня целиком|тут]]. Настройки игры из секции task, если присутствуют в JSON - значения в движке будут заменены на новые. Если поля отсутствуют в предоставленном JSON - то они будут оставлены как было. Для остальных секций (codes, bonuses, hints), если секция присутствует в JSON - то она полностью заменит существующую. Если отсутствует - то секция остаётся, как была. Уровень можно найти не только по номеру: если в секции task передать ''id'' уровня (его выдаёт [[admin_json_export#Экспорт с идентификаторами|экспорт с ids=1]]), то обновится именно этот уровень, даже если вы одновременно меняете ему номер. Если уровня с таким ''id'' в игре нет - импорт вернёт ошибку, а не создаст новый. Чтобы изменить отдельные коды, бонусы или подсказки, не пересылая список целиком, есть [[#Точечное редактирование|секции *_edit]]. ==== Заливка всей игры ==== Есть возможность залить всю игру из JSON целиком. Для этого JSON должен быть полным JSON игры, как описано на странице [[admin_api_json#Пример всей игры целиком|описания структуры JSON]]. Также в JSON необходимо добавить поле ''%%"delete_all_tasks": 1%%'', чтобы удалить все существующие уровни и перезалить игру заново, например: <code JavaScript [enable_line_numbers="false"]> { "game": { "name": "#New Unnamed Game 2", }, "tasks": [{"task": {"number": 1, "working_name": "Название"}, "codes": [], "bonuses": [], "hints": []}], "gbonuses": [], "lines": [], "delete_all_tasks": 1, } </code> Настройки игры из секции game, если присутствуют в JSON - значения в движке будут заменены на новые. Если поля отсутствуют в предоставленном JSON - то они будут оставлены как было в игре раньше. Для остальных секций (gbonuses, lines), если секция присутствует в JSON - то она полностью заменит существующую. Если отсутствует - то секция остаётся, как была. ===== Точечное редактирование ===== Секции ''codes'', ''bonuses'', ''hints'', ''gbonuses'' и ''tasks'' заменяют список целиком - это удобно, когда вы формируете игру заново, но значит, что ради одного изменённого кода приходится пересылать весь уровень. Рядом с каждой такой секцией есть её "редактирующий" вариант: ''codes_edit'', ''bonuses_edit'', ''hints_edit'', ''gbonuses_edit'', ''tasks_edit''. В нём перечисляются только те элементы, которые вы меняете: <code JavaScript [enable_line_numbers="false"]> { "tasks_edit": [ { "task": {"id": 123, "working_name": "Новое название"}, /* у уровня меняется только название - текст задания пересылать не нужно */ "codes_edit": [ {"id": 56, "delete": 1}, /* этот код удаляется */ {"id": 55, "code": "abc"}, /* у этого меняется только поле code */ {"code": "новый код"} /* а этот добавляется в конец списка */ ] } ] } </code> Правила: * элемент адресуется по ''id'' - его можно получить [[admin_json_export#Экспорт с идентификаторами|экспортом с ids=1]]; * если ''id'' нет, элемент ищется по ''number'' (порядковому номеру в списке); * если нет ни того, ни другого - элемент добавляется в конец списка; * ''"delete": 1'' удаляет элемент. Удаления применяются раньше остальных изменений, поэтому в одном запросе можно удалить один код и добавить другой; * элементы, которые вы не упомянули, остаются нетронутыми - в этом всё отличие от обычной секции; * передаются только изменившиеся поля, остальные остаются как были; * поле ''number'' у кодов, бонусов и подсказок движок пересчитывает сам, чтобы номера шли подряд без пропусков (на них ссылаются подсказки вида ''%%%codes 2-5%%%''). Указывать для одного списка сразу и ''codes'', и ''codes_edit'' нельзя - вторая секция правила бы элементы, которые первая только что удалила. ==== Удаление уровня ==== Уровень удаляется через ''tasks_edit'': <code JavaScript [enable_line_numbers="false"]> { "tasks_edit": [ {"task": {"id": 123}, "delete": 1}, {"task": {"id": 124, "number": 1}} /* и, например, сдвинуть следующий уровень на освободившийся номер */ ] } </code> Вместе с уровнем удаляются его коды, бонусы, подсказки и ответы команд - поэтому в уже начавшейся игре удаление уровня запрещено. Чтобы удалить все уровни сразу, используется ''%%"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 нужно передать только структуру настроек игры, как описано на [[admin_api_json#Настройки игры|странице структуры JSON]]. ==== Заливка сквозных бонусов ==== В JSON нужно передать только структуру глобальных бонусов, как описано на [[admin_api_json#Сквозные бонусы|странице структуры JSON]]. ==== Заливка линеек ==== В JSON нужно передать только структуру глобальных бонусов, как описано на [[admin_api_json#Линейки|странице структуры JSON]]. ===== Использование ИИ (чат-ботов) для создания и редактирования уровней ===== Современные чат-боты (ChatGPT, Claude, Gemini и др.) отлично справляются с генерацией и редактированием уровней, кодов, подсказок и бонусов в формате JSON для движка qeng.org. Готовый системный промпт для настройки чат-бота вы можете найти в разделе: [[authors_main:authors_ai|Использование ИИ для создания заданий]]. authors_main/admin_api/admin_api_import_game.txt Last modified: 2026/08/03 19:19(external edit)