Содержание

Серверні дії {! ... !}

Маркер {! … !} — службовий рядок у тексті завдання. Рушій вирізає його з тексту й сам робить те, що в ньому написано: вбиває код від імені команди або завершує команді гру. Гравець маркера не бачить — ні на сторінці, ні у вихідному коді.

Вбити код можна було й раніше — скриптом, <script>enter('код')</script>. Різниця в тому, де лежить код. У скрипта він у сторінці гравця: відкрий вихідний код — і ось він. Маркер виконує сервер, і в сторінку не потрапляє ні код, ні сам маркер.

Приклад у грі

Як пишеться

{! code ньютон !}                               вбити код
{! code ньютон, лейбніц !}                      вбити кілька кодів
{! finish_game !}                               завершити команді гру
{! on gps 51.5299 -0.1275: code ньютон !}       вбити код, коли гравець дійшов до точки
{! on gps 51.5299 -0.1275: code ньютон: zone двір !}   дві дії одним маркером

Коли спрацьовує

Окремого «якщо» в маркера немає: він спрацьовує, поки видно текст, у якому стоїть. Потрібна умова виходить вибором місця:

Де стоїть маркер Коли спрацьовує
Текст завдання одразу, як завдання відкрили
Підказка коли підказка прийшла або її взяли
Опис бонусу поки бонус не розв'язано
Текст після розв'язання бонусу коли бонус розв'язано
Наскрізний бонус на кожному завданні, де цей бонус діє
Гілка шаблону {% match %} коли спрацювала ця гілка

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

Що означає «вбив сервер»

Усе це — про маркер без умови. Код gps-зони (on gps) сервер не вбиває сам, а називає сторінці гравця, і та вбиває його звичайною відповіддю: у журналі він записаний за гравцем, який дійшов. Докладніше — GPS.

Ланцюжки

Маркер усередині гілки шаблону спрацьовує, коли гілка відкрилася. А відкрити її може код, який вбив інший маркер. Так збирається ланцюжок:

{! code старт !}
{% match code_1 }:{ {%= старт}:{ {! code другий !} %} %}

Завдання відкрили — сервер вбив старт, гілка за першим сектором відкрилася, і маркер у ній вбив другий. Гравцеві не треба перезавантажувати сторінку: рушій дограває ланцюжок у тому самому запиті. Якщо вбитий код закрив завдання, маркери наступного завдання спрацюють, щойно команда на нього перейшла.

Так само зручно збирати складений код: у найглибший шаблон матрьошки замість <script>enter('ПІДСУМОК')</script> ставиться {! code ПІДСУМОК !}, і підсумкового коду немає в сторінці навіть тієї миті, коли він вбивається.

Умова про поле: перемикач

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

{! code [c1 !=] зона_а !}     вбити, якщо в секторі 1 зараз НЕ цей код
{! code [c2 <] 3ворота !}     вбити, якщо в секторі 2 код з меншим числом на початку

Найбільше умова про поле потрібна в gps-іграх, де перемикач команда рухає ногами, — приклади на сторінці GPS.

Два маркери, що змагаються за одне поле в одному відмальовуванні, рушій не перекидатиме туди-сюди: застосує перший, зупиниться й напише про це тестувальникові.

Завершити гру: finish_game

{! finish_game !} закриває команді всю лінійку одразу: завдання, на якому вона стоїть, і всі, до яких вона не дійшла. Команда одразу бачить фінішну сторінку, ніби розв'язала останнє завдання.

У статистиці такі завдання позначено «Гру завершено». У завдання, на якому команда стояла, записано час, який вона на ньому провела; у тих, куди вона не дійшла, час нульовий.

Аргументів і умови в дії немає. Завершити гру за точкою на місцевості — це два кроки: зона вбиває код, а finish_game стоїть у гілці шаблону за цим кодом.

{! on gps 51.5299 -0.1275: code фініш !}
{% match code_1 }:{ {%= фініш}:{ {! finish_game !} %} %}
Обережно: у тестувальника finish_game спрацьовує так само, як у команди, — інакше кінцівку не перевірити. Тестувальникові це не страшно, «Рестарт гри» в панелі тестування починає все заново. А команді в справжній грі повернути закриті завдання нічим.

Як перевірити: вкладка «Дії»

Маркер невидимий, і зі сторінки не зрозуміти, спрацював він чи ні. Для цього в тестувальника в панелі тестування внизу сторінки є вкладка «Дії» — вона з'являється, коли маркери на цьому завантаженні щось зробили або в них знайшлася помилка.

Вкладка «Дії»: що вбили маркери на цьому завантаженні сторінки

Рядків буває більше, ніж маркерів: рушій проходить завдання заново після кожного вбитого коду, і вже зроблене позначає «код уже було вбито».

Маркери з умовою on gps показує сусідня вкладка «GPS»: там зони на карті, і позицію гравця можна посунути, не виходячи з дому. Докладніше — GPS.

Що перевіряє редактор під час збереження

Відхиляє збереження:

Попереджає, але зберігає:

Додаткова інформація