Імпорт гри з JSON
Інструменти імпорту
Імпорт гри або її частин з її JSON можна зробити кількома способами:
- У редакторі гри натиснути “Вставити завдання з буфера…“ під списком завдань. Це найзвичайніший шлях: редактор розбере JSON, покаже, що в ньому знайшлося, і додасть обране в чернетку — на сервер воно поїде після кнопки “Зберегти…”. Докладніше: JSON завдання та гри.
- Вставити потрібний JSON на сторінку https://qeng.org/import_tasks.php, зазначивши айді гри та натиснувши “Імпортувати”. Це саме посилання також доступне з пункту меню “Імпорт завдань” у вкладці “Корисні посилання” редактора.
- У картці конкретного завдання натиснути кнопку “JSON” у заголовку і вставити туди JSON одного рівня. Це дозволяє швидко оновлювати налаштування, коди, бонуси та підказки конкретного рівня.
- (варіант для програмістів) Відправити POST запит на https://qeng.org/import_tasks.php?gid=<ваш айді гри>&json=1, в якому у body буде коректно зформований JSON обʼєкт. Для автентифікації необхідно отримати cookie з запиту на авторизацію, про що детально описано тут: Вбудовування движка в інші сервіси
Варіанти об'єктів для імпорту
Кожен об'єкт, який можна імпортувати, можна експортувати для отримання його структури в поточній грі, як описано в розділі інструкцій експорту.
Заливка нових рівнів
Якщо необхідно додати НОВІ рівні в гру, то JSON буде списком з одного або кількох рівнів, розділених комами. Щоб рівень додався, а не оновився існуючий, він повинен НЕ мати поля number всередині секції налаштувань task. Опис структури рівня тут.
Редагування існуючих рівнів
Якщо необхідно оновити ІСНУЮЧІ рівні в грі, то JSON буде списком з одного або кількох рівнів, розділених комами, причому поле number в секції налаштувань task має бути передано (відповідає номеру рівня, який редагується). Опис структури рівня тут.
Налаштування гри з секції task, якщо присутні в JSON - значення в двигуні будуть замінені на нові. Якщо поля відсутні в наданому JSON - то вони будуть залишені як було.
Для інших секцій (codes, bonuses, hints), якщо секція присутня в JSON - то вона повністю замінить існуючу. Якщо відсутня - то секція залишається як була.
Рівень можна знайти не лише за номером: якщо в секції task передати id рівня (його видає експорт з ids=1), то оновиться саме цей рівень, навіть якщо ви одночасно змінюєте йому номер. Якщо рівня з таким id у грі немає - імпорт поверне помилку, а не створить новий.
Щоб змінити окремі коди, бонуси чи підказки, не пересилаючи список цілком, є секції *_edit.
Заливка всієї гри
Є можливість залити всю гру з JSON цілком. Для цього JSON має бути повним JSON гри, як описано на сторінці опису структури JSON. Також в JSON необхідно додати поле "delete_all_tasks": 1, щоб видалити всі існуючі рівні та перезалити гру заново, наприклад:
{ "game": { "name": "#New Unnamed Game 2", }, "tasks": [{"task": {"number": 1, "working_name": "Назва"}, "codes": [], "bonuses": [], "hints": []}], "gbonuses": [], "lines": [], "delete_all_tasks": 1, }
Налаштування гри з секції game, если присутні в JSON - значення в двигуні будуть замінені на нові. Якщо поля відсутні в наданому JSON - то вони будуть залишені як було в грі раніше.
Для інших секцій (gbonuses, lines), якщо секція присутня в JSON - то вона повністю замінить існуючу. Якщо відсутня - то секція залишається як була.
Точкове редагування
Секції codes, bonuses, hints, gbonuses та tasks замінюють список цілком - це зручно, коли ви формуєте гру заново, але означає, що заради одного зміненого коду доводиться пересилати весь рівень.
Поруч із кожною такою секцією є її “редагуючий” варіант: codes_edit, bonuses_edit, hints_edit, gbonuses_edit, tasks_edit. У ньому перелічуються лише ті елементи, які ви змінюєте:
{ "tasks_edit": [ { "task": {"id": 123, "working_name": "Нова назва"}, /* у рівня змінюється лише назва - текст завдання пересилати не треба */ "codes_edit": [ {"id": 56, "delete": 1}, /* цей код видаляється */ {"id": 55, "code": "abc"}, /* у цього змінюється лише поле code */ {"code": "новий код"} /* а цей додається в кінець списку */ ] } ] }
Правила:
- елемент адресується за
id- його можна отримати експортом з ids=1; - якщо
idнемає, елемент шукається заnumber(порядковим номером у списку); - якщо немає ні того, ні іншого - елемент додається в кінець списку;
“delete”: 1видаляє елемент. Видалення застосовуються раніше за інші зміни, тому в одному запиті можна видалити один код і додати інший;- елементи, які ви не згадали, лишаються недоторканими - у цьому вся відмінність від звичайної секції;
- передаються лише змінені поля, решта лишається як була;
- поле
numberу кодів, бонусів і підказок двигун перераховує сам, щоб номери йшли поспіль без пропусків (на них посилаються підказки на кшталт%codes 2-5%).
Вказувати для одного списку одразу і codes, і codes_edit не можна - друга секція правила б елементи, які перша щойно видалила.
Видалення рівня
Рівень видаляється через tasks_edit:
{ "tasks_edit": [ {"task": {"id": 123}, "delete": 1}, {"task": {"id": 124, "number": 1}} /* і, наприклад, зсунути наступний рівень на звільнений номер */ ] }
Разом із рівнем видаляються його коди, бонуси, підказки та відповіді команд - тому у вже розпочатій грі видалення рівня заборонено. Щоб видалити всі рівні одразу, використовується "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 потрібно передати тільки структуру налаштувань гри, як описано на сторінці структури JSON.
Заливка сквозних бонусів
В JSON потрібно передати тільки структуру глобальних бонусів, як описано на сторінці структури JSON.
Заливка лінійок
В JSON потрібно передати тільки структуру глобальних бонусів, як описано на сторінці структури JSON.
Використання ШІ (чат-ботів) для створення та редагування рівнів
Сучасні чат-боти (ChatGPT, Claude, Gemini та ін.) чудово справляються з генерацією та редагуванням рівнів, кодів, підказок та бонусів у форматі JSON для двигуна qeng.org.
Готовий системний промпт для налаштування чат-бота ви можете знайти в розділі: Використання ШІ для створення завдань.