ERM
Материал из Википедии — свободной энциклопедии
ERM — Event Related Model — англ. «событийно-связанный модуль» — скриптовый язык для дополнения «Heroes of Might and Magic 3.5: In the Wake of Gods». Название устарело. Первоначально ERM предназначался исключительно для расширения возможности событий — объектов, выполняющих некое действие при попадании на клетку, где они находятся. Позднее ERM был значительно изменён и дополнен. Теперь с помощью скриптов можно контролировать практически весь процесс игры. Было предложено новое название — GRM — Gamer Related Model, но оно не «прижилось».
[править] Структура языка ERM
Скрипт на языке ERM представляет собой совокупность триггерных блоков (trigger blocs), срабатывающих при каком-либо действии игрока, внутри которых находятся блоки команд — приёмники (recievers). Также могут быть инструции (instructions) — блоки команд, выполняемых при загрузке карты. Вот пример скрипта:
ZVSE !#VRz230:S^Кузница Гарика^; !?OB63/39; !!IF:M^Вы в Кузнице Гарика.^ V20/1; !#HT63/39:T230; !$OB63/39; !!IF:M^Вы вышли из Кузницы Гарика.^;
В самом начале скрипта стоит идентификатор ZVSE. Он показывает, что дальнейший текст представляет собой скрипт на языке ERM. Все последующие строки начинаются с восклицательного знака и заканчиваются точкой с запятой. Любой текст вне этих символов рассматривается как комментарий. В данном примере «комментариями» являются знаки перевода строки между строками. Вторым символом в строке стоит один из символов ?,$,!,#. Этот символ определяет тип команды. Вопросительному знаку соответствуют триггеры (triggers), символу доллара — пост-триггеры (post-triggers), восклицательному знаку — приёмники и «решётке» — инструкции.
Триггеры и пост-триггеры определяют границы триггерных блоков и условия их выполнения: триггерный блок включает в себя все приёмники, находящиеся между соответствующим и следующим триггерами (пост-триггерами). Также границей является конец скрипта. Условия выполнения зависят от типа триггера (пост-триггера) и его параметров. Тип триггера записывается двумя заглавными английскими буквами после символов ?,$.После него ставятся параметры (числа от −2³² до 2³²-1 или числовые переменные), разделяемые косой чертой. Количество и значение параметров зависят от типа триггера. В настоящий момент существуют следующие типы триггеров: AE, BA, BF, BG, BR, CM, CO, FU, GE, HE, HL, HM, IP, LE, OB, MF, MG, MM, MR, MW, PI, SN, TH и TM. А также пост-триггеры LE и OB. Принципальной разницы между триггерами и пост-триггерами нет, последние можно считать как ещё два типа триггеров.
В данном примере имеется триггер и пост-триггер OB. соответствующие триггерные блоки выполняются соответственно до и после посещения некоего объекта. В данном случае имеются два параметра 63 и 39, которые показывают, что этим объектом являются все объекты типа 63 и подтипа 39.
Приёмники и инструкции содержат блоки команд скрипта. Инструкции выполняются при загрузке игры, а приёмники при срабатывании соответствующего триггера. За исключением символа типа ! или # их структура идентична. Практически любая инструкция может быть приёмником, и наоборот. После символа типа идёт тип приёмника, состоящий из двух заглавных английских букв. В настоящее время имеются следующие типы приёмников (и инструкций): AI, AR, BA, BF, BG, BH, BM, BU, CA, CD, CE, CH, CM, CO, DW, DO, EA, EX, FR, FU, GE, GD, GR, HE, HL, HO, HT, IF, IP, KT, LE, LN, MA, MC, ML, MN, MF, MM, MO, MP, MR, MT, MW, OB, OW, PO, QW, SC, SG, SK, SN, SP, SR, ST, SW, SY, TM, TR, UN, UR, VC, VR, WG, WH, WM, WT и. Как и триггер, приёмник имеет параметры, общие для всех его команд. После параметров ставится двоеточие и идёт блок команд, разделяемых произвольным количеством знаков, не являющихся цифрами, заглавными английскими буквами или одним из символов *, :, +, -, ;, ^. Обычно принято разделять команды одним пробелом или же не разделять их вовсе. Команда представляет собой заглавную английскую букву, после которой могут быть параметры — числа или переменные, разделяемые косой чертой. Также может быть параметр в виде текстовой строки, ограниченной символами ^ и располагающийся после прочих. Количество параметров, их тип и значение самой команды зависят от её типа (заглавная английская буква в начале команды) и типа её приёмника (инструкции).
В нашем примере имеются две инструкции VR и HT и два приёмника IF. VR командой S устанавливает строковую переменную z230 в значение «Кузница Гарика», а HT командой T связывает название объектов типа 63 и подтипа 39 со строковой переменной номер 230. Оба приёмника IF имеют команду M, выводящую сообщение на экран, а первый из них также имеет команду V, устанавливающую флаг (булеву переменную) номер 20 в значение 1 (истина).
Таким образом, данный скрипт назовёт все объекты типа 63 и подтипа 39 «Кузницами Гарика», а при входе и выходе будет выдавать сообщения. Это простейший возможный пример. В данной статье описана лишь общая структура языка. Не описаны условные блоки, флаги и переменные лишь упоминаются и не дан список всех команд и параметров всех триггеров и приёмников. Ссылки на сайты, где можно получить более подробную информацию, даны в конце статьи.
[править] Файлы и ссылки
- Страница на официальном форуме WoG, посвящённая ERM
- Раздел на русскоязычном форуме поддержки, посвящённый ERM
- Гильдия Скриптописцев
- Помощь по ERM на русском языке
Это незавершённая статья о компьютерном программировании. Вы можете помочь проекту, исправив и дополнив её. |
Для улучшения статьи желательно?:
|