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

Both sides previous revision Previous revision
Next revision
Previous revision
ua:authors_main:admin_api:admin_api_import_game [2023/04/15 20:41]
admin
ua:authors_main:admin_api:admin_api_import_game [2026/08/03 19:20] (current)
Line 1: Line 1:
 {{indexmenu_n>​2}} {{indexmenu_n>​2}}
-===== Импорт ​игры из JSON.ua ===== +===== Імпорт гри з JSON ===== 
-===== Инструменты импорта ===== +===== Інструменти ​імпорту ===== 
-Импорт ​игры или её частей из её JSON можно провести двумя способами:​+Імпорт гри ​або її частин з її JSON можна зробити кількома способами:​
  
-  - Вставить нужный JSON объект на страницу https://​qeng.org/​import_tasks.php, ​указав айди игры, и нажав ИмпортироватьЭта же ссылка доступна из пункта меню "Импорт заданий" ​на странице редактирования игры+  - У [[ua:​authors_main:​task_editor:​editor|редакторі гри]] натиснути **"Вставити завдання з буфера..."​** під списком завдань. Це найзвичайніший шлях: редактор розбере JSON, покаже, що в ньому знайшлося,​ і додасть обране в чернетку — на сервер воно поїде після кнопки "​Зберегти..."​. Докладніше:​ [[ua:​authors_main:​task_editor:​task_json|JSON завдання та гри]]. 
-  - (вариант для программистов) Отправить POST запрос ​на https://​qeng.org/​import_tasks.php?​gid=<​ваш айди игры>&​json=1,​ в котором в body будет корректно ​сформированный JSON объект. Для аутентификации необходимо удержать cookie ​с запроса ​на авторизацию, о чём ​детально ​написано тут: [[api_embed_engine|Встраивание движка в другие ​сервисы]]+  - Вставити потрібний 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|Вбудовування движка в інші ​сервіси]]
  
-===== Варианты объектов для ​импорта =====+===== Варіанти обктів для ​імпорту =====
  
-Каждый ​объект, который можно импортировать, можно экспортировать для ​получения его структуры в текущей игрекак описано в секции ​[[admin_json_export|инструкций экспорта]]. +Кожен обкт, який можна імпортувати, можна експортувати для отримання його структури в поточній гріяк описано в розділі ​[[ua:​authors_main:​admin_api:​admin_json_export|інструкцій експорту]].
-==== Заливка новых уровней ==== +
-Если необходимо добавить НОВЫЕ уровни в игру, то JSON будет списком из одного или нескольких уровней,​ разделённых запятыми. Чтобы уровень добавился,​ а не обновился существующий, он должен НЕ иметь поля number внутри секции настроек task. Описание структуры уровня [[admin_api_json#​Пример уровня целиком|тут]].+
  
-==== Редактирование существующих уровней ==== +==== Заливка нових рівнів ==== 
-Если ​необходимо обновить СУЩЕСТВУЮЩИЕ уровни в игре, то JSON будет списком ​из одного ​или нескольких уровней, разделённых запятыми, причём поле number ​в секции ​настроек task должно быть передано ​(отвечает ​номер уровня, который ​редактируется). Описание ​структуры уровня [[admin_api_json#​Пример уровня целиком|тут]].+Якщо ​необхідно додати НОВІ рівні в гру, то JSON буде списком з одного ​або ​кількох рівнів, розділених комами. Щоб ​рівень додався, ​а не оновився існуючий, він повинен НЕ мати поля number всередині секції налаштувань task. Опис структури рівня [[ua:​authors_main:​admin_api:​admin_api_json#​приклад_рівня_цілком|тут]].
  
-Настройки игры из секции task, если присутствуют в JSON - значения в движке будут заменены на новые. Если поля отсутствуют в предоставленном JSON - то они ​будут ​оставлены как было.+==== Редагування існуючих ​рівнів ==== 
 +Якщо необхідно оновити ІСНУЮЧІ рівні в гріто JSON буде списком ​з одного ​або кількох рівнів, розділених комами, причому поле number в секції ​налаштувань task має бути передано ​(відповідає номеру рівня, який редагується). Опис ​структури рівня [[ua:​authors_main:​admin_api:​admin_api_json#​приклад_рівня_цілком|тут]].
  
-Для остальных секций (codesbonuses, hints), если секция ​присутствует ​в JSON - то она полностью заменит существующую. Если отсутствует - то секция остаётся, как была.+Налаштування гри з секції taskякщо присутні в JSON - значення в двигуні будуть замінені на нові. Якщо поля відсутні в наданому JSON - то вони будуть залишені ​як було.
  
-==== Заливка всей игры ==== +Для інших секцій (codes, bonuses, hints), якщо секція присутня в JSON - то вона повністю замінить існуючу. Якщо відсутня - то секція залишається як була. 
-Есть возможность залить всю ​игру ​из JSON целиком. Для ​этого JSON должен ​быть полным JSON игрыкак описано на странице [[admin_api_json#​Пример ​всей игры целиком|описания ​структуры JSON]]. Также в JSON необходимо добавить поле ''​%%"​delete_all_tasks":​ 1%%'', ​чтобы удалить все существующие уровни и перезалить игру заново,​ например:+ 
 +Рівень можна знайти не лише за номером:​ якщо в секції 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"​]>​ <code JavaScript [enable_line_numbers="​false"​]>​
 { {
Line 27: Line 34:
         "​name":​ "#New Unnamed Game 2",         "​name":​ "#New Unnamed Game 2",
     },     },
-    "​tasks":​ [{"​task":​ {"​number":​ 1, "​working_name":​ "​Название"}, "​codes":​ [], "​bonuses":​ [], "​hints":​ []}],+    "​tasks":​ [{"​task":​ {"​number":​ 1, "​working_name":​ "​Назва"​},​ "​codes":​ [], "​bonuses":​ [], "​hints":​ []}],
     "​gbonuses":​ [],     "​gbonuses":​ [],
     "​lines":​ [],     "​lines":​ [],
Line 34: Line 41:
 </​code>​ </​code>​
  
-Настройки игры из секции ​game, если присутствуют в JSON - значения в движке будут заменены на новые. Если поля отсутствуют в предоставленном ​JSON - то они будут оставлены как было в игре раньше.+Налаштування гри з секції 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]].
  
-Для остальных секций (gbonuses, lines), если секция присутствует ​в JSON - то она ​полностью заменит существующую. Если отсутствует - то секция ​остаётся, как была.+==== Заливка ​сквозних бонусів ==== 
 +В JSON потрібно передати тільки ​структуру глобальних бонусів, як описано на [[ua:​authors_main:​admin_api:​admin_api_json#​наскрізні_бонуси|сторінці ​структури JSON]].
  
-==== Заливка настроек игры ​==== +==== Заливка ​лінійок ==== 
-В JSON нужно передать только структуру настроек игрыкак описано на [[admin_api_json#​Настройки ​игры|странице структуры JSON]].+В JSON потрібно передати тільки структуру ​глобальних бонусівяк описано на [[ua:​authors_main:​admin_api:​admin_api_json#​лінійки|сторінці структури JSON]].
  
-==== Заливка сквозных бонусов ==== +===== Використання ШІ (чат-ботів) для створення ​та редагування рівнів =====
-В JSON нужно передать только ​структуру глобальных бонусов, как описано на [[admin_api_json#​Сквозные бонусы|странице структуры JSON]].+
  
-==== Заливка линеек ==== +Сучасні чат-боти (ChatGPT, Claude, Gemini та ін.) чудово справляються з генерацією ​та редагуванням рівнів, кодів, ​підказок та бонусів у форматі JSON для двигуна qeng.org.
-В JSON нужно передать ​только ​структуру глобальных бонусов, как описано на [[admin_api_json#​Линейки|странице ​структуры ​JSON]].+
  
 +Готовий системний промпт для налаштування чат-бота ви можете знайти в розділі:​ [[ua:​authors_main:​authors_ai|Використання ШІ для створення завдань]].
  • ua/authors_main/admin_api/admin_api_import_game.1681591306.txt.gz
  • Last modified: 2023/04/15 20:41
  • by admin