Table of Contents

Складені коди

Складений код — це підсумковий код рівня, який збирається з кількох частин, розкиданих по кодах, бонусах, наскрізних бонусах та підказках. Щойно команда здобуде всі частини, рушій сам вбиває зібраний код за гравців.

Важливо (стосується всіх трьох способів): підсумковий зібраний код обов'язково має бути заведений на рівні як звичайний код (або як бонус). Інакше рушій надсилатиме неіснуючу відповідь, і в гравців сторінка перезавантажуватиметься в циклі.

Реалізувати складений код можна трьома способами:

  1. Вкладені шаблони — перевірка кожної частини шаблоном на сервері, введення коду скриптом у найглибшому шаблоні. Рекомендований спосіб.
  2. Скрипт із getAllParts / getAllBonuses — збирання коду на клієнті з відповідей, уже показаних на сторінці.
  3. code_part — застарілий варіант, залишений для сумісності.

Спосіб 1: Вкладені шаблони (рекомендовано)

Шаблони обчислюються на сервері до надсилання сторінки. Поки команда не зібрала всі частини, підсумкового коду немає ні на екрані, ні у вихідному коді сторінки — знайти його заздалегідь неможливо.

Ідея: вкладаємо шаблони один в одного, кожен рівень вкладеності перевіряє свою частину (код, бонус чи наскрізний бонус), а в найглибшому шаблоні скриптом вбиваємо підсумковий код.

Приклад: код збирається з 1-го коду рівня, 2-го бонусу та 5-го наскрізного бонусу.

{% match code_1 }:{
  {%= крокодил}:{
    {% match bonus_2 }:{
      {%= бегемот}:{
        {% match gbonus_5 }:{
          {%= кабан}:{
<script>enter('ЗООПАРК')</script>
          %}
        %}
      %}
    %}
  %}
%}

Гілка спрацьовує лише за точного збігу відповіді, тому вкладені шаблони розкриваються до <script>enter('ЗООПАРК')</script> тільки тоді, коли вбито всі три частини. Якщо якусь частину ще не вбито, відповідний шаблон поверне порожнечу, і вкладені в нього шаблони взагалі не обчислюватимуться.

Якщо важливий лише факт введення, а не конкретна відповідь

Коли в частини коду є кілька синонімів і перевіряти треба просто «вбито чи ні», використовуйте гілку !any_answer! — вона спрацьовує на будь-яку введену відповідь, але, на відміну від ?, не спрацьовує, коли відповіді ще немає.

Матрьошка збирається так само, просто замість конкретних відповідей на кожному рівні вкладеності стоїть !any_answer!:

{% match code_1 }:{ {%= !any_answer!}:{
  {% match bonus_2 }:{ {%= !any_answer!}:{
    {% match gbonus_5 }:{ {%= !any_answer!}:{
<script>enter('ЗООПАРК')</script>
    %} %}
  %} %}
%} %}
Важливо: не використовуйте замість !any_answer! гілку ? — вона спрацьовує на будь-яке значення, включно з !no_answer!, і код буде вбито зарано.

Способи перевірки можна змішувати в одній матрьошці: для частини коду з єдиною відповіддю писати конкретне значення, а для частини із синонімами — !any_answer!.

Різні підсумкові коди для різних комбінацій

Шаблони порівнюють саме значення відповіді, тому підсумковий код може залежати від того, яким синонімом закрито кожну частину: достатньо прописати кілька гілок із різними enter(). Так робляться «розгалужені» складені коди, які неможливо зібрати простим склеюванням частин.

Де розміщувати

// {% match code_1}:{ {%= крокодил}:{
//   {% match bonus_2}:{ {%= бегемот}:{
enter('ЗООПАРК');
//   %} %}
// %} %}

Що можна перевіряти: code_N, bonus_N, gbonus_N (а також code_first_N, bonus_first_N, gbonus_first_N — найперша вбита відповідь). Наскрізні бонуси перевіряються навіть на тих рівнях, де вони не виведені на екран. Повний перелік параметрів — на сторінці Шаблони.

Спосіб 2: Скрипт із getAllParts / getAllBonuses

Функції збирають підсумковий код із відповідей, які вже відображаються на сторінці.

// Склеює відповіді в порядку переліку аргументів
enter(getAllParts('c1', 'b2', 'gb5'));

Якщо всі частини лежать у бонусах, що йдуть підряд, зручніша коротка форма:

// Склеює відповіді бонусів з 1-го по 4-й: те саме, що getAllParts('b1','b2','b3','b4')
enter(getAllBonuses(1, 4));

Скрипт пишеться в полі «Скрипт завдання» і виконується під час кожного оновлення рівня. Повторних надсилань боятися не треба: enter() вбиває код лише один раз.

Врахуйте, що склеюється відповідь, яку вбила команда. Якщо в частини коду є синоніми, різні команди отримають різні підсумкові рядки — або заведіть на підсумковий код усі можливі варіанти, або використовуйте спосіб 1.

Спосіб 3: code_part (застарілий)

Частини коду прописуються в тексті завдання або в тексті рішення бонусів та штрафних підказок (у режимі «Джерело»):

<script>code_part(номер_складеного_коду, 'частинакоду', число_складених_частин)</script>

Особливості способу:

Що обрати

Спосіб Де обчислюється Порядок частин Коли використовувати
Вкладені шаблони На сервері Задає автор Найуніверсальніший спосіб: працює із синонімами й не показує підсумковий код заздалегідь. Писати потрібно найбільше — матрьошку зручно згенерувати через AI
getAllParts / getAllBonuses У браузері Задає автор (порядок аргументів) Найменше писати, але погано підходить, якщо у відповідей на частини є синоніми
code_part У браузері Порядок виведення на сторінці Із синонімами працює, але скрипт треба вручну прописати в кожній частині

Для способу 1 довгу матрьошку шаблонів зручно згенерувати нейромережею — див. Редагування та генерація завдань за допомогою AI.