Содержание

Серверные действия {! ... !}

Маркер {! … !} — служебная строка в тексте задания. Движок вырезает её из текста и сам делает то, что в ней написано: вбивает код от имени команды или завершает команде игру. Игрок маркера не видит — ни на странице, ни в исходном коде.

Вбить код можно было и раньше — скриптом, <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.

Что проверяет редактор при сохранении

Отклоняет сохранение:

Предупреждает, но сохраняет:

Дополнительная информация