Ресиверы ("receiver", с англ. – приёмник.) – ЕRM-коды, действующие на героев, объекты, события таймеры, функции,
сообщения или игровые установки.
Большинство ресиверов имеют несколько опций, что может быть использовано для самых разных вещей.
Например, ресивер LE действует на локальные события на карте и имеет несколько различных команд для изменения свойств события.
Ресиверы помещаются во временны́х событиях после триггера, который их запускает. Они выполняются один раз до конца события или достижения другого триггера. На одну строчку можно писать одну команду или более, но для ясности и читабельность вашего скрипта (а так же для поиска ошибок), лучше писать на каждую строку по команде.
Все ресиверы начинаются с двойного восклицательного знака "!!" и заканчиваются точкой с запятой ";". Сразу после "!!" следует двухбуквенный код ресивера, как AR для артефактов, HE для героев и т.д. Следующая часть после этого кода зависит от типа ресивера. Некоторые ресиверы имеют один или более параметров перед двоеточием ( : ), каждый параметр - целое число. Далее, после двоеточия следует опция ресивера. Опции имеют много форм и могут включать один или более параметров каждый; они представлены на страницах Справочника далее как XXXX. Замещайте XXXX соответствующей командой или командами. После последней команды вы должны поставить знак точка с запятой ";"
Все ERM команды (ресиверы и инструкции) должны иметь, как минимум, одну опцию для корректной работы.
Пример синтаксиса:
В примере выше, локальное событие в координатах x=12, y=21 и уровень=0 (верх)
станет модифицированным и будет давать 1000 опыта для героя.
Часто вам нужно не перемещать значение, а просто добавить или убавить значение. Например, если вы хотите дать герою опыт,
вы установите герою кол-во опыта без учета текущего значения, т.е. опыт будет установлен на новое, установленное значение.
Так же будет и с ресурсами игроков. Для добавления или убавления мы используем расширенный синтаксис: ставим маленькую d как префикс числа.
Пример расширенного синтаксиса:
В этом примере 500 опыта будет добавлено к уже имеющемуся опыту.
Если бы мы использовали E500, а не Ed500, у героя опыт стал бы равняться 500, а не увеличен на 500.
Для отнимания 500 опыта, используйте Ed-500 соответственно.
Если вы хотите оставить параметр неизменным, используйте d0 или просто d.
На принципе использования префикса d, мы можем использовать префикс c (опять же только маленькая!) для того,
чтобы номер текущего дня добавился к числу. Другими словами, c равно текущему дню. Например,
c=4 – это месяц 1, неделя 1, день 4;
c=8 – это месяц 1, неделя 2, день 1;
c=30 – это месяц 2, неделя 1, день 2
Пример:
Нам нужно событие, которое запустится через пять дней после каких-либо действий игрока.
Установим день его появления ресивером GE, опция F$.
Пусть номер события будет 100 (первое число в сообщении события), используем:
Это событие запустится через 5 дней после выполнения команды (она выполнится после, к примеру, посещения локального события).
Более того, можно использовать оба префикса вместе (d должен стоять первым):
Если команда имеет четыре параметра, вы ДОЛЖНЫ заполнить их все, отделяя каждый клавишей "слэш" /.
Вы не можете опустить параметр команды, иначе она не будет работать и выдаст сообщение об ошибке.
Однако, в некоторых случаях вы можете опустить точное число и просто оставить пустым место после слэша.
Когда вы опускаете параметр, считается, что вы ввели ноль, и если ноль - корректное значение для параметра, команда будет работать.
Пример:
Команда выше - пример использования расширенного окна диалога. Он имеет больше параметров, чем любая другая опция ERM,
но вы не должны заполнить их все. Мы используем три из возможных 16. Именно для этой команды ввод 0 значит "оставить без изменений",
но многие другие команды просто принимают значение равное нулю, что не всегда подразумевалось.
В большинстве случаев вы можете поместить несколько команд после одного заголовка ресивера (часть перед двоеточием).
Команды можно не разделять пробелами, но для большей читаемости рекомендуемо. В некоторых случаях, например,
установка и управление переменными ресивером VR, многокомандность не всегда работает корректно.
Так, если вы используете несколько команд, убедитесь, что они выполняются правильно и дают корректный результат.
Если одна из ваших команд показывает или устанавливает текст, вы должны поместить её последней.
Если вы вставите любую другую команду после текста (как часть одного ресивера), вы получите ошибку.
Примеры:
Что-либо в скрипте, следующее после точки с запятой и перед следующим ресивером или триггером считается комментарием и игнорируется ERM-процессором.
Некоторые вставляют свои комментарии в квадратные скобки для облегчения чтения скрипта и комментариев другими людьми, но это не обязательно.
Пример кода с комментарием (после точки с запятой):
Сообщение выше показывает имя героя для большей персональности.
Переменные могут быть использованы для замещения любого # или $, кроме # перед двоеточием у ресиверов CE и GE.
Все другие # и $ в ресиверах, перед и после двоеточия, могут быть замещены на переменную соответствующего типа.
Многие ресиверы, относящиеся к конкретной точке на карте, также могут использовать ссылки на переменные.
А именно, первая v-переменная хранит X-координату объекта; вторая v-переменная – Y-координату объекта; в третьей v-переменной должен быть Уровень.
Пример использования ссылок на переменные: (с ресивером OB)
Инструкции идентичны ресиверам, за исключением того, что начинаются с комбинации знаков восклицания и номера (!#) и срабатывают только раз,
при первой загрузке карты. Большинство ресиверов работает и в качестве инструкций, но некоторые (особенно ресиверы определённого объекта)
не работают вообще и вызывают сообщения об ошибке либо вылет карты. Инструкции выполняются один раз при загрузке карты,
в порядке появления во временны́х событиях, независимо от триггеров, ресиверов и комментариев до и после них.
Вы можете использовать инструкции для вызова функций и все обычные ресиверы (не-инструкции), будучи частью функции, будут работать нормально,
однако, вы ДОЛЖНЫ включить функцию во временное событие ПЕРЕД инструкцией, вызывающей её, иначе она не сработает
(вы не получите сообщения об ошибке, функция просто не сработает).
Примеры: