Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
authors_main:admin_api:admin_api_import_game [2021/10/19 12:54] 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'' - удаление уровня в уже начавшейся игре. | ||
| ==== Заливка настроек игры ==== | ==== Заливка настроек игры ==== | ||
| - | В JSON нужно передать только структуру настроек игры, как описано на странице [[admin_api_json#Настройки игры|структуры JSON]]. | + | В JSON нужно передать только структуру настроек игры, как описано на [[admin_api_json#Настройки игры|странице структуры JSON]]. |
| ==== Заливка сквозных бонусов ==== | ==== Заливка сквозных бонусов ==== | ||
| - | В JSON нужно передать только структуру глобальных бонусов, как описано [[admin_api_json#Сквозные бонусы|тут]]. | + | В JSON нужно передать только структуру глобальных бонусов, как описано на [[admin_api_json#Сквозные бонусы|странице структуры JSON]]. |
| ==== Заливка линеек ==== | ==== Заливка линеек ==== | ||
| - | В JSON нужно передать только структуру глобальных бонусов, как описано [[admin_api_json#Линейки|тут]]. | + | В JSON нужно передать только структуру глобальных бонусов, как описано на [[admin_api_json#Линейки|странице структуры JSON]]. |
| + | |||
| + | ===== Использование ИИ (чат-ботов) для создания и редактирования уровней ===== | ||
| + | |||
| + | Современные чат-боты (ChatGPT, Claude, Gemini и др.) отлично справляются с генерацией и редактированием уровней, кодов, подсказок и бонусов в формате JSON для движка qeng.org. | ||
| + | |||
| + | Готовый системный промпт для настройки чат-бота вы можете найти в разделе: [[authors_main:authors_ai|Использование ИИ для создания заданий]]. | ||