Содержание

Структура JSON

Гра

Глобально, JSON гри складається з декількох великих секцій:

{
   "game": {} /* Налаштування гри, на кшталт часу початку та послідовності проходження */,
   "gbonuses": [] /* Список наскрізних бонусів у грі */,
   "lines": [] /* Список лінійок проходження */,
   "tasks": [] /* Список рівнів гри*/,
}

Налаштування гри

{
    "game": {
        "type": "1", 
        /* Переможець визначається:
         "0": Бали
         "1": Час
         */
         "stat": "5",
         /* Статистика:
         "0": Відкрита
         "1": Відкрита без бонусів
         "2": Закрита під час гри
         "4": Тільки коротка
         "5": Закрита завжди
         "6": Пройдені завдання
        */
        "team_limit": 0,
        /* Обмеження гравців у команді */
         "name": "#New Unnamed Game",
         /* Назва */
         "description": "",
         /* Опис */
         "finish_text": "",
         /* Фінішний текст */
        "html_header": "",
        /* Загальний HTML заголовок */
         "image": "",
         /* Картинка */
         "start_time": "2021-10-17 12:00:00",
         /* Старт */
         "end_time": "2022-10-17 12:00:00",
         /* Фініш */
        "status": "3",
        /* Прийом у гру:
         "0": Автоматично всіх
         "1": Автоматично тих, хто сплатили
         "2": Автоматично всіх тестерами
         "3": Вручну
        */
        "start_type": "0",
        /* Старт гри:
         "0": Одночасний
         "1": Кожен у свій час
         */
         "price": 0,
         /* Ціна */
        "currency": "UAH",
        /* Валюта ціни:
       "UAH"
       "USD"
       "EUR"
        */
        "kind": "0",
        /* Тип гри:
        "0": other
        "1": green
        "2": yellow
        "3": red
        "4": virtual
        */
        "scenario": "0",
        /* Сценарій:
        "0": Закритий
         "1": Відкритий в архіві
         "2": Відкритий в архіві, але тільки тим, хто грав
         "3": Відкритий командам, які закінчили гру
        */
        "answer_prefix": "фф",
        /* Префікс кодів */
         "default_line": ""
         /* Лінійка за замовчуванням (назва) */
    }
}

Наскрізні бонуси

{
    "gbonuses": [
        /* Список наскрізних бонусів у грі. Їх може бути не один, через кому */
         {
            "code": "cc, dd",
            /* Відповіді */
            "time": 0,
            /* Бонус за виконання*/
            "description": "",
            /* Завдання */
             "hint": "",
             /* Текст після рішення */
             "first_task_n": 1,
             /* Доступний починаючи від завдання */
             "last_task_n": 2
             /* Доступний до завдання */
        }
    ]
}

Лінійки

{
    "lines": [
       / * Список лінійок у грі. Їх може бути не одна, через кому */
        {
            "title": "Лінійка 2",
            /* Назва лінійки*/
            "task_order": "1,2,3+4,5-7"
            /* Порядок */
        }
    ]
}

Рівень

Рівень гри також має блокову структуру:

{
             "task": {}, /* Налаштування рівня, на кшалт назви або часу автопереходу */
             "codes": [], /* Список секторів чи кодів у рівні. Їх може бути не один, через кому */
             "bonuses": [], /* Список бонусів у рівні */
             "hints": [], /* Список підказок у рівні */
}

Налаштування рівня

{
            "task": {
                "number": 1,
                /* № */
                "max_time": 3600,
                /* Автоперехід (секунд) */
                "score": 10,
                /* Бонус за не АП */
                "time_k": 1.0,
                /* Час x */
                "delay": 0,
                /* Затримка (для штурмових рівнів)*/
                "working_name": "Назва",
                /* Назва у грі */
                "name": "У статі",
                /* Назва у статистиці */
                "surrender_code": "Слива",
                /* Зливний Код */
                "Task": "Тест",
                /* Текст завдання */
                "script": "alert(1)",
                /* Скрипт завдання */
                "answer": "Слово українською",
                /* Формат відповіді */
                "answers_limit": 10,
                /* Обмеження на введення */
                "answers_per_time": 60,
                /* за проміжок часу */
                "answers_limit_penalty": 10,
                /* штраф за кожен зайвий */
                "codes": 0,
                /* Для проходження треба кодів */
                "code_bonus_time": 0,
                /* Зменшення АП (секунд) */
                "code_bonus": 0,
                /* Бонус (у секундах) */
                "finish_confirmation": "1",
                /* Закрити завдання:
                "0": Примусово
                "1": Розумно
                 */
                "hidden_bonuses": "0",
                /* Бонуси: Відображати у завданні:
                "0": Списком
                "1": Компактно одним рядком
                 */
                "bonuses_kind": "0"
                /* Бонуси: Порядок відкриття:
                "0": Будь-який
                "1": По порядку
                */
            }
}

Сектори

{
            "codes": [
                /* Список секторів або кодів у рівні. Їх може бути не один, через кому */
                {
                    "name": "Сектор 1",
                    "code": "a, b"
                    /* Коди-синоніми через кому*/
                 },
                 {
                     "name": "Сектор 2",
                     "code": "c, d"
                     /* Коди-синоніми через кому*/
                }
            ],
}

Бонуси

{
            "bonuses": [
                /* Список бонусів у рівні. Їх може бути не один, через кому */
                {
                    "number": 1,
                    /* Порядковий номер бонусу */
                    "code": "c, d",
                    /* Відповіді */
                    "time": 0,
                    /* Бонус за виконання */
                    "description": "",
                    /* Завдання бонусу */
                    "hint": "",
                    /* Текст після рішення */
                    "delay": 0,
                    /* Затримка появи бонусу */
                    "duration": 0,
                    /* Тривалість */
                    "duration_k": 0
                    /* Залишок у бонус x */
                }
            ]
}

Підказки

{
            "hints": [
                /* Список підказок у рівні. Їх може бути не одна, через кому */
                {
                    "number": 1,
                    /* Порядковий номер підказки */
                    "info": "",
                    /* Опис підказки */
                    "hint": "",
                    /* Текст підказки */
                    "delay": 0,
                    /* Час */
                    "penalty": 0
                    /* Штраф */
                }
            ]
}

Приклад усієї гри повністю

Опис полів тут.

Приклад без опису:

game_example.json
{
    "game": {
        "type": "1",
        "stat": "5",
        "team_limit": 0,
        "name": "#New Unnamed Game",
        "description": "",
        "finish_text": "",
        "html_header": "",
        "image": "",
        "start_time": "2021-10-17 12:00:00",
        "end_time": "2022-10-17 12:00:00",
        "status": "3",
        "start_type": "0",
        "price": 0,
        "currency": "UAH",
        "kind": "0",
        "scenario": "0",
        "answer_prefix": "фф",
        "default_line": ""
    },
    "tasks": [
        {
            "task": {
                "number": 1,
                "max_time": 3600,
                "score": 10,
                "time_k": 1.0,
                "delay": 0,
                "working_name": "Назва",
                "name": "В статі",
                "surrender_code": "Слива",
                "task": "Тест",
                "script": "alert(1)",
                "answer": "Слово українською",
                "answers_limit": 10,
                "answers_per_time": 60,
                "answers_limit_penalty": 10,
                "codes": 0,
                "code_bonus_time": 0,
                "code_bonus": 0,
                "finish_confirmation": "1",
                "hidden_bonuses": "0",
                "bonuses_kind": "0"
            },
            "codes": [
                {
                    "name": "Сектор 1",
                    "code": "a, b"
                }
            ],
            "bonuses": [
                {
                    "number": 1,
                    "code": "c, d",
                    "time": 0,
                    "description": "",
                    "hint": "",
                    "delay": 0,
                    "duration": 0,
                    "duration_k": 0
                }
            ],
            "hints": [
                {
                    "number": 1,
                    "info": "",
                    "hint": "",
                    "delay": 0,
                    "penalty": 0
                }
            ]
        }
    ],
    "gbonuses": [
        {
            "code": "cc, dd",
            "time": 0,
            "description": "",
            "hint": "",
            "first_task_n": 1,
            "last_task_n": 2
        }
    ],
    "lines": [
        {
            "title": "Лінійка 2",
            "task_order": "1,2,3+4,5-7"
        }
    ]
}

Приклад рівня повністю

Опис полів тут.

Приклад без опису нижче:

level_example.json
[
        {
            "task": {
                "number": 1,
                "max_time": 3600,
                "score": 10,
                "time_k": 1.0,
                "delay": 0,
                "working_name": "Назва",
                "name": "В статі",
                "surrender_code": "Слива",
                "task": "Тест",
                "script": "alert(1)",
                "answer": "Слово українською",
                "answers_limit": 10,
                "answers_per_time": 60,
                "answers_limit_penalty": 10,
                "codes": 0,
                "code_bonus_time": 0,
                "code_bonus": 0,
                "finish_confirmation": "1",
                "hidden_bonuses": "0",
                "bonuses_kind": "0"
            },
            "codes": [
                {
                    "name": "Сектор 1",
                    "code": "a, b"
                }
            ],
            "bonuses": [
                {
                    "number": 1,
                    "code": "c, d",
                    "time": 0,
                    "description": "",
                    "hint": "",
                    "delay": 0,
                    "duration": 0,
                    "duration_k": 0
                }
            ],
            "hints": [
                {
                    "number": 1,
                    "info": "",
                    "hint": "",
                    "delay": 0,
                    "penalty": 0
                }
            ]
        }
]