{{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]] — зони на місцевості