Внутренняя кухня WoG. Что такое вогификация? Пример скрипта

Если вас что-то интересует по Героям 3: Tournament Edition, то вам сюда
Текущая версия HoMM3: Tournament Edition 1.03q
Ответить
Horn
Gold Dragon
Почетный член КС — Honored Member
Почетный член КС — Honored Member
Сообщения: 2652
Зарегистрирован: 28 окт 2002, 17:33
Откуда: СПб
Контактная информация:

25 июл 2005, 22:13Сообщение

Небольшой ликбез. :D
Когда вы запускаете h3wog.exe (или почти не отличающийся от него h3te.exe), программа время от времени (это определяется тем, что в игре произошло некоторое событие, например, герой зашел в замок, или началась битва, или просто игрок провел мышкой по гильдии магов на экране города) приостанавливает естественный ход игры и запускает интерпретатор скриптов, написанных на специальном языке ERM. Когда скрипт внесет изменения в память (например, у зашедшего в замок героя удвоились все войска), Герои продолжают работу.
Итак, чтобы написать простейшую программу на ERM, нужно указать, какое должно произойти событие (оно называется триггером) и что надо сделать в случае, если оно произойдет.

Пример скрипта.
Первая строка:
!?HL-1;
Этот триггер (Hero Level) активизируется каждый раз, когда какой-то герой повышает уровень. Если бы мы написали !?HL0; , то триггер сработал бы лишь для Оррина, !?HL1; - для Валески и т.д. Запись "-1" вместо номера героя означает "для любого".
Вторая строка:
!!HE-1:N?v1;
Здесь мы узнали номер героя, с которым произошло событие. "HE" говорит о том, что мы будем работать с героем (HEro), "N" - что нам нужен именно номер (возможны также I - мана, X - специальность, E - опыт, W - оставшийся запас хода, и т.п.) героя, "?" означает считывание этого номера (в переменную v1). Если бы мы написали "!!HE-1:Nv1", это бы значило "присвоить этому герою номер из переменной v1" - между прочим, некорректная команда, так как за каждым героем жестко закреплен его номер, и менять его нельзя.
Третья строка:
!!FU|v1<48/v1>63:E;
Это строка условие, которая звучит так: "если номер героя (v1) меньше 48 или (|, "и" обозначается как "&") больше 63, то закончить работу данного скрипта. Таким образом, продолжаем только с героями замка Инферно (именно они расположены в диапазоне от 48 до 63).
Четвертая строка:
!!HEv1:Wd100 I?v2;
Прибавляем этому герою 100 movement points к запасу хода. "d" означает "прибавить к текущему значению", если бы мы написали "!!HEv1:W100;", то у героя запас хода стал бы равен 100 вне зависимости от того, какой он был до этого.
Одновременно мы записали в v2 ману этого героя. Можно было бы написать "!!HEv1:I?v2;" отдельной строчкой, но так короче - разные действия с одним и тем же объектом (в данном случае с героем) можно писать в одной строке.
А теперь попробуйте сами угадать, что написано в пятой строке?
!!HEv1&v1=56/v2>=10:Id-10;
Ответ дан в конце поста. :wink:

Подобных скриптов написано великое множество. Часть из них называются "глобальными", имеют имена от script00.erm до script98.erm и находятся в папке Data\s. Все они написаны членами WoG-team и могут быть включены или выключены игроком в меню ВоГ-опций. Если выключить все, то получится обычный SoD.
Что такое вогифицкация карты? Это запуск главного, "мастерского" скрипта (script00.erm), который включает остальные глобальные скрипты и случайно расставляет по карте те новые объекты, которые вы разрешили в ВоГ-опциях. При этом они ставятся не на пустое место, а замещают часть стандартных объектов, которые имеют одинаковые с ними размеры и структуру. Например, утопия может быть заменена на Palace of Dreams - место, где можно сыграть в "однорукого бандита" на геройское золото. :) Если, конечно, этот самый Palace of Dreams не был отключен в опциях.
Какие объекты на что меняются и какова вероятность замены, описано в документации по WoG (папка \Documentation).
Если карту не вогифицировать, то в силу вступят лишь включенные вами вещи, "зашитые" в h3wog.exe (так называемые hard-coded options) - коммандеры, опыт войск, разрушение городов и строений, сброс артефактов и войск на карту и кое-что еще. Они все собраны в правом верхнем углу первой страницы опций.
Помимо глобальных скриптов, на каждой карте могут быть и свои, работающие только при игре на ней, скрипты (локальные). Для этого их надо либо вставить в сообщение Global Event на карте (устаревший способ, хотя работает и сейчас, но неудобен) или собрать в erm-файле, имя которого совпадает с именем карты. Этот файл хранится там же, где и карта - в папке \maps. Если карта вогифицируется, подключаются как глобальные, так и локальные скрипты, если нет - только локальные.

Ответ на задачку: "если это Айден (номер 56) и у него не меньше 10 маны, то уменьшить ее на 10".
Hу все, пока. Horn.

Ответить