Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. {{indexmenu_n>25}} ====== Складені коди ====== **Складений код** — це підсумковий код рівня, який збирається з кількох частин, розкиданих по кодах, бонусах, наскрізних бонусах та підказках. Щойно команда здобуде всі частини, рушій сам вбиває зібраний код за гравців. > **Важливо (стосується всіх трьох способів):** підсумковий зібраний код обов'язково має бути заведений на рівні як звичайний код (або як бонус). Інакше рушій надсилатиме неіснуючу відповідь, і в гравців сторінка перезавантажуватиметься в циклі. Реалізувати складений код можна трьома способами: - **Вкладені шаблони** — перевірка кожної частини шаблоном на сервері, введення коду скриптом у найглибшому шаблоні. **Рекомендований спосіб.** - **Скрипт із ''getAllParts'' / ''getAllBonuses''** — збирання коду на клієнті з відповідей, уже показаних на сторінці. - **''code_part''** — застарілий варіант, залишений для сумісності. ===== Спосіб 1: Вкладені шаблони (рекомендовано) ===== [[ua:authors_main:task_editor:advanced:edit_templates|Шаблони]] обчислюються на сервері до надсилання сторінки. Поки команда не зібрала всі частини, підсумкового коду немає ні на екрані, ні у вихідному коді сторінки — знайти його заздалегідь неможливо. Ідея: вкладаємо шаблони один в одного, кожен рівень вкладеності перевіряє свою частину (код, бонус чи наскрізний бонус), а в найглибшому шаблоні скриптом вбиваємо підсумковий код. Приклад: код збирається з 1-го коду рівня, 2-го бонусу та 5-го наскрізного бонусу. <code HTML> {% match code_1 }:{ {%= крокодил}:{ {% match bonus_2 }:{ {%= бегемот}:{ {% match gbonus_5 }:{ {%= кабан}:{ <script>enter('ЗООПАРК')</script> %} %} %} %} %} %} </code> Гілка спрацьовує лише за точного збігу відповіді, тому вкладені шаблони розкриваються до ''<script>enter('ЗООПАРК')</script>'' тільки тоді, коли вбито всі три частини. Якщо якусь частину ще не вбито, відповідний шаблон поверне порожнечу, і вкладені в нього шаблони взагалі не обчислюватимуться. ==== Якщо важливий лише факт введення, а не конкретна відповідь ==== Коли в частини коду є кілька синонімів і перевіряти треба просто «вбито чи ні», використовуйте гілку **''!any_answer!''** — вона спрацьовує на будь-яку введену відповідь, але, на відміну від ''?'', не спрацьовує, коли відповіді ще немає. Матрьошка збирається так само, просто замість конкретних відповідей на кожному рівні вкладеності стоїть ''!any_answer!'': <code HTML> {% match code_1 }:{ {%= !any_answer!}:{ {% match bonus_2 }:{ {%= !any_answer!}:{ {% match gbonus_5 }:{ {%= !any_answer!}:{ <script>enter('ЗООПАРК')</script> %} %} %} %} %} %} </code> > **Важливо:** не використовуйте замість ''!any_answer!'' гілку ''?'' — вона спрацьовує на будь-яке значення, **включно з ''!no_answer!''**, і код буде вбито зарано. Способи перевірки можна змішувати в одній матрьошці: для частини коду з єдиною відповіддю писати конкретне значення, а для частини із синонімами — ''!any_answer!''. ==== Різні підсумкові коди для різних комбінацій ==== Шаблони порівнюють саме значення відповіді, тому підсумковий код може залежати від того, яким синонімом закрито кожну частину: достатньо прописати кілька гілок із різними ''enter()''. Так робляться «розгалужені» складені коди, які неможливо зібрати простим склеюванням частин. ==== Де розміщувати ==== * У **тексті завдання** (режим «Джерело») — як у прикладах вище. * У полі **«Завдання»** того бонусу, який цим складеним кодом і закривається — найкращий варіант, якщо за складений код належить бонус. Текст завдання бонусу показується лише до введення правильної відповіді, тому після закриття бонусу шаблон більше не обчислюється. * У полі **«Скрипт завдання»** — тоді службові рядки шаблону закоментуйте подвійним слешем, щоб редактор коду не лаявся на синтаксис (докладніше — у розділі [[ua:authors_main:task_editor:advanced:edit_templates#шаблони_всередині_javascript|Шаблони всередині javascript]]): <code JavaScript> // {% match code_1}:{ {%= крокодил}:{ // {% match bonus_2}:{ {%= бегемот}:{ enter('ЗООПАРК'); // %} %} // %} %} </code> Що можна перевіряти: ''code_N'', ''bonus_N'', ''gbonus_N'' (а також ''code_first_N'', ''bonus_first_N'', ''gbonus_first_N'' — найперша вбита відповідь). Наскрізні бонуси перевіряються навіть на тих рівнях, де вони не виведені на екран. Повний перелік параметрів — на сторінці [[ua:authors_main:task_editor:advanced:edit_templates|Шаблони]]. ===== Спосіб 2: Скрипт із getAllParts / getAllBonuses ===== Функції збирають підсумковий код із відповідей, які вже відображаються на сторінці. <code JavaScript> // Склеює відповіді в порядку переліку аргументів enter(getAllParts('c1', 'b2', 'gb5')); </code> * **''getAllParts(...)''** — приймає id елементів, у яких рушій показує вбиті відповіді: * ''c1'', ''c2'', … — коди рівня; * ''b1'', ''b2'', … — бонуси рівня; * ''gb1'', ''gb2'', … — наскрізні бонуси. * Частини склеюються **в порядку переліку аргументів**, а не в порядку їх появи на екрані. * Якщо хоча б одну частину ще не вбито, функція поверне порожній рядок. Перевіряти результат не потрібно: порожню відповідь рушій не зараховує й до історії не пише, тому ''enter()'' на ній просто нічого не зробить. Якщо всі частини лежать у бонусах, що йдуть підряд, зручніша коротка форма: <code JavaScript> // Склеює відповіді бонусів з 1-го по 4-й: те саме, що getAllParts('b1','b2','b3','b4') enter(getAllBonuses(1, 4)); </code> Скрипт пишеться в полі **«Скрипт завдання»** і виконується під час кожного оновлення рівня. Повторних надсилань боятися не треба: ''enter()'' вбиває код лише один раз. Врахуйте, що склеюється **відповідь, яку вбила команда**. Якщо в частини коду є синоніми, різні команди отримають різні підсумкові рядки — або заведіть на підсумковий код усі можливі варіанти, або використовуйте спосіб 1. ===== Спосіб 3: code_part (застарілий) ===== Частини коду прописуються в тексті завдання або в тексті рішення бонусів та штрафних підказок (у режимі «Джерело»): <code HTML> <script>code_part(номер_складеного_коду, 'частинакоду', число_складених_частин)</script> </code> * **''номер_складеного_коду''** — порядковий номер складеного коду, якщо їх на рівні кілька (якщо він один — ставте ''0''). * **'''частинакоду'''** — частина коду рядком, обов'язково в лапках (навіть якщо це число). * **''число_складених_частин''** — скільки всього частин потрібно зібрати. Щойно на сторінці опиниться зазначена кількість частин, рушій вб'є склеєний код. Особливості способу: * Частини склеюються **в порядку виконання ''code_part''**, тобто в порядку виведення блоків на сторінці: спочатку завдання, потім підказки, потім бонуси, потім наскрізні бонуси. Задати свій порядок не можна — під час перестановки бонусів підсумковий код зміниться. * Перелічувати, звідки брати частини, не потрібно: рушій збирає всі ''code_part'' з однаковим номером, які опинилися на сторінці. Частини можна вільно розкидати по підказках та бонусах, не відстежуючи їхні номери. * Частину коду задає автор, тому вона не залежить від того, яким синонімом закрито бонус чи підказку (на відміну від способу 2). Але й урахувати конкретний синонім теж не можна — для цього потрібен спосіб 1. * Загальна кількість частин указується в кожному виклику, тому при зміні їхньої кількості правити доведеться одразу всі частини. * Частини коду видно у вихідному коді сторінки одразу після відкриття бонусу/підказки. ===== Що обрати ===== ^ Спосіб ^ Де обчислюється ^ Порядок частин ^ Коли використовувати ^ | Вкладені шаблони | На сервері | Задає автор | Найуніверсальніший спосіб: працює із синонімами й не показує підсумковий код заздалегідь. Писати потрібно найбільше — матрьошку зручно згенерувати через AI | | ''getAllParts'' / ''getAllBonuses'' | У браузері | Задає автор (порядок аргументів) | Найменше писати, але погано підходить, якщо у відповідей на частини є синоніми | | ''code_part'' | У браузері | Порядок виведення на сторінці | Із синонімами працює, але скрипт треба вручну прописати в кожній частині | Для способу 1 довгу матрьошку шаблонів зручно згенерувати нейромережею — див. [[ua:authors_main:task_editor:ai_authoring|Редагування та генерація завдань за допомогою AI]]. ua/authors_main/task_editor/advanced/composite_codes.txt Last modified: 2026/08/06 09:42(external edit)