Триггер (англ. trigger — спусковой крючок) — механизм проверки определённых игровых состояний, запускающий запрограммированную ответную реакцию игры при достижении состояния. А если проще, то если в игре происходит какое-либо событие, то пользователь может задать в редакторе собственные последствия данного события, дополняющие имеющиеся.
Триггеры - основа для написания скриптов на языках ERM (поддерживается в WoG и MoP) и WERD (только в MoP). ERM (Event Related Model, рус. событийно-связанный модуль) — язык текстовых команд, интерпретируемый игровым движком в исполняющийся программный код в режиме реального времени. Соответственно, недостаток этого языка - его медлительность, поэтому в MoP был создан WERD (Without ERM Relating Dynamic) — представление ERM в виде ассемблерного кода, собираемого в DLL с помощью бесплатного компилятора FASM.
Для обработчика триггера в ERM нужно написать "?!FUXXXX;", где XXXX - номер триггера. В WERD номера триггеров записываются в массив в файле Triggers.inc, после чего можно использовать триггер в пользовательском коде. При использовании триггеров с несуществующими номерами их код никогда не будет выполнен, если нигде в пользовательском коде не будет вызова триггера.
1 - Триггер_Перед_показом_карты
2 - Триггер_Расчёт_отрицательной_Морали
3 - Триггер_Настройка_списка_зданий_для_строительства
4 - Триггер_Нажатие_клавиши
5 - Триггер_Клик_в_окне_форта
6 - Триггер_Строительство_здания_в_городе
8 - Триггер_Таймер_первого_игрока
9 - Триггер_Post_HL
11 - Триггер_Перед_открытием_книги_заклинаний
12 - Триггер_Перед_установками_опыта_в_битве
13 - Триггер_Вход_в_экран_города
14 - Триггер_Начисление_очков_HP
16 - Триггер_Момент_Страха
17 - Триггер_Перед_взаимодействием_героев
18 - Триггер_Взаимодействие_героев
19 - Триггер_Передвижение_стека
20 - Триггер_Расчёт_Удачи
21 - Триггер_Расчёт_положительной_Морали
22 - Триггер_Доход_города
23 - Триггер_Расчёт_Сопротивления_стиля_Гномов
24 - Триггер_Смерть_героя
25 - Триггер_Раскопки
26 - Триггер_Расход_игрока
27 - Триггер_Инструкция_карты
28 - Триггер_Клик_в_окне_опций_карты
29 - Триггер_Начисление_городских_бонусов
30 - Триггер_Битва_!_перед_передачей_контроля
45 - Триггер_Запрет_колдовства_заклинаний_локального_действия
90 - Триггер_Переход_хода_в_мультиплеере
105 - Триггер_Ведение_мышью_на_карте_приключений
106 - Триггер_Нажатие_на_кнопку_в_экране_обмена_героев
998 - Триггер_Диалог_Сбора_Войск
30000..30099 - - таймеры (0..100)
30100..30298 - (HE) - герои (0..198)
30300 - (BA0) - Триггер_Битва_!_начало_битвы
30301 - (BA1) - Триггер_Битва_!_конец_битвы
30302 - (BR) - Триггер_Битва_!_начало_раунда
30303 - (BG0) - Триггер_Битва_!_перед_действием
30304 - (BG1) - Триггер_Битва_!_после_действия
30305 - (MW0) - Триггер_Бродячий_монстр_в_точке_назначения
30306 - (MW1) - Триггер_Бродячий_монстр_убит
30307 - (MR0) - Триггер_Битва_!_перед_подсчётом_сопротивления
30308 - (MR1) - Триггер_Битва_!_после_подсчёта_сопротивления
30309 - (MR2) - Триггер_Битва_!_перед_подсчётом_сопротивления_стиля_гномов
30310 - (CM0) - Триггер_Правый_клик_в_окне_приключений
30311 - (CM1) - Триггер_Клик_в_окне_города
30312 - (CM2) - Триггер_Клик_в_окне_героя
30313 - (CM3) - Триггер_Клик_в_окне_обмена_героев
30314 - (CM4) - Триггер_Клик_в_экране_битвы
30315 - (AE0) - Триггер_Герой_снял_артефакт
30316 - (AE1) - Триггер_Герой_надел_артефакт
30317 - (MM0) - Триггер_Ведение_мышью_на_поле_боя
30318 - (MM1) - Триггер_Ведение_мышью_в_городе
30319 - (CM5) - Триггер_Левый_клик_в_окне_приключений
30320 - (MP) - Trigger_MP3_music
30321 - (SN) - Trigger_WAV_and_M82_sound
30322 - (MG0) - Триггер_Перед_колдовством_на_карте
30323 - (MG1) - Триггер_После_колдовства_на_карте
30324 - (TH0) - Триггер_Вход_в_Муниципалитет
30325 - (TH1) - Триггер_Выход_из_Муниципалитета
30330 - (IP0) - Trigger_MP_before_sending_data_before_battle
30331 - (IP1) - Trigger_MP_after_receiving_data_before_battle
30332 - (IP2) - Trigger_MP_before_sending_data_after_battle
30333 - (IP3) - Trigger_MP_after_receiving_data_after_battle
30334 - (IP4) - Trigger_MP_received_data_during_a_battle
30340 - (CO0) - Триггер_Перед_открытием_диалога_Командира
30341 - (CO1) - Триггер_После_закрытия_диалога_Командира
30342 - (CO2) - Триггер_После_покупки_Командира_в_городе
30343 - (CO3) - Триггер_После_воскрешения_Командира_в_городе
30350 - (BA50) - Trigger_MP_to_battle
30351 - (BA51) - Trigger_MP_from_battle
30352 - (BA52) - Триггер_Перед_битвой
30353 - (BA53) - Триггер_После_битвы
30354 - (BA54) - Trigger_on_show_battlefield
30360 - (GM0) - Триггер_Загрузка_игры
30361 - (GM1) - Триггер_Сохранение_игры
30370 - (PI) - Триггер_Пост_инструкция
30371 - (DL) - Триггер_Игровой_диалог
30372 - (HD) - Trigger_Spell_Hint_text_callback
30373 - (CI0) - Trigger_Correct_Town_Income
30374 - (CI1) - Trigger_Correct_Town_Monsters_Growth
30375 - (FC) - Trigger_Change_Flag_Color
30376 - (DG) - Trigger_Dig_Grail
30377 - (AI) - Триггер_оценки_клетки_ИИ
30378 - Триггер_Правый_клик_в_окне_видимой_игровой_карты
30379 - Триггер_Новый_день
30400..30599 - (HM) - Триггер_Передвижение_героя (-1..198)
30600..30799 - (HL) - Триггер_Получение_уровня_героем (-1..198)
30800 - (BF) - Триггер_Настройка_поля_битвы
30801 - (MF0) - Триггер_Перед_нанесением_урона_отряду
30802 - (MF1) - Trigger_Block_ability
30803 - (MF2) - Trigger_Hate_ability
30900 - (TL0) - Таймер_реального_времени_1_секунда
30901 - (TL1) - Таймер_реального_времени_2_секунды
30902 - (TL2) - Таймер_реального_времени_5_секунд
30903 - (TL3) - Таймер_реального_времени_10_секунд
30904 - (TL4) - Таймер_реального_времени_60_секунд
31200..31399 - Триггер_После_получения_уровня_героем (-1..198)
0x10XXYYLL - посещение объекта в координатах X Y L
0x20XXYYLL - посещение клетки карты в координатах X Y L
0x40AAABBB - перед посещением объекта типа A подтипа B
0x48AAABBB - после посещения объекта типа A подтипа B
77000 - TRIGGER_BEFORE_SAVEGAME
77001 - TRIGGER_SAVEGAME_WRITE
77002 - TRIGGER_SAVEGAME_READ
77003 - TRIGGER_KEYPRESSED
77004 - TRIGGER_OPEN_HEROSCREEN
77005 - TRIGGER_CLOSE_HEROSCREEN
77006 - TRIGGER_STACK_OBTAINS_TURN
77007 - TRIGGER_REGENERATE_PHASE
77008 - TRIGGER_AFTER_SAVEGAME
77009 - TRIGGER_SKEY_SAVEDIALOG
77010 - TRIGGER_BEFORE_HEROINTERACTION
77011 - TRIGGER_AFTER_HEROINTERACTION
77012 - TRIGGER_STACK_TO_STACK_DAMAGE
77013 - TRIGGER_AI_CALC_STACK_ATTACKEFFECT
77014 - TRIGGER_CHAT
77015 - TRIGGER_GAME_ENTER
77016 - TRIGGER_GAME_LEAVE
77017 - TRIGGER_REMOTE_EVENT
77018 - TRIGGER_EVERYDAY
77019 - TRIGGER_BEFORE_BATTLEFIELD_VISIBLE
77020 - TRIGGER_BATTLEFIELD_VISIBLE
77021 - TRIGGER_AFTER_TACTICS_PHASE
77022 - TRIGGER_COMBAT_ROUND
77023 - TRIGGER_OPEN_RECRUITDIALOG
77024 - TRIGGER_CLOSE_RECRUITDIALOG
77025 - TRIGGER_RECRUITDIALOG_MOUSECLICK
77026 - TRIGGER_TOWNHALL_MOUSECLICK
77027 - TRIGGER_KINGDOMOVERVIEW_MOUSECLICK
77028 - TRIGGER_RECRUITDIALOG_RECALC
77029 - TRIGGER_RECRUITDIALOG_ACTION
77030 - TRIGGER_LOAD_HEROSCREEN
77031 - TRIGGER_BUILD_TOWNBUILDING
77032 - TRIGGER_OPEN_TOWNSCREEN
77033 - TRIGGER_CLOSE_TOWNSCREEN
77034 - TRIGGER_SWITCH_TOWNSCREEN
77035 - TRIGGER_PRE_TOWNSCREEN
77036 - TRIGGER_POST_TOWNSCREEN
77037 - TRIGGER_PRE_HEROSCREEN
77038 - TRIGGER_POST_HEROSCREEN
77039 - TRIGGER_DETERMINE_MON_INFO_DLG_UPGRADE
77040 - TRIGGER_ADVMAP_TILE_HINT
77041 - TRIGGER_BEFORE_STACK_TURN
77042 - TRIGGER_CALC_TOWN_INCOME
77043 - TRIGGER_BATTLE_REPLAY
77044 - TRIGGER_BEFORE_BATTLE_REPLAY
77045 - TRIGGER_BEFORE_LOCAL_EVENT
77046 - TRIGGER_AFTER_LOCAL_EVENT
77047 - TRIGGER_WIN_GAME
77048 - TRIGGER_LOSE_GAME
77049 - TRIGGER_TRANSFER_HERO
77050 - TRIGGER_AFTER_HERO_GAIN_LEVEL
77051 - TRIGGER_BATTLE_ACTION_END