Внимание! Здесь дано описание команд ERM версии 1.4
WoG поддерживает ВСЕ команды этой версии ERM, но она содержит только десятую часть новых возможностей ERM версии 2.0.
После установки игры обратитесь к новой документации:
пуск - программы - новая жизнь героев - "ERM Help for Heroes III In the Wake of Gods"
Технология, позволяющая изменять характеристики объектов карты в зависимости от
поведения игроков (в том числе и AI).
Все обычные карты играются стандартным образом.
Некоторые изменения "включаются" автоматически как расширение игры (новые артефакты).
Другие требуют специально "изготовленных" карт с поддержкой ERM.
1. Новые Артефакты
Добавлен новый артефакт - Волшебная Палочка (Magic Wand).
Это артефакт номер 141.
В нормальной ситуации он не может появиться на карте, поэтому его можно скопировать с
карты-примера. Кроме того его номер можно использовать, как и для любого другого артефакта.
Положить артефакт можно в слоты с первого по пятый и свойство его от этого меняется.
Располагаясь в первом слоте, он каждый день вызывает трансформацию головного убора и шарфика.
Во втором - меча и щита.
В третьем - колец.
В четвертом - кальчужки и красовок.
В пятом - плащика и артефакта в четвертом слоте. Суперартефакты и их части не трансформируются. На
пустых местах так же ничего не возникает. Вероятность появления конкретных артефактов
определяется их значимостью. Некоторых придется ждать долго :-) Артефакты, которые запрещены
для автоматического генерирования на карте, не могут появиться. К сожалению, без изменения
LOD файлов поменять внутренний вид ВП (на теле) не просто, поэтому он остается не сильно
привлекательным. Внешний же вид (на земле) можно придать любой.
Специально "изготовленная" карта автоматически распознается в начале новой игры
или загрузке сохраненной и, если синтаксис
Расширения корректный, то включается ERM. Узнать об этом можно в момент загрузки
карты. Если она содержит элементы ERM, то появляется соответствующее окно с сообщением:
"ZVS: Event Related Model has been found. Enabled."
Для создания ERM карты необходимо создать одно или несколько Событий в Спецификации Карты.
У события важно лишь его содержание(Послание), все остальное - не важно.
Послание должно содержать в начале текст "ZVSE". Перед ним могут быть только
пробелы и перевод строки. После него может идти любой текст, который будет проанализирован при
загрузке на наличие командных последовательностей.
Команды делятся на Генераторы, Приемники и Инструкции.
2. Универсальный формат.
Все Генераторы, Приемники и Инструкции имеют общий формат: Заголовок [:Тело] ;
В квадратных скобках указаны необязательные элементы. В частности, Тело отсутствует у Генераторов.
В Заголовке указана информация о конкретном объекте, который будет восприниматься как Генератор (Г),
Приемник (П) или Инструкция (И), а также, возможно, информация о том, может он выполняться или нет.
В Теле распологаются исполнительные ERM команды, которые зависят от конкретного типа П или И.
Заголовок имеет следующий формат: !{?|!|#}AB [ Идентификатор ] [ Условия ]
В фигурных скобках указан набор элементов, разделенных символом '|', среди которых
надо выбрать один. Два символа 'AB' задают буквенный эквивалент - тип Г,П или И (см. далее).
Идентификатор - набор чисел, задающих конкретный объект. Условия - условия "выполнения"
следующего далее Тела для П или И или всех последующих П для Г. В случае, если Условий нет, то данный
Г,П,И выполняются "безусловно".
Идентификатор имеет следующий формат: №[/№[/№[...]]]
Символы '№' обозначают десятичные числа, количество которых зависит от типа
Г,П,И (см.далее).
Условия имеют следующий формат: &№[/№[/№[...]]]
Символ '&' отделяет числа, которые
определяют условия "выполнения" от Идентификатора. Выполнение может регламентироваться
Условными Флагами (УФ) (всего 10). Для того,
чтобы сделать зависимым данный Г,П,И от какого-либо флага, необходимо указать его номер (от 1 до 10)
среди данных чисел. Если число положительное, то условие - "если установлен", если отрицательное, то
- "если сброшен".
Тело имеют формат, уникальный для
каждого Г,П,И (см. далее).
Пример: !!LE10/33/1&1/-2/5:F5 R4 B2/3;
В данном случае задан Приемник типа LE (событие на карте) в позиции
X=10, Y=33, Уровень=Подземелье. В теле приемника заданы три команды: F, R и B (см. LE Приемник).
Эти команды (все Тело) будут выполнены только, если на момент выполнения данного П
будет установлен 1-й и 5-й УФ, а 2-й УФ будет сброшен. В противном случае Тело не выполняется.
3. Генераторы и Приемники
В случае если во время игры "случится" генератор, то в этот момент будут произведены
указанные действия со всеми следующими за ним приемниками.
Синтаксис генераторов следующий:
Синтаксис
Генераторы
!?LE#1/#2/#3;
Генератором может быть Event на карте. Содержание и свойства Eventа не
важны. Никакого его изменения не будет. Он используется лишь как триггер события.
#1- координата X Eventа на карте, #2-координата Y на карте, #3- уровень (0-земля,
1-подземелье). Данный Event должен существовать в указанной позиции на карте
!?GE#;
Во данном случае это глобальное событие под номером #. # - это число, которое должно быть
первым в тексте соответствующего события. В дальнейшем в ходе игры данное число НЕ появится
в тексте самого сообщения. Пример. Текст " 1230 Вот это да!" превратиться в "Вот это да!"
под номером 1230
Здесь и далее в опциях знак # означает десятичное число, значение которого используется
непосредственно, знак $ означает либо число #, либо комбинацию d#, при этом символ d перед
числом означает, что будет использоваться не непосредственно число #, а сумма этого числа
со значением, которое было использовано на этом месте. Пример. Первый день появления
события был 5-й. Устанавливаем новый день (опцией F$) F6. Теперь день будет 6-й. Если же
использовать Fd6, то новый день будет 5+6=11. Аналогично комбинация c# означает, что к
числу # будет добавлен текущий день (начиная с 1 с учетом недели и месяца). Тот же пример.
Если текущий день 14, то Fc6 даст 14+6=20, Fcd6 или Fdc6 даст 14+5+6=25. Таким образом,
Возможны следующие комбинации: для $ {#,d#,c#,cd#,dc#} и для # {#,c#}.
Приемники располагаются после генератора. Синтаксис такой:
Синтаксис
Приемники
!!GE#:XXXX;
Приемником является глобальное событие для карты (# - номер события).
!!LE#1/#2/#3:XXXX;
Event в указанной позиции.
!!CE#:XXXX;
Событие в городе (# - номер события). Это число,
которое должно быть первым в тексте соответствующего события. В тексте сообщения оно не
появится.
!!MO#1/#2/#3:XXXX;
Монстр в указанной позиции.
!!AR#:XXXX;
Артефакт или ресурс (# - номер арт/рес). Это число, которое
должно быть первым в тексте сообщения соответствующего артифакта/ресурса. В тексте сообщения
оно не появится.
XXXX - командная строка (опции),
имеющая синтаксис, специфичный для данного типа приемника. Строка может содержать пробелы.
Опции для ВСЕХ приемников:
Z0
данный приемник "включается", т.е. воспринимает все инструкции управления с данного момента.
Изначально все приемники "включены".
Z1
данный приемник "ВЫключается", т.е. НЕ воспринимает все инструкции управления с данного момента.
Z2
состояние данного приемника инвертируется.
Z3
восстановить предыдущее состояние данного приемника (глубина памяти - одно состояние).
Z4
генератор - эквивалент данного приемника "включается", т.е. его приемники будут обрабатываться.
Изначально все генераторы "включены".
Z5
генератор - эквивалент данного приемника "ВЫключается", т.е. его приемники НЕ будут обрабатываться.
Z6
состояние генератора - эквивалента данного приемника инвертируется.
Z7
восстановить предыдущее состояние генератора - эквивалента данного приемника (глубина памяти - одно состояние).
Пример Имеем следующий ERM текст:
!?GE1;
!!LE1/2/0:...com1...Z0...com2...Z5...com3...Z1...com4...Z4...com5...;
!!LE1/2/0:...com6...;
...
!?LE1/2/0;
...
!?GE2;
!!LE1/2/0:Z4;
Допустим, что первым выполнится генератор GE1 (разрешен). Тогда выполнение com1 зависит от предыдущего
состояния премника LE1/2/0, com2 и com3 будут выполнены, Z5 запрещает генератор LE1/2/0,
com4 и com5 не будут выполнены, в том числе Z4 не разрешит генератор. Далее, если генератор GE2
выполнится раньше и разрешит генератор LE1/2/0, чем сам генератор LE1/2/0, то последний будет
разрешен и его приемники выполнятся, иначе - нет.
Опции для GE приемника:
M^TEXT^
установить текст сообщения приемника в TEXT, но по длине не больше, чем
оригинальный текст (иначе он будет обрезан). Сообщение TEXT может содержать любой текст
(с переводом строк), кроме символов ^
M#
установить в качестве текста сообщения полный текст глобального события номер #.
M-1
не выводить текст вообще.
F$
установить первый день появления в $
R$
установить периодичность появления в $ дней.
B#1/$2
задает количество ресурса #1(от 0 до 6) в значение
$2 (может быть отрицательным)
E$
устанавливает игроков (по цветам), кому доступно событие
(см. Формат E). (вариант с d означает битовое OR, то есть можно разрешить, не меняя других).
Пример. E3-разрешает красному и синему, другим запрещает. Ed3-разрешает красному и
синему, при этом разрешения для других не меняется.
N$
устанавливает игроков (по цветам), кому НЕдоступно событие
(см. Формат E). (вариант с d означает битовое AND с инверсией, то есть можно запретить, не меняя других)
Пример. N3-запрещает красному и синему, другим разрешает. Nd3-запрещает красному и
синему, при этом разрешения для других не меняется.
H#
применять события к человеческим игрокам (1).
Q#
применять события к компьютерным игрокам (1).
Опции для LE приемника:
M^TEXT^
установить текст сообщения приемника в TEXT, но по длине не больше, чем
оригинальный текст (иначе он будет обрезан). Сообщение TEXT может содержать любой текст
(с переводом строк), кроме символов ^
M#
установить в качестве текста сообщения полный текст глобального события номер #.
M-1
не выводить текст вообще.
G#1/$2/$3
монстр-охранник в позиции #1 (от 0 до 6), типа $2(-1 - очистить позицию от
монстров), кол-вом $3 штук. При этом охрана лишь запоминается, но не "включается".
X#
если # не 0, то защита "включается", если 0, то "отключается". Проверки на наличие
самой охраны не делается - она должна быть установлена до или после этого или задана
изначально.
R#1/$2
задает количество ресурса #1(от 0 до 6) в значение $2 (может быть отрицательным)
E$
задает количество опыта для Eventа в $
P$
задает очки заклинаний (может быть отрицательным)
O$
задает мораль (от -3 до 3)
U$
задает удача (от -3 до 3)
F#1/$2/$3/$4
первичные 4 навыка
N#1/$2/$3
установить в таблице вторичных навыков, "даваемых" Eventом, в позицию
списка #1 навык $2 умение $3 (баз-0, прод-1, эксперт-2). В данном случае можно лишь
ЗАМЕНЯТЬ уже заданный изначально навык на другой. Если в этой позиции списка нет навыка,
то не устанавливается.
A#1/$2
установить в таблице артефактов, "даваемых" Eventом, в позицию списка #1
артефакт $2. В данном случае можно лишь ЗАМЕНЯТЬ уже заданный изначально артефакт на
другой. Если в этой позиции списка нет артефакта, то не устанавливается.
S#1/$2
установить в таблице заклинаний, "даваемых" Eventом, в позицию списка #1
заклинание $2. В данном случае можно лишь ЗАМЕНЯТЬ уже заданное изначально заклинание
на другое. Если в этой позиции списка нет заклинания, то не устанавливается.
C#1/$2/$3
монстр-подарок в позиции #1 (от 0 до 6), типа $2, кол-вом $3 штук.
Опции для СE приемника:
M^TEXT^
установить текст сообщения приемника в TEXT, но по длине не больше, чем
оригинальный текст (иначе он будет обрезан). Сообщение TEXT может содержать любой текст
(с переводом строк), кроме символов ^
M#
установить в качестве текста сообщения полный текст глобального события номер #.
M-1
не выводить текст вообще.
F$
установить первый день появления в $
R$
установить периодичность появления в $ дней.
B#1/$2
задает количество ресурса #1(от 0 до 6) в значение
$2 (может быть отрицательным)
E$
устанавливает игроков (по цветам), кому доступно событие
(см. Формат E). (вариант с d означает битовое OR, то есть можно разрешить, не меняя других).
Пример. E3-разрешает красному и синему, другим запрещает. Ed3-разрешает красному и
синему, при этом разрешения для других не меняется.
N$
устанавливает игроков (по цветам), кому НЕдоступно событие
(см. Формат E). (вариант с d означает битовое AND с инверсией, то есть можно запретить, не меняя других)
Пример. N3-запрещает красному и синему, другим разрешает. Nd3-запрещает красному и
синему, при этом разрешения для других не меняется.
H#
применять события к человеческим игрокам (1).
Q#
применять события к компьютерным игрокам (1).
C#1/$2
монстр-подарок в позиции #1 (от 0 до 6), кол-вом $2 штук
U#
построить здание # (от 0 до 40) в городе
(см. Формат U).
D#
НЕ строить здание # (от 0 до 40) в городе
(см. Формат U).
Опции для MO приемника:
M^TEXT^
установить текст сообщения приемника в TEXT, но по длине не больше, чем
оригинальный текст (иначе он будет обрезан). Сообщение TEXT может содержать любой текст
(с переводом строк), кроме символов ^
M#
установить в качестве текста сообщения полный текст глобального события номер #.
M-1
не выводить текст вообще.
A$
установить артефакт - награду в $.
B#1/$2
задает количество ресурса #1(от 0 до 6) в значение
$2 (может быть отрицательным)
G$
установить количество монстров в $.
O#
если #=1, то количество не будет расти, иначе - будет.
U#
если #=1, то не убегает, иначе - может драпануть.
R#
если #=1, то всегда будет биться, иначе - всегда просится принять.
Опции для AR приемника:
M^TEXT^
установить текст сообщения приемника в TEXT, но по длине не больше, чем
оригинальный текст (иначе он будет обрезан). Сообщение TEXT может содержать любой текст
(с переводом строк), кроме символов ^
M#
установить в качестве текста сообщения полный текст глобального события номер #.
M-1
не выводить текст вообще.
G#1/$2/$3
монстр-охранник в позиции #1 (от 0 до 6), типа $2(-1 - очистить позицию от
монстров), кол-вом $3 штук. При этом охрана лишь запоминается, но не "включается".
X#
если # не 0, то защита "включается", если 0, то "отключается". Проверки на наличие
самой охраны не делается - она должна быть установлена до или после этого или задана
изначально.
Артефакты и ресурсы имеют общую ERM нумерацию.
Опции для HE приемника:
O$
сменить хозяина героя (соответствует номеру цвета) (см. Формат E1).
P$1/$2/$3
переместить героя в позицию X ($1), Y ($2), Level ($3).
I$
установить очки заклинаний.
X#(...)
сменить специализацию героя (см ниже). # от 0 до 6. Количество остальных параметров зависит от типа специализации #.
U$1/$2/$3
сменить точку привязки и радиус бега. Точка "центра привязки" героя меняется
На X ($1), Y($2) (уровень прежний). Радиус бега устанавливается в $3
(-1 - "отпустить" героя).
C#1/#2/$3/$4
сменить монстров у героя. Если #1=0, то #2-позиция, в которой существующие
монстры меняются в $3 с количеством $4. Если $3=#3=-1 , то это - апгрейд монстров в
позиции #2 с количеством $4. Если $3=#3=-2 , то это - ДЕградация монстров в позиции
#2 с количеством $4. Если #1=1, то все монстры #2 меняются на $3 с количеством $4.
S#1/$2
устанавливает вторичное умение. Умение #1 (см. Формат У). $2 - уровень умения
(0- удалить, 1-базовый,2-продвинутый,3-эксперт). Установить можно хоть все(!)
существующие умения (всего 28) у Героя на эксперта, но показываться будут только
первые 8.
A#
меняет артефакты. # - номер артефакта
(см. Формат А1). Если #>0 - добавляет артефакт
в рюкзак. Если #<0 - удаляет артефакт -# во всех слотах у героя.
M#1/$2
устанавливает заклинание. Заклинание #1
(см. Формат З)$2 - уровень умения
(0- удалить, 1-базовый,2-продвинутый,3-эксперт).
F$1/$2/$3/$4
первичные 4 навыка.
Синтаксис опции X для HE приемника:
0/$
сделать специалистом во вторичном умении $ (см. Формат У)
1/$
сделать мастером существ типа $(и, возможно, $+1) (см. Формат C).
2/$
производит каждый день ресурс номер $ (см. Формат R).
3/$
сделать специалистом в заклинании $ (см. Формат S).
4/$1/$2/$3/$4
другой способ сделать мастером существ типа $1(и, возможно, $1+1)
(см. Формат C). $2 - бонус атаки существ, $3 - бонус защиты существ, $4 - бонус повреждений, наносимых существами.
апгрейд существ типа $1 и $2 (а также, возможно, $1+1 и $2+1) до существ типа $3.
Цена апгрейда определяется как разность стоимости существ (если больше 0 :-)
Для "парных" существ (основной и проапгрейденный) в случае указания
в качестве типа первого из них, второй также будет апгрейдится.
В строке опции следуют друг за другом без перерыва и могут повторяться (при этом
последняя по порядку отменяет все предыдущие). Один и тот же приемник может быть указан
несколько раз. Между Генераторами и Приемниками могут быть комментарии.
Опции для IF приемника (Gamer Related Model):
M^TEXT^
НЕМЕДЛЕННО вывести данное сообщение (TEXT) на экран. Сообщение TEXT может содержать любой текст
(с переводом строк), кроме символов ^
Q#^TEXT^
НЕМЕДЛЕННО задать игроку вопрос (TEXT). Результат ответа (Ok=1, Cancel=0) копируется
в Условный Флаг # (от 1 до 10). Сообщение TEXT может содержать любой текст
(с переводом строк), кроме символов ^.
V#1/#2
сразу устанавливает Условный Флаг #1 (от 1 до 10) в значение #2 (1 или 0).
AXXXX
устанавливает ВСЕ 10 флагов одновременно. Строка XXXX состоит из 10-ти нулей и единиц
(в начале младшие). Пример A0100010000 устанавливает все УФ в 0, а 2-й и 6-й в 1.
В начале игры ВСЕ флаги сброшены (=0).
SXXXX
устанавливает указанные из 10 флагов. Строка XXXX состоит из 10-ти нулей и единиц
(в начале младшие). Пример S0100010000 устанавливает 2-й и 6-й в 1, а остальные не меняет.
RXXXX
сбрасывает указанные из 10 флагов. Строка XXXX состоит из 10-ти нулей и единиц
(в начале младшие). Пример R0100010000 устанавливает 2-й и 6-й в 0, а остальные не меняет.
4. Инструкции
Инструкции - команды для Аддона, выполняемые немедленно после загрузки карты. Синтаксис
инструкций следующий:
!#XXXX:YYYY; где XXXX задает тип инструкции, а YYYY
конкретные команды, символ # означает сам этот
символ '#'.
Тип инструкции XXXX:
Набор Инструкций полностью идентичен набору Приемников.
Синтаксис также идентичен, за исключением первых двух символов.
Пример. Возьмем приемник !!LE1/2/3:G5/2/3; Полный аналог Приемника в виде Инструкции будет
выглядеть так !#LE1/2/3:G5/2/3;
В отличие от Приемников, Инструкции могут распологаться в любом месте сообщения.
Пример:
ZVSE Event Related Model
!?LE3/1/0; Trigger Event at 3x1x0
!!GE2:F3R1; Shift the day of first occurence and set the frequency for event #2.
!!GE3:F3R2; The same for event #3
!!LE4/1/0:M^Hello,buddy!^Ed100Pd-100 O-1U1R2/100R6/100F1/2/3/4;
For the event at 4x1x0 change the message text, give 100 experience, remove 100 spell points
boost morale and luck, give 100 ore and 100 gold, +1 attack, +2 defence, +3 spell power и +4 knowledge.
!!LE4/1/0:N1/5/1N2/7/2A1/10A2/66S0/5S1/55 C0/5/10C1/10/1C2/45/2;
For the same Event change the 1st and the 2nd (counting from 0) secondary skills, the 1st and the 2nd
artifacts, the 0th and the 1st spell, give three monsters.
!!LE4/1/0:G3/6/4G5/10/11G0/0/100G0/-1/0X1;
For the same Event set guardians in the 3rd, 5th and 0th position, then remove from the 0th position
and turn the guard on.
!?LE4/1/0; Another trigger.
!!GE100:F2R0; The corresponding receiver. (event #100)
Изменение специализации героя НЕ восстанавливается при загрузке
другой карты или игры. Она восстанавливается только (!!!) после выхода из игры и повторном
запуске HEROES3.EXE. Таким образом, она действует и во всех загруженных после картах (даже
без ERM поддержки).
На текущий момент ERM карты могут "переигрываться" только повторной загрузкой карты.
Опция "Переиграть Сценарий" в "Системных Опциях" работает не корректно.
Смена "хозяина" Героя не является полноценной. Тем не мение она может
использоваться для некоторых целей. Нюансы данного действия следует проверить опытным путем.