{{indexmenu_n>22}}
====== Серверні дії {! ... !} ======
**Маркер** ''{! ... !}'' — службовий рядок у тексті завдання. Рушій вирізає його з тексту й сам робить те, що в ньому написано: вбиває код від імені команди або завершує команді гру. Гравець маркера не бачить — ні на сторінці, ні у вихідному коді.
Вбити код можна було й раніше — скриптом, ''''. Різниця в тому, де лежить код. У скрипта він у сторінці гравця: відкрий вихідний код — і ось він. Маркер виконує сервер, і в сторінку не потрапляє ні код, ні сам маркер.
[[https://qeng.org/game.php?jump_to&gid=3493&task_id=84063|Приклад у грі]]
===== Як пишеться =====
{! code ньютон !} вбити код
{! code ньютон, лейбніц !} вбити кілька кодів
{! finish_game !} завершити команді гру
{! on gps 51.5299 -0.1275: code ньютон !} вбити код, коли гравець дійшов до точки
{! on gps 51.5299 -0.1275: code ньютон: zone двір !} дві дії одним маркером
* Дію та її аргументи розділяє **пробіл**: ''code ньютон'', а не ''code: ньютон''.
* **Двокрапка** ділить маркер на частини — умову й дії. Умова пишеться першою, зі слова ''on''; умова поки одна — точка на місцевості, про неї сторінка [[uk:authors_main:task_editor:advanced:gps|GPS]].
* Дій може бути кілька, через двокрапку: вони спрацьовують по черзі, так само, якби стояли окремими маркерами. Якщо не розібралася одна, не спрацьовує весь маркер.
* Усередині маркера можна писати коментар ''/* ... */'', як у шаблонах. Гравцеві його не видно, а тестувальник побачить його підписом.
===== Коли спрацьовує =====
Окремого «якщо» в маркера немає: **він спрацьовує, поки видно текст, у якому стоїть.** Потрібна умова виходить вибором місця:
^ Де стоїть маркер ^ Коли спрацьовує ^
| Текст завдання | одразу, як завдання відкрили |
| Підказка | коли підказка прийшла або її взяли |
| Опис бонусу | поки бонус не розв'язано |
| Текст після розв'язання бонусу | коли бонус розв'язано |
| Наскрізний бонус | на кожному завданні, де цей бонус діє |
| Гілка шаблону ''{% match %}'' | коли спрацювала ця гілка |
Не працює маркер у назві коду й у назві підказки — таке збереження редактор відхилить. **У скрипті завдання маркер теж не працює:** скрипт рушій збирає окремо, і маркер там залишиться просто текстом. Ставте його в текст завдання, підказки або бонусу.
===== Що означає «вбив сервер» =====
* Код зараховується команді так само, як вбитий гравцем, а бонус за нього нараховується як зазвичай — часом або балами.
* Спроб команди це не витрачає: ліміт відповідей маркер не чіпає.
* У журналі відповідей такий код записано **без гравця** — його вбив рушій, а не людина.
* **Один маркер — один раз.** Маркер у тексті завдання видно на кожному завантаженні сторінки, але код, який уже вбито, він пропускає. Той самий маркер, поставлений і в тексті завдання, і в бонусі, — це одна дія.
* Код має бути кодом або бонусом цього завдання, підходить і наскрізний бонус. Чужий код маркер мовчки пропустить, а редактор попередить про це під час збереження.
Усе це — про маркер без умови. Код gps-зони (''on gps'') сервер не вбиває сам, а називає сторінці гравця, і та вбиває його звичайною відповіддю: у журналі він записаний за гравцем, який дійшов. Докладніше — [[uk:authors_main:task_editor:advanced:gps|GPS]].
===== Ланцюжки =====
Маркер усередині гілки шаблону спрацьовує, коли гілка відкрилася. А відкрити її може код, який вбив інший маркер. Так збирається ланцюжок:
{! code старт !}
{% match code_1 }:{ {%= старт}:{ {! code другий !} %} %}
Завдання відкрили — сервер вбив ''старт'', гілка за першим сектором відкрилася, і маркер у ній вбив ''другий''. Гравцеві не треба перезавантажувати сторінку: рушій дограває ланцюжок у тому самому запиті. Якщо вбитий код закрив завдання, маркери наступного завдання спрацюють, щойно команда на нього перейшла.
Так само зручно збирати [[uk:authors_main:task_editor:advanced:composite_codes|складений код]]: у найглибший шаблон матрьошки замість '''' ставиться ''{! code ПІДСУМОК !}'', і підсумкового коду немає в сторінці навіть тієї миті, коли він вбивається.
===== Умова про поле: перемикач =====
Звичайний ''code'' спрацьовує один раз. Якщо потрібно, щоб маркер вбивав код знову й знову, перед кодом пишеться **умова про поле** у квадратних дужках:
{! code [c1 !=] зона_а !} вбити, якщо в секторі 1 зараз НЕ цей код
{! code [c2 <] 3ворота !} вбити, якщо в секторі 2 код з меншим числом на початку
* Поле пишеться так само, як у скриптах: ''c1'' — сектор, ''b2'' — бонус, ''gb3'' — наскрізний бонус.
* Код рівно один, і він має бути відповіддю **саме цього поля**. Інакше поле від коду не зміниться, і маркер вбивав би його нескінченно, — тому таке збереження редактор відхилить.
* Операторів два. ''!='' — «у полі зараз інше»: сектор зберігає останній код, що до нього ввійшов, тож два маркери з різними кодами на один сектор роблять із нього перемикач. ''<'' — «у полі код з меншим числом на початку»: так робиться пріоритет, коли важливий найкращий із досягнутих результатів. Код для ''<'' мусить починатися з цифри.
Найбільше умова про поле потрібна в gps-іграх, де перемикач команда рухає ногами, — приклади на сторінці [[uk:authors_main:task_editor:advanced:gps|GPS]].
Два маркери, що змагаються за одне поле в одному відмальовуванні, рушій не перекидатиме туди-сюди: застосує перший, зупиниться й напише про це тестувальникові.
===== Завершити гру: finish_game =====
''{! finish_game !}'' закриває команді **всю лінійку одразу**: завдання, на якому вона стоїть, і всі, до яких вона не дійшла. Команда одразу бачить фінішну сторінку, ніби розв'язала останнє завдання.
У статистиці такі завдання позначено «Гру завершено». У завдання, на якому команда стояла, записано час, який вона на ньому провела; у тих, куди вона не дійшла, час нульовий.
Аргументів і умови в дії немає. Завершити гру за точкою на місцевості — це два кроки: зона вбиває код, а ''finish_game'' стоїть у гілці шаблону за цим кодом.
{! on gps 51.5299 -0.1275: code фініш !}
{% match code_1 }:{ {%= фініш}:{ {! finish_game !} %} %}
> **Обережно:** у тестувальника ''finish_game'' спрацьовує так само, як у команди, — інакше кінцівку не перевірити. Тестувальникові це не страшно, «Рестарт гри» в панелі тестування починає все заново. А команді в справжній грі повернути закриті завдання нічим.
===== Як перевірити: вкладка «Дії» =====
Маркер невидимий, і зі сторінки не зрозуміти, спрацював він чи ні. Для цього в тестувальника в панелі тестування внизу сторінки є вкладка **«Дії»** — вона з'являється, коли маркери на цьому завантаженні щось зробили або в них знайшлася помилка.
{{ :authors_main:task_editor:advanced:server_actions_tab_uk.png?800 |Вкладка «Дії»: що вбили маркери на цьому завантаженні сторінки}}
Рядків буває більше, ніж маркерів: рушій проходить завдання заново після кожного вбитого коду, і вже зроблене позначає «код уже було вбито».
* **вбито код** — маркер спрацював;
* **код уже було вбито** — маркер на місці, але робити йому нічого;
* **такого коду в завданні немає - дію пропущено** — одрук у коді або код з іншого завдання;
* **поле вже таке, якого просить умова** — умова про поле не пропустила;
* **гру завершено, закрито завдань** — спрацював ''finish_game'';
* **ланцюжок замкнувся на цьому маркері** — два маркери змагаються за одне поле;
* помилки розбору маркера — червоним угорі.
Маркери з умовою ''on gps'' показує сусідня вкладка «GPS»: там зони на карті, і позицію гравця можна посунути, не виходячи з дому. Докладніше — [[uk:authors_main:task_editor:advanced:gps|GPS]].
===== Що перевіряє редактор під час збереження =====
Відхиляє збереження:
* маркер, який не розібрався: незнайома дія, ''code'' без коду, немає закривального ''!}'';
* маркер усередині маркера;
* маркер у назві коду або підказки;
* умову про поле, якого в завданні немає, або код, що не є відповіддю цього поля;
* ''finish_game'' з умовою або з аргументами.
Попереджає, але зберігає:
* код, якого немає серед кодів і бонусів завдання, — його можна дописати наступним збереженням;
* gps-маркери без ''gps_start()'' у скрипті завдання.
===== Додаткова інформація =====
* [[uk:authors_main:task_editor:advanced:edit_templates|Шаблони]] — гілки, усередині яких маркер спрацьовує за умовою
* [[uk:authors_main:task_editor:advanced:composite_codes|Складені коди]]
* [[uk:authors_main:task_editor:advanced:gps|GPS]] — зони на місцевості