Места и нюансы срабатывания событий и некоторых хуков
Описано еще не всё, исправления дополнения можно выкладывать в эту тему, буду добавлять в пост
OnTownMouseHint
ПОСЛЕ вывода любой подсказки в экране города, НЕ работает в экранах замка/городского холла/рынка/таверны/жилищ и пр.
OnEnterTownHall
ПЕРЕД входом в городской холл из экране города
OnLeaveTownHall
ПОСЛЕ выхода в экран города из экрана городского холла
при постройке здания срабатывает ПОСЛЕ OnBuildTownBuilding и отрисовки здания в экране города
OnBuildTownBuilding
после постройки здания и закрытия экрана городского холла, но до отрисовко здания в экране города
OnSwitchTownScreen
перед переключением на другой город из окна города. Срабатывают: OnSwitchTownScreen, OnPostTownScreen, OnPreTownScreen.
События OnOpenTownScreen, OnCloseTownScreen при переключении НЕ срабатывают
OnOpenTownScreen, OnPreTownScreen
перед открытием окна города, срабатывают в порядке: OnOpenTownScreen, OnPreTownScreen до появления окна города на экране
OnPostTownScreen, OnCloseTownScreen
после закрытия окна города (после исчезновения с экрана) срабатывают в порядке: OnPostTownScreen, OnCloseTownScreen
OnOpenHeroScreen, OnLoadHeroScreen, OnPreHeroScreen
перед открытием окна героя срабатывают в порядке: OnOpenHeroScreen, OnLoadHeroScreen, OnPreHeroScreen до появления окна героя на экране
срабатывают также при просмотре героя в таверне или из окна встречи героев
OnPostHeroScreen, OnCloseHeroScreen
после закрытия окна героя (после исчезновения с экрана) срабатывают в порядке: OnPostHeroScreen, OnCloseHeroScreen
срабатывают также при просмотре героя в таверне или из окна встречи героев
При переключении между героями ВНУТРИ окна героя отрабатывают события OnPostHeroScreen, OnLoadHeroScreen, OnPreHeroScreen. События OnCloseHeroScreen и OnOpenHeroScreen не отрабатывают.
OnHeroMove
при движении героя, срабатывает ПЕРЕД каждым шагом героя
OnHeroGainLevel
перед повышением уровня героя, но после повышения уровня и закрытия окна командира. Если повышается сразу на несколько уровней - перед каждым повышением
Хук в 5090553 [диалог повышения уровня героя без выбора втор. навыков]
Хук в 5090672 [диалог повышения уровня героя с 1 втор.навыком]
Хук в 5090948 [диалог повышения уровня героя с 2 втор.навыками]
перед открытием окна диалога повышения уровня героя с соответствующим количеством предлагаемых вторичных навыков
OnEquipArt
при надевании артефакта, срабатывает даже до OnAfterErmInstructions (PI) при получении героями стартовых артефактов
OnUnequipArt
при снятии артефакта
НАЗВАНИЯ СОБЫТИЙ OnEquipArt и OnUnequipArt НА ДАННЫЙ МОМЕНТ ПЕРЕПУТАНЫ !!!
OnOpenCommanderWindow
перед открытием окна командира из окна героя (до появления окна командира на экране)
OnCloseCommanderWindow
после закрытия (исчезновения с экрана) окна командира
если командиры отключены или командир не нанят, OnOpenCommanderWindow и OnCloseCommanderWindow не отрабатывают
OnAfterCommanderBuy
после покупки командира при посещении города
OnAfterCommanderResurrect
после воскрешение мертвого командира при посещении города. НЕ срабатывает при воскрешении командира Шлемом бессмертия
OnBeforeHeroInteraction
перед встречей героев (перед появлением окна встречи)
OnAfterHeroInteraction
после встречи героев (после исчезновения окна встречи)
OnOpenRecruitDlg
перед открытием диалога найма существ. НЕ срабатывает при открытии кузницы
OnRecruitDlgRecalc
перед открытием диалога найма существ
перед изменением нанимаемого количества в диалоге найма существ
после нажатии кнопки найма и OnRecruitDlgAction
OnRecruitDlgAction
при нажатии кнопки найма в диалоге найма существ, ДО закрытия диалога
OnCloseRecruitDlg
после закрытия диалога найма существ. НЕ срабатывает при закрытии кузницы
OnCustomDialogEvent
ПЕРЕД активацией любого события в пользовательском DL-диалоге
OnEverySecond, OnEvery2Seconds, OnEvery5Seconds, OnEvery10Seconds, OnEveryMinute
События начинают срабатывать сразу после инициализации ERM и отработки инструкций
Сомневаюсь в целесообразнисти их использования
OnEveryDay
в начале нового игрового дня (включая день 1) для каждого игрока до TM1 и TM2
Распространенный WoG-таймер !?TM1;
в начале нового игрового дня (включая день 1) для каждого игрока после OnEveryDay и до и TM2
Распространенный WoG-таймер !?TM2;
в начале нового игрового дня (включая день 1) для каждого игрока после OnEveryDay и TM1
OnGameEnter
при входе в игру после OnEveryDay, TM1, TM2 или после загрузки сохраненной игры и показа карты.
OnSavegameRead
после выбора загружаемого сохранения и инициализации ERM в окне загрузки до показа карты, перед чтением файла сохранения
OnAfterLoadGame
после чтения файла сохранения в окне загрузки до показа карты после OnSavegameRead
OnBeforeSaveGame
перед сохранением игры после ввода имени сохранения и закрытия диалога выбора сохранки, но до создания файла
OnSavegameWrite
после создания файла сохранения (~160КБ), но до записи данных
OnAfterSaveGame
после записи всех данных в файл сохранения, но до сообщения "<имя сохранки> удалось сохранить"
OnAfterErmInstructions
непосредственно перед показом карты при старте НОВОЙ игры, при загрузке сохраненной игры НЕ срабатывает
OnGameLeave
после подтверждения выхода в главное меню (новая игра, загрузить игру). НЕ срабатывает при закрытии окна "крестиком"/через Alt+F4
OnMp3MusicChange
при изменении ФОНОВОЙ мелодии (mp3-темы)
если мелодия не менялась, просто пошел повтор, событие НЕ срабатывает
после воспроизведения звукового эффекта (например, звук движения героя, звук отстроенного здания), НЕ срабатывает после звука "щелчок" на элементах
OnSoundPlay
в начале воспроизведения мелодии (wav-Звуки), например, при проигрывании мелодий посещаемых объектов - камень знания и пр.
НЕ срабатывает на звук "щелчок" на элементах и прочие подобные звуковые эффекты
OnKeyPressed
при нажатии любой клавиши на клавиатуре
OnAdventureMapRightMouseClick
ПКМ на карте приключений
OnAdventureMapLeftMouseClick
ЛКМ на карте приключений
OnBattleScreenMouseClick
любой клик в экране боя
OnTownMouseClick
любой клик в ГЛАВНОМ экране города
OnTownHallMouseClick
любой клик в экране ЗАМКА
НЕ срабатывает не в экране городского холла
OnRecruitDlgMouseClick
любой клик в экране найма существ. НЕ срабатывает в экране кузницы
OnKingdomOverviewMouseClick
любой клик в экране обзора королевства
OnHeroScreenMouseClick
любой клик в экране героя
OnHeroesMeetScreenMouseClick
любой клик в экране встречи героев
OnChat
перед входом в строку чата И перед отправкой написанного в окно игры. При выводе сообщений через IF:L НЕ срабатывает
Хук в 6027880 [расчет дохода города]
при выборе города в списке
при входе/выходе из обзора королевства
при входе в город
ПОСЛЕ выхода в экран города из экрана городского холла (до OnLeaveTownHall), экранов Замка, жилищ (после OnCloseRecruitDlg)
НЕ срабатывает ПОСЛЕ выхода в экран города из экрана рынка
при постройке здания срабатывает до выхода из экрана городского холла И ДВАЖДЫ после отрисовки здания в экране города и OnLeaveTownHall
Хук в 5011264 [AddGoldForArt]
срабатывает при входе в обзора королевства (AddResForArt не срабатывает)
Хук в 4950687 [AddResForArt]
в начале каждого дня каждого игрока в следующем порядке: AddResForArt, расчет дохода города, AddGoldForArt. Не срабатывают для первого дня первого игрока
Подготовка к бою
Хук в 7710213 [перед битвой перед BA0]
OnBeforeBattle (BA0)
OnBeforeBattleUniversal (BA52)
OnBeforeBattlefieldVisible
OnBattleRound (BR) (round -1)
OnSetupBattlefield (BF)
появление поля боя
OnBattlefieldVisible
OnCombatRound
сообщение "Тактическая фаза"
выполнение действий отрядов начиная с получения хода (расстановка)
нажатие кнопки "Начать битву"
OnAfterTacticsPhase
OnCombatRound
OnBattleRound (BR) (round 0)
выполнение действий отрядов начиная с получения хода
Хук в 7710213 [перед битвой перед BA0]
OnBeforeBattle (BA0)
OnBeforeBattleUniversal (BA52)
OnBeforeBattlefieldVisible
OnBattleRound (BR) (round -1)
OnSetupBattlefield (BF)
OnAfterTacticsPhase
OnBattleRound (BR) (round 0)
появление поля боя
OnBattlefieldVisible
OnCombatRound
OnBattleRound (BR) (round 0), да, еще раз нулевой раунд
выполнение действий отрядов начиная с получения хода
OnBeforeBattleAction (BG0) для последнего действующего отряда в раунде
OnCombatRound
OnBattleRound (BR) (round n+1)
выполнение действий отрядов начиная с получения хода
Действия отрядов
OnBattleRegeneratePhase
OnBattleStackObtainsTurn
отряд выполняет спец. действие, например похищение маны призраками
отряд получает ход и подсвечивается обводкой
Хук в 4609014 [после фазы регенерации; проверки на мораль, страх; и после установки активного стека]
OnAfterBattleAction (BG1) - не срабатывает для самого первого действия первого отряда в бою
выбор и выполнение действия
OnBeforeBattleAction (BG0)
анимация + звук перемещения отряда, если перемещение
выполнение действий отрядов начиная с получения хода
наведение курсора на врага
OnStackToStackDamage (срабатывает 2/3 раза для рукопашников/стрелков соответственно)
выводится подсказка с оценкой урона, который может быть нанесен
клик атаки
OnBeforeBattleAction (BG0)
анимация + звук выстрела/подхода/подлета
OnStackToStackDamage
OnMonsterPhysicalDamage (MF1)
анимация + звук атаки нападающим и получения урона целью
Хук в 4455129 [после выстрела] или Хук в 4462998 [после атаки]
начало контратаки, если есть
OnStackToStackDamage
OnMonsterPhysicalDamage (MF1)
анимация + звук атаки нападающим и получения урона целью
Хук в 4462998 [после атаки]
конец контратаки
анимация возврата для гарпий
если атака/контратака уничтожила последний отряд какой-либо стороны:
отображение окна результатов боя
нажатие кнопки "ок" в окне результатов боя
OnAfterBattleAction (BG1)
получение уровня командиром/героем, если получено достаточно опыта
OnAfterBattle (BA1)
OnAfterBattleUniversal (BA53)
выполнение действий отрядов начиная с получения хода
OnStackToStackDamage x2/x3 + OnAICalcStackAttackEffect (срабатывает для каждой потенциальной цели, даже если она недосягаема)
OnAICalcStackAttackEffect
OnBeforeBattleAction (BG0)
выполнение действия как и для отряда человека
выполнение действий отрядов начиная с получения хода
|