Маркер {! … !} — службовий рядок у тексті завдання. Рушій вирізає його з тексту й сам робить те, що в ньому написано: вбиває код від імені команди або завершує команді гру. Гравець маркера не бачить — ні на сторінці, ні у вихідному коді.
Вбити код можна було й раніше — скриптом, <script>enter('код')</script>. Різниця в тому, де лежить код. У скрипта він у сторінці гравця: відкрий вихідний код — і ось він. Маркер виконує сервер, і в сторінку не потрапляє ні код, ні сам маркер.
{! code ньютон !} вбити код
{! code ньютон, лейбніц !} вбити кілька кодів
{! finish_game !} завершити команді гру
{! on gps 51.5299 -0.1275: code ньютон !} вбити код, коли гравець дійшов до точки
{! on gps 51.5299 -0.1275: code ньютон: zone двір !} дві дії одним маркером
code ньютон, а не code: ньютон.on; умова поки одна — точка на місцевості, про неї сторінка GPS./* … */, як у шаблонах. Гравцеві його не видно, а тестувальник побачить його підписом.Окремого «якщо» в маркера немає: він спрацьовує, поки видно текст, у якому стоїть. Потрібна умова виходить вибором місця:
| Де стоїть маркер | Коли спрацьовує |
|---|---|
| Текст завдання | одразу, як завдання відкрили |
| Підказка | коли підказка прийшла або її взяли |
| Опис бонусу | поки бонус не розв'язано |
| Текст після розв'язання бонусу | коли бонус розв'язано |
| Наскрізний бонус | на кожному завданні, де цей бонус діє |
Гілка шаблону {% match %} | коли спрацювала ця гілка |
Не працює маркер у назві коду й у назві підказки — таке збереження редактор відхилить. У скрипті завдання маркер теж не працює: скрипт рушій збирає окремо, і маркер там залишиться просто текстом. Ставте його в текст завдання, підказки або бонусу.
Усе це — про маркер без умови. Код gps-зони (on gps) сервер не вбиває сам, а називає сторінці гравця, і та вбиває його звичайною відповіддю: у журналі він записаний за гравцем, який дійшов. Докладніше — GPS.
Маркер усередині гілки шаблону спрацьовує, коли гілка відкрилася. А відкрити її може код, який вбив інший маркер. Так збирається ланцюжок:
{! code старт !}
{% match code_1 }:{ {%= старт}:{ {! code другий !} %} %}
Завдання відкрили — сервер вбив старт, гілка за першим сектором відкрилася, і маркер у ній вбив другий. Гравцеві не треба перезавантажувати сторінку: рушій дограває ланцюжок у тому самому запиті. Якщо вбитий код закрив завдання, маркери наступного завдання спрацюють, щойно команда на нього перейшла.
Так само зручно збирати складений код: у найглибший шаблон матрьошки замість <script>enter('ПІДСУМОК')</script> ставиться {! code ПІДСУМОК !}, і підсумкового коду немає в сторінці навіть тієї миті, коли він вбивається.
Звичайний code спрацьовує один раз. Якщо потрібно, щоб маркер вбивав код знову й знову, перед кодом пишеться умова про поле у квадратних дужках:
{! code [c1 !=] зона_а !} вбити, якщо в секторі 1 зараз НЕ цей код
{! code [c2 <] 3ворота !} вбити, якщо в секторі 2 код з меншим числом на початку
c1 — сектор, b2 — бонус, gb3 — наскрізний бонус.!= — «у полі зараз інше»: сектор зберігає останній код, що до нього ввійшов, тож два маркери з різними кодами на один сектор роблять із нього перемикач. < — «у полі код з меншим числом на початку»: так робиться пріоритет, коли важливий найкращий із досягнутих результатів. Код для < мусить починатися з цифри.Найбільше умова про поле потрібна в gps-іграх, де перемикач команда рухає ногами, — приклади на сторінці GPS.
Два маркери, що змагаються за одне поле в одному відмальовуванні, рушій не перекидатиме туди-сюди: застосує перший, зупиниться й напише про це тестувальникові.
{! finish_game !} закриває команді всю лінійку одразу: завдання, на якому вона стоїть, і всі, до яких вона не дійшла. Команда одразу бачить фінішну сторінку, ніби розв'язала останнє завдання.
У статистиці такі завдання позначено «Гру завершено». У завдання, на якому команда стояла, записано час, який вона на ньому провела; у тих, куди вона не дійшла, час нульовий.
Аргументів і умови в дії немає. Завершити гру за точкою на місцевості — це два кроки: зона вбиває код, а finish_game стоїть у гілці шаблону за цим кодом.
{! on gps 51.5299 -0.1275: code фініш !}
{% match code_1 }:{ {%= фініш}:{ {! finish_game !} %} %}
Обережно: у тестувальникаfinish_gameспрацьовує так само, як у команди, — інакше кінцівку не перевірити. Тестувальникові це не страшно, «Рестарт гри» в панелі тестування починає все заново. А команді в справжній грі повернути закриті завдання нічим.
Маркер невидимий, і зі сторінки не зрозуміти, спрацював він чи ні. Для цього в тестувальника в панелі тестування внизу сторінки є вкладка «Дії» — вона з'являється, коли маркери на цьому завантаженні щось зробили або в них знайшлася помилка.
Рядків буває більше, ніж маркерів: рушій проходить завдання заново після кожного вбитого коду, і вже зроблене позначає «код уже було вбито».
finish_game;
Маркери з умовою on gps показує сусідня вкладка «GPS»: там зони на карті, і позицію гравця можна посунути, не виходячи з дому. Докладніше — GPS.
Відхиляє збереження:
code без коду, немає закривального !};finish_game з умовою або з аргументами.Попереджає, але зберігає:
gps_start() у скрипті завдання.