authors_main:admin_api:admin_api_import_game

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
authors_main:admin_api:admin_api_import_game [2021/10/19 12:55]
phaust
authors_main:admin_api:admin_api_import_game [2026/08/03 19:19] (current)
Line 1: Line 1:
 +{{indexmenu_n>​2}}
 ===== Импорт игры из JSON ===== ===== Импорт игры из JSON =====
 ===== Инструменты импорта ===== ===== Инструменты импорта =====
-Импорт игры или её частей из её JSON можно провести ​двумя способами:​+Импорт игры или её частей из её JSON можно провести ​несколькими способами:​
  
-  - Вставить нужный JSON объект на страницу https://​qeng.org/​import_tasks.php,​ указав айди игры, и нажав Импортировать. Эта же ссылка доступна из пункта меню "​Импорт заданий"​ на странице редактирования игры.+  ​- В [[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|Встраивание движка в другие сервисы]]   - (вариант для программистов) Отправить POST запрос на https://​qeng.org/​import_tasks.php?​gid=<​ваш айди игры>&​json=1,​ в котором в body будет корректно сформированный JSON объект. Для аутентификации необходимо удержать cookie с запроса на авторизацию,​ о чём детально написано тут: [[api_embed_engine|Встраивание движка в другие сервисы]]
  
Line 18: Line 21:
  
 Для остальных секций (codes, bonuses, hints), если секция присутствует в JSON - то она полностью заменит существующую. Если отсутствует - то секция остаётся,​ как была. Для остальных секций (codes, bonuses, hints), если секция присутствует в JSON - то она полностью заменит существующую. Если отсутствует - то секция остаётся,​ как была.
 +
 +Уровень можно найти не только по номеру:​ если в секции task передать ''​id''​ уровня (его выдаёт [[admin_json_export#​Экспорт с идентификаторами|экспорт с ids=1]]), то обновится именно этот уровень,​ даже если вы одновременно меняете ему номер. Если уровня с таким ''​id''​ в игре нет - импорт вернёт ошибку,​ а не создаст новый.
 +
 +Чтобы изменить отдельные коды, бонусы или подсказки,​ не пересылая список целиком,​ есть [[#​Точечное редактирование|секции *_edit]].
  
 ==== Заливка всей игры ==== ==== Заливка всей игры ====
Line 36: Line 43:
  
 Для остальных секций (gbonuses, lines), если секция присутствует в 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''​ - удаление уровня в уже начавшейся игре.
  
 ==== Заливка настроек игры ==== ==== Заливка настроек игры ====
Line 45: Line 116:
 ==== Заливка линеек ==== ==== Заливка линеек ====
 В 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.1634648123.txt.gz
  • Last modified: 2021/10/19 12:55
  • by phaust