include "TriggerLibs/NativeLib"
include "TriggerLibs/HeroesLib"
include "TriggerLibs/GameLib"
include "TriggerLibs/AILib"
include "TriggerLibs/UILib"
include "LibHMLG_h"
//--------------------------------------------------------------------------------------------------
// Library: Mal'Ganis
//--------------------------------------------------------------------------------------------------
// External Library Initialization
void libHMLG_InitLibraries () {
libNtve_InitVariables();
libCore_InitVariables();
libGame_InitVariables();
libAIAI_InitVariables();
libUIUI_InitVariables();
}
// Variable Initialization
bool libHMLG_InitVariables_completed = false;
void libHMLG_InitVariables () {
int init_i;
if (libHMLG_InitVariables_completed) {
return;
}
libHMLG_InitVariables_completed = true;
for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {
libHMLG_gv_heroMalGanisBlindasaBatBackupVisionGroups[init_i] = UnitGroupEmpty();
}
for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {
libHMLG_gv_heroMalGanisBlindasaBatForfeitedUnits[init_i] = UnitGroupEmpty();
}
for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {
libHMLG_gv_heroMalGanisNightRushBackupVisionGroups[init_i] = UnitGroupEmpty();
}
}
// Functions
void libHMLG_gf_HeroMalGanisIncrementHeroCountFunction () {
// Automatic Variable Declarations
// Implementation
libHMLG_gv_heroMalGanisTriggerRegistrationVariable += 1;
if ((libHMLG_gv_heroMalGanisTriggerRegistrationVariable == 1)) {
TriggerEnable(libHMLG_gt_HeroMalGanisDarkConversion, true);
TriggerEnable(libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression, true);
TriggerEnable(libHMLG_gt_HeroMalGanisRemoveNightRushAllyVisionSuppression, true);
TriggerEnable(libHMLG_gt_HeroMalGanisApplyBlindasaBatAllyVisionSuppression, true);
TriggerEnable(libHMLG_gt_HeroMalGanisRemoveBlindasaBatAllyVisionSuppression, true);
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOn, true);
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff, true);
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOn, true);
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff, true);
}
}
void libHMLG_gf_HeroMalGanisDecrementHeroCountFunction () {
// Automatic Variable Declarations
// Implementation
libHMLG_gv_heroMalGanisTriggerRegistrationVariable -= 1;
if ((libHMLG_gv_heroMalGanisTriggerRegistrationVariable < 0)) {
libHMLG_gv_heroMalGanisTriggerRegistrationVariable = 0;
}
if ((libHMLG_gv_heroMalGanisTriggerRegistrationVariable == 0)) {
TriggerEnable(libHMLG_gt_HeroMalGanisDarkConversion, false);
TriggerEnable(libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression, false);
TriggerEnable(libHMLG_gt_HeroMalGanisRemoveNightRushAllyVisionSuppression, false);
TriggerEnable(libHMLG_gt_HeroMalGanisApplyBlindasaBatAllyVisionSuppression, false);
TriggerEnable(libHMLG_gt_HeroMalGanisRemoveBlindasaBatAllyVisionSuppression, false);
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOn, false);
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff, false);
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOn, false);
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff, false);
}
}
// Triggers
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis - Blind as a Bat Fullscreen Overlay On
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOn_Func (bool testConds, bool runActions) {
// Automatic Variable Declarations
// Actions
if (!runActions) {
return true;
}
if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {
libUIUI_gf_FullscreenOverlayAddItemForPlayer(EventPlayer(), libUIUI_ge_FullscreenOverlayPriorities_Invulnerable, "Cutscenes\\GameUI_MalGanisBlindOverlay.StormCutscene", EventUnitBehavior());
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOn_Init () {
libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOn = TriggerCreate("libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOn_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOn, false);
TriggerAddEventUnitBehaviorChange(libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOn, null, "MalGanisFelClawsBlindAsABatBehavior", c_unitBehaviorChangeActivate);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis - Blind as a Bat Fullscreen Overlay Off
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff_Func (bool testConds, bool runActions) {
// Automatic Variable Declarations
// Actions
if (!runActions) {
return true;
}
if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {
libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_MalGanisBlindOverlay.StormCutscene", EventUnitBehavior());
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff_Init () {
libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff = TriggerCreate("libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff, false);
TriggerAddEventUnitBehaviorChange(libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff, null, "MalGanisFelClawsBlindAsABatBehavior", c_unitBehaviorChangeDestroy);
TriggerAddEventUnitBehaviorChange(libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff, null, "MalGanisFelClawsBlindAsABatBehavior", c_unitBehaviorChangeDeactivate);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis Multi-Hero Blind as a Bat Controller
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisMultiHeroBlindasaBatController_Func (bool testConds, bool runActions) {
// Variable Declarations
int lv_malGanisPlayer;
int lv_confinedPlayer;
unitgroup lv_confinedPlayerVisionGroup;
unit lv_targetUnit;
int lv_targetplayer;
playergroup lv_AllyPlayerGroup;
int lv_pickedPlayer;
// Automatic Variable Declarations
playergroup auto463DCE26_g;
// Variable Initialization
lv_confinedPlayer = UnitGetOwner(EventUnit());
lv_confinedPlayerVisionGroup = UnitGroupEmpty();
lv_targetUnit = EventUnit();
lv_targetplayer = UnitGetOwner(EventUnit());
lv_AllyPlayerGroup = PlayerGroupEmpty();
// Conditions
if (testConds) {
if (!((UnitHasBehavior2(lv_targetUnit, "MalGanisFelClawsBlindAsABatVisionSource") == true))) {
return false;
}
if (!((lv_confinedPlayer > 0))) {
return false;
}
if (!((lv_confinedPlayer < libCore_gv_bALMaxPlayers))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
lv_malGanisPlayer = UnitBehaviorEffectPlayer(lv_targetUnit, "MalGanisFelClawsBlindAsABatBehavior", c_effectPlayerCaster, 0);
UnitGroupRemove(libHMLG_gv_heroMalGanisBlindasaBatBackupVisionGroups[lv_targetplayer], lv_targetUnit);
if ((UnitGroupCount(libHMLG_gv_heroMalGanisBlindasaBatBackupVisionGroups[lv_targetplayer], c_unitCountAlive) == 0)) {
libGame_gf_ShareUnshareVisionOfAlliesForPlayer(false, lv_targetplayer);
lv_AllyPlayerGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_targetplayer);
auto463DCE26_g = lv_AllyPlayerGroup;
lv_pickedPlayer = -1;
while (true) {
lv_pickedPlayer = PlayerGroupNextPlayer(auto463DCE26_g, lv_pickedPlayer);
if (lv_pickedPlayer<0) { break; }
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdSeekHelp, lv_targetplayer, false);
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdGiveHelp, lv_targetplayer, false);
}
VisRevealerEnable(libGame_gv_baseRevealers[lv_targetplayer], false);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisMultiHeroBlindasaBatController_Init () {
libHMLG_gt_HeroMalGanisMultiHeroBlindasaBatController = TriggerCreate("libHMLG_gt_HeroMalGanisMultiHeroBlindasaBatController_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisMultiHeroBlindasaBatController, false);
TriggerAddEventUnitDied(libHMLG_gt_HeroMalGanisMultiHeroBlindasaBatController, null);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis Apply Blind as a Bat Ally Vision Suppression
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisApplyBlindasaBatAllyVisionSuppression_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_targetUnit;
string lv_typeOfTargetUnit;
int lv_targetplayer;
int lv_malGanisPlayer;
unitgroup lv_targetPlayerVisionGroup;
playergroup lv_AllyPlayerGroup;
int lv_pickedPlayer;
// Automatic Variable Declarations
unitgroup auto88CD32A2_g;
int auto88CD32A2_u;
unit auto88CD32A2_var;
playergroup auto0E946C58_g;
// Variable Initialization
lv_targetUnit = EventUnit();
lv_typeOfTargetUnit = UnitGetType(lv_targetUnit);
lv_targetplayer = UnitGetOwner(lv_targetUnit);
lv_malGanisPlayer = UnitBehaviorEffectPlayer(lv_targetUnit, "MalGanisFelClawsBlindAsABatBehavior", c_effectPlayerCaster, 0);
lv_targetPlayerVisionGroup = UnitGroupEmpty();
lv_AllyPlayerGroup = PlayerGroupEmpty();
// Conditions
if (testConds) {
if (!((lv_targetplayer > 0))) {
return false;
}
if (!((lv_targetplayer <= libCore_gv_bALMaxPlayers))) {
return false;
}
if (!((lv_malGanisPlayer > 0))) {
return false;
}
if (!((lv_malGanisPlayer <= libCore_gv_bALMaxPlayers))) {
return false;
}
if (!((UnitTypeTestAttribute(lv_typeOfTargetUnit, c_unitAttributeHeroic) == true))) {
return false;
}
if (!(((lv_targetUnit == libGame_gv_players[lv_targetplayer].lv_heroUnit) || (lv_targetUnit == libAIAI_gv_aIHeroes[lv_targetplayer].lv_currentHeroUnit) || (lv_typeOfTargetUnit == "HeroBaleog") || (lv_typeOfTargetUnit == "HeroErik") || (lv_typeOfTargetUnit == "HeroOlaf") || (lv_typeOfTargetUnit == "HeroChenEarth") || (lv_typeOfTargetUnit == "HeroChenFire") || (lv_typeOfTargetUnit == "HeroChenStorm")))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
libHMLG_gv_heroMalGanisBlindasaBatBackupVisionGroups[lv_targetplayer] = UnitGroupEmpty();
libHMLG_gv_heroMalGanisBlindasaBatTarget += 1;
auto88CD32A2_g = UnitGroup(null, lv_targetplayer, RegionEntireMap(), UnitFilter((1 << c_targetFilterHeroic), 0, (1 << c_targetFilterAlly) | (1 << c_targetFilterNeutral) | (1 << c_targetFilterEnemy) | (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)) | (1 << (c_targetFilterInvulnerable - 32))), 0);
auto88CD32A2_u = UnitGroupCount(auto88CD32A2_g, c_unitCountAll);
for (;; auto88CD32A2_u -= 1) {
auto88CD32A2_var = UnitGroupUnitFromEnd(auto88CD32A2_g, auto88CD32A2_u);
if (auto88CD32A2_var == null) { break; }
if ((UnitHasBehavior2(auto88CD32A2_var, "MalGanisFelClawsBlindAsABatBehavior") == false) && (UnitGetType(auto88CD32A2_var) != "NovaHoloCloneCloaked") && (UnitGetType(auto88CD32A2_var) != "NovaHoloClone") && (UnitGetType(auto88CD32A2_var) != "RexxarMisha")) {
UnitGroupAdd(libHMLG_gv_heroMalGanisBlindasaBatBackupVisionGroups[lv_targetplayer], auto88CD32A2_var);
UnitBehaviorAdd(auto88CD32A2_var, "MalGanisFelClawsBlindAsABatVisionSource", libGame_gv_players[lv_malGanisPlayer].lv_heroUnit, 1);
}
}
if ((UnitGroupCount(libHMLG_gv_heroMalGanisBlindasaBatBackupVisionGroups[lv_targetplayer], c_unitCountAlive) == 0)) {
libGame_gf_ShareUnshareVisionOfAlliesForPlayer(false, lv_targetplayer);
lv_AllyPlayerGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_targetplayer);
auto0E946C58_g = lv_AllyPlayerGroup;
lv_pickedPlayer = -1;
while (true) {
lv_pickedPlayer = PlayerGroupNextPlayer(auto0E946C58_g, lv_pickedPlayer);
if (lv_pickedPlayer<0) { break; }
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdSeekHelp, lv_targetplayer, false);
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdGiveHelp, lv_targetplayer, false);
}
VisRevealerEnable(libGame_gv_baseRevealers[lv_targetplayer], false);
}
if ((libHMLG_gv_heroMalGanisBlindasaBatTarget > 0) && (UnitGroupCount(libHMLG_gv_heroMalGanisBlindasaBatBackupVisionGroups[lv_targetplayer], c_unitCountAlive) > 0)) {
TriggerEnable(libHMLG_gt_HeroMalGanisMultiHeroBlindasaBatController, true);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisApplyBlindasaBatAllyVisionSuppression_Init () {
libHMLG_gt_HeroMalGanisApplyBlindasaBatAllyVisionSuppression = TriggerCreate("libHMLG_gt_HeroMalGanisApplyBlindasaBatAllyVisionSuppression_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisApplyBlindasaBatAllyVisionSuppression, false);
TriggerAddEventUnitBehaviorChange(libHMLG_gt_HeroMalGanisApplyBlindasaBatAllyVisionSuppression, null, "MalGanisFelClawsBlindAsABatBehavior", c_unitBehaviorChangeActivate);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis Blind as a Bat Unit Ownership Transfer On
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOn_Func (bool testConds, bool runActions) {
// Variable Declarations
int lv_targetplayer;
// Automatic Variable Declarations
unitgroup auto7E29023C_g;
int auto7E29023C_u;
unit auto7E29023C_var;
// Variable Initialization
lv_targetplayer = UnitGetOwner(EventUnit());
// Conditions
if (testConds) {
if (!((lv_targetplayer > 0))) {
return false;
}
if (!((lv_targetplayer <= libCore_gv_bALMaxPlayers))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
auto7E29023C_g = UnitGroup(null, lv_targetplayer, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterSelf) | (1 << c_targetFilterHeroic) | (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);
auto7E29023C_u = UnitGroupCount(auto7E29023C_g, c_unitCountAll);
for (;; auto7E29023C_u -= 1) {
auto7E29023C_var = UnitGroupUnitFromEnd(auto7E29023C_g, auto7E29023C_u);
if (auto7E29023C_var == null) { break; }
UnitGroupAdd(libHMLG_gv_heroMalGanisBlindasaBatForfeitedUnits[lv_targetplayer], auto7E29023C_var);
if ((libGame_gf_ComputerPlayerInTeam(libGame_gf_TeamNumberOfPlayer(lv_targetplayer)) == libCore_gv_cOMPUTER_TeamChaos)) {
UnitSetOwner(auto7E29023C_var, libCore_gv_cOMPUTER_TeamChaos, true);
}
else {
UnitSetOwner(auto7E29023C_var, libCore_gv_cOMPUTER_TeamOrder, true);
}
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOn_Init () {
libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOn = TriggerCreate("libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOn_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOn, false);
TriggerAddEventUnitBehaviorChange(libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOn, null, "MalGanisFelClawsBlindAsABatBehavior", c_unitBehaviorChangeActivate);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis Blind as a Bat Unit Ownership Transfer Off
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff_Func (bool testConds, bool runActions) {
// Variable Declarations
int lv_targetPlayer;
// Automatic Variable Declarations
unitgroup auto1A3818B8_g;
int auto1A3818B8_u;
unit auto1A3818B8_var;
// Variable Initialization
lv_targetPlayer = UnitGetOwner(EventUnit());
// Actions
if (!runActions) {
return true;
}
auto1A3818B8_g = libHMLG_gv_heroMalGanisBlindasaBatForfeitedUnits[lv_targetPlayer];
auto1A3818B8_u = UnitGroupCount(auto1A3818B8_g, c_unitCountAll);
for (;; auto1A3818B8_u -= 1) {
auto1A3818B8_var = UnitGroupUnitFromEnd(auto1A3818B8_g, auto1A3818B8_u);
if (auto1A3818B8_var == null) { break; }
UnitSetOwner(auto1A3818B8_var, lv_targetPlayer, true);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff_Init () {
libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff = TriggerCreate("libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff, false);
TriggerAddEventUnitBehaviorChange(libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff, null, "MalGanisFelClawsBlindAsABatBehavior", c_unitBehaviorChangeDestroy);
TriggerAddEventUnitBehaviorChange(libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff, null, "MalGanisFelClawsBlindAsABatBehavior", c_unitBehaviorChangeDeactivate);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis Remove Blind as a Bat Ally Vision Suppression
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisRemoveBlindasaBatAllyVisionSuppression_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_targetUnit;
int lv_targetPlayer;
int lv_malGanisPlayer;
playergroup lv_allyPlayerGroup;
int lv_pickedPlayer;
// Automatic Variable Declarations
unitgroup auto4FC5C26D_g;
int auto4FC5C26D_u;
unit auto4FC5C26D_var;
playergroup auto53401066_g;
// Variable Initialization
lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);
lv_targetPlayer = UnitGetOwner(lv_targetUnit);
lv_malGanisPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);
lv_allyPlayerGroup = PlayerGroupEmpty();
// Conditions
if (testConds) {
if (!((UnitTypeTestAttribute(UnitGetType(lv_targetUnit), c_unitAttributeHeroic) == true))) {
return false;
}
if (!((lv_targetPlayer > 0))) {
return false;
}
if (!((lv_targetPlayer <= libCore_gv_bALMaxPlayers))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
auto4FC5C26D_g = libHMLG_gv_heroMalGanisBlindasaBatBackupVisionGroups[lv_targetPlayer];
auto4FC5C26D_u = UnitGroupCount(auto4FC5C26D_g, c_unitCountAll);
for (;; auto4FC5C26D_u -= 1) {
auto4FC5C26D_var = UnitGroupUnitFromEnd(auto4FC5C26D_g, auto4FC5C26D_u);
if (auto4FC5C26D_var == null) { break; }
UnitBehaviorRemove(auto4FC5C26D_var, "MalGanisFelClawsBlindAsABatVisionSource", 1);
}
libGame_gf_ShareUnshareVisionOfAlliesForPlayer(true, lv_targetPlayer);
lv_allyPlayerGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_targetPlayer);
auto53401066_g = lv_allyPlayerGroup;
lv_pickedPlayer = -1;
while (true) {
lv_pickedPlayer = PlayerGroupNextPlayer(auto53401066_g, lv_pickedPlayer);
if (lv_pickedPlayer<0) { break; }
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdSeekHelp, lv_targetPlayer, true);
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdGiveHelp, lv_targetPlayer, true);
}
VisRevealerEnable(libGame_gv_baseRevealers[lv_targetPlayer], true);
libHMLG_gv_heroMalGanisBlindasaBatTarget -= 1;
if ((libHMLG_gv_heroMalGanisBlindasaBatTarget == 0)) {
TriggerEnable(libHMLG_gt_HeroMalGanisMultiHeroBlindasaBatController, false);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisRemoveBlindasaBatAllyVisionSuppression_Init () {
libHMLG_gt_HeroMalGanisRemoveBlindasaBatAllyVisionSuppression = TriggerCreate("libHMLG_gt_HeroMalGanisRemoveBlindasaBatAllyVisionSuppression_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisRemoveBlindasaBatAllyVisionSuppression, false);
TriggerAddEventPlayerEffectUsed(libHMLG_gt_HeroMalGanisRemoveBlindasaBatAllyVisionSuppression, c_playerAny, "MalGanisFelClawsBlindAsABatVisionDummy");
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis - Dark Conversion
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisDarkConversion_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_castingUnit;
unit lv_targetUnit;
int lv_castingPlayer;
fixed lv_durationValue;
fixed lv_castingUnitHealthPercent;
fixed lv_targetUnitHealthPercent;
unit lv_higherHealthUnit;
unit lv_lowerHealthUnit;
fixed lv_higherHealthUnitCurrentHealth;
fixed lv_lowerHealthUnitCurrentHealth;
fixed lv_higherHealthUnitNewHealth;
fixed lv_lowerHealthUnitNewHealth;
fixed lv_higherHealthIncrementValue;
fixed lv_lowerHealthIncrementValue;
fixed lv_wrathOfNathrezaAoESwapMultiplier;
fixed lv_wrathOfNathrezaIncrementValue;
// Automatic Variable Declarations
// Variable Initialization
lv_castingUnit = EventPlayerEffectUsedUnitLaunch();
lv_targetUnit = EventPlayerEffectUsedUnitImpact();
lv_castingPlayer = UnitGetOwner(lv_castingUnit);
lv_durationValue = (CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "MalGanisDarkConversionSwapDoT", "Duration", lv_castingPlayer) / CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "MalGanisDarkConversionSwapDoT", "Period", lv_castingPlayer));
lv_castingUnitHealthPercent = UnitGetPropertyFixed(lv_castingUnit, c_unitPropLifePercent, c_unitPropCurrent);
lv_targetUnitHealthPercent = UnitGetPropertyFixed(lv_targetUnit, c_unitPropLifePercent, c_unitPropCurrent);
lv_wrathOfNathrezaAoESwapMultiplier = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "MalGanisDarkConversionWrathOfNathrezaAoESwapMultiplier", "Amount", lv_castingPlayer);
// Conditions
if (testConds) {
if (!((UnitIsAlive(lv_castingUnit) == true))) {
return false;
}
if (!((UnitIsAlive(lv_targetUnit) == true))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
if ((lv_castingUnitHealthPercent >= lv_targetUnitHealthPercent)) {
lv_higherHealthUnit = lv_castingUnit;
lv_lowerHealthUnit = lv_targetUnit;
}
else {
lv_higherHealthUnit = lv_targetUnit;
lv_lowerHealthUnit = lv_castingUnit;
}
lv_higherHealthUnitCurrentHealth = UnitGetPropertyFixed(lv_higherHealthUnit, c_unitPropLife, c_unitPropCurrent);
lv_lowerHealthUnitCurrentHealth = UnitGetPropertyFixed(lv_lowerHealthUnit, c_unitPropLife, c_unitPropCurrent);
lv_higherHealthUnitNewHealth = (UnitGetPropertyFixed(lv_higherHealthUnit, c_unitPropLifeMax, c_unitPropCurrent) * (UnitGetPropertyFixed(lv_lowerHealthUnit, c_unitPropLifePercent, c_unitPropCurrent) / 100.0));
lv_lowerHealthUnitNewHealth = (UnitGetPropertyFixed(lv_lowerHealthUnit, c_unitPropLifeMax, c_unitPropCurrent) * (UnitGetPropertyFixed(lv_higherHealthUnit, c_unitPropLifePercent, c_unitPropCurrent) / 100.0));
lv_higherHealthIncrementValue = ((lv_higherHealthUnitCurrentHealth - lv_higherHealthUnitNewHealth) / lv_durationValue);
lv_lowerHealthIncrementValue = ((lv_lowerHealthUnitNewHealth - lv_lowerHealthUnitCurrentHealth) / lv_durationValue);
CatalogFieldValueSet(c_gameCatalogEffect, "MalGanisDarkConversionSwapDamage", "Amount", lv_castingPlayer, FixedToString(lv_higherHealthIncrementValue, c_fixedPrecisionAny));
CatalogFieldValueSet(c_gameCatalogEffect, "MalGanisDarkConversionSwapHeal", "RechargeVitalRate", lv_castingPlayer, FixedToString(lv_lowerHealthIncrementValue, c_fixedPrecisionAny));
if ((UnitIsAlive(lv_higherHealthUnit) == true)) {
UnitBehaviorAdd(lv_higherHealthUnit, "MalGanisDarkConversionSwapDoT", lv_castingUnit, 1);
}
if ((UnitIsAlive(lv_lowerHealthUnit) == true)) {
UnitBehaviorAdd(lv_lowerHealthUnit, "MalGanisDarkConversionSwapHoT", lv_castingUnit, 1);
}
if ((lv_higherHealthUnit == lv_castingUnit)) {
UnitCreateEffectUnit(lv_castingUnit, "MalGanisDarkConversionHurtSelfDummy", lv_castingUnit);
}
if ((PlayerHasTalent(lv_castingPlayer, "MalGanisDarkConversionWrathOfNathreza") == true)) {
lv_wrathOfNathrezaIncrementValue = (lv_higherHealthIncrementValue * lv_wrathOfNathrezaAoESwapMultiplier);
CatalogFieldValueSet(c_gameCatalogEffect, "MalGanisDarkConversionWrathOfNathrezaSwapDamage", "Amount", lv_castingPlayer, FixedToString(lv_wrathOfNathrezaIncrementValue, c_fixedPrecisionAny));
UnitCreateEffectUnit(lv_castingUnit, "MalGanisDarkConversionWrathOfNathrezaSearch", lv_targetUnit);
UnitCreateEffectUnit(lv_castingUnit, "MalGanisDarkConversionWrathOfNathrezaReveal", lv_targetUnit);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisDarkConversion_Init () {
libHMLG_gt_HeroMalGanisDarkConversion = TriggerCreate("libHMLG_gt_HeroMalGanisDarkConversion_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisDarkConversion, false);
TriggerAddEventPlayerEffectUsed(libHMLG_gt_HeroMalGanisDarkConversion, c_playerAny, "MalGanisDarkConversionActivationDummy");
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis Multi-Hero Night Rush Controller
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisMultiHeroNightRushController_Func (bool testConds, bool runActions) {
// Variable Declarations
int lv_malGanisPlayer;
int lv_confinedPlayer;
unitgroup lv_confinedPlayerVisionGroup;
unit lv_targetUnit;
int lv_targetplayer;
playergroup lv_AllyPlayerGroup;
int lv_pickedPlayer;
// Automatic Variable Declarations
playergroup auto6743833F_g;
// Variable Initialization
lv_confinedPlayer = UnitGetOwner(EventUnit());
lv_confinedPlayerVisionGroup = UnitGroupEmpty();
lv_targetUnit = EventUnit();
lv_targetplayer = UnitGetOwner(EventUnit());
lv_AllyPlayerGroup = PlayerGroupEmpty();
// Conditions
if (testConds) {
if (!((UnitHasBehavior2(lv_targetUnit, "MalGanisNightRushAloneInTheDarkVisionSource") == true))) {
return false;
}
if (!((lv_confinedPlayer > 0))) {
return false;
}
if (!((lv_confinedPlayer < libCore_gv_bALMaxPlayers))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
lv_malGanisPlayer = UnitBehaviorEffectPlayer(lv_targetUnit, "MalGanisNightRushAloneInTheDarkTrigger", c_effectPlayerCaster, 0);
UnitGroupRemove(libHMLG_gv_heroMalGanisNightRushBackupVisionGroups[lv_targetplayer], lv_targetUnit);
if ((UnitGroupCount(libHMLG_gv_heroMalGanisNightRushBackupVisionGroups[lv_targetplayer], c_unitCountAlive) == 0)) {
libGame_gf_ShareUnshareVisionOfAlliesForPlayer(false, lv_targetplayer);
lv_AllyPlayerGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_targetplayer);
auto6743833F_g = lv_AllyPlayerGroup;
lv_pickedPlayer = -1;
while (true) {
lv_pickedPlayer = PlayerGroupNextPlayer(auto6743833F_g, lv_pickedPlayer);
if (lv_pickedPlayer<0) { break; }
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdSeekHelp, lv_targetplayer, false);
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdGiveHelp, lv_targetplayer, false);
}
VisRevealerEnable(libGame_gv_baseRevealers[lv_targetplayer], false);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisMultiHeroNightRushController_Init () {
libHMLG_gt_HeroMalGanisMultiHeroNightRushController = TriggerCreate("libHMLG_gt_HeroMalGanisMultiHeroNightRushController_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisMultiHeroNightRushController, false);
TriggerAddEventUnitDied(libHMLG_gt_HeroMalGanisMultiHeroNightRushController, null);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis Apply Night Rush Ally Vision Suppression
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_targetUnit;
string lv_typeOfTargetUnit;
int lv_targetplayer;
int lv_malGanisPlayer;
unitgroup lv_targetPlayerVisionGroup;
playergroup lv_AllyPlayerGroup;
int lv_pickedPlayer;
// Automatic Variable Declarations
unitgroup autoB934D5FC_g;
int autoB934D5FC_u;
unit autoB934D5FC_var;
playergroup auto3D7CA02B_g;
// Variable Initialization
lv_targetUnit = EventUnit();
lv_typeOfTargetUnit = UnitGetType(lv_targetUnit);
lv_targetplayer = UnitGetOwner(lv_targetUnit);
lv_malGanisPlayer = UnitBehaviorEffectPlayer(lv_targetUnit, "MalGanisNightRushAloneInTheDarkTrigger", c_effectPlayerCaster, 0);
lv_targetPlayerVisionGroup = UnitGroupEmpty();
lv_AllyPlayerGroup = PlayerGroupEmpty();
// Conditions
if (testConds) {
if (!((lv_targetplayer > 0))) {
return false;
}
if (!((lv_targetplayer <= libCore_gv_bALMaxPlayers))) {
return false;
}
if (!((lv_malGanisPlayer > 0))) {
return false;
}
if (!((lv_malGanisPlayer <= libCore_gv_bALMaxPlayers))) {
return false;
}
if (!((UnitTypeTestAttribute(lv_typeOfTargetUnit, c_unitAttributeHeroic) == true))) {
return false;
}
if (!(((lv_targetUnit == libGame_gv_players[lv_targetplayer].lv_heroUnit) || (lv_targetUnit == libAIAI_gv_aIHeroes[lv_targetplayer].lv_currentHeroUnit) || (lv_typeOfTargetUnit == "HeroBaleog") || (lv_typeOfTargetUnit == "HeroErik") || (lv_typeOfTargetUnit == "HeroOlaf") || (lv_typeOfTargetUnit == "HeroChenEarth") || (lv_typeOfTargetUnit == "HeroChenFire") || (lv_typeOfTargetUnit == "HeroChenStorm")))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
libHMLG_gv_heroMalGanisNightRushBackupVisionGroups[lv_targetplayer] = UnitGroupEmpty();
libHMLG_gv_heroMalGanisActiveNightRushTargets += 1;
autoB934D5FC_g = UnitGroup(null, lv_targetplayer, RegionEntireMap(), UnitFilter((1 << c_targetFilterHeroic), 0, (1 << c_targetFilterAlly) | (1 << c_targetFilterNeutral) | (1 << c_targetFilterEnemy) | (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)) | (1 << (c_targetFilterInvulnerable - 32))), 0);
autoB934D5FC_u = UnitGroupCount(autoB934D5FC_g, c_unitCountAll);
for (;; autoB934D5FC_u -= 1) {
autoB934D5FC_var = UnitGroupUnitFromEnd(autoB934D5FC_g, autoB934D5FC_u);
if (autoB934D5FC_var == null) { break; }
if ((UnitHasBehavior2(autoB934D5FC_var, "MalGanisNightRushAloneInTheDarkTrigger") == false) && (UnitGetType(autoB934D5FC_var) != "NovaHoloCloneCloaked") && (UnitGetType(autoB934D5FC_var) != "NovaHoloClone") && (UnitGetType(autoB934D5FC_var) != "RexxarMisha")) {
UnitGroupAdd(libHMLG_gv_heroMalGanisNightRushBackupVisionGroups[lv_targetplayer], autoB934D5FC_var);
UnitBehaviorAdd(autoB934D5FC_var, "MalGanisNightRushAloneInTheDarkVisionSource", libGame_gv_players[lv_malGanisPlayer].lv_heroUnit, 1);
}
}
if ((UnitGroupCount(libHMLG_gv_heroMalGanisNightRushBackupVisionGroups[lv_targetplayer], c_unitCountAlive) == 0)) {
libGame_gf_ShareUnshareVisionOfAlliesForPlayer(false, lv_targetplayer);
lv_AllyPlayerGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_targetplayer);
auto3D7CA02B_g = lv_AllyPlayerGroup;
lv_pickedPlayer = -1;
while (true) {
lv_pickedPlayer = PlayerGroupNextPlayer(auto3D7CA02B_g, lv_pickedPlayer);
if (lv_pickedPlayer<0) { break; }
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdSeekHelp, lv_targetplayer, false);
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdGiveHelp, lv_targetplayer, false);
}
VisRevealerEnable(libGame_gv_baseRevealers[lv_targetplayer], false);
}
if ((libHMLG_gv_heroMalGanisActiveNightRushTargets > 0) && (UnitGroupCount(libHMLG_gv_heroMalGanisNightRushBackupVisionGroups[lv_targetplayer], c_unitCountAlive) > 0)) {
TriggerEnable(libHMLG_gt_HeroMalGanisMultiHeroNightRushController, true);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression_Init () {
libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression = TriggerCreate("libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression, false);
TriggerAddEventUnitBehaviorChange(libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression, null, "MalGanisNightRushAloneInTheDarkTrigger", c_unitBehaviorChangeActivate);
TriggerAddEventUnitBehaviorChange(libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression, null, "MalGanisNightRushAloneInTheDarkTrigger", c_unitBehaviorChangeRefresh);
}
//--------------------------------------------------------------------------------------------------
// Trigger: Hero - Mal'Ganis Remove Night Rush Ally Vision Suppression
//--------------------------------------------------------------------------------------------------
bool libHMLG_gt_HeroMalGanisRemoveNightRushAllyVisionSuppression_Func (bool testConds, bool runActions) {
// Variable Declarations
unit lv_targetUnit;
int lv_targetPlayer;
int lv_malGanisPlayer;
playergroup lv_allyPlayerGroup;
int lv_pickedPlayer;
// Automatic Variable Declarations
unitgroup auto0FF56D1D_g;
int auto0FF56D1D_u;
unit auto0FF56D1D_var;
playergroup auto5ED0F947_g;
// Variable Initialization
lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);
lv_targetPlayer = UnitGetOwner(lv_targetUnit);
lv_malGanisPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);
lv_allyPlayerGroup = PlayerGroupEmpty();
// Conditions
if (testConds) {
if (!((UnitTypeTestAttribute(UnitGetType(lv_targetUnit), c_unitAttributeHeroic) == true))) {
return false;
}
if (!((lv_targetPlayer > 0))) {
return false;
}
if (!((lv_targetPlayer <= libCore_gv_bALMaxPlayers))) {
return false;
}
}
// Actions
if (!runActions) {
return true;
}
auto0FF56D1D_g = libHMLG_gv_heroMalGanisNightRushBackupVisionGroups[lv_targetPlayer];
auto0FF56D1D_u = UnitGroupCount(auto0FF56D1D_g, c_unitCountAll);
for (;; auto0FF56D1D_u -= 1) {
auto0FF56D1D_var = UnitGroupUnitFromEnd(auto0FF56D1D_g, auto0FF56D1D_u);
if (auto0FF56D1D_var == null) { break; }
UnitBehaviorRemove(auto0FF56D1D_var, "MalGanisNightRushAloneInTheDarkVisionSource", 1);
}
if ((UnitHasBehaviorWithCategoryFlag(lv_targetUnit, c_behaviorCategoryVisionRemoval) == false)) {
libGame_gf_ShareUnshareVisionOfAlliesForPlayer(true, lv_targetPlayer);
lv_allyPlayerGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_targetPlayer);
auto5ED0F947_g = lv_allyPlayerGroup;
lv_pickedPlayer = -1;
while (true) {
lv_pickedPlayer = PlayerGroupNextPlayer(auto5ED0F947_g, lv_pickedPlayer);
if (lv_pickedPlayer<0) { break; }
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdSeekHelp, lv_targetPlayer, true);
PlayerSetAlliance(lv_pickedPlayer, c_allianceIdGiveHelp, lv_targetPlayer, true);
}
VisRevealerEnable(libGame_gv_baseRevealers[lv_targetPlayer], true);
libHMLG_gv_heroMalGanisActiveNightRushTargets -= 1;
}
if ((libHMLG_gv_heroMalGanisActiveNightRushTargets == 0)) {
TriggerEnable(libHMLG_gt_HeroMalGanisMultiHeroNightRushController, false);
}
return true;
}
//--------------------------------------------------------------------------------------------------
void libHMLG_gt_HeroMalGanisRemoveNightRushAllyVisionSuppression_Init () {
libHMLG_gt_HeroMalGanisRemoveNightRushAllyVisionSuppression = TriggerCreate("libHMLG_gt_HeroMalGanisRemoveNightRushAllyVisionSuppression_Func");
TriggerEnable(libHMLG_gt_HeroMalGanisRemoveNightRushAllyVisionSuppression, false);
TriggerAddEventPlayerEffectUsed(libHMLG_gt_HeroMalGanisRemoveNightRushAllyVisionSuppression, c_playerAny, "MalGanisNightRushAloneInTheDarkVisionDummy");
}
void libHMLG_InitTriggers () {
libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOn_Init();
libHMLG_gt_HeroMalGanisBlindasaBatFullscreenOverlayOff_Init();
libHMLG_gt_HeroMalGanisMultiHeroBlindasaBatController_Init();
libHMLG_gt_HeroMalGanisApplyBlindasaBatAllyVisionSuppression_Init();
libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOn_Init();
libHMLG_gt_HeroMalGanisBlindasaBatUnitOwnershipTransferOff_Init();
libHMLG_gt_HeroMalGanisRemoveBlindasaBatAllyVisionSuppression_Init();
libHMLG_gt_HeroMalGanisDarkConversion_Init();
libHMLG_gt_HeroMalGanisMultiHeroNightRushController_Init();
libHMLG_gt_HeroMalGanisApplyNightRushAllyVisionSuppression_Init();
libHMLG_gt_HeroMalGanisRemoveNightRushAllyVisionSuppression_Init();
}
//--------------------------------------------------------------------------------------------------
// Library Initialization
//--------------------------------------------------------------------------------------------------
bool libHMLG_InitLib_completed = false;
void libHMLG_InitLib () {
if (libHMLG_InitLib_completed) {
return;
}
libHMLG_InitLib_completed = true;
libHMLG_InitLibraries();
libHMLG_InitVariables();
libHMLG_InitTriggers();
}