ua: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

Next revision
Previous revision
ua:authors_main:admin_api:admin_api_import_game [2023/04/15 20:39]
admin создано
ua:authors_main:admin_api:admin_api_import_game [2026/08/03 19:20] (current)
Line 1: Line 1:
-authors_main:​admin_api:​admin_api_import_game+{{indexmenu_n>​2}} 
 +===== Імпорт гри з JSON ===== 
 +===== Інструменти імпорту ===== 
 +Імпорт гри або її частин з її JSON можна зробити кількома способами:​ 
 + 
 +  - У [[ua:​authors_main:​task_editor:​editor|редакторі гри]] натиснути **"​Вставити завдання з буфера..."​** під списком завдань. Це найзвичайніший шлях: редактор розбере JSON, покаже,​ що в ньому знайшлося,​ і додасть обране в чернетку — на сервер воно поїде після кнопки "​Зберегти..."​. Докладніше:​ [[ua:​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 з запиту на авторизацію,​ про що детально описано тут: [[ua:authors_main:​admin_api:​api_embed_engine|Вбудовування движка в інші сервіси]] 
 + 
 +===== Варіанти об'​єктів для імпорту ===== 
 + 
 +Кожен об'​єкт,​ який можна імпортувати,​ можна експортувати для отримання його структури в поточній грі, як описано в розділі [[ua:​authors_main:​admin_api:​admin_json_export|інструкцій експорту]]. 
 + 
 +==== Заливка нових рівнів ==== 
 +Якщо необхідно додати НОВІ рівні в гру, то JSON буде списком з одного або кількох рівнів,​ розділених комами. Щоб рівень додався,​ а не оновився існуючий,​ він повинен НЕ мати поля number всередині секції налаштувань task. Опис структури рівня [[ua:​authors_main:​admin_api:​admin_api_json#​приклад_рівня_цілком|тут]]. 
 + 
 +==== Редагування існуючих рівнів ==== 
 +Якщо необхідно оновити ІСНУЮЧІ рівні в грі, то JSON буде списком з одного або кількох рівнів,​ розділених комами,​ причому поле number в секції налаштувань task має бути передано (відповідає номеру рівня, який редагується). Опис структури рівня [[ua:​authors_main:​admin_api:​admin_api_json#​приклад_рівня_цілком|тут]]. 
 + 
 +Налаштування гри з секції task, якщо присутні в JSON - значення в двигуні будуть замінені на нові. Якщо поля відсутні в наданому JSON - то вони будуть залишені як було. 
 + 
 +Для інших секцій (codes, bonuses, hints), якщо секція присутня в JSON - то вона повністю замінить існуючу. Якщо відсутня - то секція залишається як була. 
 + 
 +Рівень можна знайти не лише за номером:​ якщо в секції task передати ''​id''​ рівня (його видає [[ua:​authors_main:​admin_api:​admin_json_export#​експорт_з_ідентифікаторами|експорт з ids=1]]), то оновиться саме цей рівень,​ навіть якщо ви одночасно змінюєте йому номер. Якщо рівня з таким ''​id''​ у грі немає - імпорт поверне помилку,​ а не створить новий. 
 + 
 +Щоб змінити окремі коди, бонуси чи підказки,​ не пересилаючи список цілком,​ є [[#​точкове_редагування|секції *_edit]]. 
 + 
 +==== Заливка всієї гри ==== 
 +Є можливість залити всю гру з JSON цілком. Для цього JSON має бути повним JSON гри, як описано на сторінці [[ua:​authors_main:​admin_api:​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''​ - його можна отримати [[ua:​authors_main:​admin_api:​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 потрібно передати тільки структуру налаштувань гри, як описано на [[ua:​authors_main:​admin_api:​admin_api_json#​налаштування_гри|сторінці структури JSON]]. 
 + 
 +==== Заливка сквозних бонусів ==== 
 +В JSON потрібно передати тільки структуру глобальних бонусів,​ як описано на [[ua:​authors_main:​admin_api:​admin_api_json#​наскрізні_бонуси|сторінці структури JSON]]. 
 + 
 +==== Заливка лінійок ==== 
 +В JSON потрібно передати тільки структуру глобальних бонусів,​ як описано на [[ua:​authors_main:​admin_api:​admin_api_json#​лінійки|сторінці структури JSON]]. 
 + 
 +===== Використання ШІ (чат-ботів) для створення та редагування рівнів ===== 
 + 
 +Сучасні чат-боти (ChatGPT, Claude, Gemini та ін.) чудово справляються з генерацією та редагуванням рівнів,​ кодів, підказок та бонусів у форматі JSON для двигуна qeng.org. 
 + 
 +Готовий системний промпт для налаштування чат-бота ви можете знайти в розділі:​ [[ua:​authors_main:​authors_ai|Використання ШІ для створення завдань]].
  • ua/authors_main/admin_api/admin_api_import_game.1681591140.txt.gz
  • Last modified: 2023/04/15 20:39
  • by admin