include "TriggerLibs/NativeLib"

include "TriggerLibs/HeroesLib_h"

include "TriggerLibs/GameLib_h"

include "TriggerLibs/MapMechanicsLib_h"

include "TriggerLibs/AILib_h"

include "TriggerLibs/UILib_h"

include "TriggerLibs/StartingExperienceLib_h"

include "TriggerLibs/SoundLib_h"

include "TriggerLibs/SupportLib_h"



include "TriggerLibs/GameDataHelperLib_h"



//--------------------------------------------------------------------------------------------------

// Library: Game Data Helper

//--------------------------------------------------------------------------------------------------

// External Library Initialization

void libGDHL_InitLibraries () {

    libNtve_InitVariables();

    libCore_InitVariables();

    libGame_InitVariables();

    libMapM_InitVariables();

    libAIAI_InitVariables();

    libUIUI_InitVariables();

    libStEx_InitVariables();

    libSond_InitVariables();

    libSprt_InitVariables();

}



// Variable Initialization

bool libGDHL_InitVariables_completed = false;



void libGDHL_InitVariables () {

    int init_i;

    int init_i1;



    if (libGDHL_InitVariables_completed) {

        return;

    }



    libGDHL_InitVariables_completed = true;



    libGDHL_gv_updateOnAnyVisibilityChangeUnitGroup = UnitGroupEmpty();

    libGDHL_gv_gPU2020EventEnabled = true;

    libGDHL_gv_gPU2020TimerDurationMod = 6.0;

    libGDHL_gv_gPU2020Phase1Threshold = 0.01;

    libGDHL_gv_gPU2020Phase2Threshold = 0.05;

    libGDHL_gv_gPU2020Phase3Threshold = 0.1;

    libGDHL_gv_gPU2020Phase4Threshold = 0.2;

    libGDHL_gv_gPU2020Phase5Threshold = 0.05;

    libGDHL_gv_gPU2020GateTimer = TimerCreate();

    libGDHL_gv_gPU2020EventPhase = 1;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_abathurDeepTunnelPingTextLockoutTimer[init_i] = TimerCreate();

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_abathurDeepTunnelPings[init_i] = c_invalidPingId;

    }

    libGDHL_gv_heroAbathurSpikeBurstSplatScalar = 1.0;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_abathurMonstrosityDeepTunnelPingTextLockoutTimer[init_i] = TimerCreate();

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_abathurMonstrosityDeepTunnelPings[init_i] = c_invalidPingId;

    }

    libGDHL_gv_heroAbathurMonstrosityTimedLifeIncrease = 3.0;

    libGDHL_gv_heroAbathurMonstrosityHealthIncreasePerLevel = 3.6;

    libGDHL_gv_heroAbathurEvolutionCompleteStacksCarryover = 0.25;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_heroAzmodanDemonicInvasionUnitGroup[init_i] = UnitGroupEmpty();

    }

    libGDHL_gv_heroBarbarianAncientSpearReDirectDistance = 8;

    libGDHL_gv_heroButcherFreshMeatMaxMeatCount = CatalogFieldValueGetAsInt(c_gameCatalogBehavior, "ButcherFreshMeatTokenCounter", "ConditionalEvents[" + IntToString(0) + "].CompareValue", c_playerAny);

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_heroChenStormEarthFireUnits[init_i].lv_stormEarthFireUnits = UnitGroupEmpty();

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_heroChenStaggerDamageModification[init_i] = 0.75;

    }

    libGDHL_gv_cruasder_ShieldGlarePathOfTheCrusade_DurationIncrease = 4.0;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_heroDemonHunterManticoreIncrementer[init_i] = 1;

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_faerieDragonPhaseShiftPingTextLockoutTimer[init_i] = TimerCreate();

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_faerieDragonPhaseShiftPings[init_i] = c_invalidPingId;

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_falstadFlightPingTextLockoutTimer[init_i] = TimerCreate();

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_falstadFlightPings[init_i] = c_invalidPingId;

    }

    libGDHL_gv_heroJainaFrostbiteConstant = CatalogFieldValueGetAsInt(c_gameCatalogBehavior, "JainaFrostbiteTokenCounter", "Max", 0);

    libGDHL_gv_bALHeroJainaIceBarrierDamageModifier = 0.25;

    libGDHL_gv_heroJainaIcyVeinsManaCostModifier = 0.5;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_verdantSpheresUnitGroup[init_i] = UnitGroupEmpty();

    }

    libGDHL_gv_leoricUI.lv_mainPanel = c_invalidDialogControlId;

    libGDHL_gv_leoricUI.lv_traitLabel = c_invalidDialogControlId;

    libGDHL_gv_leoricUI.lv_cheatDeathFrame = c_invalidDialogControlId;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_lostVikingsPlayer[init_i].lv_checkpointReachedCarinRespawnTimer = TimerCreate();

        libGDHL_gv_lostVikingsPlayer[init_i].lv_checkpointReachedCarinRespawnTextTag = c_textTagNone;

        libGDHL_gv_lostVikingsPlayer[init_i].lv_erikDeathTimer = TimerCreate();

        libGDHL_gv_lostVikingsPlayer[init_i].lv_baleogDeathTimer = TimerCreate();

        libGDHL_gv_lostVikingsPlayer[init_i].lv_olafDeathTimer = TimerCreate();

        libGDHL_gv_lostVikingsPlayer[init_i].lv_longboatCrew = UnitGroupEmpty();

        libGDHL_gv_lostVikingsPlayer[init_i].lv_erikSelectionIndicator = c_invalidDialogControlId;

        libGDHL_gv_lostVikingsPlayer[init_i].lv_baleogSelectionIndicator = c_invalidDialogControlId;

        libGDHL_gv_lostVikingsPlayer[init_i].lv_olafSelectionIndicator = c_invalidDialogControlId;

        libGDHL_gv_lostVikingsPlayer[init_i].lv_erikIdentityImage = c_invalidDialogControlId;

        libGDHL_gv_lostVikingsPlayer[init_i].lv_baleogIdentityImage = c_invalidDialogControlId;

        libGDHL_gv_lostVikingsPlayer[init_i].lv_olafIdentityImage = c_invalidDialogControlId;

    }

    libGDHL_gv_lostVikingsUI.lv_heroStatsFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_erikUnitStatusFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_erikNameLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_erikHPLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_erikDownedLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_baleogUnitStatusFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_baleogNameLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_baleogHPLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_baleogDownedLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_olafUnitStatusFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_olafNameLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_olafHPLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_olafDownedLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsIconFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_erikSelectedIconImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_erikUnselectedIconImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_erikDeadImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostErikDeadImageOverlay = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_baleogSelectedIconImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_baleogUnselectedIconImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_baleogDeadImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostBaleogDeadImageOverlay = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_olafSelectedIconImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_olafUnselectedIconImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_olafDeadImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostOlafDeadImageOverlay = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsChannelFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafCastChannelBarFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogCastChannelBarFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsErikCastChannelBarFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarDurationBar = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarBehaviorLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarDurationBar = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarBehaviorLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarDurationBar = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarBehaviorLabel = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_olafDeathStatusFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_baleogDeathStatusFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_erikDeathStatusFrame = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsUI.lv_allDeathStatusFrame = c_invalidDialogControlId;

    libGDHL_gv_bALHeroMalfurionDruidsGiftManaCostReduction = 0.1;

    libGDHL_gv_healingBeamUI.lv_healingBeamTargetDisplayName = c_invalidDialogControlId;

    libGDHL_gv_healingBeamUI.lv_healingBeamTargetPortrait = c_invalidDialogControlId;

    libGDHL_gv_medicUI.lv_mainPanel = c_invalidDialogControlId;

    libGDHL_gv_medicUI.lv_medivacAlert = c_invalidDialogControlId;

    libGDHL_gv_medicUI.lv_medivacCountdownNumber = c_invalidDialogControlId;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_medivacTransmissionPortraitOverride[init_i] = c_invalidTransmissionId;

    }

    libGDHL_gv_heroMuradinHaymakerLaunchDistance = -12.6;

    libGDHL_gv_heroMuradinHaymakerCutoffDistance = -1.0;

    libGDHL_gv_murkyUI.lv_mainPanel = c_invalidDialogControlId;

    libGDHL_gv_murkyUI.lv_eggOk = c_invalidDialogControlId;

    libGDHL_gv_murkyUI.lv_eggBroken = c_invalidDialogControlId;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_murkyRevealPing[init_i] = c_invalidPingId;

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_murkyEggDeathTimer[init_i] = TimerCreate();

    }

    libGDHL_gv_mURKY_BAL_EGG_DEATH_TALENT = 30.0;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_heroMurkyEggHuntUnitGroup[init_i] = UnitGroupEmpty();

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_heroNecromancerSkeletonMasteryUnitGroup[init_i] = UnitGroupEmpty();

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_novaTripleTapMissileGroup[init_i] = UnitGroupEmpty();

    }

    libGDHL_gv_rexxarUI.lv_mainPanel = c_invalidDialogControlId;

    libGDHL_gv_rexxarUI.lv_rexxarMishaUnitStatus = c_invalidDialogControlId;

    libGDHL_gv_rexxarUI.lv_rexxarMishaHealth = c_invalidDialogControlId;

    libGDHL_gv_rexxarUI.lv_rexxarMishaIcon = c_invalidDialogControlId;

    libGDHL_gv_rexxarUI.lv_rexxarMishaDarkImage = c_invalidDialogControlId;

    libGDHL_gv_rexxarUI.lv_rexxarMishaSkullImage = c_invalidDialogControlId;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_mishaDeathTimer[init_i] = TimerCreate();

    }

    libGDHL_gv_heroSgtHammerUseEffectForBFGTargetCalculation = true;

    libGDHL_gv_thrallUI.lv_mainPanel = c_invalidDialogControlId;

    for (init_i1 = 0; init_i1 <= libGDHL_gv_thrallTraitMaxStacks; init_i1 += 1) {

        libGDHL_gv_thrallUI.lv_counterImage[init_i1] = c_invalidDialogControlId;

    }

    libGDHL_gv_tychus_RunAndGunRollingReload_DurationInc = 2.0;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_sanctifcationTimer[init_i] = TimerCreate();

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_heroWitchDoctorGargantuanAggroGroup[init_i] = UnitGroupEmpty();

    }

    libGDHL_gv_witchDoctor_Gargantuan_AggroRange_C = 7.75;

    libGDHL_gv_witchDoctor_Gargantuan_LeashRange_C = 6.5;

    libGDHL_gv_witchDoctor_Gargantuan_PersonalSpace_C = 4.0;

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_heroZagaraMaxNydusWorms[init_i] = 4;

    }

    for (init_i = 0; init_i <= libCore_gv_bALMaxPlayers; init_i += 1) {

        libGDHL_gv_heroZagaraNydusWormUnitGroup[init_i] = UnitGroupEmpty();

    }

}



// Presets

// Functions

void libGDHL_gf_GPU2020RunEvent (bool lp_rando) {

    // Variable Declarations

    fixed lv_rando;

    int lv_phase;

    int lv_i;



    // Automatic Variable Declarations

    int auto89ACCFF9_val;

    playergroup auto73D2C7ED_g;

    int auto73D2C7ED_var;

    playergroup autoCA437CD7_g;

    int autoCA437CD7_var;

    playergroup autoFD07FAB9_g;

    int autoFD07FAB9_var;

    playergroup auto45D94C23_g;

    int auto45D94C23_var;

    playergroup auto3148C778_g;

    int auto3148C778_var;

    playergroup auto41C7F3B3_g;

    int auto41C7F3B3_var;



    // Variable Initialization

    lv_phase = libGDHL_gv_gPU2020EventPhase;



    // Implementation

    libNtve_gf_StopTimer(libGDHL_gv_gPU2020GateTimer);

    if ((lp_rando == true) && (libGDHL_gv_gPU2020Force01Rando == false)) {

        lv_rando = RandomFixed(0.01, 1.0);

    }

    else {

        lv_rando = 0.01;

    }

    auto89ACCFF9_val = lv_phase;

    if (auto89ACCFF9_val == 1) {

        if ((lv_rando <= libGDHL_gv_gPU2020Phase1Threshold)) {

            auto73D2C7ED_g = PlayerGroupActive();

            auto73D2C7ED_var = -1;

            while (true) {

                	auto73D2C7ED_var = PlayerGroupNextPlayer(auto73D2C7ED_g, auto73D2C7ED_var);

                	if (auto73D2C7ED_var<0) { break; }

                	UnitCreateEffectUnit(libGame_gv_players[auto73D2C7ED_var].lv_heroUnit, "GPU2020EventPhase1Set", libGame_gv_players[auto73D2C7ED_var].lv_heroUnit);

            }

        }



    }

    else if (auto89ACCFF9_val == 2) {

        if ((lv_rando <= libGDHL_gv_gPU2020Phase2Threshold)) {

            autoCA437CD7_g = PlayerGroupActive();

            autoCA437CD7_var = -1;

            while (true) {

                	autoCA437CD7_var = PlayerGroupNextPlayer(autoCA437CD7_g, autoCA437CD7_var);

                	if (autoCA437CD7_var<0) { break; }

                	UnitCreateEffectUnit(libGame_gv_players[autoCA437CD7_var].lv_heroUnit, "GPU2020EventPhase2Set", libGame_gv_players[autoCA437CD7_var].lv_heroUnit);

            }

        }



    }

    else if (auto89ACCFF9_val == 3) {

        if ((lv_rando <= libGDHL_gv_gPU2020Phase3Threshold)) {

            autoFD07FAB9_g = PlayerGroupActive();

            autoFD07FAB9_var = -1;

            while (true) {

                	autoFD07FAB9_var = PlayerGroupNextPlayer(autoFD07FAB9_g, autoFD07FAB9_var);

                	if (autoFD07FAB9_var<0) { break; }

                	UnitCreateEffectUnit(libGame_gv_players[autoFD07FAB9_var].lv_heroUnit, "GPU2020EventPhase3Set", libGame_gv_players[autoFD07FAB9_var].lv_heroUnit);

                PlayerSetLighting(autoFD07FAB9_var, "GPU2020EventLight1", 3.5);

            }

        }



    }

    else if (auto89ACCFF9_val == 4) {

        if ((lv_rando <= libGDHL_gv_gPU2020Phase4Threshold)) {

            auto45D94C23_g = PlayerGroupActive();

            auto45D94C23_var = -1;

            while (true) {

                	auto45D94C23_var = PlayerGroupNextPlayer(auto45D94C23_g, auto45D94C23_var);

                	if (auto45D94C23_var<0) { break; }

                	UnitCreateEffectUnit(libGame_gv_players[auto45D94C23_var].lv_heroUnit, "GPU2020EventPhase4Set", libGame_gv_players[auto45D94C23_var].lv_heroUnit);

                PlayerSetLighting(auto45D94C23_var, "GPU2020EventLight2", 3.5);

            }

        }



    }

    else if (auto89ACCFF9_val == 5) {

        if ((lv_rando <= libGDHL_gv_gPU2020Phase5Threshold)) {

            auto3148C778_g = PlayerGroupActive();

            auto3148C778_var = -1;

            while (true) {

                	auto3148C778_var = PlayerGroupNextPlayer(auto3148C778_g, auto3148C778_var);

                	if (auto3148C778_var<0) { break; }

                	UnitCreateEffectUnit(libGame_gv_players[auto3148C778_var].lv_heroUnit, "GPU2020EventPhase5Set", libGame_gv_players[auto3148C778_var].lv_heroUnit);

                PlayerSetLighting(auto3148C778_var, "GPU2020EventLight2", 2.5);

            }

        }



    }

    else {

    }

    Wait(5.0, c_timeGame);

    auto41C7F3B3_g = PlayerGroupActive();

    auto41C7F3B3_var = -1;

    while (true) {

        	auto41C7F3B3_var = PlayerGroupNextPlayer(auto41C7F3B3_g, auto41C7F3B3_var);

        	if (auto41C7F3B3_var<0) { break; }

        	PlayerSetLighting(auto41C7F3B3_var, libCore_gv_mAPMapLight, 7.0);

    }

}



void libGDHL_gf_SiegeUpdateAbilityPowerOnSummonedUnits (unit lp_unit) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Implementation

    lv_player = UnitGetOwner(lp_unit);

    UnitBehaviorAdd(lp_unit, "BucketOverdriveSummonedUnit", libGame_gv_players[lv_player].lv_heroUnit, UnitBehaviorCount(libGame_gv_players[lv_player].lv_heroUnit, "BucketOverdrive"));

    UnitBehaviorAdd(lp_unit, "TalentGatheringPowerCarry", libGame_gv_players[lv_player].lv_heroUnit, UnitBehaviorCount(libGame_gv_players[lv_player].lv_heroUnit, "TalentGatheringPowerCarry"));

    UnitBehaviorAdd(lp_unit, "TalentGatheringPowerStackSummoned", libGame_gv_players[lv_player].lv_heroUnit, UnitBehaviorCount(libGame_gv_players[lv_player].lv_heroUnit, "TalentGatheringPowerStack"));

}



void libGDHL_gf_RestoreHeight (unit lp_unit) {

    // Variable Declarations

    int lv_height;



    // Automatic Variable Declarations

    // Variable Initialization



    // Implementation

    lv_height = CatalogFieldValueGetAsInt(c_gameCatalogUnit, UnitGetType(lp_unit), "Height", c_playerAny);

    UnitSetPropertyFixed(lp_unit, c_unitPropHeight, lv_height);

}



point libGDHL_gf_TargetCalculation (point lp_targetPoint, point lp_casterPoint, region lp_bFGRegion) {

    // Variable Declarations

    point lv_casterPoint;

    fixed lv_cosineofTargetAngle;

    point lv_targetPoint;

    fixed lv_targetXToEdgeOfMap;

    fixed lv_targetYToEdgeOfMap;

    fixed lv_targetAngle;

    fixed lv_triangle1C;

    fixed lv_triangle2C;

    point lv_abilityTargetPoint;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_casterPoint = lp_casterPoint;

    lv_targetPoint = lp_targetPoint;



    // Implementation

    if ((PointGetX(lv_casterPoint) <= PointGetX(lv_targetPoint)) && (PointGetY(lv_casterPoint) <= PointGetY(lv_targetPoint))) {

        lv_targetXToEdgeOfMap = (PointGetX(RegionGetBoundsMax(RegionPlayableMap())) - PointGetX(lv_targetPoint));

        lv_targetYToEdgeOfMap = (PointGetY(RegionGetBoundsMax(RegionPlayableMap())) - PointGetY(lv_targetPoint));

        lv_targetAngle = AngleBetweenPoints(lv_casterPoint, lv_targetPoint);

        lv_cosineofTargetAngle = Cos(lv_targetAngle);

        if ((lv_cosineofTargetAngle > -0.001) && (lv_cosineofTargetAngle < 0.001)) {

            lv_abilityTargetPoint = Point(PointGetX(lv_targetPoint), PointGetY(RegionGetBoundsMax(RegionPlayableMap())));

        }

        else {

            lv_triangle1C = (lv_targetXToEdgeOfMap / Cos(lv_targetAngle));

            lv_targetAngle = (90.0 - lv_targetAngle);

            lv_cosineofTargetAngle = Cos(lv_targetAngle);

            if ((lv_cosineofTargetAngle > -0.001) && (lv_cosineofTargetAngle < 0.001)) {

                lv_abilityTargetPoint = Point(PointGetX(RegionGetBoundsMax(RegionPlayableMap())), PointGetY(lv_targetPoint));

            }

            else {

                lv_triangle2C = (lv_targetYToEdgeOfMap / Cos(lv_targetAngle));

                if ((lv_triangle1C < lv_triangle2C)) {

                    lv_abilityTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_targetPoint, (lv_triangle1C * -1.0), lv_casterPoint);

                }

                else {

                    lv_abilityTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_targetPoint, (lv_triangle2C * -1.0), lv_casterPoint);

                }

            }

        }

    }

    else if ((PointGetX(lv_casterPoint) >= PointGetX(lv_targetPoint)) && (PointGetY(lv_casterPoint) <= PointGetY(lv_targetPoint))) {

        lv_targetXToEdgeOfMap = PointGetX(lv_targetPoint);

        lv_targetYToEdgeOfMap = (PointGetY(RegionGetBoundsMax(RegionPlayableMap())) - PointGetY(lv_targetPoint));

        lv_targetAngle = (AngleBetweenPoints(lv_casterPoint, lv_targetPoint) - 90.0);

        lv_cosineofTargetAngle = Cos(lv_targetAngle);

        if ((lv_cosineofTargetAngle > -0.001) && (lv_cosineofTargetAngle < 0.001)) {

            lv_abilityTargetPoint = Point(PointGetX(RegionGetBoundsMin(RegionPlayableMap())), PointGetY(lv_targetPoint));

        }

        else {

            lv_triangle1C = (lv_targetYToEdgeOfMap / Cos(lv_targetAngle));

            lv_targetAngle = (90.0 - lv_targetAngle);

            lv_cosineofTargetAngle = Cos(lv_targetAngle);

            if ((lv_cosineofTargetAngle > -0.001) && (lv_cosineofTargetAngle < 0.001)) {

                lv_abilityTargetPoint = Point(PointGetX(lv_targetPoint), PointGetY(RegionGetBoundsMax(RegionPlayableMap())));

            }

            else {

                lv_triangle2C = (lv_targetXToEdgeOfMap / Cos(lv_targetAngle));

                if ((lv_triangle1C < lv_triangle2C)) {

                    lv_abilityTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_targetPoint, (lv_triangle1C * -1.0), lv_casterPoint);

                }

                else {

                    lv_abilityTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_targetPoint, (lv_triangle2C * -1.0), lv_casterPoint);

                }

            }

        }

    }

    else if ((PointGetX(lv_casterPoint) >= PointGetX(lv_targetPoint)) && (PointGetY(lv_casterPoint) >= PointGetY(lv_targetPoint))) {

        lv_targetXToEdgeOfMap = PointGetX(lv_targetPoint);

        lv_targetYToEdgeOfMap = PointGetY(lv_targetPoint);

        lv_targetAngle = (AngleBetweenPoints(lv_casterPoint, lv_targetPoint) - 180.0);

        lv_cosineofTargetAngle = Cos(lv_targetAngle);

        if ((lv_cosineofTargetAngle > -0.001) && (lv_cosineofTargetAngle < 0.001)) {

            lv_abilityTargetPoint = Point(PointGetX(lv_targetPoint), PointGetY(RegionGetBoundsMin(RegionPlayableMap())));

        }

        else {

            lv_triangle1C = (lv_targetXToEdgeOfMap / Cos(lv_targetAngle));

            lv_targetAngle = (90.0 - lv_targetAngle);

            lv_cosineofTargetAngle = Cos(lv_targetAngle);

            if ((lv_cosineofTargetAngle > -0.001) && (lv_cosineofTargetAngle < 0.001)) {

                lv_abilityTargetPoint = Point(PointGetX(RegionGetBoundsMin(RegionPlayableMap())), PointGetY(lv_targetPoint));

            }

            else {

                lv_triangle2C = (lv_targetYToEdgeOfMap / Cos(lv_targetAngle));

                if ((lv_triangle1C < lv_triangle2C)) {

                    lv_abilityTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_targetPoint, (lv_triangle1C * -1.0), lv_casterPoint);

                }

                else {

                    lv_abilityTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_targetPoint, (lv_triangle2C * -1.0), lv_casterPoint);

                }

            }

        }

    }

    else if ((PointGetX(lv_casterPoint) <= PointGetX(lv_targetPoint)) && (PointGetY(lv_casterPoint) >= PointGetY(lv_targetPoint))) {

        lv_targetXToEdgeOfMap = (PointGetX(RegionGetBoundsMax(RegionPlayableMap())) - PointGetX(lv_targetPoint));

        lv_targetYToEdgeOfMap = PointGetY(lv_targetPoint);

        lv_targetAngle = (AngleBetweenPoints(lv_casterPoint, lv_targetPoint) - 270.0);

        lv_cosineofTargetAngle = Cos(lv_targetAngle);

        if ((lv_cosineofTargetAngle > -0.001) && (lv_cosineofTargetAngle < 0.001)) {

            lv_abilityTargetPoint = Point(PointGetX(RegionGetBoundsMax(RegionPlayableMap())), PointGetY(lv_targetPoint));

        }

        else {

            lv_triangle1C = (lv_targetYToEdgeOfMap / Cos(lv_targetAngle));

            lv_targetAngle = (90.0 - lv_targetAngle);

            lv_cosineofTargetAngle = Cos(lv_targetAngle);

            if ((lv_cosineofTargetAngle > -0.001) && (lv_cosineofTargetAngle < 0.001)) {

                lv_abilityTargetPoint = Point(PointGetX(lv_targetPoint), PointGetY(RegionGetBoundsMin(RegionPlayableMap())));

            }

            else {

                lv_triangle2C = (lv_targetXToEdgeOfMap / Cos(lv_targetAngle));

                if ((lv_triangle1C < lv_triangle2C)) {

                    lv_abilityTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_targetPoint, (lv_triangle1C * -1.0), lv_casterPoint);

                }

                else {

                    lv_abilityTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_targetPoint, (lv_triangle2C * -1.0), lv_casterPoint);

                }

            }

        }

    }

    if ((lv_abilityTargetPoint != null)) {

        return lv_abilityTargetPoint;

    }

    else {

        return null;

    }

}



void libGDHL_gf_HeroicSummonsApplySummonedUnitTalentMonitor (unit lp_casterUnit, unit lp_summonedUnit) {

    // Automatic Variable Declarations

    // Implementation

    if ((UnitHasBehavior2(lp_casterUnit, "Ultimate1Unlocked") == true)) {

        UnitBehaviorAdd(lp_summonedUnit, "HeroGenericHeroicSummonedUnit1Monitor", lp_casterUnit, 1);

    }



    if ((UnitHasBehavior2(lp_casterUnit, "Ultimate2Unlocked") == true)) {

        UnitBehaviorAdd(lp_summonedUnit, "HeroGenericHeroicSummonedUnit2Monitor", lp_casterUnit, 1);

    }



}



void libGDHL_gf_HeroAbathurIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroAbathurTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroAbathurTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroAbathurAbathurExitsTransport, true);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbiote, true);

        TriggerEnable(libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes, true);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbioteScreenEffect, true);

        TriggerEnable(libGDHL_gt_HeroAbathurStabFacer, true);

        TriggerEnable(libGDHL_gt_HeroAbathurVolatileMutationUltimateEvolution, true);

        TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionStartControl, true);

        TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionStopControl, true);

        TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd, true);

        TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionUnitDead, true);

        TriggerEnable(libGDHL_gt_HeroAbathurLocustSpawned, true);

        TriggerEnable(libGDHL_gt_HeroAbathurLocustNestSetFacing, true);

        TriggerEnable(libGDHL_gt_HeroAbathurLocustNestCast, true);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbioteHivemindSingleTarget, true);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbioteHivemindStab, true);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityAddMinionKillStacks, true);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrositySymbioteendHooktoAI, true);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityDeselectedHooktoAI, true);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityUnhookAI, true);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityKillInitialTarget, true);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityAddSymbioteStacks, true);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbiotedMonstrositySymbioted, true);

        TriggerEnable(libGDHL_gt_HeroAbathurDeepTunnelPing, true);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbioteMinimapIcon, true);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityDeepTunnelPing, true);

    }



}



void libGDHL_gf_HeroAbathurDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroAbathurTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroAbathurTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroAbathurTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroAbathurTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroAbathurAbathurExitsTransport, false);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbiote, false);

        TriggerEnable(libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes, false);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbioteScreenEffect, false);

        TriggerEnable(libGDHL_gt_HeroAbathurStabFacer, false);

        TriggerEnable(libGDHL_gt_HeroAbathurVolatileMutationUltimateEvolution, false);

        TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionStartControl, false);

        TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionStopControl, false);

        TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd, false);

        TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionUnitDead, false);

        TriggerEnable(libGDHL_gt_HeroAbathurLocustSpawned, false);

        TriggerEnable(libGDHL_gt_HeroAbathurLocustNestSetFacing, false);

        TriggerEnable(libGDHL_gt_HeroAbathurLocustNestCast, false);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbioteHivemindSingleTarget, false);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbioteHivemindStab, false);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityAddMinionKillStacks, false);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrositySymbioteendHooktoAI, false);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityDeselectedHooktoAI, false);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityUnhookAI, false);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityKillInitialTarget, false);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityAddSymbioteStacks, false);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbiotedMonstrositySymbioted, false);

        TriggerEnable(libGDHL_gt_HeroAbathurDeepTunnelPing, false);

        TriggerEnable(libGDHL_gt_HeroAbathurSymbioteMinimapIcon, false);

        TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityDeepTunnelPing, false);

    }



}



void libGDHL_gf_AbathurUltimateEvolutionEnded (trigger t) {

    // Automatic Variable Declarations

    // Implementation

    TriggerAddEventGeneric(t, libGDHL_gv_eventID_AbathurUltimateEvolutionEnded_C);

}



void libGDHL_gf_SendEventAbathurUltimateEvolutionEnded (int lp_abathurPlayer, unit lp_clonedUnit) {

    // Automatic Variable Declarations

    // Implementation

    DataTableSetInt(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurUltimateEvolutionEnded_C, libGDHL_gv_eventParam_AbathurUltimateEvolution_AbathurPlayer_C), lp_abathurPlayer);

    DataTableSetUnit(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurUltimateEvolutionEnded_C, libGDHL_gv_eventParam_AbathurUltimateEvolution_ClonedUnit_C), lp_clonedUnit);

    TriggerSendEvent(libGDHL_gv_eventID_AbathurUltimateEvolutionEnded_C);

}



int libGDHL_gf_AbathurUltimateEvolutionEndedAbathurPlayer () {

    // Automatic Variable Declarations

    // Implementation

    return DataTableGetInt(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurUltimateEvolutionEnded_C, libGDHL_gv_eventParam_AbathurUltimateEvolution_AbathurPlayer_C));

}



unit libGDHL_gf_AbathurUltimateEvolutionEndedClonedUnit () {

    // Automatic Variable Declarations

    // Implementation

    return DataTableGetUnit(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurUltimateEvolutionEnded_C, libGDHL_gv_eventParam_AbathurUltimateEvolution_ClonedUnit_C));

}



void libGDHL_gf_AbathurUltimateEvolutionHeroCopied (trigger t) {

    // Automatic Variable Declarations

    // Implementation

    TriggerAddEventGeneric(t, libGDHL_gv_eventID_AbathurUltimateEvolutionHeroCopied_C);

}



void libGDHL_gf_SendEventAbathurUltimateEvolutionHeroCopied (int lp_ownerofAbathur, int lp_ownerofTarget) {

    // Automatic Variable Declarations

    // Implementation

    DataTableSetInt(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurUltimateEvolutionHeroCopied_C, libGDHL_gv_eventParam_AbathurUltimateEvolutionHeroCopied_AbathurOwner_C), lp_ownerofAbathur);

    DataTableSetInt(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurUltimateEvolutionHeroCopied_C, libGDHL_gv_eventParam_AbathurUltimateEvolutionHeroCopied_TargetOwner_C), lp_ownerofTarget);

    TriggerSendEvent(libGDHL_gv_eventID_AbathurUltimateEvolutionHeroCopied_C);

}



int libGDHL_gf_AbathurUltimateEvolutionHeroCopiedAbathurOwner () {

    // Automatic Variable Declarations

    // Implementation

    return DataTableGetInt(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurUltimateEvolutionHeroCopied_C, libGDHL_gv_eventParam_AbathurUltimateEvolutionHeroCopied_AbathurOwner_C));

}



int libGDHL_gf_AbathurUltimateEvolutionHeroCopiedTargetOwner () {

    // Automatic Variable Declarations

    // Implementation

    return DataTableGetInt(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurUltimateEvolutionHeroCopied_C, libGDHL_gv_eventParam_AbathurUltimateEvolutionHeroCopied_TargetOwner_C));

}



void libGDHL_gf_AbathurSymbiote (trigger t) {

    // Automatic Variable Declarations

    // Implementation

    TriggerAddEventGeneric(t, libGDHL_gv_eventID_AbathurSymbiote_C);

}



void libGDHL_gf_SendEventAbathurSymbiote (int lp_abathurPlayer, unit lp_symbioteUnit, unit lp_symbioteTarget) {

    // Automatic Variable Declarations

    // Implementation

    DataTableSetInt(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurSymbiote_C, libGDHL_gv_eventParam_AbathurSymbiote_AbathurPlayer_C), lp_abathurPlayer);

    DataTableSetUnit(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurSymbiote_C, libGDHL_gv_eventParam_AbathurSymbiote_SymbioteUnit_C), lp_symbioteUnit);

    DataTableSetUnit(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurSymbiote_C, libGDHL_gv_eventParam_AbathurSymbiote_SymbioteTarget_C), lp_symbioteTarget);

    TriggerSendEvent(libGDHL_gv_eventID_AbathurSymbiote_C);

}



int libGDHL_gf_AbathurSymbioteAbathurPlayer () {

    // Automatic Variable Declarations

    // Implementation

    return DataTableGetInt(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurSymbiote_C, libGDHL_gv_eventParam_AbathurSymbiote_AbathurPlayer_C));

}



unit libGDHL_gf_AbathurSymbioteUnit () {

    // Automatic Variable Declarations

    // Implementation

    return DataTableGetUnit(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurSymbiote_C, libGDHL_gv_eventParam_AbathurSymbiote_SymbioteUnit_C));

}



unit libGDHL_gf_AbathurSymbioteTarget () {

    // Automatic Variable Declarations

    // Implementation

    return DataTableGetUnit(false, TriggerEventParamName(libGDHL_gv_eventID_AbathurSymbiote_C, libGDHL_gv_eventParam_AbathurSymbiote_SymbioteTarget_C));

}



void libGDHL_gf_HeroArtanisIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroArtanisTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroArtanisTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroArtanisTwinBladesZealotChargeTargeting, true);

        TriggerEnable(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamSetTarget, true);

        TriggerEnable(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamRedirectTarget2ElectricBoogaloo, true);

        TriggerEnable(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamUnitCreated, true);

        TriggerEnable(libGDHL_gt_HeroArtanisBladeDashPhasePrismCast, true);

        TriggerEnable(libGDHL_gt_HeroArtanisProtectorofAiurHeroTakedownProc, true);

    }



}



void libGDHL_gf_HeroArtanisDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroArtanisTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroArtanisTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroArtanisTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroArtanisTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroArtanisTwinBladesZealotChargeTargeting, false);

        TriggerEnable(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamSetTarget, false);

        TriggerEnable(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamRedirectTarget2ElectricBoogaloo, false);

        TriggerEnable(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamUnitCreated, false);

        TriggerEnable(libGDHL_gt_HeroArtanisBladeDashPhasePrismCast, false);

        TriggerEnable(libGDHL_gt_HeroArtanisProtectorofAiurHeroTakedownProc, false);

    }



}



trigger auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_Trigger = null;

unit auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_lp_purifierBeam;

int auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_lp_owner;



void libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI (unit lp_purifierBeam, int lp_owner) {

    auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_lp_purifierBeam = lp_purifierBeam;

    auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_lp_owner = lp_owner;



    if (auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_Trigger == null) {

        auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_Trigger = TriggerCreate("auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_TriggerFunc");

    }



    TriggerExecute(auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_Trigger, false, false);

}



bool auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_TriggerFunc (bool testConds, bool runActions) {

    unit lp_purifierBeam = auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_lp_purifierBeam;

    int lp_owner = auto_libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI_lp_owner;



    // Variable Declarations

    unit lv_artanis;

    int lv_purifierBeamState;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_purifierBeamState = libGDHL_ge_SpearofAdunPurifierBeamState_Priming;



    // Implementation

    lv_purifierBeamState = libGDHL_ge_SpearofAdunPurifierBeamState_Priming;

    lv_artanis = libGame_gv_players[lp_owner].lv_heroUnit;

    while ((UnitIsAlive(lp_purifierBeam) == true)) {

        if ((lv_purifierBeamState == libGDHL_ge_SpearofAdunPurifierBeamState_Priming)) {

            if (((UnitIsAlive(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner]) == false) || (UnitHasBehavior2(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner], "Dead") == true) || (UnitHasBehaviorWithCategoryFlag(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner], c_behaviorCategorySpecialDeathState) == true)) && (UnitHasBehavior2(lv_artanis, "ArtanisSpearofAdunTargetPurifiedSupressionBehavior") == true)) {

                UnitKill(lp_purifierBeam);

                UnitModifyCooldown(lv_artanis, "Abil/ArtanisSpearofAdunPurifierBeam", 10.0, c_cooldownOperationSet);

                break;

            }



            if ((UnitBehaviorCount(lp_purifierBeam, "ArtanisSpearofAdunPurifierBeamPrimed") == 0)) {

                lv_purifierBeamState = libGDHL_ge_SpearofAdunPurifierBeamState_Active;

            }

            else {

                UnitSetPosition(lp_purifierBeam, UnitGetPosition(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner]), false);

                libGDHL_gv_heroArtanisSpearofAdunPurifierBeamLastKnownPoint[lp_owner] = UnitGetPosition(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner]);

            }

        }

        else {

            if ((lv_purifierBeamState == libGDHL_ge_SpearofAdunPurifierBeamState_Active)) {

                if ((UnitIsAlive(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner]) == true) && (UnitHasBehavior2(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner], "Dead") == false) && (UnitHasBehaviorWithCategoryFlag(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner], c_behaviorCategorySpecialDeathState) == false)) {

                    if ((libGDHL_gv_heroArtanisSpearofAdunPurifierBeamPointOverride[lp_owner] == true)) {

                        if ((DistanceBetweenPoints(UnitGetPosition(lp_purifierBeam), libGDHL_gv_heroArtanisSpearofAdunPurifierBeamLastKnownPoint[lp_owner]) <= 6.0)) {

                            UnitIssueOrder(lp_purifierBeam, OrderTargetingPoint(AbilityCommand("move", 0), UnitGetPosition(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner])), c_orderQueueReplace);

                            libGDHL_gv_heroArtanisSpearofAdunPurifierBeamPointOverride[lp_owner] = false;

                        }

                        else {

                            UnitIssueOrder(lp_purifierBeam, OrderTargetingPoint(AbilityCommand("move", 0), libGDHL_gv_heroArtanisSpearofAdunPurifierBeamLastKnownPoint[lp_owner]), c_orderQueueReplace);

                        }

                    }

                    else {

                        UnitIssueOrder(lp_purifierBeam, OrderTargetingPoint(AbilityCommand("move", 0), UnitGetPosition(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner])), c_orderQueueReplace);

                        libGDHL_gv_heroArtanisSpearofAdunPurifierBeamLastKnownPoint[lp_owner] = UnitGetPosition(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner]);

                    }

                }

                else {

                    if ((PlayerHasTalent(lp_owner, "ArtanisSpearofAdunPurifierBeamTargetPurified") == false)) {

                        UnitIssueOrder(lp_purifierBeam, OrderTargetingPoint(AbilityCommand("move", 0), libGDHL_gv_heroArtanisSpearofAdunPurifierBeamLastKnownPoint[lp_owner]), c_orderQueueReplace);

                        lv_purifierBeamState = libGDHL_ge_SpearofAdunPurifierBeamState_Idle;

                    }

                    else {

                        UnitKill(lp_purifierBeam);

                        break;

                    }

                }

            }

            else {

                if ((lv_purifierBeamState == libGDHL_ge_SpearofAdunPurifierBeamState_Idle)) {

                    if ((UnitIsAlive(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner]) == true) && (UnitHasBehavior2(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lp_owner], "Dead") == false)) {

                        lv_purifierBeamState = libGDHL_ge_SpearofAdunPurifierBeamState_Active;

                    }

                    else {

                        if ((DistanceBetweenPoints(UnitGetPosition(lp_purifierBeam), libGDHL_gv_heroArtanisSpearofAdunPurifierBeamLastKnownPoint[lp_owner]) >= 1.5)) {

                            UnitIssueOrder(lp_purifierBeam, OrderTargetingPoint(AbilityCommand("move", 0), libGDHL_gv_heroArtanisSpearofAdunPurifierBeamLastKnownPoint[lp_owner]), c_orderQueueReplace);

                        }



                    }

                }



            }

        }

        Wait(0.0625, c_timeGame);

    }

    return true;

}



void libGDHL_gf_HeroArthasIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroArthasTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroArthasTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroArthasAntiMagicShellHeal, true);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverDeath, true);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverTransport, true);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadPortGhouls, true);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadGhoulSpawned, true);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadNPCDeathProc, true);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadTakedownDeathProc, true);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadLegionofNorthrendTalentSpawn, true);

        TriggerEnable(libGDHL_gt_HeroArthasDeathPactTalentTakedownTokenProc, true);

    }



}



void libGDHL_gf_HeroArthasDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroArthasTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroArthasTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroArthasTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroArthasTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroArthasAntiMagicShellHeal, false);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverDeath, false);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverTransport, false);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadPortGhouls, false);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadGhoulSpawned, false);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadNPCDeathProc, false);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadTakedownDeathProc, false);

        TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadLegionofNorthrendTalentSpawn, false);

        TriggerEnable(libGDHL_gt_HeroArthasDeathPactTalentTakedownTokenProc, false);

    }



}



void libGDHL_gf_HeroAnubarakIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroAnubarakTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroAnubarakTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeSuppressCollision, true);

        TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeMaxRange, true);

        TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeCancel, true);

        TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeUnpathableCheck, true);

        TriggerEnable(libGDHL_gt_HeroAnubarakBeetleJuicedMasterySpecialDeathStateProc, true);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonSoundEffect, true);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonOn, true);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonOff, true);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonSpawned, true);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonUnitHit, true);

    }



}



void libGDHL_gf_HeroAnubarakDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroAnubarakTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroAnubarakTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroAnubarakTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroAnubarakTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeSuppressCollision, false);

        TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeMaxRange, false);

        TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeCancel, false);

        TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeUnpathableCheck, false);

        TriggerEnable(libGDHL_gt_HeroAnubarakBeetleJuicedMasterySpecialDeathStateProc, false);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonSoundEffect, false);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonOn, false);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonOff, false);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonSpawned, false);

        TriggerEnable(libGDHL_gt_HeroAnubarakCocoonUnitHit, false);

    }



}



void libGDHL_gf_HeroAzmodanIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroAzmodanTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroAzmodanTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonicInvasionAddUnitstoUnitGroup, true);

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonicInvasionUnpathableLocation, true);

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonCreate, true);

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing, true);

        TriggerEnable(libGDHL_gt_HeroAzmodanSpawned, true);

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonicInvasionRemoveExistingDemons, true);

        TriggerEnable(libGDHL_gt_HeroAzmodanGlobeTalentPicked, true);

        TriggerEnable(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, true);

        TriggerEnable(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValuesReset, true);

    }



}



void libGDHL_gf_HeroAzmodanDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroAzmodanTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroAzmodanTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroAzmodanTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroAzmodanTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonicInvasionAddUnitstoUnitGroup, false);

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonicInvasionUnpathableLocation, false);

        TriggerEnable(libGDHL_gt_HeroAzmodanCustomKillVO, false);

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonCreate, false);

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing, false);

        TriggerEnable(libGDHL_gt_HeroAzmodanSpawned, false);

        TriggerEnable(libGDHL_gt_HeroAzmodanDemonicInvasionRemoveExistingDemons, false);

        TriggerEnable(libGDHL_gt_HeroAzmodanGlobeTalentPicked, false);

        TriggerEnable(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, false);

        TriggerEnable(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValuesReset, false);

    }



}



void libGDHL_gf_HeroBarbarianIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroBarbarianTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroBarbarianTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension, true);

        TriggerEnable(libGDHL_gt_HeroBarbarianAncientSpearLaunchBarbarianUsed, true);

        TriggerEnable(libGDHL_gt_HeroBarbarianLeap, true);

        TriggerEnable(libGDHL_gt_HeroBarbarianLeapArreatCraterForcedDestruction, true);

    }



}



void libGDHL_gf_HeroBarbarianDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroBarbarianTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroBarbarianTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroBarbarianTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroBarbarianTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension, false);

        TriggerEnable(libGDHL_gt_HeroBarbarianAncientSpearLaunchBarbarianUsed, false);

        TriggerEnable(libGDHL_gt_HeroBarbarianLeap, false);

        TriggerEnable(libGDHL_gt_HeroBarbarianLeapArreatCraterForcedDestruction, false);

    }



}



void libGDHL_gf_HeroButcherIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroButcherTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroButcherTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtTargetAudioTelegraph, true);

        TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtTravelValidation, true);

        TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtCast, true);

        TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtCancelAnimationHook, true);

        TriggerEnable(libGDHL_gt_HeroButcherButcherParticipatedInTakedown, true);

        TriggerEnable(libGDHL_gt_HeroButcherFreshMeatVehiclePickup, true);

        TriggerEnable(libGDHL_gt_HeroButcherFreshMeatVehicleOccupy, true);

        TriggerEnable(libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter, true);

    }



}



void libGDHL_gf_HeroButcherDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroButcherTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroButcherTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroButcherTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroButcherTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtTargetAudioTelegraph, false);

        TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtTravelValidation, false);

        TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtCast, false);

        TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtCancelAnimationHook, false);

        TriggerEnable(libGDHL_gt_HeroButcherButcherParticipatedInTakedown, false);

        TriggerEnable(libGDHL_gt_HeroButcherFreshMeatVehiclePickup, false);

        TriggerEnable(libGDHL_gt_HeroButcherFreshMeatVehicleOccupy, false);

        TriggerEnable(libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter, false);

    }



}



void libGDHL_gf_HeroChenIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroChenTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroChenTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroChenWanderingKegActivate, true);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthFireTimedLifeIncrease, true);

        TriggerEnable(libGDHL_gt_HeroChenWanderingKegDeactivate, true);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthAndFireStasis, true);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthAndFireTimestop, true);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthAndFireStasisCleanup, true);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthFireActivatedNew, true);

        TriggerEnable(libGDHL_gt_HeroChenElementDies, true);

        TriggerEnable(libGDHL_gt_HeroChenElementFatalDamageResponse, true);

        TriggerEnable(libGDHL_gt_HeroChenExpirationCleanup, true);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthFireEarthAbility, true);

        TriggerEnable(libGDHL_gt_HeroChenSwiftReflexesTalentMissed, true);

        TriggerEnable(libGDHL_gt_HeroChenFreshestIngredientsTalentProc, true);

        TriggerEnable(libGDHL_gt_HeroChenStaggerDamageResponse, true);

        TriggerEnable(libGDHL_gt_HeroChenStaggerDisplayUpdate, true);

    }



}



void libGDHL_gf_HeroChenDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroChenTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroChenTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroChenTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroChenTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroChenWanderingKegActivate, false);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthFireTimedLifeIncrease, false);

        TriggerEnable(libGDHL_gt_HeroChenWanderingKegDeactivate, false);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthAndFireStasis, false);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthAndFireTimestop, false);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthAndFireStasisCleanup, false);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthFireActivatedNew, false);

        TriggerEnable(libGDHL_gt_HeroChenElementDies, false);

        TriggerEnable(libGDHL_gt_HeroChenElementFatalDamageResponse, false);

        TriggerEnable(libGDHL_gt_HeroChenExpirationCleanup, false);

        TriggerEnable(libGDHL_gt_HeroChenStormEarthFireEarthAbility, false);

        TriggerEnable(libGDHL_gt_HeroChenSwiftReflexesTalentMissed, false);

        TriggerEnable(libGDHL_gt_HeroChenFreshestIngredientsTalentProc, false);

        TriggerEnable(libGDHL_gt_HeroChenStaggerDamageResponse, false);

        TriggerEnable(libGDHL_gt_HeroChenStaggerDisplayUpdate, false);

    }



}



void libGDHL_gf_HeroChenStormEarthFireCleanup (int lp_chenOwner, bool lp_suicide, unit lp_suicideSource) {

    // Variable Declarations

    int lv_owner;

    unit lv_chen;



    // Automatic Variable Declarations

    unitgroup auto37648C49_g;

    int auto37648C49_u;

    unit auto37648C49_var;



    // Variable Initialization



    // Implementation

    lv_owner = lp_chenOwner;

    if ((UnitGetType(libGame_gv_players[lv_owner].lv_heroUnit) == "HeroAbathur")) {

        if ((libGame_gv_players[lv_owner].lv_activeVehicle == null)) {

            auto37648C49_g = UnitGroup(null, lv_owner, RegionEntireMap(), UnitFilter(0, (1 << (c_targetFilterHallucination - 32)), (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

            auto37648C49_u = UnitGroupCount(auto37648C49_g, c_unitCountAll);

            for (;; auto37648C49_u -= 1) {

                auto37648C49_var = UnitGroupUnitFromEnd(auto37648C49_g, auto37648C49_u);

                if (auto37648C49_var == null) { break; }

                UnitRemove(auto37648C49_var);

            }

            return ;

        }



        lv_chen = libGame_gv_players[lv_owner].lv_activeVehicle;

    }

    else {

        lv_chen = libGame_gv_players[lv_owner].lv_heroUnit;

    }

    if ((libGame_gv_players[lv_owner].lv_activeVehicle != null)) {

        UnitBehaviorRemove(lv_chen, "StormEarthFireCasterBehavior", 1);

        return ;

    }



    UnitBehaviorRemove(lv_chen, "StormEarthFireCasterBehavior", 1);

    UnitSelect(lv_chen, lv_owner, true);

    libGame_gv_players[lv_owner].lv_cameraPlayerHasControl = false;

    libGame_gv_players[lv_owner].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[lv_owner].lv_heroUnitGroup;

    libGame_gf_CameraUpdateCameraForPlayer(lv_owner);

    Wait(0.0625, c_timeGame);

    libGame_gv_players[lv_owner].lv_cameraPlayerHasControl = true;

    libGame_gf_CameraUpdateCameraForPlayer(lv_owner);

    libGDHL_gv_heroChenStormEarthFireUnits[lv_owner].lv_controlStoreUnit = null;

    if ((libGDHL_gv_heroChenStormEarthFireFatalDamageResponseCounter[lp_chenOwner] == 3)) {

        UnitCreateEffectUnitWithSource(lp_suicideSource, "ChenStormEarthFireSuicideDamage", lv_chen, c_gameCatalogAbil, "ChenStormEarthFire");

        libGDHL_gv_heroChenStormEarthFireFatalDamageResponseCounter[lp_chenOwner] = 0;

    }

    else {

        libGDHL_gv_heroChenStormEarthFireFatalDamageResponseCounter[lp_chenOwner] = 0;

    }

}



void libGDHL_gf_HeroCrusaderIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroCrusaderTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroCrusaderTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_CrusaderFallingSwordTeleport, true);

        TriggerEnable(libGDHL_gt_CrusaderFallingSwordFinalSet, true);

        TriggerEnable(libGDHL_gt_CrusaderFallingSwordSuppressCollision, true);

    }



}



void libGDHL_gf_HeroCrusaderDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroCrusaderTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroCrusaderTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroCrusaderTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroCrusaderTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_CrusaderFallingSwordTeleport, false);

        TriggerEnable(libGDHL_gt_CrusaderFallingSwordFinalSet, false);

        TriggerEnable(libGDHL_gt_CrusaderFallingSwordSuppressCollision, false);

    }



}



void libGDHL_gf_HeroDiabloIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroDiabloTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroDiabloTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroDiabloInfernoBreathCast, true);

        TriggerEnable(libGDHL_gt_HeroDiabloInfernoBreathEnd, true);

        TriggerEnable(libGDHL_gt_HeroDiabloBlackSoulstoneStackTalentPicked, true);

        TriggerEnable(libGDHL_gt_HeroDiabloOverpowerSetFacing, true);

        TriggerEnable(libGDHL_gt_HeroDiabloEternalSoulstoneRessurection, true);

        TriggerEnable(libGDHL_gt_HeroDiabloResetEternalSoulstoneRessurection, true);

    }



}



void libGDHL_gf_HeroDiabloDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroDiabloTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroDiabloTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroDiabloTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroDiabloTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroDiabloInfernoBreathCast, false);

        TriggerEnable(libGDHL_gt_HeroDiabloInfernoBreathEnd, false);

        TriggerEnable(libGDHL_gt_HeroDiabloBlackSoulstoneStackTalentPicked, false);

        TriggerEnable(libGDHL_gt_HeroDiabloOverpowerSetFacing, false);

        TriggerEnable(libGDHL_gt_HeroDiabloEternalSoulstoneRessurection, false);

        TriggerEnable(libGDHL_gt_HeroDiabloResetEternalSoulstoneRessurection, false);

    }



}



void libGDHL_gf_HeroDemonHunterIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroDemonHunterTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroDemonHunterTriggerRegistrationVariable == 1)) {

    }



}



void libGDHL_gf_HeroDemonHunterDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroDemonHunterTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroDemonHunterTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroDemonHunterTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroDemonHunterTriggerRegistrationVariable == 0)) {

    }



}



void libGDHL_gf_HeroDryadIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroDryadTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroDryadTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroDryadLeapingStrikeSetTargetVariable, true);

        TriggerEnable(libGDHL_gt_HeroDryadLeapingStrikeFindLandingLocation, true);

        TriggerEnable(libGDHL_gt_HeroDryadLeapingStrikeCreateAttackPersistent, true);

        TriggerEnable(libGDHL_gt_HeroDryadNaturesToxinHandleApplication, true);

        TriggerEnable(libGDHL_gt_HeroDryadWispDividingWispDuration, true);

        TriggerEnable(libGDHL_gt_HeroDryadDanceCancelOrders, true);

        TriggerEnable(libGDHL_gt_HeroDryadActivateCameraSettings, true);

        TriggerEnable(libGDHL_gt_HeroDryadDeactivateCameraSettings, true);

        TriggerEnable(libGDHL_gt_HeroDryadActivateCameraforSymbiote, true);

        TriggerEnable(libGDHL_gt_HeroDryadLossofControlCamera, true);

        TriggerEnable(libGDHL_gt_HeroDryadAbolishMagicBehaviorActivate, true);

        TriggerEnable(libGDHL_gt_HeroDryadAbolishMagicBehaviorDeactivate, true);

    }



}



void libGDHL_gf_HeroDryadDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroDryadTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroDryadTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroDryadTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroDryadTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroDryadLeapingStrikeSetTargetVariable, false);

        TriggerEnable(libGDHL_gt_HeroDryadLeapingStrikeFindLandingLocation, false);

        TriggerEnable(libGDHL_gt_HeroDryadLeapingStrikeCreateAttackPersistent, false);

        TriggerEnable(libGDHL_gt_HeroDryadNaturesToxinHandleApplication, false);

        TriggerEnable(libGDHL_gt_HeroDryadWispDividingWispDuration, false);

        TriggerEnable(libGDHL_gt_HeroDryadDanceCancelOrders, false);

        TriggerEnable(libGDHL_gt_HeroDryadActivateCameraSettings, false);

        TriggerEnable(libGDHL_gt_HeroDryadDeactivateCameraSettings, false);

        TriggerEnable(libGDHL_gt_HeroDryadActivateCameraforSymbiote, false);

        TriggerEnable(libGDHL_gt_HeroDryadLossofControlCamera, false);

        TriggerEnable(libGDHL_gt_HeroDryadAbolishMagicBehaviorActivate, false);

        TriggerEnable(libGDHL_gt_HeroDryadAbolishMagicBehaviorDeactivate, false);

    }



}



void libGDHL_gf_HeroGreymaneIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroGreymaneTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroGreymaneTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroGreymaneGofortheThroatSpecialDeathProcs, true);

        TriggerEnable(libGDHL_gt_HeroGreymaneTalentWizenedDuelistDeath, true);

        TriggerEnable(libGDHL_gt_HeroGreymaneActorSoundSwaps, true);

    }



}



void libGDHL_gf_HeroGreymaneDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroGreymaneTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroGreymaneTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroGreymaneTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroGreymaneTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroGreymaneGofortheThroatSpecialDeathProcs, false);

        TriggerEnable(libGDHL_gt_HeroGreymaneTalentWizenedDuelistDeath, false);

        TriggerEnable(libGDHL_gt_HeroGreymaneActorSoundSwaps, false);

    }



}



void libGDHL_gf_HeroGuldanDarkBargainDeathTimerHoldandSwap (int lp_team, int lp_frameIndex, fixed lp_waitTime) {

    // Automatic Variable Declarations

    // Implementation

    DialogControlSendAnimationEvent(libUIUI_gv_deathTimerPanel.lv_timerBarHeroFrame[lp_team][lp_frameIndex], PlayerGroupAll(), "Pause");

    DialogControlSetVisible(libUIUI_gv_deathTimerPanel.lv_timerBarDarkBargainBorder[lp_team][lp_frameIndex], PlayerGroupAll(), true);

    Wait(lp_waitTime, c_timeGame);

    DialogControlSetVisible(libUIUI_gv_deathTimerPanel.lv_timerBarDarkBargainBorder[lp_team][lp_frameIndex], PlayerGroupAll(), false);

    if ((lp_team == libGame_gv_teamOrderIndex_C)) {

        libNtve_gf_SetDialogItemStyle(libUIUI_gv_deathTimerPanel.lv_timerBarHeroFrameTimeLabel[lp_team][lp_frameIndex], "Storm_DeathTimer_TimerLabelRed", libGame_gv_teams[libGame_gv_teamChaosIndex_C].lv_teamPlayerGroupNoNPCPlayers);

    }

    else {

        libNtve_gf_SetDialogItemStyle(libUIUI_gv_deathTimerPanel.lv_timerBarHeroFrameTimeLabel[lp_team][lp_frameIndex], "Storm_DeathTimer_TimerLabelRed", libGame_gv_teams[libGame_gv_teamOrderIndex_C].lv_teamPlayerGroupNoNPCPlayers);

    }

    if (((libCore_gv_sYSGameMode == libCore_ge_GameModes_ArenaMode) || (libCore_gv_sYSGameMode == libCore_ge_GameModes_AttackDefend))) {

        DialogControlSendAnimationEvent(libUIUI_gv_deathTimerPanel.lv_timerBarHeroFrame[lp_team][lp_frameIndex], PlayerGroupAll(), "StartRapid");

    }

    else {

        DialogControlSendAnimationEvent(libUIUI_gv_deathTimerPanel.lv_timerBarHeroFrame[lp_team][lp_frameIndex], PlayerGroupAll(), "Start");

    }

    DialogControlSendAnimationEvent(libUIUI_gv_deathTimerPanel.lv_timerBarDarkBargainBorder[lp_team][lp_frameIndex], PlayerGroupAll(), "StopFlash");

}



void libGDHL_gf_HeroFaerieDragonIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroFaerieDragonTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroFaerieDragonTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroFaerieDragonPhaseShiftCamera, true);

        TriggerEnable(libGDHL_gt_HeroFaerieDragonPhaseShiftPing, true);

        TriggerEnable(libGDHL_gt_HeroFaerieDragonPixieCharmChargeCountProc, true);

    }



}



void libGDHL_gf_HeroFaerieDragonDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroFaerieDragonTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroFaerieDragonTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroFaerieDragonTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroFaerieDragonTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroFaerieDragonPhaseShiftCamera, false);

        TriggerEnable(libGDHL_gt_HeroFaerieDragonPhaseShiftPing, false);

        TriggerEnable(libGDHL_gt_HeroFaerieDragonPixieCharmChargeCountProc, false);

    }



}



void libGDHL_gf_HeroFalstadIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroFalstadTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroFalstadTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroFalstadFlightCameraHeightRestore, true);

        TriggerEnable(libGDHL_gt_HeroFalstadFlightPing, true);

        TriggerEnable(libGDHL_gt_HeroFalstadDishonorableDischargeHeroKillRefreshCooldown, true);

    }



}



void libGDHL_gf_HeroFalstadDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroFalstadTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroFalstadTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroFalstadTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroFalstadTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroFalstadFlightCameraHeightRestore, false);

        TriggerEnable(libGDHL_gt_HeroFalstadFlightPing, false);

        TriggerEnable(libGDHL_gt_HeroFalstadDishonorableDischargeHeroKillRefreshCooldown, false);

    }



}



void libGDHL_gf_HeroIllidanIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroIllidanTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroIllidanTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse, true);

        TriggerEnable(libGDHL_gt_HeroIllidanMetamorphosisAvatarApplyHealthBuff, true);

        TriggerEnable(libGDHL_gt_HeroIllidanTheHuntNowhereToHideTalentActivate, true);

        TriggerEnable(libGDHL_gt_HeroIllidanBladesOfAzzinothAddCharge, true);

        TriggerEnable(libGDHL_gt_HeroIllidanUnendingHatredHeroTakedown, true);

        TriggerEnable(libGDHL_gt_HeroIllidanUnendingHatredNPCKill, true);

        TriggerEnable(libGDHL_gt_HeroIllidanMetamorphisisUnendingHatredHearthstoneUsed, true);

    }



}



void libGDHL_gf_HeroIllidanDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroIllidanTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroIllidanTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroIllidanTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroIllidanTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse, false);

        TriggerEnable(libGDHL_gt_HeroIllidanMetamorphosisAvatarApplyHealthBuff, false);

        TriggerEnable(libGDHL_gt_HeroIllidanTheHuntNowhereToHideTalentActivate, false);

        TriggerEnable(libGDHL_gt_HeroIllidanBladesOfAzzinothAddCharge, false);

        TriggerEnable(libGDHL_gt_HeroIllidanUnendingHatredHeroTakedown, false);

        TriggerEnable(libGDHL_gt_HeroIllidanUnendingHatredNPCKill, false);

        TriggerEnable(libGDHL_gt_HeroIllidanMetamorphisisUnendingHatredHearthstoneUsed, false);

    }



}



void libGDHL_gf_HeroJainaIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroJainaTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroJainaTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroJainaWaterElementalCreated, true);

        TriggerEnable(libGDHL_gt_HeroJainaWaterElementalCommand, true);

        TriggerEnable(libGDHL_gt_HeroJainaFrostboltWintermuteCast, true);

        TriggerEnable(libGDHL_gt_HeroJainaConeofColdWintermuteCast, true);

        TriggerEnable(libGDHL_gt_HeroJainaBlizzardWintermuteCast, true);

        TriggerEnable(libGDHL_gt_HeroJainaWaterElementalVehicleInitial, true);

        TriggerEnable(libGDHL_gt_HeroJainaChilledDamageResponse, true);

        TriggerEnable(libGDHL_gt_HeroJainaImprovedIceBlockOverlayOn, true);

        TriggerEnable(libGDHL_gt_HeroJainaImprovedIceBlockOverlayOff, true);

        TriggerEnable(libGDHL_gt_HeroJainaWaterElementalSummonedUnitSpecialCaseInteraction, true);

        TriggerEnable(libGDHL_gt_HeroJainaFrostbiteIceblockItem, true);

        TriggerEnable(libGDHL_gt_HeroJainaFrostbittenCompletionDummy, true);

        TriggerEnable(libGDHL_gt_HeroJainaFrostbiteQuestReset, true);

    }



}



void libGDHL_gf_HeroJainaDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroJainaTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroJainaTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroJainaTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroJainaTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroJainaWaterElementalCreated, false);

        TriggerEnable(libGDHL_gt_HeroJainaWaterElementalCommand, false);

        TriggerEnable(libGDHL_gt_HeroJainaFrostboltWintermuteCast, false);

        TriggerEnable(libGDHL_gt_HeroJainaConeofColdWintermuteCast, false);

        TriggerEnable(libGDHL_gt_HeroJainaBlizzardWintermuteCast, false);

        TriggerEnable(libGDHL_gt_HeroJainaWaterElementalVehicleInitial, false);

        TriggerEnable(libGDHL_gt_HeroJainaChilledDamageResponse, false);

        TriggerEnable(libGDHL_gt_HeroJainaImprovedIceBlockOverlayOn, false);

        TriggerEnable(libGDHL_gt_HeroJainaImprovedIceBlockOverlayOff, false);

        TriggerEnable(libGDHL_gt_HeroJainaWaterElementalSummonedUnitSpecialCaseInteraction, false);

        TriggerEnable(libGDHL_gt_HeroJainaFrostbiteIceblockItem, false);

        TriggerEnable(libGDHL_gt_HeroJainaFrostbittenCompletionDummy, false);

        TriggerEnable(libGDHL_gt_HeroJainaFrostbiteQuestReset, false);

    }



}



trigger auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_Trigger = null;

unit auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_lp_jaina;

int auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_lp_player;



void libGDHL_gf_HeroJainaWaterElementalVehicleControl (unit lp_jaina, int lp_player) {

    auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_lp_jaina = lp_jaina;

    auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_lp_player = lp_player;



    if (auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_Trigger == null) {

        auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_Trigger = TriggerCreate("auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_TriggerFunc");

    }



    TriggerExecute(auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_Trigger, false, false);

}



bool auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_TriggerFunc (bool testConds, bool runActions) {

    unit lp_jaina = auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_lp_jaina;

    int lp_player = auto_libGDHL_gf_HeroJainaWaterElementalVehicleControl_lp_player;



    // Variable Declarations

    bool lv_gaveToMinionAI;



    // Automatic Variable Declarations

    // Variable Initialization



    // Implementation

    while ((UnitHasBehavior2(lp_jaina, "JainaWaterElementalCasterBehavior") == true) && (libGame_gv_players[lp_player].lv_activeVehicle != null)) {

        UnitIssueOrder(libGDHL_gv_heroJainaWaterElemental[lp_player], OrderTargetingPoint(AbilityCommand("attack", 0), libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(libGame_gv_players[lp_player].lv_activeVehicle), 2.0, UnitGetPosition(libGDHL_gv_heroJainaWaterElemental[lp_player]))), c_orderQueueReplace);

        Wait(0.5, c_timeGame);

    }

    return true;

}



void libGDHL_gf_HeroKaelthasIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroKaelthasTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroKaelthasTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroKaelthasPhoenixSpawnSelection, true);

        TriggerEnable(libGDHL_gt_HeroKaelthasTwinSpheresTalentPickCooldownReset, true);

        TriggerEnable(libGDHL_gt_HeroKaelthasPyroblastMissileCreated, true);

        TriggerEnable(libGame_gt_KaelthasEntersVehicle, true);

        TriggerEnable(libGame_gt_KaelthasStopsOccupyingVehicle, true);

    }



}



void libGDHL_gf_HeroKaelthasDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroKaelthasTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroKaelthasTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroKaelthasTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroKaelthasTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroKaelthasPhoenixSpawnSelection, false);

        TriggerEnable(libGDHL_gt_HeroKaelthasTwinSpheresTalentPickCooldownReset, false);

        TriggerEnable(libGDHL_gt_HeroKaelthasPyroblastMissileCreated, false);

        TriggerEnable(libGame_gt_KaelthasEntersVehicle, false);

        TriggerEnable(libGame_gt_KaelthasStopsOccupyingVehicle, false);

    }



}



void libGDHL_gf_HeroKerriganIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroKerriganTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroKerriganTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskSummonUltralisk, true);

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbility, true);

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilityPoint, true);

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilitySummonedUnitSpecialCaseInteraction, true);

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskDies, true);

        TriggerEnable(libGDHL_gt_HeroKerriganImpalingBladesKineticFulminationTokenTransfer, true);

    }



}



void libGDHL_gf_HeroKerriganDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroKerriganTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroKerriganTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroKerriganTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroKerriganTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskSummonUltralisk, false);

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbility, false);

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilityPoint, false);

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilitySummonedUnitSpecialCaseInteraction, false);

        TriggerEnable(libGDHL_gt_HeroKerriganUltraliskDies, false);

        TriggerEnable(libGDHL_gt_HeroKerriganImpalingBladesKineticFulminationTokenTransfer, false);

    }



}



void libGDHL_gf_HeroKerriganUltraliskLogicController (int lp_owningPlayer, unit lp_ultraliskUnit) {

    // Variable Declarations

    point lv_lastKnownLocation;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_lastKnownLocation = UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitTarget));



    // Implementation

    while ((UnitIsAlive(lp_ultraliskUnit) == true)) {

        if ((UnitOrderCount(lp_ultraliskUnit) == 0)) {

            UnitIssueOrder(lp_ultraliskUnit, OrderTargetingPoint(AbilityCommand("attack", 0), UnitGetPosition(lp_ultraliskUnit)), c_orderQueueReplace);

            Wait(0.25, c_timeGame);

            if ((UnitOrderCount(lp_ultraliskUnit) == 0)) {

                if ((UnitIsAlive(lp_ultraliskUnit) == false)) {

                    return ;

                }



                UnitIssueOrder(lp_ultraliskUnit, OrderTargetingPoint(AbilityCommand("attack", 0), PointWithOffsetPolar(UnitGetPosition(lp_ultraliskUnit), 3.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                Wait(1.75, c_timeGame);

            }



        }

        else {

            if ((OrderGetTargetUnit(UnitOrder(lp_ultraliskUnit, 0)) != null)) {

                if ((OrderGetTargetUnit(UnitOrder(lp_ultraliskUnit, 0)) != libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster)])) {

                    libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster)] = OrderGetTargetUnit(UnitOrder(lp_ultraliskUnit, 0));

                }



                if ((UnitFilterMatch(libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster)], UnitGetOwner(lp_ultraliskUnit), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true) && (libNtve_gf_UnitIsVisibleToPlayer(libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster)], UnitGetOwner(lp_ultraliskUnit)) == true)) {

                    if ((lv_lastKnownLocation != UnitGetPosition(libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster)]))) {

                        lv_lastKnownLocation = UnitGetPosition(libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster)]);

                    }



                }

                else {

                    UnitIssueOrder(lp_ultraliskUnit, OrderTargetingPoint(AbilityCommand("attack", 0), PointWithOffsetPolar(lv_lastKnownLocation, 2.0, UnitGetFacing(lp_ultraliskUnit))), c_orderQueueReplace);

                    lv_lastKnownLocation = PointWithOffsetPolar(lv_lastKnownLocation, 2.0, UnitGetFacing(lp_ultraliskUnit));

                    Wait(1.5, c_timeGame);

                }

            }



        }

        Wait(0.125, c_timeGame);

    }

}



void libGDHL_gf_HeroETCIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroETCTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroETCTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroL90ETCPowerslideTargetCheck, true);

        TriggerEnable(libGDHL_gt_HeroL90ETCStageDiveTeleportUnit, true);

        TriggerEnable(libGDHL_gt_HeroL90ETCStageDiveFinalSet, true);

        TriggerEnable(libGDHL_gt_HeroL90ETCMoshPitOn, true);

        TriggerEnable(libGDHL_gt_HeroETCProgRockTalentRegenGlobeProc, true);

    }



}



void libGDHL_gf_HeroETCDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroETCTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroETCTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroETCTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroETCTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroL90ETCPowerslideTargetCheck, false);

        TriggerEnable(libGDHL_gt_HeroL90ETCStageDiveTeleportUnit, false);

        TriggerEnable(libGDHL_gt_HeroL90ETCStageDiveFinalSet, false);

        TriggerEnable(libGDHL_gt_HeroL90ETCMoshPitOn, false);

        TriggerEnable(libGDHL_gt_HeroETCProgRockTalentRegenGlobeProc, false);

    }



}



void libGDHL_gf_HeroLiLiIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroLiLiTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroLiLiTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroLiLiCloudSerpentTurretSerpentSummonandSimplifiedAI, true);

        TriggerEnable(libGDHL_gt_HeroLiLiCloudSerpentSummonandSimplifiedAI, true);

        TriggerEnable(libGDHL_gt_HeroLiLiCloudSerpentAttackMimic, true);

    }



}



void libGDHL_gf_HeroLiLiDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroLiLiTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroLiLiTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroLiLiTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroLiLiTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroLiLiCloudSerpentTurretSerpentSummonandSimplifiedAI, false);

        TriggerEnable(libGDHL_gt_HeroLiLiCloudSerpentSummonandSimplifiedAI, false);

        TriggerEnable(libGDHL_gt_HeroLiLiCloudSerpentAttackMimic, false);

    }



}



void libGDHL_gf_HeroLiLiCloudSerpentCloakController (unit lp_owningUnit, unit lp_serpentUnit) {

    // Automatic Variable Declarations

    // Implementation

    if (((UnitTestState(lp_owningUnit, c_unitStateCloaked) == true) || (UnitBehaviorCount(lp_owningUnit, "ShrubStatusController") == 1)) && (UnitHasBehavior2(lp_serpentUnit, "CloudSerpentCloakingBehavior") == false) && (UnitHasBehavior2(lp_owningUnit, "AttackReveal") == false)) {

        libNtve_gf_SendActorMessageToUnit(lp_serpentUnit, "Signal SerpentHide");

        UnitBehaviorAdd(lp_serpentUnit, "CloudSerpentCloakingBehavior", lp_serpentUnit, 1);

    }

    else {

        if (((UnitBehaviorCount(lp_owningUnit, "ShrubStatusController") == 0) || (UnitHasBehavior2(lp_owningUnit, "AttackReveal") == true)) && (UnitTestState(lp_owningUnit, c_unitStateCloaked) == false) && (UnitHasBehavior2(lp_serpentUnit, "CloudSerpentCloakingBehavior") == true)) {

            libNtve_gf_SendActorMessageToUnit(lp_serpentUnit, "Signal SerpentShow");

            UnitBehaviorRemove(lp_serpentUnit, "CloudSerpentCloakingBehavior", 1);

        }



    }

}



void libGDHL_gf_HeroLeoricIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroLeoricTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroLeoricTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroLeoricWraithWalkDevouringMawSpecialCase, true);

        TriggerEnable(libGDHL_gt_HeroLeoricWraithWalkCast, true);

        TriggerEnable(libGDHL_gt_LeoricUndyingStart, true);

        TriggerEnable(libGDHL_gt_LeoricUndyingEnd, true);

        TriggerEnable(libGDHL_gt_LeoricSwappedDuringUndying, true);

        TriggerEnable(libGDHL_gt_LeoricUndyingHealingDeathTimerReduction, true);

        TriggerEnable(libGDHL_gt_LeoricFealtyUntoDeathEnemyNPCProcListener, true);

        TriggerEnable(libGDHL_gt_LeoricFealtyUntoDeathAlliedNPCProcListener, true);

        TriggerEnable(libGDHL_gt_HeroLeoricOsseinRenewalTalentGlobeProc, true);

        TriggerEnable(libGDHL_gt_HeroLeoricEntombForcedDestruction, true);

        TriggerEnable(libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText, true);

    }



}



void libGDHL_gf_HeroLeoricDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroLeoricTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroLeoricTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroLeoricTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroLeoricTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroLeoricWraithWalkDevouringMawSpecialCase, false);

        TriggerEnable(libGDHL_gt_HeroLeoricWraithWalkCast, false);

        TriggerEnable(libGDHL_gt_LeoricUndyingStart, false);

        TriggerEnable(libGDHL_gt_LeoricUndyingEnd, false);

        TriggerEnable(libGDHL_gt_LeoricSwappedDuringUndying, false);

        TriggerEnable(libGDHL_gt_LeoricUndyingHealingDeathTimerReduction, false);

        TriggerEnable(libGDHL_gt_LeoricFealtyUntoDeathEnemyNPCProcListener, false);

        TriggerEnable(libGDHL_gt_LeoricFealtyUntoDeathAlliedNPCProcListener, false);

        TriggerEnable(libGDHL_gt_HeroLeoricOsseinRenewalTalentGlobeProc, false);

        TriggerEnable(libGDHL_gt_HeroLeoricEntombForcedDestruction, false);

        TriggerEnable(libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText, false);

    }



}



void libGDHL_gf_LeoricUIHeroSpecificStatusFrameUpdateLeoricUIValue (int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    TextExpressionSetToken("Param/Expression/lib_GDHL_31DFEAEB", "A", FixedToText(libGDHL_gv_hero_Leoric_Undying_Dead_Time_Saved[lp_player], 2));

    libNtve_gf_SetDialogItemText(libGDHL_gv_leoricUI.lv_traitLabel, TextExpressionAssemble("Param/Expression/lib_GDHL_31DFEAEB"), libCore_gv_playerGroupFromPlayer[lp_player]);

}



void libGDHL_gf_LeoricUIHeroSpecificStatusFrameShowHideLeoricTraitUI (bool lp_showHide, int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    if ((lp_showHide == true)) {

        DialogControlSetVisible(libGDHL_gv_leoricUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[lp_player], true);

    }

    else {

        DialogControlSendAnimationEvent(libGDHL_gv_leoricUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[lp_player], "Hide");

    }

}



void libGDHL_gf_LeoricUIClearUIForHeroSwap (int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gf_LeoricUIShowHideCustomDeathOverlay(false, lp_player);

    DialogControlSendAnimationEvent(libGDHL_gv_leoricUI.lv_cheatDeathFrame, libCore_gv_playerGroupFromPlayer[lp_player], "SwapHide");

}



void libGDHL_gf_LeoricUIShowHideCustomDeathOverlay (bool lp_showHide, int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    if ((lp_showHide == true)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(lp_player, libUIUI_ge_FullscreenOverlayPriorities_Death, (CatalogFieldValueGet(c_gameCatalogHero, "Leoric", "CustomDeathOverlayPath", lp_player)), "LeoricUndying");

    }

    else {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(lp_player, (CatalogFieldValueGet(c_gameCatalogHero, "Leoric", "CustomDeathOverlayPath", lp_player)), "LeoricUndying");

    }

}



void libGDHL_gf_HeroLostVikingsIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroLostVikingsTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroLostVikingsTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyNPCProcListener, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyUsed, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyScoreReset, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyAddStacksonCooldownReset, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingHoard, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsSpinToWin, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsSpawn, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsDebugSwap, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingDies, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingRemoved, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUnderAttackPing, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUnderAttackUI, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsXPGain, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsBehaviorTalentGained, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsMoonwellRedistribution, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingEntersStasis, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingsLeavesStasis, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUnitSelected, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUnitDeselected, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUseTransport, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsRallyCast, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsRallyFinishCancel, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsRallySounds, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsPlayAgainComplete, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsPlayAgainForceGhostFacingPlacement, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidSelection, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidEndsResetControlGroups, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidExpiration, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsHideVikingsOn, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsAbathurClone, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidSelection, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidExpiration, true);

        TriggerEnable(libGDHL_gt_HeroLostVikingsOlafTheStout, true);

    }



}



void libGDHL_gf_HeroLostVikingsDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroLostVikingsTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroLostVikingsTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroLostVikingsTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroLostVikingsTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyNPCProcListener, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyUsed, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyScoreReset, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyAddStacksonCooldownReset, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingHoard, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsSpinToWin, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsSpawn, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsDebugSwap, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingDies, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingRemoved, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUnderAttackPing, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUnderAttackUI, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsXPGain, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsBehaviorTalentGained, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUnitControllerUpdate, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsMoonwellRedistribution, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingEntersStasis, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsVikingsLeavesStasis, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUnitSelected, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUnitDeselected, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsUseTransport, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsRallyCast, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsRallyFinishCancel, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsRallySounds, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsPlayAgainComplete, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsPlayAgainForceGhostFacingPlacement, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsCheckpointReachedTimerCountdown, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidSelection, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidEndsResetControlGroups, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidExpiration, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsHideVikingsOn, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsAbathurClone, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidSelection, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidExpiration, false);

        TriggerEnable(libGDHL_gt_HeroLostVikingsOlafTheStout, false);

    }



}



void libGDHL_gf_VikingBriberyProc (int lp_killingPlayer, unit lp_minion) {

    // Variable Declarations

    unit lv_vikingUnit;



    // Automatic Variable Declarations

    unitgroup auto332CD45C_g;

    int auto332CD45C_u;

    unit auto332CD45C_var;



    // Variable Initialization



    // Implementation

    if ((PlayerHasTalent(lp_killingPlayer, "LostVikingsMasteryVikingBribery") == true) && (UnitTypeTestAttribute(UnitGetType(lp_minion), c_unitAttributeSummoned) == false) && (UnitTypeTestAttribute(UnitGetType(lp_minion), c_unitAttributeStructure) == false) && (UnitTypeTestAttribute(UnitGetType(lp_minion), c_unitAttributeCreep) == false) && (UnitTypeTestAttribute(UnitGetType(lp_minion), c_unitAttributeMapBoss) == false) && (UnitTypeTestAttribute(UnitGetType(lp_minion), c_unitAttributeMapCreature) == false) && (UnitTypeTestAttribute(UnitGetType(lp_minion), c_unitAttributeUser1) == false) && (UnitTypeTestAttribute(UnitGetType(lp_minion), c_unitAttributeMinion) == true)) {

        lv_vikingUnit = libGame_gv_players[lp_killingPlayer].lv_heroUnit;

        UnitBehaviorAdd(lv_vikingUnit, "LostVikingsVikingBriberyStacks", lv_vikingUnit, 1);

        auto332CD45C_g = libGame_gv_players[lp_killingPlayer].lv_heroUnitGroup;

        auto332CD45C_u = UnitGroupCount(auto332CD45C_g, c_unitCountAll);

        for (;; auto332CD45C_u -= 1) {

            auto332CD45C_var = UnitGroupUnitFromEnd(auto332CD45C_g, auto332CD45C_u);

            if (auto332CD45C_var == null) { break; }

            UnitBehaviorAdd(auto332CD45C_var, "LostVikingsVikingBriberyVisualToken", auto332CD45C_var, 1);

            UnitCreateEffectUnit(auto332CD45C_var, "LostVikingsVikingBriberyIncreaseVisualTokenCounter", auto332CD45C_var);

        }

        PlayerScoreValueSetFromInt(lp_killingPlayer, "LostVikingsVikingBriberyStackScore", UnitBehaviorCount(lv_vikingUnit, "LostVikingsVikingBriberyStacks"));

        if ((ModI(UnitBehaviorCount(lv_vikingUnit, "LostVikingsVikingBriberyStacks"), 40) == 0)) {

            PlayerAddChargeUsed(lp_killingPlayer, "Abil/LostVikingsVikingBribery", -1.0);

        }



    }



}



void libGDHL_gf_VikingDownGiveCarryBehaviorsToGravestone (unit lp_viking, unit lp_gravestone) {

    // Automatic Variable Declarations

    // Implementation

    if ((UnitHasBehavior2(lp_viking, "Ultimate2Unlocked") == true)) {

        UnitBehaviorAdd(lp_gravestone, "Ultimate2Unlocked", lp_gravestone, 1);

    }



    if ((UnitHasBehavior2(lp_viking, "Ultimate1Unlocked") == true)) {

        UnitBehaviorAdd(lp_gravestone, "Ultimate1Unlocked", lp_gravestone, 1);

    }



    if ((UnitHasBehavior2(lp_viking, "LostVikingsSpinToWinCarry") == true)) {

        UnitBehaviorAdd(lp_gravestone, "LostVikingsSpinToWinCarry", lp_gravestone, 1);

    }



    if ((UnitHasBehavior2(lp_viking, "LostVikingsJumpEnabled") == true)) {

        UnitBehaviorAdd(lp_gravestone, "LostVikingsJumpEnabled", lp_gravestone, 1);

    }



    if ((UnitHasBehavior2(lp_viking, "LostVikingsNorseForceEnabled") == true)) {

        UnitBehaviorAdd(lp_gravestone, "LostVikingsNorseForceEnabled", lp_gravestone, 1);

    }



    if ((UnitHasBehavior2(lp_viking, "LostVikingsNordicAttackSquadCarry") == true)) {

        UnitBehaviorAdd(lp_gravestone, "LostVikingsNordicAttackSquadCarry", lp_gravestone, 1);

    }



    if ((UnitHasBehavior2(lp_viking, "LostVikingsVikingBriberyCarryBehavior") == true)) {

        UnitBehaviorAdd(lp_gravestone, "LostVikingsVikingBriberyCarryBehavior", lp_gravestone, 1);

    }



}



void libGDHL_gf_VikingDownStartRespawnTimer (unit lp_viking, timer lp_respawnTimer, bool lp_modify, fixed lp_modifyNumber, string lp_modifyUnitType) {

    // Variable Declarations

    timer lv_timer;

    int lv_lVPlayer;

    unit lv_heroUnit;

    int lv_heroLevel;

    fixed lv_respawnTime;

    fixed lv_fastRespawnTime;



    // Automatic Variable Declarations

    string autoDFDBF234_val;



    // Variable Initialization

    lv_timer = TimerCreate();



    // Implementation

    lv_lVPlayer = UnitGetOwner(lp_viking);

    lv_heroLevel = UnitLevel(lp_viking);

    if ((lp_modify == false)) {

        UnitSetState(lv_heroUnit, c_unitStateStatusBar, false);

        if ((PlayerHasTalent(lv_lVPlayer, "LostVikingsMasteryTheSequel") == true)) {

            lv_respawnTime = libCore_gf_HeroDeathTime(lv_lVPlayer, lv_heroLevel);

            lv_respawnTime -= (lv_respawnTime * libGDHL_gv_data_LostVikingsTheSequelDeathTimeReduction);

        }

        else {

            lv_respawnTime = libCore_gf_HeroDeathTime(lv_lVPlayer, lv_heroLevel);

            lv_respawnTime -= (lv_respawnTime * libGDHL_gv_data_LostVikingsDeathTimeReduction);

        }

        TimerStart(lp_respawnTimer, lv_respawnTime, false, c_timeGame);

        libGame_gv_players[lv_lVPlayer].lv_timeSpentDead += lv_respawnTime;

        libGDHL_gf_LostVikingsUIStartStopRespawnTimerOverlay(lp_viking, lv_lVPlayer, false);

    }

    else {

        if (((lp_modifyUnitType == "HeroOlaf") || (lp_modifyUnitType == "HeroErik") || (lp_modifyUnitType == "HeroBaleog"))) {

            autoDFDBF234_val = lp_modifyUnitType;

            if (autoDFDBF234_val == "HeroOlaf") {

                lv_timer = libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafDeathTimer;

            }

            else if (autoDFDBF234_val == "HeroErik") {

                lv_timer = libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikDeathTimer;

            }

            else if (autoDFDBF234_val == "HeroBaleog") {

                lv_timer = libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogDeathTimer;

            }

            else {

            }

        }



        libNtve_gf_StopTimer(lv_timer);

        TimerStart(lv_timer, lp_modifyNumber, false, c_timeGame);

        libGame_gv_players[lv_lVPlayer].lv_timeSpentDead += lp_modifyNumber;

        libGDHL_gf_LostVikingsUIStartStopRespawnTimerOverlay(lp_viking, lv_lVPlayer, false);

    }

}



void libGDHL_gf_VikingDownRespawnVikingforPlayer (unit lp_viking) {

    // Variable Declarations

    unit lv_itUnit;

    unit lv_cairn;

    int lv_i;

    int lv_lVPlayer;

    string lv_downedBehavior;

    point lv_rallyPoint;

    int lv_itViking;

    unitgroup lv_vikingUnitGroupIgnoringController;

    unit lv_itLivingViking;



    // Automatic Variable Declarations

    string auto33865564_val;

    unitgroup autoC8749EF3_g;

    int autoC8749EF3_u;

    string auto55027BFA_val;

    const int auto45A57E28_ae = libUIUI_gv_uI_MaxHeroGroupStatusFrames;

    const int auto45A57E28_ai = 1;



    // Variable Initialization

    lv_vikingUnitGroupIgnoringController = UnitGroupEmpty();



    // Implementation

    lv_lVPlayer = UnitGetOwner(lp_viking);

    if ((lv_lVPlayer > libCore_gv_bALMaxEnginePlayerCount)) {

        return ;

    }



    libGame_gf_SendEventHeroRespawn(lv_lVPlayer, lp_viking);

    libGame_gv_players[lv_lVPlayer].lv_isDead = false;

    UnitSetState(libGame_gv_players[lv_lVPlayer].lv_heroUnit, c_unitStateStatusBar, false);

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_respawnPolarOffset -= 120.0;

    UnitBehaviorRemove(lp_viking, "Dead", 1);

    UnitBehaviorRemove(lp_viking, "DeadMechanics", 1);

    UnitBehaviorRemove(lp_viking, "LostVikingsVikingDowned", 1);

    UnitRevive(lp_viking);

    UnitSetPropertyFixed(lp_viking, c_unitPropLifePercent, 100.0);

    libNtve_gf_SendActorMessageToUnit(lp_viking, "Signal Respawn");

    UnitGroupAddUnitGroup(lv_vikingUnitGroupIgnoringController, libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup);

    UnitGroupRemove(lv_vikingUnitGroupIgnoringController, libGame_gv_players[lv_lVPlayer].lv_heroUnit);

    if ((UnitGroupCount(lv_vikingUnitGroupIgnoringController, c_unitCountAlive) > 1)) {

        libGame_gv_players[lv_lVPlayer].lv_cameraPlayerUnitGroupToFocusOn = null;

        libGame_gf_CameraUpdateCameraForPlayer(lv_lVPlayer);

    }

    else {

        libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Add, libGDHL_gv_aIHeroDelegateTokenValueAnyVikingAliveValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

        libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueAnyVikingAliveValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

    }

    if ((libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_boat != null)) {

        UISetFrameVisible(libCore_gv_playerGroupFromPlayer[lv_lVPlayer], c_syncFrameTypeControlGroupPanel, true);

    }



    auto33865564_val = UnitGetType(lp_viking);

    if (auto33865564_val == "HeroErik") {

        lv_downedBehavior = "LostVikingsErikDowned";

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_erikDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitRevived");

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_allDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitRevivedPingPongStop");

        if ((UnitIsSelected(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone, lv_lVPlayer) == true)) {

            UnitSelect(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone, lv_lVPlayer, false);

            UnitSelect(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erik, lv_lVPlayer, true);

        }



        UnitControlGroupClear(lv_lVPlayer, 3);

        UnitControlGroupAddUnit(lv_lVPlayer, 3, lp_viking);

        UnitControlGroupRemoveUnit(lv_lVPlayer, 4, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone);

        if ((PlayerHasTalent(lv_lVPlayer, "LostVikingsMasterySpyGames") == true)) {

            UnitBehaviorAdd(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erik, "SpyGamesCooldown", libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erik, 1);

        }



        UnitCreateEffectUnit(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone, "LostVikingsGravestoneCopyOrders", libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erik);

        UnitRemove(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone);

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone = null;

    }

    else if (auto33865564_val == "HeroBaleog") {

        lv_downedBehavior = "LostVikingsBaleogDowned";

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_baleogDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitRevived");

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_allDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitRevivedPingPongStop");

        if ((UnitIsSelected(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone, lv_lVPlayer) == true)) {

            UnitSelect(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone, lv_lVPlayer, false);

            UnitSelect(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleog, lv_lVPlayer, true);

        }



        UnitControlGroupClear(lv_lVPlayer, 2);

        UnitControlGroupAddUnit(lv_lVPlayer, 2, lp_viking);

        UnitControlGroupRemoveUnit(lv_lVPlayer, 4, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone);

        UnitCreateEffectUnit(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone, "LostVikingsGravestoneCopyOrders", libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleog);

        UnitRemove(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone);

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone = null;

    }

    else if (auto33865564_val == "HeroOlaf") {

        lv_downedBehavior = "LostVikingsOlafDowned";

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_olafDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitRevived");

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_allDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitRevivedPingPongStop");

        if ((UnitIsSelected(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone, lv_lVPlayer) == true)) {

            UnitSelect(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone, lv_lVPlayer, false);

            UnitSelect(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olaf, lv_lVPlayer, true);

        }



        UnitControlGroupClear(lv_lVPlayer, 1);

        UnitControlGroupAddUnit(lv_lVPlayer, 1, lp_viking);

        UnitControlGroupRemoveUnit(lv_lVPlayer, 4, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone);

        UnitCreateEffectUnit(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone, "LostVikingsGravestoneCopyOrders", libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olaf);

        UnitRemove(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone);

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone = null;

    }

    else {

    }

    autoC8749EF3_g = libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup;

    autoC8749EF3_u = UnitGroupCount(autoC8749EF3_g, c_unitCountAll);

    for (;; autoC8749EF3_u -= 1) {

        lv_itUnit = UnitGroupUnitFromEnd(autoC8749EF3_g, autoC8749EF3_u);

        if (lv_itUnit == null) { break; }

        UnitBehaviorRemove(lv_itUnit, lv_downedBehavior, 1);

    }

    if ((UnitBehaviorCount(lp_viking, "LostVikingsCheckpointReachedCarry") == 1)) {

        lv_cairn = UnitGroupUnit(UnitGroup("LostVikingsPlayAgainCairn", lv_lVPlayer, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 1), 1);

        if ((lv_cairn != null)) {

            UnitCreateEffectPoint(lp_viking, "LostVikingsPlayAgainTeleport", PointWithOffsetPolar(UnitGetPosition(lv_cairn), 2.5, 10.0));

        }



    }



    MinimapPing(libCore_gv_playerGroupFromPlayer[lv_lVPlayer], UnitGetPosition(lp_viking), 2.0, Color(100.00, 0.00, 0.00));

    auto55027BFA_val = UnitGetType(lp_viking);

    if (auto55027BFA_val == "HeroOlaf") {

        SoundPlayForPlayer(SoundLink("OlafBase_Revive", c_soundIndexAny), lv_lVPlayer, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], 100.0, 0.0);

        TimerPause(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafDeathTimer, true);

    }

    else if (auto55027BFA_val == "HeroBaleog") {

        SoundPlayForPlayer(SoundLink("BaleogBase_Revive", c_soundIndexAny), lv_lVPlayer, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], 100.0, 0.0);

        TimerPause(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogDeathTimer, true);

    }

    else if (auto55027BFA_val == "HeroErik") {

        SoundPlayForPlayer(SoundLink("ErikBase_Resurrected", c_soundIndexAny), lv_lVPlayer, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], 100.0, 0.0);

        TimerPause(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikDeathTimer, true);

    }

    else {

    }

    libUIUI_gf_FullscreenOverlaysShowHideDeathOverlay(false, lv_lVPlayer);

    libGDHL_gf_LostVikingsUIStartStopRespawnTimerOverlay(lp_viking, lv_lVPlayer, true);

    lv_itViking = 1;

    for ( ; ( (auto45A57E28_ai >= 0 && lv_itViking <= auto45A57E28_ae) || (auto45A57E28_ai < 0 && lv_itViking >= auto45A57E28_ae) ) ; lv_itViking += auto45A57E28_ai ) {

        if ((libUIUI_gv_uIHeroTrackerArrows.lv_unit[lv_itViking] == lp_viking)) {

            libNtve_gf_SetDialogItemImage(libUIUI_gv_uIHeroTrackerArrows.lv_portraitImage[lv_itViking], (CatalogFieldValueGet(c_gameCatalogActor, UnitGetType(lp_viking), "HeroIcon", lv_lVPlayer)), libCore_gv_playerGroupFromPlayer[lv_lVPlayer]);

            break;

        }



    }

    libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Add, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

    libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

}



trigger auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_Trigger = null;

unit auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_lp_downedViking;

int auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_lp_killingPlayer;



void libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements (unit lp_downedViking, int lp_killingPlayer) {

    auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_lp_downedViking = lp_downedViking;

    auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_lp_killingPlayer = lp_killingPlayer;



    if (auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_Trigger == null) {

        auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_Trigger = TriggerCreate("auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_TriggerFunc");

    }



    TriggerExecute(auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_Trigger, false, false);

}



bool auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_TriggerFunc (bool testConds, bool runActions) {

    unit lp_downedViking = auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_lp_downedViking;

    int lp_killingPlayer = auto_libGDHL_gf_VikingDownUpdateStatsAwardXPMakeAnnouncements_lp_killingPlayer;



    // Variable Declarations

    int lv_itPlayer;

    int lv_itTeamPlayer;

    int lv_computerTeam;

    int lv_deadPlayer;

    int lv_deadPlayerTeam;

    playergroup lv_killingTeamGroup;

    playergroup lv_awardGroup;

    playergroup lv_deadPlayerTeamGroup;

    playergroup lv_deadPlayerTeamGroupMinusDeadPlayer;

    playergroup lv_killingGroup;

    fixed lv_xPGranted;

    int lv_killingFaction;



    // Automatic Variable Declarations

    playergroup autoBFFA6DE7_g;



    // Variable Initialization

    lv_killingTeamGroup = PlayerGroupEmpty();

    lv_awardGroup = PlayerGroupEmpty();

    lv_deadPlayerTeamGroup = PlayerGroupEmpty();

    lv_deadPlayerTeamGroupMinusDeadPlayer = PlayerGroupEmpty();

    lv_killingGroup = PlayerGroupEmpty();



    // Implementation

    if ((libGame_gv_heroDeath_UpdateStats == false)) {

        return true;

    }



    lv_deadPlayer = UnitGetOwner(lp_downedViking);

    lv_deadPlayerTeam = libGame_gf_TeamNumberOfPlayer(lv_deadPlayer);

    UIAlert("YourHeroHasDied", lv_deadPlayer, StringToText(""), null);

    lv_deadPlayerTeamGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_deadPlayer);

    lv_killingTeamGroup = libGame_gf_EnemyPlayerGroupOfPlayer(lv_deadPlayer);

    lv_computerTeam = libGame_gv_teams[libGame_gf_EnemyTeamNumberOfPlayer(lv_deadPlayer)].lv_nPCPlayer;

    if ((lv_deadPlayerTeam == libGame_gv_teamOrderIndex_C)) {

        lv_killingFaction = libGame_ge_Faction_Chaos;

    }

    else {

        lv_killingFaction = libGame_ge_Faction_Order;

    }

    lv_deadPlayerTeamGroupMinusDeadPlayer = PlayerGroupCopy(lv_deadPlayerTeamGroup);

    PlayerGroupRemove(lv_deadPlayerTeamGroupMinusDeadPlayer, lv_deadPlayer);

    autoBFFA6DE7_g = lv_killingTeamGroup;

    lv_itPlayer = -1;

    while (true) {

        	lv_itPlayer = PlayerGroupNextPlayer(autoBFFA6DE7_g, lv_itPlayer);

        	if (lv_itPlayer<0) { break; }

        	if ((lv_itPlayer != libCore_gv_cOMPUTER_TeamOrder) && (lv_itPlayer != libCore_gv_cOMPUTER_TeamChaos)) {

            PlayerGroupAdd(lv_awardGroup, lv_itPlayer);

            if (((lv_itPlayer == lp_killingPlayer) || ((GameGetMissionTime() - libGame_gv_players[lv_deadPlayer].lv_lastTimeHeroWasWithinXPRadius[lv_itPlayer]) <= libCore_gv_bALHeroKillCreditTimeWindow) || (libGame_gv_players[lv_deadPlayer].lv_recentPlayerDamageReceived[lv_itPlayer] > 0.0))) {

                PlayerGroupAdd(lv_killingGroup, lv_itPlayer);

            }



        }



    }

    libGame_gf_HeroDeathAwardXP(lp_killingPlayer, lp_downedViking, lv_awardGroup, lv_killingGroup, true);

    libGame_gf_HeroDeathUpdatePlayerStats(lp_downedViking, lp_killingPlayer, lv_killingTeamGroup, lv_killingGroup);

    libGame_gf_HeroDeathDeadTeamAnnouncements(lp_downedViking, lv_deadPlayerTeamGroup, lv_killingFaction);

    libGame_gv_players[lv_deadPlayer].lv_killingSpreeCount = 0;

    libGame_gf_ScoreValuesReportIntegerValueAndLog(lv_deadPlayer, "KillStreak", libGame_gv_players[lv_deadPlayer].lv_killingSpreeCount);

    return true;

}



void libGDHL_gf_HeroLostVikingsPlayAgainTeleportViking (unit lp_vikingToTeleport, point lp_locationToTeleportToo) {

    // Automatic Variable Declarations

    // Implementation

    if ((UnitIsAlive(lp_vikingToTeleport) == true)) {

        UnitCreateEffectPointWithSource(lp_vikingToTeleport, "LostVikingsPlayAgainTeleport", PointWithOffsetPolar(lp_locationToTeleportToo, 0.0, 0.0), c_gameCatalogAbil, "LostVikingsPlayAgain");

    }

    else {

        Wait(0.125, c_timeGame);

        UnitCreateEffectPointWithSource(lp_vikingToTeleport, "LostVikingsPlayAgainTeleport", PointWithOffsetPolar(lp_locationToTeleportToo, 0.0, 0.0), c_gameCatalogAbil, "LostVikingsPlayAgain");

    }

}



void libGDHL_gf_LostVikingsHeroConsoleUnitStatusBarsSetUnitForBars (int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafCastChannelBarFrame, libGDHL_gv_lostVikingsPlayer[lp_player].lv_olaf, libCore_gv_playerGroupFromPlayer[lp_player]);

    DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafCastChannelBarFrame, libCore_gv_playerGroupFromPlayer[lp_player], true);

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_lostVikingsUI.lv_lostVikingsErikCastChannelBarFrame, libGDHL_gv_lostVikingsPlayer[lp_player].lv_erik, libCore_gv_playerGroupFromPlayer[lp_player]);

    DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostVikingsErikCastChannelBarFrame, libCore_gv_playerGroupFromPlayer[lp_player], true);

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogCastChannelBarFrame, libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleog, libCore_gv_playerGroupFromPlayer[lp_player]);

    DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogCastChannelBarFrame, libCore_gv_playerGroupFromPlayer[lp_player], true);

}



void libGDHL_gf_LostVikingsUISetupUIForPlayer (int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    while (!((libNtve_gf_PlayerInCinematicMode(lp_player) == false))) {

        Wait(0.125, c_timeGame);

    }

    UISetFrameVisible(libCore_gv_playerGroupFromPlayer[lp_player], c_syncFrameTypeControlGroupPanel, true);

    DialogControlSetVisible(libUIUI_gv_uIHeroConsole.lv_heroStatsFrame, libCore_gv_playerGroupFromPlayer[lp_player], false);

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_lostVikingsUI.lv_erikUnitStatusFrame, libGDHL_gv_lostVikingsPlayer[lp_player].lv_erik, libCore_gv_playerGroupFromPlayer[lp_player]);

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_lostVikingsUI.lv_baleogUnitStatusFrame, libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleog, libCore_gv_playerGroupFromPlayer[lp_player]);

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_lostVikingsUI.lv_olafUnitStatusFrame, libGDHL_gv_lostVikingsPlayer[lp_player].lv_olaf, libCore_gv_playerGroupFromPlayer[lp_player]);

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarFrame, libGDHL_gv_lostVikingsPlayer[lp_player].lv_erik, libCore_gv_playerGroupFromPlayer[lp_player]);

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarFrame, libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleog, libCore_gv_playerGroupFromPlayer[lp_player]);

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarFrame, libGDHL_gv_lostVikingsPlayer[lp_player].lv_olaf, libCore_gv_playerGroupFromPlayer[lp_player]);

    DialogControlHookupUnitStatus(c_triggerControlTypeImage, "HeroUnitStatusParentFrame/BackgroundSideGlowOwner/MultiBackground", libGDHL_gv_lostVikingsPlayer[lp_player].lv_erik);

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikSelectionIndicator = DialogControlLastCreated();

    DialogControlHookupUnitStatus(c_triggerControlTypeImage, "HeroUnitStatusParentFrame/BackgroundSideGlowOwner/MultiBackground", libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleog);

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogSelectionIndicator = DialogControlLastCreated();

    DialogControlHookupUnitStatus(c_triggerControlTypeImage, "HeroUnitStatusParentFrame/BackgroundSideGlowOwner/MultiBackground", libGDHL_gv_lostVikingsPlayer[lp_player].lv_olaf);

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafSelectionIndicator = DialogControlLastCreated();

    DialogControlHookupUnitStatus(c_triggerControlTypeImage, "HeroUnitStatusParentFrame/VikingIdentityFrame/SelectionStatusIcon", libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleog);

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogIdentityImage = DialogControlLastCreated();

    DialogControlHookupUnitStatus(c_triggerControlTypeImage, "HeroUnitStatusParentFrame/VikingIdentityFrame/SelectionStatusIcon", libGDHL_gv_lostVikingsPlayer[lp_player].lv_erik);

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikIdentityImage = DialogControlLastCreated();

    DialogControlHookupUnitStatus(c_triggerControlTypeImage, "HeroUnitStatusParentFrame/VikingIdentityFrame/SelectionStatusIcon", libGDHL_gv_lostVikingsPlayer[lp_player].lv_olaf);

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafIdentityImage = DialogControlLastCreated();

    DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_heroStatsFrame, libCore_gv_playerGroupFromPlayer[lp_player], true);

    DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostVikingsIconFrame, libCore_gv_playerGroupFromPlayer[lp_player], true);

    DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostVikingsChannelFrame, libCore_gv_playerGroupFromPlayer[lp_player], true);

}



void libGDHL_gf_LostVikingsUIUnSetupUIForPlayer (int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    UISetFrameVisible(libCore_gv_playerGroupFromPlayer[lp_player], c_syncFrameTypeControlGroupPanel, false);

    DialogControlSetVisible(libUIUI_gv_uIHeroConsole.lv_heroStatsFrame, libCore_gv_playerGroupFromPlayer[lp_player], true);

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikSelectionIndicator = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogSelectionIndicator = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafSelectionIndicator = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikIdentityImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogIdentityImage = c_invalidDialogControlId;

    libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafIdentityImage = c_invalidDialogControlId;

    DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_heroStatsFrame, libCore_gv_playerGroupFromPlayer[lp_player], false);

    DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostVikingsIconFrame, libCore_gv_playerGroupFromPlayer[lp_player], false);

    DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostVikingsChannelFrame, libCore_gv_playerGroupFromPlayer[lp_player], false);

}



void libGDHL_gf_LostVikingsUIUpdateUIStateForSingleViking (int lp_player, unit lp_viking, int lp_state) {

    // Variable Declarations

    string lv_vikingUnitType;

    string lv_heroConsoleFontStyle;

    bool lv_downedLabelVisible;

    text lv_downedLabelText;

    bool lv_hPLabelVisible;

    bool lv_deadBoolean;

    color lv_overheadSelectionStatusColor;

    fixed lv_respawnTimer;

    fixed lv_animationSpeed;



    // Automatic Variable Declarations

    int auto738A04F1_val;

    string auto1B1D9AB8_val;



    // Variable Initialization

    lv_downedLabelVisible = true;

    lv_hPLabelVisible = true;

    lv_overheadSelectionStatusColor = Color(0,0,0);



    // Implementation

    lv_vikingUnitType = UnitGetType(lp_viking);

    lv_downedLabelText = StringExternal("Param/Value/lib_GDHL_EE23203C");

    auto738A04F1_val = lp_state;

    if (auto738A04F1_val == libGDHL_ge_LostVikingsUIState_None) {

        lv_heroConsoleFontStyle = "Storm_VitalsLabel_R_Small";

        lv_downedLabelVisible = false;

        lv_hPLabelVisible = true;

        lv_overheadSelectionStatusColor = Color(33.33, 32.55, 78.43);

        lv_deadBoolean = false;

    }

    else if (auto738A04F1_val == libGDHL_ge_LostVikingsUIState_Downed) {

        lv_heroConsoleFontStyle = "Storm_VitalsLabel_R_Small_Downed";

        lv_downedLabelVisible = true;

        lv_hPLabelVisible = false;

        lv_overheadSelectionStatusColor = Color(33.33, 32.55, 78.43);

        lv_deadBoolean = true;

    }

    else if (auto738A04F1_val == libGDHL_ge_LostVikingsUIState_Selected) {

        lv_heroConsoleFontStyle = "Storm_VitalsLabel_R_Small_Selected";

        lv_downedLabelVisible = false;

        lv_hPLabelVisible = true;

        lv_overheadSelectionStatusColor = Color(100.00, 100.00, 100.00);

        lv_deadBoolean = false;

    }

    else {

    }

    auto1B1D9AB8_val = lv_vikingUnitType;

    if (auto1B1D9AB8_val == "HeroErik") {

        libNtve_gf_SetDialogItemStyle(libGDHL_gv_lostVikingsUI.lv_erikHPLabel, lv_heroConsoleFontStyle, libCore_gv_playerGroupFromPlayer[lp_player]);

        libNtve_gf_SetDialogItemStyle(libGDHL_gv_lostVikingsUI.lv_erikNameLabel, lv_heroConsoleFontStyle, libCore_gv_playerGroupFromPlayer[lp_player]);

        TextExpressionSetToken("Param/Expression/lib_GDHL_A73772DD", "A", lv_downedLabelText);

        TextExpressionSetToken("Param/Expression/lib_GDHL_A73772DD", "B", FixedToText(TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikDeathTimer), 0));

        libNtve_gf_SetDialogItemText(libGDHL_gv_lostVikingsUI.lv_erikDownedLabel, TextExpressionAssemble("Param/Expression/lib_GDHL_A73772DD"), libCore_gv_playerGroupFromPlayer[lp_player]);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_erikDownedLabel, libCore_gv_playerGroupFromPlayer[lp_player], lv_downedLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_erikDeadImage, libCore_gv_playerGroupFromPlayer[lp_player], lv_downedLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_erikUnselectedIconImage, libCore_gv_playerGroupFromPlayer[lp_player], lv_hPLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_erikHPLabel, libCore_gv_playerGroupFromPlayer[lp_player], lv_hPLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_erikUnitStatusFrame, libCore_gv_playerGroupFromPlayer[lp_player], lv_hPLabelVisible);

        if ((libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikSelectionIndicator != c_invalidDialogControlId)) {

            libNtve_gf_SetDialogItemColor(libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikSelectionIndicator, lv_overheadSelectionStatusColor, libCore_gv_playerGroupFromPlayer[lp_player]);

        }



        if ((libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikIdentityImage != c_invalidDialogControlId)) {

            if ((lp_state == libGDHL_ge_LostVikingsUIState_Selected)) {

                libNtve_gf_SetDialogItemImage(libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikIdentityImage, "@UI/VikingsErikIconSelected", libCore_gv_playerGroupFromPlayer[lp_player]);

                DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_erikSelectedIconImage, libCore_gv_playerGroupFromPlayer[lp_player], true);

                DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_erikDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lp_player], "UnitRevivedPingPongStop");

            }

            else {

                libNtve_gf_SetDialogItemImage(libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikIdentityImage, "@UI/VikingsErikIconDeselected", libCore_gv_playerGroupFromPlayer[lp_player]);

                DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_erikSelectedIconImage, libCore_gv_playerGroupFromPlayer[lp_player], false);

            }

        }



    }

    else if (auto1B1D9AB8_val == "HeroBaleog") {

        libNtve_gf_SetDialogItemStyle(libGDHL_gv_lostVikingsUI.lv_baleogHPLabel, lv_heroConsoleFontStyle, libCore_gv_playerGroupFromPlayer[lp_player]);

        libNtve_gf_SetDialogItemStyle(libGDHL_gv_lostVikingsUI.lv_baleogNameLabel, lv_heroConsoleFontStyle, libCore_gv_playerGroupFromPlayer[lp_player]);

        TextExpressionSetToken("Param/Expression/lib_GDHL_5D760E1B", "A", lv_downedLabelText);

        TextExpressionSetToken("Param/Expression/lib_GDHL_5D760E1B", "B", FixedToText(TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogDeathTimer), 0));

        libNtve_gf_SetDialogItemText(libGDHL_gv_lostVikingsUI.lv_baleogDownedLabel, TextExpressionAssemble("Param/Expression/lib_GDHL_5D760E1B"), libCore_gv_playerGroupFromPlayer[lp_player]);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_baleogDownedLabel, libCore_gv_playerGroupFromPlayer[lp_player], lv_downedLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_baleogDeadImage, libCore_gv_playerGroupFromPlayer[lp_player], lv_downedLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_baleogUnselectedIconImage, libCore_gv_playerGroupFromPlayer[lp_player], lv_hPLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_baleogHPLabel, libCore_gv_playerGroupFromPlayer[lp_player], lv_hPLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_baleogUnitStatusFrame, libCore_gv_playerGroupFromPlayer[lp_player], lv_hPLabelVisible);

        if ((libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogSelectionIndicator != c_invalidDialogControlId)) {

            libNtve_gf_SetDialogItemColor(libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogSelectionIndicator, lv_overheadSelectionStatusColor, libCore_gv_playerGroupFromPlayer[lp_player]);

        }



        if ((libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogIdentityImage != c_invalidDialogControlId)) {

            if ((lp_state == libGDHL_ge_LostVikingsUIState_Selected)) {

                libNtve_gf_SetDialogItemImage(libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogIdentityImage, "@UI/VikingsBaleogIconSelected", libCore_gv_playerGroupFromPlayer[lp_player]);

                DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_baleogSelectedIconImage, libCore_gv_playerGroupFromPlayer[lp_player], true);

                DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_baleogDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lp_player], "UnitRevivedPingPongStop");

            }

            else {

                libNtve_gf_SetDialogItemImage(libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogIdentityImage, "@UI/VikingsBaleogIconDeselected", libCore_gv_playerGroupFromPlayer[lp_player]);

                DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_baleogSelectedIconImage, libCore_gv_playerGroupFromPlayer[lp_player], false);

            }

        }



    }

    else if (auto1B1D9AB8_val == "HeroOlaf") {

        libNtve_gf_SetDialogItemStyle(libGDHL_gv_lostVikingsUI.lv_olafHPLabel, lv_heroConsoleFontStyle, libCore_gv_playerGroupFromPlayer[lp_player]);

        libNtve_gf_SetDialogItemStyle(libGDHL_gv_lostVikingsUI.lv_olafNameLabel, lv_heroConsoleFontStyle, libCore_gv_playerGroupFromPlayer[lp_player]);

        TextExpressionSetToken("Param/Expression/lib_GDHL_823C7595", "A", lv_downedLabelText);

        TextExpressionSetToken("Param/Expression/lib_GDHL_823C7595", "B", FixedToText(TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafDeathTimer), 0));

        libNtve_gf_SetDialogItemText(libGDHL_gv_lostVikingsUI.lv_olafDownedLabel, TextExpressionAssemble("Param/Expression/lib_GDHL_823C7595"), libCore_gv_playerGroupFromPlayer[lp_player]);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_olafDownedLabel, libCore_gv_playerGroupFromPlayer[lp_player], lv_downedLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_olafDeadImage, libCore_gv_playerGroupFromPlayer[lp_player], lv_downedLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_olafUnselectedIconImage, libCore_gv_playerGroupFromPlayer[lp_player], lv_hPLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_olafHPLabel, libCore_gv_playerGroupFromPlayer[lp_player], lv_hPLabelVisible);

        DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_olafUnitStatusFrame, libCore_gv_playerGroupFromPlayer[lp_player], lv_hPLabelVisible);

        if ((libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafSelectionIndicator != c_invalidDialogControlId)) {

            libNtve_gf_SetDialogItemColor(libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafSelectionIndicator, lv_overheadSelectionStatusColor, libCore_gv_playerGroupFromPlayer[lp_player]);

        }



        if ((libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafIdentityImage != c_invalidDialogControlId)) {

            if ((lp_state == libGDHL_ge_LostVikingsUIState_Selected)) {

                libNtve_gf_SetDialogItemImage(libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafIdentityImage, "@UI/VikingsOlafIconSelected", libCore_gv_playerGroupFromPlayer[lp_player]);

                DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_olafSelectedIconImage, libCore_gv_playerGroupFromPlayer[lp_player], true);

                DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_olafDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lp_player], "UnitRevivedPingPongStop");

            }

            else {

                libNtve_gf_SetDialogItemImage(libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafIdentityImage, "@UI/VikingsOlafIconDeselected", libCore_gv_playerGroupFromPlayer[lp_player]);

                DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_olafSelectedIconImage, libCore_gv_playerGroupFromPlayer[lp_player], false);

            }

        }



    }

    else {

    }

}



void libGDHL_gf_LostVikingsUIUpdateAllSelectionDownedStatusForPlayer (int lp_player) {

    // Variable Declarations

    unit lv_itUnit;

    unitgroup lv_selectedUnits;

    int lv_vikingUIState;



    // Automatic Variable Declarations

    unitgroup autoC650A904_g;

    int autoC650A904_u;



    // Variable Initialization

    lv_selectedUnits = UnitGroupEmpty();



    // Implementation

    lv_selectedUnits = UnitGroupSelected(lp_player);

    autoC650A904_g = libGame_gv_players[lp_player].lv_heroUnitGroup;

    autoC650A904_u = UnitGroupCount(autoC650A904_g, c_unitCountAll);

    for (;; autoC650A904_u -= 1) {

        lv_itUnit = UnitGroupUnitFromEnd(autoC650A904_g, autoC650A904_u);

        if (lv_itUnit == null) { break; }

        lv_vikingUIState = libGDHL_ge_LostVikingsUIState_None;

        if ((libNtve_gf_UnitGroupIsDead(libNtve_gf_ConvertUnitToUnitGroup(lv_itUnit)) == true)) {

            lv_vikingUIState = libGDHL_ge_LostVikingsUIState_Downed;

        }

        else {

            if ((UnitGroupHasUnit(lv_selectedUnits, lv_itUnit) == true)) {

                lv_vikingUIState = libGDHL_ge_LostVikingsUIState_Selected;

            }



        }

        libGDHL_gf_LostVikingsUIUpdateUIStateForSingleViking(lp_player, lv_itUnit, lv_vikingUIState);

    }

}



void libGDHL_gf_LostVikingsUIStartStopRespawnTimerOverlay (unit lp_unit, int lp_player, bool lp_alive) {

    // Variable Declarations

    fixed lv_player;

    fixed lv_respawnTimer;

    fixed lv_animationSpeed;

    int lv_dialogItem;



    // Automatic Variable Declarations

    bool auto43390044_val;

    string auto76A929F1_val;

    string autoE2170B31_val;



    // Variable Initialization

    lv_dialogItem = c_invalidDialogControlId;



    // Implementation

    auto43390044_val = lp_alive;

    if (auto43390044_val == true) {

        auto76A929F1_val = UnitGetType(lp_unit);

        if (auto76A929F1_val == "HeroErik") {

            DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostErikDeadImageOverlay, libCore_gv_playerGroupFromPlayer[lp_player], false);

        }

        else if (auto76A929F1_val == "HeroBaleog") {

            DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostBaleogDeadImageOverlay, libCore_gv_playerGroupFromPlayer[lp_player], false);

        }

        else if (auto76A929F1_val == "HeroOlaf") {

            DialogControlSetVisible(libGDHL_gv_lostVikingsUI.lv_lostOlafDeadImageOverlay, libCore_gv_playerGroupFromPlayer[lp_player], false);

        }

        else {

        }

    }

    else if (auto43390044_val == false) {

        autoE2170B31_val = UnitGetType(lp_unit);

        if (autoE2170B31_val == "HeroErik") {

            lv_dialogItem = libGDHL_gv_lostVikingsUI.lv_lostErikDeadImageOverlay;

            lv_respawnTimer = TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_player].lv_erikDeathTimer);

        }

        else if (autoE2170B31_val == "HeroBaleog") {

            lv_dialogItem = libGDHL_gv_lostVikingsUI.lv_lostBaleogDeadImageOverlay;

            lv_respawnTimer = TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_player].lv_baleogDeathTimer);

        }

        else if (autoE2170B31_val == "HeroOlaf") {

            lv_dialogItem = libGDHL_gv_lostVikingsUI.lv_lostOlafDeadImageOverlay;

            lv_respawnTimer = TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_player].lv_olafDeathTimer);

        }

        else {

        }

        DialogControlSetVisible(lv_dialogItem, libCore_gv_playerGroupFromPlayer[lp_player], true);

        DialogControlSendAnimationEvent(lv_dialogItem, libCore_gv_playerGroupFromPlayer[lp_player], "Start");

        if ((lv_respawnTimer > 0.0)) {

            lv_animationSpeed = (100/lv_respawnTimer);

            DialogControlSetAnimationSpeed(lv_dialogItem, libCore_gv_playerGroupFromPlayer[lp_player], "ShrinkOverlay", lv_animationSpeed);

        }



    }

    else {

    }

}



void libGDHL_gf_LostVikingsConsoleUnitStatusBarsSetChannelBehaviorForBehaviorChannelBar (int lp_player, string lp_behavior, unit lp_unit) {

    // Variable Declarations

    unit lv_heroUnit;

    int lv_behaviorBar;

    int lv_behaviorDuration;

    int lv_behaviorLabel;

    string lv_behavior;



    // Automatic Variable Declarations

    string auto18D83A0D_val;

    string auto6E46D1E8_val;



    // Variable Initialization

    lv_behaviorBar = c_invalidDialogControlId;

    lv_behaviorDuration = c_invalidDialogControlId;

    lv_behaviorLabel = c_invalidDialogControlId;



    // Implementation

    auto18D83A0D_val = UnitGetType(lp_unit);

    if (auto18D83A0D_val == "HeroOlaf") {

        lv_behaviorBar = libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarFrame;

        lv_behaviorLabel = libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarBehaviorLabel;

        lv_behaviorDuration = libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarDurationBar;

        lv_behavior = libGDHL_gv_lostVikingsUnitStatusBars_BehaviorChannelBarCurrentBehaviorForOlaf[lp_player];

    }

    else if (auto18D83A0D_val == "HeroBaleog") {

        lv_behaviorBar = libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarFrame;

        lv_behaviorLabel = libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarBehaviorLabel;

        lv_behaviorDuration = libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarDurationBar;

        lv_behavior = libGDHL_gv_lostVikingsUnitStatusBars_BehaviorChannelBarCurrentBehaviorForBaleog[lp_player];

    }

    else if (auto18D83A0D_val == "HeroErik") {

        lv_behaviorBar = libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarFrame;

        lv_behaviorLabel = libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarBehaviorLabel;

        lv_behaviorDuration = libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarDurationBar;

        lv_behavior = libGDHL_gv_lostVikingsUnitStatusBars_BehaviorChannelBarCurrentBehaviorForErik[lp_player];

    }

    else {

    }

    if ((UnitBehaviorDuration(lp_unit, lp_behavior) >= UnitBehaviorDuration(lp_unit, lv_behavior))) {

        auto6E46D1E8_val = UnitGetType(lp_unit);

        if (auto6E46D1E8_val == "HeroOlaf") {

            libGDHL_gv_lostVikingsUnitStatusBars_BehaviorChannelBarCurrentBehaviorForOlaf[lp_player] = lp_behavior;

        }

        else if (auto6E46D1E8_val == "HeroBaleog") {

            libGDHL_gv_lostVikingsUnitStatusBars_BehaviorChannelBarCurrentBehaviorForBaleog[lp_player] = lp_behavior;

        }

        else if (auto6E46D1E8_val == "HeroErik") {

            libGDHL_gv_lostVikingsUnitStatusBars_BehaviorChannelBarCurrentBehaviorForErik[lp_player] = lp_behavior;

        }

        else {

        }

        libNtve_gf_SetDialogItemBehavior(lv_behaviorDuration, lp_behavior, libCore_gv_playerGroupFromPlayer[lp_player]);

        libNtve_gf_SetDialogItemText(lv_behaviorLabel, StringExternal(CatalogFieldValueGet(c_gameCatalogBehavior, lp_behavior, "Name", c_playerAny)), libCore_gv_playerGroupFromPlayer[lp_player]);

    }



    DialogControlSetVisible(lv_behaviorBar, libCore_gv_playerGroupFromPlayer[lp_player], true);

}



void libGDHL_gf_LostVikingsUpdateObserverUI (int lp_dialogToUpdate, int lp_player, int lp_lostVikingPlayer) {

    // Variable Declarations

    fixed lv_currentHighestTimer;



    // Automatic Variable Declarations

    // Variable Initialization



    // Implementation

    if ((TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_lostVikingPlayer].lv_olafDeathTimer) > 0.0)) {

        lv_currentHighestTimer = TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_lostVikingPlayer].lv_olafDeathTimer);

    }



    if ((TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_lostVikingPlayer].lv_erikDeathTimer) > lv_currentHighestTimer)) {

        lv_currentHighestTimer = TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_lostVikingPlayer].lv_erikDeathTimer);

    }



    if ((TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_lostVikingPlayer].lv_baleogDeathTimer) > lv_currentHighestTimer)) {

        lv_currentHighestTimer = TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lp_lostVikingPlayer].lv_baleogDeathTimer);

    }



    libNtve_gf_SetDialogItemText(lp_dialogToUpdate, FixedToText(lv_currentHighestTimer, 0), libCore_gv_playerGroupFromPlayer[lp_player]);

}



void libGDHL_gf_HeroMalfurionIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMalfurionTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroMalfurionTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget, true);

        TriggerEnable(libGDHL_gt_HeroMalfurionTwilightDreamSilenceEnd, true);

        TriggerEnable(libGDHL_gt_HeroMalfurionInnervateCDR, true);

        TriggerEnable(libGDHL_gt_HeroMalfurionTenaciousRootsProc, true);

    }



}



void libGDHL_gf_HeroMalfurionDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMalfurionTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroMalfurionTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroMalfurionTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroMalfurionTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget, false);

        TriggerEnable(libGDHL_gt_HeroMalfurionTwilightDreamSilenceEnd, false);

        TriggerEnable(libGDHL_gt_HeroMalfurionInnervateCDR, false);

        TriggerEnable(libGDHL_gt_HeroMalfurionTenaciousRootsProc, false);

    }



}



void libGDHL_gf_HeroMedicIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMedicTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroMedicTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipEnRouteOrders, true);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipDeathCleanup, true);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipCreated, true);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipUnloadEvent, true);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipLoadEvent, true);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipOverlay, true);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipCountdownSound, true);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacBeingBoarded, true);

        TriggerEnable(libGDHL_gt_HeroMedicHealingBeamTargetActions, true);

        TriggerEnable(libGDHL_gt_HeroMedicHealingBeamUIReset, true);

        TriggerEnable(libGDHL_gt_HeroMedicHearthCleanup, true);

        TriggerEnable(libGDHL_gt_HeroMedicHealingBeamAllyRangeVisibility, true);

        TriggerEnable(libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc, true);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacGameOverHide, true);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipRejoinHideMedivacUI, true);

        TriggerEnable(libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOn, true);

        TriggerEnable(libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff, true);

    }



}



void libGDHL_gf_HeroMedicDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMedicTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroMedicTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroMedicTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroMedicTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipEnRouteOrders, false);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipDeathCleanup, false);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipCreated, false);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipUnloadEvent, false);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipLoadEvent, false);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipOverlay, false);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipCountdownSound, false);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacBeingBoarded, false);

        TriggerEnable(libGDHL_gt_HeroMedicHealingBeamTargetActions, false);

        TriggerEnable(libGDHL_gt_HeroMedicHealingBeamUIReset, false);

        TriggerEnable(libGDHL_gt_HeroMedicHearthCleanup, false);

        TriggerEnable(libGDHL_gt_HeroMedicHealingBeamAllyRangeVisibility, false);

        TriggerEnable(libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc, false);

        TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipRejoinHideMedivacUI, false);

        TriggerEnable(libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOn, false);

        TriggerEnable(libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff, false);

    }



}



string libGDHL_gf_HealingBeamGetPortraitPathforUnit (unit lp_unit) {

    // Automatic Variable Declarations

    string auto0CC21378_val;



    // Implementation

    auto0CC21378_val = UnitGetType(lp_unit);

    if (auto0CC21378_val == "HeroChenStorm") {

        return "Assets\\Textures\\storm_ui_ingame_targetinfopanel_unit_chen_storm.dds";

    }

    else if (auto0CC21378_val == "HeroChenEarth") {

        return "Assets\\Textures\\storm_ui_ingame_targetinfopanel_unit_chen_earth.dds";

    }

    else if (auto0CC21378_val == "HeroChenFire") {

        return "Assets\\Textures\\storm_ui_ingame_targetinfopanel_unit_chen_fire.dds";

    }

    else {

        return libUIUI_gf_KillLogGetPortraitPathforUnit(lp_unit);

    }

}



void libGDHL_gf_MedicUIHealingBeam (bool lp_reset, int lp_medicPlayer, unit lp_healingBeamTarget) {

    // Automatic Variable Declarations

    // Implementation

    if ((lp_reset == true)) {

        libNtve_gf_SetDialogItemImage(libGDHL_gv_healingBeamUI.lv_healingBeamTargetPortrait, "Assets\\Textures\\storm_ui_icon_medic_healingbeam.dds", PlayerGroupSingle(lp_medicPlayer));

        DialogControlSetVisible(libGDHL_gv_healingBeamUI.lv_healingBeamTargetDisplayName, PlayerGroupSingle(lp_medicPlayer), false);

    }

    else {

        DialogControlSetVisible(libGDHL_gv_healingBeamUI.lv_healingBeamTargetDisplayName, PlayerGroupSingle(lp_medicPlayer), true);

        libNtve_gf_SetDialogItemText(libGDHL_gv_healingBeamUI.lv_healingBeamTargetDisplayName, libGDHL_gf_MedicUIUnitDisplayName(lp_healingBeamTarget), PlayerGroupSingle(lp_medicPlayer));

        libNtve_gf_SetDialogItemImage(libGDHL_gv_healingBeamUI.lv_healingBeamTargetPortrait, libGDHL_gf_HealingBeamGetPortraitPathforUnit(lp_healingBeamTarget), PlayerGroupSingle(lp_medicPlayer));

    }

}



text libGDHL_gf_MedicUIUnitDisplayName (unit lp_unit) {

    // Variable Declarations

    int lv_unitOwner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unitOwner = UnitGetOwner(lp_unit);



    // Implementation

    if ((UnitGetType(lp_unit) == "HeroCho")) {

        return StringExternal("Param/Value/lib_GDHL_1F065CDD");

    }

    else {

        return UnitGetName(lp_unit);

    }

}



trigger auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_Trigger = null;

bool auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_lp_showHide;

int auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_lp_player;



void libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI (bool lp_showHide, int lp_player) {

    auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_lp_showHide = lp_showHide;

    auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_lp_player = lp_player;



    if (auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_Trigger == null) {

        auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_Trigger = TriggerCreate("auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_TriggerFunc");

    }



    TriggerExecute(auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_Trigger, false, false);

}



bool auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_TriggerFunc (bool testConds, bool runActions) {

    bool lp_showHide = auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_lp_showHide;

    int lp_player = auto_libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI_lp_player;



    // Automatic Variable Declarations

    // Implementation

    if ((lp_showHide == true)) {

        DialogControlSendAnimationEvent(libGDHL_gv_medicUI.lv_medivacAlert, libCore_gv_playerGroupFromPlayer[lp_player], "Begin");

    }

    else {

        DialogControlSendAnimationEvent(libGDHL_gv_medicUI.lv_medivacAlert, libCore_gv_playerGroupFromPlayer[lp_player], "End");

        Wait(0.5, c_timeGame);

        DialogControlSendAnimationEvent(libGDHL_gv_medicUI.lv_medivacAlert, libCore_gv_playerGroupFromPlayer[lp_player], "End");

    }

    return true;

}



void libGDHL_gf_HeroMonkIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMonkTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroMonkTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroMonkDivinePalmSetLife, true);

        TriggerEnable(libGDHL_gt_HeroMonkDivinePalmOverlayOn, true);

        TriggerEnable(libGDHL_gt_HeroMonkDivinePalmOverlayOff, true);

        TriggerEnable(libGDHL_gt_HeroMonkSevenSidedStrikeTakeFacing, true);

        TriggerEnable(libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing, true);

        TriggerEnable(libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOn, true);

        TriggerEnable(libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOff, true);

    }



}



void libGDHL_gf_HeroMonkDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMonkTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroMonkTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroMonkTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroMonkTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroMonkDivinePalmSetLife, false);

        TriggerEnable(libGDHL_gt_HeroMonkDivinePalmOverlayOn, false);

        TriggerEnable(libGDHL_gt_HeroMonkDivinePalmOverlayOff, false);

        TriggerEnable(libGDHL_gt_HeroMonkSevenSidedStrikeTakeFacing, false);

        TriggerEnable(libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing, false);

        TriggerEnable(libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOn, false);

        TriggerEnable(libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOff, false);

    }



}



void libGDHL_gf_HeroMuradinIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMuradinTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroMuradinTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroMuradinHaymaker, true);

        TriggerEnable(libGDHL_gt_HeroMuradinItsHammerTimeOnDeathProc, true);

        TriggerEnable(libGDHL_gt_HeroMuradinAvatarApplyHealthBuff, true);

        TriggerEnable(libGDHL_gt_HeroMuradinHaymakerGrandSlamTalentProc, true);

        TriggerEnable(libGDHL_gt_HeroMuradinFreePiercingStormbolt, true);

        TriggerEnable(libGDHL_gt_HeroMuradinResetFreePiercingStormbolt, true);

    }



}



void libGDHL_gf_HeroMuradinDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMuradinTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroMuradinTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroMuradinTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroMuradinTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroMuradinHaymaker, false);

        TriggerEnable(libGDHL_gt_HeroMuradinItsHammerTimeOnDeathProc, false);

        TriggerEnable(libGDHL_gt_HeroMuradinAvatarApplyHealthBuff, false);

        TriggerEnable(libGDHL_gt_HeroMuradinHaymakerGrandSlamTalentProc, false);

        TriggerEnable(libGDHL_gt_HeroMuradinFreePiercingStormbolt, false);

        TriggerEnable(libGDHL_gt_HeroMuradinResetFreePiercingStormbolt, false);

    }



}



void libGDHL_gf_HeroMurkyIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMurkyTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroMurkyTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroMurkyMurkyEggDies, true);

        TriggerEnable(libGDHL_gt_HeroMurkyMurkyDies, true);

        TriggerEnable(libGDHL_gt_HeroMurkyReviveWhileEggIsAlive, true);

        TriggerEnable(libGDHL_gt_HeroMurkyCreateEggOnSpawn, true);

        TriggerEnable(libGDHL_gt_HeroMurkyFishEyeDynamicApplication, true);

        TriggerEnable(libGDHL_gt_HeroMurkyRespawnEggCreated, true);

        TriggerEnable(libGDHL_gt_HeroMurkyAFishyDealChargeCountProc, true);

        TriggerEnable(libGDHL_gt_HeroMurkyEggSpawnsChangeDeathSound, true);

    }



}



void libGDHL_gf_HeroMurkyDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroMurkyTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroMurkyTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroMurkyTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroMurkyTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroMurkyMurkyEggDies, false);

        TriggerEnable(libGDHL_gt_HeroMurkyMurkyDies, false);

        TriggerEnable(libGDHL_gt_HeroMurkyReviveWhileEggIsAlive, false);

        TriggerEnable(libGDHL_gt_HeroMurkyCreateEggOnSpawn, false);

        TriggerEnable(libGDHL_gt_HeroMurkyFishEyeDynamicApplication, false);

        TriggerEnable(libGDHL_gt_HeroMurkyRespawnEggCreated, false);

        TriggerEnable(libGDHL_gt_HeroMurkyAFishyDealChargeCountProc, false);

        TriggerEnable(libGDHL_gt_HeroMurkyEggSpawnsChangeDeathSound, false);

    }



}



void libGDHL_gf_UIHeroSpecificStatusFrameUpdateMurkyEggStatus (int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    DialogControlSetVisible(libGDHL_gv_murkyUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[lp_player], true);

    if ((libGame_gv_heroDeathMurkyRespawnEggs[lp_player] != null)) {

        DialogControlSetVisible(libGDHL_gv_murkyUI.lv_eggOk, libCore_gv_playerGroupFromPlayer[lp_player], true);

        DialogControlSetVisible(libGDHL_gv_murkyUI.lv_eggBroken, libCore_gv_playerGroupFromPlayer[lp_player], false);

    }

    else {

        DialogControlSetVisible(libGDHL_gv_murkyUI.lv_eggBroken, libCore_gv_playerGroupFromPlayer[lp_player], true);

        DialogControlSetVisible(libGDHL_gv_murkyUI.lv_eggOk, libCore_gv_playerGroupFromPlayer[lp_player], false);

    }

}



void libGDHL_gf_HeroMurkyCreateEggAtBaseforPlayer (int lp_player) {

    // Variable Declarations

    unit lv_murkyEgg;



    // Automatic Variable Declarations

    // Variable Initialization



    // Implementation

    if ((libGame_gv_teams[libGame_gf_TeamNumberOfPlayer(lp_player)].lv_core != null)) {

        UnitCreate(1, "MurkyRespawnEgg", 0, lp_player, libNtve_gf_PointOffsetTowardsPoint(libGame_gv_players[lp_player].lv_spawnPoint, -1.5, UnitGetPosition(libGame_gv_teams[libGame_gf_TeamNumberOfPlayer(lp_player)].lv_core)), 270.0, null);

    }

    else {

        UnitCreate(1, "MurkyRespawnEgg", 0, lp_player, libGame_gv_players[lp_player].lv_spawnPoint, 270.0, null);

    }

    lv_murkyEgg = UnitLastCreated();

    UnitCreateEffectUnit(libGame_gv_players[lp_player].lv_heroUnit, "MurkySpawnEggApplyFishEyeTalentHealthBuff", lv_murkyEgg);

    libGame_gv_heroDeathMurkyRespawnEggs[lp_player] = lv_murkyEgg;

    libGame_gv_heroDeathMurkyRespawnEggPoint[lp_player] = UnitGetPosition(lv_murkyEgg);

    libGDHL_gf_UIHeroSpecificStatusFrameUpdateMurkyEggStatus(lp_player);

}



void libGDHL_gf_HeroMurkyRespawnLogicCheck (int lp_player) {

    // Variable Declarations

    int lv_randomEgg;

    unit lv_murky;



    // Automatic Variable Declarations

    // Variable Initialization



    // Implementation

    lv_murky = libGame_gv_players[lp_player].lv_heroUnit;

    if ((((libGame_gv_heroDeathMurkyRespawnEggDeathTimeStamp[lp_player] >= (TimerGetElapsed(libGame_gv_gameTimer) - 0.0625)) && (libGame_gv_heroDeathMurkyRespawnEggDeathTimeStamp[lp_player] <= (TimerGetElapsed(libGame_gv_gameTimer) + 0.0625))) || (((libGame_gv_heroDeathMurkyRespawnEggs[lp_player] != null) || (libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lp_player] != null)) && ((UnitIsAlive(libGame_gv_heroDeathMurkyRespawnEggs[lp_player]) == true) || (UnitIsAlive(libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lp_player]) == true))))) {

        UnitBehaviorRemove(lv_murky, "HallOfStormsProtectionBuff", 1);

        lv_randomEgg = RandomInt(1, 2);

        if ((libGame_gv_heroDeathMurkyRespawnEggs[lp_player] == null)) {

            libGame_gv_heroDeathMurkyRespawnEggPoint[lp_player] = UnitGetPosition(libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lp_player]);

        }

        else {

            if ((libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lp_player] == null)) {

                libGame_gv_heroDeathMurkyRespawnEggPoint[lp_player] = UnitGetPosition(libGame_gv_heroDeathMurkyRespawnEggs[lp_player]);

            }

            else {

                if ((lv_randomEgg == 1)) {

                    libGame_gv_heroDeathMurkyRespawnEggPoint[lp_player] = UnitGetPosition(libGame_gv_heroDeathMurkyRespawnEggs[lp_player]);

                }

                else {

                    libGame_gv_heroDeathMurkyRespawnEggPoint[lp_player] = UnitGetPosition(libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lp_player]);

                }

            }

        }

        UnitSetPosition(lv_murky, libGame_gv_heroDeathMurkyRespawnEggPoint[lp_player], false);

        UnitCreateEffectUnit(lv_murky, "MurkyReviveShieldApplyShieldBuff", lv_murky);

        if ((PlayerHasTalent(lp_player, "MurkyFishEye") == true)) {

            UnitCreateEffectUnit(lv_murky, "MurkyFishEyeApplyMountSpeedBuff", lv_murky);

        }



    }

    else {

        if ((libGame_gv_heroDeathMurkyRespawnEggs[lp_player] == null) && (libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lp_player] == null)) {

            libGDHL_gf_HeroMurkyCreateEggAtBaseforPlayer(lp_player);

        }



    }

    UnitModifyCooldown(lv_murky, "Abil/MurkyRespawnEgg", -60.0, c_cooldownOperationAdd);

}



void libGDHL_gf_HeroNecromancerIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroNecromancerTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroNecromancerTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroNecromancerSkeletonMasteryProc, true);

        TriggerEnable(libGDHL_gt_HeroNecromancerSkeletonMasterySpawned, true);

        TriggerEnable(libGDHL_gt_HeroNecromancerSkeletonMasteryMaxCountProc, true);

        TriggerEnable(libGDHL_gt_HeroNecromancerTrackMortalWoundsDamageReduction, true);

        TriggerEnable(libGDHL_gt_HeroNecromancerMortalWoundsDebuffController, true);

    }



}



void libGDHL_gf_HeroNecromancerDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroNecromancerTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroNecromancerTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroNecromancerTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroNecromancerTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroNecromancerSkeletonMasteryProc, false);

        TriggerEnable(libGDHL_gt_HeroNecromancerSkeletonMasterySpawned, false);

        TriggerEnable(libGDHL_gt_HeroNecromancerSkeletonMasteryMaxCountProc, false);

        TriggerEnable(libGDHL_gt_HeroNecromancerTrackMortalWoundsDamageReduction, false);

        TriggerEnable(libGDHL_gt_HeroNecromancerMortalWoundsDebuffController, false);

    }



}



void libGDHL_gf_HeroNovaIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroNovaTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroNovaTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroNovaCovertMissionTakedown, true);

        TriggerEnable(libGDHL_gt_HeroNovaCovertMissionVariables, true);

        TriggerEnable(libGDHL_gt_HeroNovaTripleTapAbilityUsed, true);

        TriggerEnable(libGDHL_gt_HeroNovaTripleTapMissiles, true);

        TriggerEnable(libGDHL_gt_HeroNovaTripleTapMissileCleanup, true);

        TriggerEnable(libGDHL_gt_HeroNovaHoloCloneSpawned, true);

        TriggerEnable(libGDHL_gt_HeroNovaHoloCloneDamageDuplication, true);

        TriggerEnable(libGDHL_gt_HeroNovaAntiArmorShellsAttackCooldownController, true);

    }



}



void libGDHL_gf_HeroNovaDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroNovaTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroNovaTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroNovaTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroNovaTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroNovaCovertMissionTakedown, false);

        TriggerEnable(libGDHL_gt_HeroNovaCovertMissionVariables, false);

        TriggerEnable(libGDHL_gt_HeroNovaTripleTapAbilityUsed, false);

        TriggerEnable(libGDHL_gt_HeroNovaTripleTapMissiles, false);

        TriggerEnable(libGDHL_gt_HeroNovaTripleTapMissileCleanup, false);

        TriggerEnable(libGDHL_gt_HeroNovaHoloCloneSpawned, false);

        TriggerEnable(libGDHL_gt_HeroNovaHoloCloneDamageDuplication, false);

        TriggerEnable(libGDHL_gt_HeroNovaAntiArmorShellsAttackCooldownController, false);

    }



}



void libGDHL_gf_HeroRaynorIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroRaynorTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroRaynorTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroRaynorRaynorsBansheeFlyIn, true);

        TriggerEnable(libGDHL_gt_HeroRaynorRaynorsBansheeFlyOut, true);

        TriggerEnable(libGDHL_gt_HeroRaynorBansheesCommand, true);

        TriggerEnable(libGDHL_gt_HeroRaynorACardToPlayTalentGained, true);

        TriggerEnable(libGDHL_gt_HeroRaynorBansheeTeleport, true);

        TriggerEnable(libGDHL_gt_HeroRaynorRemoveBansheeOnEnterVehicle, true);

        TriggerEnable(libGDHL_gt_HeroRaynorExecuteOrderDeathTimerMod, true);

        TriggerEnable(libGDHL_gt_HeroRaynorExecuteOrderHyperionActivate, true);

    }



}



void libGDHL_gf_HeroRaynorDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroRaynorTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroRaynorTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroRaynorTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroRaynorTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroRaynorRaynorsBansheeFlyIn, false);

        TriggerEnable(libGDHL_gt_HeroRaynorRaynorsBansheeFlyOut, false);

        TriggerEnable(libGDHL_gt_HeroRaynorBansheesCommand, false);

        TriggerEnable(libGDHL_gt_HeroRaynorACardToPlayTalentGained, false);

        TriggerEnable(libGDHL_gt_HeroRaynorACardToPlayHeroTakedown, false);

        TriggerEnable(libGDHL_gt_HeroRaynorBansheeTeleport, false);

        TriggerEnable(libGDHL_gt_HeroRaynorRemoveBansheeOnEnterVehicle, false);

        TriggerEnable(libGDHL_gt_HeroRaynorExecuteOrderDeathTimerMod, false);

        TriggerEnable(libGDHL_gt_HeroRaynorExecuteOrderHyperionActivate, false);

    }



}



void libGDHL_gf_HeroRehgarIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroRehgarTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroRehgarTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroRehgarGhostWolfAfterPortToTown, true);

        TriggerEnable(libGDHL_gt_HeroRehgarGhostWolfMountingSpecialCase, true);

        TriggerEnable(libGDHL_gt_HeroRehgarTotemicProjectionTalentSaveTotem, true);

        TriggerEnable(libGDHL_gt_HeroRehgarTotemicProjectionTalentMoveTotem, true);

        TriggerEnable(libGDHL_gt_HeroRehgarTotemicProjectionResetOnRewindUse, true);

        TriggerEnable(libGDHL_gt_HeroRehgarTidalWavesModifyCooldown, true);

        TriggerEnable(libGDHL_gt_HeroRehgarEarthlivingEnchantHotApply, true);

        TriggerEnable(libGDHL_gt_HeroRehgarElectricChargeAddLeech, true);

        TriggerEnable(libGDHL_gt_HeroRehgarElectricChargeLeechProc, true);

    }



}



void libGDHL_gf_HeroRehgarDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroRehgarTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroRehgarTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroRehgarTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroRehgarTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroRehgarGhostWolfAfterPortToTown, false);

        TriggerEnable(libGDHL_gt_HeroRehgarGhostWolfMountingSpecialCase, false);

        TriggerEnable(libGDHL_gt_HeroRehgarTotemicProjectionTalentSaveTotem, false);

        TriggerEnable(libGDHL_gt_HeroRehgarTotemicProjectionTalentMoveTotem, false);

        TriggerEnable(libGDHL_gt_HeroRehgarTotemicProjectionResetOnRewindUse, false);

        TriggerEnable(libGDHL_gt_HeroRehgarTidalWavesModifyCooldown, false);

        TriggerEnable(libGDHL_gt_HeroRehgarEarthlivingEnchantHotApply, false);

        TriggerEnable(libGDHL_gt_HeroRehgarElectricChargeAddLeech, false);

        TriggerEnable(libGDHL_gt_HeroRehgarElectricChargeLeechProc, false);

    }



}



void libGDHL_gf_HeroRexxarIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroRexxarTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroRexxarTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroRexxarUnleashtheBoarsCast, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaFocusUsed, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaGainsMapMechanicStack, true);

        TriggerEnable(libGDHL_gt_HeroRexxarRexxarLosesMapMechanicStacks, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaChargeDisable, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaMendPetDisable, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaSpawn, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromAttacks, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaClearPursuitTargetFromMishaFollow, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromMishaFocus, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, true);

        TriggerEnable(libGDHL_gt_HeroRexxarRexxarDies, true);

        TriggerEnable(libGDHL_gt_HeroRexxarRemoveMisha, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaDance, true);

        TriggerEnable(libGDHL_gt_HeroRexxarRexxarStasisStartIncludesFeignDeath, true);

        TriggerEnable(libGDHL_gt_HeroRexxarRexxarStasisEndIncludedFeignDeath, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaDies, true);

        TriggerEnable(libGDHL_gt_HeroRexxarGorgeEnd, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaTeleport, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaUnderworldGateUsed, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaVehicleUsed, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaVehicleDone, true);

        TriggerEnable(libGDHL_gt_HeroRexxarStuffMishaIntoTransport, true);

        TriggerEnable(libGDHL_gt_HeroRexxarKickMishaOutOfTransport, true);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaMountedBehaviorDisabled, true);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaGrizzledFortitude, true);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaEasyPrey, true);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaWildfireBear, true);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaPrimalIntimidation, true);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaHunterGatherer, true);

        TriggerEnable(libGDHL_gt_HeroRexxarBestialWrathSpiritBondBearNecessitiesHealProc, true);

        TriggerEnable(libGDHL_gt_HeroRexxarChargeCast, true);

        TriggerEnable(libGDHL_gt_HeroRexxarSelectMishaOnVehicleExit, true);

        TriggerEnable(libGDHL_gt_HeroRexxarDeselectMishaOnVehicleEnter, true);

        TriggerEnable(libGDHL_gt_HeroRexxarHunterGathererController, true);

        TriggerEnable(libGDHL_gt_HeroRexxarFeignDeathOverlayOn, true);

        TriggerEnable(libGDHL_gt_HeroRexxarFeignDeathOverlayOff, true);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaAnimalHusbandry, true);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaDireBeast, true);

    }



}



void libGDHL_gf_HeroRexxarDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroRexxarTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroRexxarTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroRexxarTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroRexxarTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroRexxarUnleashtheBoarsCast, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaFocusUsed, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaGainsMapMechanicStack, false);

        TriggerEnable(libGDHL_gt_HeroRexxarRexxarLosesMapMechanicStacks, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaChargeDisable, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaMendPetDisable, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaSpawn, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromAttacks, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaClearPursuitTargetFromMishaFollow, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromMishaFocus, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, false);

        TriggerEnable(libGDHL_gt_HeroRexxarRexxarDies, false);

        TriggerEnable(libGDHL_gt_HeroRexxarRemoveMisha, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaDance, false);

        TriggerEnable(libGDHL_gt_HeroRexxarRexxarStasisStartIncludesFeignDeath, false);

        TriggerEnable(libGDHL_gt_HeroRexxarRexxarStasisEndIncludedFeignDeath, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaDies, false);

        TriggerEnable(libGDHL_gt_HeroRexxarGorgeEnd, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaTeleport, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaUnderworldGateUsed, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaVehicleUsed, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaVehicleDone, false);

        TriggerEnable(libGDHL_gt_HeroRexxarStuffMishaIntoTransport, false);

        TriggerEnable(libGDHL_gt_HeroRexxarKickMishaOutOfTransport, false);

        TriggerEnable(libGDHL_gt_HeroRexxarMishaMountedBehaviorDisabled, false);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaGrizzledFortitude, false);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaEasyPrey, false);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaWildfireBear, false);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaPrimalIntimidation, false);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaHunterGatherer, false);

        TriggerEnable(libGDHL_gt_HeroRexxarBestialWrathSpiritBondBearNecessitiesHealProc, false);

        TriggerEnable(libGDHL_gt_HeroRexxarChargeCast, false);

        TriggerEnable(libGDHL_gt_HeroRexxarSelectMishaOnVehicleExit, false);

        TriggerEnable(libGDHL_gt_HeroRexxarDeselectMishaOnVehicleEnter, false);

        TriggerEnable(libGDHL_gt_HeroRexxarHunterGathererController, false);

        TriggerEnable(libGDHL_gt_HeroRexxarFeignDeathOverlayOn, false);

        TriggerEnable(libGDHL_gt_HeroRexxarFeignDeathOverlayOff, false);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaAnimalHusbandry, false);

        TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaDireBeast, false);

    }



}



void libGDHL_gf_RexxarUISetup (int lp_rexxarPlayer, unit lp_mishaUnit) {

    // Automatic Variable Declarations

    // Implementation

    libNtve_gf_SetDialogItemUnit(libGDHL_gv_rexxarUI.lv_rexxarMishaUnitStatus, lp_mishaUnit, libCore_gv_playerGroupFromPlayer[lp_rexxarPlayer]);

    libNtve_gf_SetDialogItemTooltip(libGDHL_gv_rexxarUI.lv_rexxarMishaHealth, StringExternal("Param/Value/lib_GDHL_C2E9D341"), libCore_gv_playerGroupFromPlayer[lp_rexxarPlayer]);

    DialogControlSetVisible(libGDHL_gv_rexxarUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[lp_rexxarPlayer], true);

    DialogControlSetVisible(libGDHL_gv_rexxarUI.lv_rexxarMishaUnitStatus, libCore_gv_playerGroupFromPlayer[lp_rexxarPlayer], true);

}



void libGDHL_gf_RexxarUICleanup (int lp_rexxarPlayer) {

    // Automatic Variable Declarations

    // Implementation

    DialogControlSetVisible(libGDHL_gv_rexxarUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[lp_rexxarPlayer], false);

}



void libGDHL_gf_HeroRexxarUnleashtheBoarsTeleportValidation (unit lp_boarUnit, unit lp_targetUnit, fixed lp_teleportDistanceThreshold) {

    // Variable Declarations

    point lv_mostRecentLocation;



    // Automatic Variable Declarations

    // Variable Initialization



    // Implementation

    lv_mostRecentLocation = UnitGetPosition(lp_targetUnit);

    while ((UnitIsAlive(lp_boarUnit) == true) && (UnitIsAlive(lp_targetUnit) == true)) {

        if (((DistanceBetweenPoints(UnitGetPosition(lp_targetUnit), lv_mostRecentLocation) > 15.0))) {

            UnitCreateEffectUnit(lp_boarUnit, "TimedLifeFate", lp_boarUnit);

        }



        lv_mostRecentLocation = UnitGetPosition(lp_targetUnit);

        Wait(0.0625, c_timeGame);

    }

}



void libGDHL_gf_HeroRexxarMishaThink (int lp_player) {

    // Variable Declarations

    point lv_positionToCheck;

    point lv_positionToMove;

    int lv_itNearbyShrubChecks;

    unit lv_unitToAttack;

    bool lv_autoAquired;

    int lv_player;

    unit lv_rexxar;

    unit lv_misha;

    int lv_currentState;

    int lv_attackPoint;

    fixed lv_pursuitOffset;



    // Automatic Variable Declarations

    int auto3742AA88_val;

    const int auto02EA91E5_ae = 8;

    const int auto02EA91E5_ai = 1;

    const int auto817393C0_ae = 8;

    const int auto817393C0_ai = 1;



    // Variable Initialization

    lv_currentState = libGDHL_ge_MishaState_Idle;



    // Implementation

    lv_player = lp_player;

    lv_rexxar = libGame_gv_players[lv_player].lv_heroUnit;

    lv_misha = libGDHL_gv_rexxarMishaUnit[lv_player];

    lv_currentState = libGDHL_gv_mishaCurrentAIState[lv_player];

    if ((UnitHasBehavior2(lv_misha, "PermanentlyUncommandable") == true)) {

        return ;

    }



    if ((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroAbathur")) {

        lv_rexxar = libGame_gv_players[lv_player].lv_activeVehicle;

    }



    if ((libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player] != null) && (libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] != null) && (libNtve_gf_UnitIsVisibleToPlayer(libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player], lv_player) == true) && (lv_currentState != libGDHL_ge_MishaState_Pursuing)) {

        lv_pursuitOffset = (UnitGetPropertyFixed(libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player], c_unitPropMovementSpeedCurrent, c_unitPropCurrent) / 4.0);

        libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] = PointWithOffsetPolar(UnitGetPosition(libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player]), lv_pursuitOffset, UnitGetFacing(libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player]));

    }



    if ((lv_currentState == libGDHL_ge_MishaState_Pursuing) && (libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] == null)) {

        lv_currentState = libGDHL_ge_MishaState_Idle;

    }



    if ((DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) >= libGDHL_gv_rexxar_Misha_LeashRange_Max_C) && (lv_currentState != libGDHL_ge_MishaState_Leashing) && (lv_currentState != libGDHL_ge_MishaState_Following)) {

        if ((((UnitBehaviorEnabled(lv_misha, "RexxarMishaLeashTimeToLeash") == true) || (DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) >= libGDHL_gv_rexxar_Misha_LeashRange_Immediate_C))) && (UnitHasBehavior2(lv_rexxar, "UsingVehicle") == false)) {

            UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_rexxar), 3.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

            lv_currentState = libGDHL_ge_MishaState_Leashing;

            libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] = null;

            libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player] = null;

            libGDHL_gf_HeroRexxarMishaFocusOff(lv_player);

            FloatingCombatElementCreateTextAtPoint(PlayerGroupSingle(lv_player), "FloatingCombatElements/FloatingCombatElementTemplate", "", UnitGetPosition(lv_misha), StringExternal("Param/Value/lib_GDHL_6071B140"), libNtve_gv_FloatingCombatTextAutoRandomSeed);

        }

        else {

            if ((UnitBehaviorEnabled(lv_misha, "RexxarMishaLeashGracePeriod") == false)) {

                UnitBehaviorAdd(lv_misha, "RexxarMishaLeashGracePeriod", lv_rexxar, 1);

            }



        }

    }



    if ((lv_currentState != libGDHL_ge_MishaState_Fighting) && ((libGDHL_gv_commandMishaTargetUnit[lv_player] != null) || ((OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) == AbilityCommand("attack", 0)) && (UnitIsValid(OrderGetTargetUnit(UnitOrder(lv_rexxar, 0))) == true) && (lv_autoAquired != true)))) {

        lv_currentState = libGDHL_ge_MishaState_Fighting;

    }



    if ((lv_currentState != libGDHL_ge_MishaState_HoldingPosition) && (libGDHL_gv_commandMishaTargetPoint[lv_player] != null)) {

        lv_currentState = libGDHL_ge_MishaState_HoldingPosition;

        libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] = null;

    }



    if ((lv_currentState != libGDHL_ge_MishaState_GoingToMoonwell) && (libGDHL_gv_commandMishaTargetMoonwell[lv_player] != null)) {

        lv_currentState = libGDHL_ge_MishaState_GoingToMoonwell;

        libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] = null;

    }



    if ((UnitBehaviorCount(lv_misha, "RexxarMishaFollowFollow") > 0) && (lv_currentState != libGDHL_ge_MishaState_Following) && (lv_currentState != libGDHL_ge_MishaState_Pursuing)) {

        lv_currentState = libGDHL_ge_MishaState_Following;

        lv_autoAquired = false;

        libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] = null;

        libGDHL_gf_HeroRexxarMishaFocusOff(lv_player);

    }

    else {

        if ((UnitAbilityCheck(lv_misha, "attack", false) == true)) {

            UnitAbilityEnable(lv_misha, "attack", true);

        }



    }

    if ((libGDHL_gv_rexxarIsInStasis[lv_player] == true) && (lv_currentState != libGDHL_ge_MishaState_RexxarStasis)) {

        lv_currentState = libGDHL_ge_MishaState_RexxarStasis;

    }



    if ((UnitHasBehavior2(lv_misha, "SylvanasMindControlTarget") == true)) {

        lv_currentState = libGDHL_ge_MishaState_AI_Paused;

    }



    auto3742AA88_val = lv_currentState;

    if (auto3742AA88_val == libGDHL_ge_MishaState_Searching) {

        if ((UnitIsValid(libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player]) == true) && (libNtve_gf_UnitIsVisibleToPlayer(libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player], lv_player) == true)) {

            libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] = UnitGetPosition(libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player]);

            libGDHL_gv_commandMishaTargetUnit[lv_player] = libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player];

            PlayerCreateEffectUnit(lv_player, "RexxarApplyMishaFocusTargetBehavior", libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player]);

            UnitBehaviorAdd(lv_misha, "RexxarMishaFocussedOnUnit", lv_rexxar, 1);

            UnitIssueOrder(lv_misha, OrderTargetingUnit(AbilityCommand("attack", 0), libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player]), c_orderQueueReplace);

            lv_currentState = libGDHL_ge_MishaState_Fighting;

        }

        else {

            libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] = null;

            libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player] = null;

            lv_currentState = libGDHL_ge_MishaState_Leashing;

        }

    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_Pursuing) {

        if (((DistanceBetweenPoints(UnitGetPosition(lv_misha), libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player]) < 1.0) || (libNtve_gf_UnitIsVisibleToPlayer(libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player], lv_player) == true))) {

            lv_currentState = libGDHL_ge_MishaState_Searching;

        }

        else {

            UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player]), c_orderQueueReplace);

        }

    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_Fighting) {

        if ((UnitIsValid(libGDHL_gv_commandMishaTargetUnit[lv_player]) == true) && (UnitTestState(libGDHL_gv_commandMishaTargetUnit[lv_player], c_unitStateTargetable) == true) && ((UnitFilterMatch(libGDHL_gv_commandMishaTargetUnit[lv_player], lv_player, UnitFilter((1 << c_targetFilterVisible), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly) | (1 << c_targetFilterStructure), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true) || (UnitFilterMatch(libGDHL_gv_commandMishaTargetUnit[lv_player], lv_player, UnitFilter((1 << c_targetFilterStructure), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly) | (1 << c_targetFilterImmuneToSkillshots), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterInvulnerable - 32)))) == true))) {

            if ((OrderGetTargetUnit(UnitOrder(lv_misha, 0)) != libGDHL_gv_commandMishaTargetUnit[lv_player])) {

                UnitIssueOrder(lv_misha, OrderTargetingUnit(AbilityCommand("attack", 0), libGDHL_gv_commandMishaTargetUnit[lv_player]), c_orderQueueReplace);

                UnitCreateEffectUnit(lv_rexxar, "RexxarMishaTargetingPersistent", libGDHL_gv_commandMishaTargetUnit[lv_player]);

            }



        }

        else {

            if ((libGDHL_gv_commandMishaTargetUnit[lv_player] != null)) {

                libGDHL_gf_HeroRexxarMishaFocusOff(lv_player);

            }



            if ((OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) == AbilityCommand("attack", 0)) && (UnitOrderIsAcquired(lv_rexxar, 0) == false) && (UnitIsValid(OrderGetTargetUnit(UnitOrder(lv_rexxar, 0))) == true) && (UnitFilterMatch(OrderGetTargetUnit(UnitOrder(lv_rexxar, 0)), lv_player, UnitFilter((1 << c_targetFilterVisible), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true) && (OrderGetTargetUnit(UnitOrder(lv_rexxar, 0)) != OrderGetTargetUnit(UnitOrder(lv_misha, 0))) && (libGDHL_gv_commandMishaTargetUnit[lv_player] == null)) {

                UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCopyOrders", lv_misha);

                UnitCreateEffectUnit(lv_rexxar, "RexxarMishaTargetingPersistent", OrderGetTargetUnit(UnitOrder(lv_rexxar, 0)));

            }



        }

        if ((OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) == AbilityCommand("attack", 0)) && (((UnitIsAlive(libGDHL_gv_commandMishaTargetUnit[lv_player]) == true) && (UnitFilterMatch(libGDHL_gv_commandMishaTargetUnit[lv_player], lv_player, UnitFilter((1 << c_targetFilterStructure), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly), (1 << (c_targetFilterInvulnerable - 32)))) == true)) || ((UnitIsAlive(OrderGetTargetUnit(UnitOrder(lv_misha, 0))) == true) && (UnitFilterMatch(OrderGetTargetUnit(UnitOrder(lv_misha, 0)), lv_player, UnitFilter((1 << c_targetFilterVisible), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true)))) {

        }

        else {

            lv_currentState = libGDHL_ge_MishaState_Idle;

        }

    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_Following) {

        if ((UnitBehaviorCount(lv_misha, "RexxarMishaFollowFollow") == 0)) {

            lv_currentState = libGDHL_ge_MishaState_Idle;

            lv_autoAquired = false;

        }

        else {

            lv_autoAquired = true;

            if ((UnitOrderCount(lv_rexxar) != 0) && (OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) != AbilityCommand("RexxarSpiritSwoop", 0)) && (OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) != AbilityCommand("RexxarUnleashTheBoars", 0)) && (UnitGetType(OrderGetTargetItem(UnitOrder(lv_rexxar, 0))) != "RexxarFlare") && (OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)) != Point(0.0, 0.0)) && (DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) <= 3.0) && ((OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) != AbilityCommand("attack", 0)) || (UnitIsValid(OrderGetTargetUnit(UnitOrder(lv_rexxar, 0))) == false))) {

                UnitAbilityEnable(lv_misha, "attack", true);

                libGDHL_gf_HeroRexxarOrderMishaMoveNearPoint(lv_rexxar, lv_misha, OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)));

                if ((OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) != AbilityCommand("move", 0)) && (DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)), UnitGetPosition(lv_misha)) < 4.0)) {

                    libNtve_gf_MakeUnitFacePoint(lv_misha, OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)), 0.2);

                }



            }

            else {

                if ((UnitTechTreeBehaviorCount(lv_rexxar, "ShrubStatusController", c_techCountQueuedOrBetter) <= 0)) {

                    if ((DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) > 3.0) && ((OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) == AbilityCommand("attack", 0)) || (UnitOrderCount(lv_misha) == 0) || (DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_misha, 0)), UnitGetPosition(lv_rexxar)) > 6.0))) {

                        UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_rexxar), 3.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                        UnitAbilityEnable(lv_misha, "attack", false);

                    }

                    else {

                        if ((UnitOrderCount(lv_misha) > 0) && (DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) <= 2.0)) {

                            UnitIssueOrder(lv_misha, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                            UnitAbilityEnable(lv_misha, "attack", true);

                        }



                    }

                }

                else {

                    if ((UnitTechTreeBehaviorCount(lv_misha, "ShrubStatusController", c_techCountQueuedOrBetter) == 0) && (OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) != AbilityCommand("move", 0))) {

                        UnitAbilityEnable(lv_misha, "attack", true);

                        lv_itNearbyShrubChecks = 0;

                        for ( ; ( (auto02EA91E5_ai >= 0 && lv_itNearbyShrubChecks <= auto02EA91E5_ae) || (auto02EA91E5_ai < 0 && lv_itNearbyShrubChecks >= auto02EA91E5_ae) ) ; lv_itNearbyShrubChecks += auto02EA91E5_ai ) {

                            lv_positionToCheck = PointWithOffsetPolar(UnitGetPosition(lv_rexxar), 1.5, (45 * lv_itNearbyShrubChecks));

                            if ((InShrub(lv_positionToCheck) == true) && ((lv_positionToMove == null) || (DistanceBetweenPoints(UnitGetPosition(lv_misha), lv_positionToMove) > DistanceBetweenPoints(lv_positionToCheck, UnitGetPosition(lv_misha))))) {

                                lv_positionToMove = lv_positionToCheck;

                            }



                        }

                        if ((lv_positionToMove != null)) {

                            UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), lv_positionToMove), c_orderQueueReplace);

                            lv_positionToMove = null;

                        }



                    }

                    else {

                        UnitAbilityEnable(lv_misha, "attack", true);

                    }

                }

            }

        }

    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_Idle) {

        if ((libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] != null)) {

            lv_currentState = libGDHL_ge_MishaState_Pursuing;

        }



        if ((UnitOrderCount(lv_rexxar) != 0) && (UnitBehaviorEnabled(lv_misha, "RexxarMishaHold") == false) && (libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] == null)) {

            if ((OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) == AbilityCommand("attack", 0))) {

                if ((UnitOrderIsAcquired(lv_rexxar, 0) == true) && (OrderGetTargetPosition(UnitOrder(lv_rexxar, 1)) == UnitGetPosition(lv_rexxar))) {

                    lv_autoAquired = true;

                }

                else {

                    lv_autoAquired = false;

                }

                if ((UnitIsValid(OrderGetTargetUnit(UnitOrder(lv_rexxar, 0))) == false)) {

                    UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCommandRemoveTargetPriorityBuffSearch", lv_rexxar);

                    UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCopyOrders", lv_misha);

                }

                else {

                    if ((OrderGetTargetUnit(UnitOrder(lv_rexxar, 0)) != OrderGetTargetUnit(UnitOrder(lv_misha, 0)))) {

                        UnitCreateEffectUnit(lv_rexxar, "RexxarMishaApplyTargetPriorityBuff", OrderGetTargetUnit(UnitOrder(lv_rexxar, 0)));

                        UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCopyOrders", lv_misha);

                        UnitCreateEffectUnit(lv_rexxar, "RexxarMishaTargetingPersistent", OrderGetTargetUnit(UnitOrder(lv_rexxar, 0)));

                    }

                    else {

                        lv_currentState = libGDHL_ge_MishaState_Moving;

                    }

                }

            }

            else {

                if ((OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) == AbilityCommand("move", 0)) && (UnitHasBehavior2(lv_misha, "RexxarMishaManualOrder") == false)) {

                    UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCommandRemoveTargetPriorityBuffSearch", lv_rexxar);

                    if ((DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)), UnitGetPosition(lv_misha)) > 4.0) && (UnitBehaviorEnabled(lv_misha, "RexxarMishaHold") == false)) {

                        libGDHL_gf_HeroRexxarOrderMishaMoveNearPoint(lv_rexxar, lv_misha, OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)));

                        lv_currentState = libGDHL_ge_MishaState_Moving;

                    }

                    else {

                        libNtve_gf_MakeUnitFacePoint(lv_misha, OrderGetTargetPoint(UnitOrder(lv_rexxar, 0)), 0.2);

                    }

                }

                else {

                    if ((OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) == AbilityCommand("FountainDrink", 0)) && (OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) != AbilityCommand("FountainDrink", 0))) {

                        lv_currentState = libGDHL_ge_MishaState_Moving;

                        UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCopyOrders", lv_misha);

                    }



                }

            }

            if ((((DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) >= 4.0) && (UnitOrderCount(lv_misha) == 0)) || ((DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) >= 5.0) && (OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) == AbilityCommand("attack", 0))))) {

                if ((OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) == AbilityCommand("move", 0))) {

                    lv_currentState = libGDHL_ge_MishaState_Moving;

                    UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)), 3.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                }

                else {

                    UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_rexxar), 3.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                }

            }



        }

        else {

            lv_autoAquired = true;

            if ((UnitTechTreeBehaviorCount(lv_rexxar, "ShrubStatusController", c_techCountQueuedOrBetter) > 0) && (UnitTechTreeBehaviorCount(lv_misha, "ShrubStatusController", c_techCountQueuedOrBetter) == 0) && (OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) != AbilityCommand("move", 0))) {

                lv_itNearbyShrubChecks = 0;

                for ( ; ( (auto817393C0_ai >= 0 && lv_itNearbyShrubChecks <= auto817393C0_ae) || (auto817393C0_ai < 0 && lv_itNearbyShrubChecks >= auto817393C0_ae) ) ; lv_itNearbyShrubChecks += auto817393C0_ai ) {

                    lv_positionToCheck = PointWithOffsetPolar(UnitGetPosition(lv_rexxar), 1.5, (45 * lv_itNearbyShrubChecks));

                    if ((InShrub(lv_positionToCheck) == true) && ((lv_positionToMove == null) || (DistanceBetweenPoints(UnitGetPosition(lv_misha), lv_positionToMove) > DistanceBetweenPoints(lv_positionToCheck, UnitGetPosition(lv_misha))))) {

                        lv_positionToMove = lv_positionToCheck;

                    }



                }

                if ((lv_positionToMove != null)) {

                    UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), lv_positionToMove), c_orderQueueReplace);

                    lv_positionToMove = null;

                }



            }

            else {

                if (((UnitIsValid(OrderGetTargetUnit(UnitOrder(lv_misha, 0))) == true) || (OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) == AbilityCommand("attack", 0)))) {

                    UnitIssueOrder(lv_misha, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                }



            }

        }

    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_Moving) {

        if ((UnitOrderCount(lv_misha) == 0) && (OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) != AbilityCommand("FountainDrink", 0))) {

            lv_currentState = libGDHL_ge_MishaState_Idle;

        }

        else {

            if (((UnitOrderCount(lv_rexxar) == 0) || (OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) == AbilityCommand("move", 2)))) {

                if (((DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) <= 4.0) || (DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_misha, 0)), UnitGetPosition(lv_rexxar)) > 5.0))) {

                    UnitIssueOrder(lv_misha, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                    lv_currentState = libGDHL_ge_MishaState_Idle;

                }



            }

            else {

                if ((OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) != AbilityCommand("attack", 0)) && (UnitHasBehavior2(lv_misha, "RexxarMishaManualOrder") == false)) {

                    if ((OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) == AbilityCommand("FountainDrink", 0))) {

                        if ((OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) != AbilityCommand("FountainDrink", 0))) {

                            UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCopyOrders", lv_misha);

                        }



                    }

                    else {

                        if ((OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)) != Point(0.0, 0.0))) {

                            libGDHL_gf_HeroRexxarOrderMishaMoveNearPoint(lv_rexxar, lv_misha, OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)));

                        }



                        if ((DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)), OrderGetTargetPosition(UnitOrder(lv_misha, 0))) > 4.0) && (OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) != AbilityCommand("move", 2))) {

                            UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCommandRemoveTargetPriorityBuffSearch", lv_rexxar);

                        }



                    }

                }

                else {

                    if ((OrderGetAbilityCommand(UnitOrder(lv_rexxar, 0)) == AbilityCommand("attack", 0)) && (OrderGetTargetUnit(UnitOrder(lv_rexxar, 0)) != OrderGetTargetUnit(UnitOrder(lv_misha, 0)))) {

                        UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCopyOrders", lv_misha);

                        if ((UnitIsValid(OrderGetTargetUnit(UnitOrder(lv_rexxar, 0))) == true)) {

                            UnitCreateEffectUnit(lv_rexxar, "RexxarMishaTargetingPersistent", OrderGetTargetUnit(UnitOrder(lv_rexxar, 0)));

                            lv_autoAquired = false;

                        }



                    }



                }

            }

        }

    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_Leashing) {

        if ((DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) <= 3.0)) {

            UnitIssueOrder(lv_misha, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

            lv_currentState = libGDHL_ge_MishaState_Idle;

        }

        else {

            if ((UnitOrderCount(lv_misha) == 0) && (UnitHasBehavior2(lv_misha, "RexxarMishaManualOrder") == false)) {

                UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_rexxar), 3.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

            }

            else {

                if ((DistanceBetweenPoints(UnitGetPosition(lv_rexxar), OrderGetTargetPosition(UnitOrder(lv_misha, 0))) >= libGDHL_gv_rexxar_Misha_LeashRange_Min_C)) {

                    UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_rexxar), 3.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                }

                else {

                    if ((DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) >= libGDHL_gv_rexxar_Misha_LeashRange_Speedboost_Min_C) && ((UnitOrderCount(lv_rexxar) == 0) || (DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)), UnitGetPosition(lv_rexxar)) < DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_rexxar, 0)), UnitGetPosition(lv_misha))))) {

                        UnitBehaviorAdd(lv_misha, "RexxarMishaSpeedBoost", lv_misha, 1);

                    }



                }

            }

        }

    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_RexxarStasis) {

        if ((libGDHL_gv_rexxarIsInStasis[lv_player] == false)) {

            lv_currentState = libGDHL_ge_MishaState_Idle;



        }



        if ((OrderGetTargetPosition(UnitOrder(lv_rexxar, UnitOrderCount(lv_rexxar))) != OrderGetTargetPosition(UnitOrder(lv_misha, 0)))) {

            UnitIssueOrder(lv_misha, UnitOrder(lv_rexxar, UnitOrderCount(lv_rexxar)), c_orderQueueReplace);

        }



    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_Dancing) {

        if ((OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) != AbilityCommand("stop", 3))) {

            lv_currentState = libGDHL_ge_MishaState_Idle;

        }



    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_HoldingPosition) {

        if ((libGDHL_gv_commandMishaTargetPoint[lv_player] == null)) {

            lv_currentState = libGDHL_ge_MishaState_Idle;

        }

        else {

            if ((DistanceBetweenPoints(UnitGetPosition(lv_misha), libGDHL_gv_commandMishaTargetPoint[lv_player]) > 1.0) && ((OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) != AbilityCommand("move", 0)) || (OrderGetTargetPosition(UnitOrder(lv_misha, 0)) != libGDHL_gv_commandMishaTargetPoint[lv_player]))) {

                UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), libGDHL_gv_commandMishaTargetPoint[lv_player]), c_orderQueueReplace);

            }



        }

    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_GoingToMoonwell) {

        if (((UnitHasBehavior2(lv_rexxar, "HealingFountainCooldown") == true) || ((UnitGetPropertyFixed(lv_misha, c_unitPropLife, c_unitPropCurrent) == UnitGetPropertyFixed(lv_misha, c_unitPropLifeMax, c_unitPropCurrent)) && (UnitGetPropertyFixed(lv_rexxar, c_unitPropLife, c_unitPropCurrent) == UnitGetPropertyFixed(lv_rexxar, c_unitPropLifeMax, c_unitPropCurrent)) && (UnitGetPropertyFixed(lv_rexxar, c_unitPropEnergy, c_unitPropCurrent) == UnitGetPropertyFixed(lv_rexxar, c_unitPropEnergyMax, c_unitPropCurrent))))) {

            lv_currentState = libGDHL_ge_MishaState_Idle;

            libGDHL_gf_HeroRexxarMishaFocusOff(lv_player);

            if ((DistanceBetweenPoints(UnitGetPosition(lv_misha), UnitGetPosition(lv_rexxar)) > 4.0)) {

                UnitIssueOrder(lv_misha, OrderTargetingPoint(AbilityCommand("move", 0), libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_rexxar), 2.0, UnitGetPosition(lv_misha))), c_orderQueueReplace);

            }



        }

        else {

            if (((OrderGetAbilityCommand(UnitOrder(lv_misha, 0)) != AbilityCommand("FountainDrink", 0)) || (OrderGetTargetUnit(UnitOrder(lv_misha, 0)) != libGDHL_gv_commandMishaTargetMoonwell[lp_player]))) {

                UnitIssueOrder(lv_misha, OrderTargetingUnit(AbilityCommand("FountainDrink", 0), libGDHL_gv_commandMishaTargetMoonwell[lv_player]), c_orderQueueReplace);

            }



        }

    }

    else if (auto3742AA88_val == libGDHL_ge_MishaState_AI_Paused) {

        if ((UnitHasBehavior2(lv_misha, "SylvanasMindControlTarget") == false)) {

            lv_currentState = libGDHL_ge_MishaState_Idle;

        }



    }

    else {

    }

    libGDHL_gv_mishaCurrentAIState[lv_player] = lv_currentState;

}



void libGDHL_gf_HeroRexxarOrderMishaMoveNearPoint (unit lp_rexxar, unit lp_misha, point lp_target) {

    // Variable Declarations

    fixed lv_distanceFromMishaToRexxar;

    point lv_orderPosition;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_distanceFromMishaToRexxar = DistanceBetweenPoints(UnitGetPosition(lp_rexxar), UnitGetPosition(lp_misha));



    // Implementation

    lv_orderPosition = OrderGetTargetPosition(UnitOrder(lp_misha, 0));

    if ((lv_distanceFromMishaToRexxar > libGDHL_gv_rexxar_Misha_LeashRange_Min_C) && (libNtve_gf_PointDotProduct2D(PointWithOffsetPolar(Point(0.0, 0.0), 1.0, UnitGetFacing(lp_rexxar)), libNtve_gf_PointSubtract2D(UnitGetPosition(lp_misha), UnitGetPosition(lp_rexxar))) < 0.707)) {

        if (((OrderGetAbilityCommand(UnitOrder(lp_misha, 0)) != AbilityCommand("move", 0)) || (DistanceBetweenPoints(lv_orderPosition, UnitGetPosition(lp_rexxar)) > 4.0) || (DistanceBetweenPoints(lv_orderPosition, UnitGetPosition(lp_misha)) < 2.0))) {

            UnitIssueOrder(lp_misha, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lp_rexxar), 1.5, UnitGetFacing(lp_rexxar))), c_orderQueueReplace);

        }



    }

    else {

        if (((OrderGetAbilityCommand(UnitOrder(lp_misha, 0)) != AbilityCommand("move", 0)) || ((DistanceBetweenPoints(lv_orderPosition, lp_target) > 4.0) && ((DistanceBetweenPoints(lv_orderPosition, UnitGetPosition(lp_rexxar)) > 4.0) || (DistanceBetweenPoints(lv_orderPosition, UnitGetPosition(lp_misha)) < 2.0))))) {

            UnitIssueOrder(lp_misha, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(lp_target, 3.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

        }



    }

}



void libGDHL_gf_HeroRexxarMishaStopMishaandResetThink (unit lp_mishaUnit) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(lp_mishaUnit);



    // Implementation

    UnitCreateEffectUnit(lp_mishaUnit, "RexxarMishaHoldIssueStopOrder", lp_mishaUnit);

    UnitBehaviorRemove(lp_mishaUnit, "RexxarMishaManualOrder", 1);

    UnitBehaviorRemove(lp_mishaUnit, "RexxarMishaLeashTimeToLeash", 1);

    UnitBehaviorRemove(lp_mishaUnit, "RexxarMishaHold", 1);

    UnitCreateEffectUnit(lp_mishaUnit, "RexxarMishaCommandRemoveTargetPriorityBuffSearch", lp_mishaUnit);

    if ((libGDHL_gv_commandMishaTargetPoint[lv_player] != null)) {

        UnitCreateEffectPoint(lp_mishaUnit, "RexxarMishaFocusTargetOff", libGDHL_gv_commandMishaTargetPoint[lv_player]);

    }



    libGDHL_gv_commandMishaTargetPoint[lv_player] = null;

    UnitBehaviorRemove(libGDHL_gv_commandMishaTargetUnit[lv_player], "RexxarMishaFocussedTargetUnit", 1);

    libGDHL_gv_commandMishaTargetUnit[lv_player] = null;

    UnitBehaviorRemove(libGDHL_gv_commandMishaTargetMoonwell[lv_player], "RexxarMishaFocussedTargetUnit", 1);

    libGDHL_gv_commandMishaTargetMoonwell[lv_player] = null;

    UnitBehaviorRemove(lp_mishaUnit, "RexxarMishaFocussedOnPoint", 1);

    UnitBehaviorRemove(lp_mishaUnit, "RexxarMishaFocussedOnUnit", 1);

    libGDHL_gv_heroRexxarMishaPursuitTarget[lv_player] = null;

    libGDHL_gv_mishaCurrentAIState[lv_player] = libGDHL_ge_MishaState_Idle;

    libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_player] = null;

}



void libGDHL_gf_HeroRexxarMishaFocusOff (int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    if ((libGDHL_gv_commandMishaTargetUnit[lp_player] != null)) {

        UnitBehaviorRemovePlayer(libGDHL_gv_commandMishaTargetUnit[lp_player], "RexxarMishaFocussedTargetUnit", lp_player, 1);

        UnitCreateEffectUnit(libGDHL_gv_rexxarMishaUnit[lp_player], "RexxarMishaFocusTargetOff", libGDHL_gv_commandMishaTargetUnit[lp_player]);

        libGDHL_gv_commandMishaTargetUnit[lp_player] = null;

        UnitBehaviorRemove(libGDHL_gv_rexxarMishaUnit[lp_player], "RexxarMishaFocussedOnUnit", 1);

    }



    if ((libGDHL_gv_commandMishaTargetMoonwell[lp_player] != null)) {

        UnitCreateEffectUnit(libGDHL_gv_rexxarMishaUnit[lp_player], "RexxarMishaFocusTargetOff", libGDHL_gv_commandMishaTargetMoonwell[lp_player]);

        libGDHL_gv_commandMishaTargetMoonwell[lp_player] = null;

        UnitBehaviorRemove(libGDHL_gv_rexxarMishaUnit[lp_player], "RexxarMishaFocussedOnPoint", 1);

    }



    if ((libGDHL_gv_commandMishaTargetPoint[lp_player] != null)) {

        UnitCreateEffectPoint(libGDHL_gv_rexxarMishaUnit[lp_player], "RexxarMishaFocusTargetOff", libGDHL_gv_commandMishaTargetPoint[lp_player]);

        libGDHL_gv_commandMishaTargetPoint[lp_player] = null;

        UnitBehaviorRemove(libGDHL_gv_rexxarMishaUnit[lp_player], "RexxarMishaFocussedOnPoint", 1);

    }



}



void libGDHL_gf_HeroSgtHammerIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroSgtHammerTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroSgtHammerTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroSgtHammerCompleteHearthstone, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerSiegeModeUpdate, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunPrepStart, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculation, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculationViaEffect, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunApplyOrbitalScan, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunCheckForLocation, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerConcussiveBlastCancel, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerConcussiveBlastForcedDestruction, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerMaelstromRoundsAddCharge, true);

        TriggerEnable(libGDHL_gt_HeroSgtHammerHearthstoneUsed, true);

    }



}



void libGDHL_gf_HeroSgtHammerDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroSgtHammerTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroSgtHammerTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroSgtHammerTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroSgtHammerTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroSgtHammerCompleteHearthstone, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerSiegeModeUpdate, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunPrepStart, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculation, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculationViaEffect, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunApplyOrbitalScan, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunCheckForLocation, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerConcussiveBlastCancel, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerConcussiveBlastForcedDestruction, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerMaelstromRoundsAddCharge, false);

        TriggerEnable(libGDHL_gt_HeroSgtHammerHearthstoneUsed, false);

    }



}



void libGDHL_gf_HeroStitchesIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroStitchesTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroStitchesTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroStitchesHookHookVision, true);

        TriggerEnable(libGDHL_gt_HeroStitchesHookLaunchTargetUsed, true);

        TriggerEnable(libGDHL_gt_HeroStitchesGorgeDecreases, true);

        TriggerEnable(libGDHL_gt_HeroStitchesGorgeActivate, true);

        TriggerEnable(libGDHL_gt_HeroStitchesGorgeOff, true);

        TriggerEnable(libGDHL_gt_HeroStitchesGiftFromTheEmbalmerDeathTimerReduction, true);

    }



}



void libGDHL_gf_HeroStitchesDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroStitchesTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroStitchesTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroStitchesTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroStitchesTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroStitchesHookHookVision, false);

        TriggerEnable(libGDHL_gt_HeroStitchesHookLaunchTargetUsed, false);

        TriggerEnable(libGDHL_gt_HeroStitchesGorgeDecreases, false);

        TriggerEnable(libGDHL_gt_HeroStitchesGorgeActivate, false);

        TriggerEnable(libGDHL_gt_HeroStitchesGorgeOff, false);

        TriggerEnable(libGDHL_gt_HeroStitchesGiftFromTheEmbalmerDeathTimerReduction, false);

    }



}



void libGDHL_gf_HeroSylvanasIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroSylvanasTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroSylvanasTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroSylvanasMindControlTargetSelect, true);

        TriggerEnable(libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget, true);

        TriggerEnable(libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget, true);

        TriggerEnable(libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd, true);

        TriggerEnable(libGDHL_gt_HeroSylvanasWitheringFireHeroKillAddCharge, true);

        TriggerEnable(libGDHL_gt_HeroSylvanasPossessionRewire, true);

        TriggerEnable(libGDHL_gt_HeroSylvanasPossessionCatapultMinionModifyChargeCount, true);

        TriggerEnable(libGDHL_gt_HeroSylvanasDarkLadysCallTalentApplyAllyVisionSuppression, true);

        TriggerEnable(libGDHL_gt_HeroSylvanasDarkLadysCallTalentResetAllyVisionSuppression, true);

        TriggerEnable(libGDHL_gt_HeroSylvanasMindControlCameraLock, true);

    }



}



void libGDHL_gf_HeroSylvanasDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroSylvanasTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroSylvanasTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroSylvanasTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroSylvanasTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroSylvanasMindControlTargetSelect, false);

        TriggerEnable(libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget, false);

        TriggerEnable(libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget, false);

        TriggerEnable(libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd, false);

        TriggerEnable(libGDHL_gt_HeroSylvanasWitheringFireHeroKillAddCharge, false);

        TriggerEnable(libGDHL_gt_HeroSylvanasPossessionRewire, false);

        TriggerEnable(libGDHL_gt_HeroSylvanasPossessionCatapultMinionModifyChargeCount, false);

        TriggerEnable(libGDHL_gt_HeroSylvanasDarkLadysCallTalentApplyAllyVisionSuppression, false);

        TriggerEnable(libGDHL_gt_HeroSylvanasDarkLadysCallTalentResetAllyVisionSuppression, false);

        TriggerEnable(libGDHL_gt_HeroSylvanasMindControlCameraLock, false);

    }



}



void libGDHL_gf_HeroTassadarIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTassadarTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroTassadarTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod, true);

        TriggerEnable(libGDHL_gt_HeroTassadarForceWallForcedDestruction, true);

        TriggerEnable(libGDHL_gt_HeroTassadarShockRayVision, true);

    }



}



void libGDHL_gf_HeroTassadarDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTassadarTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroTassadarTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroTassadarTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroTassadarTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod, false);

        TriggerEnable(libGDHL_gt_HeroTassadarForceWallForcedDestruction, false);

        TriggerEnable(libGDHL_gt_HeroTassadarShockRayVision, false);

    }



}



void libGDHL_gf_HeroThrallIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroThrallTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroThrallTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroThrallEarthquakeEarthenShieldMasteryShieldApplication, true);

        TriggerEnable(libGDHL_gt_HeroThrallAncestralWrathChargeCountProc, true);

        TriggerEnable(libGDHL_gt_HeroThrallAncestralWrathHealingDummyUpdate, true);

        TriggerEnable(libGDHL_gt_HeroThrallWorldBreakerForcedDestruction, true);

    }



}



void libGDHL_gf_HeroThrallDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroThrallTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroThrallTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroThrallTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroThrallTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroThrallEarthquakeEarthenShieldMasteryShieldApplication, false);

        TriggerEnable(libGDHL_gt_HeroThrallAncestralWrathChargeCountProc, false);

        TriggerEnable(libGDHL_gt_HeroThrallAncestralWrathHealingDummyUpdate, false);

        TriggerEnable(libGDHL_gt_HeroThrallWorldBreakerForcedDestruction, false);

    }



}



void libGDHL_gf_UIHeroSpecificStatusFrameUpdateThrallStatus (int lp_player) {

    // Variable Declarations

    int lv_traitCounter;



    // Automatic Variable Declarations

    const int auto4FF95022_ae = libGDHL_gv_thrallTraitMaxStacks;

    const int auto4FF95022_ai = 1;



    // Variable Initialization



    // Implementation

    libGDHL_gv_thrallTraitCount[lp_player] += 1;

    if ((libGDHL_gv_thrallTraitCount[lp_player] == 5)) {

        libGDHL_gv_thrallTraitCount[lp_player] = 0;

        DialogControlSendAnimationEvent(libGDHL_gv_thrallUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[lp_player], "TransitionToTop");

        lv_traitCounter = 1;

        for ( ; ( (auto4FF95022_ai >= 0 && lv_traitCounter <= auto4FF95022_ae) || (auto4FF95022_ai < 0 && lv_traitCounter >= auto4FF95022_ae) ) ; lv_traitCounter += auto4FF95022_ai ) {

            DialogControlSetVisible(libGDHL_gv_thrallUI.lv_counterImage[lv_traitCounter], libCore_gv_playerGroupFromPlayer[lp_player], false);

        }

    }

    else {

        DialogControlSetVisible(libGDHL_gv_thrallUI.lv_counterImage[libGDHL_gv_thrallTraitCount[lp_player]], libCore_gv_playerGroupFromPlayer[lp_player], true);

    }

}



void libGDHL_gf_UIClearThrallFrostwolfCount (int lp_player) {

    // Variable Declarations

    int lv_traitCounter;



    // Automatic Variable Declarations

    const int auto1AF3E679_ae = libGDHL_gv_thrallTraitMaxStacks;

    const int auto1AF3E679_ai = 1;



    // Variable Initialization



    // Implementation

    libGDHL_gv_thrallTraitCount[lp_player] = 0;

    lv_traitCounter = 1;

    for ( ; ( (auto1AF3E679_ai >= 0 && lv_traitCounter <= auto1AF3E679_ae) || (auto1AF3E679_ai < 0 && lv_traitCounter >= auto1AF3E679_ae) ) ; lv_traitCounter += auto1AF3E679_ai ) {

        DialogControlSetVisible(libGDHL_gv_thrallUI.lv_counterImage[lv_traitCounter], libCore_gv_playerGroupFromPlayer[lp_player], false);

    }

}



void libGDHL_gf_HeroTinkerIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTinkerTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroTinkerTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroTinkerFocusTurretsSetTarget, true);

    }



}



void libGDHL_gf_HeroTinkerDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTinkerTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroTinkerTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroTinkerTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroTinkerTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroTinkerFocusTurretsSetTarget, false);

    }



}



void libGDHL_gf_HeroTychusIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTychusTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroTychusTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroTychusUpdateOrdersOnIssueOrderAbility, true);

        TriggerEnable(libGDHL_gt_HeroTychusOverkillRollingReload, true);

        TriggerEnable(libGDHL_gt_HeroTychusMasterAssassinHeroTakedownProc, true);

        TriggerEnable(libGDHL_gt_HeroTychusRelentlessSoldierTalentProc, true);

        TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffOn, true);

        TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffOff, true);

        TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffHealPreviewCatalog, true);

    }



}



void libGDHL_gf_HeroTychusDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTychusTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroTychusTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroTychusTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroTychusTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroTychusUpdateOrdersOnIssueOrderAbility, false);

        TriggerEnable(libGDHL_gt_HeroTychusOverkillRollingReload, false);

        TriggerEnable(libGDHL_gt_HeroTychusMasterAssassinHeroTakedownProc, false);

        TriggerEnable(libGDHL_gt_HeroTychusRelentlessSoldierTalentProc, false);

        TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffOn, false);

        TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffOff, false);

        TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffHealPreviewCatalog, false);

    }



}



void libGDHL_gf_HeroTyraelIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTyraelTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroTyraelTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroTyraelSanctificationFacing, true);

        TriggerEnable(libGDHL_gt_HeroTyraelSanctificationTimerStart, true);

        TriggerEnable(libGDHL_gt_HeroTyraelArchangelsWrathSuppressCollision, true);

        TriggerEnable(libGDHL_gt_HeroTyraelArchangelsWrathDeathTimerModification, true);

        TriggerEnable(libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOn, true);

        TriggerEnable(libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff, true);

    }



}



void libGDHL_gf_HeroTyraelDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTyraelTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroTyraelTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroTyraelTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroTyraelTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroTyraelSanctificationFacing, false);

        TriggerEnable(libGDHL_gt_HeroTyraelSanctificationTimerStart, false);

        TriggerEnable(libGDHL_gt_HeroTyraelArchangelsWrathSuppressCollision, false);

        TriggerEnable(libGDHL_gt_HeroTyraelArchangelsWrathDeathTimerModification, false);

        TriggerEnable(libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOn, false);

        TriggerEnable(libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff, false);

    }



}



void libGDHL_gf_HeroTyrandeIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTyrandeTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroTyrandeTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroTyrandeElunesChosenSetTarget, true);

        TriggerEnable(libGDHL_gt_HeroTyrandeElunesChosenDamageProc, true);

        TriggerEnable(libGDHL_gt_HeroTyrandeEyesOfTheHuntressActivate, true);

    }



}



void libGDHL_gf_HeroTyrandeDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroTyrandeTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroTyrandeTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroTyrandeTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroTyrandeTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroTyrandeElunesChosenSetTarget, false);

        TriggerEnable(libGDHL_gt_HeroTyrandeElunesChosenDamageProc, false);

        TriggerEnable(libGDHL_gt_HeroTyrandeEyesOfTheHuntressActivate, false);

    }



}



void libGDHL_gf_HeroWitchDoctorIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroWitchDoctorTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroWitchDoctorTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroWitchDoctorZombiePrisonKillZombies, true);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorZombiePrisonRelicZombiesSpawned, true);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorRavenousSpiritCast, true);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorRavenousSpiritExpires, true);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorPassiveTarget, true);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorGargantuanCreated, true);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorGargantuanStompUsed, true);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorVileInfectionTaken, true);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorBloodRitualHeroTakedownProc, true);

    }



}



void libGDHL_gf_HeroWitchDoctorDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroWitchDoctorTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroWitchDoctorTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroWitchDoctorTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroWitchDoctorTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroWitchDoctorZombiePrisonKillZombies, false);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorZombiePrisonRelicZombiesSpawned, false);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorRavenousSpiritCast, false);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorRavenousSpiritExpires, false);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorPassiveTarget, false);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorGargantuanCreated, false);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorGargantuanStompUsed, false);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorVileInfectionTaken, false);

        TriggerEnable(libGDHL_gt_HeroWitchDoctorBloodRitualHeroTakedownProc, false);

    }



}



trigger auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_Trigger = null;

unit auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_witchDoctor;

unit auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_george;

int auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_player;

point auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_castPosition;



void libGDHL_gf_HeroWitchDoctorGargantuanAI (unit lp_witchDoctor, unit lp_george, int lp_player, point lp_castPosition) {

    auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_witchDoctor = lp_witchDoctor;

    auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_george = lp_george;

    auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_player = lp_player;

    auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_castPosition = lp_castPosition;



    if (auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_Trigger == null) {

        auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_Trigger = TriggerCreate("auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_TriggerFunc");

    }



    TriggerExecute(auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_Trigger, false, false);

}



bool auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_TriggerFunc (bool testConds, bool runActions) {

    unit lp_witchDoctor = auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_witchDoctor;

    unit lp_george = auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_george;

    int lp_player = auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_player;

    point lp_castPosition = auto_libGDHL_gf_HeroWitchDoctorGargantuanAI_lp_castPosition;



    // Variable Declarations

    unit lv_unitToFollow;

    int lv_gargantuanState;

    unit lv_gargantuanAggroTarget;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unitToFollow = lp_witchDoctor;

    lv_gargantuanState = libGDHL_ge_GargantuanState_Idle;



    // Implementation

    while ((UnitHasBehavior2(lp_witchDoctor, "WitchDoctorGargantuanActive") == true) && (UnitIsAlive(lp_george) == true)) {

        if ((OrderGetAbilityCommand(UnitOrder(lp_george, 0)) == AbilityCommand("WitchDoctorGargantuanStomp", 0)) && (lv_gargantuanState != libGDHL_ge_GargantuanState_Approach)) {

            if ((OrderGetAbilityCommand(UnitOrder(lp_george, 0)) != AbilityCommand("WitchDoctorGargantuanStomp", 0))) {

                lv_gargantuanState = libGDHL_ge_GargantuanState_Idle;

            }



        }

        else {

            if ((UnitOrder(lp_george, 0) == null) && (lv_gargantuanState != libGDHL_ge_GargantuanState_Idle)) {

                lv_gargantuanState = libGDHL_ge_GargantuanState_Idle;

            }

            else {

                if ((OrderGetAbilityCommand(UnitOrder(lp_george, 0)) == AbilityCommand("attack", 0)) && (UnitTypeTestAttribute(UnitGetType(OrderGetTargetUnit(UnitOrder(lp_george, 0))), c_unitAttributeHeroic) == true)) {

                    lv_gargantuanState = libGDHL_ge_GargantuanState_Aggro;

                }



            }

            if ((lv_gargantuanState != libGDHL_ge_GargantuanState_Aggro) && (OrderGetAbilityCommand(UnitOrder(lp_george, 0)) != AbilityCommand("WitchDoctorGargantuanStompCommand", 0))) {

                if ((DistanceBetweenPoints(UnitGetPosition(lp_george), lp_castPosition) > libGDHL_gv_witchDoctor_Gargantuan_LeashRange_C)) {

                    UnitIssueOrder(lp_george, OrderTargetingPoint(AbilityCommand("move", 0), lp_castPosition), c_orderQueueReplace);

                    UnitBehaviorAdd(lp_george, "WitchDoctorGargantuanAggroSpeed", lp_witchDoctor, 1);

                    lv_gargantuanState = libGDHL_ge_GargantuanState_Leashing;

                }

                else {

                    if ((lv_gargantuanState == libGDHL_ge_GargantuanState_Idle)) {

                        UnitIssueOrder(lp_george, OrderTargetingPoint(AbilityCommand("attack", 0), lp_castPosition), c_orderQueueReplace);

                    }



                }

            }

            else {

                if ((OrderGetAbilityCommand(UnitOrder(lp_george, 0)) != AbilityCommand("WitchDoctorGargantuanStompCommand", 0)) && (UnitIsValid(OrderGetTargetUnit(UnitOrder(lp_george, 0))) == true) && ((DistanceBetweenPoints(UnitGetPosition(lp_george), lp_castPosition) > libGDHL_gv_witchDoctor_Gargantuan_LeashRange_C) || (UnitHasBehavior2(OrderGetTargetUnit(UnitOrder(lp_george, 0)), "LeoricUndying") == true) || (UnitHasBehavior2(OrderGetTargetUnit(UnitOrder(lp_george, 0)), "UtherEternalVanguardRezDelay") == true) || (UnitHasBehavior2(OrderGetTargetUnit(UnitOrder(lp_george, 0)), "TyraelArchangelsWrathDeathActiveBuff") == true) || (libAIAI_gf_AIUnitBehindEnemyGateEstimate(UnitGetPosition(lp_george), UnitGetOwner(lp_witchDoctor), OrderGetTargetUnit(UnitOrder(lp_george, 0))) == true))) {

                    UnitGroupRemove(libGDHL_gv_heroWitchDoctorGargantuanAggroGroup[lp_player], OrderGetTargetUnit(UnitOrder(lp_george, 0)));

                    UnitIssueOrder(lp_george, OrderTargetingPoint(AbilityCommand("move", 0), lp_castPosition), c_orderQueueReplace);

                    UnitBehaviorAdd(lp_george, "WitchDoctorGargantuanAggroSpeed", lp_witchDoctor, 1);

                    lv_gargantuanState = libGDHL_ge_GargantuanState_Leashing;

                }



            }

            if ((OrderGetAbilityCommand(UnitOrder(lv_unitToFollow, 0)) == AbilityCommand("attack", 0)) && (lv_gargantuanState != libGDHL_ge_GargantuanState_Aggro) && ((DistanceBetweenPoints(UnitGetPosition(OrderGetTargetUnit(UnitOrder(lv_unitToFollow, 0))), lp_castPosition) + 0.5) <= libGDHL_gv_witchDoctor_Gargantuan_LeashRange_C)) {

                UnitIssueOrder(lp_george, OrderTargetingUnit(AbilityCommand("attack", 0), OrderGetTargetUnit(UnitOrder(lv_unitToFollow, 0))), c_orderQueueReplace);

                lv_gargantuanState = libGDHL_ge_GargantuanState_Idle;

            }



            if ((OrderGetAbilityCommand(UnitOrder(lp_george, 0)) == AbilityCommand("WitchDoctorGargantuanStompCommand", 0))) {

                lv_gargantuanState = libGDHL_ge_GargantuanState_Approach;

            }



        }

        Wait(0.125, c_timeGame);

    }

    UnitBehaviorRemove(lp_witchDoctor, "WitchDoctorGargantuanActive", 1);

    return true;

}



void libGDHL_gf_HeroWizardIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroWizardTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroWizardTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroWizardCriticalMassCDReduction, true);

        TriggerEnable(libGDHL_gt_HeroWizardDominance, true);

        TriggerEnable(libGDHL_gt_HeroWizardIllusionistDamageCheck, true);

    }



}



void libGDHL_gf_HeroWizardDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroWizardTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroWizardTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroWizardTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroWizardTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroWizardCriticalMassCDReduction, false);

        TriggerEnable(libGDHL_gt_HeroWizardDominance, false);

        TriggerEnable(libGDHL_gt_HeroWizardIllusionistDamageCheck, false);

    }



}



void libGDHL_gf_HeroUtherIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroUtherTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroUtherTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroUtherBlessedChampionTargetProc, true);

        TriggerEnable(libGDHL_gt_HeroUtherBlessedChampionSelfHealingProc, true);

        TriggerEnable(libGDHL_gt_HeroUtherBlessedChampionDummyProcs, true);

        TriggerEnable(libGDHL_gt_HeroUtherSpiritofRedemptionCooldownReset, true);

        TriggerEnable(libGDHL_gt_HeroUtherEternalDevotionSuppressCollision, true);

        TriggerEnable(libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOn, true);

        TriggerEnable(libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff, true);

    }



}



void libGDHL_gf_HeroUtherDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroUtherTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroUtherTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroUtherTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroUtherTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroUtherBlessedChampionTargetProc, false);

        TriggerEnable(libGDHL_gt_HeroUtherBlessedChampionSelfHealingProc, false);

        TriggerEnable(libGDHL_gt_HeroUtherBlessedChampionDummyProcs, false);

        TriggerEnable(libGDHL_gt_HeroUtherSpiritofRedemptionCooldownReset, false);

        TriggerEnable(libGDHL_gt_HeroUtherEternalDevotionSuppressCollision, false);

        TriggerEnable(libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOn, false);

        TriggerEnable(libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff, false);

    }



}



void libGDHL_gf_HeroUtherBlessedChampionSetHeal (int lp_player) {

    // Automatic Variable Declarations

    // Implementation

    CatalogFieldValueSet(c_gameCatalogEffect, "BlessedChampionCreateHealer", "RechargeVitalRate", lp_player, FixedToString((libGDHL_gv_heroUtherBlessedChampionStoredHealing[lp_player][1] + libGDHL_gv_heroUtherBlessedChampionStoredHealing[lp_player][2]), 2));

    libGDHL_gv_heroUtherBlessedChampionRegisteredHeals[lp_player] = 0;

    libGDHL_gv_heroUtherBlessedChampionStoredHealing[lp_player][1] = 0;

    libGDHL_gv_heroUtherBlessedChampionStoredHealing[lp_player][2] = 0;

}



void libGDHL_gf_HeroZagaraIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroZagaraTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroZagaraTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroZagaraExitNydusWormUsed, true);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormSpawned, true);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormTargetingState, true);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormDies, true);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormDiesUpdateLineofSuccession, true);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormExitAnimation, true);

        TriggerEnable(libGDHL_gt_HeroZagaraBanelingBarrage, true);

        TriggerEnable(libGDHL_gt_HeroZagaraHydraliskorMutaliskControl, true);

        TriggerEnable(libGDHL_gt_HeroZagaraInfestedDropSpawnRoach, true);

        TriggerEnable(libGDHL_gt_HeroZagaraInfestScaling, true);

        TriggerEnable(libGDHL_gt_HeroZagaraTyrantMawCDRonDeath, true);

        TriggerEnable(libGDHL_gt_HeroZagaraEndlessCreepApplyBehavior, true);

        TriggerEnable(libGDHL_gt_HeroZagaraDevouringMawOverlayOn, true);

        TriggerEnable(libGDHL_gt_HeroZagaraDevouringMawOverlayOff, true);

    }



}



void libGDHL_gf_HeroZagaraDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroZagaraTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroZagaraTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroZagaraTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroZagaraTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroZagaraExitNydusWormUsed, false);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormSpawned, false);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormTargetingState, false);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormDies, false);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormDiesUpdateLineofSuccession, false);

        TriggerEnable(libGDHL_gt_HeroZagaraNydusWormExitAnimation, false);

        TriggerEnable(libGDHL_gt_HeroZagaraBanelingBarrage, false);

        TriggerEnable(libGDHL_gt_HeroZagaraInfestScaling, false);

        TriggerEnable(libGDHL_gt_HeroZagaraHydraliskorMutaliskControl, false);

        TriggerEnable(libGDHL_gt_HeroZagaraInfestedDropSpawnRoach, false);

        TriggerEnable(libGDHL_gt_HeroZagaraTyrantMawCDRonDeath, false);

        TriggerEnable(libGDHL_gt_HeroZagaraEndlessCreepApplyBehavior, false);

        TriggerEnable(libGDHL_gt_HeroZagaraDevouringMawOverlayOn, false);

        TriggerEnable(libGDHL_gt_HeroZagaraDevouringMawOverlayOff, false);

    }



}



void libGDHL_gf_HeroZagaraUpdateNydusWormLineofSuccession (int lp_player) {

    // Variable Declarations

    unit lv_u;



    // Automatic Variable Declarations

    unitgroup auto5277D092_g;

    int auto5277D092_u;



    // Variable Initialization



    // Implementation

    if ((UnitGroupCount(libGDHL_gv_heroZagaraNydusWormUnitGroup[lp_player], c_unitCountAlive) > libGDHL_gv_heroZagaraMaxNydusWorms[lp_player])) {

        auto5277D092_g = libGDHL_gv_heroZagaraNydusWormUnitGroup[lp_player];

        auto5277D092_u = UnitGroupCount(auto5277D092_g, c_unitCountAll);

        for (;; auto5277D092_u -= 1) {

            lv_u = UnitGroupUnitFromEnd(auto5277D092_g, auto5277D092_u);

            if (lv_u == null) { break; }

            UnitGroupRemove(libGDHL_gv_heroZagaraNydusWormUnitGroup[lp_player], lv_u);

            UnitKill(lv_u);

            break;

        }

    }



}



void libGDHL_gf_HeroZeratulIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroZeratulTriggerRegistrationVariable += 1;

    if ((libGDHL_gv_heroZeratulTriggerRegistrationVariable == 1)) {

        TriggerEnable(libGDHL_gt_HeroZeratulGrimTaskProc, true);

        TriggerEnable(libGDHL_gt_HeroZeratulVoidPrisonApplyStasisOverlay, true);

        TriggerEnable(libGDHL_gt_HeroZeratulVoidPrisonRemoveStasisOverlay, true);

        TriggerEnable(libGDHL_gt_HeroZeratulSeekerInTheDarkStructureTarget, true);

        TriggerEnable(libGDHL_gt_HeroZeratulShroudofAdunFCT, true);

    }



}



void libGDHL_gf_HeroZeratulDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libGDHL_gv_heroZeratulTriggerRegistrationVariable -= 1;

    if ((libGDHL_gv_heroZeratulTriggerRegistrationVariable < 0)) {

        libGDHL_gv_heroZeratulTriggerRegistrationVariable = 0;

    }



    if ((libGDHL_gv_heroZeratulTriggerRegistrationVariable == 0)) {

        TriggerEnable(libGDHL_gt_HeroZeratulVoidPrisonApplyStasisOverlay, false);

        TriggerEnable(libGDHL_gt_HeroZeratulGrimTaskProc, false);

        TriggerEnable(libGDHL_gt_HeroZeratulVoidPrisonRemoveStasisOverlay, false);

        TriggerEnable(libGDHL_gt_HeroZeratulSeekerInTheDarkStructureTarget, false);

        TriggerEnable(libGDHL_gt_HeroZeratulShroudofAdunFCT, false);

    }



}



// Triggers

//--------------------------------------------------------------------------------------------------

// Trigger: #Include Game Data Helper

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_IncludeGameDataHelper_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_IncludeGameDataHelper_Init () {

    libGDHL_gt_IncludeGameDataHelper = TriggerCreate("libGDHL_gt_IncludeGameDataHelper_Func");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Summoned Unit AP Application

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_SummonedUnitAPApplication_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((EventUnit() != null))) {

            return false;

        }



        if (!((UnitGetOwner(EventUnitCreatedUnit()) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitGetOwner(EventUnitCreatedUnit()) >= 1))) {

            return false;

        }



        if (!(((UnitTypeTestAttribute(UnitGetType(EventUnitCreatedUnit()), c_unitAttributeSummoned) == true) || (UnitGetType(EventUnitCreatedUnit()) == "NovaHoloCloneCloaked")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gf_SiegeUpdateAbilityPowerOnSummonedUnits(EventUnitCreatedUnit());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_SummonedUnitAPApplication_Init () {

    libGDHL_gt_SummonedUnitAPApplication = TriggerCreate("libGDHL_gt_SummonedUnitAPApplication_Func");

    TriggerAddEventUnitCreated(libGDHL_gt_SummonedUnitAPApplication, null, null, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Summoned Unit Imposing Presence Application

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_SummonedUnitImposingPresenceApplication_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_attackingUnit;

    unit lv_attackedUnit;

    int lv_attackedPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_attackingUnit = EventPlayerEffectUsedUnitLaunch();

    lv_attackedUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_attackedPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);



    // Conditions

    if (testConds) {

        if (!((lv_attackingUnit != null))) {

            return false;

        }



        if (!((lv_attackedPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((lv_attackedPlayer >= 1))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_attackedUnit, "TalentImposingPresenceApplyDamageResponseBehavior", lv_attackingUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_SummonedUnitImposingPresenceApplication_Init () {

    libGDHL_gt_SummonedUnitImposingPresenceApplication = TriggerCreate("libGDHL_gt_SummonedUnitImposingPresenceApplication_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_SummonedUnitImposingPresenceApplication, c_playerAny, "StormSummonedUnitApplyImposingPresenceDamageResponseDebuffToCasterTriggerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Summoned Unit Damage Dealt Enum Target Caster Handled

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_SummonedUnitDamageDealtEnumTargetCasterHandled_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_summonUnit;

    int lv_summonUnitOwner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_summonUnit = EventPlayerEffectUsedUnitImpact();

    lv_summonUnitOwner = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(lv_summonUnit, "StormSummonedUnitDamagedUnitTracker") == true))) {

            return false;

        }



        if (!((lv_summonUnit != null))) {

            return false;

        }



        if (!((lv_summonUnitOwner <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((lv_summonUnitOwner >= 1))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventPlayerEffectUsed() == "StormSummonedUnitPhysicalDamageDealtDummy")) {

        UnitCreateEffectUnit(lv_summonUnit, "StormStummonedUnitEnumUnitsSetPhysicalDamage", lv_summonUnit);

    }

    else if ((EventPlayerEffectUsed() == "StormSummonedUnitSpellDamageDealtDummy")) {

        UnitCreateEffectUnit(lv_summonUnit, "StormStummonedUnitEnumUnitsSetSpellDamage", lv_summonUnit);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_SummonedUnitDamageDealtEnumTargetCasterHandled_Init () {

    libGDHL_gt_SummonedUnitDamageDealtEnumTargetCasterHandled = TriggerCreate("libGDHL_gt_SummonedUnitDamageDealtEnumTargetCasterHandled_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_SummonedUnitDamageDealtEnumTargetCasterHandled, c_playerAny, "StormSummonedUnitPhysicalDamageDealtDummy");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_SummonedUnitDamageDealtEnumTargetCasterHandled, c_playerAny, "StormSummonedUnitSpellDamageDealtDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Camera Shake Light Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericCameraShakeLightTarget_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitTarget)) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((DistanceBetweenPoints(EventPlayerEffectUsedPoint(c_effectLocationCasterPoint), CameraGetTarget(EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget))) <= 10.0)) {

        CameraShake(EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget), "Light", "Shake", 0.1, 0.2, 0.3);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericCameraShakeLightTarget_Init () {

    libGDHL_gt_HeroGenericCameraShakeLightTarget = TriggerCreate("libGDHL_gt_HeroGenericCameraShakeLightTarget_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroGenericCameraShakeLightTarget, c_playerAny, "CameraShakeLightTauntingTotemSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Camera Shake Medium Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericCameraShakeMediumTarget_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitTarget)) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((DistanceBetweenPoints(EventPlayerEffectUsedPoint(c_effectLocationCasterUnit), CameraGetTarget(EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget))) <= 10.0)) {

        CameraShake(EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget), "Medium", "Shake", 0.1, 0.2, 0.3);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericCameraShakeMediumTarget_Init () {

    libGDHL_gt_HeroGenericCameraShakeMediumTarget = TriggerCreate("libGDHL_gt_HeroGenericCameraShakeMediumTarget_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroGenericCameraShakeMediumTarget, c_playerAny, "CameraShakeMediumTauntingTotemSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Camera Shake Heavy Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericCameraShakeHeavyTarget_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitTarget)) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((DistanceBetweenPoints(EventPlayerEffectUsedPoint(c_effectLocationCasterUnit), CameraGetTarget(EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget))) <= 10.0)) {

        CameraShake(EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget), "Heavy", "Shake", 0.1, 0.2, 0.3);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericCameraShakeHeavyTarget_Init () {

    libGDHL_gt_HeroGenericCameraShakeHeavyTarget = TriggerCreate("libGDHL_gt_HeroGenericCameraShakeHeavyTarget_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroGenericCameraShakeHeavyTarget, c_playerAny, "CameraShakeHeavyTauntingTotemSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Camera Shake Auto Caster

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericCameraShakeAutoCaster_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((DistanceBetweenPoints(EventPlayerEffectUsedPoint(c_effectLocationCasterUnit), CameraGetTarget(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster))) <= 10.0)) {

        CameraShake(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), "Medium", "Shake", 0.0, 0.125, 0.0625);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericCameraShakeAutoCaster_Init () {

    libGDHL_gt_HeroGenericCameraShakeAutoCaster = TriggerCreate("libGDHL_gt_HeroGenericCameraShakeAutoCaster_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroGenericCameraShakeAutoCaster, c_playerAny, "CameraShakeAutoCasterDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Camera Shake Light Caster

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericCameraShakeLightCaster_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((DistanceBetweenPoints(EventPlayerEffectUsedPoint(c_effectLocationCasterUnit), CameraGetTarget(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster))) <= 10.0)) {

        CameraShake(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), "Light", "Shake", 0.1, 0.2, 0.3);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericCameraShakeLightCaster_Init () {

    libGDHL_gt_HeroGenericCameraShakeLightCaster = TriggerCreate("libGDHL_gt_HeroGenericCameraShakeLightCaster_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroGenericCameraShakeLightCaster, c_playerAny, "CameraShakeLightCasterDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Camera Shake Medium Caster

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericCameraShakeMediumCaster_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((DistanceBetweenPoints(EventPlayerEffectUsedPoint(c_effectLocationCasterUnit), CameraGetTarget(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster))) <= 10.0)) {

        CameraShake(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), "Medium", "Shake", 0.1, 0.2, 0.3);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericCameraShakeMediumCaster_Init () {

    libGDHL_gt_HeroGenericCameraShakeMediumCaster = TriggerCreate("libGDHL_gt_HeroGenericCameraShakeMediumCaster_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroGenericCameraShakeMediumCaster, c_playerAny, "CameraShakeMediumCasterDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Camera Shake Heavy Caster

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericCameraShakeHeavyCaster_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((DistanceBetweenPoints(EventPlayerEffectUsedPoint(c_effectLocationCasterUnit), CameraGetTarget(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster))) <= 10.0)) {

        CameraShake(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), "Heavy", "Shake", 0.1, 0.2, 0.3);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericCameraShakeHeavyCaster_Init () {

    libGDHL_gt_HeroGenericCameraShakeHeavyCaster = TriggerCreate("libGDHL_gt_HeroGenericCameraShakeHeavyCaster_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroGenericCameraShakeHeavyCaster, c_playerAny, "CameraShakeHeavyCasterDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero Generic - Speed Ribbon Controller

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericSpeedRibbonController_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitTypeTestAttribute(UnitGetType(lv_unit), c_unitAttributeHeroic) == true))) {

            return false;

        }



        if (!((EventUnitBehaviorChange() != c_unitBehaviorChangeCreate))) {

            return false;

        }



        if (!((EventUnitBehaviorChange() != c_unitBehaviorChangeDestroy))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_SendActorMessageToUnit(lv_unit, "Signal SpeedRibbonCheck");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericSpeedRibbonController_Init () {

    libGDHL_gt_HeroGenericSpeedRibbonController = TriggerCreate("libGDHL_gt_HeroGenericSpeedRibbonController_Func");

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroGenericSpeedRibbonController, null, c_behaviorCategoryFast, c_unitBehaviorChangeAny);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroGenericSpeedRibbonController, null, c_behaviorCategorySlow, c_unitBehaviorChangeAny);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroGenericSpeedRibbonController, null, c_behaviorCategoryPushOrPull, c_unitBehaviorChangeAny);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroGenericSpeedRibbonController, null, c_behaviorCategoryTimeStop, c_unitBehaviorChangeAny);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero Generic - Slow FX Controller

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericSlowFXController_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitTypeTestAttribute(UnitGetType(lv_unit), c_unitAttributeHeroic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_SendActorMessageToUnit(lv_unit, "Signal StormSlowCheck");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericSlowFXController_Init () {

    libGDHL_gt_HeroGenericSlowFXController = TriggerCreate("libGDHL_gt_HeroGenericSlowFXController_Func");

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroGenericSlowFXController, null, c_behaviorCategorySlow, c_unitBehaviorChangeAny);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroGenericSlowFXController, null, c_behaviorCategoryPushOrPull, c_unitBehaviorChangeAny);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Reveal Cloaked Periodic Damage Source

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericRevealCloakedPeriodicDamageSource_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(EventPlayerEffectUsedUnitLaunch(), "PeriodicDamageRevealSourceCloakedRevealer", EventPlayerEffectUsedUnitImpact(), 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericRevealCloakedPeriodicDamageSource_Init () {

    libGDHL_gt_HeroGenericRevealCloakedPeriodicDamageSource = TriggerCreate("libGDHL_gt_HeroGenericRevealCloakedPeriodicDamageSource_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroGenericRevealCloakedPeriodicDamageSource, c_playerAny, "PeriodicDamageRevealSourceApplyCloakedRevealerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Reveal Cloaked One-Off Damage Source

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericRevealCloakedOneOffDamageSource_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(EventPlayerEffectUsedUnitLaunch(), "OneOffDamageRevealSourceCloakedRevealer", EventPlayerEffectUsedUnitImpact(), 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericRevealCloakedOneOffDamageSource_Init () {

    libGDHL_gt_HeroGenericRevealCloakedOneOffDamageSource = TriggerCreate("libGDHL_gt_HeroGenericRevealCloakedOneOffDamageSource_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroGenericRevealCloakedOneOffDamageSource, c_playerAny, "OneOffDamageRevealSourceApplyCloakedRevealerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Generic - Super Stealth Activate/Deactivate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGenericSuperStealthActivateDeactivate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventUnitBehaviorChange() == c_unitBehaviorChangeActivate)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(lv_player, libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_SuperCloakOverlay.StormCutscene", EventUnitBehavior());

    }

    else {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(lv_player, "Cutscenes\\GameUI_SuperCloakOverlay.StormCutscene", EventUnitBehavior());

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGenericSuperStealthActivateDeactivate_Init () {

    libGDHL_gt_HeroGenericSuperStealthActivateDeactivate = TriggerCreate("libGDHL_gt_HeroGenericSuperStealthActivateDeactivate_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroGenericSuperStealthActivateDeactivate, null, "HeroGenericStationaryExtraStealthActive", c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroGenericSuperStealthActivateDeactivate, null, "HeroGenericStationaryExtraStealthActive", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - All - Hero Respec

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAllHeroRespec_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_thrall;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroRespecsTalentsPlayer();

    lv_thrall = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(libGame_gv_players[lv_player].lv_heroUnit, "ResetQuestMinimums", libGame_gv_players[lv_player].lv_heroUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAllHeroRespec_Init () {

    libGDHL_gt_HeroAllHeroRespec = TriggerCreate("libGDHL_gt_HeroAllHeroRespec_Func");

    libGame_gf_HeroRespecsTalents(libGDHL_gt_HeroAllHeroRespec);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hearthstone - Teleport

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HearthstoneTeleport_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_hearthstonePlayer;

    unit lv_hearthstoneUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_hearthstonePlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_hearthstoneUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    UIAlert("HearthstoneUsed", lv_hearthstonePlayer, StringToText(""), null);

    libGame_gf_SendEventHeroPortedBackToTown(lv_hearthstonePlayer, lv_hearthstoneUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HearthstoneTeleport_Init () {

    libGDHL_gt_HearthstoneTeleport = TriggerCreate("libGDHL_gt_HearthstoneTeleport_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HearthstoneTeleport, c_playerAny, "HearthstoneTeleport");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hearthstone - Channeling Buff - On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HearthstoneChannelingBuffOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_hearthstoneUnit;

    int lv_hearthstonePlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_hearthstoneUnit = EventUnit();

    lv_hearthstonePlayer = UnitGetOwner(lv_hearthstoneUnit);



    // Conditions

    if (testConds) {

        if (!((lv_hearthstonePlayer > 0))) {

            return false;

        }



        if (!((lv_hearthstonePlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libUIUI_gf_PingPlayerStartsHearthStonePing(lv_hearthstonePlayer, UnitGetPosition(lv_hearthstoneUnit));

    libSond_gf_HeroVOHeroBeginsHearthing(lv_hearthstonePlayer);

    libUIUI_gf_UIPartyFrameHeroHearthstoneStart(lv_hearthstonePlayer, lv_hearthstoneUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HearthstoneChannelingBuffOn_Init () {

    libGDHL_gt_HearthstoneChannelingBuffOn = TriggerCreate("libGDHL_gt_HearthstoneChannelingBuffOn_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HearthstoneChannelingBuffOn, null, "HearthstoneChannelingBuff", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hearthstone - Channeling Buff - Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HearthstoneChannelingBuffOff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_hearthstoneUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_hearthstoneUnit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    libUIUI_gf_PingCancelPlayersHearthStonePing(UnitGetOwner(lv_hearthstoneUnit));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HearthstoneChannelingBuffOff_Init () {

    libGDHL_gt_HearthstoneChannelingBuffOff = TriggerCreate("libGDHL_gt_HearthstoneChannelingBuffOff_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HearthstoneChannelingBuffOff, null, "HearthstoneChannelingBuff", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hearthstone - Channeling Buff - Canceled

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HearthstoneChannelingBuffCanceled_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_hearthstoneUnit;

    int lv_hearthstonePlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_hearthstoneUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_hearthstonePlayer = UnitGetOwner(lv_hearthstoneUnit);



    // Actions

    if (!runActions) {

        return true;

    }



    PingDestroy(libUIUI_gv_ping_PlayerHearth[lv_hearthstonePlayer]);

    SoundPlayOnUnitForPlayer(SoundLink("Gen_Hearthstone_Teleport_Fizzle", -1), lv_hearthstonePlayer, PlayerGroupSingle(lv_hearthstonePlayer), lv_hearthstoneUnit, 0.0, 100.0, 0.0);

    libUIUI_gf_UIPartyFrameHeroHearthstoneFizzle(lv_hearthstonePlayer, lv_hearthstoneUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HearthstoneChannelingBuffCanceled_Init () {

    libGDHL_gt_HearthstoneChannelingBuffCanceled = TriggerCreate("libGDHL_gt_HearthstoneChannelingBuffCanceled_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HearthstoneChannelingBuffCanceled, c_playerAny, "HearthstoneChannelingBuffCancelDummyModifyUnit");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Heroic Summons - Unit Gains Heroic Summon Behavior

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroicSummonsUnitGainsHeroicSummonBehavior_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_summonedUnit;

    unit lv_casterUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = UnitGetOwner(EventUnit());

    lv_casterUnit = libGame_gv_players[lv_player].lv_heroUnit;

    lv_summonedUnit = EventUnit();

    libGDHL_gf_HeroicSummonsApplySummonedUnitTalentMonitor(lv_casterUnit, lv_summonedUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroicSummonsUnitGainsHeroicSummonBehavior_Init () {

    libGDHL_gt_HeroicSummonsUnitGainsHeroicSummonBehavior = TriggerCreate("libGDHL_gt_HeroicSummonsUnitGainsHeroicSummonBehavior_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroicSummonsUnitGainsHeroicSummonBehavior, null, "HeroicSummon", c_unitBehaviorChangeIncrease);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Deep Tunnel Ping

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurDeepTunnelPing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_abathurPlayer;

    playergroup lv_alliedPlayers;

    point lv_location;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_abathurPlayer = UnitGetOwner(EventUnit());

    lv_alliedPlayers = PlayerGroupEmpty();

    lv_location = EventUnitTargetPoint();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((TimerGetRemaining(libUIUI_gv_pingInputSuppressionTimer[lv_abathurPlayer]) > 0.0)) {

        return true;

    }



    if ((TimerGetRemaining(libUIUI_gv_pingLockoutTimer[lv_abathurPlayer]) > 0.0)) {

        return true;

    }



    libUIUI_gf_PingIncrementPingCountAndManageTimersForPlayer(lv_abathurPlayer);

    lv_alliedPlayers = libGame_gf_PlayersOnTeamHeroes(libGame_gf_TeamNumberOfPlayer(lv_abathurPlayer), false);

    libNtve_gf_CreatePingFacingAngleWithType(lv_alliedPlayers, "DehakaBrushStalkerShrubClusterModelMiniMap", lv_location, Color(0.00, 5.49, 73.33), 3.0, 270.0, -1, -1);

    if ((libGame_gv_players[lv_abathurPlayer].lv_activeVehicle != null)) {

        UnitCreateEffectPoint(libGame_gv_players[lv_abathurPlayer].lv_activeVehicle, "DehakaBrushstalkerDummyPing", lv_location);

    }

    else {

        UnitCreateEffectPoint(libGame_gv_players[lv_abathurPlayer].lv_heroUnit, "DehakaBrushstalkerDummyPing", lv_location);

    }

    TextExpressionSetToken("Param/Expression/lib_GDHL_0B78F471", "A", UnitTypeGetName(UnitGetType(libGame_gv_players[lv_abathurPlayer].lv_heroUnit)));

    TextTagCreate(TextExpressionAssemble("Param/Expression/lib_GDHL_0B78F471"), 24, lv_location, 2.0, true, false, libGame_gf_PlayersOnTeamHeroes(libGame_gf_TeamNumberOfPlayer(lv_abathurPlayer), false));

    TextTagSetTime(TextTagLastCreated(), c_textTagTimeDuration, 3.5);

    libGDHL_gv_abathurDeepTunnelPings[lv_abathurPlayer] = PingLastCreated();

    PingSetScale(PingLastCreated(), 0.2);

    if ((TimerGetRemaining(libGDHL_gv_abathurDeepTunnelPingTextLockoutTimer[lv_abathurPlayer]) > 0.0)) {

    }

    else {

        TextExpressionSetToken("Param/Expression/lib_GDHL_602BD783", "A", StringExternal("Param/Value/lib_GDHL_719F971E"));

        UIDisplayMessage(lv_alliedPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_602BD783"));

        TimerStart(libGDHL_gv_abathurDeepTunnelPingTextLockoutTimer[lv_abathurPlayer], 10.0, false, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurDeepTunnelPing_Init () {

    libGDHL_gt_HeroAbathurDeepTunnelPing = TriggerCreate("libGDHL_gt_HeroAbathurDeepTunnelPing_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurDeepTunnelPing, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroAbathurDeepTunnelPing, null, AbilityCommand("AbathurDeepTunnel", 0), c_abilEffectStageCast, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Abathur Exits Transport

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurAbathurExitsTransport_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroExitingTransportPlayerExiting();

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "HeroAbathur"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((libGame_gv_players[lv_player].lv_activeVehicle != null)) {

        lv_unit = libGame_gv_players[lv_player].lv_activeVehicle;

        libUIUI_gf_UIHeroConsoleSetUpForPlayer(lv_unit, lv_player);

        libUIUI_gf_HeroConsoleUnitStatusBarsSetUnitForBars(lv_unit, lv_player);

        UnitStatusBarOverride(lv_unit, c_unitStatusGroupAll);

        UnitClearSelection(lv_player);

        UnitSelect(lv_unit, lv_player, true);

        libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_unit);

        libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    }

    else {

        UnitClearSelection(lv_player);

        UnitSelect(libGame_gv_players[lv_player].lv_heroUnit, lv_player, true);

        libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurAbathurExitsTransport_Init () {

    libGDHL_gt_HeroAbathurAbathurExitsTransport = TriggerCreate("libGDHL_gt_HeroAbathurAbathurExitsTransport_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurAbathurExitsTransport, false);

    libGame_gf_HeroExitedTransport(libGDHL_gt_HeroAbathurAbathurExitsTransport);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Symbiote

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurSymbiote_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_abathur;

    int lv_abathurPlayer;

    unit lv_symbioteHost;

    int lv_symbioteHostPlayer;

    string lv_symbioteAbilityCooldownLink;

    string lv_toxicNestAbilityCooldownLink;

    fixed lv_spikeBurstRange;

    fixed lv_symbioteFacing;

    bool lv_symbioteFacingTriggerEnabled;

    int lv_i;



    // Automatic Variable Declarations

    const int auto28C78E78_ae = libCore_gv_bALMaxPlayers;

    const int auto28C78E78_ai = 1;



    // Variable Initialization

    lv_symbioteAbilityCooldownLink = "";

    lv_toxicNestAbilityCooldownLink = "";



    // Actions

    if (!runActions) {

        return true;

    }



    lv_abathur = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    if ((UnitIsAlive(lv_abathur) == true)) {

        lv_abathurPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

        if ((libGame_gv_afk_UseAFKSystem == true)) {

            libGame_gf_AfkResetWarningTimerForPlayer(lv_abathurPlayer);

        }



        if ((libGame_gv_afk_PlayerStartingIdle[lv_abathurPlayer] == true)) {

            libGame_gv_afk_PlayerStartingIdle[lv_abathurPlayer] = false;

        }



        UnitSetFacing(libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 315.0, 0.0);

        lv_symbioteHost = EventPlayerEffectUsedUnit(c_effectUnitTarget);

        lv_symbioteHostPlayer = UnitGetOwner(lv_symbioteHost);

        lv_symbioteAbilityCooldownLink = CatalogFieldValueGet(c_gameCatalogAbil, "AbathurSymbiote", "Cost[" + IntToString(0) + "].Cooldown.Link", lv_abathurPlayer);

        lv_toxicNestAbilityCooldownLink = CatalogFieldValueGet(c_gameCatalogAbil, "AbathurToxicNest", "Cost[" + IntToString(0) + "].Cooldown.Link", lv_abathurPlayer);

        libNtve_gf_CreateUnitsWithDefaultFacing(1, "AbathurSymbiote", 0, lv_abathurPlayer, UnitGetPosition(lv_symbioteHost), lv_abathur);

        libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer] = UnitLastCreated();

        AIAddPlayerUnit(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer]);

        UnitCreateEffectUnit(lv_symbioteHost, "SymbioteActorLink", libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer]);

        UnitCreateEffectUnit(lv_symbioteHost, "AbathurSymbioteApplySuperStealthController", libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer]);

        UnitCreateEffectUnit(lv_symbioteHost, "AbathurSymbioteApplyStealthController", libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer]);

        UnitCreateEffectUnit(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer], "SymbiotePropertyLink", lv_symbioteHost);

        SoundPlayForPlayer(SoundLink("Abathur_Symbiote_Screen_Launch", -1), lv_abathurPlayer, PlayerGroupSingle(lv_abathurPlayer), 100.0, 0.0);

        SoundPlayForPlayer(SoundLink("Abathur_Symbiote_Screen_Loop", -1), lv_abathurPlayer, PlayerGroupSingle(lv_abathurPlayer), 100.0, 0.0);

        libGDHL_gv_heroAbathurSymbioteScreenSound[lv_abathurPlayer] = SoundLastPlayed();

        libGDHL_gf_SendEventAbathurSymbiote(lv_abathurPlayer, libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer], lv_symbioteHost);

        if ((UnitBehaviorCount(lv_abathur, "PressurizedGlandsCarryBehavior") == 1)) {

            lv_spikeBurstRange = (CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "SpikeBurstPressurizedGlandsDamageSearch", "AreaArray[" + IntToString(0) + "].Radius", lv_abathurPlayer) + UnitGetPropertyFixed(lv_symbioteHost, c_unitPropRadius, c_unitPropCurrent));

            CatalogFieldValueSetFixed(c_gameCatalogActor, "SymbioteSpikeBurstRangeSplat", "Scale", lv_abathurPlayer, (lv_spikeBurstRange * libGDHL_gv_heroAbathurSpikeBurstSplatScalar));

        }

        else {

            lv_spikeBurstRange = (CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "AbathurSymbioteSpikeBurstDamageSearch", "AreaArray[" + IntToString(0) + "].Radius", lv_abathurPlayer) + UnitGetPropertyFixed(lv_symbioteHost, c_unitPropRadius, c_unitPropCurrent));

            CatalogFieldValueSetFixed(c_gameCatalogActor, "SymbioteSpikeBurstRangeSplat", "Scale", lv_abathurPlayer, (lv_spikeBurstRange * libGDHL_gv_heroAbathurSpikeBurstSplatScalar));

        }

        SoundPlayForPlayer(SoundLink("AbathurHero_Symbiote", -1), lv_abathurPlayer, PlayerGroupSingle(UnitGetOwner(lv_symbioteHost)), 100.0, 0.0);

        UnitSelect(libGame_gv_players[lv_abathurPlayer].lv_heroUnit, lv_abathurPlayer, false);

        UnitSelect(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer], lv_abathurPlayer, true);

        UnitSelect(libGame_gv_players[lv_abathurPlayer].lv_heroUnit, lv_abathurPlayer, true);

        if ((libGDHL_gv_heroAbathurSymbioteDontLockCameraforCutscene == false)) {

            libGame_gv_players[lv_abathurPlayer].lv_cameraForcedLock = true;

            libGame_gv_players[lv_abathurPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer]);

            libGame_gf_CameraUpdateCameraForPlayer(lv_abathurPlayer);

        }



        libGDHL_gv_heroAbathurSymbioteEventAdded[lv_abathurPlayer] = true;

        libGDHL_gv_heroAbathurSymbioteLookAt[lv_abathurPlayer] = UnitGetPosition(lv_symbioteHost);

        libGDHL_gv_heroAbathurSymbioteActive[lv_abathurPlayer] = true;

        libNtve_gf_MakeUnitFacePoint(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer], PointWithOffsetPolar(UnitGetPosition(lv_symbioteHost), 1.0, -90.0), 2.0);

        while ((UnitIsAlive(lv_symbioteHost) == true) && (UnitBehaviorCount(lv_symbioteHost, "AbathurSymbioteHostBehavior") >= 1) && (UnitGetOwner(lv_symbioteHost) == lv_symbioteHostPlayer)) {

            if ((DistanceBetweenPoints(UnitGetPosition(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer]), UnitGetPosition(lv_symbioteHost)) >= 4.0)) {

                UnitSetPosition(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer], UnitGetPosition(lv_symbioteHost), false);

            }

            else {

                UnitSetPosition(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer], UnitGetPosition(lv_symbioteHost), true);

            }

            if ((UnitFilterMatch(lv_symbioteHost, lv_abathurPlayer, UnitFilter(0, (1 << (c_targetFilterStasis - 32)), 0, 0)) == true)) {

                if ((UnitHasBehavior2(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer], "AbathurSymbioteAbilityDisabler") == false)) {

                    UnitBehaviorAdd(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer], "AbathurSymbioteAbilityDisabler", lv_abathur, 1);

                }



            }

            else {

                if ((UnitHasBehavior2(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer], "AbathurSymbioteAbilityDisabler") == true)) {

                    UnitCreateEffectUnit(lv_abathur, "AbathurSymbioteRemoveAbilityDisabler", libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer]);

                }



            }

            Wait(0.0625, c_timeGame);

        }

        UnitModifyCooldown(lv_abathur, lv_symbioteAbilityCooldownLink, 4.0, c_cooldownOperationSet);

        UnitModifyCooldown(lv_abathur, lv_toxicNestAbilityCooldownLink, 0.5, c_cooldownOperationSet);

        libGame_gv_players[lv_abathurPlayer].lv_cameraForcedLock = false;

        libGame_gv_players[lv_abathurPlayer].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[lv_abathurPlayer].lv_heroUnitGroup;

        libGame_gf_CameraUpdateCameraForPlayer(lv_abathurPlayer);

        AIRemovePlayerUnit(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer]);

        UnitKill(libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer]);

        libGDHL_gv_heroAbathurSymbioteUnit[lv_abathurPlayer] = null;

        UnitBehaviorRemove(lv_abathur, "AssumingDirectControlBehavior", 1);

        lv_i = 1;

        for ( ; ( (auto28C78E78_ai >= 0 && lv_i <= auto28C78E78_ae) || (auto28C78E78_ai < 0 && lv_i >= auto28C78E78_ae) ) ; lv_i += auto28C78E78_ai ) {

            if ((libGDHL_gv_heroAbathurSymbioteActive[lv_i] == true)) {

                lv_symbioteFacingTriggerEnabled = true;

                break;

            }



        }

        libGDHL_gv_heroAbathurSymbioteActive[lv_abathurPlayer] = false;

        SoundStop(libGDHL_gv_heroAbathurSymbioteScreenSound[lv_abathurPlayer], false);

        SoundPlayForPlayer(SoundLink("Abathur_Symbiote_Screen_End", -1), lv_abathurPlayer, PlayerGroupSingle(lv_abathurPlayer), 100.0, 0.0);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurSymbiote_Init () {

    libGDHL_gt_HeroAbathurSymbiote = TriggerCreate("libGDHL_gt_HeroAbathurSymbiote_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurSymbiote, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurSymbiote, c_playerAny, "SymbioteApplyHostBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Carapace Regenerative Microbes

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_abathur;

    int lv_abathurPlayer;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_abathurPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_abathur = libGame_gv_players[lv_abathurPlayer].lv_heroUnit;

    UnitCreateEffectUnit(lv_abathur, "RegenerativeMicrobesApplyBehavior", EventPlayerEffectUsedUnit(c_effectUnitTarget));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes_Init () {

    libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes = TriggerCreate("libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes, c_playerAny, "CarapaceEvolutionApplyShield");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes, c_playerAny, "CarapaceEvolutionApplyShieldHivemind");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes, c_playerAny, "AbathurSymbioteApplyCarapaceNetworkedCarapaceTalentShield");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes, c_playerAny, "AbathurSymbioteApplyCarapaceNetworkedCarapaceHivemindTalentShield");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Symbiote Screen Effect

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurSymbioteScreenEffect_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventUnitBehaviorChange() == c_unitBehaviorChangeActivate)) {

        DialogControlFadeTransparency(libUIUI_gv_fullscreenOverlaysPanel.lv_abathurSymbioteOverlay, PlayerGroupSingle(lv_player), 0.5, 0.0);

        UISetSelectionTypeEnabled(PlayerGroupSingle(lv_player), c_localSelectionTypeWorldPanelHero, false);

    }

    else {

        DialogControlFadeTransparency(libUIUI_gv_fullscreenOverlaysPanel.lv_abathurSymbioteOverlay, PlayerGroupSingle(lv_player), 0.5, 100.0);

        UISetSelectionTypeEnabled(PlayerGroupSingle(lv_player), c_localSelectionTypeWorldPanelHero, true);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurSymbioteScreenEffect_Init () {

    libGDHL_gt_HeroAbathurSymbioteScreenEffect = TriggerCreate("libGDHL_gt_HeroAbathurSymbioteScreenEffect_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurSymbioteScreenEffect, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroAbathurSymbioteScreenEffect, null, "AssumingDirectControlBehavior", c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroAbathurSymbioteScreenEffect, null, "AssumingDirectControlBehavior", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Stab Facer

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurStabFacer_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_MakeUnitFacePoint(EventPlayerEffectUsedUnit(c_effectUnitCaster), EventPlayerEffectUsedPoint(c_effectLocationTargetPoint), 0.0625);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurStabFacer_Init () {

    libGDHL_gt_HeroAbathurStabFacer = TriggerCreate("libGDHL_gt_HeroAbathurStabFacer_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurStabFacer, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurStabFacer, c_playerAny, "StabCreateSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Volatile Mutation (Ultimate Evolution)

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurVolatileMutationUltimateEvolution_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(UnitGetOwner(lv_unit), "AbathurVolatileMutation") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_unit, "AbathurVolatileMutation", lv_unit, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurVolatileMutationUltimateEvolution_Init () {

    libGDHL_gt_HeroAbathurVolatileMutationUltimateEvolution = TriggerCreate("libGDHL_gt_HeroAbathurVolatileMutationUltimateEvolution_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurVolatileMutationUltimateEvolution, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroAbathurVolatileMutationUltimateEvolution, null, "UltimateEvolutionBuild", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Ultimate Evolution - Start Control

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurUltimateEvolutionStartControl_Func (bool testConds, bool runActions) {

    // Variable Declarations

    string lv_abilLink;

    string lv_cooldownLink;

    unit lv_abathur;

    int lv_abathurPlayer;

    int lv_abathurLevel;

    unit lv_ultimateEvolutionUnit;

    fixed lv_multiplier;

    fixed lv_lifeofTarget;

    int lv_itHeroicAbil;

    unit lv_target;

    int lv_ownerofTarget;

    string lv_typeofCopiedUnit;



    // Automatic Variable Declarations

    int auto763D98BE_n;

    int auto763D98BE_i;



    // Variable Initialization

    lv_cooldownLink = "";

    lv_abathur = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_abathurPlayer = UnitGetOwner(lv_abathur);

    lv_abathurLevel = libGame_gf_GetCustomValueLevelofHeroUnit(lv_abathur);

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_ownerofTarget = UnitGetOwner(lv_target);

    lv_typeofCopiedUnit = UnitGetType(EventPlayerEffectUsedUnit(c_effectUnitTarget));



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_target, "UltimateEvolutionInvalidTarget") == true)) {

        UnitCreateEffectUnit(lv_abathur, "AbathurUltimateEvolutionInterruptModifyCooldown", lv_abathur);

        UnitBehaviorRemove(lv_abathur, "AbathurUltimateEvolutionVehicleCasterBehavior", 1);

        UnitBehaviorRemove(lv_abathur, "AssumingDirectControlBehavior", 1);

        return true;

    }



    if ((UnitIsAlive(lv_abathur) == false)) {

        UnitBehaviorRemove(lv_abathur, "AssumingDirectControlBehavior", 1);

        return true;

    }



    lv_multiplier = ((UnitLevel(libGame_gv_players[lv_abathurPlayer].lv_heroUnit) * 150.0) + 0.0);

    lv_lifeofTarget = UnitGetPropertyFixed(lv_target, c_unitPropLifeMax, c_unitPropNormal);

    PlayerSetSkin(lv_abathurPlayer, libGame_gv_players[UnitGetOwner(lv_target)].lv_skinData.lv_skinID);

    if ((UnitGetOwner(lv_target) <= libCore_gv_bALMaxPlayers) && (libGame_gv_players[UnitGetOwner(lv_target)].lv_activeVehicle != null)) {

        libNtve_gf_CreateUnitsWithDefaultFacing(1, lv_typeofCopiedUnit, 0, lv_abathurPlayer, UnitTypePlacementFromPoint(lv_typeofCopiedUnit, lv_abathurPlayer, UnitGetPosition(libGame_gv_players[lv_ownerofTarget].lv_activeVehicle), 35.0), lv_abathur);

    }

    else {

        libNtve_gf_CreateUnitsWithDefaultFacing(1, lv_typeofCopiedUnit, 0, lv_abathurPlayer, UnitTypePlacementFromPoint(lv_typeofCopiedUnit, lv_abathurPlayer, UnitGetPosition(lv_target), 35.0), lv_abathur);

    }

    lv_ultimateEvolutionUnit = UnitLastCreated();

    AIRemovePlayerUnit(lv_abathur);

    AIAddPlayerUnit(lv_ultimateEvolutionUnit);

    libUIUI_gf_UIUnitStatusFramesUpdateUnitStatusFramesForUnit(lv_abathurPlayer, lv_ultimateEvolutionUnit);

    libUIUI_gf_InitPathingLines(lv_ultimateEvolutionUnit, lv_abathurPlayer);

    UnitSetPropertyFixed(lv_ultimateEvolutionUnit, c_unitPropLife, UnitGetPropertyFixed(lv_ultimateEvolutionUnit, c_unitPropLifeMax, c_unitPropCurrent));

    UnitBehaviorAdd(lv_ultimateEvolutionUnit, "UltimateEvolutionBuild", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

    UnitBehaviorAdd(lv_ultimateEvolutionUnit, "UltimateEvolutionBuff", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

    UnitBehaviorAdd(lv_ultimateEvolutionUnit, "SuppressGenericDeath", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

    UnitBehaviorAdd(lv_ultimateEvolutionUnit, "SuppressGenericDeathRagdoll", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

    UnitBehaviorAdd(lv_ultimateEvolutionUnit, "AbathurUltimateEvolutionControlBehavior", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

    UnitBehaviorAdd(lv_ultimateEvolutionUnit, "EarnsXP", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

    UnitBehaviorAdd(lv_ultimateEvolutionUnit, "UltimateEvolutionThreatIncrease", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

    UnitBehaviorAdd(lv_ultimateEvolutionUnit, "UltimateEvolutionPlaystyleAdjustment", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

    UnitBehaviorAdd(lv_ultimateEvolutionUnit, "CapturePointAllowed", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

    SoundPlayForPlayer(SoundLink("Abathur_UltimateEvolution_Screen_Loop", -1), lv_abathurPlayer, PlayerGroupSingle(lv_abathurPlayer), 100.0, 0.0);

    UnitXPAddXP(lv_ultimateEvolutionUnit, null, libCore_gf_GetTotalXPForLevel(lv_abathurLevel));

    CatalogFieldValueSet(c_gameCatalogAbil, "Mount", "CastIntroTime[" + IntToString(0) + "]", UnitGetOwner(lv_abathur), CatalogFieldValueGet(c_gameCatalogAbil, "Mount", "CastIntroTime[" + IntToString(0) + "]", 0));

    if ((libMapM_gf_MapMechanicExistsOnMap("BlackheartsBay") == true)) {

        UnitBehaviorAdd(lv_ultimateEvolutionUnit, "MapMechanicStack", lv_ultimateEvolutionUnit, UnitBehaviorCount(lv_abathur, "MapMechanicStack"));

    }



    libGame_gv_players[lv_abathurPlayer].lv_activeVehicle = lv_ultimateEvolutionUnit;

    UnitSetPropertyFixed(libGame_gv_players[lv_abathurPlayer].lv_activeVehicle, c_unitPropLevel, lv_abathurLevel);

    libUIUI_gf_UIHeroConsoleSetUpForPlayer(lv_ultimateEvolutionUnit, lv_abathurPlayer);

    libUIUI_gf_HeroConsoleUnitStatusBarsSetUnitForBars(lv_ultimateEvolutionUnit, lv_abathurPlayer);

    UnitStatusBarOverride(lv_ultimateEvolutionUnit, c_unitStatusGroupAll);

    libGame_gf_RemoveLevelUpHeroStatsForPlayer(UnitGetType(lv_ultimateEvolutionUnit), lv_abathurPlayer);

    auto763D98BE_n = lv_abathurLevel;

    for (auto763D98BE_i = 1; auto763D98BE_i <= auto763D98BE_n; auto763D98BE_i += 1) {

        libGame_gf_ApplyLevelUpHeroStatsForHeroSingleLevel(lv_ultimateEvolutionUnit);

    }

    UnitClearSelection(lv_abathurPlayer);

    UnitSelect(lv_ultimateEvolutionUnit, lv_abathurPlayer, true);

    libGame_gv_players[lv_abathurPlayer].lv_cameraPlayerHasControl = false;

    libGame_gv_players[lv_abathurPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_ultimateEvolutionUnit);

    libGame_gf_CameraUpdateCameraForPlayer(lv_abathurPlayer);

    libGame_gv_players[lv_abathurPlayer].lv_cameraPlayerHasControl = true;

    libGame_gf_CameraUpdateCameraForPlayer(lv_abathurPlayer);

    libGDHL_gf_SendEventAbathurUltimateEvolutionHeroCopied(lv_abathurPlayer, lv_ownerofTarget);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurUltimateEvolutionStartControl_Init () {

    libGDHL_gt_HeroAbathurUltimateEvolutionStartControl = TriggerCreate("libGDHL_gt_HeroAbathurUltimateEvolutionStartControl_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionStartControl, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurUltimateEvolutionStartControl, c_playerAny, "UltimateEvolutionCastDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Ultimate Evolution - Stop Control

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurUltimateEvolutionStopControl_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_ultimateEvolutionUnit;

    int lv_ownerPlayer;

    int lv_itPlayer;

    int lv_teamNumberofOwner;

    bool lv_vehicleTransferCase;

    string lv_abilLink;

    string lv_cooldownLink;

    fixed lv_cooldownValue;



    // Automatic Variable Declarations

    playergroup autoC3EC0AA3_g;

    int autoC3EC0AA3_var;

    playergroup auto6824BDCC_g;

    int auto6824BDCC_var;



    // Variable Initialization

    lv_vehicleTransferCase = true;

    lv_cooldownLink = "";



    // Conditions

    if (testConds) {

        if (!((libGDHL_gv_heroAbathurStopControlIgnoredforPlayer[UnitGetOwner(EventUnit())] == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_ultimateEvolutionUnit = EventUnit();

    lv_ownerPlayer = UnitGetOwner(lv_ultimateEvolutionUnit);

    lv_teamNumberofOwner = libGame_gf_TeamNumberOfPlayer(lv_ownerPlayer);

    AIRemovePlayerUnit(lv_ultimateEvolutionUnit);

    AIAddPlayerUnit(libGame_gv_players[lv_ownerPlayer].lv_heroUnit);

    autoC3EC0AA3_g = libGame_gv_teams[lv_teamNumberofOwner].lv_teamPlayerGroup;

    autoC3EC0AA3_var = -1;

    while (true) {

        	autoC3EC0AA3_var = PlayerGroupNextPlayer(autoC3EC0AA3_g, autoC3EC0AA3_var);

        	if (autoC3EC0AA3_var<0) { break; }

        	if ((libGame_gv_players[autoC3EC0AA3_var].lv_activeVehicle == lv_ultimateEvolutionUnit)) {

            libGDHL_gf_SendEventAbathurUltimateEvolutionEnded(lv_ownerPlayer, lv_ultimateEvolutionUnit);

            libUIUI_gf_UIUnitStatusFramesRemoveUnitfromUnitStatusFrameHookup(lv_ownerPlayer, lv_ultimateEvolutionUnit);

            UnitBehaviorRemove(libGame_gv_players[autoC3EC0AA3_var].lv_heroUnit, "AbathurUltimateEvolutionVehicleCasterBehavior", 1);

            libGame_gv_players[autoC3EC0AA3_var].lv_activeVehicle = null;

            lv_vehicleTransferCase = false;

            break;

        }



    }

    if ((lv_vehicleTransferCase == true)) {

        UnitBehaviorRemove(libGame_gv_players[lv_ownerPlayer].lv_heroUnit, "AssumingDirectControlBehavior", 1);

        return true;

    }



    auto6824BDCC_g = libGame_gv_teams[lv_teamNumberofOwner].lv_teamPlayerGroup;

    auto6824BDCC_var = -1;

    while (true) {

        	auto6824BDCC_var = PlayerGroupNextPlayer(auto6824BDCC_g, auto6824BDCC_var);

        	if (auto6824BDCC_var<0) { break; }

        	if ((UnitGetType(libGame_gv_players[auto6824BDCC_var].lv_heroUnit) == "HeroAbathur")) {

            PlayerSetSkin(auto6824BDCC_var, libGame_gv_players[auto6824BDCC_var].lv_skinData.lv_skinID);

            UnitSelect(lv_ultimateEvolutionUnit, auto6824BDCC_var, false);

            UnitSelect(libGame_gv_players[auto6824BDCC_var].lv_heroUnit, auto6824BDCC_var, true);

            Wait(0.5, c_timeGame);

            UnitBehaviorRemove(libGame_gv_players[lv_ownerPlayer].lv_heroUnit, "AssumingDirectControlBehavior", 1);

            libGame_gv_players[auto6824BDCC_var].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[auto6824BDCC_var].lv_heroUnitGroup;

            libGame_gf_CameraUpdateCameraForPlayer(auto6824BDCC_var);

            libUIUI_gf_UIHeroConsoleSetUpForPlayer(libGame_gv_players[auto6824BDCC_var].lv_heroUnit, auto6824BDCC_var);

            libUIUI_gf_HeroConsoleUnitStatusBarsSetUnitForBars(libGame_gv_players[auto6824BDCC_var].lv_heroUnit, auto6824BDCC_var);

            lv_abilLink = "AbathurUltimateEvolution";

            lv_cooldownLink = CatalogFieldValueGet(c_gameCatalogAbil, lv_abilLink, "Cost[" + IntToString(0) + "].Cooldown.Link", auto6824BDCC_var);

            lv_cooldownValue = CatalogFieldValueGetAsInt(c_gameCatalogAbil, lv_abilLink, "Cost[" + IntToString(0) + "].Cooldown.TimeUse", auto6824BDCC_var);

            UnitModifyCooldown(libGame_gv_players[auto6824BDCC_var].lv_heroUnit, lv_cooldownLink, lv_cooldownValue, c_cooldownOperationSet);

            if ((libMapM_gf_MapMechanicExistsOnMap("BlackheartsBay") == true) && (UnitBehaviorCount(lv_ultimateEvolutionUnit, "MapMechanicStack") > UnitBehaviorCount(libGame_gv_players[auto6824BDCC_var].lv_heroUnit, "MapMechanicStack"))) {

                UnitBehaviorAdd(libGame_gv_players[auto6824BDCC_var].lv_heroUnit, "MapMechanicStack", libGame_gv_players[auto6824BDCC_var].lv_heroUnit, (UnitBehaviorCount(lv_ultimateEvolutionUnit, "MapMechanicStack") - UnitBehaviorCount(libGame_gv_players[auto6824BDCC_var].lv_heroUnit, "MapMechanicStack")));

            }



            break;

        }



    }

    libGame_gv_players[lv_ownerPlayer].lv_heroUsesAnnouncementAlias = false;

    libGame_gv_players[lv_ownerPlayer].lv_heroAnnouncementAliasText = null;

    libGame_gv_players[lv_ownerPlayer].lv_heroAnnouncementAliasIcon = null;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurUltimateEvolutionStopControl_Init () {

    libGDHL_gt_HeroAbathurUltimateEvolutionStopControl = TriggerCreate("libGDHL_gt_HeroAbathurUltimateEvolutionStopControl_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionStopControl, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroAbathurUltimateEvolutionStopControl, null, "AbathurUltimateEvolutionControlBehavior", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Ultimate Evolution - Game End

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itPlayer;



    // Automatic Variable Declarations

    playergroup autoD9D8C168_g;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    autoD9D8C168_g = PlayerGroupAll();

    lv_itPlayer = -1;

    while (true) {

        	lv_itPlayer = PlayerGroupNextPlayer(autoD9D8C168_g, lv_itPlayer);

        	if (lv_itPlayer<0) { break; }

        	UnitBehaviorRemove(libGame_gv_players[lv_itPlayer].lv_activeVehicle, "AbathurUltimateEvolutionControlBehavior", 1);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd_Init () {

    libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd = TriggerCreate("libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd, UnitRefFromVariable("libGame_gv_teams[libGame_gv_teamOrderIndex_C].lv_core"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd, UnitRefFromVariable("libGame_gv_teams[libGame_gv_teamChaosIndex_C].lv_core"));

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Ultimate Evolution - Unit Dead

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurUltimateEvolutionUnitDead_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_targetPlayer;

    playergroup lv_allyPlayerGroup;

    playergroup lv_enemyPlayerGroup;

    playergroup lv_awardGroup;

    int lv_itPlayer;

    int lv_ownerPlayer;

    unit lv_itCleanupTargets;

    playergroup lv_killingGroup;



    // Automatic Variable Declarations

    playergroup autoC8F5471D_g;



    // Variable Initialization

    lv_unit = EventUnit();

    lv_targetPlayer = UnitGetOwner(EventUnit());

    lv_allyPlayerGroup = PlayerGroupEmpty();

    lv_enemyPlayerGroup = PlayerGroupEmpty();

    lv_awardGroup = PlayerGroupEmpty();

    lv_killingGroup = PlayerGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((UnitTypeTestAttribute(UnitGetType(lv_unit), c_unitAttributeHeroic) == true))) {

            return false;

        }



        if (!(((UnitHasBehavior2(lv_unit, "UltimateEvolutionBuff") == true) || (UnitHasBehavior2(lv_unit, "UltimateEvolutionBuild") == true)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_MakeUnitUncommandable(lv_unit, true);

    libGame_gf_ShareUnshareVisionOfAlliesForPlayer(true, lv_targetPlayer);

    lv_allyPlayerGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_targetPlayer);

    autoC8F5471D_g = lv_allyPlayerGroup;

    lv_itPlayer = -1;

    while (true) {

        	lv_itPlayer = PlayerGroupNextPlayer(autoC8F5471D_g, lv_itPlayer);

        	if (lv_itPlayer<0) { break; }

        	PlayerSetAlliance(lv_itPlayer, c_allianceIdSeekHelp, lv_targetPlayer, true);

        PlayerSetAlliance(lv_itPlayer, c_allianceIdGiveHelp, lv_targetPlayer, true);

    }

    UnitBehaviorRemove(lv_unit, "UltimateEvolutionBuff", 1);

    UnitRemove(lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurUltimateEvolutionUnitDead_Init () {

    libGDHL_gt_HeroAbathurUltimateEvolutionUnitDead = TriggerCreate("libGDHL_gt_HeroAbathurUltimateEvolutionUnitDead_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurUltimateEvolutionUnitDead, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroAbathurUltimateEvolutionUnitDead, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Locust Spawned

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurLocustSpawned_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_locustUnit;

    unit lv_effectSource;

    int lv_locustUnitOwner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_locustUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_effectSource = EventPlayerEffectUsedUnit(c_effectUnitSource);

    lv_locustUnitOwner = UnitGetOwner(lv_locustUnit);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitGroupAdd(libGame_gv_players[lv_locustUnitOwner].lv_summonedUnitGroup, lv_locustUnit);

    UnitSetFacing(lv_locustUnit, UnitGetFacing(lv_effectSource), 0.0);

    UnitIssueOrder(lv_locustUnit, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_effectSource), 1.5, UnitGetFacing(lv_effectSource))), c_orderQueueAddToFront);

    Wait(0.5, c_timeGame);

    if ((UnitIsValid(lv_locustUnit) == true) && (lv_locustUnitOwner > 0) && (lv_locustUnitOwner <= libCore_gv_bALMaxPlayers)) {

        UnitCreateAIThinkTree(lv_locustUnit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurLocustSpawned_Init () {

    libGDHL_gt_HeroAbathurLocustSpawned = TriggerCreate("libGDHL_gt_HeroAbathurLocustSpawned_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurLocustSpawned, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurLocustSpawned, c_playerAny, "LocustSpawnLanerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Locust Nest Set Facing

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurLocustNestSetFacing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnitCreatedUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_MakeUnitFacePoint(lv_unit, UnitGetPosition(libGame_gv_teams[libGame_gf_EnemyTeamNumberOfPlayer(UnitGetOwner(lv_unit))].lv_core), 0.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurLocustNestSetFacing_Init () {

    libGDHL_gt_HeroAbathurLocustNestSetFacing = TriggerCreate("libGDHL_gt_HeroAbathurLocustNestSetFacing_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurLocustNestSetFacing, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroAbathurLocustNestSetFacing, null, "AbathurLocustNest", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Locust Nest Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurLocustNestCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto6D59DEB0_g;

    int auto6D59DEB0_u;

    unit auto6D59DEB0_var;



    // Variable Initialization

    lv_player = UnitGetOwner(EventUnitCreatedUnit());



    // Actions

    if (!runActions) {

        return true;

    }



    auto6D59DEB0_g = UnitGroupFilter("AbathurLocustNest", lv_player, libGame_gv_players[lv_player].lv_summonedUnitGroup, UnitFilter(0, 0, 0, (1 << (c_targetFilterDead - 32))), 0);

    auto6D59DEB0_u = UnitGroupCount(auto6D59DEB0_g, c_unitCountAll);

    for (;; auto6D59DEB0_u -= 1) {

        auto6D59DEB0_var = UnitGroupUnitFromEnd(auto6D59DEB0_g, auto6D59DEB0_u);

        if (auto6D59DEB0_var == null) { break; }

        UnitKill(auto6D59DEB0_var);

    }

    UnitGroupAdd(libGame_gv_players[lv_player].lv_summonedUnitGroup, EventUnitCreatedUnit());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurLocustNestCast_Init () {

    libGDHL_gt_HeroAbathurLocustNestCast = TriggerCreate("libGDHL_gt_HeroAbathurLocustNestCast_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurLocustNestCast, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroAbathurLocustNestCast, null, "AbathurLocustNest", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Symbiote Hivemind (Single Target)

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurSymbioteHivemindSingleTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unitgroup lv_possibleSymbioteHivemindHosts;

    int lv_numSymbioteHivemindHosts;

    libGDHL_gs_SymbioteHivemind lv_symbioteHivemind;

    unit lv_symbioteHivemindHost;

    unit lv_itPossibleSymbioteHivemindHost;

    unit lv_mainSymbioteHost;

    unit lv_mainSymbiote;

    int lv_abathurPlayer;

    int lv_hivemindSymbioteHostCounter;



    // Automatic Variable Declarations

    unitgroup autoFE393C25_g;

    int autoFE393C25_u;



    // Variable Initialization

    lv_possibleSymbioteHivemindHosts = UnitGroupEmpty();



    // Actions

    if (!runActions) {

        return true;

    }



    lv_abathurPlayer = libGDHL_gf_AbathurSymbioteAbathurPlayer();

    lv_mainSymbioteHost = libGDHL_gf_AbathurSymbioteTarget();

    lv_mainSymbiote = libGDHL_gf_AbathurSymbioteUnit();

    while ((UnitIsAlive(lv_mainSymbiote) == true) && (UnitIsAlive(lv_mainSymbioteHost) == true)) {

        if ((PlayerHasTalent(libGDHL_gf_AbathurSymbioteAbathurPlayer(), "AbathurSymbioteHivemind") == true)) {

            lv_possibleSymbioteHivemindHosts = libNtve_gf_UnitsInRegionWithAllianceToPlayerMatchingCondition(null, "", "", lv_abathurPlayer, c_unitAllianceAllyExcludeSelf, RegionCircle(UnitGetPosition(lv_mainSymbioteHost), libGDHL_gv_abathurSymbioteHivemindCastRange_C), libCore_gv_filtersHeroicAllyandnotImmuneToFriendlyAbilitiesorBenign, (libGDHL_gv_abathurSymbioteHivemindMaxHosts_C + 1));

            autoFE393C25_g = lv_possibleSymbioteHivemindHosts;

            autoFE393C25_u = UnitGroupCount(autoFE393C25_g, c_unitCountAll);

            for (;; autoFE393C25_u -= 1) {

                lv_itPossibleSymbioteHivemindHost = UnitGroupUnitFromEnd(autoFE393C25_g, autoFE393C25_u);

                if (lv_itPossibleSymbioteHivemindHost == null) { break; }

                if (((lv_itPossibleSymbioteHivemindHost == lv_mainSymbioteHost) || (UnitHasBehavior2(lv_itPossibleSymbioteHivemindHost, "Dead") == true))) {

                    UnitGroupRemove(lv_possibleSymbioteHivemindHosts, lv_itPossibleSymbioteHivemindHost);

                    break;

                }



            }

            if ((UnitGroupCount(lv_possibleSymbioteHivemindHosts, c_unitCountAlive) <= 0)) {

                Wait(0.0625, c_timeGame);

                continue;

            }



            lv_symbioteHivemindHost = UnitGroupClosestToPoint(lv_possibleSymbioteHivemindHosts, UnitGetPosition(lv_mainSymbioteHost));

            libNtve_gf_CreateUnitsWithDefaultFacing(1, "AbathurSymbiote", 0, lv_abathurPlayer, UnitGetPosition(lv_symbioteHivemindHost), libGame_gv_players[lv_abathurPlayer].lv_heroUnit);

            lv_symbioteHivemind.lv_symbioteUnit = UnitLastCreated();

            lv_symbioteHivemind.lv_hostUnit = lv_symbioteHivemindHost;

            UnitDestroyAIThinkTree(lv_symbioteHivemind.lv_symbioteUnit);

            UnitCreateEffectUnit(lv_symbioteHivemind.lv_hostUnit, "SymbioteActorLink", lv_symbioteHivemind.lv_symbioteUnit);

            UnitCreateEffectUnit(lv_symbioteHivemind.lv_symbioteUnit, "SymbiotePropertyLink", lv_symbioteHivemindHost);

            UnitCreateEffectUnit(lv_mainSymbiote, "AbathurSymbioteHivemindCreateUnitLinkDummyA", lv_symbioteHivemind.lv_hostUnit);

            ActorSend(libNtve_gf_MainActorofUnit(lv_symbioteHivemind.lv_symbioteUnit), "Signal HivemindScale");

            ActorSend(libNtve_gf_MainActorofUnit(lv_mainSymbiote), "Signal HivemindActive");

            UnitBehaviorAdd(lv_symbioteHivemind.lv_hostUnit, "AbathurSymbioteHostBehavior", lv_symbioteHivemind.lv_symbioteUnit, 1);

            UnitBehaviorAdd(lv_symbioteHivemind.lv_symbioteUnit, "AbathurSymbioteHivemind", lv_symbioteHivemind.lv_symbioteUnit, 1);

            UnitBehaviorAdd(lv_symbioteHivemind.lv_hostUnit, "AbathurSymbioteHivemind", lv_symbioteHivemind.lv_hostUnit, 1);

            if ((PlayerHasTalent(lv_abathurPlayer, "AbathurSymbioteAdrenalOverload") == true)) {

                UnitBehaviorAdd(lv_symbioteHivemind.lv_hostUnit, "AbathurAdrenalOverload", lv_symbioteHivemind.lv_symbioteUnit, 1);

            }



            SoundPlayForPlayer(SoundLink("AbathurHero_Symbiote", -1), lv_abathurPlayer, PlayerGroupSingle(UnitGetOwner(lv_itPossibleSymbioteHivemindHost)), 100.0, 0.0);

            while ((UnitIsAlive(lv_symbioteHivemind.lv_hostUnit) == true) && (UnitHasBehavior2(lv_symbioteHivemind.lv_hostUnit, "Dead") == false) && (UnitIsAlive(lv_symbioteHivemind.lv_symbioteUnit) == true) && (UnitFilterMatch(lv_symbioteHivemind.lv_hostUnit, lv_abathurPlayer, UnitFilter(0, 0, 0, (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)))) == true)) {

                if ((UnitIsAlive(lv_mainSymbiote) == true) && (UnitIsAlive(lv_mainSymbioteHost) == true)) {

                    if ((DistanceBetweenPoints(UnitGetPosition(lv_mainSymbioteHost), UnitGetPosition(lv_symbioteHivemind.lv_hostUnit)) >= libGDHL_gv_abathurSymbioteHivemindMaxRange_C)) {

                        ActorSend(libNtve_gf_MainActorofUnit(lv_mainSymbiote), "Signal RemoveStabCursors");

                        UnitBehaviorRemove(lv_symbioteHivemind.lv_hostUnit, "AbathurSymbioteHostBehavior", 1);

                        UnitBehaviorRemove(lv_symbioteHivemind.lv_hostUnit, "AbathurSymbioteHivemind", 1);

                        UnitBehaviorRemove(lv_symbioteHivemind.lv_symbioteUnit, "AbathurSymbioteHivemind", 1);

                        UnitKill(lv_symbioteHivemind.lv_symbioteUnit);

                        lv_symbioteHivemind.lv_symbioteUnit = null;

                        lv_symbioteHivemind.lv_hostUnit = null;

                        Wait(0.0625, c_timeGame);

                        continue;

                    }



                    if ((DistanceBetweenPoints(UnitGetPosition(lv_symbioteHivemind.lv_symbioteUnit), UnitGetPosition(lv_symbioteHivemind.lv_hostUnit)) >= 4.0)) {

                        UnitSetPosition(lv_symbioteHivemind.lv_symbioteUnit, UnitGetPosition(lv_symbioteHivemind.lv_hostUnit), false);

                    }

                    else {

                        UnitSetPosition(lv_symbioteHivemind.lv_symbioteUnit, UnitGetPosition(lv_symbioteHivemind.lv_hostUnit), true);

                    }

                    Wait(0.0625, c_timeGame);

                }

                else {

                    UnitBehaviorRemove(lv_symbioteHivemind.lv_hostUnit, "AbathurSymbioteHostBehavior", 1);

                    UnitBehaviorRemove(lv_symbioteHivemind.lv_hostUnit, "AbathurSymbioteHivemind", 1);

                    UnitBehaviorRemove(lv_symbioteHivemind.lv_symbioteUnit, "AbathurSymbioteHivemind", 1);

                    UnitKill(lv_symbioteHivemind.lv_symbioteUnit);

                    lv_symbioteHivemind.lv_symbioteUnit = null;

                    lv_symbioteHivemind.lv_hostUnit = null;

                }

            }

            if ((UnitIsAlive(lv_symbioteHivemind.lv_symbioteUnit) == true)) {

                ActorSend(libNtve_gf_MainActorofUnit(lv_mainSymbiote), "Signal HivemindInActive");

                UnitBehaviorRemove(lv_symbioteHivemind.lv_hostUnit, "AbathurSymbioteHostBehavior", 1);

                UnitBehaviorRemove(lv_symbioteHivemind.lv_hostUnit, "AbathurSymbioteHivemind", 1);

                UnitBehaviorRemove(lv_symbioteHivemind.lv_symbioteUnit, "AbathurSymbioteHivemind", 1);

                UnitKill(lv_symbioteHivemind.lv_symbioteUnit);

                lv_symbioteHivemind.lv_symbioteUnit = null;

                lv_symbioteHivemind.lv_hostUnit = null;

            }



        }



        Wait(0.0625, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurSymbioteHivemindSingleTarget_Init () {

    libGDHL_gt_HeroAbathurSymbioteHivemindSingleTarget = TriggerCreate("libGDHL_gt_HeroAbathurSymbioteHivemindSingleTarget_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurSymbioteHivemindSingleTarget, false);

    libGDHL_gf_AbathurSymbiote(libGDHL_gt_HeroAbathurSymbioteHivemindSingleTarget);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Symbiote Hivemind Stab

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurSymbioteHivemindStab_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    unitgroup lv_symbioteHivemindHats;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_symbioteHivemindHats = UnitGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(UnitGetOwner(lv_unit), "AbathurSymbioteHivemind") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_symbioteHivemindHats = UnitGroup("AbathurSymbiote", UnitGetOwner(lv_unit), RegionCircle(UnitGetPosition(lv_unit), libGDHL_gv_abathurSymbioteHivemindMaxRange_C), UnitFilter(0, 0, (1 << c_targetFilterAlly) | (1 << c_targetFilterNeutral) | (1 << c_targetFilterEnemy) | (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), (libGDHL_gv_abathurSymbioteHivemindMaxHosts_C + 1));

    UnitGroupIssueOrder(lv_symbioteHivemindHats, OrderTargetingPoint(AbilityCommand("AbathurSymbioteStab", 0), EventUnitTargetPoint()), c_orderQueueReplace);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurSymbioteHivemindStab_Init () {

    libGDHL_gt_HeroAbathurSymbioteHivemindStab = TriggerCreate("libGDHL_gt_HeroAbathurSymbioteHivemindStab_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurSymbioteHivemindStab, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroAbathurSymbioteHivemindStab, null, AbilityCommand("AbathurSymbioteStab", 0), c_abilEffectStageCast, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Monstrosity Deep Tunnel Ping

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurMonstrosityDeepTunnelPing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_monstrosity;

    int lv_abathurPlayer;

    playergroup lv_alliedPlayers;

    point lv_location;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_monstrosity = EventUnit();

    lv_abathurPlayer = UnitGetOwner(EventUnit());

    lv_alliedPlayers = PlayerGroupEmpty();

    lv_location = EventUnitTargetPoint();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((TimerGetRemaining(libUIUI_gv_pingInputSuppressionTimer[lv_abathurPlayer]) > 0.0)) {

        return true;

    }



    if ((TimerGetRemaining(libUIUI_gv_pingLockoutTimer[lv_abathurPlayer]) > 0.0)) {

        return true;

    }



    libUIUI_gf_PingIncrementPingCountAndManageTimersForPlayer(lv_abathurPlayer);

    lv_alliedPlayers = libGame_gf_PlayersOnTeamHeroes(libGame_gf_TeamNumberOfPlayer(lv_abathurPlayer), false);

    libNtve_gf_CreatePingFacingAngleWithType(lv_alliedPlayers, "DehakaBrushStalkerShrubClusterModelMiniMap", lv_location, Color(0.00, 5.49, 73.33), 3.0, 270.0, -1, -1);

    UnitCreateEffectPoint(lv_monstrosity, "DehakaBrushstalkerDummyPing", lv_location);

    TextExpressionSetToken("Param/Expression/lib_GDHL_D54A5ECE", "A", UnitTypeGetName(UnitGetType(lv_monstrosity)));

    TextTagCreate(TextExpressionAssemble("Param/Expression/lib_GDHL_D54A5ECE"), 24, lv_location, 2.0, true, false, libGame_gf_PlayersOnTeamHeroes(libGame_gf_TeamNumberOfPlayer(lv_abathurPlayer), false));

    TextTagSetTime(TextTagLastCreated(), c_textTagTimeDuration, 3.0);

    libGDHL_gv_abathurMonstrosityDeepTunnelPings[lv_abathurPlayer] = PingLastCreated();

    PingSetScale(PingLastCreated(), 0.2);

    if ((TimerGetRemaining(libGDHL_gv_abathurMonstrosityDeepTunnelPingTextLockoutTimer[lv_abathurPlayer]) > 0.0)) {

    }

    else {

        TextExpressionSetToken("Param/Expression/lib_GDHL_09007EC9", "A", StringExternal("Param/Value/lib_GDHL_2804A2A6"));

        UIDisplayMessage(lv_alliedPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_09007EC9"));

        TimerStart(libGDHL_gv_abathurMonstrosityDeepTunnelPingTextLockoutTimer[lv_abathurPlayer], 10.0, false, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurMonstrosityDeepTunnelPing_Init () {

    libGDHL_gt_HeroAbathurMonstrosityDeepTunnelPing = TriggerCreate("libGDHL_gt_HeroAbathurMonstrosityDeepTunnelPing_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityDeepTunnelPing, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroAbathurMonstrosityDeepTunnelPing, null, AbilityCommand("AbathurMonstrosityDeepTunnel", 0), c_abilEffectStageCast, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Monstrosity - Add Minion Kill Stacks

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurMonstrosityAddMinionKillStacks_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_abathurPlayer;

    unit lv_symbiote;

    int lv_evolutionCompleteStacks;

    unit lv_minionUnit;

    int lv_minionAbsorbedTokenCount;



    // Automatic Variable Declarations

    unitgroup auto2B15A152_g;

    int auto2B15A152_u;

    unit auto2B15A152_var;

    unitgroup auto7E23C28A_g;

    int auto7E23C28A_u;

    unit auto7E23C28A_var;



    // Variable Initialization

    lv_abathurPlayer = libGame_gf_SpecialCaseUnitParticipatedInNPCTakedownPlayerParticipant();



    // Actions

    if (!runActions) {

        return true;

    }



    lv_minionUnit = libGame_gf_SpecialCaseUnitParticipatedInNPCTakedownMinion();

    if (((UnitTypeTestAttribute(UnitGetType(lv_minionUnit), c_unitAttributeSummoned) == true) || (UnitTypeTestAttribute(UnitGetType(lv_minionUnit), c_unitAttributeStructure) == true) || (UnitTypeTestAttribute(UnitGetType(lv_minionUnit), c_unitAttributeCreep) == true) || (UnitTypeTestAttribute(UnitGetType(lv_minionUnit), c_unitAttributeMerc) == true) || (UnitTypeTestAttribute(UnitGetType(lv_minionUnit), c_unitAttributeMapBoss) == true))) {

        return true;

    }



    if ((UnitGetType(libGame_gv_players[lv_abathurPlayer].lv_heroUnit) == "HeroAbathur") && (PlayerHasTalent(lv_abathurPlayer, "AbathurHeroicAbilityEvolveMonstrosity") == true) && ((UnitTypeTestAttribute(UnitGetType(lv_minionUnit), c_unitAttributeMinion) == true) || (UnitTypeTestAttribute(UnitGetType(lv_minionUnit), c_unitAttributeMerc) == true))) {

        if ((TechTreeUnitCount(lv_abathurPlayer, "AbathurSymbiote", c_techCountCompleteOnly) > 0)) {

            auto2B15A152_g = UnitGroup("AbathurSymbiote", lv_abathurPlayer, RegionPlayableMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

            auto2B15A152_u = UnitGroupCount(auto2B15A152_g, c_unitCountAll);

            for (;; auto2B15A152_u -= 1) {

                auto2B15A152_var = UnitGroupUnitFromEnd(auto2B15A152_g, auto2B15A152_u);

                if (auto2B15A152_var == null) { break; }

                UnitBehaviorAdd(auto2B15A152_var, "AbathurEvolveMonstrosityAbathurStack", auto2B15A152_var, 1);

                lv_symbiote = auto2B15A152_var;

            }

        }



        auto7E23C28A_g = UnitGroupSearch("AbathurEvolvedMonstrosity", lv_abathurPlayer, UnitGetPosition(libGame_gf_SpecialCaseUnitParticipatedInNPCTakedownMinion()), libCore_gv_bALXPRadius, UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

        auto7E23C28A_u = UnitGroupCount(auto7E23C28A_g, c_unitCountAll);

        for (;; auto7E23C28A_u -= 1) {

            auto7E23C28A_var = UnitGroupUnitFromEnd(auto7E23C28A_g, auto7E23C28A_u);

            if (auto7E23C28A_var == null) { break; }

            UnitBehaviorAdd(auto7E23C28A_var, "AbathurEvolveMonstrosityHealthStack", auto7E23C28A_var, 1);

            lv_minionAbsorbedTokenCount = UnitBehaviorCount(auto7E23C28A_var, "AbathurEvolveMonstrosityMinionAbsorbedToken");

            lv_minionAbsorbedTokenCount = (lv_minionAbsorbedTokenCount+1);

            UnitSetTokenCount(auto7E23C28A_var, "AbathurEvolveMonstrosityMinionAbsorbedToken", lv_minionAbsorbedTokenCount, auto7E23C28A_var);

            UnitCreateEffectUnit(auto7E23C28A_var, "EvolveMonstrosityHealthStackHealer", auto7E23C28A_var);

            UnitBehaviorAdd(libGame_gv_players[lv_abathurPlayer].lv_heroUnit, "AbathurEvolveMonstrosityAbathurStack", libGame_gv_players[lv_abathurPlayer].lv_heroUnit, 1);

            UnitBehaviorSetDurationRemaining(libGame_gv_players[lv_abathurPlayer].lv_heroUnit, "AbathurEvolveMonstrosityAbathurStack", UnitBehaviorDuration(auto7E23C28A_var, "AbathurEvolveMonstrosity"));

            UnitBehaviorSetDurationRemaining(lv_symbiote, "AbathurEvolveMonstrosityAbathurStack", UnitBehaviorDuration(auto7E23C28A_var, "AbathurEvolveMonstrosity"));

            if ((PlayerHasTalent(lv_abathurPlayer, "AbathurMasteryEvolutionComplete") == true)) {

                lv_evolutionCompleteStacks = PlayerScoreValueGetAsInt(lv_abathurPlayer, "EvolutionCompleteStacks");

                lv_evolutionCompleteStacks += 1;

                PlayerScoreValueSetFromInt(lv_abathurPlayer, "EvolutionCompleteStacks", lv_evolutionCompleteStacks);

            }



        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurMonstrosityAddMinionKillStacks_Init () {

    libGDHL_gt_HeroAbathurMonstrosityAddMinionKillStacks = TriggerCreate("libGDHL_gt_HeroAbathurMonstrosityAddMinionKillStacks_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityAddMinionKillStacks, false);

    libGame_gf_SpecialCaseParticipatedInNPCTakedown(libGDHL_gt_HeroAbathurMonstrosityAddMinionKillStacks);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Monstrosity - Symbiote end - Hook to AI

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurMonstrositySymbioteendHooktoAI_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    libUIUI_gf_HeroConsoleUnitStatusBarsSetUnitForBars(libGame_gv_players[lv_player].lv_heroUnit, lv_player);

    UnitSelect(libGDHL_gv_abathurMonstrosity[lv_player], lv_player, false);

    if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_player) == true)) {

        UnitCreateAIThinkTree(libGDHL_gv_abathurMonstrosity[lv_player]);

    }



    libUIUI_gf_UIHeroConsoleSetUpForPlayer(libGame_gv_players[lv_player].lv_heroUnit, lv_player);

    Wait(0.0625, c_timeGame);

    if ((UnitIsAlive(libGame_gv_players[lv_player].lv_heroUnit) == false)) {

        libUIUI_gf_HeroConsoleUnitStatusBarsUpdateStunDeathBar("Dead", lv_player);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurMonstrositySymbioteendHooktoAI_Init () {

    libGDHL_gt_HeroAbathurMonstrositySymbioteendHooktoAI = TriggerCreate("libGDHL_gt_HeroAbathurMonstrositySymbioteendHooktoAI_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurMonstrositySymbioteendHooktoAI, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurMonstrositySymbioteendHooktoAI, c_playerAny, "AbathurSymbioteEvolveMonstrosityFinalDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Monstrosity - Deselected - Hook to AI

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurMonstrosityDeselectedHooktoAI_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());



    // Actions

    if (!runActions) {

        return true;

    }



    if ((lv_player <= libCore_gv_bALMaxEnginePlayerCount) && (libGDHL_gv_abathurMonstrosity[lv_player] == EventUnit())) {

        UnitCreateAIThinkTree(libGDHL_gv_abathurMonstrosity[lv_player]);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurMonstrosityDeselectedHooktoAI_Init () {

    libGDHL_gt_HeroAbathurMonstrosityDeselectedHooktoAI = TriggerCreate("libGDHL_gt_HeroAbathurMonstrosityDeselectedHooktoAI_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityDeselectedHooktoAI, false);

    TriggerAddEventUnitSelected(libGDHL_gt_HeroAbathurMonstrosityDeselectedHooktoAI, null, c_playerAny, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Monstrosity - Unhook AI

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurMonstrosityUnhookAI_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_ownerOfTarget;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_ownerOfTarget = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitSelect(lv_unit, UnitGetOwner(lv_unit), true);

    UnitDestroyAIThinkTree(lv_unit);

    libUIUI_gf_UIHeroConsoleSetUpForPlayer(lv_unit, lv_ownerOfTarget);

    libUIUI_gf_HeroConsoleUnitStatusBarsSetUnitForBars(lv_unit, lv_ownerOfTarget);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurMonstrosityUnhookAI_Init () {

    libGDHL_gt_HeroAbathurMonstrosityUnhookAI = TriggerCreate("libGDHL_gt_HeroAbathurMonstrosityUnhookAI_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityUnhookAI, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurMonstrosityUnhookAI, c_playerAny, "AbathurSymbioteEvolveMonstrosityInitialDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Monstrosity - Kill Initial Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurMonstrosityKillInitialTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_unit, "StormSuicide", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurMonstrosityKillInitialTarget_Init () {

    libGDHL_gt_HeroAbathurMonstrosityKillInitialTarget = TriggerCreate("libGDHL_gt_HeroAbathurMonstrosityKillInitialTarget_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityKillInitialTarget, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroAbathurMonstrosityKillInitialTarget, null, "AbathurEvolveMonstrosityTargetCollisionSuppresser", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Monstrosity - Add Symbiote Stacks

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurMonstrosityAddSymbioteStacks_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    unitgroup auto6B09D94A_g;

    int auto6B09D94A_u;

    unit auto6B09D94A_var;



    // Variable Initialization

    lv_unit = EventUnitCreatedUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "AbathurSymbiote"))) {

            return false;

        }



        if (!((TechTreeUnitCount(UnitGetOwner(lv_unit), "AbathurEvolvedMonstrosity", c_techCountCompleteOnly) > 0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto6B09D94A_g = UnitGroup("AbathurEvolvedMonstrosity", UnitGetOwner(lv_unit), RegionPlayableMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto6B09D94A_u = UnitGroupCount(auto6B09D94A_g, c_unitCountAll);

    for (;; auto6B09D94A_u -= 1) {

        auto6B09D94A_var = UnitGroupUnitFromEnd(auto6B09D94A_g, auto6B09D94A_u);

        if (auto6B09D94A_var == null) { break; }

        UnitBehaviorAdd(lv_unit, "AbathurEvolveMonstrosityAbathurStack", lv_unit, UnitBehaviorCount(auto6B09D94A_var, "AbathurEvolveMonstrosityMinionAbsorbedToken"));

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurMonstrosityAddSymbioteStacks_Init () {

    libGDHL_gt_HeroAbathurMonstrosityAddSymbioteStacks = TriggerCreate("libGDHL_gt_HeroAbathurMonstrosityAddSymbioteStacks_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurMonstrosityAddSymbioteStacks, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroAbathurMonstrosityAddSymbioteStacks, null, null, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Symbioted Monstrosity Symbioted

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurSymbiotedMonstrositySymbioted_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_deepTunnelCD;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGDHL_gf_AbathurSymbioteTarget()) == "AbathurEvolvedMonstrosity"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_abathurMonstrosity[libGDHL_gf_AbathurSymbioteAbathurPlayer()] = libGDHL_gf_AbathurSymbioteTarget();

    libGDHL_gv_abathurSymbioteMonstrosity[libGDHL_gf_AbathurSymbioteAbathurPlayer()] = libGDHL_gf_AbathurSymbioteUnit();

    UnitBehaviorRemove(libGDHL_gf_AbathurSymbioteUnit(), "AbathurSymbioteSuppressAttack", 1);

    UnitBehaviorAdd(libGDHL_gf_AbathurSymbioteUnit(), "AbathurMonstrosityDeepTunnelCarry", libGDHL_gf_AbathurSymbioteUnit(), 1);

    lv_deepTunnelCD = UnitGetCooldown(libGDHL_gf_AbathurSymbioteTarget(), "Abil/AbathurMonstrosityDeepTunnel");

    UnitModifyCooldown(libGDHL_gf_AbathurSymbioteUnit(), "Abil/AbathurMonstrosityDeepTunnelRedirect", lv_deepTunnelCD, c_cooldownOperationSet);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurSymbiotedMonstrositySymbioted_Init () {

    libGDHL_gt_HeroAbathurSymbiotedMonstrositySymbioted = TriggerCreate("libGDHL_gt_HeroAbathurSymbiotedMonstrositySymbioted_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurSymbiotedMonstrositySymbioted, false);

    libGDHL_gf_AbathurSymbiote(libGDHL_gt_HeroAbathurSymbiotedMonstrositySymbioted);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Abathur - Symbiote Minimap Icon

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAbathurSymbioteMinimapIcon_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_abathur;

    int lv_abathurPlayer;

    unit lv_symbioteHost;

    int lv_symbioteHostPlayer;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_abathur = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    if ((UnitIsAlive(lv_abathur) == true)) {

        lv_abathurPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

        lv_symbioteHost = EventPlayerEffectUsedUnit(c_effectUnitTarget);

        lv_symbioteHostPlayer = UnitGetOwner(lv_symbioteHost);

        if ((UnitTypeTestAttribute(UnitGetType(lv_symbioteHost), c_unitAttributeHeroic) == true) && (UnitGetType(lv_symbioteHost) != "AbathurEvolvedMonstrosity")) {

            CatalogFieldValueModify(c_gameCatalogActor, "AbathurSymbiote", "MinimapUnitStatusFrame", lv_abathurPlayer, "Abathur/AbathurSymbioteMinimapIconHero", c_upgradeOperationSet);

        }

        else if (((UnitTypeTestFlag(UnitGetType(lv_symbioteHost), c_unitFlagTownStructureTownHall) == true))) {

            CatalogFieldValueModify(c_gameCatalogActor, "AbathurSymbiote", "MinimapUnitStatusFrame", lv_abathurPlayer, "Abathur/AbathurSymbioteMinimapIconTownHall", c_upgradeOperationSet);

        }

        else if (((UnitTypeTestFlag(UnitGetType(lv_symbioteHost), c_unitFlagTownStructureCore) == true))) {

            CatalogFieldValueModify(c_gameCatalogActor, "AbathurSymbiote", "MinimapUnitStatusFrame", lv_abathurPlayer, "Abathur/AbathurSymbioteMinimapIconCore", c_upgradeOperationSet);

        }

        else if (((UnitTypeTestFlag(UnitGetType(lv_symbioteHost), c_unitFlagTownStructureMoonwell) == true) || (UnitTypeTestFlag(UnitGetType(lv_symbioteHost), c_unitFlagTownStructureGate) == true) || (UnitTypeTestFlag(UnitGetType(lv_symbioteHost), c_unitFlagTownStructureCannonTower) == true))) {

            CatalogFieldValueModify(c_gameCatalogActor, "AbathurSymbiote", "MinimapUnitStatusFrame", lv_abathurPlayer, "Abathur/AbathurSymbioteMinimapIconStructure", c_upgradeOperationSet);

        }

        else if ((UnitGetType(lv_symbioteHost) == "AbathurEvolvedMonstrosity")) {

            CatalogFieldValueModify(c_gameCatalogActor, "AbathurSymbiote", "MinimapUnitStatusFrame", lv_abathurPlayer, "Abathur/AbathurSymbioteMinimapIconMonstrosity", c_upgradeOperationSet);

        }

        else if ((UnitTypeTestAttribute(UnitGetType(lv_symbioteHost), c_unitAttributeMerc) == true)) {

            CatalogFieldValueModify(c_gameCatalogActor, "AbathurSymbiote", "MinimapUnitStatusFrame", lv_abathurPlayer, "Abathur/AbathurSymbioteMinimapIconMerc", c_upgradeOperationSet);

        }

        else if (((UnitTypeTestAttribute(UnitGetType(lv_symbioteHost), c_unitAttributeMinion) == true) || (UnitTypeTestAttribute(UnitGetType(lv_symbioteHost), c_unitAttributeSummoned) == true) || (UnitTypeTestAttribute(UnitGetType(lv_symbioteHost), c_unitAttributeMerc) != true))) {

            CatalogFieldValueModify(c_gameCatalogActor, "AbathurSymbiote", "MinimapUnitStatusFrame", lv_abathurPlayer, "Abathur/AbathurSymbioteMinimapIconMinion", c_upgradeOperationSet);

        }

    }

    else {

        CatalogFieldValueModify(c_gameCatalogActor, "AbathurSymbiote", "MinimapUnitStatusFrame", lv_abathurPlayer, "", c_upgradeOperationSet);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAbathurSymbioteMinimapIcon_Init () {

    libGDHL_gt_HeroAbathurSymbioteMinimapIcon = TriggerCreate("libGDHL_gt_HeroAbathurSymbioteMinimapIcon_Func");

    TriggerEnable(libGDHL_gt_HeroAbathurSymbioteMinimapIcon, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAbathurSymbioteMinimapIcon, c_playerAny, "SymbioteApplyHostBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Artanis - Protector of Aiur - Hero Takedown Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArtanisProtectorofAiurHeroTakedownProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_artanisPlayer;

    unit lv_artanisUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_artanisPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_artanisUnit = libGame_gv_players[lv_artanisPlayer].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_artanisPlayer >= 1))) {

            return false;

        }



        if (!((lv_artanisPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_artanisPlayer, "ArtanisProtectorOfAiur") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_artanisUnit, "ArtanisProtectorOfAiurAddTakedownsTokenCount", lv_artanisUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArtanisProtectorofAiurHeroTakedownProc_Init () {

    libGDHL_gt_HeroArtanisProtectorofAiurHeroTakedownProc = TriggerCreate("libGDHL_gt_HeroArtanisProtectorofAiurHeroTakedownProc_Func");

    TriggerEnable(libGDHL_gt_HeroArtanisProtectorofAiurHeroTakedownProc, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroArtanisProtectorofAiurHeroTakedownProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Artanis - Blade Dash Phase Prism Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArtanisBladeDashPhasePrismCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((libGDHL_gv_heroArtanisPhasePrismBoolean[lv_player] == false))) {

            return false;

        }



        if (!((lv_player > 0))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitFilterMatch(lv_unit, lv_player, UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)) | (1 << (c_targetFilterOrdersPaused - 32)) | (1 << (c_targetFilterSilenced - 32)))) == true))) {

            return false;

        }



        if (!(((UnitBehaviorCount(lv_unit, "ArtanisBladeDashFirstCaster") == 1) || (UnitBehaviorCount(lv_unit, "ArtanisBladeDashBetweenStrikes") == 1) || (UnitBehaviorCount(lv_unit, "ArtanisBladeDashSecondCaster") == 1) || (UnitBehaviorCount(lv_unit, "ArtanisBladeDashValidity") == 1)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroArtanisPhasePrismBoolean[lv_player] = true;

    UnitCreateEffectPointWithSource(lv_unit, "ArtanisPhasePrismInitialSet", OrderGetTargetPoint(EventUnitOrder()), c_gameCatalogAbil, "ArtanisPhasePrism");

    UnitCreateEffectUnitWithSource(lv_unit, "ArtanisBladeDashPhasePrismModifyCooldown", lv_unit, c_gameCatalogAbil, "ArtanisPhasePrism");

    UnitCreateEffectUnitWithSource(lv_unit, "ArtanisPhasePrismCancelOrder", lv_unit, c_gameCatalogAbil, "ArtanisPhasePrism");

    Wait(0.0625, c_timeGame);

    libGDHL_gv_heroArtanisPhasePrismBoolean[lv_player] = false;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArtanisBladeDashPhasePrismCast_Init () {

    libGDHL_gt_HeroArtanisBladeDashPhasePrismCast = TriggerCreate("libGDHL_gt_HeroArtanisBladeDashPhasePrismCast_Func");

    TriggerEnable(libGDHL_gt_HeroArtanisBladeDashPhasePrismCast, false);

    TriggerAddEventUnitOrder(libGDHL_gt_HeroArtanisBladeDashPhasePrismCast, null, AbilityCommand("ArtanisPhasePrism", 0));

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Artanis - Twin Blades Zealot Charge Targeting

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArtanisTwinBladesZealotChargeTargeting_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    fixed auto93CE00F6_at;



    // Variable Initialization

    lv_unit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(OrderGetTargetUnit(UnitOrder(lv_unit, 0)), "ArtanisTwinBladesChargeTarget", lv_unit, 1);

    libNtve_gf_SendActorMessageToUnit(lv_unit, "AnimBaselineStop");

    auto93CE00F6_at = 0;

    while (!((UnitHasBehavior2(lv_unit, "ArtanisTwinBladesChargeCaster") == false)) && auto93CE00F6_at <= 0.5) {

        Wait(0.0625, c_timeGame);

        auto93CE00F6_at = auto93CE00F6_at + 0.0625;

    }

    libNtve_gf_SendActorMessageToUnit(lv_unit, "AnimBaselineStart");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArtanisTwinBladesZealotChargeTargeting_Init () {

    libGDHL_gt_HeroArtanisTwinBladesZealotChargeTargeting = TriggerCreate("libGDHL_gt_HeroArtanisTwinBladesZealotChargeTargeting_Func");

    TriggerEnable(libGDHL_gt_HeroArtanisTwinBladesZealotChargeTargeting, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroArtanisTwinBladesZealotChargeTargeting, null, "ArtanisTwinBladesChargeCaster", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Artanis - Spear of Adun: Purifier Beam Set Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamSetTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_beamTargetUnit;

    int lv_beamPlayer;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_beamTargetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_beamPlayer = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));

    libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lv_beamPlayer] = lv_beamTargetUnit;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamSetTarget_Init () {

    libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamSetTarget = TriggerCreate("libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamSetTarget_Func");

    TriggerEnable(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamSetTarget, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamSetTarget, c_playerAny, "ArtanisSpearofAdunPurifierBeamApplyTargetingBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Artanis - Spear of Adun: Purifier Beam Unit Created

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamUnitCreated_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnitCreatedUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "ArtanisSpearofAdunPurifierBeamInvisibleTrackingUnit"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroArtanisSpearofAdunPurifierBeamUnit[UnitGetOwner(lv_unit)] = lv_unit;

    libGDHL_gf_HeroArtanisSpearofAdunPurifierBeamAI(EventUnitCreatedUnit(), UnitGetOwner(lv_unit));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamUnitCreated_Init () {

    libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamUnitCreated = TriggerCreate("libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamUnitCreated_Func");

    TriggerEnable(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamUnitCreated, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamUnitCreated, null, null, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Artanis - Spear of Adun: Purifier Beam Redirect Target 2 Electric Boogaloo

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamRedirectTarget2ElectricBoogaloo_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    unit lv_unit;

    fixed lv_timeRemaining;

    unit lv_purifierBeamUnit;

    int lv_owner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = libGame_gf_CheckUnitForAbilityRedirectTarget();

    lv_unit = libGame_gf_CheckUnitForAbilityRedirectUnit();



    // Conditions

    if (testConds) {

        if (!((UnitBehaviorCount(lv_unit, "ArtanisSpearofAdunPurifierBeamTargeting") == 1))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_owner = UnitBehaviorEffectPlayer(lv_unit, "ArtanisSpearofAdunPurifierBeamTargeting", c_effectPlayerCaster, 0);

    lv_timeRemaining = UnitBehaviorDuration(lv_unit, "ArtanisSpearofAdunPurifierBeamTargeting");

    if ((libGame_gf_CheckUnitForAbilityRedirectBoolean() == true)) {

        if ((DistanceBetweenPoints(UnitGetPosition(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamUnit[lv_owner]), UnitGetPosition(lv_unit)) <= 6.0) && ((UnitBehaviorCount(lv_unit, "ArtanisSpearofAdunPurifierBeamTargeting") == 1) && (UnitBehaviorEffectUnit(lv_unit, "ArtanisSpearofAdunPurifierBeamTargeting", c_effectUnitSource, 0) == libGame_gv_players[lv_owner].lv_heroUnit))) {

            libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lv_owner] = lv_target;

        }

        else {

            libGDHL_gv_heroArtanisSpearofAdunPurifierBeamPointOverride[lv_owner] = true;

            libGDHL_gv_heroArtanisSpearofAdunPurifierBeamLastKnownPoint[lv_owner] = libGame_gf_CheckUnitForAbilityRedirectPoint();

        }

    }

    else {

        UnitBehaviorRemove(libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lv_owner], "ArtanisSpearofAdunPurifierBeamTargeting", 1);

        libGDHL_gv_heroArtanisSpearofAdunPurifierBeamTarget[lv_owner] = lv_target;

        UnitBehaviorAdd(lv_target, "ArtanisSpearofAdunPurifierBeamTargeting", libGame_gv_players[lv_owner].lv_heroUnit, 1);

        UnitBehaviorAdd(lv_target, "ArtanisSpearofAdunPurifierBeamRevealer", libGame_gv_players[lv_owner].lv_heroUnit, 1);

        UnitBehaviorSetDurationRemaining(lv_target, "ArtanisSpearofAdunPurifierBeamTargeting", lv_timeRemaining);

        UnitBehaviorSetDurationRemaining(lv_target, "ArtanisSpearofAdunPurifierBeamRevealer", lv_timeRemaining);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamRedirectTarget2ElectricBoogaloo_Init () {

    libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamRedirectTarget2ElectricBoogaloo = TriggerCreate("libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamRedirectTarget2ElectricBoogaloo_Func");

    TriggerEnable(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamRedirectTarget2ElectricBoogaloo, false);

    libGame_gf_CheckUnitForAbilityRedirect(libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamRedirectTarget2ElectricBoogaloo);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Arthas - Anti-Magic Shell - Heal

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArthasAntiMagicShellHeal_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_arthas;

    int lv_arthasPlayer;

    fixed lv_healingAvailable;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_arthas = EventUnit();

    lv_arthasPlayer = UnitGetOwner(lv_arthas);



    // Conditions

    if (testConds) {

        if (!((EventUnitDamageAbsorbed() > 1.0))) {

            return false;

        }



        if (!((UnitIsAlive(lv_arthas) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_healingAvailable = (EventUnitDamageAbsorbed() * libGDHL_gv_heroArthasAntiMagicShellHealingFraction);

    CatalogFieldValueSetFixed(c_gameCatalogEffect, "ArthasAntiMagicShellCreateHealer", "RechargeVitalRate", lv_arthasPlayer, lv_healingAvailable);

    UnitCreateEffectUnit(lv_arthas, "ArthasAntiMagicShellCreateHealer", lv_arthas);

    UnitCreateEffectUnit(EventUnitDamageSourceUnit(), "HeroGenericDummyInterruptDamage", lv_arthas);

    UnitCreateEffectUnit(EventUnitDamageSourceUnit(), "DismountDecloakTargetSet", lv_arthas);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArthasAntiMagicShellHeal_Init () {

    libGDHL_gt_HeroArthasAntiMagicShellHeal = TriggerCreate("libGDHL_gt_HeroArthasAntiMagicShellHeal_Func");

    TriggerEnable(libGDHL_gt_HeroArthasAntiMagicShellHeal, false);

    TriggerAddEventUnitDamageAbsorbed(libGDHL_gt_HeroArthasAntiMagicShellHeal, null, "ArthasAntiMagicShellCaster");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Arthas - Army of the Dead - Legion of Northrend Talent Spawn

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArthasArmyoftheDeadLegionofNorthrendTalentSpawn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "ArthasMasteryLegionOfNorthrendArmyoftheDead") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gf_CalculateSpawnedMinionGoalPoints(lv_player, UnitGetPosition(lv_unit));

    libAIAI_gf_MinionAIStartMinionAI(-1, lv_unit, libGame_gv_spawnedMinionLane, libGame_gv_spawnedMinionFirstWaypointIndex, false, true, false, 0, false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArthasArmyoftheDeadLegionofNorthrendTalentSpawn_Init () {

    libGDHL_gt_HeroArthasArmyoftheDeadLegionofNorthrendTalentSpawn = TriggerCreate("libGDHL_gt_HeroArthasArmyoftheDeadLegionofNorthrendTalentSpawn_Func");

    TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadLegionofNorthrendTalentSpawn, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroArthasArmyoftheDeadLegionofNorthrendTalentSpawn, c_playerAny, "ArthasArmyoftheDeadLegionofNorthrendTalentSpawnSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Arthas - Army of the Dead - NPC Death Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArthasArmyoftheDeadNPCDeathProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_killingPlayer;

    unit lv_minion;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_killingPlayer = libGame_gf_HeroParticipatedInNPCTakedownKillingPlayer();

    lv_minion = libGame_gf_HeroParticipatedInNPCTakedownMinion();

    if ((PlayerHasTalent(lv_killingPlayer, "ArthasHeroicAbilityArmyoftheDead") == true) && (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeSummoned) == false) && (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeStructure) == false) && (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeCreep) == false) && ((UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeMerc) == true) || (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeMinion) == true))) {

        UnitCreateEffectUnit(libGame_gv_players[lv_killingPlayer].lv_heroUnit, "ArthasArmyoftheDeadNPCDeathModifyChargeCooldown", libGame_gv_players[lv_killingPlayer].lv_heroUnit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArthasArmyoftheDeadNPCDeathProc_Init () {

    libGDHL_gt_HeroArthasArmyoftheDeadNPCDeathProc = TriggerCreate("libGDHL_gt_HeroArthasArmyoftheDeadNPCDeathProc_Func");

    TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadNPCDeathProc, false);

    libGame_gf_HeroParticipatedInNPCTakedown(libGDHL_gt_HeroArthasArmyoftheDeadNPCDeathProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Arthas - Army of the Dead - Takedown Death Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArthasArmyoftheDeadTakedownDeathProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_killingPlayer;

    unit lv_minion;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_killingPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    if ((PlayerHasTalent(lv_killingPlayer, "ArthasHeroicAbilityArmyoftheDead") == true)) {

        UnitCreateEffectUnit(libGame_gv_players[lv_killingPlayer].lv_heroUnit, "ArthasArmyoftheDeadTakedownModifyChargeCooldown", libGame_gv_players[lv_killingPlayer].lv_heroUnit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArthasArmyoftheDeadTakedownDeathProc_Init () {

    libGDHL_gt_HeroArthasArmyoftheDeadTakedownDeathProc = TriggerCreate("libGDHL_gt_HeroArthasArmyoftheDeadTakedownDeathProc_Func");

    TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadTakedownDeathProc, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroArthasArmyoftheDeadTakedownDeathProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Arthas - Army of the Dead - Minion AI Takeover (Death)

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverDeath_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup autoF1AE7A91_g;

    int autoF1AE7A91_u;

    unit autoF1AE7A91_var;



    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "HeroArthas"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "ArthasHeroicAbilityArmyoftheDead") == true))) {

            return false;

        }



        if (!((UnitCount("ArthasArmyOfTheDeadGhoul", lv_player, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0) > 0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoF1AE7A91_g = UnitGroup("ArthasArmyOfTheDeadGhoul", lv_player, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    autoF1AE7A91_u = UnitGroupCount(autoF1AE7A91_g, c_unitCountAll);

    for (;; autoF1AE7A91_u -= 1) {

        autoF1AE7A91_var = UnitGroupUnitFromEnd(autoF1AE7A91_g, autoF1AE7A91_u);

        if (autoF1AE7A91_var == null) { break; }

        libGame_gf_CalculateSpawnedMinionGoalPoints(lv_player, UnitGetPosition(autoF1AE7A91_var));

        libAIAI_gf_MinionAIStartMinionAI(-1, autoF1AE7A91_var, libGame_gv_spawnedMinionLane, libGame_gv_spawnedMinionFirstWaypointIndex, false, true, false, 0, false);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverDeath_Init () {

    libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverDeath = TriggerCreate("libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverDeath_Func");

    TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverDeath, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverDeath, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Arthas - Army of the Dead - Minion AI Takeover (Transport)

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverTransport_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto21667AB0_g;

    int auto21667AB0_u;

    unit auto21667AB0_var;



    // Variable Initialization

    lv_player = libGame_gf_HeroEnteredTransportPlayerEntering();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroArthas"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "ArthasHeroicAbilityArmyoftheDead") == true))) {

            return false;

        }



        if (!((UnitCount("ArthasArmyOfTheDeadGhoul", lv_player, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0) > 0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto21667AB0_g = UnitGroup("ArthasArmyOfTheDeadGhoul", lv_player, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto21667AB0_u = UnitGroupCount(auto21667AB0_g, c_unitCountAll);

    for (;; auto21667AB0_u -= 1) {

        auto21667AB0_var = UnitGroupUnitFromEnd(auto21667AB0_g, auto21667AB0_u);

        if (auto21667AB0_var == null) { break; }

        libGame_gf_CalculateSpawnedMinionGoalPoints(lv_player, UnitGetPosition(auto21667AB0_var));

        libAIAI_gf_MinionAIStartMinionAI(-1, auto21667AB0_var, libGame_gv_spawnedMinionLane, libGame_gv_spawnedMinionFirstWaypointIndex, false, true, false, 0, false);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverTransport_Init () {

    libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverTransport = TriggerCreate("libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverTransport_Func");

    TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverTransport, false);

    libGame_gf_HeroEnteredTransport(libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverTransport);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Arthas - Army of the Dead - Port Ghouls

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArthasArmyoftheDeadPortGhouls_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto993B987E_g;

    int auto993B987E_u;

    unit auto993B987E_var;



    // Variable Initialization

    lv_player = EventPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroArthas"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto993B987E_g = UnitGroup("ArthasArmyOfTheDeadGhoul", lv_player, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto993B987E_u = UnitGroupCount(auto993B987E_g, c_unitCountAll);

    for (;; auto993B987E_u -= 1) {

        auto993B987E_var = UnitGroupUnitFromEnd(auto993B987E_g, auto993B987E_u);

        if (auto993B987E_var == null) { break; }

        UnitSetPosition(auto993B987E_var, UnitGetPosition(libGame_gv_players[lv_player].lv_heroUnit), false);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArthasArmyoftheDeadPortGhouls_Init () {

    libGDHL_gt_HeroArthasArmyoftheDeadPortGhouls = TriggerCreate("libGDHL_gt_HeroArthasArmyoftheDeadPortGhouls_Func");

    TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadPortGhouls, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroArthasArmyoftheDeadPortGhouls, c_playerAny, "HearthstoneTeleport");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Arthas - Army of the Dead - Ghoul Spawned

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArthasArmyoftheDeadGhoulSpawned_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    unit lv_createdUnit;

    int lv_player;

    bool lv_thinkTreeDestroyed;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_createdUnit = EventUnitCreatedUnit();

    lv_player = EventPlayer();



    // Actions

    if (!runActions) {

        return true;

    }



    UnitGroupAdd(libGame_gv_players[lv_player].lv_summonedUnitGroup, EventUnitCreatedUnit());

    if (((PointPathingCliffLevel(UnitGetPosition(lv_createdUnit)) > PointPathingCliffLevel(UnitGetPosition(lv_unit))) || (PointPathingCliffLevel(UnitGetPosition(lv_createdUnit)) < PointPathingCliffLevel(UnitGetPosition(lv_unit)))) && (UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroArthas")) {

        UnitSetPosition(lv_createdUnit, UnitGetPosition(libGame_gv_players[lv_player].lv_heroUnit), false);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArthasArmyoftheDeadGhoulSpawned_Init () {

    libGDHL_gt_HeroArthasArmyoftheDeadGhoulSpawned = TriggerCreate("libGDHL_gt_HeroArthasArmyoftheDeadGhoulSpawned_Func");

    TriggerEnable(libGDHL_gt_HeroArthasArmyoftheDeadGhoulSpawned, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroArthasArmyoftheDeadGhoulSpawned, null, "ArthasGhoulMagazine", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Arthas - Death Pact Talent - Takedown Token Proc 

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroArthasDeathPactTalentTakedownTokenProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_killingPlayer;

    unit lv_minion;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_killingPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    if ((PlayerHasTalent(lv_killingPlayer, "ArthasDeathPact") == true)) {

        UnitCreateEffectUnit(libGame_gv_players[lv_killingPlayer].lv_heroUnit, "ArthasFrostmourneHungersDeathPactTalentTakedownModifyTokens", libGame_gv_players[lv_killingPlayer].lv_heroUnit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroArthasDeathPactTalentTakedownTokenProc_Init () {

    libGDHL_gt_HeroArthasDeathPactTalentTakedownTokenProc = TriggerCreate("libGDHL_gt_HeroArthasDeathPactTalentTakedownTokenProc_Func");

    TriggerEnable(libGDHL_gt_HeroArthasDeathPactTalentTakedownTokenProc, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroArthasDeathPactTalentTakedownTokenProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak Burrow Charge Suppress Collision

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakBurrowChargeSuppressCollision_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    fixed auto1AC4814E_at;



    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(EventUnit());



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSet(c_gameCatalogUnit, "HeroAnubarak", "Mover", lv_player, "FlyGroundHM");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroAnubarak", "Collide[" + IntToString(1) + "]", lv_player, "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroAnubarak", "Collide[" + IntToString(12) + "]", lv_player, "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroAnubarak", "Collide[" + IntToString(8) + "]", lv_player, "0");

    auto1AC4814E_at = 0;

    while (!(((UnitHasBehavior2(lv_unit, "AnubarakBurrowChargeCaster") == false) && (UnitHasBehavior2(lv_unit, "AnubarakBurrowChargeUnpathableSelfStun") == false))) && auto1AC4814E_at <= 10.0) {

        Wait(0.0625, c_timeGame);

        auto1AC4814E_at = auto1AC4814E_at + 0.0625;

    }

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroAnubarak", "Mover", lv_player, "Ground");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroAnubarak", "Collide[" + IntToString(1) + "]", lv_player, "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroAnubarak", "Collide[" + IntToString(12) + "]", lv_player, "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroAnubarak", "Collide[" + IntToString(8) + "]", lv_player, "1");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakBurrowChargeSuppressCollision_Init () {

    libGDHL_gt_HeroAnubarakBurrowChargeSuppressCollision = TriggerCreate("libGDHL_gt_HeroAnubarakBurrowChargeSuppressCollision_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeSuppressCollision, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroAnubarakBurrowChargeSuppressCollision, null, "AnubarakBurrowChargeCaster", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak Burrow Charge Max Range

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakBurrowChargeMaxRange_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    fixed lv_abilityRange;

    point lv_playerTargetPoint;

    fixed lv_distanceFromAnubarakToTargetPoint;

    fixed lv_anubarakRadius;

    point lv_actualTargetPoint;

    fixed lv_modifiedDistance;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_anubarakRadius = CatalogFieldValueGetAsFixed(c_gameCatalogUnit, (UnitGetType(lv_unit)), "Radius", lv_player);

    lv_abilityRange = CatalogFieldValueGetAsFixed(c_gameCatalogActor, "AnubarakBurrowChargeGuide", "Height", lv_player);

    lv_playerTargetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    lv_distanceFromAnubarakToTargetPoint = DistanceBetweenPoints(UnitGetPosition(lv_unit), lv_playerTargetPoint);

    if ((lv_distanceFromAnubarakToTargetPoint > lv_abilityRange)) {

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_unit), lv_abilityRange, lv_playerTargetPoint);

    }

    else {

        lv_actualTargetPoint = lv_playerTargetPoint;

    }

    lv_modifiedDistance = (lv_abilityRange + 0.125);

    while ((PointPathingPassable(lv_actualTargetPoint) == false)) {

        lv_modifiedDistance -= 0.125;

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_unit), lv_modifiedDistance, lv_playerTargetPoint);

        if ((DistanceBetweenPoints(UnitGetPosition(lv_unit), lv_actualTargetPoint) <= (lv_anubarakRadius + 0.125))) {

            libNtve_gf_UIErrorMessage(libCore_gv_playerGroupFromPlayer[lv_player], StringExternal("Param/Value/lib_GDHL_F272EA53"), SoundLink("UI_GenericError", -1));

            UnitBehaviorRemove(lv_unit, "AnubarakBurrowChargeCaster", 1);

            return true;

        }



    }

    if ((UnitIsAlive(EventPlayerEffectUsedUnit(c_effectUnitCaster)) == true)) {

        UnitBehaviorRemove(EventPlayerEffectUsedUnit(c_effectUnitCaster), "ZaryaGravitonSurgePull", 1);

        UnitIssueOrder(EventPlayerEffectUsedUnit(c_effectUnitCaster), OrderTargetingPoint(AbilityCommand("move", 0), lv_actualTargetPoint), c_orderQueueAddToFront);

    }



    UnitCreateEffectPoint(lv_unit, "AnubarakBurrowChargeFinishRangeCheckCreatePersistent", lv_actualTargetPoint);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakBurrowChargeMaxRange_Init () {

    libGDHL_gt_HeroAnubarakBurrowChargeMaxRange = TriggerCreate("libGDHL_gt_HeroAnubarakBurrowChargeMaxRange_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeMaxRange, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAnubarakBurrowChargeMaxRange, c_playerAny, "AnubarakBurrowChargeOffsetPersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak Burrow Charge Cancel

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakBurrowChargeCancel_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    fixed autoE88A0ED8_at;



    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSet(c_gameCatalogBehavior, "AnubarakBurrowChargeCaster", "Modification.ModifyFlags[" + IntToString(11) + "]", lv_player, "0");

    autoE88A0ED8_at = 0;

    while (!((UnitHasBehavior2(lv_unit, "AnubarakBurrowChargeCaster") == false)) && autoE88A0ED8_at <= 10.0) {

        Wait(0.25, c_timeGame);

        autoE88A0ED8_at = autoE88A0ED8_at + 0.25;

    }

    CatalogFieldValueSet(c_gameCatalogBehavior, "AnubarakBurrowChargeCaster", "Modification.ModifyFlags[" + IntToString(11) + "]", lv_player, "1");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakBurrowChargeCancel_Init () {

    libGDHL_gt_HeroAnubarakBurrowChargeCancel = TriggerCreate("libGDHL_gt_HeroAnubarakBurrowChargeCancel_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeCancel, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroAnubarakBurrowChargeCancel, null, AbilityCommand("AnubarakBurrowChargeCancel", 0), c_unitAbilStageExecute, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak Burrow Charge Unpathable Check

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakBurrowChargeUnpathableCheck_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitIssueOrder(lv_unit, OrderTargetingPoint(AbilityCommand("move", 0), UnitTypePlacementFromPoint("AnubarakBeetleSpitBeetle", lv_player, UnitGetPosition(lv_unit), 20.0)), c_orderQueueAddToFront);

    libNtve_gf_MakeUnitUncommandable(lv_unit, true);

    while ((PointPathingPassable(UnitGetPosition(lv_unit)) == false)) {

        UnitIssueOrder(lv_unit, OrderTargetingPoint(AbilityCommand("move", 0), UnitTypePlacementFromPoint("AnubarakBeetleSpitBeetle", lv_player, UnitGetPosition(lv_unit), 20.0)), c_orderQueueAddToFront);

        Wait(0.0625, c_timeGame);

    }

    libNtve_gf_MakeUnitUncommandable(lv_unit, false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakBurrowChargeUnpathableCheck_Init () {

    libGDHL_gt_HeroAnubarakBurrowChargeUnpathableCheck = TriggerCreate("libGDHL_gt_HeroAnubarakBurrowChargeUnpathableCheck_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakBurrowChargeUnpathableCheck, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAnubarakBurrowChargeUnpathableCheck, c_playerAny, "AnubarakBurrowChargeUnpathableDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak - Beetle, Juiced Mastery Special Death State Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakBeetleJuicedMasterySpecialDeathStateProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_deadHero;

    unit lv_beetle;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_deadHero = libGame_gf_HeroEntersSpecialDeathStateHero();



    // Conditions

    if (testConds) {

        if (!((UnitBehaviorCount(lv_deadHero, "AnubarakBeetleSpitDeathResponseBehavior") == 1))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_beetle = UnitBehaviorEffectUnit(lv_deadHero, "AnubarakBeetleSpitDeathResponseBehavior", c_effectUnitCaster, 0);

    UnitCreateEffectUnit(lv_beetle, "AnubarakBeetleJuicedCreatePersistentSpecialDeathState", lv_deadHero);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakBeetleJuicedMasterySpecialDeathStateProc_Init () {

    libGDHL_gt_HeroAnubarakBeetleJuicedMasterySpecialDeathStateProc = TriggerCreate("libGDHL_gt_HeroAnubarakBeetleJuicedMasterySpecialDeathStateProc_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakBeetleJuicedMasterySpecialDeathStateProc, false);

    libGame_gf_HeroEntersSpecialDeathState(libGDHL_gt_HeroAnubarakBeetleJuicedMasterySpecialDeathStateProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak - Cocoon Unit Hit

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakCocoonUnitHit_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_cocoonTargets[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))] = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakCocoonUnitHit_Init () {

    libGDHL_gt_HeroAnubarakCocoonUnitHit = TriggerCreate("libGDHL_gt_HeroAnubarakCocoonUnitHit_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakCocoonUnitHit, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAnubarakCocoonUnitHit, c_playerAny, "AnubarakCocoonApplyWebbedBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak - Cocoon Spawned

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakCocoonSpawned_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_anubarak;

    unit lv_cocoonUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_anubarak = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_cocoonUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    Wait(0.125, c_timeGame);

    UnitSetPosition(libGDHL_gv_cocoonTargets[UnitGetOwner(lv_anubarak)], UnitGetPosition(lv_cocoonUnit), false);

    while ((UnitIsValid(lv_anubarak) == true) && (UnitIsValid(lv_cocoonUnit) == true) && (UnitIsValid(libGDHL_gv_cocoonTargets[UnitGetOwner(lv_anubarak)]) == true)) {

        Wait(0.0625, c_timeGame);

    }

    UnitCreateEffectUnit(lv_cocoonUnit, "TimedLifeFate", lv_cocoonUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakCocoonSpawned_Init () {

    libGDHL_gt_HeroAnubarakCocoonSpawned = TriggerCreate("libGDHL_gt_HeroAnubarakCocoonSpawned_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakCocoonSpawned, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAnubarakCocoonSpawned, c_playerAny, "AnubarakCocoonUnitSpawnSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak - Cocoon Sound Effect

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakCocoonSoundEffect_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_webbedPlayer;

    int lv_behaviorChange;



    // Automatic Variable Declarations

    int auto309F9278_val;



    // Variable Initialization

    lv_webbedPlayer = UnitGetOwner(EventUnit());

    lv_behaviorChange = EventUnitBehaviorChange();



    // Actions

    if (!runActions) {

        return true;

    }



    auto309F9278_val = lv_behaviorChange;

    if (auto309F9278_val == c_unitBehaviorChangeActivate) {

        libSond_gf_DigitalSoundEffectsEnableDisableSoundStateForPlayer(true, lv_webbedPlayer, "Heroes_Lowpass_Cocoon_Cocoon");

    }

    else if (auto309F9278_val == c_unitBehaviorChangeDeactivate) {

        libSond_gf_DigitalSoundEffectsEnableDisableSoundStateForPlayer(false, lv_webbedPlayer, "Heroes_Lowpass_Cocoon_Cocoon");

    }

    else {

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakCocoonSoundEffect_Init () {

    libGDHL_gt_HeroAnubarakCocoonSoundEffect = TriggerCreate("libGDHL_gt_HeroAnubarakCocoonSoundEffect_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakCocoonSoundEffect, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroAnubarakCocoonSoundEffect, null, "AnubarakCocoonWebbed", c_unitBehaviorChangeAny);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak - Cocoon On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakCocoonOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_webbedUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_webbedUnit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_webbedUnit, "HeroGenericIgnoreFullscreenOverlay") == false) && (UnitIsAlive(lv_webbedUnit) == true) && (UnitTestState(lv_webbedUnit, c_unitStateHallucination) == false)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_webbedUnit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_WebBlastOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakCocoonOn_Init () {

    libGDHL_gt_HeroAnubarakCocoonOn = TriggerCreate("libGDHL_gt_HeroAnubarakCocoonOn_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakCocoonOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroAnubarakCocoonOn, null, "AnubarakCocoonWebbed", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Anub'arak - Cocoon Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAnubarakCocoonOff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_webbedUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_webbedUnit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_webbedUnit, "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(lv_webbedUnit), "Cutscenes\\GameUI_WebBlastOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAnubarakCocoonOff_Init () {

    libGDHL_gt_HeroAnubarakCocoonOff = TriggerCreate("libGDHL_gt_HeroAnubarakCocoonOff_Func");

    TriggerEnable(libGDHL_gt_HeroAnubarakCocoonOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroAnubarakCocoonOff, null, "AnubarakCocoonWebbed", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Spawned

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanSpawned_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroSpawnPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroAzmodan"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((libGame_gv_players[lv_player].lv_selectedSkin == libCore_gf_DataSkinsGetSkinIndexFromSkinLink("AzmodanSkinAzmodunk"))) {

        libGame_gv_players[lv_player].lv_vOHeroHasCustomKillVO = true;

        TriggerEnable(libGDHL_gt_HeroAzmodanCustomKillVO, true);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanSpawned_Init () {

    libGDHL_gt_HeroAzmodanSpawned = TriggerCreate("libGDHL_gt_HeroAzmodanSpawned_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanSpawned, false);

    libGame_gf_HeroSpawn(libGDHL_gt_HeroAzmodanSpawned);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Demonic Invasion - Add Units to Unit Group

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanDemonicInvasionAddUnitstoUnitGroup_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_zombie;

    int lv_ownerPlayer;

    point lv_positionOfAbility;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnitCreatedUnit()) == "AzmodanDemonicInvasionDemonGrunt"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_zombie = EventUnitCreatedUnit();

    lv_ownerPlayer = UnitGetOwner(lv_zombie);

    UnitGroupAdd(libGDHL_gv_heroAzmodanDemonicInvasionUnitGroup[lv_ownerPlayer], lv_zombie);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanDemonicInvasionAddUnitstoUnitGroup_Init () {

    libGDHL_gt_HeroAzmodanDemonicInvasionAddUnitstoUnitGroup = TriggerCreate("libGDHL_gt_HeroAzmodanDemonicInvasionAddUnitstoUnitGroup_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanDemonicInvasionAddUnitstoUnitGroup, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroAzmodanDemonicInvasionAddUnitstoUnitGroup, null, null, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Demonic Invasion - Unpathable Location

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanDemonicInvasionUnpathableLocation_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    point lv_newPoint;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));



    // Actions

    if (!runActions) {

        return true;

    }



    lv_newPoint = UnitTypePlacementFromPoint("AzmodanDemonicInvasionDemonGrunt", lv_player, EventPlayerEffectUsedPoint(c_effectLocationTargetPoint), 10.0);

    UnitCreateEffectPoint(EventPlayerEffectUsedUnit(c_effectUnitCaster), "AzmodanDemonicInvasionStaggerPersistent", lv_newPoint);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanDemonicInvasionUnpathableLocation_Init () {

    libGDHL_gt_HeroAzmodanDemonicInvasionUnpathableLocation = TriggerCreate("libGDHL_gt_HeroAzmodanDemonicInvasionUnpathableLocation_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanDemonicInvasionUnpathableLocation, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanDemonicInvasionUnpathableLocation, c_playerAny, "DemonicInvasionUnpathableDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Demonic Invasion - Remove Existing Demons

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanDemonicInvasionRemoveExistingDemons_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto9E995D66_g;

    int auto9E995D66_u;

    unit auto9E995D66_var;



    // Variable Initialization

    lv_player = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));



    // Conditions

    if (testConds) {

        if (!((lv_player > 0))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto9E995D66_g = UnitGroupFilter(null, lv_player, libGDHL_gv_heroAzmodanDemonicInvasionUnitGroup[lv_player], UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto9E995D66_u = UnitGroupCount(auto9E995D66_g, c_unitCountAll);

    for (;; auto9E995D66_u -= 1) {

        auto9E995D66_var = UnitGroupUnitFromEnd(auto9E995D66_g, auto9E995D66_u);

        if (auto9E995D66_var == null) { break; }

        UnitKill(auto9E995D66_var);

        UnitGroupRemove(libGDHL_gv_heroAzmodanDemonicInvasionUnitGroup[lv_player], auto9E995D66_var);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanDemonicInvasionRemoveExistingDemons_Init () {

    libGDHL_gt_HeroAzmodanDemonicInvasionRemoveExistingDemons = TriggerCreate("libGDHL_gt_HeroAzmodanDemonicInvasionRemoveExistingDemons_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanDemonicInvasionRemoveExistingDemons, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanDemonicInvasionRemoveExistingDemons, c_playerAny, "AzmodanDemonicInvasionInitialSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Annihilation Stack Score Values

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_azmodan;

    string lv_effect;

    fixed lv_stackCount;

    string lv_scoreValue;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));

    lv_azmodan = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_effect = EventPlayerEffectUsed();

    lv_stackCount = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, lv_effect, "Value", lv_player);

    if ((lv_effect == "AzmodanGlobeOfAnnihilationDeathModifyTokenMinion")) {

        lv_scoreValue = "AzmodanMinionKillAnnihilation";

    }

    else if ((lv_effect == "AzmodanGlobeOfAnnihilationHeroImpactModifyTokenCount")) {

        lv_scoreValue = "AzmodanHeroHitAnnihilation";

    }

    else if ((lv_effect == "AzmodanHeroWeaponWrathTalentModifyTokenCount")) {

        lv_scoreValue = "AzmodanWrathTalentAnnihilation";

    }

    else if ((lv_effect == "AzmodanGlobeOfAnnihilationArtOfChaosTalentModifyTokenCount")) {

        lv_scoreValue = "AzmodanArtOfChaosTalentAnnihilation";

    }

    else if ((lv_effect == "AzmodanAllShallBurnMasterOfDestructionTalentModifyTokenCount")) {

        lv_scoreValue = "AzmodanMasterOfDestructionTalentAnnihilation";

    }

    else if ((lv_effect == "AzmodanHeroWeaponBombardmentTalentModifyTokenCount")) {

        lv_scoreValue = "AzmodanBombardmentTalentAnnihilation";

    }

    if ((UnitGetTokenCount(lv_azmodan, "AzmodanGlobeOfAnnihilationTokenCounter") < CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "AzmodanGlobeOfAnnihilationTokenCounter", "Max", lv_player))) {

        PlayerScoreValueSetFromFixed(lv_player, lv_scoreValue, (PlayerScoreValueGetAsFixed(lv_player, lv_scoreValue) + lv_stackCount));

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues_Init () {

    libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues = TriggerCreate("libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, c_playerAny, "AzmodanGlobeOfAnnihilationDeathModifyTokenMinion");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, c_playerAny, "AzmodanGlobeOfAnnihilationHeroImpactModifyTokenCount");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, c_playerAny, "AzmodanHeroWeaponWrathTalentModifyTokenCount");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, c_playerAny, "AzmodanGlobeOfAnnihilationArtOfChaosTalentModifyTokenCount");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, c_playerAny, "AzmodanAllShallBurnMasterOfDestructionTalentModifyTokenCount");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, c_playerAny, "AzmodanDemonLieutenantDemonicSmiteModifyToken");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues, c_playerAny, "AzmodanHeroWeaponBombardmentTalentModifyTokenCount");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Annihilation Stack Score Values Reset

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanAnnihilationStackScoreValuesReset_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_azmodan;

    fixed lv_stackCount;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroRespecsTalentsPlayer();

    lv_azmodan = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    PlayerScoreValueSetFromFixed(lv_player, "AzmodanMinionKillAnnihilation", 0.0);

    PlayerScoreValueSetFromFixed(lv_player, "AzmodanHeroHitAnnihilation", 0.0);

    PlayerScoreValueSetFromFixed(lv_player, "AzmodanWrathTalentAnnihilation", 0.0);

    PlayerScoreValueSetFromFixed(lv_player, "AzmodanArtOfChaosTalentAnnihilation", 0.0);

    PlayerScoreValueSetFromFixed(lv_player, "AzmodanMasterOfDestructionTalentAnnihilation", 0.0);

    PlayerScoreValueSetFromFixed(lv_player, "AzmodanBombardmentTalentAnnihilation", 0.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanAnnihilationStackScoreValuesReset_Init () {

    libGDHL_gt_HeroAzmodanAnnihilationStackScoreValuesReset = TriggerCreate("libGDHL_gt_HeroAzmodanAnnihilationStackScoreValuesReset_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValuesReset, false);

    libGame_gf_HeroRespecsTalents(libGDHL_gt_HeroAzmodanAnnihilationStackScoreValuesReset);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Custom Kill VO

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanCustomKillVO_Func (bool testConds, bool runActions) {

    // Variable Declarations

    string lv_killingEffect;

    int lv_killingPlayer;

    int lv_deadPlayer;

    int lv_speakingPlayer;

    string lv_killLine;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_killingPlayer = libGame_gf_CustomKillVOKillingPlayer();

    lv_deadPlayer = libGame_gf_CustomKillVODeadPlayer();

    lv_speakingPlayer = libGame_gf_CustomKillVOSpeakingPlayer();

    lv_killLine = libGame_gf_CustomKillVOKillLine();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_killingPlayer].lv_heroUnit) == "HeroAzmodan"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((lv_deadPlayer > 0) && (lv_deadPlayer <= libCore_gv_bALMaxPlayers)) {

        lv_killingEffect = libGame_gv_deathRecap_DeathData[lv_deadPlayer].lv_effectBars[1].lv_effect;

    }

    else {

        return true;

    }

    if (((libGame_gv_players[lv_killingPlayer].lv_selectedSkin == libCore_gf_DataSkinsGetSkinIndexFromSkinLink("AzmodanSkinAzmodunk")) && ((lv_killingEffect == "AzmodanGlobeOfAnnihilationDamage") || (lv_killingEffect == "AzmodanGlobeOfAnnihilationTideOfSinTalentDamage") || (lv_killingEffect == "AzmodanGlobeOfAnnihilationTotalAnnihilationTalentDamage") || (lv_killingEffect == "AzmodanGlobeOfAnnihilationTotalAnnihilationTalentDamage")))) {

        lv_speakingPlayer = lv_killingPlayer;

        lv_killLine = ("AzmodanAzmodunk_GlobeKill");

    }



    libSond_gf_HeroVOPlayKillLine((lv_killLine), lv_speakingPlayer, lv_killingPlayer);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanCustomKillVO_Init () {

    libGDHL_gt_HeroAzmodanCustomKillVO = TriggerCreate("libGDHL_gt_HeroAzmodanCustomKillVO_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanCustomKillVO, false);

    libGame_gf_CustomKillVO(libGDHL_gt_HeroAzmodanCustomKillVO);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Globe Talent Picked

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanGlobeTalentPicked_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_tokenCount;

    unit lv_hero;

    string lv_talent;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_hero = libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnit;

    lv_talent = libGame_gf_HeroGainTalentGainedTalent();



    // Conditions

    if (testConds) {

        if (!(((lv_talent == "AzmodanGreed") || (lv_talent == "AzmodanGluttony") || (lv_talent == "AzmodanWrath")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_tokenCount = UnitGetTokenCount(lv_hero, "AzmodanGlobeOfAnnihilationTokenCounter");

    UnitSetTokenCount(lv_hero, "AzmodanGlobeOfAnnihilationDisplayTokenCounter", lv_tokenCount, lv_hero);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanGlobeTalentPicked_Init () {

    libGDHL_gt_HeroAzmodanGlobeTalentPicked = TriggerCreate("libGDHL_gt_HeroAzmodanGlobeTalentPicked_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanGlobeTalentPicked, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroAzmodanGlobeTalentPicked);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Demon Create

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanDemonCreate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_azmodan;

    fixed lv_newFacing;

    unit lv_demon;

    point lv_targetPoint;

    point lv_casterPoint;

    point lv_offsetPoint;

    fixed lv_offset;

    fixed lv_facing;

    point lv_target;

    fixed lv_targetOffset;

    fixed lv_wait;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_azmodan = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_offset = 4.0;

    lv_target = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    lv_targetOffset = 12.0;

    lv_wait = 3.0;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_targetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    if ((EventPlayerEffectUsed() == "AzmodanSummonDemonWarriorDummySet")) {

        lv_casterPoint = EventPlayerEffectUsedPoint(c_effectLocationCasterPoint);

        lv_facing = UnitGetFacing(lv_azmodan);

        lv_offsetPoint = PointWithOffsetPolar(libNtve_gf_PointFromPositionAndAngle(lv_casterPoint, UnitGetFacing(lv_azmodan)), lv_offset, UnitGetFacing(lv_azmodan));

    }

    else if ((EventPlayerEffectUsed() == "AzmodanSummonDemonWarriorArmyOfHellTalentDummySet1")) {

        lv_casterPoint = EventPlayerEffectUsedPoint(c_effectLocationCasterPoint);

        lv_facing = UnitGetFacing(lv_azmodan);

        lv_facing = (UnitGetFacing(lv_azmodan) + 17.5);

        lv_offsetPoint = PointWithOffsetPolar(libNtve_gf_PointFromPositionAndAngle(lv_casterPoint, UnitGetFacing(lv_azmodan)), lv_offset, (UnitGetFacing(lv_azmodan) + 17.5));

    }

    else if ((EventPlayerEffectUsed() == "AzmodanSummonDemonWarriorArmyOfHellTalentDummySet2")) {

        lv_casterPoint = EventPlayerEffectUsedPoint(c_effectLocationCasterPoint);

        lv_facing = (UnitGetFacing(lv_azmodan) - 17.5);

        lv_offsetPoint = PointWithOffsetPolar(libNtve_gf_PointFromPositionAndAngle(lv_casterPoint, UnitGetFacing(lv_azmodan)), lv_offset, (UnitGetFacing(lv_azmodan) - 17.5));

    }

    else if ((EventPlayerEffectUsed() == "AzmodanSummonDemonWarriorHellRiftTalentDummySet")) {

        lv_casterPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

        lv_offset = 0.0;

        lv_wait = 0.0;

        lv_target = EventPlayerEffectUsedPoint(c_effectLocationTargetUnit);

        lv_facing = UnitGetFacing(lv_azmodan);

        lv_offsetPoint = PointWithOffsetPolar(libNtve_gf_PointFromPositionAndAngle(lv_casterPoint, UnitGetFacing(lv_azmodan)), lv_offset, UnitGetFacing(lv_azmodan));

    }

    libNtve_gf_UnitCreateFacingPoint(1, "AzmodanDemonWarrior", 0, UnitGetOwner(lv_azmodan), lv_offsetPoint, PointWithOffsetPolar(libNtve_gf_PointFromPositionAndAngle(lv_casterPoint, UnitGetFacing(lv_azmodan)), 4.5, lv_facing), lv_azmodan);

    lv_demon = UnitLastCreated();

    if ((EventPlayerEffectUsed() == "AzmodanSummonDemonWarriorHellRiftTalentDummySet")) {

        UnitCreateEffectUnit(lv_azmodan, "AzmodanSummonDemonWarriorTalentedSpawnSet", lv_demon);

    }

    else {

        UnitCreateEffectUnit(lv_azmodan, "AzmodanSummonDemonWarriorSpawnSet", lv_demon);

    }

    if (((UnitGetFacing(UnitLastCreated()) < 180.0) && (UnitGetFacing(UnitLastCreated()) > 0.0))) {

        lv_newFacing = UnitGetFacing(lv_demon);

        lv_newFacing += 180.0;

        UnitSetFacing(lv_demon, lv_newFacing, 0.0);

    }



    if ((PlayerHasTalent(UnitGetOwner(lv_demon), "AzmodanHellforgedArmor") == true)) {

        UnitBehaviorAdd(lv_demon, "AzmodanSummonDemonWarriorHellforgedArmorTalent", lv_azmodan, 1);

    }



    if ((UnitIsAlive(lv_demon) == true)) {

        Wait(1.5, c_timeGame);

        if ((UnitIsAlive(lv_demon) == true)) {

            UnitIssueOrder(lv_demon, OrderTargetingPoint(AbilityCommand("attack", 0), libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_demon), lv_targetOffset, lv_target)), c_orderQueueReplace);

        }



    }



    Wait(lv_wait, c_timeGame);

    if ((UnitIsAlive(lv_demon) == true)) {

        UnitCreateAIThinkTree(lv_demon);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanDemonCreate_Init () {

    libGDHL_gt_HeroAzmodanDemonCreate = TriggerCreate("libGDHL_gt_HeroAzmodanDemonCreate_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanDemonCreate, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanDemonCreate, c_playerAny, "AzmodanSummonDemonWarriorDummySet");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanDemonCreate, c_playerAny, "AzmodanSummonDemonWarriorArmyOfHellTalentDummySet1");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanDemonCreate, c_playerAny, "AzmodanSummonDemonWarriorArmyOfHellTalentDummySet2");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanDemonCreate, c_playerAny, "AzmodanSummonDemonWarriorHellRiftTalentDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Azmodan - Demon General Birth Facing

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    UnitSetFacing(EventPlayerEffectUsedUnit(c_effectUnitTarget), -90.0, 0.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing_Init () {

    libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing = TriggerCreate("libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing_Func");

    TriggerEnable(libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing, c_playerAny, "AzmodanDemonLieutenantSpawnSet");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing, c_playerAny, "AzmodanSummonDemonWarriorSpawnSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sonya - Wrath of the Berserker Buff Duration Extension

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension_Func (bool testConds, bool runActions) {

    // Variable Declarations

    string lv_effect;

    unit lv_unit;

    fixed lv_regenAmount;

    fixed lv_currentDuration;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_effect = EventPlayerEffectUsed();

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_regenAmount = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, lv_effect, "VitalArray[" + IntToString(c_unitVitalEnergy) + "].Change", c_playerAny);



    // Conditions

    if (testConds) {

        if (!((UnitBehaviorCount(lv_unit, "BarbarianWrathoftheBerserkerBase") == 1))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_currentDuration = UnitBehaviorDuration(lv_unit, "BarbarianWrathoftheBerserkerBase");

    if ((lv_effect == "BarbarianShotOfFuryRegenFuryModifyUnit")) {

        lv_regenAmount = 50.0;

    }



    if ((lv_effect == "BarbarianAncientSpearRegenFuryModifyUnit")) {

        lv_regenAmount = 40.0;

    }



    if ((lv_effect == "BarbarianFuryBasicAttackModifyUnit")) {

        lv_regenAmount = 6.0;

    }



    if ((lv_effect == "BarbarianRegen2Fury")) {

        lv_regenAmount = 2.0;

    }



    if ((lv_effect == "BarbarianFuryBasicAttackAngerManagementTalentModifyUnit")) {

        lv_regenAmount = 9.0;

    }



    if ((lv_effect == "BarbarianRegen2FuryRegenAngerManagementFury")) {

        lv_regenAmount = 3.0;

    }



    UnitBehaviorSetDurationRemaining(lv_unit, "BarbarianWrathoftheBerserkerBase", (lv_currentDuration + (lv_regenAmount / 10.0)));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension_Init () {

    libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension = TriggerCreate("libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension_Func");

    TriggerEnable(libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension, c_playerAny, "BarbarianShotOfFuryRegenFuryModifyUnit");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension, c_playerAny, "BarbarianAncientSpearRegenFuryModifyUnit");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension, c_playerAny, "BarbarianFuryBasicAttackModifyUnit");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension, c_playerAny, "BarbarianRegen2Fury");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Barbarian - Ancient Spear Launch Barbarian Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroBarbarianAncientSpearLaunchBarbarianUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_barbarianUnit;

    unit lv_targetUnit;

    point lv_currentPositionOfTarget;

    bool lv_spearActive;

    fixed lv_reDirectDistance;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_barbarianUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_spearActive = true;



    // Actions

    if (!runActions) {

        return true;

    }



    if ((PlayerHasTalent(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), "BarbarianCompositeSpear") == true)) {

        lv_reDirectDistance = (libGDHL_gv_heroBarbarianAncientSpearReDirectDistance * 1.5);

    }

    else {

        lv_reDirectDistance = libGDHL_gv_heroBarbarianAncientSpearReDirectDistance;

    }

    while ((UnitHasBehavior2(lv_barbarianUnit, "BarbarianAncientSpearSelfBuff") == true) && (UnitIsAlive(lv_targetUnit) == true) && (UnitIsAlive(lv_barbarianUnit) == true)) {

        if ((UnitHasBehaviorWithCategoryFlag(lv_barbarianUnit, c_behaviorCategoryTimeStop) == true)) {

            while ((UnitHasBehaviorWithCategoryFlag(lv_barbarianUnit, c_behaviorCategoryTimeStop) == true) && (UnitIsAlive(lv_targetUnit) == true)) {

                lv_currentPositionOfTarget = UnitGetPosition(lv_targetUnit);

                if ((lv_spearActive == true) && (DistanceBetweenPoints(lv_currentPositionOfTarget, UnitGetPosition(lv_barbarianUnit)) > lv_reDirectDistance)) {

                    UnitCreateEffectUnit(lv_barbarianUnit, "BarbarianAncientSpearDestroyTentacleDummy", lv_barbarianUnit);

                    lv_spearActive = false;

                }



                Wait(0.0625, c_timeGame);

            }

            if ((lv_spearActive == true)) {

                UnitCreateEffectUnit(lv_barbarianUnit, "BarbarianAncientSpearReDirectBarbarian", lv_targetUnit);

            }

            else {

                UnitCreateEffectUnit(lv_barbarianUnit, "BarbarianAncientSpearReDirectBarbarian", lv_barbarianUnit);

            }

        }



        Wait(0.0625, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroBarbarianAncientSpearLaunchBarbarianUsed_Init () {

    libGDHL_gt_HeroBarbarianAncientSpearLaunchBarbarianUsed = TriggerCreate("libGDHL_gt_HeroBarbarianAncientSpearLaunchBarbarianUsed_Func");

    TriggerEnable(libGDHL_gt_HeroBarbarianAncientSpearLaunchBarbarianUsed, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroBarbarianAncientSpearLaunchBarbarianUsed, c_playerAny, "BarbarianAncientSpearLaunchBarbarian");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Barbarian - Leap

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroBarbarianLeap_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    fixed lv_abilityRange;

    point lv_playerTargetPoint;

    fixed lv_distanceFromBarbarianToPlayerTargetPoint;

    fixed lv_barbarianRadius;

    point lv_actualTargetPoint;

    fixed lv_modifiedDistance;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_barbarianRadius = CatalogFieldValueGetAsFixed(c_gameCatalogUnit, (UnitGetType(lv_unit)), "Radius", lv_player);

    lv_abilityRange = CatalogFieldValueGetAsFixed(c_gameCatalogActor, "BarbarianLeapRangeSplat", "Scale", lv_player);

    lv_playerTargetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    lv_distanceFromBarbarianToPlayerTargetPoint = DistanceBetweenPoints(UnitGetPosition(lv_unit), lv_playerTargetPoint);

    if ((lv_distanceFromBarbarianToPlayerTargetPoint > lv_abilityRange)) {

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_unit), lv_abilityRange, lv_playerTargetPoint);

    }

    else {

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_unit), lv_distanceFromBarbarianToPlayerTargetPoint, lv_playerTargetPoint);

    }

    lv_modifiedDistance = lv_distanceFromBarbarianToPlayerTargetPoint;

    while ((PointPathingPassable(lv_actualTargetPoint) == false)) {

        lv_modifiedDistance -= 0.125;

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_unit), lv_modifiedDistance, lv_playerTargetPoint);

        if ((PointPathingPassable(lv_actualTargetPoint) == false)) {

            lv_actualTargetPoint = PointWithOffsetPolar(libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_unit), lv_modifiedDistance, lv_playerTargetPoint), 0.5, (AngleBetweenPoints(UnitGetPosition(lv_unit), lv_playerTargetPoint) + 90.0));

            if ((PointPathingPassable(lv_actualTargetPoint) == false)) {

                lv_actualTargetPoint = PointWithOffsetPolar(libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_unit), lv_modifiedDistance, lv_playerTargetPoint), 0.5, (AngleBetweenPoints(UnitGetPosition(lv_unit), lv_playerTargetPoint) - 90.0));

                if ((PointPathingPassable(lv_actualTargetPoint) == false)) {

                    lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_unit), lv_modifiedDistance, lv_playerTargetPoint);

                }



            }



        }



        if ((DistanceBetweenPoints(UnitGetPosition(lv_unit), lv_actualTargetPoint) <= (lv_barbarianRadius + 0.125))) {

            libNtve_gf_UIErrorMessage(libCore_gv_playerGroupFromPlayer[lv_player], StringExternal("Param/Value/lib_GDHL_D9EC6B41"), SoundLink("UI_GenericError", -1));

            UnitBehaviorRemove(lv_unit, "BarbarianLeap", 1);

            UnitAbilityReset(lv_unit, AbilityCommand("BarbarianLeap", 0), c_spendLocationAll);

            return true;

        }



    }

    if ((UnitIsAlive(lv_unit) == true)) {

        UnitCreateEffectPointWithSource(lv_unit, "BarbarianLeapLaunchMissile", lv_actualTargetPoint, c_gameCatalogAbil, "BarbarianLeap");

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroBarbarianLeap_Init () {

    libGDHL_gt_HeroBarbarianLeap = TriggerCreate("libGDHL_gt_HeroBarbarianLeap_Func");

    TriggerEnable(libGDHL_gt_HeroBarbarianLeap, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroBarbarianLeap, c_playerAny, "BarbarianLeapInitialSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Barbarian - Leap Refactor

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroBarbarianLeapRefactor_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_abilityRange;

    point lv_playerTargetPoint;

    fixed lv_distanceFromBarbarianToPlayerTargetPoint;

    fixed lv_barbarianRadius;

    point lv_actualTargetPoint;

    fixed lv_modifiedDistance;

    point lv_barbarianPosition;

    unit lv_eventUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_eventUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_barbarianPosition = UnitGetPosition(lv_eventUnit);

    lv_barbarianRadius = CatalogFieldValueGetAsFixed(c_gameCatalogUnit, (UnitGetType(lv_eventUnit)), "Radius", UnitGetOwner(lv_eventUnit));

    lv_abilityRange = (CatalogFieldValueGetAsFixed(c_gameCatalogActor, "BarbarianLeapRangeSplat", "Scale", UnitGetOwner(lv_eventUnit)) + lv_barbarianRadius);

    lv_playerTargetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    lv_distanceFromBarbarianToPlayerTargetPoint = DistanceBetweenPoints(lv_barbarianPosition, lv_playerTargetPoint);

    if ((lv_distanceFromBarbarianToPlayerTargetPoint > lv_abilityRange)) {

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_barbarianPosition, (lv_barbarianRadius + lv_abilityRange), lv_playerTargetPoint);

    }

    else {

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_barbarianPosition, (lv_barbarianRadius + lv_distanceFromBarbarianToPlayerTargetPoint), lv_playerTargetPoint);

    }

    lv_modifiedDistance = lv_distanceFromBarbarianToPlayerTargetPoint;

    while ((PointPathingPassable(lv_actualTargetPoint) == false)) {

        lv_modifiedDistance -= 0.125;

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_barbarianPosition, lv_modifiedDistance, lv_playerTargetPoint);

        if ((PointPathingPassable(lv_actualTargetPoint) == false)) {

            lv_actualTargetPoint = PointWithOffsetPolar(libNtve_gf_PointOffsetTowardsPoint(lv_barbarianPosition, lv_modifiedDistance, lv_playerTargetPoint), 0.5, (AngleBetweenPoints(lv_barbarianPosition, lv_playerTargetPoint) + 90.0));

            if ((PointPathingPassable(lv_actualTargetPoint) == false)) {

                lv_actualTargetPoint = PointWithOffsetPolar(libNtve_gf_PointOffsetTowardsPoint(lv_barbarianPosition, lv_modifiedDistance, lv_playerTargetPoint), 0.5, (AngleBetweenPoints(lv_barbarianPosition, lv_playerTargetPoint) - 90.0));

                if ((PointPathingPassable(lv_actualTargetPoint) == false)) {

                    lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_barbarianPosition, lv_modifiedDistance, lv_playerTargetPoint);

                }



            }



        }



        if ((DistanceBetweenPoints(lv_barbarianPosition, lv_actualTargetPoint) <= (lv_barbarianRadius + 0.125))) {

            libNtve_gf_UIErrorMessage(libCore_gv_playerGroupFromPlayer[UnitGetOwner(lv_eventUnit)], StringExternal("Param/Value/lib_GDHL_EC6CBAAF"), SoundLink("UI_GenericError", -1));

            UnitBehaviorRemove(lv_eventUnit, "BarbarianLeap", 1);

            UnitAbilityReset(lv_eventUnit, AbilityCommand("BarbarianLeap", 0), c_spendLocationAll);

            return true;

        }



    }

    if ((UnitIsAlive(lv_eventUnit) == true)) {

        UnitCreateEffectPointWithSource(lv_eventUnit, "BarbarianLeapLaunchMissile", lv_actualTargetPoint, c_gameCatalogAbil, "BarbarianLeap");

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroBarbarianLeapRefactor_Init () {

    libGDHL_gt_HeroBarbarianLeapRefactor = TriggerCreate("libGDHL_gt_HeroBarbarianLeapRefactor_Func");

    TriggerEnable(libGDHL_gt_HeroBarbarianLeapRefactor, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroBarbarianLeapRefactor, c_playerAny, "BarbarianLeapInitialSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Barbarian - Leap Arreat Crater Forced Destruction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroBarbarianLeapArreatCraterForcedDestruction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventPlayerEffectUsedUnitImpact();

    lv_player = UnitGetOwner(lv_target);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_target) == "BarbarianLeapArreatCraterCollision"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(libGame_gv_players[lv_player].lv_heroUnit, "BarbarianLeapArreatCraterDestroySet", libGame_gv_players[lv_player].lv_heroUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroBarbarianLeapArreatCraterForcedDestruction_Init () {

    libGDHL_gt_HeroBarbarianLeapArreatCraterForcedDestruction = TriggerCreate("libGDHL_gt_HeroBarbarianLeapArreatCraterForcedDestruction_Func");

    TriggerEnable(libGDHL_gt_HeroBarbarianLeapArreatCraterForcedDestruction, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroBarbarianLeapArreatCraterForcedDestruction, c_playerAny, "DestroyPathingBlockerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Butcher - Ruthless Onslaught - Target Audio Telegraph

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroButcherRuthlessOnslaughtTargetAudioTelegraph_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_butcherPlayer;

    unit lv_target;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(lv_unit) >= 1))) {

            return false;

        }



        if (!((UnitGetOwner(lv_unit) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_butcherPlayer = UnitBehaviorEffectPlayer(lv_unit, EventUnitBehavior(), c_effectPlayerCaster, 0);

    lv_target = lv_unit;

    lv_butcherPlayer = UnitGetOwner(UnitBehaviorEffectUnit(lv_unit, "RuthlessOnslaughtTarget", c_effectUnitCaster, 0));

    SoundPlayForPlayer(SoundLink("Butcher_RuthlessOnslaught_Targeted_VICTIM", -1), lv_butcherPlayer, PlayerGroupSingle(UnitGetOwner(lv_target)), 100.0, 0.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroButcherRuthlessOnslaughtTargetAudioTelegraph_Init () {

    libGDHL_gt_HeroButcherRuthlessOnslaughtTargetAudioTelegraph = TriggerCreate("libGDHL_gt_HeroButcherRuthlessOnslaughtTargetAudioTelegraph_Func");

    TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtTargetAudioTelegraph, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroButcherRuthlessOnslaughtTargetAudioTelegraph, null, "RuthlessOnslaughtTarget", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Butcher - Ruthless Onslaught Travel Validation

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroButcherRuthlessOnslaughtTravelValidation_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetUnit;

    unit lv_unit;

    fixed lv_travelDistanceCancelThreshold;

    int lv_butcherPlayer;

    int lv_targetPlayer;

    point lv_currentPositionOfTarget;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_travelDistanceCancelThreshold = 20.0;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_butcherPlayer = UnitGetOwner(lv_unit);

    lv_targetPlayer = UnitGetOwner(lv_targetUnit);

    lv_currentPositionOfTarget = UnitGetPosition(lv_targetUnit);

    while ((UnitIsAlive(lv_unit) == true) && (UnitIsAlive(lv_targetUnit) == true) && ((UnitHasBehavior2(lv_unit, "ButcherRuthlessOnslaughtCaster") == true) || (UnitHasBehavior2(lv_unit, "RuthlessOnslaughtFinalAssault") == true))) {

        if ((UnitOrder(lv_unit, 0) == null)) {

            UnitIssueOrder(lv_unit, OrderTargetingUnit(AbilityCommand("attack", 0), lv_targetUnit), c_orderQueueAddToFront);

        }



        if ((((UnitIsAlive(lv_targetUnit) == true) && (DistanceBetweenPoints(UnitGetPosition(lv_targetUnit), lv_currentPositionOfTarget) > lv_travelDistanceCancelThreshold)) || ((UnitIsAlive(lv_targetUnit) == true) && (UnitHasBehavior2(lv_targetUnit, "FalstadFlightAscend") == true)))) {

            UnitCreateEffectUnit(lv_unit, "RuthlessOnslaughtTargetInvalidatedCleanupSet", lv_unit);

        }



        lv_currentPositionOfTarget = UnitGetPosition(lv_targetUnit);

        Wait(0.0625, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroButcherRuthlessOnslaughtTravelValidation_Init () {

    libGDHL_gt_HeroButcherRuthlessOnslaughtTravelValidation = TriggerCreate("libGDHL_gt_HeroButcherRuthlessOnslaughtTravelValidation_Func");

    TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtTravelValidation, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroButcherRuthlessOnslaughtTravelValidation, c_playerAny, "RuthlessOnslaughtInitialSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Butcher - Ruthless Onslaught Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroButcherRuthlessOnslaughtCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    playergroup lv_eligiblePlayerstoHearVO;

    const int lv_bonusRange = 4;

    int lv_abilityRange;

    unit lv_itU;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_eligiblePlayerstoHearVO = PlayerGroupEmpty();

    lv_abilityRange = CatalogFieldValueGetAsInt(c_gameCatalogAbil, "ButcherRuthlessOnslaught", "Range[" + IntToString(0) + "]", c_playerAny);



    // Actions

    if (!runActions) {

        return true;

    }



    PlayerGroupAdd(lv_eligiblePlayerstoHearVO, UnitGetOwner(EventUnit()));

    PlayerGroupAdd(lv_eligiblePlayerstoHearVO, UnitGetOwner(EventUnitTargetUnit()));

    SoundPlayForPlayer(SoundLink("ButcherBase_VOX_ReactionC", -1), c_maxPlayers, lv_eligiblePlayerstoHearVO, 100.0, 0.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroButcherRuthlessOnslaughtCast_Init () {

    libGDHL_gt_HeroButcherRuthlessOnslaughtCast = TriggerCreate("libGDHL_gt_HeroButcherRuthlessOnslaughtCast_Func");

    TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtCast, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroButcherRuthlessOnslaughtCast, null, AbilityCommand("ButcherRuthlessOnslaught", 0), c_abilEffectStageCast, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Butcher - Ruthless Onslaught Cancel Animation Hook

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroButcherRuthlessOnslaughtCancelAnimationHook_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    ActorSend(libNtve_gf_MainActorofUnit(EventUnit()), "AnimPlay Spell Spell,A");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroButcherRuthlessOnslaughtCancelAnimationHook_Init () {

    libGDHL_gt_HeroButcherRuthlessOnslaughtCancelAnimationHook = TriggerCreate("libGDHL_gt_HeroButcherRuthlessOnslaughtCancelAnimationHook_Func");

    TriggerEnable(libGDHL_gt_HeroButcherRuthlessOnslaughtCancelAnimationHook, false);

    TriggerAddEventUnitOrder(libGDHL_gt_HeroButcherRuthlessOnslaughtCancelAnimationHook, null, AbilityCommand("RuthlessOnslaughtCancel", 0));

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Butcher - Butcher Participated In Takedown

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroButcherButcherParticipatedInTakedown_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_butcherPlayer;

    unit lv_butcher;

    unit lv_deadUnit;

    int lv_iterator;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_heroUnit) == "HeroButcher"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_butcherPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_butcher = libGame_gv_players[lv_butcherPlayer].lv_heroUnit;

    lv_deadUnit = libGame_gf_HeroParticipatedInTakedownKilledHero();

    libNtve_gf_CreateUnitsWithDefaultFacing(1, "ButcherFreshMeat20Stack", 0, lv_butcherPlayer, PointWithOffsetPolar(libGame_gf_HeroParticipatedInTakedownKilledHeroPosition(), 1.0, libNtve_gf_RandomAngle()), lv_butcher);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroButcherButcherParticipatedInTakedown_Init () {

    libGDHL_gt_HeroButcherButcherParticipatedInTakedown = TriggerCreate("libGDHL_gt_HeroButcherButcherParticipatedInTakedown_Func");

    TriggerEnable(libGDHL_gt_HeroButcherButcherParticipatedInTakedown, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroButcherButcherParticipatedInTakedown);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Butcher - Fresh Meat - Vehicle Pickup

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroButcherFreshMeatVehiclePickup_Func (bool testConds, bool runActions) {

    // Variable Declarations

    string lv_effect;

    int lv_player;

    unit lv_heroUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_effect = EventPlayerEffectUsed();



    // Conditions

    if (testConds) {

        if (!((UnitIsValid(EventPlayerEffectUsedUnit(c_effectUnitTarget)) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(libGame_gv_players[EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget)].lv_heroUnit) == "HeroButcher") && (UnitIsValid(libGame_gv_players[EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget)].lv_activeVehicle) == true)) {

        lv_player = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitTarget));

        lv_heroUnit = libGame_gv_players[lv_player].lv_heroUnit;

        if ((lv_effect == "ButcherFreshMeat1StackImpactDummySet")) {

            UnitCreateEffectUnit(EventPlayerEffectUsedUnit(c_effectUnitCaster), "ButcherFreshMeat1StackImpactSet", lv_heroUnit);

        }

        else if ((lv_effect == "ButcherFreshMeat20StackImpactDummySet")) {

            UnitCreateEffectUnit(EventPlayerEffectUsedUnit(c_effectUnitCaster), "ButcherFreshMeat20StackImpactSet", lv_heroUnit);

        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroButcherFreshMeatVehiclePickup_Init () {

    libGDHL_gt_HeroButcherFreshMeatVehiclePickup = TriggerCreate("libGDHL_gt_HeroButcherFreshMeatVehiclePickup_Func");

    TriggerEnable(libGDHL_gt_HeroButcherFreshMeatVehiclePickup, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroButcherFreshMeatVehiclePickup, c_playerAny, "ButcherFreshMeat1StackImpactDummySet");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroButcherFreshMeatVehiclePickup, c_playerAny, "ButcherFreshMeat20StackImpactDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Butcher - Fresh Meat - Vehicle Occupy

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroButcherFreshMeatVehicleOccupy_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_butcher;

    int lv_butcher_Player;

    unit lv_vehicle;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_butcher = EventUnit();

    lv_butcher_Player = UnitGetOwner(lv_butcher);

    lv_vehicle = libGame_gv_players[lv_butcher_Player].lv_activeVehicle;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_butcher) == "HeroButcher"))) {

            return false;

        }



        if (!((UnitGetTokenCount(lv_butcher, "ButcherFreshMeatTokenCounter") < libGDHL_gv_heroButcherFreshMeatMaxMeatCount))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_vehicle, "ButcherFreshMeatVehicleCarry", lv_butcher, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroButcherFreshMeatVehicleOccupy_Init () {

    libGDHL_gt_HeroButcherFreshMeatVehicleOccupy = TriggerCreate("libGDHL_gt_HeroButcherFreshMeatVehicleOccupy_Func");

    TriggerEnable(libGDHL_gt_HeroButcherFreshMeatVehicleOccupy, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroButcherFreshMeatVehicleOccupy, null, "UsingVehicle", c_unitBehaviorChangeIncrease);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Butcher - Fresh Meat - Update Stack Counter

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter_Func (bool testConds, bool runActions) {

    // Variable Declarations

    string lv_freshMeatChargeLink;

    int lv_butcherPlayer;

    unit lv_butcher;

    int lv_maxCharges;

    int lv_currentCharges;

    int lv_changeInCharges;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_freshMeatChargeLink = "Abil/ButcherFreshMeatDummy";

    lv_butcherPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_butcher = libGame_gv_players[lv_butcherPlayer].lv_heroUnit;

    lv_maxCharges = FixedToInt(CatalogReferenceGetAsInt("Abil,ButcherFreshMeatDummy,Cost.Charge.CountMax", c_playerAny));

    lv_currentCharges = (lv_maxCharges - FixedToInt(UnitGetChargeUsed(lv_butcher, lv_freshMeatChargeLink)));

    lv_changeInCharges = (UnitBehaviorCount(lv_butcher, "ButcherFreshMeatTokenCounter") - lv_currentCharges);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitAddChargeUsed(lv_butcher, lv_freshMeatChargeLink, (lv_changeInCharges * -1));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter_Init () {

    libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter = TriggerCreate("libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter_Func");

    TriggerEnable(libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter, c_playerAny, "ButcherFreshMeat1StackImpactSet");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter, c_playerAny, "ButcherFreshMeatDeathRemove15StackSet");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter, c_playerAny, "ButcherFreshMeat20StackImpactSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Wandering Keg Activate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenWanderingKegActivate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_chen;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_chen = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_chen);

    if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_player) == false)) {

        UnitBehaviorAdd(lv_chen, "ChenWanderingKegMovementDisabler", lv_chen, 1);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenWanderingKegActivate_Init () {

    libGDHL_gt_HeroChenWanderingKegActivate = TriggerCreate("libGDHL_gt_HeroChenWanderingKegActivate_Func");

    TriggerEnable(libGDHL_gt_HeroChenWanderingKegActivate, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroChenWanderingKegActivate, c_playerAny, "ChenWanderingKegInitialSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Wandering Keg Deactivate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenWanderingKegDeactivate_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorRemove(EventUnit(), "ChenWanderingKegDontDie", 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenWanderingKegDeactivate_Init () {

    libGDHL_gt_HeroChenWanderingKegDeactivate = TriggerCreate("libGDHL_gt_HeroChenWanderingKegDeactivate_Func");

    TriggerEnable(libGDHL_gt_HeroChenWanderingKegDeactivate, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroChenWanderingKegDeactivate, null, "ChenWanderingKegCasterBuff", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Storm Earth Fire Timed Life Increase

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStormEarthFireTimedLifeIncrease_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_chen;

    int lv_chenOwner;



    // Automatic Variable Declarations

    unitgroup autoCC30ED76_g;

    int autoCC30ED76_u;

    unit autoCC30ED76_var;



    // Variable Initialization

    lv_chen = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_chenOwner = UnitGetOwner(lv_chen);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_chen, "ChenStormStormEarthFireEmpoweredCastModifyTimedLifeChenUnit", lv_chen);

    autoCC30ED76_g = libGDHL_gv_heroChenStormEarthFireUnits[lv_chenOwner].lv_stormEarthFireUnits;

    autoCC30ED76_u = UnitGroupCount(autoCC30ED76_g, c_unitCountAll);

    for (;; autoCC30ED76_u -= 1) {

        autoCC30ED76_var = UnitGroupUnitFromEnd(autoCC30ED76_g, autoCC30ED76_u);

        if (autoCC30ED76_var == null) { break; }

        UnitCreateEffectUnit(lv_chen, "ChenStormStormEarthFireEmpoweredCastModifyTimedLife", autoCC30ED76_var);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStormEarthFireTimedLifeIncrease_Init () {

    libGDHL_gt_HeroChenStormEarthFireTimedLifeIncrease = TriggerCreate("libGDHL_gt_HeroChenStormEarthFireTimedLifeIncrease_Func");

    TriggerEnable(libGDHL_gt_HeroChenStormEarthFireTimedLifeIncrease, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroChenStormEarthFireTimedLifeIncrease, c_playerAny, "ChenStormStormEarthFireEmpoweredCastModifyTimedLifeDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Storm Earth And Fire Stasis

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStormEarthAndFireStasis_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_itUnit;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto7E91516A_g;

    int auto7E91516A_u;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayer();

    if ((lv_player > libCore_gv_bALMaxPlayers)) {

        return true;

    }



    if ((libGame_gv_players[lv_player].lv_heroIndex != libCore_gf_GetHeroIndexForUnitType("HeroChen")) && ((UnitHasBehavior2(libGame_gv_players[lv_player].lv_heroUnit, "ChenStormEarthFireCasterInitialDisable") != true) || (UnitHasBehavior2(libGame_gv_players[lv_player].lv_heroUnit, "StormEarthFireCasterBehavior") != true))) {

        return true;

    }



    auto7E91516A_g = libGDHL_gv_heroChenStormEarthFireUnits[lv_player].lv_stormEarthFireUnits;

    auto7E91516A_u = UnitGroupCount(auto7E91516A_g, c_unitCountAll);

    for (;; auto7E91516A_u -= 1) {

        lv_itUnit = UnitGroupUnitFromEnd(auto7E91516A_g, auto7E91516A_u);

        if (lv_itUnit == null) { break; }

        if ((UnitFilterMatch(lv_itUnit, lv_player, UnitFilter(0, 0, 0, (1 << (c_targetFilterStasis - 32)))) == true)) {

            return true;

        }



    }

    UnitBehaviorAdd(libGame_gv_players[lv_player].lv_heroUnit, "ChenElementalAbilitySuppression", libGame_gv_players[lv_player].lv_heroUnit, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStormEarthAndFireStasis_Init () {

    libGDHL_gt_HeroChenStormEarthAndFireStasis = TriggerCreate("libGDHL_gt_HeroChenStormEarthAndFireStasis_Func");

    TriggerEnable(libGDHL_gt_HeroChenStormEarthAndFireStasis, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroChenStormEarthAndFireStasis, null, c_behaviorCategoryDebuffStasis, c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Storm Earth And Fire Timestop

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStormEarthAndFireTimestop_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_i;

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto0E1B5985_g;

    int auto0E1B5985_u;

    unit auto0E1B5985_var;



    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((lv_player > 0))) {

            return false;

        }



        if (!((lv_player < libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    while ((UnitHasBehavior2(lv_unit, "StormEarthFireCasterBehavior") == true)) {

        auto0E1B5985_g = libGDHL_gv_heroChenStormEarthFireUnits[lv_player].lv_stormEarthFireUnits;

        auto0E1B5985_u = UnitGroupCount(auto0E1B5985_g, c_unitCountAll);

        for (;; auto0E1B5985_u -= 1) {

            auto0E1B5985_var = UnitGroupUnitFromEnd(auto0E1B5985_g, auto0E1B5985_u);

            if (auto0E1B5985_var == null) { break; }

            if ((UnitHasBehaviorWithCategoryFlag(auto0E1B5985_var, c_behaviorCategoryTimeStop) == true)) {

                lv_i += 1;

                if ((UnitGroupCount(libGDHL_gv_heroChenStormEarthFireUnits[lv_player].lv_stormEarthFireUnits, c_unitCountAlive) == lv_i)) {

                    UnitBehaviorAdd(libGame_gv_players[lv_player].lv_heroUnit, "ChenStormEarthFireTimeStopController", UnitGroupRandomUnit(libGDHL_gv_heroChenStormEarthFireUnits[lv_player].lv_stormEarthFireUnits, c_unitCountAlive), 1);

                }



            }



        }

        lv_i = 0;

        Wait(0.0625, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStormEarthAndFireTimestop_Init () {

    libGDHL_gt_HeroChenStormEarthAndFireTimestop = TriggerCreate("libGDHL_gt_HeroChenStormEarthAndFireTimestop_Func");

    TriggerEnable(libGDHL_gt_HeroChenStormEarthAndFireTimestop, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroChenStormEarthAndFireTimestop, null, "StormEarthFireCasterBehavior", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Storm Earth And Fire Stasis Cleanup

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStormEarthAndFireStasisCleanup_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_itUnit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayer();

    if ((lv_player > libCore_gv_bALMaxPlayers)) {

        return true;

    }



    if ((libGame_gv_players[lv_player].lv_heroIndex != libCore_gf_GetHeroIndexForUnitType("HeroChen"))) {

        return true;

    }



    if ((UnitGroupHasUnit(libGDHL_gv_heroChenStormEarthFireUnits[lv_player].lv_stormEarthFireUnits, EventUnit()) == true) && (UnitFilterMatch(EventUnit(), lv_player, UnitFilter(0, 0, 0, (1 << (c_targetFilterStasis - 32)))) == true)) {

        UnitBehaviorRemove(libGame_gv_players[lv_player].lv_heroUnit, "ChenElementalAbilitySuppression", 1);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStormEarthAndFireStasisCleanup_Init () {

    libGDHL_gt_HeroChenStormEarthAndFireStasisCleanup = TriggerCreate("libGDHL_gt_HeroChenStormEarthAndFireStasisCleanup_Func");

    TriggerEnable(libGDHL_gt_HeroChenStormEarthAndFireStasisCleanup, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroChenStormEarthAndFireStasisCleanup, null, c_behaviorCategoryDebuffStasis, c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Storm Earth Fire Activated New

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStormEarthFireActivatedNew_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_chen;

    unit lv_itChenSpirit;

    int lv_chenPlayer;



    // Automatic Variable Declarations

    unitgroup autoF2A44342_g;

    int autoF2A44342_u;

    unitgroup auto41D2074B_g;

    int auto41D2074B_u;

    unit auto41D2074B_var;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_chen = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_chenPlayer = UnitGetOwner(lv_chen);

    libGDHL_gv_heroChenStormEarthFireFatalDamageResponseCounter[lv_chenPlayer] = 0;

    UnitCreate(1, "HeroChenStorm", 0, lv_chenPlayer, PointWithOffsetPolar(UnitGetPosition(lv_chen), 1.5, 0.0), 0.0, lv_chen);

    UnitBehaviorAdd(UnitLastCreated(), "StormEarthFireTimedLife", lv_chen, 1);

    UnitBehaviorAdd(lv_chen, "ChenStormEarthFireStormAbilityDisable", UnitLastCreated(), 1);

    UnitGroupAdd(libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_stormEarthFireUnits, UnitLastCreated());

    UnitGroupAdd(libGame_gv_players[lv_chenPlayer].lv_heroUnitGroup, UnitLastCreated());

    UnitGroupAdd(libGame_gv_players[lv_chenPlayer].lv_altClickPartyFrameAnnouncementUnitGroup, UnitLastCreated());

    AIAddPlayerUnit(UnitLastCreated());

    libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_controlStoreUnit = UnitLastCreated();

    UnitCreate(1, "HeroChenEarth", 0, lv_chenPlayer, PointWithOffsetPolar(UnitGetPosition(lv_chen), 1.5, 120.0), 120.0, lv_chen);

    UnitBehaviorAdd(UnitLastCreated(), "StormEarthFireTimedLife", lv_chen, 1);

    UnitBehaviorAdd(lv_chen, "ChenStormEarthFireEarthAbilityDisable", UnitLastCreated(), 1);

    UnitGroupAdd(libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_stormEarthFireUnits, UnitLastCreated());

    UnitGroupAdd(libGame_gv_players[lv_chenPlayer].lv_heroUnitGroup, UnitLastCreated());

    UnitGroupAdd(libGame_gv_players[lv_chenPlayer].lv_altClickPartyFrameAnnouncementUnitGroup, UnitLastCreated());

    AIAddPlayerUnit(UnitLastCreated());

    UnitCreate(1, "HeroChenFire", 0, lv_chenPlayer, PointWithOffsetPolar(UnitGetPosition(lv_chen), 1.5, 240.0), 240.0, lv_chen);

    UnitBehaviorAdd(UnitLastCreated(), "StormEarthFireTimedLife", lv_chen, 1);

    UnitBehaviorAdd(lv_chen, "ChenStormEarthFireFireAbilityDisable", UnitLastCreated(), 1);

    UnitGroupAdd(libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_stormEarthFireUnits, UnitLastCreated());

    UnitGroupAdd(libGame_gv_players[lv_chenPlayer].lv_heroUnitGroup, UnitLastCreated());

    UnitGroupAdd(libGame_gv_players[lv_chenPlayer].lv_altClickPartyFrameAnnouncementUnitGroup, UnitLastCreated());

    AIAddPlayerUnit(UnitLastCreated());

    UnitGroupRemove(libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_stormEarthFireUnits, lv_chen);

    autoF2A44342_g = libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_stormEarthFireUnits;

    autoF2A44342_u = UnitGroupCount(autoF2A44342_g, c_unitCountAll);

    for (;; autoF2A44342_u -= 1) {

        lv_itChenSpirit = UnitGroupUnitFromEnd(autoF2A44342_g, autoF2A44342_u);

        if (lv_itChenSpirit == null) { break; }

        UnitBehaviorAdd(lv_itChenSpirit, "MapMechanicStack", lv_itChenSpirit, UnitBehaviorCount(lv_chen, "MapMechanicStack"));

        UnitSelect(lv_itChenSpirit, lv_chenPlayer, true);

    }

    if ((UnitGetType(libGame_gv_players[lv_chenPlayer].lv_heroUnit) == "HeroAbathur")) {

        auto41D2074B_g = libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_stormEarthFireUnits;

        auto41D2074B_u = UnitGroupCount(auto41D2074B_g, c_unitCountAll);

        for (;; auto41D2074B_u -= 1) {

            auto41D2074B_var = UnitGroupUnitFromEnd(auto41D2074B_g, auto41D2074B_u);

            if (auto41D2074B_var == null) { break; }

            UnitBehaviorAdd(auto41D2074B_var, "UltimateEvolutionAlternateHero", auto41D2074B_var, 1);

            UnitBehaviorAdd(auto41D2074B_var, "AbathurUltimateEvolutionCleanupTarget", auto41D2074B_var, 1);

        }

    }



    UISetSelectionTypeEnabled(PlayerGroupSingle(lv_chenPlayer), c_localSelectionTypeWorldPanelHero, false);

    while ((UnitHasBehavior2(lv_chen, "StormEarthFireCasterBehavior") == true)) {

        if ((UnitIsAlive(libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_controlStoreUnit) == true)) {

            if ((DistanceBetweenPoints(UnitGetPosition(lv_chen), UnitGetPosition(libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_controlStoreUnit)) >= 4.0)) {

                UnitSetPosition(lv_chen, UnitGetPosition(libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_controlStoreUnit), true);

            }

            else {

                UnitSetPosition(lv_chen, UnitGetPosition(libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_controlStoreUnit), true);

            }

        }



        Wait(0.0625, c_timeGame);

    }

    UISetSelectionTypeEnabled(PlayerGroupSingle(lv_chenPlayer), c_localSelectionTypeWorldPanelHero, true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStormEarthFireActivatedNew_Init () {

    libGDHL_gt_HeroChenStormEarthFireActivatedNew = TriggerCreate("libGDHL_gt_HeroChenStormEarthFireActivatedNew_Func");

    TriggerEnable(libGDHL_gt_HeroChenStormEarthFireActivatedNew, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroChenStormEarthFireActivatedNew, c_playerAny, "ChenStormEarthFireCreateFinishSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Element Dies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenElementDies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_killingUnit;

    unit lv_killedElement;

    int lv_owner;

    unit lv_chen;

    int lv_elementsAlive;

    point lv_chenReturnPoint;



    // Automatic Variable Declarations

    string auto06E2BA20_val;

    unitgroup auto44B73923_g;

    int auto44B73923_u;

    unit auto44B73923_var;



    // Variable Initialization

    lv_killingUnit = libNtve_gf_KillingUnit();

    lv_killedElement = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitBehaviorCount(libGame_gv_players[UnitGetOwner(lv_killedElement)].lv_heroUnit, "StormEarthFireCasterBehavior") == 1))) {

            return false;

        }



        if (!(((UnitGetType(lv_killedElement) == "HeroChenStorm") || (UnitGetType(lv_killedElement) == "HeroChenEarth") || (UnitGetType(lv_killedElement) == "HeroChenFire")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_chenReturnPoint = UnitGetPosition(lv_killedElement);

    lv_owner = UnitGetOwner(lv_killedElement);

    if ((UnitGetType(libGame_gv_players[lv_owner].lv_heroUnit) == "HeroChen")) {

        lv_chen = libGame_gv_players[lv_owner].lv_heroUnit;

    }

    else {

        lv_chen = libGame_gv_players[lv_owner].lv_activeVehicle;

    }

    lv_elementsAlive = UnitGroupCount(libGDHL_gv_heroChenStormEarthFireUnits[lv_owner].lv_stormEarthFireUnits, c_unitCountAlive);

    auto06E2BA20_val = UnitGetType(lv_killedElement);

    if (auto06E2BA20_val == "HeroChenStorm") {

        UnitBehaviorRemove(lv_chen, "ChenStormAlive", 1);

    }

    else if (auto06E2BA20_val == "HeroChenEarth") {

        UnitBehaviorRemove(lv_chen, "ChenEarthAlive", 1);

    }

    else if (auto06E2BA20_val == "HeroChenFire") {

        UnitBehaviorRemove(lv_chen, "ChenFireAlive", 1);

    }

    else {

    }

    if ((lv_elementsAlive == 0)) {

        if ((UnitGetOwner(lv_killingUnit) != lv_owner)) {

            libGDHL_gf_HeroChenStormEarthFireCleanup(lv_owner, true, lv_killingUnit);

        }

        else {

            libGDHL_gf_HeroChenStormEarthFireCleanup(lv_owner, false, lv_killingUnit);

        }

    }

    else {

        if ((lv_killedElement == libGDHL_gv_heroChenStormEarthFireUnits[lv_owner].lv_controlStoreUnit)) {

            auto44B73923_g = UnitGroupFilter(null, lv_owner, libGDHL_gv_heroChenStormEarthFireUnits[lv_owner].lv_stormEarthFireUnits, UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

            auto44B73923_u = UnitGroupCount(auto44B73923_g, c_unitCountAll);

            for (;; auto44B73923_u -= 1) {

                auto44B73923_var = UnitGroupUnitFromEnd(auto44B73923_g, auto44B73923_u);

                if (auto44B73923_var == null) { break; }

                if ((lv_elementsAlive == 2) && (UnitGetType(auto44B73923_var) == "HeroChenEarth")) {

                    libGDHL_gv_heroChenStormEarthFireUnits[lv_owner].lv_controlStoreUnit = auto44B73923_var;

                    break;

                }

                else {

                    if ((lv_elementsAlive == 1) && (UnitGetType(auto44B73923_var) == "HeroChenFire")) {

                        libGDHL_gv_heroChenStormEarthFireUnits[lv_owner].lv_controlStoreUnit = auto44B73923_var;

                        break;

                    }

                    else {

                        if ((lv_elementsAlive == 1) && (UnitGetType(auto44B73923_var) == "HeroChenEarth")) {

                            libGDHL_gv_heroChenStormEarthFireUnits[lv_owner].lv_controlStoreUnit = auto44B73923_var;

                            break;

                        }



                    }

                }

            }

        }



    }

    Wait(2.0, c_timeGame);

    UnitRemove(EventUnit());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenElementDies_Init () {

    libGDHL_gt_HeroChenElementDies = TriggerCreate("libGDHL_gt_HeroChenElementDies_Func");

    TriggerEnable(libGDHL_gt_HeroChenElementDies, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroChenElementDies, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Element Fatal Damage Response

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenElementFatalDamageResponse_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_spirit;

    int lv_spiritOwner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_spirit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_spiritOwner = UnitGetOwner(lv_spirit);



    // Conditions

    if (testConds) {

        if (!((lv_spiritOwner > 0))) {

            return false;

        }



        if (!((lv_spiritOwner <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((libGDHL_gv_heroChenStormEarthFireFatalDamageResponseCounter[lv_spiritOwner] >= 3)) {

        libGDHL_gv_heroChenStormEarthFireFatalDamageResponseCounter[lv_spiritOwner] = 3;

    }

    else {

        libGDHL_gv_heroChenStormEarthFireFatalDamageResponseCounter[lv_spiritOwner] += 1;

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenElementFatalDamageResponse_Init () {

    libGDHL_gt_HeroChenElementFatalDamageResponse = TriggerCreate("libGDHL_gt_HeroChenElementFatalDamageResponse_Func");

    TriggerEnable(libGDHL_gt_HeroChenElementFatalDamageResponse, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroChenElementFatalDamageResponse, c_playerAny, "ChenStormEarthFireFatalDamageResponseDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Expiration Cleanup

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenExpirationCleanup_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto342D60BF_g;

    int auto342D60BF_u;

    unit auto342D60BF_var;



    // Variable Initialization

    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    auto342D60BF_g = libGDHL_gv_heroChenStormEarthFireUnits[lv_player].lv_stormEarthFireUnits;

    auto342D60BF_u = UnitGroupCount(auto342D60BF_g, c_unitCountAll);

    for (;; auto342D60BF_u -= 1) {

        auto342D60BF_var = UnitGroupUnitFromEnd(auto342D60BF_g, auto342D60BF_u);

        if (auto342D60BF_var == null) { break; }

        if (((UnitGetType(auto342D60BF_var) == "HeroChenStorm") || (UnitGetType(auto342D60BF_var) == "HeroChenFire") || (UnitGetType(auto342D60BF_var) == "HeroChenEarth"))) {

            UnitCreateEffectUnit(auto342D60BF_var, "TimedLifeFate", auto342D60BF_var);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenExpirationCleanup_Init () {

    libGDHL_gt_HeroChenExpirationCleanup = TriggerCreate("libGDHL_gt_HeroChenExpirationCleanup_Func");

    TriggerEnable(libGDHL_gt_HeroChenExpirationCleanup, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroChenExpirationCleanup, c_playerAny, "StormEarthFireTimedLifeFate");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Storm Earth Fire Earth Ability

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStormEarthFireEarthAbility_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_chenPlayer;

    unit lv_Chen;

    fixed lv_maxJumpRange;

    point lv_playerTargetPoint;

    fixed lv_distanceFromSpiritToPlayerTargetPoint;

    fixed lv_spiritRadius;

    point lv_actualTargetPoint;

    point lv_closestElementPoint;

    fixed lv_modifiedDistance;



    // Automatic Variable Declarations

    unitgroup autoC170BB9F_g;

    int autoC170BB9F_u;

    unit autoC170BB9F_var;



    // Variable Initialization

    lv_chenPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_Chen = libGame_gv_players[lv_chenPlayer].lv_heroUnit;

    lv_maxJumpRange = 9.5;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_playerTargetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    lv_closestElementPoint = UnitGetPosition(UnitGroupClosestToPoint(libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_stormEarthFireUnits, lv_playerTargetPoint));

    lv_distanceFromSpiritToPlayerTargetPoint = DistanceBetweenPoints(lv_closestElementPoint, lv_playerTargetPoint);

    lv_spiritRadius = 0.5;

    if ((lv_distanceFromSpiritToPlayerTargetPoint > lv_maxJumpRange)) {

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_closestElementPoint, lv_maxJumpRange, lv_playerTargetPoint);

    }

    else {

        lv_actualTargetPoint = lv_playerTargetPoint;

    }

    lv_modifiedDistance = (lv_maxJumpRange + 0.125);

    autoC170BB9F_g = libGDHL_gv_heroChenStormEarthFireUnits[lv_chenPlayer].lv_stormEarthFireUnits;

    autoC170BB9F_u = UnitGroupCount(autoC170BB9F_g, c_unitCountAll);

    for (;; autoC170BB9F_u -= 1) {

        autoC170BB9F_var = UnitGroupUnitFromEnd(autoC170BB9F_g, autoC170BB9F_u);

        if (autoC170BB9F_var == null) { break; }

        if ((UnitGetType(autoC170BB9F_var) != "HeroChenStorm")) {

            if (((UnitBehaviorCount(lv_Chen, "ChenStormEarthFireStackingBehaviorEmpoweredFinalAbilityCast") == 2) || (PlayerHasTalent(lv_chenPlayer, "ChenElementalConduit") == true))) {

                UnitCreateEffectUnit(autoC170BB9F_var, "ChenEarthStormEarthFireDummyLeapEmpoweredBonusesApplyBehavior", autoC170BB9F_var);

            }



            while ((PointPathingPassable(lv_actualTargetPoint) == false)) {

                lv_modifiedDistance -= 0.125;

                lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(lv_closestElementPoint, lv_modifiedDistance, lv_playerTargetPoint);

            }

        }

        if ((UnitGetType(autoC170BB9F_var) != "HeroChenStorm") && (UnitIsAlive(autoC170BB9F_var) == true) && (PointPathingCost(UnitGetPosition(autoC170BB9F_var), lv_actualTargetPoint) < 100)) {

            libNtve_gf_MakeUnitFacePoint(autoC170BB9F_var, lv_actualTargetPoint, 0.0);

            UnitCreateEffectUnit(autoC170BB9F_var, "DismountDecloakCasterSet", autoC170BB9F_var);

            UnitCreateEffectPointWithSource(autoC170BB9F_var, "ChenEarthLaunchMissile", lv_actualTargetPoint, c_gameCatalogAbil, "ChenStormEarthFireTriAttack");

            UnitIssueOrder(autoC170BB9F_var, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

        }



    }

    UnitCreateEffectUnit(lv_Chen, "EmpoweredStormEarthFireStackingBehaviorEmpoweredFinalAbilityCastApplyBehavior", lv_Chen);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStormEarthFireEarthAbility_Init () {

    libGDHL_gt_HeroChenStormEarthFireEarthAbility = TriggerCreate("libGDHL_gt_HeroChenStormEarthFireEarthAbility_Func");

    TriggerEnable(libGDHL_gt_HeroChenStormEarthFireEarthAbility, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroChenStormEarthFireEarthAbility, c_playerAny, "ChenEarthDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Swift Reflexes Talent - Missed

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenSwiftReflexesTalentMissed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_caster;

    int lv_target;

    playergroup lv_players;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_target = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);

    lv_players = PlayerGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((libSprt_gv_dEBUGCombatTextEnabled == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventPlayerEffectUsed() == "LiLiBlindingWindRemoveBehaviorBlind")) {

        PlayerGroupAdd(lv_players, lv_caster);

        PlayerGroupAdd(lv_players, EventPlayerEffectUsedUnitOwner(c_effectPlayerSource));

        FloatingCombatElementCreateTextAtUnit(lv_players, "FloatingCombatElements/FloatingCombatElementTemplate", "", EventPlayerEffectUsedUnit(c_effectUnitTarget), StringExternal("Param/Value/lib_GDHL_1032ACAE"), libNtve_gv_FloatingCombatTextAutoRandomSeed);

    }

    else {

        PlayerGroupAdd(lv_players, lv_target);

        PlayerGroupAdd(lv_players, lv_caster);

        FloatingCombatElementCreateTextAtUnit(lv_players, "FloatingCombatElements/FloatingCombatElementTemplate", "", EventPlayerEffectUsedUnit(c_effectUnitSource), StringExternal("Param/Value/lib_GDHL_D0A684FD"), libNtve_gv_FloatingCombatTextAutoRandomSeed);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenSwiftReflexesTalentMissed_Init () {

    libGDHL_gt_HeroChenSwiftReflexesTalentMissed = TriggerCreate("libGDHL_gt_HeroChenSwiftReflexesTalentMissed_Func");

    TriggerEnable(libGDHL_gt_HeroChenSwiftReflexesTalentMissed, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroChenSwiftReflexesTalentMissed, c_playerAny, "ChenSwiftReflexesProcSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Freshest Ingredients Talent Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenFreshestIngredientsTalentProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_itRegenGlobeImpactUnit;

    unit lv_regenGlobeTarget;

    int lv_regenGlobeTargetPlayer;

    playergroup lv_chenPlayerGroup;

    unit lv_itChenUnit;

    int lv_itChenPlayer;

    fixed lv_regenGlobeSearchRadius;



    // Automatic Variable Declarations

    unitgroup autoA4EE960C_g;

    int autoA4EE960C_u;

    playergroup auto7AE37C66_g;



    // Variable Initialization

    lv_regenGlobeTarget = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_regenGlobeTargetPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);

    lv_chenPlayerGroup = PlayerGroupEmpty();



    // Actions

    if (!runActions) {

        return true;

    }



    lv_regenGlobeSearchRadius = CatalogFieldValueGetAsInt(c_gameCatalogEffect, "RegenGlobePickupSearch", "AreaArray[" + IntToString(0) + "].Radius", 0);

    autoA4EE960C_g = UnitGroupAlliance(lv_regenGlobeTargetPlayer, c_unitAllianceAlly, RegionCircle(UnitGetPosition(lv_regenGlobeTarget), lv_regenGlobeSearchRadius), libCore_gv_filtersHeroicAllyorPlayerandnotStasis, 0);

    autoA4EE960C_u = UnitGroupCount(autoA4EE960C_g, c_unitCountAll);

    for (;; autoA4EE960C_u -= 1) {

        lv_itRegenGlobeImpactUnit = UnitGroupUnitFromEnd(autoA4EE960C_g, autoA4EE960C_u);

        if (lv_itRegenGlobeImpactUnit == null) { break; }

        if ((PlayerHasTalent(UnitGetOwner(lv_itRegenGlobeImpactUnit), "ChenFreshestIngredients") == true) && ((UnitGetType(lv_itRegenGlobeImpactUnit) == "HeroChen") || (UnitGetType(lv_itRegenGlobeImpactUnit) == "HeroChenStorm") || (UnitGetType(lv_itRegenGlobeImpactUnit) == "HeroChenEarth") || (UnitGetType(lv_itRegenGlobeImpactUnit) == "HeroChenFire"))) {

            PlayerGroupAdd(lv_chenPlayerGroup, UnitGetOwner(lv_itRegenGlobeImpactUnit));

        }

        else {

            if ((((lv_itRegenGlobeImpactUnit == libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeImpactUnit)].lv_unit_Vehicle) && (UnitGetType(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeImpactUnit)].lv_unit_UnitInsideVehicle) == "HeroChen")) || ((lv_itRegenGlobeImpactUnit == libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeImpactUnit)].lv_unit_Vehicle) && (UnitGetType(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeImpactUnit)].lv_unit_LinkedVehicle)].lv_unit_UnitInsideVehicle) == "HeroChen")))) {

                if ((UnitIsValid(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeImpactUnit)].lv_unit_LinkedVehicle) == true)) {

                    PlayerGroupAdd(lv_chenPlayerGroup, UnitGetOwner(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeImpactUnit)].lv_unit_LinkedVehicle));

                }



                PlayerGroupAdd(lv_chenPlayerGroup, UnitGetOwner(lv_itRegenGlobeImpactUnit));

            }



        }

    }

    auto7AE37C66_g = lv_chenPlayerGroup;

    lv_itChenPlayer = -1;

    while (true) {

        	lv_itChenPlayer = PlayerGroupNextPlayer(auto7AE37C66_g, lv_itChenPlayer);

        	if (lv_itChenPlayer<0) { break; }

        	if ((PlayerHasTalent(lv_itChenPlayer, "ChenFreshestIngredients") == true)) {

            lv_itChenUnit = libGame_gv_players[lv_itChenPlayer].lv_heroUnit;

            UnitCreateEffectUnit(lv_itChenUnit, "ChenFortifyingBrewFreshestIngredientsAddTokenCounter", lv_itChenUnit);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenFreshestIngredientsTalentProc_Init () {

    libGDHL_gt_HeroChenFreshestIngredientsTalentProc = TriggerCreate("libGDHL_gt_HeroChenFreshestIngredientsTalentProc_Func");

    TriggerEnable(libGDHL_gt_HeroChenFreshestIngredientsTalentProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroChenFreshestIngredientsTalentProc, c_playerAny, "RegenGlobePickupSearch");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen Stagger Gift Of The Ox Talent Damage Modification

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModification_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroGainTalentPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroChen"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "ChenGiftOfTheOxStagger") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroChenStaggerDamageModification[lv_player] = 0.5;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModification_Init () {

    libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModification = TriggerCreate("libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModification_Func");

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModification);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen Stagger Gift Of The Ox Talent Damage Modification Reset

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModificationReset_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroRespecsTalentsPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroChen"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroChenStaggerDamageModification[lv_player] = 0.75;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModificationReset_Init () {

    libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModificationReset = TriggerCreate("libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModificationReset_Func");

    libGame_gf_HeroRespecsTalents(libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModificationReset);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Stagger Damage Response

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStaggerDamageResponse_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_chen;

    int lv_chenOwner;

    fixed lv_damageTaken;

    int lv_damageTakenInteger;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_chen = EventUnit();

    lv_chenOwner = UnitGetOwner(lv_chen);

    lv_damageTaken = (EventUnitDamageAbsorbed() * libGDHL_gv_heroChenStaggerDamageModification[lv_chenOwner]);

    lv_damageTakenInteger = FixedToInt(lv_damageTaken);



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gf_ModifyTokenCount(lv_damageTakenInteger, "ChenStaggerTokenCounter", lv_chen);

    libGame_gf_ModifyTokenCount(lv_damageTakenInteger, "ChenStaggerDisplayTokenCounter", lv_chen);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStaggerDamageResponse_Init () {

    libGDHL_gt_HeroChenStaggerDamageResponse = TriggerCreate("libGDHL_gt_HeroChenStaggerDamageResponse_Func");

    TriggerEnable(libGDHL_gt_HeroChenStaggerDamageResponse, false);

    TriggerAddEventUnitDamageAbsorbed(libGDHL_gt_HeroChenStaggerDamageResponse, null, "ChenStaggerProtectedBuff");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Chen - Stagger Display Update

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroChenStaggerDisplayUpdate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_chen;

    int lv_chenOwner;

    fixed lv_damageTaken;

    int lv_damageTakenInteger;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_chen = EventUnit();

    lv_chenOwner = UnitGetOwner(lv_chen);

    lv_damageTaken = EventUnitDamageAttempted();

    lv_damageTakenInteger = FixedToInt((lv_damageTaken * -1.0));



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gf_ModifyTokenCount(lv_damageTakenInteger, "ChenStaggerDisplayTokenCounter", lv_chen);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroChenStaggerDisplayUpdate_Init () {

    libGDHL_gt_HeroChenStaggerDisplayUpdate = TriggerCreate("libGDHL_gt_HeroChenStaggerDisplayUpdate_Func");

    TriggerEnable(libGDHL_gt_HeroChenStaggerDisplayUpdate, false);

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroChenStaggerDisplayUpdate, null, c_unitDamageTypeAny, c_unitDamageEither, "ChenStaggerDoTDamage");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Crusader - Falling Sword - Teleport

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_CrusaderFallingSwordTeleport_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;

    int lv_owner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_owner = UnitGetOwner(lv_caster);



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gv_players[lv_owner].lv_cameraCameraLockInterrupt = true;

    libGame_gf_CameraUpdateCameraForPlayer(lv_owner);

    libGame_gf_CameraPanCameraForPlayerAndUpdateMapBoundsIfNecessary(lv_owner, UnitGetPosition(lv_caster), 0.0, -1, 10.0, false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_CrusaderFallingSwordTeleport_Init () {

    libGDHL_gt_CrusaderFallingSwordTeleport = TriggerCreate("libGDHL_gt_CrusaderFallingSwordTeleport_Func");

    TriggerEnable(libGDHL_gt_CrusaderFallingSwordTeleport, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_CrusaderFallingSwordTeleport, c_playerAny, "CrusaderFallingSwordTeleport");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Crusader - Falling Sword - Final Set

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_CrusaderFallingSwordFinalSet_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gv_players[lv_player].lv_cameraCameraLockInterrupt = false;

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_CrusaderFallingSwordFinalSet_Init () {

    libGDHL_gt_CrusaderFallingSwordFinalSet = TriggerCreate("libGDHL_gt_CrusaderFallingSwordFinalSet_Func");

    TriggerEnable(libGDHL_gt_CrusaderFallingSwordFinalSet, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_CrusaderFallingSwordFinalSet, null, "CrusaderFallingSword", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Crusader - Falling Sword - Suppress Collision

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_CrusaderFallingSwordSuppressCollision_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSet(c_gameCatalogUnit, "HeroCrusader", "Collide[" + IntToString(1) + "]", UnitGetOwner(EventUnit()), "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroCrusader", "Collide[" + IntToString(12) + "]", UnitGetOwner(EventUnit()), "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroCrusader", "Collide[" + IntToString(8) + "]", UnitGetOwner(EventUnit()), "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroCrusader", "Collide[" + IntToString(10) + "]", UnitGetOwner(EventUnit()), "1");

    while (!((UnitHasBehavior2(EventUnit(), "CrusaderFallingSword") == false))) {

        Wait(0.0625, c_timeGame);

    }

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroCrusader", "Collide[" + IntToString(1) + "]", UnitGetOwner(EventUnit()), "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroCrusader", "Collide[" + IntToString(12) + "]", UnitGetOwner(EventUnit()), "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroCrusader", "Collide[" + IntToString(8) + "]", UnitGetOwner(EventUnit()), "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroCrusader", "Collide[" + IntToString(10) + "]", UnitGetOwner(EventUnit()), "0");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_CrusaderFallingSwordSuppressCollision_Init () {

    libGDHL_gt_CrusaderFallingSwordSuppressCollision = TriggerCreate("libGDHL_gt_CrusaderFallingSwordSuppressCollision_Func");

    TriggerEnable(libGDHL_gt_CrusaderFallingSwordSuppressCollision, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_CrusaderFallingSwordSuppressCollision, null, "CrusaderFallingSword", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Diablo - Overpower Set Facing

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDiabloOverpowerSetFacing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_diabloUnit;

    fixed lv_diabloFacing;

    fixed lv_diabloNewFacing;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_diabloUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_diabloFacing = UnitGetFacing(lv_diabloUnit);

    lv_diabloNewFacing = (lv_diabloFacing + 180.0);

    UnitSetFacing(lv_diabloUnit, lv_diabloNewFacing, 0.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDiabloOverpowerSetFacing_Init () {

    libGDHL_gt_HeroDiabloOverpowerSetFacing = TriggerCreate("libGDHL_gt_HeroDiabloOverpowerSetFacing_Func");

    TriggerEnable(libGDHL_gt_HeroDiabloOverpowerSetFacing, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroDiabloOverpowerSetFacing, c_playerAny, "DiabloOverpowerCasterSetFacingTriggerTriggerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Diablo - Inferno Breath Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDiabloInfernoBreathCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(lv_unit) >= 1))) {

            return false;

        }



        if (!((UnitGetOwner(lv_unit) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroDiabloInfernoBreathActive[lv_player] = true;

    CatalogFieldValueSetFixed(c_gameCatalogUnit, "HeroDiablo", "StationaryTurningRate", lv_player, libGDHL_gv_heroDiabloInfernoBreathTurningRate);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDiabloInfernoBreathCast_Init () {

    libGDHL_gt_HeroDiabloInfernoBreathCast = TriggerCreate("libGDHL_gt_HeroDiabloInfernoBreathCast_Func");

    TriggerEnable(libGDHL_gt_HeroDiabloInfernoBreathCast, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroDiabloInfernoBreathCast, null, "DiabloLightningBreathActive", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Diablo - Inferno Breath End

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDiabloInfernoBreathEnd_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_i;

    bool lv_infernoBreathAimTriggerEnabled;

    int lv_diabloIndex;

    int lv_triggeringDiabloPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_triggeringDiabloPlayer = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventUnit()) >= 1))) {

            return false;

        }



        if (!((UnitGetOwner(EventUnit()) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSet(c_gameCatalogUnit, "HeroDiablo", "StationaryTurningRate", lv_triggeringDiabloPlayer, CatalogFieldValueGet(c_gameCatalogUnit, "HeroDiablo", "StationaryTurningRate", 0));

    libGDHL_gv_heroDiabloInfernoBreathActive[lv_triggeringDiabloPlayer] = false;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDiabloInfernoBreathEnd_Init () {

    libGDHL_gt_HeroDiabloInfernoBreathEnd = TriggerCreate("libGDHL_gt_HeroDiabloInfernoBreathEnd_Func");

    TriggerEnable(libGDHL_gt_HeroDiabloInfernoBreathEnd, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroDiabloInfernoBreathEnd, null, "DiabloLightningBreathActive", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Diablo - Eternal Soulstone Ressurection

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDiabloEternalSoulstoneRessurection_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroLevelUpPlayer();

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((libGame_gf_HeroLevelUpLevel() >= 10))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroDiablo"))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_unit, "DiabloBlackSoulstoneEternalSoulstone") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_unit, "DiabloBlackSoulstoneEternalSoulstone", lv_unit, 1);

    UnitCreateEffectUnit(lv_unit, "DiabloBlackSoulstoneAdd1EternalSoulstoneTokenCount", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDiabloEternalSoulstoneRessurection_Init () {

    libGDHL_gt_HeroDiabloEternalSoulstoneRessurection = TriggerCreate("libGDHL_gt_HeroDiabloEternalSoulstoneRessurection_Func");

    TriggerEnable(libGDHL_gt_HeroDiabloEternalSoulstoneRessurection, false);

    libGame_gf_HeroLevelUp(libGDHL_gt_HeroDiabloEternalSoulstoneRessurection);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Diablo - Reset Eternal Soulstone Ressurection

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDiabloResetEternalSoulstoneRessurection_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroDiablo"))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_unit, "DiabloBlackSoulstoneEternalSoulstone") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_unit, "DiabloBlackSoulstoneResetEternalSoulstoneTokenCount", lv_unit);

    UnitBehaviorRemove(lv_unit, "DiabloBlackSoulstoneEternalSoulstone", 1);

    Wait(0.125, c_timeGame);

    if ((UnitBehaviorCount(EventUnit(), "HeroDummyVeterancy") >= 10)) {

        UnitBehaviorAdd(lv_unit, "DiabloBlackSoulstoneEternalSoulstone", lv_unit, 1);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDiabloResetEternalSoulstoneRessurection_Init () {

    libGDHL_gt_HeroDiabloResetEternalSoulstoneRessurection = TriggerCreate("libGDHL_gt_HeroDiabloResetEternalSoulstoneRessurection_Func");

    TriggerEnable(libGDHL_gt_HeroDiabloResetEternalSoulstoneRessurection, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroDiabloResetEternalSoulstoneRessurection, null, "MuradinItsHammerTimeTokenCounter", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Diablo - Black Soulstone Stack Talent Picked

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDiabloBlackSoulstoneStackTalentPicked_Func (bool testConds, bool runActions) {

    // Variable Declarations

    string lv_behavior;

    unit lv_unit;

    int lv_player;

    fixed lv_tokenStacks;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_behavior = EventUnitBehavior();

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);

    lv_tokenStacks = UnitBehaviorCount(lv_unit, "DiabloBlackSoulstoneTokenCounter");



    // Conditions

    if (testConds) {

        if (!((UnitBehaviorCount(lv_unit, "DiabloBlackSoulstoneTokenCounter") > 0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSetFixed(c_gameCatalogEffect, "DiabloBlackSoulstoneAddDynamicDevilsDueTalentTokenCount", "Value", lv_player, lv_tokenStacks);

    UnitCreateEffectUnit(lv_unit, "DiabloBlackSoulstoneAddDynamicDevilsDueTalentTokenCount", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDiabloBlackSoulstoneStackTalentPicked_Init () {

    libGDHL_gt_HeroDiabloBlackSoulstoneStackTalentPicked = TriggerCreate("libGDHL_gt_HeroDiabloBlackSoulstoneStackTalentPicked_Func");

    TriggerEnable(libGDHL_gt_HeroDiabloBlackSoulstoneStackTalentPicked, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroDiabloBlackSoulstoneStackTalentPicked, null, "DiabloBlackSoulstoneDevilsDueTalentTokenCounter", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Demon Hunter - Vault Damage Buff

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDemonHunterVaultDamageBuff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    int lv_stacks;

    fixed lv_base;

    fixed lv_stackMod;

    fixed lv_finalMod;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);

    lv_stacks = UnitBehaviorCount(lv_unit, "NewHatredStack");

    lv_stackMod = 0.06;



    // Actions

    if (!runActions) {

        return true;

    }



    if ((PlayerHasTalent(lv_player, "DemonHunterDeathDealer") == true)) {

        lv_stackMod = 0.15;

    }



    lv_finalMod = (lv_base + (lv_stackMod * lv_stacks));

    CatalogFieldValueSetFixed(c_gameCatalogBehavior, "DemonHunterVaultDamageBoost", "Modification.UnifiedDamageDealtFraction[" + IntToString(c_unitDamageTypeBasic) + "]", lv_player, lv_finalMod);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDemonHunterVaultDamageBuff_Init () {

    libGDHL_gt_HeroDemonHunterVaultDamageBuff = TriggerCreate("libGDHL_gt_HeroDemonHunterVaultDamageBuff_Func");

    TriggerEnable(libGDHL_gt_HeroDemonHunterVaultDamageBuff, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroDemonHunterVaultDamageBuff, c_playerAny, "VaultPersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Demon Hunter - Manticore Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDemonHunterManticoreProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    unit lv_caster;

    int lv_casterPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_casterPlayer = UnitGetOwner(lv_caster);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((libGDHL_gv_heroDemonHunterManticoreTarget[lv_casterPlayer] == lv_target)) {

        if ((libGDHL_gv_heroDemonHunterManticoreIncrementer[lv_casterPlayer] == 2)) {

            UnitCreateEffectUnitWithSource(lv_caster, "DemonHunterHeroWeaponManticoreTalentProcDamage", lv_target, c_gameCatalogAbil, "attack");

            UnitCreateEffectUnitWithSource(lv_caster, "ManticoreRemoveProcStacks", lv_target, c_gameCatalogAbil, "attack");

            libGDHL_gv_heroDemonHunterManticoreIncrementer[lv_casterPlayer] = 0;

        }

        else {

            libGDHL_gv_heroDemonHunterManticoreIncrementer[lv_casterPlayer] += 1;

        }

    }

    else {

        UnitCreateEffectUnitWithSource(lv_caster, "ManticoreRemoveProcStacks", libGDHL_gv_heroDemonHunterManticoreTarget[lv_casterPlayer], c_gameCatalogAbil, "attack");

        libGDHL_gv_heroDemonHunterManticoreIncrementer[lv_casterPlayer] = 1;

        libGDHL_gv_heroDemonHunterManticoreTarget[lv_casterPlayer] = lv_target;

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDemonHunterManticoreProc_Init () {

    libGDHL_gt_HeroDemonHunterManticoreProc = TriggerCreate("libGDHL_gt_HeroDemonHunterManticoreProc_Func");

    TriggerEnable(libGDHL_gt_HeroDemonHunterManticoreProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroDemonHunterManticoreProc, c_playerAny, "DemonHunterHeroWeaponManticoreTalentDummyModifyUnit");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Leaping Strike - Set Target Variable

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadLeapingStrikeSetTargetVariable_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroDryadLeapingStrikeTarget[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))] = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadLeapingStrikeSetTargetVariable_Init () {

    libGDHL_gt_HeroDryadLeapingStrikeSetTargetVariable = TriggerCreate("libGDHL_gt_HeroDryadLeapingStrikeSetTargetVariable_Func");

    TriggerEnable(libGDHL_gt_HeroDryadLeapingStrikeSetTargetVariable, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroDryadLeapingStrikeSetTargetVariable, c_playerAny, "DryadLeapingStrikeAttackDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Leaping Strike - Find Landing Location

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadLeapingStrikeFindLandingLocation_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_lunara;

    point lv_targetPoint;

    fixed lv_searchIncrements;

    point lv_newLocation;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_targetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    lv_searchIncrements = 0.25;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_newLocation = lv_targetPoint;

    lv_lunara = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    while (((PathingType(lv_newLocation) != c_pathingGround))) {

        lv_newLocation = libNtve_gf_PointOffsetTowardsPoint(lv_newLocation, lv_searchIncrements, UnitGetPosition(lv_lunara));

        if ((DistanceBetweenPoints(lv_newLocation, UnitGetPosition(lv_lunara)) <= lv_searchIncrements)) {

            lv_newLocation = UnitTypePlacementTestsFromPoint(UnitGetType(lv_lunara), 0, lv_newLocation, 5.0, c_placementTestIgnoreBlockersMask);

            break;

        }



    }

    if ((UnitHasBehavior2(lv_lunara, "DryadLeapingStrikeFriendlyCast") == true)) {

        UnitCreateEffectPoint(lv_lunara, "DryadLeapingStrikeBoundlessStrideLaunchMissile", lv_newLocation);

    }

    else {

        UnitCreateEffectPoint(lv_lunara, "DryadLeapingStrikeLaunchMissile", lv_newLocation);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadLeapingStrikeFindLandingLocation_Init () {

    libGDHL_gt_HeroDryadLeapingStrikeFindLandingLocation = TriggerCreate("libGDHL_gt_HeroDryadLeapingStrikeFindLandingLocation_Func");

    TriggerEnable(libGDHL_gt_HeroDryadLeapingStrikeFindLandingLocation, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroDryadLeapingStrikeFindLandingLocation, c_playerAny, "DryadLeapingStrikeOffsetDummyEffect");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Leaping Strike - Create Attack Persistent

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadLeapingStrikeCreateAttackPersistent_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    Wait(0.125, c_timeGame);

    UnitCreateEffectUnitWithSource(lv_caster, "DryadLeapingStrikeAttackPersistent", libGDHL_gv_heroDryadLeapingStrikeTarget[UnitGetOwner(lv_caster)], c_gameCatalogAbil, "DryadLeapingStrike");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadLeapingStrikeCreateAttackPersistent_Init () {

    libGDHL_gt_HeroDryadLeapingStrikeCreateAttackPersistent = TriggerCreate("libGDHL_gt_HeroDryadLeapingStrikeCreateAttackPersistent_Func");

    TriggerEnable(libGDHL_gt_HeroDryadLeapingStrikeCreateAttackPersistent, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroDryadLeapingStrikeCreateAttackPersistent, c_playerAny, "DryadLeapingStrikeLaunchMissile");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Nature's Toxin - Handle Application

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadNaturesToxinHandleApplication_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_timeDifferenceToNextThreshold;

    unit lv_caster;

    unit lv_target;

    string lv_triggeringPoison;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_triggeringPoison = "DryadNaturesToxin";



    // Actions

    if (!runActions) {

        return true;

    }



    if (((UnitHasBehavior2(lv_target, "IsPseudoStructure") == true) || (UnitTypeTestAttribute(UnitGetType(lv_target), c_unitAttributeHeroic) == true) || (UnitTypeTestAttribute(UnitGetType(lv_target), c_unitAttributeStructure) == true))) {

        if ((UnitBehaviorDuration(lv_target, lv_triggeringPoison) < 6.0)) {

            lv_timeDifferenceToNextThreshold = (UnitBehaviorDuration(lv_target, lv_triggeringPoison) - 3.0);

            UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual2", lv_timeDifferenceToNextThreshold);

        }

        else {

            if ((UnitBehaviorDuration(lv_target, lv_triggeringPoison) < 9.0)) {

                lv_timeDifferenceToNextThreshold = (UnitBehaviorDuration(lv_target, lv_triggeringPoison) - 6.0);

                UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual2", 6.0);

                UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual3", lv_timeDifferenceToNextThreshold);

            }



        }

        if ((UnitBehaviorDurationTotal(lv_target, lv_triggeringPoison) > 9.0)) {

            UnitBehaviorSetDurationRemaining(lv_target, lv_triggeringPoison, 9.0);

            UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual3", 3.0);

            UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual2", 6.0);

            UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual1", 9.0);

        }



    }

    else {

        if ((UnitBehaviorDuration(lv_target, lv_triggeringPoison) < 6.0)) {

            lv_timeDifferenceToNextThreshold = (UnitBehaviorDuration(lv_target, lv_triggeringPoison) - 3.0);

            UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual2", lv_timeDifferenceToNextThreshold);

        }

        else {

            if ((UnitBehaviorDuration(lv_target, lv_triggeringPoison) < 9.0)) {

                lv_timeDifferenceToNextThreshold = (UnitBehaviorDuration(lv_target, lv_triggeringPoison) - 6.0);

                UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual2", 6.0);

                UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual3", lv_timeDifferenceToNextThreshold);

            }



        }

        if ((UnitBehaviorDurationTotal(lv_target, lv_triggeringPoison) > 9.0)) {

            UnitBehaviorSetDurationRemaining(lv_target, lv_triggeringPoison, 9.0);

            UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual3", 3.0);

            UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual2", 6.0);

            UnitBehaviorSetDurationRemaining(lv_target, "DryadNaturesToxinVisual1", 9.0);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadNaturesToxinHandleApplication_Init () {

    libGDHL_gt_HeroDryadNaturesToxinHandleApplication = TriggerCreate("libGDHL_gt_HeroDryadNaturesToxinHandleApplication_Func");

    TriggerEnable(libGDHL_gt_HeroDryadNaturesToxinHandleApplication, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroDryadNaturesToxinHandleApplication, c_playerAny, "DryadNaturesToxinApplyDebuff");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroDryadNaturesToxinHandleApplication, c_playerAny, "DryadNaturesToxinApplyIntensifyingToxinDebuff");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroDryadNaturesToxinHandleApplication, c_playerAny, "DryadForestsWrathApplyThornwoodVineDebuff");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Wisp - Dividing Wisp Duration

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadWispDividingWispDuration_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup autoF8ACB49C_g;

    int autoF8ACB49C_u;

    unit autoF8ACB49C_var;



    // Actions

    if (!runActions) {

        return true;

    }



    autoF8ACB49C_g = UnitGroup("DryadWispUnit", UnitGetOwner(EventUnit()), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 1);

    autoF8ACB49C_u = UnitGroupCount(autoF8ACB49C_g, c_unitCountAll);

    for (;; autoF8ACB49C_u -= 1) {

        autoF8ACB49C_var = UnitGroupUnitFromEnd(autoF8ACB49C_g, autoF8ACB49C_u);

        if (autoF8ACB49C_var == null) { break; }

        UnitBehaviorSetDurationRemaining(EventUnit(), "DryadWispDividingWispMasteryTimedLife", (UnitBehaviorDuration(autoF8ACB49C_var, "DryadWispTimedLife") - 0.0625));

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadWispDividingWispDuration_Init () {

    libGDHL_gt_HeroDryadWispDividingWispDuration = TriggerCreate("libGDHL_gt_HeroDryadWispDividingWispDuration_Func");

    TriggerEnable(libGDHL_gt_HeroDryadWispDividingWispDuration, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroDryadWispDividingWispDuration, null, "DryadWispDividingWispMasteryTimedLife", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Dance Cancel Orders

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadDanceCancelOrders_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = libGame_gv_players[UnitGetOwner(EventUnit())].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "HeroDryad"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitIssueOrder(lv_unit, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadDanceCancelOrders_Init () {

    libGDHL_gt_HeroDryadDanceCancelOrders = TriggerCreate("libGDHL_gt_HeroDryadDanceCancelOrders_Func");

    TriggerEnable(libGDHL_gt_HeroDryadDanceCancelOrders, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroDryadDanceCancelOrders, null, AbilityCommand("stop", 3), c_unitAbilStageExecute, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Abolish Magic - Behavior Activate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadAbolishMagicBehaviorActivate_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroDryadAbolishMagicIncrementer += 1;

    if (((TriggerIsEnabled(libGDHL_gt_HeroDryadAbolishMagicCCRecognition) == false) && (libGDHL_gv_heroDryadAbolishMagicIncrementer >= 1))) {

        TriggerEnable(libGDHL_gt_HeroDryadAbolishMagicCCRecognition, true);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadAbolishMagicBehaviorActivate_Init () {

    libGDHL_gt_HeroDryadAbolishMagicBehaviorActivate = TriggerCreate("libGDHL_gt_HeroDryadAbolishMagicBehaviorActivate_Func");

    TriggerEnable(libGDHL_gt_HeroDryadAbolishMagicBehaviorActivate, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroDryadAbolishMagicBehaviorActivate, null, "DryadAbolishMagicDummy", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Abolish Magic - Behavior Deactivate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadAbolishMagicBehaviorDeactivate_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroDryadAbolishMagicIncrementer -= 1;

    if ((libGDHL_gv_heroDryadAbolishMagicIncrementer == 0)) {

        TriggerEnable(libGDHL_gt_HeroDryadAbolishMagicCCRecognition, false);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadAbolishMagicBehaviorDeactivate_Init () {

    libGDHL_gt_HeroDryadAbolishMagicBehaviorDeactivate = TriggerCreate("libGDHL_gt_HeroDryadAbolishMagicBehaviorDeactivate_Func");

    TriggerEnable(libGDHL_gt_HeroDryadAbolishMagicBehaviorDeactivate, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroDryadAbolishMagicBehaviorDeactivate, null, "DryadAbolishMagicDummy", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Abolish Magic - CC Recognition

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadAbolishMagicCCRecognition_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    string lv_behavior;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_behavior = EventUnitBehavior();



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(lv_unit, "DryadAbolishMagicDummy") == true))) {

            return false;

        }



        if (!((UnitGetOwner(lv_unit) > 0))) {

            return false;

        }



        if (!((UnitGetOwner(lv_unit) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((((UnitBehaviorHasCategoryFlag(lv_behavior, c_behaviorCategoryUnreducible) == true) && (UnitBehaviorHasCategoryFlag(lv_behavior, c_behaviorCategoryStun) == true)) || ((UnitBehaviorHasCategoryFlag(lv_behavior, c_behaviorCategoryUnreducible) == true) && (UnitBehaviorHasCategoryFlag(lv_behavior, c_behaviorCategoryDebuffSilence) == true)))) {

        return true;

    }

    else {

        libGame_gf_CCRecognitionCCReduction(lv_unit, lv_behavior);

        if ((UnitBehaviorCount(lv_unit, "HeroGenericHasNoStatusBar") == 0) && (UnitBehaviorHasCategoryFlag(lv_behavior, c_behaviorCategoryRestorable) == true)) {

            libUIUI_gf_HeroConsoleUnitStatusBarsUpdateStunDeathBar(lv_behavior, UnitGetOwner(lv_unit));

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadAbolishMagicCCRecognition_Init () {

    libGDHL_gt_HeroDryadAbolishMagicCCRecognition = TriggerCreate("libGDHL_gt_HeroDryadAbolishMagicCCRecognition_Func");

    TriggerEnable(libGDHL_gt_HeroDryadAbolishMagicCCRecognition, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroDryadAbolishMagicCCRecognition, null, c_behaviorCategoryDebuffSilence, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroDryadAbolishMagicCCRecognition, null, c_behaviorCategoryDebuffSilence, c_unitBehaviorChangeRefresh);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Activate Camera Settings

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadActivateCameraSettings_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroDryad"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CameraSetData(PlayerGroupSingle(EventPlayer()), "Dryad");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadActivateCameraSettings_Init () {

    libGDHL_gt_HeroDryadActivateCameraSettings = TriggerCreate("libGDHL_gt_HeroDryadActivateCameraSettings_Func");

    TriggerEnable(libGDHL_gt_HeroDryadActivateCameraSettings, false);

    TriggerAddEventUnitSelected(libGDHL_gt_HeroDryadActivateCameraSettings, null, c_playerAny, true);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Deactivate Camera Settings

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadDeactivateCameraSettings_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroDryad"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CameraSetData(PlayerGroupSingle(EventPlayer()), "BlizzardAllStars");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadDeactivateCameraSettings_Init () {

    libGDHL_gt_HeroDryadDeactivateCameraSettings = TriggerCreate("libGDHL_gt_HeroDryadDeactivateCameraSettings_Func");

    TriggerEnable(libGDHL_gt_HeroDryadDeactivateCameraSettings, false);

    TriggerAddEventUnitSelected(libGDHL_gt_HeroDryadDeactivateCameraSettings, null, c_playerAny, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Activate Camera for Symbiote

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadActivateCameraforSymbiote_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGDHL_gf_AbathurSymbioteTarget()) == "HeroDryad"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CameraSetData(PlayerGroupSingle(libGDHL_gf_AbathurSymbioteAbathurPlayer()), "Dryad");

    while ((UnitIsAlive(libGDHL_gf_AbathurSymbioteUnit()) == true)) {

        Wait(0.0625, c_timeGame);

    }

    CameraSetData(PlayerGroupSingle(libGDHL_gf_AbathurSymbioteAbathurPlayer()), "BlizzardAllStars");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadActivateCameraforSymbiote_Init () {

    libGDHL_gt_HeroDryadActivateCameraforSymbiote = TriggerCreate("libGDHL_gt_HeroDryadActivateCameraforSymbiote_Func");

    TriggerEnable(libGDHL_gt_HeroDryadActivateCameraforSymbiote, false);

    libGDHL_gf_AbathurSymbiote(libGDHL_gt_HeroDryadActivateCameraforSymbiote);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Dryad - Loss of Control - Camera

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroDryadLossofControlCamera_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroDryad"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CameraSetData(PlayerGroupSingle(lv_player), "BlizzardAllStars");

    while ((UnitHasBehavior2(EventUnit(), EventUnitBehavior()) == true)) {

        Wait(0.0625, c_timeGame);

    }

    CameraSetData(PlayerGroupSingle(lv_player), "Dryad");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroDryadLossofControlCamera_Init () {

    libGDHL_gt_HeroDryadLossofControlCamera = TriggerCreate("libGDHL_gt_HeroDryadLossofControlCamera_Func");

    TriggerEnable(libGDHL_gt_HeroDryadLossofControlCamera, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroDryadLossofControlCamera, null, "StitchesHooked", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Greymane - Go for the Throat Special Death Procs

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGreymaneGofortheThroatSpecialDeathProcs_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_heroGreymane;

    unit lv_killTarget;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_killTarget = libGame_gf_HeroEntersSpecialDeathStateHero();



    // Conditions

    if (testConds) {

        if (!((UnitBehaviorCount(lv_killTarget, "GreymaneGoForTheThroatDeathResponse") == 1))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_heroGreymane = UnitBehaviorEffectUnit(lv_killTarget, "GreymaneGoForTheThroatDeathResponse", c_effectUnitCaster, 0);

    UnitCreateEffectUnit(lv_heroGreymane, "GreymaneGoForTheThroatKillSet", lv_heroGreymane);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGreymaneGofortheThroatSpecialDeathProcs_Init () {

    libGDHL_gt_HeroGreymaneGofortheThroatSpecialDeathProcs = TriggerCreate("libGDHL_gt_HeroGreymaneGofortheThroatSpecialDeathProcs_Func");

    TriggerEnable(libGDHL_gt_HeroGreymaneGofortheThroatSpecialDeathProcs, false);

    libGame_gf_HeroEntersSpecialDeathState(libGDHL_gt_HeroGreymaneGofortheThroatSpecialDeathProcs);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Greymane - Actor Sound Swaps

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGreymaneActorSoundSwaps_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_greymane;

    int lv_greymanePlayer;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_greymane = EventUnit();

    lv_greymanePlayer = UnitGetOwner(lv_greymane);

    libGame_gv_players[lv_greymanePlayer].lv_vOPissedSoundIndex = 0;

    if ((UnitHasBehavior2(lv_greymane, "GreymaneWorgenForm") == true)) {

        if ((UnitHasBehavior2(lv_greymane, "UltimateEvolutionBuff") == true)) {

            libNtve_gf_SendActorMessageToUnit(lv_greymane, "SetSoundSuffix _Evo_W");

        }



        if ((libGame_gv_players[lv_greymanePlayer].lv_heroUnit == lv_greymane)) {

            libGame_gv_players[lv_greymanePlayer].lv_vOSoundSuffix = "_W";

        }



    }

    else {

        if ((UnitHasBehavior2(lv_greymane, "UltimateEvolutionBuff") == true)) {

            libNtve_gf_SendActorMessageToUnit(lv_greymane, "SetSoundSuffix _Evo");

        }



        if ((libGame_gv_players[lv_greymanePlayer].lv_heroUnit == lv_greymane)) {

            libGame_gv_players[lv_greymanePlayer].lv_vOSoundSuffix = "";

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGreymaneActorSoundSwaps_Init () {

    libGDHL_gt_HeroGreymaneActorSoundSwaps = TriggerCreate("libGDHL_gt_HeroGreymaneActorSoundSwaps_Func");

    TriggerEnable(libGDHL_gt_HeroGreymaneActorSoundSwaps, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroGreymaneActorSoundSwaps, null, "GreymaneWorgenForm", c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroGreymaneActorSoundSwaps, null, "GreymaneWorgenForm", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Greymane - Talent - Wizened Duelist Death

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroGreymaneTalentWizenedDuelistDeath_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_heroKilledUnit;

    fixed lv_wizenedDuelistStacks;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_heroKilledUnit = libGame_gf_HeroKilledUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gf_HeroKilledUnit()) == "HeroGreymane"))) {

            return false;

        }



        if (!((PlayerHasTalent(UnitGetOwner(libGame_gf_HeroKilledUnit()), "GreymaneWizenedDuelist") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_heroKilledUnit = libGame_gf_HeroKilledUnit();

    lv_wizenedDuelistStacks = IntToFixed(UnitBehaviorCount(libGame_gf_HeroKilledUnit(), "GreymaneWizenedDuelistQuestToken"));

    UnitSetTokenCount(lv_heroKilledUnit, "GreymaneWizenedDuelistQuestToken", Trunc((lv_wizenedDuelistStacks / 2.0)), lv_heroKilledUnit);

    UnitSetTokenCount(lv_heroKilledUnit, "GreymaneWizenedDuelistTokenCounter", 0.0, lv_heroKilledUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroGreymaneTalentWizenedDuelistDeath_Init () {

    libGDHL_gt_HeroGreymaneTalentWizenedDuelistDeath = TriggerCreate("libGDHL_gt_HeroGreymaneTalentWizenedDuelistDeath_Func");

    TriggerEnable(libGDHL_gt_HeroGreymaneTalentWizenedDuelistDeath, false);

    libGame_gf_HeroKilled(libGDHL_gt_HeroGreymaneTalentWizenedDuelistDeath);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Faerie Dragon - Phase Shift Ping

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroFaerieDragonPhaseShiftPing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetUnit;

    int lv_brightwingPlayer;

    playergroup lv_alliedPlayers;

    point lv_location;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_brightwingPlayer = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));

    lv_alliedPlayers = PlayerGroupEmpty();

    lv_location = EventPlayerEffectUsedPoint(c_effectLocationTargetUnit);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((TimerGetRemaining(libUIUI_gv_pingInputSuppressionTimer[lv_brightwingPlayer]) > 0.0)) {

        return true;

    }



    if ((TimerGetRemaining(libUIUI_gv_pingLockoutTimer[lv_brightwingPlayer]) > 0.0)) {

        return true;

    }



    libUIUI_gf_PingIncrementPingCountAndManageTimersForPlayer(lv_brightwingPlayer);

    lv_alliedPlayers = libGame_gf_PlayersOnTeamHeroes(libGame_gf_TeamNumberOfPlayer(lv_brightwingPlayer), false);

    if ((TimerGetRemaining(libGDHL_gv_faerieDragonPhaseShiftPingTextLockoutTimer[lv_brightwingPlayer]) > 0.0)) {

    }

    else {

        TextExpressionSetToken("Param/Expression/lib_GDHL_E2966CE5", "A", StringExternal("Param/Value/lib_GDHL_38BA2184"));

        TextExpressionSetToken("Param/Expression/lib_GDHL_E2966CE5", "B", UnitTypeGetName(UnitGetType(lv_targetUnit)));

        UIDisplayMessage(lv_alliedPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_E2966CE5"));

        TimerStart(libGDHL_gv_faerieDragonPhaseShiftPingTextLockoutTimer[lv_brightwingPlayer], 10.0, false, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroFaerieDragonPhaseShiftPing_Init () {

    libGDHL_gt_HeroFaerieDragonPhaseShiftPing = TriggerCreate("libGDHL_gt_HeroFaerieDragonPhaseShiftPing_Func");

    TriggerEnable(libGDHL_gt_HeroFaerieDragonPhaseShiftPing, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroFaerieDragonPhaseShiftPing, c_playerAny, "BrightwingPhaseShiftPrepPersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Faerie Dragon - Phase Shift - Camera

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroFaerieDragonPhaseShiftCamera_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((libGame_gv_gameOver == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    libGame_gv_players[lv_player].lv_cameraCameraLockInterrupt = true;

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    libGame_gf_CameraPanCameraForPlayerAndUpdateMapBoundsIfNecessary(lv_player, UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitCaster)), 0.0, -1, 10.0, false);

    libGame_gv_players[lv_player].lv_cameraCameraLockInterrupt = false;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroFaerieDragonPhaseShiftCamera_Init () {

    libGDHL_gt_HeroFaerieDragonPhaseShiftCamera = TriggerCreate("libGDHL_gt_HeroFaerieDragonPhaseShiftCamera_Func");

    TriggerEnable(libGDHL_gt_HeroFaerieDragonPhaseShiftCamera, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroFaerieDragonPhaseShiftCamera, c_playerAny, "BrightwingPhaseShiftTeleport");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Faerie Dragon - Pixie Charm Charge Count Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroFaerieDragonPixieCharmChargeCountProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitAddChargeUsed(lv_caster, "Abil/FaerieDragonPixieCharm", -1.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroFaerieDragonPixieCharmChargeCountProc_Init () {

    libGDHL_gt_HeroFaerieDragonPixieCharmChargeCountProc = TriggerCreate("libGDHL_gt_HeroFaerieDragonPixieCharmChargeCountProc_Func");

    TriggerEnable(libGDHL_gt_HeroFaerieDragonPixieCharmChargeCountProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroFaerieDragonPixieCharmChargeCountProc, c_playerAny, "FaerieDragonPixieCharmIncreaseChargeCountDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Falstad - Dishonorable Discharge Hero Kill Refresh Cooldown

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroFalstadDishonorableDischargeHeroKillRefreshCooldown_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_localPlayer;

    unit lv_Falstad;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_localPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_Falstad = libGame_gv_players[lv_localPlayer].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(lv_Falstad, "ChargedUpDeathResetCarryBehavior") == true))) {

            return false;

        }



        if (!(((UnitGetType(libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_heroUnit) == "HeroFalstad") || (UnitGetType(libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_activeVehicle) == "HeroFalstad")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_heroUnit) == "HeroFalstad")) {

        lv_Falstad = libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_heroUnit;

    }

    else {

        lv_Falstad = libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_activeVehicle;

    }

    UnitCreateEffectUnit(lv_Falstad, "FalstadChargedUpHeroTakedownCooldownRefresh", lv_Falstad);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroFalstadDishonorableDischargeHeroKillRefreshCooldown_Init () {

    libGDHL_gt_HeroFalstadDishonorableDischargeHeroKillRefreshCooldown = TriggerCreate("libGDHL_gt_HeroFalstadDishonorableDischargeHeroKillRefreshCooldown_Func");

    TriggerEnable(libGDHL_gt_HeroFalstadDishonorableDischargeHeroKillRefreshCooldown, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroFalstadDishonorableDischargeHeroKillRefreshCooldown);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Falstad - Flight Ping

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroFalstadFlightPing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_falstadPlayer;

    playergroup lv_alliedPlayers;

    point lv_location;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_falstadPlayer = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));

    lv_alliedPlayers = PlayerGroupEmpty();

    lv_location = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((TimerGetRemaining(libUIUI_gv_pingInputSuppressionTimer[lv_falstadPlayer]) > 0.0)) {

        return true;

    }



    if ((TimerGetRemaining(libUIUI_gv_pingLockoutTimer[lv_falstadPlayer]) > 0.0)) {

        return true;

    }



    lv_alliedPlayers = libGame_gf_PlayersOnTeamHeroes(libGame_gf_TeamNumberOfPlayer(lv_falstadPlayer), false);

    TextExpressionSetToken("Param/Expression/lib_GDHL_7685E66D", "A", UnitTypeGetName(UnitGetType(libGame_gv_players[lv_falstadPlayer].lv_heroUnit)));

    TextTagCreate(TextExpressionAssemble("Param/Expression/lib_GDHL_7685E66D"), 24, lv_location, 2.0, true, false, libGame_gf_PlayersOnTeamHeroes(libGame_gf_TeamNumberOfPlayer(lv_falstadPlayer), false));

    TextTagSetTime(TextTagLastCreated(), c_textTagTimeDuration, 3.5);

    libGDHL_gv_falstadFlightPings[lv_falstadPlayer] = PingLastCreated();

    if ((TimerGetRemaining(libGDHL_gv_falstadFlightPingTextLockoutTimer[lv_falstadPlayer]) > 0.0)) {

    }

    else {

        TextExpressionSetToken("Param/Expression/lib_GDHL_CC28B5B8", "A", StringExternal("Param/Value/lib_GDHL_84D81EA0"));

        UIDisplayMessage(lv_alliedPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_CC28B5B8"));

        TimerStart(libGDHL_gv_falstadFlightPingTextLockoutTimer[lv_falstadPlayer], 10.0, false, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroFalstadFlightPing_Init () {

    libGDHL_gt_HeroFalstadFlightPing = TriggerCreate("libGDHL_gt_HeroFalstadFlightPing_Func");

    TriggerEnable(libGDHL_gt_HeroFalstadFlightPing, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroFalstadFlightPing, c_playerAny, "FalstadFlightLaunchMissile");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroFalstadFlightPing, c_playerAny, "FalstadFlightLaunchEpicMountMissile");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Falstad - Flight Camera Height Restore

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroFalstadFlightCameraHeightRestore_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    CameraUseHeightDisplacement(lv_player, true);

    while ((UnitHasBehavior2(lv_unit, "FalstadFlightAscend") == true)) {

        Wait(0.0625, c_timeGame);

    }

    CameraUseHeightDisplacement(lv_player, false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroFalstadFlightCameraHeightRestore_Init () {

    libGDHL_gt_HeroFalstadFlightCameraHeightRestore = TriggerCreate("libGDHL_gt_HeroFalstadFlightCameraHeightRestore_Func");

    TriggerEnable(libGDHL_gt_HeroFalstadFlightCameraHeightRestore, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroFalstadFlightCameraHeightRestore, null, "FalstadFlightAscend", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Falstad - Wingman Variables

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroFalstadWingmanVariables_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gv_players[lv_player].lv_bribeTokenLink = "FalstadWingmanTokenCounter";

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroFalstadWingmanVariables_Init () {

    libGDHL_gt_HeroFalstadWingmanVariables = TriggerCreate("libGDHL_gt_HeroFalstadWingmanVariables_Func");

    TriggerEnable(libGDHL_gt_HeroFalstadWingmanVariables, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroFalstadWingmanVariables, null, "FalstadWingmanTokenCounter", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Illidan - Apply FotB Cooldown on Inventory Use

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse_Func (bool testConds, bool runActions) {

    // Variable Declarations

    abilcmd lv_abilityCommand;

    unit lv_unit;

    string lv_heroType;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_abilityCommand = EventUnitAbility();

    lv_unit = EventUnit();

    lv_heroType = UnitGetType(lv_unit);



    // Conditions

    if (testConds) {

        if (!(((UnitHasBehavior2(lv_unit, "FlightoftheBetrayer") == true) || (UnitHasBehavior2(lv_unit, "FlightoftheBetrayerCooldown") == true)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_unit, "FlightoftheBetrayerCooldown", lv_unit, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse_Init () {

    libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse = TriggerCreate("libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse_Func");

    TriggerEnable(libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse, null, AbilityCommand("MapMechanicAbilityTarget", 0), c_unitAbilStageExecute, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse, null, AbilityCommand("MapMechanicAbilityInstant", 0), c_unitAbilStageExecute, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse, null, AbilityCommand("MapMechanicAbilityTarget2", 0), c_unitAbilStageExecute, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Illidan - Metamorphosis Avatar Apply Health Buff

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroIllidanMetamorphosisAvatarApplyHealthBuff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_targetCount;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    lv_targetCount = UnitBehaviorCount(lv_unit, "IllidanMetamorphosisBonusHealthDummyCount");

    CatalogFieldValueSetFixed(c_gameCatalogBehavior, "IllidanMetamorphosisDoubleDummyHealth", "Modification.VitalMaxArray[" + IntToString(0) + "]", UnitGetOwner(lv_unit), (CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "IllidanMetamorphosisBonusHealthScaler", "Modification.VitalMaxArray[" + IntToString(0) + "]", UnitGetOwner(lv_unit)) * lv_targetCount));

    UnitCreateEffectUnit(lv_unit, "NewMetamorphosisApplyRealHealthBehavior", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroIllidanMetamorphosisAvatarApplyHealthBuff_Init () {

    libGDHL_gt_HeroIllidanMetamorphosisAvatarApplyHealthBuff = TriggerCreate("libGDHL_gt_HeroIllidanMetamorphosisAvatarApplyHealthBuff_Func");

    TriggerEnable(libGDHL_gt_HeroIllidanMetamorphosisAvatarApplyHealthBuff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroIllidanMetamorphosisAvatarApplyHealthBuff, null, "IllidanMetamorphosisBonusHealthDummyCount", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Illidan - The Hunt Nowhere To Hide Talent Activate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroIllidanTheHuntNowhereToHideTalentActivate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_illidan;



    // Automatic Variable Declarations

    playergroup auto61616B21_g;

    int auto61616B21_var;

    unitgroup auto8D44DB24_g;

    int auto8D44DB24_u;

    unit auto8D44DB24_var;



    // Variable Initialization

    lv_illidan = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(lv_illidan) > 0))) {

            return false;

        }



        if (!((UnitGetOwner(lv_illidan) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    while ((libGame_gv_gameOver == false)) {

        auto61616B21_g = libGame_gf_EnemyPlayerGroupOfPlayer(UnitGetOwner(lv_illidan));

        auto61616B21_var = -1;

        while (true) {

            	auto61616B21_var = PlayerGroupNextPlayer(auto61616B21_g, auto61616B21_var);

            	if (auto61616B21_var<0) { break; }

            	auto8D44DB24_g = libGame_gv_players[auto61616B21_var].lv_heroUnitGroup;

            auto8D44DB24_u = UnitGroupCount(auto8D44DB24_g, c_unitCountAll);

            for (;; auto8D44DB24_u -= 1) {

                auto8D44DB24_var = UnitGroupUnitFromEnd(auto8D44DB24_g, auto8D44DB24_u);

                if (auto8D44DB24_var == null) { break; }

                UnitCreateEffectUnit(lv_illidan, "IllidanTheHuntApplyNowhereToHideTalentReveal", auto8D44DB24_var);

            }

        }

        Wait(0.125, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroIllidanTheHuntNowhereToHideTalentActivate_Init () {

    libGDHL_gt_HeroIllidanTheHuntNowhereToHideTalentActivate = TriggerCreate("libGDHL_gt_HeroIllidanTheHuntNowhereToHideTalentActivate_Func");

    TriggerEnable(libGDHL_gt_HeroIllidanTheHuntNowhereToHideTalentActivate, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroIllidanTheHuntNowhereToHideTalentActivate, null, "IllidanNowhereToHideCarry", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Illidan - Blades Of Azzinoth Add Charge

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroIllidanBladesOfAzzinothAddCharge_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(lv_unit) > 0))) {

            return false;

        }



        if (!((UnitGetOwner(lv_unit) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "IllidanBladesOfAzzinoth") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitAddChargeUsed(lv_unit, "Abil/IllidanBladesOfAzzinoth", -1.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroIllidanBladesOfAzzinothAddCharge_Init () {

    libGDHL_gt_HeroIllidanBladesOfAzzinothAddCharge = TriggerCreate("libGDHL_gt_HeroIllidanBladesOfAzzinothAddCharge_Func");

    TriggerEnable(libGDHL_gt_HeroIllidanBladesOfAzzinothAddCharge, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroIllidanBladesOfAzzinothAddCharge, c_playerAny, "IllidanBladesOfAzzinothDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Illidan - Unending Hatred - Hero Takedown

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroIllidanUnendingHatredHeroTakedown_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_localPlayer;

    unit lv_illidan;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_localPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_localPlayer, "IllidanUnendingHatredPassive") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_illidan = libGame_gv_players[lv_localPlayer].lv_heroUnit;

    UnitCreateEffectUnit(lv_illidan, "IllidanUnendingHatredHeroKillIncreaseQuestToken", lv_illidan);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroIllidanUnendingHatredHeroTakedown_Init () {

    libGDHL_gt_HeroIllidanUnendingHatredHeroTakedown = TriggerCreate("libGDHL_gt_HeroIllidanUnendingHatredHeroTakedown_Func");

    TriggerEnable(libGDHL_gt_HeroIllidanUnendingHatredHeroTakedown, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroIllidanUnendingHatredHeroTakedown);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Illidan - Unending Hatred - NPC Kill

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroIllidanUnendingHatredNPCKill_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_killingPlayer;

    unit lv_killingHero;

    unit lv_minion;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_killingPlayer = libGame_gf_HeroParticipatedInNPCTakedownKillingPlayer();

    lv_killingHero = libGame_gv_players[lv_killingPlayer].lv_heroUnit;

    lv_minion = libGame_gf_HeroParticipatedInNPCTakedownMinion();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_killingPlayer, "IllidanUnendingHatredPassive") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if (((UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeSummoned) == true) || (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeUser1) == true) || (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeMapBoss) == true))) {

        return true;

    }



    if ((UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeMinion) == true) && (UnitFilterMatch(lv_minion, lv_killingPlayer, UnitFilter(0, 0, (1 << c_targetFilterCreep) | (1 << c_targetFilterMerc), 0)) == true)) {

        UnitCreateEffectUnit(lv_killingHero, "IllidanUnendingHatredMinionKillIncreaseQuestToken", lv_killingHero);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroIllidanUnendingHatredNPCKill_Init () {

    libGDHL_gt_HeroIllidanUnendingHatredNPCKill = TriggerCreate("libGDHL_gt_HeroIllidanUnendingHatredNPCKill_Func");

    TriggerEnable(libGDHL_gt_HeroIllidanUnendingHatredNPCKill, false);

    libGame_gf_HeroParticipatedInNPCTakedown(libGDHL_gt_HeroIllidanUnendingHatredNPCKill);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Illidan - Metamorphisis - Unending Hatred - Hearthstone Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroIllidanMetamorphisisUnendingHatredHearthstoneUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_illidanPlayer;

    unit lv_illidanUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_illidanPlayer = libGame_gf_HeroPortedBackToTownPlayer();

    lv_illidanUnit = libGame_gv_players[lv_illidanPlayer].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(lv_illidanUnit, "IllidanMetamorphosis") == true))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_illidanUnit, "IllidanMetamorphosisDemonicFormCarryBehavior") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_illidanUnit, "FlightoftheBetrayer", lv_illidanUnit, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroIllidanMetamorphisisUnendingHatredHearthstoneUsed_Init () {

    libGDHL_gt_HeroIllidanMetamorphisisUnendingHatredHearthstoneUsed = TriggerCreate("libGDHL_gt_HeroIllidanMetamorphisisUnendingHatredHearthstoneUsed_Func");

    TriggerEnable(libGDHL_gt_HeroIllidanMetamorphisisUnendingHatredHearthstoneUsed, false);

    libGame_gf_HeroPortedBackToTown(libGDHL_gt_HeroIllidanMetamorphisisUnendingHatredHearthstoneUsed);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Water Elemental Created

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaWaterElementalCreated_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_waterElementalUnit;

    unit lv_jainaUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());

    lv_waterElementalUnit = EventUnitCreatedUnit();

    lv_jainaUnit = libGame_gv_players[lv_player].lv_heroUnit;



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroJainaWaterElemental[lv_player] = lv_waterElementalUnit;

    UnitGroupAdd(libGame_gv_players[lv_player].lv_summonedUnitGroup, lv_waterElementalUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaWaterElementalCreated_Init () {

    libGDHL_gt_HeroJainaWaterElementalCreated = TriggerCreate("libGDHL_gt_HeroJainaWaterElementalCreated_Func");

    TriggerEnable(libGDHL_gt_HeroJainaWaterElementalCreated, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroJainaWaterElementalCreated, null, "JainaSummonWaterElemental", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Water Elemental Command

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaWaterElementalCommand_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    point lv_p;

    unit lv_u;

    unit lv_waterElemental;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_waterElemental = libGDHL_gv_heroJainaWaterElemental[EventPlayer()];

    if ((lv_target == null)) {

        UnitBehaviorAdd(lv_waterElemental, "JainaWaterElementalAIAttackOverride", lv_waterElemental, 1);

        UnitIssueOrder(lv_waterElemental, OrderTargetingPoint(AbilityCommand("move", 0), EventPlayerEffectUsedPoint(c_effectLocationTargetPoint)), c_orderQueueReplace);

    }

    else {

        UnitBehaviorAdd(lv_waterElemental, "JainaWaterElementalAIAttackOverride", lv_waterElemental, 1);

        UnitIssueOrder(lv_waterElemental, OrderTargetingUnit(AbilityCommand("attack", 0), lv_target), c_orderQueueReplace);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaWaterElementalCommand_Init () {

    libGDHL_gt_HeroJainaWaterElementalCommand = TriggerCreate("libGDHL_gt_HeroJainaWaterElementalCommand_Func");

    TriggerEnable(libGDHL_gt_HeroJainaWaterElementalCommand, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroJainaWaterElementalCommand, c_playerAny, "JainaCommandWaterElementalCreatePersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Water Elemental Summoned Unit Special Case Interaction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaWaterElementalSummonedUnitSpecialCaseInteraction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    point lv_p;

    unit lv_u;

    unit lv_waterElemental;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_waterElemental = libGDHL_gv_heroJainaWaterElemental[EventPlayer()];

    UnitBehaviorAdd(lv_waterElemental, "JainaWaterElementalAIAttackOverride", lv_waterElemental, 1);

    UnitIssueOrder(lv_waterElemental, OrderTargetingUnit(AbilityCommand("HeroGenericSummonedUnitSpecialCaseInteraction", 0), lv_target), c_orderQueueReplace);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaWaterElementalSummonedUnitSpecialCaseInteraction_Init () {

    libGDHL_gt_HeroJainaWaterElementalSummonedUnitSpecialCaseInteraction = TriggerCreate("libGDHL_gt_HeroJainaWaterElementalSummonedUnitSpecialCaseInteraction_Func");

    TriggerEnable(libGDHL_gt_HeroJainaWaterElementalSummonedUnitSpecialCaseInteraction, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroJainaWaterElementalSummonedUnitSpecialCaseInteraction, c_playerAny, "JainaCommandWaterElementalSummonedUnitSpecialCaseDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Frostbolt Wintermute Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaFrostboltWintermuteCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_jainaPlayer;

    unit lv_waterElemental;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_jainaPlayer = EventPlayer();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_jainaPlayer, "JainaSummonWaterElementalWintermute") == true))) {

            return false;

        }



        if (!(((lv_jainaPlayer <= libCore_gv_bALMaxPlayers) && (lv_jainaPlayer > 0)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_waterElemental = libGDHL_gv_heroJainaWaterElemental[lv_jainaPlayer];

    if ((lv_waterElemental != null) && (UnitBehaviorCount(lv_waterElemental, "JainaWaterElementalStatusAvailable") == 1)) {

        UnitBehaviorAdd(lv_waterElemental, "JainaWaterElementalAIAbilityOverride", lv_unit, 1);

        UnitIssueOrder(lv_waterElemental, OrderTargetingPoint(AbilityCommand("JainaWaterElementalFrostbolt", 0), EventUnitTargetPoint()), c_orderQueueAddToFront);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaFrostboltWintermuteCast_Init () {

    libGDHL_gt_HeroJainaFrostboltWintermuteCast = TriggerCreate("libGDHL_gt_HeroJainaFrostboltWintermuteCast_Func");

    TriggerEnable(libGDHL_gt_HeroJainaFrostboltWintermuteCast, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroJainaFrostboltWintermuteCast, null, AbilityCommand("JainaFrostbolt", 0), c_abilEffectStageFinish, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Cone of Cold Wintermute Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaConeofColdWintermuteCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_jainaPlayer;

    unit lv_waterElemental;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_jainaPlayer = EventPlayer();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_jainaPlayer, "JainaSummonWaterElementalWintermute") == true))) {

            return false;

        }



        if (!(((lv_jainaPlayer <= libCore_gv_bALMaxPlayers) && (lv_jainaPlayer > 0)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_waterElemental = libGDHL_gv_heroJainaWaterElemental[lv_jainaPlayer];

    if ((lv_waterElemental != null) && (UnitBehaviorCount(lv_waterElemental, "JainaWaterElementalStatusAvailable") == 1)) {

        UnitBehaviorAdd(lv_waterElemental, "JainaWaterElementalAIAbilityOverride", lv_unit, 1);

        UnitIssueOrder(lv_waterElemental, OrderTargetingPoint(AbilityCommand("JainaWaterElementalConeOfCold", 0), EventUnitTargetPoint()), c_orderQueueAddToFront);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaConeofColdWintermuteCast_Init () {

    libGDHL_gt_HeroJainaConeofColdWintermuteCast = TriggerCreate("libGDHL_gt_HeroJainaConeofColdWintermuteCast_Func");

    TriggerEnable(libGDHL_gt_HeroJainaConeofColdWintermuteCast, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroJainaConeofColdWintermuteCast, null, AbilityCommand("JainaConeOfCold", 0), c_abilEffectStageFinish, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Blizzard Wintermute Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaBlizzardWintermuteCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_jainaPlayer;

    unit lv_waterElemental;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_jainaPlayer = EventPlayer();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_jainaPlayer, "JainaSummonWaterElementalWintermute") == true))) {

            return false;

        }



        if (!(((lv_jainaPlayer <= libCore_gv_bALMaxPlayers) && (lv_jainaPlayer > 0)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_waterElemental = libGDHL_gv_heroJainaWaterElemental[lv_jainaPlayer];

    if ((lv_waterElemental != null) && (UnitBehaviorCount(lv_waterElemental, "JainaWaterElementalStatusAvailable") == 1)) {

        UnitBehaviorAdd(lv_waterElemental, "JainaWaterElementalAIAbilityOverride", lv_unit, 1);

        UnitIssueOrder(lv_waterElemental, OrderTargetingPoint(AbilityCommand("JainaWaterElementalBlizzard", 0), EventPlayerEffectUsedPoint(c_effectLocationTargetPoint)), c_orderQueueAddToFront);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaBlizzardWintermuteCast_Init () {

    libGDHL_gt_HeroJainaBlizzardWintermuteCast = TriggerCreate("libGDHL_gt_HeroJainaBlizzardWintermuteCast_Func");

    TriggerEnable(libGDHL_gt_HeroJainaBlizzardWintermuteCast, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroJainaBlizzardWintermuteCast, c_playerAny, "JainaWaterElementalBlizzardDummyPersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Water Elemental - Vehicle Initial

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaWaterElementalVehicleInitial_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_triggeringPlayer;

    unit lv_jaina;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_triggeringPlayer = UnitGetOwner(lv_unit);

    lv_jaina = libGame_gv_players[lv_triggeringPlayer].lv_heroUnit;



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitBehaviorCount(lv_unit, "JainaWaterElementalCasterBehavior") == 1)) {

        libGDHL_gf_HeroJainaWaterElementalVehicleControl(lv_jaina, lv_triggeringPlayer);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaWaterElementalVehicleInitial_Init () {

    libGDHL_gt_HeroJainaWaterElementalVehicleInitial = TriggerCreate("libGDHL_gt_HeroJainaWaterElementalVehicleInitial_Func");

    TriggerEnable(libGDHL_gt_HeroJainaWaterElementalVehicleInitial, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroJainaWaterElementalVehicleInitial, null, "UsingVehicle", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Frostbite Iceblock Item

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaFrostbiteIceblockItem_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnitCreatedUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "HeroJaina"))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_unit, "ImprovedIceBlock") == false))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_unit, "AbathurUltimateEvolutionControlBehavior") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_unit, "ImprovedIceBlock", lv_unit, 1);

    PlayerScoreValueSetFromInt(lv_player, "JainaFrostbiteDamage", 0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaFrostbiteIceblockItem_Init () {

    libGDHL_gt_HeroJainaFrostbiteIceblockItem = TriggerCreate("libGDHL_gt_HeroJainaFrostbiteIceblockItem_Func");

    TriggerEnable(libGDHL_gt_HeroJainaFrostbiteIceblockItem, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroJainaFrostbiteIceblockItem, null, null, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Frostbite Quest Reset

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaFrostbiteQuestReset_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    int lv_itInventoryIndex;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "HeroJaina"))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_unit, "AbathurUltimateEvolutionControlBehavior") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    PlayerScoreValueSetFromInt(lv_player, "JainaFrostbiteDamage", 0);

    UnitBehaviorAdd(lv_unit, "ImprovedIceBlock", lv_unit, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaFrostbiteQuestReset_Init () {

    libGDHL_gt_HeroJainaFrostbiteQuestReset = TriggerCreate("libGDHL_gt_HeroJainaFrostbiteQuestReset_Func");

    TriggerEnable(libGDHL_gt_HeroJainaFrostbiteQuestReset, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroJainaFrostbiteQuestReset, null, "JainaFrostbiteTokenCounter", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Chilled Damage Response

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaChilledDamageResponse_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_owner;

    fixed lv_maxShields;

    fixed lv_damageValue;

    fixed lv_shieldsToAdd;

    fixed lv_currentShields;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_owner = EventUnitDamageSourcePlayer();



    // Conditions

    if (testConds) {

        if (!((lv_unit != null))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_damageValue = (EventUnitDamageAmount() + EventUnitDamageBehaviorShield());

    if ((UnitFilterMatch(lv_unit, lv_owner, UnitFilter((1 << c_targetFilterHeroic), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly), 0)) == true)) {

        if ((PlayerScoreValueGetAsInt(lv_owner, "JainaFrostbiteDamage") < libGDHL_gv_heroJainaFrostbiteConstant)) {

            PlayerScoreValueSetFromInt(lv_owner, "JainaFrostbiteDamage", (PlayerScoreValueGetAsInt(lv_owner, "JainaFrostbiteDamage") + FixedToInt(lv_damageValue)));

            UnitSetTokenCount(libGame_gv_players[lv_owner].lv_heroUnit, "JainaFrostbiteTokenCounter", IntToFixed(PlayerScoreValueGetAsInt(lv_owner, "JainaFrostbiteDamage")), libGame_gv_players[lv_owner].lv_heroUnit);

        }



    }



    if ((PlayerHasTalent(lv_owner, "JainaFrostbiteIceBarrier") == true)) {

        if ((UnitHasBehavior2(libGame_gv_players[lv_owner].lv_heroUnit, "JainaFrostbiteIceBarrierShield") == true)) {

            lv_currentShields = UnitBehaviorDamageModifyRemaining(libGame_gv_players[lv_owner].lv_heroUnit, "JainaFrostbiteIceBarrierShield");

        }

        else {

            lv_currentShields = 0.0;

        }

        lv_shieldsToAdd = (lv_damageValue * libGDHL_gv_bALHeroJainaIceBarrierDamageModifier);

        lv_shieldsToAdd = (lv_shieldsToAdd + lv_currentShields);

        CatalogFieldValueSetFixed(c_gameCatalogBehavior, "JainaFrostbiteIceBarrierShield", "DamageResponse.ModifyLimit", lv_owner, lv_shieldsToAdd);

        UnitBehaviorAdd(libGame_gv_players[lv_owner].lv_heroUnit, "JainaFrostbiteIceBarrierShield", libGame_gv_players[lv_owner].lv_heroUnit, 1);

        UnitCreateEffectUnit(libGame_gv_players[lv_owner].lv_heroUnit, "JainaIceBarrierDummy", libGame_gv_players[lv_owner].lv_heroUnit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaChilledDamageResponse_Init () {

    libGDHL_gt_HeroJainaChilledDamageResponse = TriggerCreate("libGDHL_gt_HeroJainaChilledDamageResponse_Func");

    TriggerEnable(libGDHL_gt_HeroJainaChilledDamageResponse, false);

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroJainaChilledDamageResponse, null, c_unitDamageTypeAbility, c_unitDamageEither, "JainaFrostboltDamageChilled");

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroJainaChilledDamageResponse, null, c_unitDamageTypeAbility, c_unitDamageEither, "JainaConeOfColdDamageChilled");

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroJainaChilledDamageResponse, null, c_unitDamageTypeAbility, c_unitDamageEither, "JainaRingOfFrostImpactDamageChilled");

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroJainaChilledDamageResponse, null, c_unitDamageTypeAbility, c_unitDamageEither, "JainaBlizzardDamageChilled");

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroJainaChilledDamageResponse, null, c_unitDamageTypeAbility, c_unitDamageEither, "JainaWaterElementalBlizzardDamageChilled");

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroJainaChilledDamageResponse, null, c_unitDamageTypeAbility, c_unitDamageEither, "JainaWaterElementalConeOfColdDamageChilled");

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroJainaChilledDamageResponse, null, c_unitDamageTypeAbility, c_unitDamageEither, "JainaWaterElementalFrostboltDamageChilled");

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroJainaChilledDamageResponse, null, c_unitDamageTypeAbility, c_unitDamageEither, "JainaWaterElementalWeaponFrostbiteDamage");

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroJainaChilledDamageResponse, null, c_unitDamageTypeAbility, c_unitDamageEither, "JainaWaterElementalWeaponFrostbiteSplashDamage");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Frostbitten Completion Dummy

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaFrostbittenCompletionDummy_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!((PlayerScoreValueGetAsInt(lv_player, "JainaFrostbiteDamage") < libGDHL_gv_heroJainaFrostbiteConstant))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    PlayerScoreValueSetFromInt(lv_player, "JainaFrostbiteDamage", libGDHL_gv_heroJainaFrostbiteConstant);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaFrostbittenCompletionDummy_Init () {

    libGDHL_gt_HeroJainaFrostbittenCompletionDummy = TriggerCreate("libGDHL_gt_HeroJainaFrostbittenCompletionDummy_Func");

    TriggerEnable(libGDHL_gt_HeroJainaFrostbittenCompletionDummy, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroJainaFrostbittenCompletionDummy, null, "IceColdCarryBehavior", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Improved Ice Block Overlay On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaImprovedIceBlockOverlayOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitIsAlive(lv_unit) == true) && (UnitTestState(lv_unit, c_unitStateHallucination) == false) && (UnitHasBehavior2(lv_unit, "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(EventPlayer(), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaImprovedIceBlockOverlayOn_Init () {

    libGDHL_gt_HeroJainaImprovedIceBlockOverlayOn = TriggerCreate("libGDHL_gt_HeroJainaImprovedIceBlockOverlayOn_Func");

    TriggerEnable(libGDHL_gt_HeroJainaImprovedIceBlockOverlayOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroJainaImprovedIceBlockOverlayOn, null, "JainaImprovedIceBlock", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Jaina - Improved Ice Block Overlay Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroJainaImprovedIceBlockOverlayOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroJainaImprovedIceBlockOverlayOff_Init () {

    libGDHL_gt_HeroJainaImprovedIceBlockOverlayOff = TriggerCreate("libGDHL_gt_HeroJainaImprovedIceBlockOverlayOff_Func");

    TriggerEnable(libGDHL_gt_HeroJainaImprovedIceBlockOverlayOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroJainaImprovedIceBlockOverlayOff, null, "JainaImprovedIceBlock", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Kael'thas Phoenix Spawn Selection

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroKaelthasPhoenixSpawnSelection_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnitCreatedUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "KaelthasPhoenixRebirth") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_kaelthas_PhoenixUnit[lv_player] = lv_unit;

    if ((libGame_gv_players[lv_player].lv_activeVehicle == null)) {

        UnitSelect(lv_unit, lv_player, true);

    }



    if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_player) == true)) {

        UnitCreateAIThinkTree(lv_unit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroKaelthasPhoenixSpawnSelection_Init () {

    libGDHL_gt_HeroKaelthasPhoenixSpawnSelection = TriggerCreate("libGDHL_gt_HeroKaelthasPhoenixSpawnSelection_Func");

    TriggerEnable(libGDHL_gt_HeroKaelthasPhoenixSpawnSelection, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroKaelthasPhoenixSpawnSelection, null, "KaelthasPhoenix", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Kael'thas - Twin Spheres Talent Pick Cooldown Reset

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroKaelthasTwinSpheresTalentPickCooldownReset_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    unitgroup auto05CCF55D_g;

    int auto05CCF55D_u;

    unit auto05CCF55D_var;



    // Variable Initialization

    lv_player = libGame_gf_HeroGainTalentPlayer();

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "HeroKaelthas"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "KaelthasTwinSpheres") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto05CCF55D_g = libGame_gv_players[lv_player].lv_heroUnitGroup;

    auto05CCF55D_u = UnitGroupCount(auto05CCF55D_g, c_unitCountAll);

    for (;; auto05CCF55D_u -= 1) {

        auto05CCF55D_var = UnitGroupUnitFromEnd(auto05CCF55D_g, auto05CCF55D_u);

        if (auto05CCF55D_var == null) { break; }

        if ((UnitGetType(auto05CCF55D_var) == "HeroKaelthas")) {

            UnitModifyCooldown(auto05CCF55D_var, "Abil/KaelthasVerdantSpheres", 0.0, c_cooldownOperationSet);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroKaelthasTwinSpheresTalentPickCooldownReset_Init () {

    libGDHL_gt_HeroKaelthasTwinSpheresTalentPickCooldownReset = TriggerCreate("libGDHL_gt_HeroKaelthasTwinSpheresTalentPickCooldownReset_Func");

    TriggerEnable(libGDHL_gt_HeroKaelthasTwinSpheresTalentPickCooldownReset, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroKaelthasTwinSpheresTalentPickCooldownReset);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Kael'thas - Pyroblast Missile Created

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroKaelthasPyroblastMissileCreated_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnitCreatedUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "KaelthasPyroblastMissile"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroKaelthasPyroblastMissileUnit[lv_player] = lv_unit;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroKaelthasPyroblastMissileCreated_Init () {

    libGDHL_gt_HeroKaelthasPyroblastMissileCreated = TriggerCreate("libGDHL_gt_HeroKaelthasPyroblastMissileCreated_Func");

    TriggerEnable(libGDHL_gt_HeroKaelthasPyroblastMissileCreated, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroKaelthasPyroblastMissileCreated, null, "KaelthasPyroblast", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Kerrigan - Ultralisk - Summon Ultralisk

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroKerriganUltraliskSummonUltralisk_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_kerriganUnit;

    unit lv_targetUnit;

    point lv_lastKnownLocationOfTarget;

    point lv_targetPoint;

    unit lv_ultraliskUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_kerriganUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_lastKnownLocationOfTarget = UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitTarget));

    lv_targetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    lv_ultraliskUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitGroupAdd(libGame_gv_players[lv_player].lv_summonedUnitGroup, lv_ultraliskUnit);

    libGDHL_gf_SiegeUpdateAbilityPowerOnSummonedUnits(lv_ultraliskUnit);

    libGDHL_gf_HeroKerriganUltraliskLogicController(lv_player, lv_ultraliskUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroKerriganUltraliskSummonUltralisk_Init () {

    libGDHL_gt_HeroKerriganUltraliskSummonUltralisk = TriggerCreate("libGDHL_gt_HeroKerriganUltraliskSummonUltralisk_Func");

    TriggerEnable(libGDHL_gt_HeroKerriganUltraliskSummonUltralisk, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroKerriganUltraliskSummonUltralisk, c_playerAny, "KerriganSummonUltraliskApplyTimedLife");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Kerrigan - Ultralisk - Update Orders On Issue Order Ability

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbility_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_lastKnownLocation;

    int lv_ownerPlayer;

    point lv_positionOfUnit;



    // Automatic Variable Declarations

    unitgroup auto2ED4BA95_g;

    int auto2ED4BA95_u;

    unit auto2ED4BA95_var;



    // Variable Initialization

    lv_lastKnownLocation = UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitTarget));

    lv_ownerPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[lv_ownerPlayer] = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    auto2ED4BA95_g = UnitGroup("KerriganUltralisk", lv_ownerPlayer, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto2ED4BA95_u = UnitGroupCount(auto2ED4BA95_g, c_unitCountAll);

    for (;; auto2ED4BA95_u -= 1) {

        auto2ED4BA95_var = UnitGroupUnitFromEnd(auto2ED4BA95_g, auto2ED4BA95_u);

        if (auto2ED4BA95_var == null) { break; }

        UnitIssueOrder(auto2ED4BA95_var, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

        UnitIssueOrder(auto2ED4BA95_var, OrderTargetingUnit(AbilityCommand("attack", 0), libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[lv_ownerPlayer]), c_orderQueueReplace);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbility_Init () {

    libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbility = TriggerCreate("libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbility_Func");

    TriggerEnable(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbility, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbility, c_playerAny, "KerriganSummonUltraliskIssueRedirectOrderDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Kerrigan - Ultralisk - Update Orders On Issue Order Ability Summoned Unit Special Case Interaction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilitySummonedUnitSpecialCaseInteraction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_lastKnownLocation;

    int lv_ownerPlayer;

    point lv_positionOfUnit;



    // Automatic Variable Declarations

    unitgroup auto7A7439C5_g;

    int auto7A7439C5_u;

    unit auto7A7439C5_var;



    // Variable Initialization

    lv_lastKnownLocation = UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitTarget));

    lv_ownerPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[lv_ownerPlayer] = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    auto7A7439C5_g = UnitGroup("KerriganUltralisk", lv_ownerPlayer, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto7A7439C5_u = UnitGroupCount(auto7A7439C5_g, c_unitCountAll);

    for (;; auto7A7439C5_u -= 1) {

        auto7A7439C5_var = UnitGroupUnitFromEnd(auto7A7439C5_g, auto7A7439C5_u);

        if (auto7A7439C5_var == null) { break; }

        UnitIssueOrder(auto7A7439C5_var, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

        UnitIssueOrder(auto7A7439C5_var, OrderTargetingUnit(AbilityCommand("HeroGenericSummonedUnitSpecialCaseInteraction", 0), libGDHL_gv_heroKerriganUltraliskCurrentAttackTargetUnit[lv_ownerPlayer]), c_orderQueueReplace);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilitySummonedUnitSpecialCaseInteraction_Init () {

    libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilitySummonedUnitSpecialCaseInteraction = TriggerCreate("libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilitySummonedUnitSpecialCaseInteraction_Func");

    TriggerEnable(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilitySummonedUnitSpecialCaseInteraction, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilitySummonedUnitSpecialCaseInteraction, c_playerAny, "KerriganSummonUltraliskSummonedUnitSpecialCaseInteractionDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Kerrigan - Ultralisk - Update Orders On Issue Order Ability Point

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilityPoint_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup autoE89F3780_g;

    int autoE89F3780_u;

    unit autoE89F3780_var;



    // Actions

    if (!runActions) {

        return true;

    }



    autoE89F3780_g = UnitGroup("KerriganUltralisk", EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    autoE89F3780_u = UnitGroupCount(autoE89F3780_g, c_unitCountAll);

    for (;; autoE89F3780_u -= 1) {

        autoE89F3780_var = UnitGroupUnitFromEnd(autoE89F3780_g, autoE89F3780_u);

        if (autoE89F3780_var == null) { break; }

        UnitIssueOrder(autoE89F3780_var, OrderTargetingPoint(AbilityCommand("move", 0), EventPlayerEffectUsedPoint(c_effectLocationTargetPoint)), c_orderQueueReplace);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilityPoint_Init () {

    libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilityPoint = TriggerCreate("libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilityPoint_Func");

    TriggerEnable(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilityPoint, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilityPoint, c_playerAny, "KerriganSummonUltraliskIssueRedirectOrderDummyPoint");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Kerrigan - Ultralisk Dies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroKerriganUltraliskDies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto9FB90F8E_g;

    int auto9FB90F8E_u;

    unit auto9FB90F8E_var;



    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "KerriganUltralisk"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto9FB90F8E_g = UnitGroup("HeroKerrigan", lv_player, RegionEntireMap(), UnitFilter(0, 0, 0, 0), 0);

    auto9FB90F8E_u = UnitGroupCount(auto9FB90F8E_g, c_unitCountAll);

    for (;; auto9FB90F8E_u -= 1) {

        auto9FB90F8E_var = UnitGroupUnitFromEnd(auto9FB90F8E_g, auto9FB90F8E_u);

        if (auto9FB90F8E_var == null) { break; }

        PlayerCreateEffectUnit(lv_player, "KerriganSummonUltraliskRemoveUltraliskActiveBehavior", auto9FB90F8E_var);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroKerriganUltraliskDies_Init () {

    libGDHL_gt_HeroKerriganUltraliskDies = TriggerCreate("libGDHL_gt_HeroKerriganUltraliskDies_Func");

    TriggerEnable(libGDHL_gt_HeroKerriganUltraliskDies, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroKerriganUltraliskDies, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Kerrigan - Impaling Blades - Kinetic Fulmination Token Transfer

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroKerriganImpalingBladesKineticFulminationTokenTransfer_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_kerriganPlayer;

    unit lv_kerriganUnit;

    fixed lv_temporaryStacks;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_kerriganPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_kerriganUnit = libGame_gv_players[lv_kerriganPlayer].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_kerriganPlayer, "KerriganImpalingBladesKineticFulmination") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_temporaryStacks = UnitGetTokenCount(lv_kerriganUnit, "KerriganImpalingBladesKineticFulminationTemporaryTokenCounter");

    UnitSetTokenCount(lv_kerriganUnit, "KerriganImpalingBladesKineticFulminationTokenCounter", lv_temporaryStacks, lv_kerriganUnit);

    UnitBehaviorRemove(lv_kerriganUnit, "KerriganImpalingBladesKineticFulminationCarry", c_unitBehaviorCountAll);

    UnitBehaviorAdd(lv_kerriganUnit, "KerriganImpalingBladesKineticFulminationCarry", lv_kerriganUnit, FixedToInt(lv_temporaryStacks));

    UnitSetTokenCount(lv_kerriganUnit, "KerriganImpalingBladesKineticFulminationTemporaryTokenCounter", 0.0, lv_kerriganUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroKerriganImpalingBladesKineticFulminationTokenTransfer_Init () {

    libGDHL_gt_HeroKerriganImpalingBladesKineticFulminationTokenTransfer = TriggerCreate("libGDHL_gt_HeroKerriganImpalingBladesKineticFulminationTokenTransfer_Func");

    TriggerEnable(libGDHL_gt_HeroKerriganImpalingBladesKineticFulminationTokenTransfer, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroKerriganImpalingBladesKineticFulminationTokenTransfer, c_playerAny, "KerriganImpalingBladesSearch");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - ETC - Prog Rock Talent Regen Globe Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroETCProgRockTalentRegenGlobeProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    int lv_eTC;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((lv_player > 0))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "ETCMasteryProgRock") == true))) {

            return false;

        }



        if (!((UnitBehaviorCount(lv_unit, "ETCProgRockTokenCounter") < CatalogFieldValueGetAsInt(c_gameCatalogBehavior, "ETCProgRockTokenCounter", "Max", 0)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_unit, "ETCGuitarSoloProgRockTalentAddToken", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroETCProgRockTalentRegenGlobeProc_Init () {

    libGDHL_gt_HeroETCProgRockTalentRegenGlobeProc = TriggerCreate("libGDHL_gt_HeroETCProgRockTalentRegenGlobeProc_Func");

    TriggerEnable(libGDHL_gt_HeroETCProgRockTalentRegenGlobeProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroETCProgRockTalentRegenGlobeProc, c_playerAny, "RegenGlobeImpactSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - L90ETC - Powerslide - Target Check

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroL90ETCPowerslideTargetCheck_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_offset;

    point lv_k;

    point lv_t;

    fixed lv_range;

    int lv_i;

    unit lv_eTC;



    // Automatic Variable Declarations

    const int auto0B10A829_ae = 14;

    const int auto0B10A829_ai = 1;



    // Variable Initialization

    lv_offset = CatalogFieldValueGetAsFixed(c_gameCatalogActor, "L90ETCPowerslideGuide", "Height", c_playerAny);

    lv_k = UnitGetPosition(EventUnit());

    lv_t = EventUnitTargetPoint();

    lv_eTC = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    lv_range = CatalogFieldValueGetAsFixed(c_gameCatalogActor, "L90ETCPowerslideGuide", "Height", EventPlayer());

    lv_t = libNtve_gf_PointOffsetTowardsPoint(lv_k, lv_range, lv_t);

    Wait(0.1875, c_timeGame);

    lv_i = 1;

    for ( ; ( (auto0B10A829_ai >= 0 && lv_i <= auto0B10A829_ae) || (auto0B10A829_ai < 0 && lv_i >= auto0B10A829_ae) ) ; lv_i += auto0B10A829_ai ) {

        if ((OrderGetTargetType(UnitOrder(lv_eTC, 0)) == c_orderTargetPoint) && (OrderGetTargetPoint(UnitOrder(lv_eTC, 0)) != null) && (DistanceBetweenPoints(lv_k, lv_t) < 1)) {

            UnitBehaviorRemove(EventUnit(), "Powerslide", 1);

            break;

        }



        Wait(0.0625, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroL90ETCPowerslideTargetCheck_Init () {

    libGDHL_gt_HeroL90ETCPowerslideTargetCheck = TriggerCreate("libGDHL_gt_HeroL90ETCPowerslideTargetCheck_Func");

    TriggerEnable(libGDHL_gt_HeroL90ETCPowerslideTargetCheck, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroL90ETCPowerslideTargetCheck, null, AbilityCommand("L90ETCPowerslide", 0), c_abilEffectStageCast, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - L90ETC - Stage Dive - Teleport Unit

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroL90ETCStageDiveTeleportUnit_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    libGame_gv_players[lv_player].lv_cameraCameraLockInterrupt = true;

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    libGame_gf_CameraPanCameraForPlayerAndUpdateMapBoundsIfNecessary(lv_player, UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitCaster)), 0.0, -1, 10.0, false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroL90ETCStageDiveTeleportUnit_Init () {

    libGDHL_gt_HeroL90ETCStageDiveTeleportUnit = TriggerCreate("libGDHL_gt_HeroL90ETCStageDiveTeleportUnit_Func");

    TriggerEnable(libGDHL_gt_HeroL90ETCStageDiveTeleportUnit, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroL90ETCStageDiveTeleportUnit, c_playerAny, "StageDiveTeleport");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - L90ETC - Stage Dive - Final Set

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroL90ETCStageDiveFinalSet_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    libGame_gv_players[lv_player].lv_cameraCameraLockInterrupt = false;

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    UnitSetFacing(libGame_gv_players[lv_player].lv_heroUnit, 270.0, 0.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroL90ETCStageDiveFinalSet_Init () {

    libGDHL_gt_HeroL90ETCStageDiveFinalSet = TriggerCreate("libGDHL_gt_HeroL90ETCStageDiveFinalSet_Func");

    TriggerEnable(libGDHL_gt_HeroL90ETCStageDiveFinalSet, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroL90ETCStageDiveFinalSet, c_playerAny, "StageDiveFinalSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - L90ETC - Mosh Pit - On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroL90ETCMoshPitOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_eTC;

    unit lv_stunnedUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_eTC = UnitBehaviorEffectUnit(EventUnit(), EventUnitBehavior(), c_effectUnitCaster, 0);

    lv_stunnedUnit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventUnitBehaviorChange() == c_unitBehaviorChangeCreate)) {

        UnitBehaviorAdd(lv_stunnedUnit, "L90ETCMoshPitDisplayBehavior", lv_stunnedUnit, 1);

        UnitBehaviorSetDuration(lv_stunnedUnit, "L90ETCMoshPitDisplayBehavior", UnitBehaviorDurationTotal(lv_eTC, "L90ETCMoshPitChannel"));

        UnitBehaviorSetDurationRemaining(lv_stunnedUnit, "L90ETCMoshPitDisplayBehavior", UnitBehaviorDuration(lv_eTC, "L90ETCMoshPitChannel"));

    }

    else {

        if ((UnitBehaviorCount(lv_stunnedUnit, "L90ETCMoshPitDisplayBehavior") == 0)) {

            UnitBehaviorAdd(lv_stunnedUnit, "L90ETCMoshPitDisplayBehavior", lv_stunnedUnit, 1);

        }



        UnitBehaviorSetDuration(lv_stunnedUnit, "L90ETCMoshPitDisplayBehavior", UnitBehaviorDurationTotal(lv_eTC, "L90ETCMoshPitChannel"));

        UnitBehaviorSetDurationRemaining(lv_stunnedUnit, "L90ETCMoshPitDisplayBehavior", UnitBehaviorDuration(lv_eTC, "L90ETCMoshPitChannel"));

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroL90ETCMoshPitOn_Init () {

    libGDHL_gt_HeroL90ETCMoshPitOn = TriggerCreate("libGDHL_gt_HeroL90ETCMoshPitOn_Func");

    TriggerEnable(libGDHL_gt_HeroL90ETCMoshPitOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroL90ETCMoshPitOn, null, "L90ETCMoshPitStun", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroL90ETCMoshPitOn, null, "L90ETCMoshPitStun", c_unitBehaviorChangeRefresh);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Li Li - Cloud Serpent Turret Serpent Summon and Simplified AI

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLiLiCloudSerpentTurretSerpentSummonandSimplifiedAI_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;

    int lv_owningPlayer;

    int lv_liLiPlayer;

    unit lv_owningUnit;

    unit lv_cloudSerpent;

    int lv_currentState;

    int lv_characterLevel;

    int lv_surgingWindsBehaviorCount;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_owningPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);

    lv_liLiPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_owningUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_characterLevel = UnitXPGetCurrentLevel(lv_caster, "HeroDummyVeterancy");

    libNtve_gf_CreateUnitsAtPoint2(1, "CloudSerpent", 0, lv_liLiPlayer, PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 1.5, libNtve_gf_RandomAngle()), lv_caster);

    lv_cloudSerpent = UnitLastCreated();

    UnitCreateEffectUnit(lv_owningUnit, "HeroGenericSummonedUnitStasisControllerWithSpecialCaseDeath", lv_cloudSerpent);

    UnitCreateEffectUnit(lv_owningUnit, "HeroGenericTimeStopListenerApplyBehavior", lv_cloudSerpent);

    libGDHL_gv_hero_LiLi_ActiveCloudSerpents[lv_liLiPlayer][lv_owningPlayer] = UnitLastCreated();

    UnitBehaviorAdd(lv_cloudSerpent, "LiLiCloudSerpentUnitTracker", lv_owningUnit, 1);

    UnitCreateEffectUnit(lv_cloudSerpent, "LiLiCloudSerpentAddTrackedUnit", lv_owningUnit);

    UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionBehavior", lv_caster, 1);

    UnitBehaviorAdd(lv_cloudSerpent, "LiLiCloudSerpentBlessingsOfYulon", lv_caster, 1);

    UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentLightningSerpentBehavior", lv_caster, 1);

    UnitBehaviorAdd(lv_cloudSerpent, "LiLiCloudSerpentAbilityController", lv_caster, 1);

    if ((PlayerHasTalent(lv_liLiPlayer, "LiLiMasteryCloudSerpentSerpentSidekick") == true) && (lv_liLiPlayer == UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitTarget)))) {

        UnitBehaviorAdd(lv_cloudSerpent, "LiLiCloudSerpentSerpentSidekickOwnerBehavior", lv_owningUnit, 1);

    }



    if ((PlayerHasTalent(lv_liLiPlayer, "LiLiWindSerpent") == true)) {

        UnitBehaviorAdd(lv_owningUnit, "LiLiCloudSerpentWindSerpentTalentSpeedBuff", lv_cloudSerpent, 1);

    }



    if ((PlayerHasTalent(lv_liLiPlayer, "LiLiBlessingsOfYulon") == true)) {

        UnitBehaviorAdd(lv_owningUnit, "LiLiCloudSerpentBlessingsOfYulonTalentBuff", lv_cloudSerpent, 1);

    }



    UnitCreateEffectUnit(lv_owningUnit, "LiLiCloudSerpentApplyUnitLinkSerpent", lv_cloudSerpent);

    CatalogFieldValueSet(c_gameCatalogBehavior, "CloudSerpentMinionSpeedBoost", "Modification.UnifiedMoveSpeedFactor", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogBehavior, "Mounted", "Modification.UnifiedMoveSpeedFactor", lv_owningPlayer));

    CatalogFieldValueSet(c_gameCatalogEffect, "CloudSerpentWeaponDamage", "Amount", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogEffect, "CloudSerpentWeaponDamage", "Amount", lv_liLiPlayer));

    CatalogFieldValueSet(c_gameCatalogEffect, "LiLiCloudSerpentLightningSerpentTalentDamage", "Amount", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogEffect, "LiLiCloudSerpentLightningSerpentTalentDamage", "Amount", lv_liLiPlayer));

    CatalogFieldValueSet(c_gameCatalogEffect, "LiLiCloudSerpentLightningSerpentCreateHealer", "RechargeVitalRate", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogEffect, "LiLiCloudSerpentLightningSerpentCreateHealer", "RechargeVitalRate", lv_liLiPlayer));

    CatalogFieldValueSet(c_gameCatalogEffect, "LiLiCloudSerpentCreateHealer", "RechargeVitalRate", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogEffect, "LiLiCloudSerpentCreateHealer", "RechargeVitalRate", lv_liLiPlayer));

    CatalogReferenceSet("Effect,LiLiCloudSerpentBlessingsOfYulonTalentCreateHealer,FlatModifierArray[JadeSerpent].Modifier", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogEffect, "LiLiCloudSerpentCreateHealer", "RechargeVitalRate", lv_owningPlayer));

    CatalogFieldValueSet(c_gameCatalogEffect, "LiLiCloudSerpentCreateHealer", "Chance", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogEffect, "LiLiCloudSerpentCreateHealer", "Chance", lv_liLiPlayer));

    while ((UnitIsAlive(lv_cloudSerpent) == true) && (UnitIsAlive(lv_owningUnit) == true) && (UnitHasBehavior2(lv_owningUnit, "Dead") == false)) {

        libGDHL_gf_HeroLiLiCloudSerpentCloakController(lv_owningUnit, lv_cloudSerpent);

        if (((UnitOrderCount(lv_cloudSerpent) == 0) || (OrderGetAbilityCommand(UnitOrder(lv_cloudSerpent, 0)) != AbilityCommand("LiLiCloudSerpentAttack", 0)))) {

            if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) >= 8.0)) {

                UnitSetPosition(lv_cloudSerpent, PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 1.5, libNtve_gf_RandomAngle()), false);

                UnitIssueOrder(lv_cloudSerpent, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

            }

            else {

                if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) >= 2.0) && (lv_currentState != libGDHL_ge_CloudSerpentAIState_Leashing)) {

                    UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), -1.0, UnitGetFacing(lv_owningUnit))), c_orderQueueReplace);

                    UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                    lv_currentState = libGDHL_ge_CloudSerpentAIState_Leashing;

                }



            }

            if ((lv_currentState == libGDHL_ge_CloudSerpentAIState_Idle)) {

                if ((UnitOrderCount(lv_owningUnit) == 0)) {

                }

                else {

                    if ((OrderGetAbilityCommand(UnitOrder(lv_owningUnit, 0)) == AbilityCommand("move", 0))) {

                        if ((DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_owningUnit, 0)), UnitGetPosition(lv_cloudSerpent)) > 1.5)) {

                            UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(OrderGetTargetPosition(UnitOrder(lv_owningUnit, 0)), 1.0, UnitGetFacing(lv_owningUnit))), c_orderQueueReplace);

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Moving;

                        }

                        else {

                            libNtve_gf_MakeUnitFacePoint(lv_cloudSerpent, OrderGetTargetPosition(UnitOrder(lv_owningUnit, 0)), 0.2);

                        }

                    }



                }

            }



            if ((lv_currentState == libGDHL_ge_CloudSerpentAIState_Moving)) {

                if ((UnitOrderCount(lv_cloudSerpent) == 0)) {

                    lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

                }

                else {

                    if ((UnitOrderCount(lv_owningUnit) == 0)) {

                        if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) <= 1.5)) {

                            UnitIssueOrder(lv_cloudSerpent, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

                        }



                    }

                    else {

                        if ((OrderGetAbilityCommand(UnitOrder(lv_owningUnit, 0)) == AbilityCommand("move", 0))) {

                            if ((DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_owningUnit, 0)), OrderGetTargetPosition(UnitOrder(lv_cloudSerpent, 0))) > 1.5)) {

                                UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(OrderGetTargetPosition(UnitOrder(lv_owningUnit, 0)), 1.0, UnitGetFacing(lv_owningUnit))), c_orderQueueReplace);

                                lv_currentState = libGDHL_ge_CloudSerpentAIState_Moving;

                            }

                            else {

                                if ((DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_owningUnit, 0)), UnitGetPosition(lv_owningUnit)) < DistanceBetweenPoints(OrderGetTargetPosition(UnitOrder(lv_cloudSerpent, 0)), UnitGetPosition(lv_cloudSerpent)))) {

                                    UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                                }



                            }

                        }



                    }

                }

            }



            if ((lv_currentState == libGDHL_ge_CloudSerpentAIState_Leashing)) {

                if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) <= 1.5)) {

                    UnitIssueOrder(lv_cloudSerpent, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                    lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

                }

                else {

                    if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) <= 2.0) && (UnitOrderCount(lv_cloudSerpent) == 0)) {

                        if ((UnitOrderCount(lv_owningUnit) == 0)) {

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

                        }

                        else {

                            UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 1.0, UnitGetFacing(lv_owningUnit))), c_orderQueueReplace);

                            UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Leashing;

                        }

                    }

                    else {

                        if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) > 2.0) && (UnitOrderCount(lv_cloudSerpent) == 0)) {

                            UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 1.0, UnitGetFacing(lv_owningUnit))), c_orderQueueReplace);

                            UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Leashing;

                        }

                        else {

                            if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), OrderGetTargetPoint(UnitOrder(lv_cloudSerpent, 0))) <= 1.5) && (DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) > 2.0)) {

                                UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 1.0, UnitGetFacing(lv_owningUnit))), c_orderQueueReplace);

                                UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                                lv_currentState = libGDHL_ge_CloudSerpentAIState_Leashing;

                            }



                        }

                    }

                }

            }



        }



        Wait(0.0625, c_timeGame);

    }

    if (((UnitHasBehavior2(lv_owningUnit, "Dead") == true) || (UnitIsAlive(lv_owningUnit) != true))) {

        UnitCreateEffectUnit(lv_cloudSerpent, "TimedLifeFate", lv_cloudSerpent);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLiLiCloudSerpentTurretSerpentSummonandSimplifiedAI_Init () {

    libGDHL_gt_HeroLiLiCloudSerpentTurretSerpentSummonandSimplifiedAI = TriggerCreate("libGDHL_gt_HeroLiLiCloudSerpentTurretSerpentSummonandSimplifiedAI_Func");

    TriggerEnable(libGDHL_gt_HeroLiLiCloudSerpentTurretSerpentSummonandSimplifiedAI, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLiLiCloudSerpentTurretSerpentSummonandSimplifiedAI, c_playerAny, "LiLiCloudSerpentApplyTurretSerpentBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Li Li - Cloud Serpent Summon and Simplified AI

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLiLiCloudSerpentSummonandSimplifiedAI_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;

    int lv_owningPlayer;

    int lv_casterOwner;

    unit lv_owningUnit;

    unit lv_cloudSerpent;

    int lv_currentState;

    int lv_characterLevel;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_casterOwner = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_owningPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);

    lv_owningUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_characterLevel = UnitXPGetCurrentLevel(lv_caster, "HeroDummyVeterancy");

    libNtve_gf_CreateUnitsAtPoint2(1, "CloudSerpent", 0, lv_owningPlayer, PointWithOffsetPolar(UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitTarget)), 1.5, libNtve_gf_RandomAngle()), lv_caster);

    lv_cloudSerpent = UnitLastCreated();

    UnitCreateEffectUnit(lv_owningUnit, "LiLiCloudSerpentHostLinkDummy", lv_cloudSerpent);

    UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionBehavior", lv_caster, 1);

    if ((PlayerHasTalent(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), "LiLiMasteryCloudSerpentLightningSerpent") == true)) {

        UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentLightningSerpentBehavior", lv_cloudSerpent, 1);

    }



    if ((PlayerHasTalent(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), "LiLiWindSerpent") == true)) {

        UnitBehaviorAdd(lv_owningUnit, "LiLiCloudSerpentWindSerpentTalentSpeedBuff", lv_cloudSerpent, 1);

    }



    CatalogFieldValueSet(c_gameCatalogBehavior, "CloudSerpentMinionSpeedBoost", "Modification.UnifiedMoveSpeedFactor", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogBehavior, "Mounted", "Modification.UnifiedMoveSpeedFactor", lv_owningPlayer));

    CatalogFieldValueSet(c_gameCatalogEffect, "CloudSerpentWeaponDamage", "Amount", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogEffect, "CloudSerpentWeaponDamage", "Amount", lv_casterOwner));

    CatalogFieldValueSet(c_gameCatalogEffect, "LightningSerpentHopDamage", "Amount", lv_owningPlayer, CatalogFieldValueGet(c_gameCatalogEffect, "LightningSerpentHopDamage", "Amount", lv_casterOwner));

    if ((UnitGetType(lv_owningUnit) != "HeroTychus")) {

        CatalogFieldValueSet(c_gameCatalogAbil, "LiLiCloudSerpentAttack", "Cost[" + IntToString(0) + "].Cooldown.TimeUse", lv_owningPlayer, "0");

    }



    while ((UnitIsAlive(lv_cloudSerpent) == true) && (UnitIsAlive(lv_owningUnit) == true)) {

        if (((UnitOrderCount(lv_cloudSerpent) == 0) || (OrderGetAbilityCommand(UnitOrder(lv_cloudSerpent, 0)) != AbilityCommand("LiLiCloudSerpentAttack", 0)))) {

            if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) >= 8.0)) {

                UnitSetPosition(lv_cloudSerpent, PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 2.0, libNtve_gf_RandomAngle()), false);

                UnitIssueOrder(lv_cloudSerpent, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

            }

            else {

                if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) >= 4.0) && (lv_currentState != libGDHL_ge_CloudSerpentAIState_Leashing)) {

                    UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                    UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                    lv_currentState = libGDHL_ge_CloudSerpentAIState_Leashing;

                }



            }

            if ((lv_currentState == libGDHL_ge_CloudSerpentAIState_Idle)) {

                if ((UnitOrderCount(lv_owningUnit) == 0)) {

                }

                else {

                    if ((OrderGetAbilityCommand(UnitOrder(lv_owningUnit, 0)) == AbilityCommand("attack", 0))) {

                        if ((UnitIsValid(OrderGetTargetUnit(UnitOrder(lv_owningUnit, 0))) == false)) {

                            if ((OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)) == null)) {

                                UnitCreateEffectUnit(lv_owningUnit, "CloudSerpentCopyOrders", lv_cloudSerpent);

                            }

                            else {

                                if ((DistanceBetweenPoints(OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), UnitGetPosition(lv_cloudSerpent)) > 3.0)) {

                                    UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                                    lv_currentState = libGDHL_ge_CloudSerpentAIState_Moving;

                                }

                                else {

                                    libNtve_gf_MakeUnitFacePoint(lv_cloudSerpent, OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), 0.2);

                                }

                            }

                        }

                        else {

                            if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(OrderGetTargetUnit(UnitOrder(lv_owningUnit, 0)))) > 12.0)) {

                                UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(OrderGetTargetUnit(UnitOrder(lv_owningUnit, 0))), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                                lv_currentState = libGDHL_ge_CloudSerpentAIState_Moving;

                            }



                        }

                    }



                    if ((OrderGetAbilityCommand(UnitOrder(lv_owningUnit, 0)) == AbilityCommand("move", 0))) {

                        if ((DistanceBetweenPoints(OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), UnitGetPosition(lv_cloudSerpent)) > 3.0)) {

                            UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Moving;

                        }

                        else {

                            libNtve_gf_MakeUnitFacePoint(lv_cloudSerpent, OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), 0.2);

                        }

                    }



                }

            }



            if ((lv_currentState == libGDHL_ge_CloudSerpentAIState_Moving)) {

                if ((UnitOrderCount(lv_cloudSerpent) == 0)) {

                    lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

                }

                else {

                    if ((UnitOrderCount(lv_owningUnit) == 0)) {

                        if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) <= 3.0)) {

                            UnitIssueOrder(lv_cloudSerpent, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

                        }



                    }

                    else {

                        if ((OrderGetAbilityCommand(UnitOrder(lv_owningUnit, 0)) == AbilityCommand("attack", 0))) {

                            if ((OrderGetTargetUnit(UnitOrder(lv_owningUnit, 0)) == null)) {

                                if ((OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)) == null)) {

                                    UnitCreateEffectUnit(lv_owningUnit, "CloudSerpentCopyOrders", lv_cloudSerpent);

                                }

                                else {

                                    if ((DistanceBetweenPoints(OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), OrderGetTargetPoint(UnitOrder(lv_cloudSerpent, 0))) > 3.0)) {

                                        UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                                        lv_currentState = libGDHL_ge_CloudSerpentAIState_Moving;

                                    }

                                    else {

                                        libNtve_gf_MakeUnitFacePoint(lv_cloudSerpent, OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), 0.2);

                                    }

                                }

                            }

                            else {

                                if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(OrderGetTargetUnit(UnitOrder(lv_owningUnit, 0)))) > 12.0)) {

                                    UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(OrderGetTargetUnit(UnitOrder(lv_owningUnit, 0))), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                                    lv_currentState = libGDHL_ge_CloudSerpentAIState_Moving;

                                }

                                else {

                                    lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

                                }

                            }

                        }



                        if ((OrderGetAbilityCommand(UnitOrder(lv_owningUnit, 0)) == AbilityCommand("move", 0))) {

                            if ((DistanceBetweenPoints(OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), OrderGetTargetPoint(UnitOrder(lv_cloudSerpent, 0))) > 3.0)) {

                                UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                                lv_currentState = libGDHL_ge_CloudSerpentAIState_Moving;

                            }

                            else {

                                if ((DistanceBetweenPoints(OrderGetTargetPoint(UnitOrder(lv_owningUnit, 0)), UnitGetPosition(lv_owningUnit)) < DistanceBetweenPoints(OrderGetTargetPoint(UnitOrder(lv_cloudSerpent, 0)), UnitGetPosition(lv_cloudSerpent)))) {

                                    UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                                }



                            }

                        }



                    }

                }

            }



            if ((lv_currentState == libGDHL_ge_CloudSerpentAIState_Leashing)) {

                if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) <= 3.0)) {

                    UnitIssueOrder(lv_cloudSerpent, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                    lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

                }

                else {

                    if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) <= 4.0) && (UnitOrderCount(lv_cloudSerpent) == 0)) {

                        if ((UnitOrderCount(lv_owningUnit) == 0)) {

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Idle;

                        }

                        else {

                            UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                            UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Leashing;

                        }

                    }

                    else {

                        if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) > 4.0) && (UnitOrderCount(lv_cloudSerpent) == 0)) {

                            UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                            UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                            lv_currentState = libGDHL_ge_CloudSerpentAIState_Leashing;

                        }

                        else {

                            if ((DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), OrderGetTargetPoint(UnitOrder(lv_cloudSerpent, 0))) <= 1.5) && (DistanceBetweenPoints(UnitGetPosition(lv_cloudSerpent), UnitGetPosition(lv_owningUnit)) > 4.0)) {

                                UnitIssueOrder(lv_cloudSerpent, OrderTargetingPoint(AbilityCommand("move", 0), PointWithOffsetPolar(UnitGetPosition(lv_owningUnit), 2.0, libNtve_gf_RandomAngle())), c_orderQueueReplace);

                                UnitBehaviorAdd(lv_cloudSerpent, "CloudSerpentMinionSpeedBoost", lv_cloudSerpent, 1);

                                lv_currentState = libGDHL_ge_CloudSerpentAIState_Leashing;

                            }



                        }

                    }

                }

            }



        }



        Wait(0.0625, c_timeGame);

    }

    if ((UnitIsAlive(lv_owningUnit) != true)) {

        TriggerDebugOutput(1, StringToText(""), true);

        UnitCreateEffectUnit(lv_cloudSerpent, "TimedLifeFate", lv_cloudSerpent);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLiLiCloudSerpentSummonandSimplifiedAI_Init () {

    libGDHL_gt_HeroLiLiCloudSerpentSummonandSimplifiedAI = TriggerCreate("libGDHL_gt_HeroLiLiCloudSerpentSummonandSimplifiedAI_Func");

    TriggerEnable(libGDHL_gt_HeroLiLiCloudSerpentSummonandSimplifiedAI, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLiLiCloudSerpentSummonandSimplifiedAI, c_playerAny, "CloudSerpentApplyBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Li Li - Cloud Serpent Attack Mimic

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLiLiCloudSerpentAttackMimic_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    unit lv_ownerUnit;



    // Automatic Variable Declarations

    unitgroup auto71EC7391_g;

    int auto71EC7391_u;

    unit auto71EC7391_var;



    // Variable Initialization

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_ownerUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Conditions

    if (testConds) {

        if (!(((UnitHasBehavior2(lv_ownerUnit, "CloudSerpentOwnerBehavior") == true) || (UnitHasBehavior2(lv_ownerUnit, "LiLiCloudSerpentSerpentSidekickOwnerBehavior") == true)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(lv_target) != "DocksTreasureChest")) {

        auto71EC7391_g = UnitGroup("CloudSerpent", UnitGetOwner(lv_ownerUnit), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

        auto71EC7391_u = UnitGroupCount(auto71EC7391_g, c_unitCountAll);

        for (;; auto71EC7391_u -= 1) {

            auto71EC7391_var = UnitGroupUnitFromEnd(auto71EC7391_g, auto71EC7391_u);

            if (auto71EC7391_var == null) { break; }

            if ((libCore_gf_IsAbilityOnCooldown(auto71EC7391_var, "LiLiCloudSerpentAttack") == false)) {

                UnitIssueOrder(auto71EC7391_var, OrderTargetingUnit(AbilityCommand("LiLiCloudSerpentAttack", 0), lv_target), c_orderQueueReplace);

            }



        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLiLiCloudSerpentAttackMimic_Init () {

    libGDHL_gt_HeroLiLiCloudSerpentAttackMimic = TriggerCreate("libGDHL_gt_HeroLiLiCloudSerpentAttackMimic_Func");

    TriggerEnable(libGDHL_gt_HeroLiLiCloudSerpentAttackMimic, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLiLiCloudSerpentAttackMimic, c_playerAny, "UniversalWeaponLaunchSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Leoric Spawn

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LeoricSpawn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroSpawnPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroLeoric"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gv_players[lv_player].lv_soundDeathAlertPrefix = "UI_HeroDeath_Leoric_";

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LeoricSpawn_Init () {

    libGDHL_gt_LeoricSpawn = TriggerCreate("libGDHL_gt_LeoricSpawn_Func");

    libGame_gf_HeroSpawn(libGDHL_gt_LeoricSpawn);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Leoric - Entomb Forced Destruction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLeoricEntombForcedDestruction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventPlayerEffectUsedUnitImpact();

    lv_player = UnitGetOwner(lv_target);



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(lv_target) == "LeoricEntombCollision") || (UnitGetType(lv_target) == "LeoricEntombMain")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(libGame_gv_players[lv_player].lv_heroUnit, "LeoricEntombCancelInitialSet", libGame_gv_players[lv_player].lv_heroUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLeoricEntombForcedDestruction_Init () {

    libGDHL_gt_HeroLeoricEntombForcedDestruction = TriggerCreate("libGDHL_gt_HeroLeoricEntombForcedDestruction_Func");

    TriggerEnable(libGDHL_gt_HeroLeoricEntombForcedDestruction, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLeoricEntombForcedDestruction, c_playerAny, "DestroyPathingBlockerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Leoric - Wraith Walk - Devouring Maw Special Case

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLeoricWraithWalkDevouringMawSpecialCase_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_wraithPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(EventUnit(), "LeoricWraithWalkCasterBehavior") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_wraithPlayer = UnitGetOwner(lv_unit);

    if (((lv_wraithPlayer < 0) || (lv_wraithPlayer > libCore_gv_bALMaxPlayers))) {

        return true;

    }



    UnitCreateEffectUnit(libGame_gv_players[lv_wraithPlayer].lv_heroUnit, "LeoricWraithWalkRemoveCancelBuff", lv_unit);

    UnitRemove(libGDHL_gv_hero_Leoric_WraithWalk_Unit[lv_wraithPlayer]);

    libGDHL_gv_hero_Leoric_WraithWalk_Unit[lv_wraithPlayer] = null;

    if ((UnitGetType(libGame_gv_players[lv_wraithPlayer].lv_heroUnit) == "HeroAbathur")) {

        if ((UnitIsAlive(libGame_gv_players[lv_wraithPlayer].lv_activeVehicle) == true)) {

            libGame_gv_players[lv_wraithPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGame_gv_players[lv_wraithPlayer].lv_activeVehicle);

        }

        else {

            libGame_gv_players[lv_wraithPlayer].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[lv_wraithPlayer].lv_heroUnitGroup;

        }

    }

    else {

        libGame_gv_players[lv_wraithPlayer].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[lv_wraithPlayer].lv_heroUnitGroup;

    }

    libGame_gf_CameraUpdateCameraForPlayer(lv_wraithPlayer);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLeoricWraithWalkDevouringMawSpecialCase_Init () {

    libGDHL_gt_HeroLeoricWraithWalkDevouringMawSpecialCase = TriggerCreate("libGDHL_gt_HeroLeoricWraithWalkDevouringMawSpecialCase_Func");

    TriggerEnable(libGDHL_gt_HeroLeoricWraithWalkDevouringMawSpecialCase, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLeoricWraithWalkDevouringMawSpecialCase, null, "DevouringMawTargetBehavior", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Leoric - Wraith Walk - Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLeoricWraithWalkCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_controllerUnit;

    int lv_player;

    unit lv_wraithWalkUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_controllerUnit = EventUnit();

    lv_player = UnitGetOwner(lv_controllerUnit);

    lv_wraithWalkUnit = EventUnitCreatedUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroAbathur")) {

        lv_controllerUnit = libGame_gv_players[lv_player].lv_activeVehicle;

        libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_controllerUnit);

    }

    else {

        lv_controllerUnit = libGame_gv_players[lv_player].lv_heroUnit;

        libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[lv_player].lv_heroUnitGroup;

    }

    UnitSelect(lv_wraithWalkUnit, lv_player, true);

    libGDHL_gv_hero_Leoric_WraithWalk_Unit[lv_player] = lv_wraithWalkUnit;

    UnitSetFacing(lv_wraithWalkUnit, UnitGetFacing(lv_controllerUnit), 0.0);

    if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_player) == true)) {

        libAIAI_gv_aIHeroes[lv_player].lv_currentHeroUnit = lv_wraithWalkUnit;

    }



    libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_wraithWalkUnit);

    libGame_gv_players[lv_player].lv_cameraCurrentTarget = lv_wraithWalkUnit;

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    while ((UnitHasBehavior2(lv_wraithWalkUnit, "LeoricWraithWalkActiveBehavior") == true) && (UnitIsAlive(lv_controllerUnit) == true)) {

        Wait(0.0625, c_timeGame);

    }

    if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_player) == true)) {

        libAIAI_gv_aIHeroes[lv_player].lv_currentHeroUnit = lv_controllerUnit;

    }



    libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_controllerUnit);

    libGame_gv_players[lv_player].lv_cameraCurrentTarget = lv_controllerUnit;

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLeoricWraithWalkCast_Init () {

    libGDHL_gt_HeroLeoricWraithWalkCast = TriggerCreate("libGDHL_gt_HeroLeoricWraithWalkCast_Func");

    TriggerEnable(libGDHL_gt_HeroLeoricWraithWalkCast, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroLeoricWraithWalkCast, null, "LeoricWraithWalk", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Leoric - Undying Start

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LeoricUndyingStart_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_leoricPlayer;

    unit lv_leoric;

    int lv_killingPlayer;

    fixed lv_deathTimer;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(EventPlayerEffectUsedUnit(c_effectUnitCaster), "LeoricUndying") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_leoric = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_leoricPlayer = UnitGetOwner(lv_leoric);

    lv_killingPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);

    libGDHL_gv_hero_Leoric_Undying_Dead_Time_Saved[lv_leoricPlayer] = 0.0;

    PlayerScoreValueSetFromInt(lv_leoricPlayer, "DeadHeroLastKnownHealth", FixedToInt(UnitGetPropertyFixed(lv_leoric, c_unitPropLife, c_unitPropCurrent)));

    if ((TechTreeUnitCount(lv_leoricPlayer, "LeoricWraithWalkUnit", c_techCountCompleteOnly) >= 1)) {

        if (((libGDHL_gv_hero_Leoric_WraithWalk_Unit[lv_leoricPlayer] == null) || (UnitIsAlive(libGDHL_gv_hero_Leoric_WraithWalk_Unit[lv_leoricPlayer]) == false))) {

            libGDHL_gv_hero_Leoric_WraithWalk_Unit[lv_leoricPlayer] = UnitGroupUnit(UnitGroup("LeoricWraithWalkUnit", lv_leoricPlayer, RegionCircle(UnitGetPosition(lv_leoric), 25.0), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0), 1);

        }



        UnitSetPosition(lv_leoric, libNtve_gf_PointFacingAngle(UnitGetPosition(libGDHL_gv_hero_Leoric_WraithWalk_Unit[lv_leoricPlayer]), UnitGetFacing(libGDHL_gv_hero_Leoric_WraithWalk_Unit[lv_leoricPlayer])), false);

        UnitRemove(libGDHL_gv_hero_Leoric_WraithWalk_Unit[lv_leoricPlayer]);

        UnitBehaviorRemove(lv_leoric, "LeoricWraithWalkCasterBehavior", 1);

        libGame_gv_players[EventPlayer()].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[EventPlayer()].lv_heroUnitGroup;

        libGame_gf_CameraUpdateCameraForPlayer(EventPlayer());

        if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_leoricPlayer) == true)) {

            libAIAI_gv_aIHeroes[lv_leoricPlayer].lv_currentHeroUnit = libGame_gv_players[lv_leoricPlayer].lv_heroUnit;

        }



    }



    UnitSetPropertyFixed(lv_leoric, c_unitPropLife, 2.0);

    UnitSetPropertyFixed(lv_leoric, c_unitPropEnergy, 0.0);

    UnitBehaviorAdd(lv_leoric, "LeoricUndyingMinorStasis", lv_leoric, 1);

    UnitBehaviorAdd(lv_leoric, "Dead", lv_leoric, 1);

    if ((UnitBehaviorCount(lv_leoric, "NoDeadMechanics") == 0)) {

        UnitBehaviorAdd(lv_leoric, "DeadMechanics", lv_leoric, 1);

    }



    UnitBehaviorRemove(lv_leoric, "LeoricMarchoftheBlackKing", 1);

    libGame_gv_players[lv_leoricPlayer].lv_isDead = true;

    libGame_gf_SendEventHeroKilled(lv_killingPlayer, lv_leoric);

    libGDHL_gf_LeoricUIShowHideCustomDeathOverlay(true, lv_leoricPlayer);

    libGame_gf_SendEventHeroEntersSpecialDeathState(lv_leoric);

    libGame_gf_UpdateStormMapLighting(PlayerGroupSingle(lv_leoricPlayer), 0.0);

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroLeoric", "LifeRegenRate", lv_leoricPlayer, "0");

    CatalogFieldValueSet(c_gameCatalogActor, "HeroLeoric", "CustomUnitStatusFrame", EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), "UnitStatus/HeroUnitStatusFrameAllGreyNoEnergyTemplate");

    lv_deathTimer = libCore_gf_HeroDeathTime(lv_leoricPlayer, UnitLevel(libGame_gv_players[lv_leoricPlayer].lv_heroUnit));

    libGame_gf_HeroDeathStartRespawnTimer(lv_leoricPlayer, lv_deathTimer);

    libNtve_gf_SendActorMessageToUnit(lv_leoric, "SetShowStatusBar 1");

    UnitBehaviorAdd(lv_leoric, "LeoricUndying", lv_leoric, 1);

    if ((TimerGetDuration(libGame_gv_players[lv_leoricPlayer].lv_respawnTimer) > 0.0)) {

        UnitBehaviorSetDuration(lv_leoric, "LeoricUndying", TimerGetRemaining(libGame_gv_players[lv_leoricPlayer].lv_respawnTimer));

        UnitBehaviorSetDuration(lv_leoric, "Dead", TimerGetRemaining(libGame_gv_players[lv_leoricPlayer].lv_respawnTimer));

        libGDHL_gv_hero_Leoric_Undying_Dead_Duration[lv_leoricPlayer] = UnitBehaviorDurationTotal(lv_leoric, "LeoricUndying");

    }

    else {

        UnitBehaviorSetDuration(lv_leoric, "LeoricUndying", 0.0);

        UnitBehaviorSetDuration(lv_leoric, "Dead", 0.0);

        libGDHL_gv_hero_Leoric_Undying_Dead_Duration[lv_leoricPlayer] = UnitBehaviorDurationTotal(lv_leoric, "LeoricUndying");

    }

    CatalogFieldValueSetFixed(c_gameCatalogEffect, "LeoricUndyingLifeRegenModifyUnit", "VitalArray[" + IntToString(0) + "].ChangeFraction", lv_leoricPlayer, (0.5 / (libGDHL_gv_hero_Leoric_Undying_Dead_Duration[lv_leoricPlayer] - 2.0)));

    libUIUI_gf_UIHeroConsoleShowHideUnitStatusFrameForPlayer(false, lv_leoricPlayer);

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroLeoric", "Collide[" + IntToString(1) + "]", lv_leoricPlayer, "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroLeoric", "Collide[" + IntToString(12) + "]", lv_leoricPlayer, "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroLeoric", "Collide[" + IntToString(8) + "]", lv_leoricPlayer, "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroLeoric", "Collide[" + IntToString(10) + "]", lv_leoricPlayer, "1");

    libUIUI_gf_FullscreenOverlaysShowHideDeathOverlay(true, lv_leoricPlayer);

    libUIUI_gf_HeroConsoleUnitStatusBarsUpdateStunDeathBar("LeoricUndying", lv_leoricPlayer);

    libUIUI_gf_UIHeroConsoleShowHideUnitStatusFrameForPlayer(true, UnitGetOwner(lv_leoric));

    libGDHL_gf_LeoricUIHeroSpecificStatusFrameUpdateLeoricUIValue(lv_leoricPlayer);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LeoricUndyingStart_Init () {

    libGDHL_gt_LeoricUndyingStart = TriggerCreate("libGDHL_gt_LeoricUndyingStart_Func");

    TriggerEnable(libGDHL_gt_LeoricUndyingStart, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_LeoricUndyingStart, c_playerAny, "LeoricApplyUndyingBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Leoric - Undying End

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LeoricUndyingEnd_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_leoricRegen;

    int lv_itLevel;

    unit lv_leoric;

    int lv_leoricPlayer;

    int lv_deadPlayer;

    int lv_killingPlayer;



    // Automatic Variable Declarations

    int auto87E5FACA_ae;

    const int auto87E5FACA_ai = 1;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_leoric = EventUnit();

    lv_leoricPlayer = UnitGetOwner(lv_leoric);

    if ((lv_leoricPlayer > libCore_gv_bALMaxEnginePlayerCount)) {

        return true;

    }



    libGame_gv_players[lv_leoricPlayer].lv_isDead = false;

    UnitBehaviorRemove(lv_leoric, "Dead", 1);

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroLeoric", "Collide[" + IntToString(1) + "]", lv_leoricPlayer, "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroLeoric", "Collide[" + IntToString(12) + "]", lv_leoricPlayer, "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroLeoric", "Collide[" + IntToString(8) + "]", lv_leoricPlayer, "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroLeoric", "Collide[" + IntToString(10) + "]", lv_leoricPlayer, "0");

    Wait(1.0, c_timeGame);

    libGame_gf_SendEventHeroRespawn(lv_leoricPlayer, lv_leoric);

    lv_leoricRegen = CatalogFieldValueGetAsFixed(c_gameCatalogUnit, "HeroLeoric", "LifeRegenRate", 0);

    auto87E5FACA_ae = libGame_gv_teams[libGame_gf_TeamNumberOfPlayer(lv_leoricPlayer)].lv_teamLevel;

    lv_itLevel = 1;

    for ( ; ( (auto87E5FACA_ai >= 0 && lv_itLevel <= auto87E5FACA_ae) || (auto87E5FACA_ai < 0 && lv_itLevel >= auto87E5FACA_ae) ) ; lv_itLevel += auto87E5FACA_ai ) {

        lv_leoricRegen = (lv_leoricRegen * (CatalogFieldValueGetAsFixed(c_gameCatalogHero, "Leoric", "LevelScalingArray[" + IntToString(6) + "].Modifications[" + IntToString(2) + "].Value", c_playerAny) + 1.0));

    }

    CatalogFieldValueSetFixed(c_gameCatalogUnit, "HeroLeoric", "LifeRegenRate", lv_leoricPlayer, lv_leoricRegen);

    CatalogFieldValueSet(c_gameCatalogActor, "HeroLeoric", "CustomUnitStatusFrame", UnitGetOwner(EventUnit()), "UnitStatus/HeroUnitStatusFrameTemplate");

    libGDHL_gf_LeoricUIShowHideCustomDeathOverlay(false, lv_leoricPlayer);

    UnitBehaviorRemove(lv_leoric, "SuppressRegeneration", 1);

    PlayerScoreValueSetFromInt(lv_leoricPlayer, "DeadHeroLastKnownHealth", 0);

    libGame_gf_HeroDeathEnableDisableDeadSoundStateForPlayer(false, lv_leoricPlayer);

    libSond_gf_HeroVOPlayHeroLine(libCore_ge_HeroVOEvents_Revive, lv_leoricPlayer, libCore_gv_playerGroupFromPlayer[lv_leoricPlayer]);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LeoricUndyingEnd_Init () {

    libGDHL_gt_LeoricUndyingEnd = TriggerCreate("libGDHL_gt_LeoricUndyingEnd_Func");

    TriggerEnable(libGDHL_gt_LeoricUndyingEnd, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_LeoricUndyingEnd, null, "LeoricUndying", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Leoric - Swapped During Undying

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LeoricSwappedDuringUndying_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[libGame_gf_DebugHeroSwappedPlayer()].lv_heroUnit) == "HeroLeoric"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = libGame_gf_DebugHeroSwappedPlayer();

    CatalogFieldValueSet(c_gameCatalogActor, "HeroLeoric", "CustomUnitStatusFrame", lv_player, "UnitStatus/HeroUnitStatusFrameTemplate");

    libGame_gf_SendEventHeroRespawn(lv_player, libGame_gv_players[lv_player].lv_heroUnit);

    libGDHL_gf_LeoricUIShowHideCustomDeathOverlay(false, lv_player);

    libGame_gf_HeroDeathEnableDisableDeadSoundStateForPlayer(false, lv_player);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LeoricSwappedDuringUndying_Init () {

    libGDHL_gt_LeoricSwappedDuringUndying = TriggerCreate("libGDHL_gt_LeoricSwappedDuringUndying_Func");

    TriggerEnable(libGDHL_gt_LeoricSwappedDuringUndying, false);

    libGame_gf_DebugHeroSwapped(libGDHL_gt_LeoricSwappedDuringUndying);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Leoric - Undying - Healing Death Timer Reduction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LeoricUndyingHealingDeathTimerReduction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_leoricUnit;

    int lv_leoricPlayer;

    fixed lv_currentTotalRespawnTime;

    fixed lv_reducedTotalRespawnTime;

    fixed lv_healthRegenPercentage;

    fixed lv_timeReduced;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_leoricUnit = EventUnit();

    lv_leoricPlayer = UnitGetOwner(lv_leoricUnit);

    lv_currentTotalRespawnTime = libGDHL_gv_hero_Leoric_Undying_Dead_Duration[lv_leoricPlayer];



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(lv_leoricUnit, "LeoricUndying") == true))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_leoricUnit, "LeoricUndyingSuppressHealing") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_healthRegenPercentage = (EventUnitHealAmount() / UnitGetPropertyFixed(lv_leoricUnit, c_unitPropLifeMax, c_unitPropCurrent));

    lv_reducedTotalRespawnTime = (lv_currentTotalRespawnTime * (1.0 - lv_healthRegenPercentage));

    lv_timeReduced = (lv_reducedTotalRespawnTime - lv_currentTotalRespawnTime);

    libGDHL_gv_hero_Leoric_Undying_Dead_Time_Saved[lv_leoricPlayer] -= lv_timeReduced;

    libGame_gf_HeroDeathModifyRespawnTimer(lv_leoricPlayer, lv_timeReduced);

    libGDHL_gf_LeoricUIHeroSpecificStatusFrameUpdateLeoricUIValue(lv_leoricPlayer);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LeoricUndyingHealingDeathTimerReduction_Init () {

    libGDHL_gt_LeoricUndyingHealingDeathTimerReduction = TriggerCreate("libGDHL_gt_LeoricUndyingHealingDeathTimerReduction_Func");

    TriggerAddEventUnitHealed(libGDHL_gt_LeoricUndyingHealingDeathTimerReduction, null, c_unitVitalLife, "LeoricMasteryFealtyUntoDeathRestoreLifeUndying");

    TriggerAddEventUnitHealed(libGDHL_gt_LeoricUndyingHealingDeathTimerReduction, null, c_unitVitalLife, "LeoricDrainHopeGhostPeriodicHealerBase");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Leoric UI Initialize

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LeoricUIInitialize_Func (bool testConds, bool runActions) {

    int init_i;



    // Variable Declarations

    int[6] lv_panels;

    int lv_currentPanelLayer;



    // Automatic Variable Declarations

    // Variable Initialization

    for (init_i = 0; init_i <= 5; init_i += 1) {

        lv_panels[init_i] = c_invalidDialogControlId;

    }



    // Actions

    if (!runActions) {

        return true;

    }



    DialogControlHookup(libUIUI_gv_heroSpecificStatusContainer, c_triggerControlTypePanel, "LeoricTraitFrame");

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_leoricUI.lv_mainPanel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypePanel, "UnitStatusFrame0/LeoricCheatDeathFrame");

    libGDHL_gv_leoricUI.lv_cheatDeathFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "UnitStatusFrame0/LeoricCheatDeathFrame/LeoricTraitLabel");

    libGDHL_gv_leoricUI.lv_traitLabel = DialogControlLastCreated();

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LeoricUIInitialize_Init () {

    libGDHL_gt_LeoricUIInitialize = TriggerCreate("libGDHL_gt_LeoricUIInitialize_Func");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Leoric UI Clean Up UI For Hero Swap

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LeoricUICleanUpUIForHeroSwap_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = libGame_gf_DebugHeroSwappedPlayer();

    libGDHL_gf_LeoricUIClearUIForHeroSwap(lv_player);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LeoricUICleanUpUIForHeroSwap_Init () {

    libGDHL_gt_LeoricUICleanUpUIForHeroSwap = TriggerCreate("libGDHL_gt_LeoricUICleanUpUIForHeroSwap_Func");

    libGame_gf_DebugHeroSwapped(libGDHL_gt_LeoricUICleanUpUIForHeroSwap);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Leoric - Fealty Unto Death - Enemy NPC Proc Listener

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LeoricFealtyUntoDeathEnemyNPCProcListener_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_killingPlayer;

    unit lv_minion;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_killingPlayer = libGame_gf_HeroParticipatedInNPCTakedownKillingPlayer();

    lv_minion = libGame_gf_HeroParticipatedInNPCTakedownMinion();

    if ((UnitHasBehavior2(libGame_gv_players[lv_killingPlayer].lv_heroUnit, "LeoricMasteryFealtyUntoDeathCarryBehavior") == true) && (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeSummoned) == false) && (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeStructure) == false) && (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeCreep) == false) && ((UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeMerc) == true) || (UnitTypeTestAttribute(UnitGetType(lv_minion), c_unitAttributeMinion) == true))) {

        if ((UnitHasBehavior2(libGame_gv_players[lv_killingPlayer].lv_heroUnit, "LeoricUndying") == true)) {

            UnitCreateEffectUnitWithSource(libGame_gv_players[lv_killingPlayer].lv_heroUnit, "LeoricMasteryFealtyUntoDeathRestoreLifeUndying", libGame_gv_players[lv_killingPlayer].lv_heroUnit, c_gameCatalogBehavior, "LeoricMasteryFealtyUntoDeathCarryBehavior");

        }

        else {

            UnitCreateEffectUnitWithSource(libGame_gv_players[lv_killingPlayer].lv_heroUnit, "LeoricMasteryFealtyUntoDeathImpactSet", libGame_gv_players[lv_killingPlayer].lv_heroUnit, c_gameCatalogBehavior, "LeoricMasteryFealtyUntoDeathCarryBehavior");

        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LeoricFealtyUntoDeathEnemyNPCProcListener_Init () {

    libGDHL_gt_LeoricFealtyUntoDeathEnemyNPCProcListener = TriggerCreate("libGDHL_gt_LeoricFealtyUntoDeathEnemyNPCProcListener_Func");

    TriggerEnable(libGDHL_gt_LeoricFealtyUntoDeathEnemyNPCProcListener, false);

    libGame_gf_HeroParticipatedInNPCTakedown(libGDHL_gt_LeoricFealtyUntoDeathEnemyNPCProcListener);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Leoric - Fealty Unto Death - Allied NPC Proc Listener

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LeoricFealtyUntoDeathAlliedNPCProcListener_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_alliedPlayer;

    unit lv_killedNPC;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_alliedPlayer = libGame_gf_HeroWitnessedAlliedNPCDeathAlliedPlayer();

    lv_killedNPC = libGame_gf_HeroWitnessedAlliedNPCDeathMinion();

    if ((UnitHasBehavior2(libGame_gv_players[lv_alliedPlayer].lv_heroUnit, "LeoricMasteryFealtyUntoDeathCarryBehavior") == true) && (UnitTypeTestAttribute(UnitGetType(lv_killedNPC), c_unitAttributeSummoned) == false) && (UnitTypeTestAttribute(UnitGetType(lv_killedNPC), c_unitAttributeStructure) == false) && (UnitTypeTestAttribute(UnitGetType(lv_killedNPC), c_unitAttributeCreep) == false) && ((UnitTypeTestAttribute(UnitGetType(lv_killedNPC), c_unitAttributeMerc) == true) || (UnitTypeTestAttribute(UnitGetType(lv_killedNPC), c_unitAttributeMinion) == true))) {

        if ((UnitHasBehavior2(libGame_gv_players[lv_alliedPlayer].lv_heroUnit, "LeoricUndying") == true)) {

            UnitCreateEffectUnitWithSource(libGame_gv_players[lv_alliedPlayer].lv_heroUnit, "LeoricMasteryFealtyUntoDeathRestoreLifeUndying", libGame_gv_players[lv_alliedPlayer].lv_heroUnit, c_gameCatalogBehavior, "LeoricMasteryFealtyUntoDeathCarryBehavior");

        }

        else {

            UnitCreateEffectUnitWithSource(libGame_gv_players[lv_alliedPlayer].lv_heroUnit, "LeoricMasteryFealtyUntoDeathImpactSet", libGame_gv_players[lv_alliedPlayer].lv_heroUnit, c_gameCatalogBehavior, "LeoricMasteryFealtyUntoDeathCarryBehavior");

        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LeoricFealtyUntoDeathAlliedNPCProcListener_Init () {

    libGDHL_gt_LeoricFealtyUntoDeathAlliedNPCProcListener = TriggerCreate("libGDHL_gt_LeoricFealtyUntoDeathAlliedNPCProcListener_Func");

    TriggerEnable(libGDHL_gt_LeoricFealtyUntoDeathAlliedNPCProcListener, false);

    libGame_gf_HeroWitnessedAlliedNPCDeath(libGDHL_gt_LeoricFealtyUntoDeathAlliedNPCProcListener);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Leoric - Ossein Renewal Talent Globe Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLeoricOsseinRenewalTalentGlobeProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_leoric;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_leoric = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_player = UnitGetOwner(lv_leoric);



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(lv_leoric) >= 1))) {

            return false;

        }



        if (!((UnitGetOwner(lv_leoric) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "LeoricMasteryOsseinRenewal") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((PlayerHasTalent(EventPlayer(), "LeoricMasteryOsseinRenewal") == true)) {

        UnitCreateEffectUnit(lv_leoric, "LeoricOsseinRenewalGlobeImpactSet", lv_leoric);

        UnitAddChargeUsed(lv_leoric, "Abil/LeoricOsseinRenewal", -1.0);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLeoricOsseinRenewalTalentGlobeProc_Init () {

    libGDHL_gt_HeroLeoricOsseinRenewalTalentGlobeProc = TriggerCreate("libGDHL_gt_HeroLeoricOsseinRenewalTalentGlobeProc_Func");

    TriggerEnable(libGDHL_gt_HeroLeoricOsseinRenewalTalentGlobeProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLeoricOsseinRenewalTalentGlobeProc, c_playerAny, "RegenGlobeImpactSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Leoric - Shroud of the Dead King Floating Text

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_triggeringUnitOwner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_triggeringUnitOwner = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!((EventUnitBehaviorCumulativeDamageModification() >= 0.0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    FloatingCombatElementCreateNumberTextAtUnit(PlayerGroupSingle(lv_triggeringUnitOwner), "FloatingCombatElements/FloatingCombatAmountReadable", "", EventUnit(), FixedToInt(EventUnitBehaviorCumulativeDamageModification()), StringExternal("Param/Value/lib_HVAR_D90A4267"), libNtve_gv_FloatingCombatTextAutoRandomSeed);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText_Init () {

    libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText = TriggerCreate("libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText_Func");

    TriggerEnable(libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText, null, "LeoricShroudoftheDeadKingProtectedBuff", c_unitBehaviorChangeRefresh);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText, null, "LeoricShroudoftheDeadKingProtectedBuff", c_unitBehaviorChangeDecrease);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Viking Bribery NPC Proc Listener

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsVikingBriberyNPCProcListener_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_killingPlayer;

    unit lv_minion;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_killingPlayer = libGame_gf_HeroParticipatedInNPCTakedownKillingPlayer();

    lv_minion = libGame_gf_HeroParticipatedInNPCTakedownMinion();

    libGDHL_gf_VikingBriberyProc(lv_killingPlayer, lv_minion);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsVikingBriberyNPCProcListener_Init () {

    libGDHL_gt_HeroLostVikingsVikingBriberyNPCProcListener = TriggerCreate("libGDHL_gt_HeroLostVikingsVikingBriberyNPCProcListener_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyNPCProcListener, false);

    libGame_gf_HeroParticipatedInNPCTakedown(libGDHL_gt_HeroLostVikingsVikingBriberyNPCProcListener);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Viking Bribery Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsVikingBriberyUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_vikingUnit;



    // Automatic Variable Declarations

    unitgroup auto03293D7A_g;

    int auto03293D7A_u;

    unit auto03293D7A_var;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_vikingUnit = libGame_gv_players[EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster)].lv_heroUnit;

    UnitCreateEffectUnit(lv_vikingUnit, "LostVikingsVikingBriberyRemoveStackBehavior", lv_vikingUnit);

    auto03293D7A_g = libGame_gv_players[EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster)].lv_heroUnitGroup;

    auto03293D7A_u = UnitGroupCount(auto03293D7A_g, c_unitCountAll);

    for (;; auto03293D7A_u -= 1) {

        auto03293D7A_var = UnitGroupUnitFromEnd(auto03293D7A_g, auto03293D7A_u);

        if (auto03293D7A_var == null) { break; }

        UnitCreateEffectUnit(auto03293D7A_var, "LostVikingsVikingBriberyDecreaseVisualTokenCounter", auto03293D7A_var);

    }

    PlayerScoreValueSetFromInt(EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), "LostVikingsVikingBriberyStackScore", UnitBehaviorCount(lv_vikingUnit, "LostVikingsVikingBriberyStacks"));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsVikingBriberyUsed_Init () {

    libGDHL_gt_HeroLostVikingsVikingBriberyUsed = TriggerCreate("libGDHL_gt_HeroLostVikingsVikingBriberyUsed_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyUsed, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLostVikingsVikingBriberyUsed, c_playerAny, "LostVikingsVikingBriberySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Viking Bribery Score Reset

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsVikingBriberyScoreReset_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    PlayerScoreValueSetFromInt(UnitGetOwner(EventUnit()), "LostVikingsVikingBriberyStackScore", 0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsVikingBriberyScoreReset_Init () {

    libGDHL_gt_HeroLostVikingsVikingBriberyScoreReset = TriggerCreate("libGDHL_gt_HeroLostVikingsVikingBriberyScoreReset_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyScoreReset, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLostVikingsVikingBriberyScoreReset, null, "LostVikingsVikingBriberyCarryBehavior", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Viking Bribery Add Stacks on Cooldown Reset

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsVikingBriberyAddStacksonCooldownReset_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(libGame_gf_SpecialCaseTalentCooldownResetPlayer(), "LostVikingsMasteryVikingBribery") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = libGame_gf_SpecialCaseTalentCooldownResetPlayer();

    PlayerScoreValueSetFromInt(lv_player, "LostVikingsVikingBriberyStackScore", 100);

    UnitBehaviorAdd(libGame_gv_players[lv_player].lv_heroUnit, "LostVikingsVikingBriberyStacks", libGame_gv_players[lv_player].lv_heroUnit, 100);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsVikingBriberyAddStacksonCooldownReset_Init () {

    libGDHL_gt_HeroLostVikingsVikingBriberyAddStacksonCooldownReset = TriggerCreate("libGDHL_gt_HeroLostVikingsVikingBriberyAddStacksonCooldownReset_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsVikingBriberyAddStacksonCooldownReset, false);

    libGame_gf_SpecialCaseTalentCooldownReset(libGDHL_gt_HeroLostVikingsVikingBriberyAddStacksonCooldownReset);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Viking Hoard

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsVikingHoard_Func (bool testConds, bool runActions) {

    // Variable Declarations

    playergroup lv_itVikingsPlayerGroup;

    unit lv_itRegenGlobeTarget;

    int lv_itVikingsPlayer;

    unit lv_itVikingPerPlayer;



    // Automatic Variable Declarations

    unitgroup autoD0FFDC0B_g;

    int autoD0FFDC0B_u;

    playergroup autoF761DB16_g;

    unitgroup autoE5826E76_g;

    int autoE5826E76_u;



    // Variable Initialization

    lv_itVikingsPlayerGroup = PlayerGroupEmpty();



    // Actions

    if (!runActions) {

        return true;

    }



    autoD0FFDC0B_g = UnitGroupAlliance(EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget), c_unitAllianceAlly, RegionCircle(UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitTarget)), 12.0), libCore_gv_filtersHeroicAllyorPlayerandnotStasis, 0);

    autoD0FFDC0B_u = UnitGroupCount(autoD0FFDC0B_g, c_unitCountAll);

    for (;; autoD0FFDC0B_u -= 1) {

        lv_itRegenGlobeTarget = UnitGroupUnitFromEnd(autoD0FFDC0B_g, autoD0FFDC0B_u);

        if (lv_itRegenGlobeTarget == null) { break; }

        if (((UnitGetType(lv_itRegenGlobeTarget) == "HeroErik") || (UnitGetType(lv_itRegenGlobeTarget) == "HeroOlaf") || (UnitGetType(lv_itRegenGlobeTarget) == "HeroBaleog"))) {

            PlayerGroupAdd(lv_itVikingsPlayerGroup, UnitGetOwner(lv_itRegenGlobeTarget));

        }

        else {

            if (((lv_itRegenGlobeTarget == libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_Vehicle) && ((UnitGetType(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_UnitInsideVehicle) == "HeroErik") || (UnitGetType(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_UnitInsideVehicle) == "HeroOlaf") || (UnitGetType(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_UnitInsideVehicle) == "HeroBaleog")))) {

                PlayerGroupAdd(lv_itVikingsPlayerGroup, UnitGetOwner(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_Vehicle));

            }

            else {

                if (((UnitIsValid(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_LinkedVehicle) == true) && (lv_itRegenGlobeTarget == libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_Vehicle) && ((UnitGetType(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_LinkedVehicle)].lv_unit_UnitInsideVehicle) == "HeroErik") || (UnitGetType(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_LinkedVehicle)].lv_unit_UnitInsideVehicle) == "HeroOlaf") || (UnitGetType(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_LinkedVehicle)].lv_unit_UnitInsideVehicle) == "HeroBaleog")))) {

                    PlayerGroupAdd(lv_itVikingsPlayerGroup, UnitGetOwner(libMapM_gv_vehicle[libMapM_gf_GetVehicleIndexOfUnit(lv_itRegenGlobeTarget)].lv_unit_LinkedVehicle));

                }



            }

        }

    }

    autoF761DB16_g = lv_itVikingsPlayerGroup;

    lv_itVikingsPlayer = -1;

    while (true) {

        	lv_itVikingsPlayer = PlayerGroupNextPlayer(autoF761DB16_g, lv_itVikingsPlayer);

        	if (lv_itVikingsPlayer<0) { break; }

        	if ((UnitGetType(libGame_gv_players[lv_itVikingsPlayer].lv_heroUnit) == "HeroAbathur")) {

            UnitCreateEffectUnit(libGame_gv_players[lv_itVikingsPlayer].lv_activeVehicle, "LostVikingsVikingHoardIncrementTokenCounter", libGame_gv_players[lv_itVikingsPlayer].lv_activeVehicle);

        }

        else {

            autoE5826E76_g = libGame_gv_players[lv_itVikingsPlayer].lv_heroUnitGroup;

            autoE5826E76_u = UnitGroupCount(autoE5826E76_g, c_unitCountAll);

            for (;; autoE5826E76_u -= 1) {

                lv_itVikingPerPlayer = UnitGroupUnitFromEnd(autoE5826E76_g, autoE5826E76_u);

                if (lv_itVikingPerPlayer == null) { break; }

                UnitCreateEffectUnit(lv_itVikingPerPlayer, "LostVikingsVikingHoardIncrementTokenCounter", lv_itVikingPerPlayer);

            }

        }

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsVikingHoard_Init () {

    libGDHL_gt_HeroLostVikingsVikingHoard = TriggerCreate("libGDHL_gt_HeroLostVikingsVikingHoard_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsVikingHoard, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLostVikingsVikingHoard, c_playerAny, "LostVikingsVikingHoardDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Spin To Win

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsSpinToWin_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    if ((lv_player >= 1) && (lv_player <= 10) && (UnitGetType(lv_unit) != "HeroLostVikingsController")) {

        UnitCreateEffectUnitWithSource(lv_unit, "LostVikingsSpinToWinSearch", lv_unit, c_gameCatalogAbil, "LostVikingsSpinToWin");

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsSpinToWin_Init () {

    libGDHL_gt_HeroLostVikingsSpinToWin = TriggerCreate("libGDHL_gt_HeroLostVikingsSpinToWin_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsSpinToWin, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLostVikingsSpinToWin, c_playerAny, "LostVikingsSpinToWinVikingImpactSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Olaf The Stout

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsOlafTheStout_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup auto066E6ABE_g;

    int auto066E6ABE_u;

    unit auto066E6ABE_var;



    // Conditions

    if (testConds) {

        if (!((PlayerHero(libGame_gf_HeroGainTalentPlayer()) == "LostVikings"))) {

            return false;

        }



        if (!((PlayerHasTalent(libGame_gf_HeroGainTalentPlayer(), "LostVikingsMasteryOlafTheStout") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto066E6ABE_g = libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnitGroup;

    auto066E6ABE_u = UnitGroupCount(auto066E6ABE_g, c_unitCountAll);

    for (;; auto066E6ABE_u -= 1) {

        auto066E6ABE_var = UnitGroupUnitFromEnd(auto066E6ABE_g, auto066E6ABE_u);

        if (auto066E6ABE_var == null) { break; }

        if ((UnitGetType(auto066E6ABE_var) == "HeroOlaf")) {

            UnitBehaviorAdd(auto066E6ABE_var, "TalentBucketBlockChargedTarget", auto066E6ABE_var, 1);

            break;

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsOlafTheStout_Init () {

    libGDHL_gt_HeroLostVikingsOlafTheStout = TriggerCreate("libGDHL_gt_HeroLostVikingsOlafTheStout_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsOlafTheStout, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroLostVikingsOlafTheStout);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Respawn Timer Expires

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsRespawnTimerExpires_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itLVPlayer;



    // Automatic Variable Declarations

    const int autoA538AB50_ae = libCore_gv_bALMaxPlayers;

    const int autoA538AB50_ai = 1;

    timer autoF35FEBDB_val;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((libGame_gv_gameOver == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_itLVPlayer = 1;

    for ( ; ( (autoA538AB50_ai >= 0 && lv_itLVPlayer <= autoA538AB50_ae) || (autoA538AB50_ai < 0 && lv_itLVPlayer >= autoA538AB50_ae) ) ; lv_itLVPlayer += autoA538AB50_ai ) {

        autoF35FEBDB_val = EventTimer();

        if (autoF35FEBDB_val == libGDHL_gv_lostVikingsPlayer[lv_itLVPlayer].lv_erikDeathTimer) {

            libGDHL_gf_VikingDownRespawnVikingforPlayer(libGDHL_gv_lostVikingsPlayer[lv_itLVPlayer].lv_erik);

            break;

        }

        else if (autoF35FEBDB_val == libGDHL_gv_lostVikingsPlayer[lv_itLVPlayer].lv_baleogDeathTimer) {

            libGDHL_gf_VikingDownRespawnVikingforPlayer(libGDHL_gv_lostVikingsPlayer[lv_itLVPlayer].lv_baleog);

            break;

        }

        else if (autoF35FEBDB_val == libGDHL_gv_lostVikingsPlayer[lv_itLVPlayer].lv_olafDeathTimer) {

            libGDHL_gf_VikingDownRespawnVikingforPlayer(libGDHL_gv_lostVikingsPlayer[lv_itLVPlayer].lv_olaf);

            break;

        }

        else {

        }

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsRespawnTimerExpires_Init () {

    libGDHL_gt_HeroLostVikingsRespawnTimerExpires = TriggerCreate("libGDHL_gt_HeroLostVikingsRespawnTimerExpires_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, false);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[1].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[1].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[1].lv_olafDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[2].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[2].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[2].lv_olafDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[3].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[3].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[3].lv_olafDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[4].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[4].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[4].lv_olafDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[5].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[5].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[5].lv_olafDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[6].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[6].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[6].lv_olafDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[7].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[7].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[7].lv_olafDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[8].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[8].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[8].lv_olafDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[9].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[9].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[9].lv_olafDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[10].lv_erikDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[10].lv_baleogDeathTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsRespawnTimerExpires, libGDHL_gv_lostVikingsPlayer[10].lv_olafDeathTimer);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Spawn

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsSpawn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_lVPlayer;

    unit lv_lVController;

    int lv_itLostVikingsPlayer;



    // Automatic Variable Declarations

    unitgroup auto9ACC1330_g;

    int auto9ACC1330_u;

    unit auto9ACC1330_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnitCreatedUnit()) == "HeroLostVikingsController"))) {

            return false;

        }



        if (!((UnitGetOwner(EventUnitCreatedUnit()) >= 1))) {

            return false;

        }



        if (!((UnitGetOwner(EventUnitCreatedUnit()) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lVPlayer = UnitGetOwner(EventUnitCreatedUnit());

    lv_lVController = EventUnitCreatedUnit();

    AIRemovePlayerUnit(lv_lVController);

    UISetSelectionTypeEnabled(PlayerGroupSingle(lv_lVPlayer), c_localSelectionTypeUnknown, true);

    UISetDragSelectEnabled(PlayerGroupSingle(lv_lVPlayer), true);

    UISetFrameVisible(PlayerGroupSingle(lv_lVPlayer), c_syncFrameTypeControlGroupPanel, true);

    UnitControlGroupClear(lv_lVPlayer, 1);

    UnitControlGroupClear(lv_lVPlayer, 2);

    UnitControlGroupClear(lv_lVPlayer, 3);

    UnitControlGroupClear(lv_lVPlayer, 4);

    libNtve_gf_CreateUnitsAtPoint2(1, "HeroOlaf", 0, lv_lVPlayer, PointWithOffsetPolar(UnitGetPosition(lv_lVController), 1.5, 240.0), null);

    libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Add, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

    UnitSetFacing(UnitLastCreated(), PointGetFacing(libGame_gv_players[lv_lVPlayer].lv_spawnPoint), 0.0);

    UnitGroupAdd(libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup, UnitLastCreated());

    AIAddPlayerUnit(UnitLastCreated());

    UnitControlGroupAddUnit(lv_lVPlayer, 1, UnitLastCreated());

    PathCreateForUnit(libCore_gv_playerGroupFromPlayer[lv_lVPlayer], UnitLastCreated());

    PathSetVisible(PathLastCreated(), c_pathLocationWorld, false);

    PathSetAbilClassFilter(PathLastCreated(), c_classIdCAbilEffectInstant, c_abilClassFilterExcluded);

    PathSetAbilClassFilter(PathLastCreated(), c_classIdCAbilEffectTarget, c_abilClassFilterExcluded);

    PathSetAbilClassFilter(PathLastCreated(), c_classIdCAbilArmMagazine, c_abilClassFilterExcluded);

    PathSetLineTexture(PathLastCreated(), c_pathLocationAll, "Assets\\Textures\\storm_waypointline.dds");

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafPath = PathLastCreated();

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olaf = UnitLastCreated();

    libNtve_gf_CreateUnitsAtPoint2(1, "HeroBaleog", 0, lv_lVPlayer, PointWithOffsetPolar(UnitGetPosition(lv_lVController), 1.5, 120.0), null);

    libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Add, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

    UnitSetFacing(UnitLastCreated(), PointGetFacing(libGame_gv_players[lv_lVPlayer].lv_spawnPoint), 0.0);

    UnitGroupAdd(libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup, UnitLastCreated());

    AIAddPlayerUnit(UnitLastCreated());

    UnitControlGroupAddUnit(lv_lVPlayer, 2, UnitLastCreated());

    PathCreateForUnit(libCore_gv_playerGroupFromPlayer[lv_lVPlayer], UnitLastCreated());

    PathSetVisible(PathLastCreated(), c_pathLocationWorld, false);

    PathSetAbilClassFilter(PathLastCreated(), c_classIdCAbilEffectInstant, c_abilClassFilterExcluded);

    PathSetAbilClassFilter(PathLastCreated(), c_classIdCAbilEffectTarget, c_abilClassFilterExcluded);

    PathSetAbilClassFilter(PathLastCreated(), c_classIdCAbilArmMagazine, c_abilClassFilterExcluded);

    PathSetLineTexture(PathLastCreated(), c_pathLocationAll, "Assets\\Textures\\storm_waypointline.dds");

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogPath = PathLastCreated();

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleog = UnitLastCreated();

    libNtve_gf_CreateUnitsAtPoint2(1, "HeroErik", 0, lv_lVPlayer, PointWithOffsetPolar(UnitGetPosition(lv_lVController), 1.5, 0.0), null);

    libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Add, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

    UnitSetFacing(UnitLastCreated(), PointGetFacing(libGame_gv_players[lv_lVPlayer].lv_spawnPoint), 0.0);

    UnitGroupAdd(libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup, UnitLastCreated());

    AIAddPlayerUnit(UnitLastCreated());

    UnitControlGroupAddUnit(lv_lVPlayer, 3, UnitLastCreated());

    UnitControlGroupAddUnits(lv_lVPlayer, 4, libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup);

    UnitControlGroupRemoveUnit(lv_lVPlayer, 4, libGame_gv_players[lv_lVPlayer].lv_heroUnit);

    PathCreateForUnit(libCore_gv_playerGroupFromPlayer[lv_lVPlayer], UnitLastCreated());

    PathSetVisible(PathLastCreated(), c_pathLocationWorld, false);

    PathSetAbilClassFilter(PathLastCreated(), c_classIdCAbilEffectInstant, c_abilClassFilterExcluded);

    PathSetAbilClassFilter(PathLastCreated(), c_classIdCAbilEffectTarget, c_abilClassFilterExcluded);

    PathSetAbilClassFilter(PathLastCreated(), c_classIdCAbilArmMagazine, c_abilClassFilterExcluded);

    PathSetLineTexture(PathLastCreated(), c_pathLocationAll, "Assets\\Textures\\storm_waypointline.dds");

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikPath = PathLastCreated();

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erik = UnitLastCreated();

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_player = lv_lVPlayer;

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_centerViking = UnitLastCreated();

    libGame_gv_players[lv_lVPlayer].lv_cameraCurrentTargetGroup = null;

    libGame_gv_players[lv_lVPlayer].lv_cameraPlayerUnitGroupToFocusOn = null;

    libGame_gf_CameraUpdateCameraForPlayer(lv_lVPlayer);

    libUIUI_gf_UIUnitStatusFramesHookupUnitStatusFramesForPlayer(lv_lVPlayer);

    libUIUI_gf_UIPartyFrameSetVikingFrame(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olaf, lv_lVPlayer);

    libUIUI_gf_UIPartyFrameSetVikingFrame(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleog, lv_lVPlayer);

    libUIUI_gf_UIPartyFrameSetVikingFrame(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erik, lv_lVPlayer);

    libUIUI_gf_UIHeroTrackerArrowHookupTrackerArrowsForPlayer(lv_lVPlayer);

    libGDHL_gf_LostVikingsUISetupUIForPlayer(lv_lVPlayer);

    libGDHL_gf_LostVikingsHeroConsoleUnitStatusBarsSetUnitForBars(lv_lVPlayer);

    libGame_gv_players[lv_lVPlayer].lv_soundDeathAlertPrefix = "UI_HeroDeath_LostVikings_";

    auto9ACC1330_g = libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup;

    auto9ACC1330_u = UnitGroupCount(auto9ACC1330_g, c_unitCountAll);

    for (;; auto9ACC1330_u -= 1) {

        auto9ACC1330_var = UnitGroupUnitFromEnd(auto9ACC1330_g, auto9ACC1330_u);

        if (auto9ACC1330_var == null) { break; }

        libNtve_gf_SendActorMessageToUnit(auto9ACC1330_var, "Signal Respawn");

        UnitGroupSelect(libNtve_gf_ConvertUnitToUnitGroup(auto9ACC1330_var), lv_lVPlayer, true);

    }

    UnitGroupSelect(libNtve_gf_ConvertUnitToUnitGroup(libGame_gv_players[lv_lVPlayer].lv_heroUnit), lv_lVPlayer, false);

    TriggerEnable(libGDHL_gt_HeroLostVikingsUnitControllerUpdate, true);

    TriggerEnable(libGDHL_gt_HeroLostVikingsCheckpointReachedTimerCountdown, true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsSpawn_Init () {

    libGDHL_gt_HeroLostVikingsSpawn = TriggerCreate("libGDHL_gt_HeroLostVikingsSpawn_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsSpawn, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroLostVikingsSpawn, null, null, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Debug Swap

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsDebugSwap_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_lVPlayer;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lVPlayer = libGame_gf_DebugHeroSwappedPlayer();

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsDebugSwap_Init () {

    libGDHL_gt_HeroLostVikingsDebugSwap = TriggerCreate("libGDHL_gt_HeroLostVikingsDebugSwap_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsDebugSwap, false);

    libGame_gf_DebugHeroSwapped(libGDHL_gt_HeroLostVikingsDebugSwap);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Viking Dies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsVikingDies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_deadUnit;

    unitgroup lv_vikingUnitGroupIgnoringController;

    int lv_lVPlayer;

    int lv_killingPlayer;

    playergroup lv_killingTeamGroup;

    playergroup lv_killingGroup;

    string lv_downedBehavior;

    string lv_vikingDeathIcon;

    timer lv_vikingDeathTimer;

    bool lv_allVikingsDown;

    int lv_itViking;

    unit lv_itLivingViking;

    unitgroup lv_selectedUnits;

    unit lv_nearestViking;



    // Automatic Variable Declarations

    string auto643616C6_val;

    unitgroup auto78C4D867_g;

    int auto78C4D867_u;

    unit auto78C4D867_var;

    unitgroup auto0B0A4470_g;

    int auto0B0A4470_u;

    unit auto0B0A4470_var;

    unitgroup autoF6B19C6F_g;

    int autoF6B19C6F_u;

    const int auto48403D2E_ae = libUIUI_gv_uI_MaxHeroGroupStatusFrames;

    const int auto48403D2E_ai = 1;

    string auto825968C9_val;

    unitgroup auto973DB6EB_g;

    int auto973DB6EB_u;

    unit auto973DB6EB_var;



    // Variable Initialization

    lv_deadUnit = EventUnit();

    lv_vikingUnitGroupIgnoringController = UnitGroupEmpty();

    lv_lVPlayer = EventPlayer();

    lv_killingPlayer = libNtve_gf_KillingPlayer();

    lv_killingTeamGroup = PlayerGroupEmpty();

    lv_killingGroup = PlayerGroupEmpty();

    lv_vikingDeathTimer = TimerCreate();

    lv_allVikingsDown = true;

    lv_selectedUnits = UnitGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[UnitGetOwner(lv_deadUnit)].lv_heroUnit) != "HeroAbathur"))) {

            return false;

        }



        if (!(((UnitGetType(lv_deadUnit) == "HeroBaleog") || (UnitGetType(lv_deadUnit) == "HeroOlaf") || (UnitGetType(lv_deadUnit) == "HeroErik")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_killingPlayer = libNtve_gf_KillingPlayer();

    libGame_gf_SendEventHeroKilled(lv_killingPlayer, lv_deadUnit);

    auto643616C6_val = UnitGetType(lv_deadUnit);

    if (auto643616C6_val == "HeroErik") {

        lv_downedBehavior = "LostVikingsErikDowned";

        lv_vikingDeathTimer = libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikDeathTimer;

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_erikDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitDead");

        libNtve_gf_CreateUnitsAtPoint2(1, "EriksGravestone", 0, lv_lVPlayer, PointWithOffsetPolar(libGame_gv_players[lv_lVPlayer].lv_spawnPoint, 1.5, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_respawnPolarOffset), lv_deadUnit);

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone = UnitLastCreated();

        UnitControlGroupAddUnit(lv_lVPlayer, 3, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone);

        UnitControlGroupAddUnit(lv_lVPlayer, 4, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone);

        libGDHL_gf_VikingDownGiveCarryBehaviorsToGravestone(lv_deadUnit, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikGravestone);

    }

    else if (auto643616C6_val == "HeroBaleog") {

        lv_downedBehavior = "LostVikingsBaleogDowned";

        lv_vikingDeathTimer = libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogDeathTimer;

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_baleogDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitDead");

        libNtve_gf_CreateUnitsAtPoint2(1, "BaleogsGravestone", 0, lv_lVPlayer, PointWithOffsetPolar(libGame_gv_players[lv_lVPlayer].lv_spawnPoint, 1.5, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_respawnPolarOffset), lv_deadUnit);

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone = UnitLastCreated();

        UnitControlGroupAddUnit(lv_lVPlayer, 2, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone);

        UnitControlGroupAddUnit(lv_lVPlayer, 4, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone);

        libGDHL_gf_VikingDownGiveCarryBehaviorsToGravestone(lv_deadUnit, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogGravestone);

    }

    else if (auto643616C6_val == "HeroOlaf") {

        lv_downedBehavior = "LostVikingsOlafDowned";

        lv_vikingDeathTimer = libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafDeathTimer;

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_olafDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitDead");

        libNtve_gf_CreateUnitsAtPoint2(1, "OlafsGravestone", 0, lv_lVPlayer, PointWithOffsetPolar(libGame_gv_players[lv_lVPlayer].lv_spawnPoint, 1.5, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_respawnPolarOffset), lv_deadUnit);

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone = UnitLastCreated();

        UnitControlGroupAddUnit(lv_lVPlayer, 1, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone);

        UnitControlGroupAddUnit(lv_lVPlayer, 4, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone);

        libGDHL_gf_VikingDownGiveCarryBehaviorsToGravestone(lv_deadUnit, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafGravestone);

    }

    else {

    }

    auto78C4D867_g = UnitGroupSelected(lv_lVPlayer);

    auto78C4D867_u = UnitGroupCount(auto78C4D867_g, c_unitCountAll);

    for (;; auto78C4D867_u -= 1) {

        auto78C4D867_var = UnitGroupUnitFromEnd(auto78C4D867_g, auto78C4D867_u);

        if (auto78C4D867_var == null) { break; }

        if ((UnitIsAlive(auto78C4D867_var) == true) && ((auto78C4D867_var == libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olaf) || (auto78C4D867_var == libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erik) || (auto78C4D867_var == libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleog) || (auto78C4D867_var == libGame_gv_players[lv_lVPlayer].lv_activeVehicle))) {

            if ((lv_nearestViking == null)) {

                lv_nearestViking = auto78C4D867_var;

            }

            else {

                if ((DistanceBetweenPoints(UnitGetPosition(auto78C4D867_var), CameraGetTarget(lv_lVPlayer)) < DistanceBetweenPoints(UnitGetPosition(lv_nearestViking), CameraGetTarget(lv_lVPlayer)))) {

                    lv_nearestViking = auto78C4D867_var;

                }



            }

            libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_centerViking = lv_nearestViking;

        }

        else {

            if ((UnitIsSelected(lv_deadUnit, lv_lVPlayer) == true)) {

                UnitSelect(UnitLastCreated(), lv_lVPlayer, true);

            }



        }

    }

    auto0B0A4470_g = libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup;

    auto0B0A4470_u = UnitGroupCount(auto0B0A4470_g, c_unitCountAll);

    for (;; auto0B0A4470_u -= 1) {

        auto0B0A4470_var = UnitGroupUnitFromEnd(auto0B0A4470_g, auto0B0A4470_u);

        if (auto0B0A4470_var == null) { break; }

        if ((libNtve_gf_UnitGroupIsDead(libNtve_gf_ConvertUnitToUnitGroup(auto0B0A4470_var)) == false) && (UnitGetType(auto0B0A4470_var) != "HeroLostVikingsController")) {

            lv_allVikingsDown = false;

        }



    }

    if ((lv_allVikingsDown == false)) {

        UnitGroupAddUnitGroup(lv_vikingUnitGroupIgnoringController, libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup);

        UnitGroupRemove(lv_vikingUnitGroupIgnoringController, libGame_gv_players[lv_lVPlayer].lv_heroUnit);

        if ((UnitGroupCount(lv_vikingUnitGroupIgnoringController, c_unitCountAlive) == 1)) {

            autoF6B19C6F_g = lv_vikingUnitGroupIgnoringController;

            autoF6B19C6F_u = UnitGroupCount(autoF6B19C6F_g, c_unitCountAll);

            for (;; autoF6B19C6F_u -= 1) {

                lv_itLivingViking = UnitGroupUnitFromEnd(autoF6B19C6F_g, autoF6B19C6F_u);

                if (lv_itLivingViking == null) { break; }

                if ((UnitIsAlive(lv_itLivingViking) == true)) {

                    libGame_gv_players[lv_lVPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_itLivingViking);

                    libGame_gf_CameraUpdateCameraForPlayer(lv_lVPlayer);

                }



            }

        }



    }



    lv_itViking = 1;

    for ( ; ( (auto48403D2E_ai >= 0 && lv_itViking <= auto48403D2E_ae) || (auto48403D2E_ai < 0 && lv_itViking >= auto48403D2E_ae) ) ; lv_itViking += auto48403D2E_ai ) {

        if ((libUIUI_gv_uIHeroTrackerArrows.lv_unit[lv_itViking] == lv_deadUnit)) {

            auto825968C9_val = UnitGetType(lv_deadUnit);

            if (auto825968C9_val == "HeroErik") {

                libNtve_gf_SetDialogItemImage(libUIUI_gv_uIHeroTrackerArrows.lv_portraitImage[lv_itViking], "Assets\\Textures\\storm_ui_hud_heromechanic_vikings_dead_erik.dds", libCore_gv_playerGroupFromPlayer[lv_lVPlayer]);

            }

            else if (auto825968C9_val == "HeroOlaf") {

                libNtve_gf_SetDialogItemImage(libUIUI_gv_uIHeroTrackerArrows.lv_portraitImage[lv_itViking], "Assets\\Textures\\storm_ui_hud_heromechanic_vikings_dead_olaf.dds", libCore_gv_playerGroupFromPlayer[lv_lVPlayer]);

            }

            else if (auto825968C9_val == "HeroBaleog") {

                libNtve_gf_SetDialogItemImage(libUIUI_gv_uIHeroTrackerArrows.lv_portraitImage[lv_itViking], "Assets\\Textures\\storm_ui_hud_heromechanic_vikings_dead_baleog.dds", libCore_gv_playerGroupFromPlayer[lv_lVPlayer]);

            }

            else {

            }

            break;

        }



    }

    UnitBehaviorAdd(lv_deadUnit, "Dead", lv_deadUnit, 1);

    UnitBehaviorAdd(lv_deadUnit, "DeadMechanics", lv_deadUnit, 1);

    if ((TimerGetDuration(lv_vikingDeathTimer) > 0.0)) {

        UnitBehaviorSetDuration(lv_deadUnit, "Dead", TimerGetRemaining(lv_vikingDeathTimer));

    }

    else {

        UnitSetPropertyFixed(lv_deadUnit, c_unitPropLifePercent, 100.0);

        UnitBehaviorSetDuration(lv_deadUnit, "Dead", 0.0);

    }

    auto973DB6EB_g = libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup;

    auto973DB6EB_u = UnitGroupCount(auto973DB6EB_g, c_unitCountAll);

    for (;; auto973DB6EB_u -= 1) {

        auto973DB6EB_var = UnitGroupUnitFromEnd(auto973DB6EB_g, auto973DB6EB_u);

        if (auto973DB6EB_var == null) { break; }

        UnitBehaviorAdd(auto973DB6EB_var, lv_downedBehavior, lv_deadUnit, 1);

    }

    UnitBehaviorAdd(libGame_gv_players[lv_lVPlayer].lv_heroUnit, lv_downedBehavior, lv_deadUnit, 1);

    libCore_gf_ClearAllNonpermanentBehaviorsonUnit(lv_deadUnit);

    if ((lv_allVikingsDown == true)) {

        libGame_gv_players[lv_lVPlayer].lv_isDead = true;

        libUIUI_gf_FullscreenOverlaysShowHideDeathOverlay(true, lv_lVPlayer);

        libGame_gf_HeroDeathCheckForTeamDominatedAnnouncement(libGame_gf_TeamNumberOfPlayer(lv_lVPlayer));

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_allDeathStatusFrame, libCore_gv_playerGroupFromPlayer[lv_lVPlayer], "UnitDead");

        libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Add, libGDHL_gv_aIHeroDelegateTokenValueAnyVikingAliveValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

        libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueAnyVikingAliveValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

    }



    lv_vikingDeathIcon = (CatalogFieldValueGet(c_gameCatalogActor, UnitGetType(lv_deadUnit), "HeroIcon", 0));

    libUIUI_gf_UIPartyFrameVikingDies(lv_lVPlayer, lv_deadUnit, lv_vikingDeathTimer);

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_respawnPolarOffset += 120.0;

    if ((libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_checkpointReachedCairn != null)) {

        UnitCreateEffectPoint(lv_deadUnit, "LostVikingsPlayAgainTeleport", PointWithOffsetPolar(UnitGetPosition(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_checkpointReachedCairn), 2.5, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_respawnPolarOffset));

        Wait(0.0625, c_timeGame);

    }

    else {

        libGDHL_gf_VikingDownStartRespawnTimer(lv_deadUnit, lv_vikingDeathTimer, false, 0.0, UnitGetType(lv_deadUnit));

        Wait(0.5, c_timeGame);

        if ((libNtve_gf_UnitGroupIsDead(libNtve_gf_ConvertUnitToUnitGroup(lv_deadUnit)) == true)) {

            UnitSetPosition(lv_deadUnit, PointWithOffsetPolar(libGame_gv_players[lv_lVPlayer].lv_spawnPoint, 1.5, libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_respawnPolarOffset), false);

        }



    }

    lv_selectedUnits = UnitGroupSelected(lv_lVPlayer);

    if ((UnitGroupCount(lv_selectedUnits, c_unitCountAlive) <= 0)) {

        if ((libGame_gv_players[lv_lVPlayer].lv_activeVehicle != null)) {

            UnitSelect(libGame_gv_players[lv_lVPlayer].lv_activeVehicle, lv_lVPlayer, true);

        }

        else {

            UnitSelect(libGame_gv_players[lv_lVPlayer].lv_heroUnit, lv_lVPlayer, true);

        }

    }



    libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Add, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

    libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsVikingDies_Init () {

    libGDHL_gt_HeroLostVikingsVikingDies = TriggerCreate("libGDHL_gt_HeroLostVikingsVikingDies_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsVikingDies, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroLostVikingsVikingDies, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Viking Removed

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsVikingRemoved_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_lVPlayer;



    // Automatic Variable Declarations

    string autoE2C695E8_val;



    // Variable Initialization

    lv_unit = EventUnit();

    lv_lVPlayer = EventPlayer();



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(lv_unit) == "HeroBaleog") || (UnitGetType(lv_unit) == "HeroOlaf") || (UnitGetType(lv_unit) == "HeroErik")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoE2C695E8_val = UnitGetType(lv_unit);

    if (autoE2C695E8_val == "HeroErik") {

        PathDestroy(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikPath);

        if ((TimerIsPaused(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikDeathTimer) == true)) {

            libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

        }

        else {

            libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

        }

        libNtve_gf_StopTimer(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikDeathTimer);

    }

    else if (autoE2C695E8_val == "HeroBaleog") {

        PathDestroy(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogPath);

        if ((TimerIsPaused(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogDeathTimer) == true)) {

            libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

        }

        else {

            libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

        }

        libNtve_gf_StopTimer(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogDeathTimer);

    }

    else if (autoE2C695E8_val == "HeroOlaf") {

        PathDestroy(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafPath);

        if ((TimerIsPaused(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafDeathTimer) == true)) {

            libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

        }

        else {

            libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueVikingValue, libGame_gf_TeamNumberOfPlayer(lv_lVPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

        }

        libNtve_gf_StopTimer(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafDeathTimer);

    }

    else {

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsVikingRemoved_Init () {

    libGDHL_gt_HeroLostVikingsVikingRemoved = TriggerCreate("libGDHL_gt_HeroLostVikingsVikingRemoved_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsVikingRemoved, false);

    TriggerAddEventUnitRemoved(libGDHL_gt_HeroLostVikingsVikingRemoved, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Under Attack Ping

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsUnderAttackPing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    string autoD6AE5AC0_val;



    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((lv_player > 0))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroLostVikingsController"))) {

            return false;

        }



        if (!((UnitIsAlive(lv_unit) == true))) {

            return false;

        }



        if (!((DistanceBetweenPoints(UnitGetPosition(lv_unit), CameraGetTarget(lv_player)) >= libGDHL_gv_data_LostVikingsUIWarningCameraDistance_C))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_CreatePingFacingAngleWithType(libCore_gv_playerGroupFromPlayer[lv_player], "AssistMePingMinimap", UnitGetPosition(lv_unit), Color(100.00, 100.00, 100.00), 2.0, 270.0, -1, -1);

    autoD6AE5AC0_val = UnitGetType(lv_unit);

    if (autoD6AE5AC0_val == "HeroErik") {

        SoundPlayForPlayer(SoundLink("ErikBase_AI_Caution", c_soundIndexAny), lv_player, libCore_gv_playerGroupFromPlayer[lv_player], 100.0, 0.0);

    }

    else if (autoD6AE5AC0_val == "HeroBaleog") {

        SoundPlayForPlayer(SoundLink("BaleogBase_AI_Caution", c_soundIndexAny), lv_player, libCore_gv_playerGroupFromPlayer[lv_player], 100.0, 0.0);

    }

    else if (autoD6AE5AC0_val == "HeroOlaf") {

        SoundPlayForPlayer(SoundLink("OlafBase_AI_Caution", c_soundIndexAny), lv_player, libCore_gv_playerGroupFromPlayer[lv_player], 100.0, 0.0);

    }

    else {

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsUnderAttackPing_Init () {

    libGDHL_gt_HeroLostVikingsUnderAttackPing = TriggerCreate("libGDHL_gt_HeroLostVikingsUnderAttackPing_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsUnderAttackPing, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLostVikingsUnderAttackPing, null, "LostVikingsAttackedPingResponse", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Under Attack UI

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsUnderAttackUI_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_sourcePlayer;

    unit lv_sourceUnit;



    // Automatic Variable Declarations

    unit auto426DF74E_val;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_sourcePlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerSource);

    lv_sourceUnit = EventPlayerEffectUsedUnit(c_effectUnitSource);

    if (((UnitGetType(libGame_gv_players[lv_sourcePlayer].lv_heroUnit) != "HeroLostVikingsController") || (UnitIsAlive(lv_sourceUnit) == false) || (DistanceBetweenPoints(UnitGetPosition(lv_sourceUnit), CameraGetTarget(lv_sourcePlayer)) < libGDHL_gv_data_LostVikingsUIWarningCameraDistance_C))) {

        return true;

    }



    auto426DF74E_val = lv_sourceUnit;

    if (auto426DF74E_val == libGDHL_gv_lostVikingsPlayer[lv_sourcePlayer].lv_olaf) {

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_olafUnitStatusFrame, libCore_gv_playerGroupFromPlayer[lv_sourcePlayer], "HPWarningFlash");

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_olafUnselectedIconImage, libCore_gv_playerGroupFromPlayer[lv_sourcePlayer], "HPWarningFlash");

    }

    else if (auto426DF74E_val == libGDHL_gv_lostVikingsPlayer[lv_sourcePlayer].lv_baleog) {

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_baleogUnitStatusFrame, libCore_gv_playerGroupFromPlayer[lv_sourcePlayer], "HPWarningFlash");

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_baleogUnselectedIconImage, libCore_gv_playerGroupFromPlayer[lv_sourcePlayer], "HPWarningFlash");

    }

    else if (auto426DF74E_val == libGDHL_gv_lostVikingsPlayer[lv_sourcePlayer].lv_erik) {

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_erikUnitStatusFrame, libCore_gv_playerGroupFromPlayer[lv_sourcePlayer], "HPWarningFlash");

        DialogControlSendAnimationEvent(libGDHL_gv_lostVikingsUI.lv_erikUnselectedIconImage, libCore_gv_playerGroupFromPlayer[lv_sourcePlayer], "HPWarningFlash");

    }

    else {

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsUnderAttackUI_Init () {

    libGDHL_gt_HeroLostVikingsUnderAttackUI = TriggerCreate("libGDHL_gt_HeroLostVikingsUnderAttackUI_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsUnderAttackUI, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLostVikingsUnderAttackUI, c_playerAny, "LostVikingsDamageResponseDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - XP Gain

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsXPGain_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    unitgroup lv_vikingGroup;

    int lv_lVPlayer;

    unit lv_lVController;



    // Automatic Variable Declarations

    unitgroup auto147025F9_g;

    int auto147025F9_u;

    unit auto147025F9_var;



    // Variable Initialization

    lv_unit = EventUnit();

    lv_vikingGroup = UnitGroupEmpty();

    lv_lVPlayer = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "HeroLostVikingsController"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lVPlayer = UnitGetOwner(lv_unit);

    auto147025F9_g = libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup;

    auto147025F9_u = UnitGroupCount(auto147025F9_g, c_unitCountAll);

    for (;; auto147025F9_u -= 1) {

        auto147025F9_var = UnitGroupUnitFromEnd(auto147025F9_g, auto147025F9_u);

        if (auto147025F9_var == null) { break; }

        if ((UnitGetType(auto147025F9_var) != "HeroLostVikingsController")) {

            UnitXPAddXP(auto147025F9_var, null, EventUnitXPDelta());

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsXPGain_Init () {

    libGDHL_gt_HeroLostVikingsXPGain = TriggerCreate("libGDHL_gt_HeroLostVikingsXPGain_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsXPGain, false);

    TriggerAddEventUnitGainExperience(libGDHL_gt_HeroLostVikingsXPGain, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Behavior Talent Gained

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsBehaviorTalentGained_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_lVPlayer;

    unit lv_lVController;

    int lv_currentTier;

    int lv_talentIndexSelected;

    int lv_itPlayer;

    int lv_itBehavior;

    int lv_heroIndex;

    unit lv_heroUnit;

    int lv_abilityIndex;

    int lv_itTier;

    int lv_chosenTalentIndex;



    // Automatic Variable Declarations

    const int autoBE5385BE_ae = 1;

    const int autoBE5385BE_ai = -1;

    int auto4652AE1C_ae;

    const int auto4652AE1C_ai = 1;

    unitgroup autoE3580F03_g;

    int autoE3580F03_u;

    unit autoE3580F03_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnit) == "HeroLostVikingsController"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lVPlayer = libGame_gf_HeroGainTalentPlayer();

    lv_itTier = libCore_gv_talents_MaxTiers_C;

    for ( ; ( (autoBE5385BE_ai >= 0 && lv_itTier <= autoBE5385BE_ae) || (autoBE5385BE_ai < 0 && lv_itTier >= autoBE5385BE_ae) ) ; lv_itTier += autoBE5385BE_ai ) {

        if ((libGame_gv_talents_TalentChoices[lv_lVPlayer][lv_itTier].lv_selection != 0)) {

            lv_currentTier = lv_itTier;

            break;

        }



    }

    lv_talentIndexSelected = libGame_gv_talents_TalentChoices[lv_lVPlayer][lv_currentTier].lv_selection;

    auto4652AE1C_ae = libGame_gv_talents_TalentChoices[lv_lVPlayer][lv_currentTier].lv_talentData[lv_talentIndexSelected].lv_behaviorCount;

    lv_itBehavior = 1;

    for ( ; ( (auto4652AE1C_ai >= 0 && lv_itBehavior <= auto4652AE1C_ae) || (auto4652AE1C_ai < 0 && lv_itBehavior >= auto4652AE1C_ae) ) ; lv_itBehavior += auto4652AE1C_ai ) {

        autoE3580F03_g = libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup;

        autoE3580F03_u = UnitGroupCount(autoE3580F03_g, c_unitCountAll);

        for (;; autoE3580F03_u -= 1) {

            autoE3580F03_var = UnitGroupUnitFromEnd(autoE3580F03_g, autoE3580F03_u);

            if (autoE3580F03_var == null) { break; }

            UnitBehaviorAdd(autoE3580F03_var, libGame_gv_talents_TalentChoices[lv_lVPlayer][lv_currentTier].lv_talentData[lv_talentIndexSelected].lv_behaviors[lv_itBehavior], autoE3580F03_var, 1);

        }

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsBehaviorTalentGained_Init () {

    libGDHL_gt_HeroLostVikingsBehaviorTalentGained = TriggerCreate("libGDHL_gt_HeroLostVikingsBehaviorTalentGained_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsBehaviorTalentGained, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroLostVikingsBehaviorTalentGained);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Unit Controller Update

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsUnitControllerUpdate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_itViking;

    int lv_itLostVikingsPlayer;



    // Automatic Variable Declarations

    int autoEF8275DB_ae;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    autoEF8275DB_ae = libCore_gv_bALMaxPlayers;

    lv_itLostVikingsPlayer = 1;

    for ( ; lv_itLostVikingsPlayer <= autoEF8275DB_ae ; lv_itLostVikingsPlayer += 1 ) {

        if ((libGDHL_gv_lostVikingsPlayer[lv_itLostVikingsPlayer].lv_centerViking != null)) {

            if ((UnitGetType(libGame_gv_players[lv_itLostVikingsPlayer].lv_heroUnit) == "HeroLostVikingsController")) {

                if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_itLostVikingsPlayer) == false)) {

                    if ((UnitIsValid(libGDHL_gv_lostVikingsPlayer[lv_itLostVikingsPlayer].lv_boat) == true)) {

                        UnitSetPosition(libGame_gv_players[lv_itLostVikingsPlayer].lv_heroUnit, UnitGetPosition(libGDHL_gv_lostVikingsPlayer[lv_itLostVikingsPlayer].lv_boat), false);

                        continue;

                    }



                    if ((UnitIsAlive(libGDHL_gv_lostVikingsPlayer[lv_itLostVikingsPlayer].lv_centerViking) == false)) {

                    }



                }



                if ((DistanceBetweenPoints(UnitGetPosition(libGDHL_gv_lostVikingsPlayer[lv_itLostVikingsPlayer].lv_centerViking), UnitGetPosition(libGame_gv_players[lv_itLostVikingsPlayer].lv_heroUnit)) >= 4.0)) {

                    UnitSetPosition(libGame_gv_players[lv_itLostVikingsPlayer].lv_heroUnit, UnitGetPosition(libGDHL_gv_lostVikingsPlayer[lv_itLostVikingsPlayer].lv_centerViking), false);

                }

                else {

                    UnitSetPosition(libGame_gv_players[lv_itLostVikingsPlayer].lv_heroUnit, UnitGetPosition(libGDHL_gv_lostVikingsPlayer[lv_itLostVikingsPlayer].lv_centerViking), true);

                }

            }

            else {

                libGDHL_gv_lostVikingsPlayer[lv_itLostVikingsPlayer].lv_centerViking = null;

            }

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsUnitControllerUpdate_Init () {

    libGDHL_gt_HeroLostVikingsUnitControllerUpdate = TriggerCreate("libGDHL_gt_HeroLostVikingsUnitControllerUpdate_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsUnitControllerUpdate, false);

    TriggerAddEventTimePeriodic(libGDHL_gt_HeroLostVikingsUnitControllerUpdate, 0.0625, c_timeGame);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Moonwell Redistribution

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsMoonwellRedistribution_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    unit lv_moonwell;

    unit lv_itHeroUnit;



    // Automatic Variable Declarations

    unitgroup auto26A09CC5_g;

    int auto26A09CC5_u;



    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_moonwell = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(lv_unit) == "HeroOlaf") || (UnitGetType(lv_unit) == "HeroErik") || (UnitGetType(lv_unit) == "HeroBaleog")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto26A09CC5_g = libGame_gv_players[UnitGetOwner(lv_unit)].lv_heroUnitGroup;

    auto26A09CC5_u = UnitGroupCount(auto26A09CC5_g, c_unitCountAll);

    for (;; auto26A09CC5_u -= 1) {

        lv_itHeroUnit = UnitGroupUnitFromEnd(auto26A09CC5_g, auto26A09CC5_u);

        if (lv_itHeroUnit == null) { break; }

        if ((lv_itHeroUnit == libGame_gv_players[UnitGetOwner(lv_unit)].lv_heroUnit)) {

            UnitBehaviorAdd(lv_itHeroUnit, "HealingFountainCooldown", lv_moonwell, 1);

            continue;

        }



        if ((lv_itHeroUnit != lv_unit)) {

            UnitBehaviorAdd(lv_itHeroUnit, "HealingFountainCooldown", lv_moonwell, 1);

            UnitCreateEffectUnit(lv_itHeroUnit, "FountainApplySet", lv_itHeroUnit);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsMoonwellRedistribution_Init () {

    libGDHL_gt_HeroLostVikingsMoonwellRedistribution = TriggerCreate("libGDHL_gt_HeroLostVikingsMoonwellRedistribution_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsMoonwellRedistribution, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLostVikingsMoonwellRedistribution, c_playerAny, "MoonwellDrinkStartingSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Viking Enters Stasis

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsVikingEntersStasis_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_vikingsPlayer;

    unitgroup lv_vikingsUnitGroup;

    unit lv_vikingsUnit;



    // Automatic Variable Declarations

    unitgroup autoA22E935F_g;

    int autoA22E935F_u;



    // Variable Initialization

    lv_vikingsUnitGroup = UnitGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((UnitIsAlive(EventUnit()) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_vikingsPlayer = UnitGetOwner(EventUnit());

    if ((lv_vikingsPlayer >= 1) && (lv_vikingsPlayer <= libCore_gv_bALMaxPlayers)) {

        if ((libGDHL_gv_lostVikingsPlayer[lv_vikingsPlayer].lv_boat == EventUnit())) {

            PlayerPauseAllCooldowns(lv_vikingsPlayer, true);

        }

        else {

            UnitGroupAddUnitGroup(lv_vikingsUnitGroup, libGame_gv_players[lv_vikingsPlayer].lv_heroUnitGroup);

            UnitGroupRemove(lv_vikingsUnitGroup, libGame_gv_players[lv_vikingsPlayer].lv_heroUnit);

            autoA22E935F_g = lv_vikingsUnitGroup;

            autoA22E935F_u = UnitGroupCount(autoA22E935F_g, c_unitCountAll);

            for (;; autoA22E935F_u -= 1) {

                lv_vikingsUnit = UnitGroupUnitFromEnd(autoA22E935F_g, autoA22E935F_u);

                if (lv_vikingsUnit == null) { break; }

                if ((libNtve_gf_UnitGroupIsDead(libNtve_gf_ConvertUnitToUnitGroup(lv_vikingsUnit)) == false) && ((UnitFilterMatch(lv_vikingsUnit, lv_vikingsPlayer, UnitFilter(0, 0, 0, (1 << (c_targetFilterStasis - 32)))) == true) || (UnitHasBehavior2(lv_vikingsUnit, "LostVikingsLongboatRaidPoofDisabler") == true) || (UnitHasBehavior2(lv_vikingsUnit, "LongboatRaidHideVikings") == true))) {

                    return true;

                }



            }

            PlayerPauseAllCooldowns(lv_vikingsPlayer, true);

        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsVikingEntersStasis_Init () {

    libGDHL_gt_HeroLostVikingsVikingEntersStasis = TriggerCreate("libGDHL_gt_HeroLostVikingsVikingEntersStasis_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsVikingEntersStasis, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLostVikingsVikingEntersStasis, null, "LostVikingsStasisController", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Vikings Leaves Stasis

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsVikingsLeavesStasis_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_vikingsPlayer;

    unitgroup lv_vikingsUnitGroup;

    unit lv_vikingsUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_vikingsUnitGroup = UnitGroupEmpty();



    // Actions

    if (!runActions) {

        return true;

    }



    lv_vikingsPlayer = UnitGetOwner(EventUnit());

    PlayerPauseAllCooldowns(lv_vikingsPlayer, false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsVikingsLeavesStasis_Init () {

    libGDHL_gt_HeroLostVikingsVikingsLeavesStasis = TriggerCreate("libGDHL_gt_HeroLostVikingsVikingsLeavesStasis_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsVikingsLeavesStasis, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLostVikingsVikingsLeavesStasis, null, "LostVikingsStasisController", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Unit Selected

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsUnitSelected_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_lVPlayer;

    unit lv_closestViking;



    // Automatic Variable Declarations

    unitgroup auto65617B0E_g;

    int auto65617B0E_u;

    unit auto65617B0E_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventUnit()) == EventPlayer()))) {

            return false;

        }



        if (!((UnitGetType(EventUnit()) != "LongboatRaidBoat"))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[EventPlayer()].lv_heroUnit) == "HeroLostVikingsController"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lVPlayer = UnitGetOwner(EventUnit());

    if ((UnitGroupCount(UnitGroupSelected(lv_lVPlayer), c_unitCountAll) == 1)) {

        libGame_gv_players[lv_lVPlayer].lv_cameraPlayerUnitGroupToFocusOn = UnitGroupSelected(lv_lVPlayer);

        libGame_gf_CameraUpdateCameraForPlayer(lv_lVPlayer);

    }

    else {

        auto65617B0E_g = UnitGroupSelected(lv_lVPlayer);

        auto65617B0E_u = UnitGroupCount(auto65617B0E_g, c_unitCountAll);

        for (;; auto65617B0E_u -= 1) {

            auto65617B0E_var = UnitGroupUnitFromEnd(auto65617B0E_g, auto65617B0E_u);

            if (auto65617B0E_var == null) { break; }

            if (((auto65617B0E_var == libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olaf) || (auto65617B0E_var == libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erik) || (auto65617B0E_var == libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleog) || (auto65617B0E_var == libGame_gv_players[lv_lVPlayer].lv_activeVehicle))) {

                if ((lv_closestViking == null)) {

                    lv_closestViking = auto65617B0E_var;

                }

                else {

                    if ((DistanceBetweenPoints(UnitGetPosition(auto65617B0E_var), CameraGetTarget(lv_lVPlayer)) < DistanceBetweenPoints(UnitGetPosition(lv_closestViking), CameraGetTarget(lv_lVPlayer)))) {

                        lv_closestViking = auto65617B0E_var;

                    }



                }

                libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_centerViking = lv_closestViking;

            }



        }

        libGame_gv_players[lv_lVPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_centerViking);

        libGame_gf_CameraUpdateCameraForPlayer(lv_lVPlayer);

    }

    if ((EventUnit() == libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_longboatCaptain)) {

        UnitGroupSelect(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_longboatCrew, UnitGetOwner(EventUnit()), true);

        libGame_gv_players[lv_lVPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_longboatCaptain);

        libGame_gf_CameraUpdateCameraForPlayer(lv_lVPlayer);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsUnitSelected_Init () {

    libGDHL_gt_HeroLostVikingsUnitSelected = TriggerCreate("libGDHL_gt_HeroLostVikingsUnitSelected_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsUnitSelected, false);

    TriggerAddEventUnitSelected(libGDHL_gt_HeroLostVikingsUnitSelected, null, c_playerAny, true);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Unit Deselected

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsUnitDeselected_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_closestViking;



    // Automatic Variable Declarations

    unitgroup auto16A42519_g;

    int auto16A42519_u;

    unit auto16A42519_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventUnit()) == EventPlayer()))) {

            return false;

        }



        if (!((UnitGetType(EventUnit()) != "LongboatRaidBoat"))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[EventPlayer()].lv_heroUnit) == "HeroLostVikingsController"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayer();

    if ((UnitGroupCount(UnitGroupSelected(lv_player), c_unitCountAll) == 1)) {

        libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = UnitGroupSelected(lv_player);

        libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    }

    else {

        auto16A42519_g = UnitGroupSelected(lv_player);

        auto16A42519_u = UnitGroupCount(auto16A42519_g, c_unitCountAll);

        for (;; auto16A42519_u -= 1) {

            auto16A42519_var = UnitGroupUnitFromEnd(auto16A42519_g, auto16A42519_u);

            if (auto16A42519_var == null) { break; }

            if (((auto16A42519_var == libGDHL_gv_lostVikingsPlayer[lv_player].lv_olaf) || (auto16A42519_var == libGDHL_gv_lostVikingsPlayer[lv_player].lv_erik) || (auto16A42519_var == libGDHL_gv_lostVikingsPlayer[lv_player].lv_baleog) || (auto16A42519_var == libGame_gv_players[lv_player].lv_activeVehicle))) {

                if ((lv_closestViking == null)) {

                    lv_closestViking = auto16A42519_var;

                }

                else {

                    if ((DistanceBetweenPoints(UnitGetPosition(auto16A42519_var), CameraGetTarget(lv_player)) < DistanceBetweenPoints(UnitGetPosition(lv_closestViking), CameraGetTarget(lv_player)))) {

                        lv_closestViking = auto16A42519_var;

                    }



                }

                libGDHL_gv_lostVikingsPlayer[lv_player].lv_centerViking = auto16A42519_var;

            }



        }

        libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGDHL_gv_lostVikingsPlayer[lv_player].lv_centerViking);

        libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsUnitDeselected_Init () {

    libGDHL_gt_HeroLostVikingsUnitDeselected = TriggerCreate("libGDHL_gt_HeroLostVikingsUnitDeselected_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsUnitDeselected, false);

    TriggerAddEventUnitSelected(libGDHL_gt_HeroLostVikingsUnitDeselected, null, c_playerAny, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Use Transport

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsUseTransport_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_controlGroup;

    int lv_lVPlayer;

    unit lv_fakeSelectionVehicle;

    unit lv_vikingCargoUnit;



    // Automatic Variable Declarations

    string auto7EEE3C94_val;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[libGame_gf_HeroEnteredTransportPlayerEntering()].lv_heroUnit) == "HeroLostVikingsController"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lVPlayer = libGame_gf_HeroEnteredTransportPlayerEntering();

    lv_vikingCargoUnit = libGame_gf_HeroEnteredTransportCargoUnit();

    libNtve_gf_CreateUnitsWithDefaultFacing(1, "LostVikingsMedivacDummyUnit", 0, lv_lVPlayer, UnitGetPosition(lv_vikingCargoUnit), null);

    lv_fakeSelectionVehicle = UnitLastCreated();

    auto7EEE3C94_val = UnitGetType(lv_vikingCargoUnit);

    if (auto7EEE3C94_val == "HeroOlaf") {

        lv_controlGroup = 1;

    }

    else if (auto7EEE3C94_val == "HeroBaleog") {

        lv_controlGroup = 2;

    }

    else if (auto7EEE3C94_val == "HeroErik") {

        lv_controlGroup = 3;

    }

    else {

    }

    Wait(0.0625, c_timeGame);

    UnitControlGroupAddUnit(lv_lVPlayer, lv_controlGroup, lv_fakeSelectionVehicle);

    UnitControlGroupRemoveUnit(lv_lVPlayer, lv_controlGroup, lv_vikingCargoUnit);

    UnitControlGroupRemoveUnit(lv_lVPlayer, 4, lv_vikingCargoUnit);

    UnitControlGroupAddUnit(lv_lVPlayer, 4, lv_fakeSelectionVehicle);

    while ((libNtve_gf_UnitIsInsideTransport(lv_vikingCargoUnit) == true)) {

        UnitSetPosition(lv_fakeSelectionVehicle, UnitGetPosition(libGame_gf_HeroEnteredTransportTransport()), true);

        Wait(0.0625, c_timeGame);

    }

    UnitControlGroupRemoveUnit(lv_lVPlayer, lv_controlGroup, lv_fakeSelectionVehicle);

    UnitControlGroupAddUnit(lv_lVPlayer, lv_controlGroup, lv_vikingCargoUnit);

    UnitControlGroupAddUnit(lv_lVPlayer, 4, lv_vikingCargoUnit);

    UnitControlGroupRemoveUnit(lv_lVPlayer, 4, lv_fakeSelectionVehicle);

    if ((UnitIsSelected(lv_fakeSelectionVehicle, lv_lVPlayer) == true)) {

        UnitSelect(lv_vikingCargoUnit, lv_lVPlayer, true);

    }



    if ((UnitIsSelected(libGame_gf_HeroEnteredTransportTransport(), lv_lVPlayer) == true)) {

        UnitSelect(lv_vikingCargoUnit, lv_lVPlayer, true);

    }



    UnitRemove(lv_fakeSelectionVehicle);

    libGame_gv_players[lv_lVPlayer].lv_cameraCurrentTargetGroup = null;

    libGame_gv_players[lv_lVPlayer].lv_cameraPlayerUnitGroupToFocusOn = null;

    libGame_gf_CameraUpdateCameraForPlayer(lv_lVPlayer);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsUseTransport_Init () {

    libGDHL_gt_HeroLostVikingsUseTransport = TriggerCreate("libGDHL_gt_HeroLostVikingsUseTransport_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsUseTransport, false);

    libGame_gf_HeroEnteredTransport(libGDHL_gt_HeroLostVikingsUseTransport);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Rally Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsRallyCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_lVPlayer;



    // Automatic Variable Declarations

    string autoFA0FCA6E_val;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lVPlayer = EventPlayer();

    autoFA0FCA6E_val = UnitGetType(EventUnit());

    if (autoFA0FCA6E_val == "OlafsGravestone") {

        PathCreateForUnit(libCore_gv_playerGroupFromPlayer[lv_lVPlayer], EventUnit());

        PathSetVisible(PathLastCreated(), c_pathLocationWorld, true);

        PathSetLineTexture(PathLastCreated(), c_pathLocationAll, "Assets\\Textures\\storm_waypointline.dds");

        if ((libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafRallyDisplayed == true)) {

            PathDestroy(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafDeathRallyDisplay);

        }



        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafDeathRallyDisplay = PathLastCreated();

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafRallyDisplayed = true;

        PathSetVisible(PathLastCreated(), c_pathLocationAll, true);

    }

    else if (autoFA0FCA6E_val == "EriksGravestone") {

        PathCreateForUnit(libCore_gv_playerGroupFromPlayer[lv_lVPlayer], EventUnit());

        PathSetVisible(PathLastCreated(), c_pathLocationWorld, true);

        PathSetLineTexture(PathLastCreated(), c_pathLocationAll, "Assets\\Textures\\storm_waypointline.dds");

        if ((libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikRallyDisplayed == true)) {

            PathDestroy(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikDeathRallyDisplay);

        }



        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikDeathRallyDisplay = PathLastCreated();

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikRallyDisplayed = true;

        PathSetVisible(PathLastCreated(), c_pathLocationAll, true);

    }

    else if (autoFA0FCA6E_val == "BaleogsGravestone") {

        PathCreateForUnit(libCore_gv_playerGroupFromPlayer[lv_lVPlayer], EventUnit());

        PathSetVisible(PathLastCreated(), c_pathLocationWorld, true);

        PathSetLineTexture(PathLastCreated(), c_pathLocationAll, "Assets\\Textures\\storm_waypointline.dds");

        if ((libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogRallyDisplayed == true)) {

            PathDestroy(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogDeathRallyDisplay);

        }



        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogDeathRallyDisplay = PathLastCreated();

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogRallyDisplayed = true;

        PathSetVisible(PathLastCreated(), c_pathLocationAll, true);

    }

    else {

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsRallyCast_Init () {

    libGDHL_gt_HeroLostVikingsRallyCast = TriggerCreate("libGDHL_gt_HeroLostVikingsRallyCast_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsRallyCast, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallyCast, null, AbilityCommand("LostVikingsRally", 0), c_unitAbilStageAll, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallyCast, null, AbilityCommand("LostVikingsBaleogRally", 0), c_unitAbilStageAll, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallyCast, null, AbilityCommand("LostVikingsErikRally", 0), c_unitAbilStageAll, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallyCast, null, AbilityCommand("LostVikingsOlafRally", 0), c_unitAbilStageAll, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Rally Finish/Cancel

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsRallyFinishCancel_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_lVPlayer;



    // Automatic Variable Declarations

    string auto0216BCA1_val;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(EventUnit()) == "HeroErik") || (UnitGetType(EventUnit()) == "HeroOlaf") || (UnitGetType(EventUnit()) == "HeroBaleog")))) {

            return false;

        }



        if (!((EventUnitAbility() != AbilityCommand("LostVikingsRally", 0)))) {

            return false;

        }



        if (!((EventUnitAbility() != AbilityCommand("LostVikingsBaleogRally", 0)))) {

            return false;

        }



        if (!((EventUnitAbility() != AbilityCommand("LostVikingsOlafRally", 0)))) {

            return false;

        }



        if (!((EventUnitAbility() != AbilityCommand("LostVikingsErikRally", 0)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lVPlayer = UnitGetOwner(EventUnit());

    auto0216BCA1_val = UnitGetType(EventUnit());

    if (auto0216BCA1_val == "HeroOlaf") {

        if ((libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafRallyDisplayed == true)) {

            PathSetVisible(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafDeathRallyDisplay, c_pathLocationWorld, false);

            PathDestroy(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafDeathRallyDisplay);

            libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_olafRallyDisplayed = false;

        }



    }

    else if (auto0216BCA1_val == "HeroErik") {

        if ((libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikRallyDisplayed == true)) {

            PathSetVisible(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikDeathRallyDisplay, c_pathLocationWorld, false);

            PathDestroy(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikDeathRallyDisplay);

            libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_erikRallyDisplayed = false;

        }



    }

    else if (auto0216BCA1_val == "HeroBaleog") {

        if ((libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogRallyDisplayed == true)) {

            PathSetVisible(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogDeathRallyDisplay, c_pathLocationWorld, false);

            PathDestroy(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogDeathRallyDisplay);

            libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_baleogRallyDisplayed = false;

        }



    }

    else {

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsRallyFinishCancel_Init () {

    libGDHL_gt_HeroLostVikingsRallyFinishCancel = TriggerCreate("libGDHL_gt_HeroLostVikingsRallyFinishCancel_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsRallyFinishCancel, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallyFinishCancel, null, null, c_unitAbilStageAll, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Rally Sounds

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsRallySounds_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventUnitTargetPoint() != null)) {

        UnitCreateEffectPoint(EventUnit(), "LostVikingsRallyPointDummyEffectForSound", EventUnitTargetPoint());

    }

    else {

        UnitCreateEffectUnit(EventUnit(), "LostVikingsRallyPointDummyEffectForSound", EventUnitTargetUnit());

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsRallySounds_Init () {

    libGDHL_gt_HeroLostVikingsRallySounds = TriggerCreate("libGDHL_gt_HeroLostVikingsRallySounds_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsRallySounds, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallySounds, null, AbilityCommand("LostVikingsOlafRally", 0), c_unitAbilStageExecute, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallySounds, null, AbilityCommand("LostVikingsErikRally", 0), c_unitAbilStageExecute, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallySounds, null, AbilityCommand("LostVikingsBaleogRally", 0), c_unitAbilStageExecute, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallySounds, null, AbilityCommand("LostVikingsOlafRally", 0), c_unitAbilStageQueue, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallySounds, null, AbilityCommand("LostVikingsErikRally", 0), c_unitAbilStageQueue, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroLostVikingsRallySounds, null, AbilityCommand("LostVikingsBaleogRally", 0), c_unitAbilStageQueue, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Play Again Complete

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsPlayAgainComplete_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_ghostErikPoint;

    fixed lv_ghostErikFacing;

    bool lv_ghostErikValidTeleport;

    point lv_ghostOlafPoint;

    fixed lv_ghostOlafFacing;

    bool lv_ghostOlafValidTeleport;

    point lv_ghostBaleogPoint;

    fixed lv_ghostBaleogFacing;

    bool lv_ghostBaleogValidTeleport;

    int lv_lVPlayer;

    int lv_itViking;

    unit lv_summonerViking;

    unit lv_cairn;

    fixed lv_polarMove;



    // Automatic Variable Declarations

    unitgroup autoD2D78B82_g;

    int autoD2D78B82_u;

    unit autoD2D78B82_var;

    unitgroup auto00C7DBE2_g;

    int auto00C7DBE2_u;

    unit auto00C7DBE2_var;

    unitgroup auto0C1C0C15_g;

    int auto0C1C0C15_u;

    unit auto0C1C0C15_var;

    unitgroup autoF53F4DE6_g;

    int autoF53F4DE6_u;

    unit autoF53F4DE6_var;

    const int auto0981DBD7_ae = libUIUI_gv_uI_MaxHeroGroupStatusFrames;

    const int auto0981DBD7_ai = 1;

    unitgroup auto05EC66D6_g;

    int auto05EC66D6_u;

    unit auto05EC66D6_var;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_summonerViking = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_lVPlayer = UnitGetOwner(lv_summonerViking);

    lv_cairn = UnitGroupUnit(UnitGroup("LostVikingsPlayAgainCairn", lv_lVPlayer, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 1), 1);

    libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_respawnPolarOffset = (UnitGetFacing(lv_summonerViking) - 180.0);

    autoD2D78B82_g = UnitGroup("ErikPlayAgainGhost", lv_lVPlayer, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    autoD2D78B82_u = UnitGroupCount(autoD2D78B82_g, c_unitCountAll);

    for (;; autoD2D78B82_u -= 1) {

        autoD2D78B82_var = UnitGroupUnitFromEnd(autoD2D78B82_g, autoD2D78B82_u);

        if (autoD2D78B82_var == null) { break; }

        lv_ghostErikPoint = UnitGetPosition(autoD2D78B82_var);

        lv_ghostErikFacing = UnitGetFacing(autoD2D78B82_var);

        if ((UnitBehaviorCount(autoD2D78B82_var, "LostVikingsPlayAgainTeleportConfirmation") == 1) && (UnitBehaviorCount(autoD2D78B82_var, "LostVikingsPlayAgainSuppressResurrection") == 0)) {

            lv_ghostErikValidTeleport = true;

        }



    }

    auto00C7DBE2_g = UnitGroup("OlafPlayAgainGhost", lv_lVPlayer, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto00C7DBE2_u = UnitGroupCount(auto00C7DBE2_g, c_unitCountAll);

    for (;; auto00C7DBE2_u -= 1) {

        auto00C7DBE2_var = UnitGroupUnitFromEnd(auto00C7DBE2_g, auto00C7DBE2_u);

        if (auto00C7DBE2_var == null) { break; }

        lv_ghostOlafPoint = UnitGetPosition(auto00C7DBE2_var);

        lv_ghostOlafFacing = UnitGetFacing(auto00C7DBE2_var);

        if ((UnitBehaviorCount(auto00C7DBE2_var, "LostVikingsPlayAgainTeleportConfirmation") == 1) && (UnitBehaviorCount(auto00C7DBE2_var, "LostVikingsPlayAgainSuppressResurrection") == 0)) {

            lv_ghostOlafValidTeleport = true;

        }



    }

    auto0C1C0C15_g = UnitGroup("BaleogPlayAgainGhost", lv_lVPlayer, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto0C1C0C15_u = UnitGroupCount(auto0C1C0C15_g, c_unitCountAll);

    for (;; auto0C1C0C15_u -= 1) {

        auto0C1C0C15_var = UnitGroupUnitFromEnd(auto0C1C0C15_g, auto0C1C0C15_u);

        if (auto0C1C0C15_var == null) { break; }

        lv_ghostBaleogPoint = UnitGetPosition(auto0C1C0C15_var);

        lv_ghostBaleogFacing = UnitGetFacing(auto0C1C0C15_var);

        if ((UnitBehaviorCount(auto0C1C0C15_var, "LostVikingsPlayAgainTeleportConfirmation") == 1) && (UnitBehaviorCount(auto0C1C0C15_var, "LostVikingsPlayAgainSuppressResurrection") == 0)) {

            lv_ghostBaleogValidTeleport = true;

        }



    }

    if ((UnitBehaviorCount(lv_summonerViking, "LostVikingsCheckpointReachedCarry") >= 1)) {

        UnitBehaviorAdd(lv_cairn, "LostVikingsPlayAgainCheckpointReachedCairnBehavior", lv_cairn, 1);

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_checkpointReachedDeathTimerActive = true;

        TimerStart(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_checkpointReachedCarinRespawnTimer, UnitBehaviorDuration(lv_cairn, "LostVikingsPlayAgainCheckpointReachedCairnBehavior"), false, c_timeGame);

        TextTagCreate(IntToText(FixedToInt(TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_checkpointReachedCarinRespawnTimer))), 24, UnitGetPosition(lv_cairn), 1.0, true, true, PlayerGroupAll());

        TextTagShow(TextTagLastCreated(), PlayerGroupAll(), true);

        TextTagSetFogVisibility(TextTagLastCreated(), c_visTypeFog);

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_checkpointReachedCarinRespawnTextTag = TextTagLastCreated();

        libGDHL_gv_lostVikingsPlayer[lv_lVPlayer].lv_checkpointReachedCairn = lv_cairn;

    }



    autoF53F4DE6_g = libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup;

    autoF53F4DE6_u = UnitGroupCount(autoF53F4DE6_g, c_unitCountAll);

    for (;; autoF53F4DE6_u -= 1) {

        autoF53F4DE6_var = UnitGroupUnitFromEnd(autoF53F4DE6_g, autoF53F4DE6_u);

        if (autoF53F4DE6_var == null) { break; }

        if ((autoF53F4DE6_var != lv_summonerViking) && (autoF53F4DE6_var != libGame_gv_players[lv_lVPlayer].lv_heroUnit) && (UnitBehaviorCount(autoF53F4DE6_var, "LostVikingsPlayAgainSuppressResurrection") == 0)) {

            lv_itViking = 1;

            for ( ; ( (auto0981DBD7_ai >= 0 && lv_itViking <= auto0981DBD7_ae) || (auto0981DBD7_ai < 0 && lv_itViking >= auto0981DBD7_ae) ) ; lv_itViking += auto0981DBD7_ai ) {

                if ((libUIUI_gv_uIHeroTrackerArrows.lv_unit[lv_itViking] == autoF53F4DE6_var)) {

                    libNtve_gf_SetDialogItemImage(libUIUI_gv_uIHeroTrackerArrows.lv_portraitImage[lv_itViking], (CatalogFieldValueGet(c_gameCatalogActor, UnitGetType(autoF53F4DE6_var), "HeroIcon", lv_lVPlayer)), libCore_gv_playerGroupFromPlayer[lv_lVPlayer]);

                }



            }

            if ((UnitGetType(autoF53F4DE6_var) == "HeroErik") && (lv_ghostErikValidTeleport == true)) {

                UnitCreateEffectUnit(autoF53F4DE6_var, "CleanseDebuffsUnstoppable", autoF53F4DE6_var);

                UnitCreateEffectUnit(autoF53F4DE6_var, "LostVikingsPlayAgainCleanseDoTsAndBlinds", autoF53F4DE6_var);

                libGDHL_gf_HeroLostVikingsPlayAgainTeleportViking(autoF53F4DE6_var, lv_ghostErikPoint);

                UnitSetFacing(autoF53F4DE6_var, lv_ghostErikFacing, 0.0);

                libNtve_gf_SendActorMessageToUnit(autoF53F4DE6_var, "AnimPlay Spell Spell,C 0 0.000000");

                UnitIssueOrder(autoF53F4DE6_var, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                if ((libNtve_gf_UnitGroupIsDead(libNtve_gf_ConvertUnitToUnitGroup(autoF53F4DE6_var)) == true)) {

                    libGDHL_gf_VikingDownRespawnVikingforPlayer(autoF53F4DE6_var);

                }



            }

            else if ((UnitGetType(autoF53F4DE6_var) == "HeroOlaf") && (lv_ghostOlafValidTeleport == true)) {

                UnitCreateEffectUnit(autoF53F4DE6_var, "CleanseDebuffsUnstoppable", autoF53F4DE6_var);

                UnitCreateEffectUnit(autoF53F4DE6_var, "LostVikingsPlayAgainCleanseDoTsAndBlinds", autoF53F4DE6_var);

                libGDHL_gf_HeroLostVikingsPlayAgainTeleportViking(autoF53F4DE6_var, lv_ghostOlafPoint);

                UnitSetFacing(autoF53F4DE6_var, lv_ghostOlafFacing, 0.0);

                libNtve_gf_SendActorMessageToUnit(autoF53F4DE6_var, "AnimPlay Spell Spell,C 0 0.000000");

                UnitIssueOrder(autoF53F4DE6_var, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                if ((libNtve_gf_UnitGroupIsDead(libNtve_gf_ConvertUnitToUnitGroup(autoF53F4DE6_var)) == true)) {

                    libGDHL_gf_VikingDownRespawnVikingforPlayer(autoF53F4DE6_var);

                }



            }

            else if ((UnitGetType(autoF53F4DE6_var) == "HeroBaleog") && (lv_ghostBaleogValidTeleport == true)) {

                UnitCreateEffectUnit(autoF53F4DE6_var, "CleanseDebuffsUnstoppable", autoF53F4DE6_var);

                UnitCreateEffectUnit(autoF53F4DE6_var, "LostVikingsPlayAgainCleanseDoTsAndBlinds", autoF53F4DE6_var);

                libGDHL_gf_HeroLostVikingsPlayAgainTeleportViking(autoF53F4DE6_var, lv_ghostBaleogPoint);

                UnitSetFacing(autoF53F4DE6_var, lv_ghostBaleogFacing, 0.0);

                libNtve_gf_SendActorMessageToUnit(autoF53F4DE6_var, "AnimPlay Spell Spell,C 0 0.000000");

                UnitIssueOrder(autoF53F4DE6_var, Order(AbilityCommand("stop", 0)), c_orderQueueReplace);

                if ((libNtve_gf_UnitGroupIsDead(libNtve_gf_ConvertUnitToUnitGroup(autoF53F4DE6_var)) == true)) {

                    libGDHL_gf_VikingDownRespawnVikingforPlayer(autoF53F4DE6_var);

                }



            }

        }



        if ((UnitBehaviorCount(autoF53F4DE6_var, "LostVikingsPlayAgainSuppressResurrection") == 0)) {

            UnitSelect(autoF53F4DE6_var, lv_lVPlayer, true);

            UnitBehaviorRemove(autoF53F4DE6_var, "LostVikingsErikDowned", 1);

            UnitBehaviorRemove(autoF53F4DE6_var, "LostVikingsBaleogDowned", 1);

            UnitBehaviorRemove(autoF53F4DE6_var, "LostVikingsOlafDowned", 1);

        }



    }

    auto05EC66D6_g = libGame_gv_players[lv_lVPlayer].lv_heroUnitGroup;

    auto05EC66D6_u = UnitGroupCount(auto05EC66D6_g, c_unitCountAll);

    for (;; auto05EC66D6_u -= 1) {

        auto05EC66D6_var = UnitGroupUnitFromEnd(auto05EC66D6_g, auto05EC66D6_u);

        if (auto05EC66D6_var == null) { break; }

        if ((UnitGetType(auto05EC66D6_var) != "HeroLostVikingsController") && (UnitBehaviorCount(auto05EC66D6_var, "LostVikingsPlayAgainSuppressResurrection") == 0)) {

            UnitCreateEffectUnitWithSource(auto05EC66D6_var, "LostVikingsPlayAgainCreateHealer", auto05EC66D6_var, c_gameCatalogAbil, "LostVikingsPlayAgain");

        }



    }

    libUIUI_gf_FullscreenOverlaysShowHideDeathOverlay(false, lv_lVPlayer);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsPlayAgainComplete_Init () {

    libGDHL_gt_HeroLostVikingsPlayAgainComplete = TriggerCreate("libGDHL_gt_HeroLostVikingsPlayAgainComplete_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsPlayAgainComplete, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLostVikingsPlayAgainComplete, c_playerAny, "LostVikingsPlayAgainFinalSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Play Again Force Ghost Facing/Placement

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsPlayAgainForceGhostFacingPlacement_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_movePoint;

    unit lv_cairn;

    fixed lv_offsetAngle;

    string lv_vikingType;



    // Automatic Variable Declarations

    unitgroup autoBE04F5F3_g;

    int autoBE04F5F3_u;

    unit autoBE04F5F3_var;

    string auto76FD89A8_val;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(EventUnitCreatedUnit()) == "BaleogPlayAgainGhost") || (UnitGetType(EventUnitCreatedUnit()) == "ErikPlayAgainGhost") || (UnitGetType(EventUnitCreatedUnit()) == "OlafPlayAgainGhost")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoBE04F5F3_g = UnitGroup("LostVikingsPlayAgainCairn", UnitGetOwner(EventUnit()), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 1);

    autoBE04F5F3_u = UnitGroupCount(autoBE04F5F3_g, c_unitCountAll);

    for (;; autoBE04F5F3_u -= 1) {

        autoBE04F5F3_var = UnitGroupUnitFromEnd(autoBE04F5F3_g, autoBE04F5F3_u);

        if (autoBE04F5F3_var == null) { break; }

        lv_cairn = autoBE04F5F3_var;

    }

    auto76FD89A8_val = UnitGetType(EventUnit());

    if (auto76FD89A8_val == "HeroBaleog") {

        if ((UnitGetType(EventUnitCreatedUnit()) == "OlafPlayAgainGhost")) {

            lv_offsetAngle = 120.0;

            lv_vikingType = "HeroOlaf";

        }

        else if ((UnitGetType(EventUnitCreatedUnit()) == "ErikPlayAgainGhost")) {

            lv_offsetAngle = -120.0;

            lv_vikingType = "HeroErik";

        }

    }

    else if (auto76FD89A8_val == "HeroErik") {

        if ((UnitGetType(EventUnitCreatedUnit()) == "BaleogPlayAgainGhost")) {

            lv_offsetAngle = 120.0;

            lv_vikingType = "HeroBaleog";

        }

        else if ((UnitGetType(EventUnitCreatedUnit()) == "OlafPlayAgainGhost")) {

            lv_offsetAngle = -120.0;

            lv_vikingType = "HeroOlaf";

        }

    }

    else if (auto76FD89A8_val == "HeroOlaf") {

        if ((UnitGetType(EventUnitCreatedUnit()) == "ErikPlayAgainGhost")) {

            lv_offsetAngle = 120.0;

            lv_vikingType = "HeroErik";

        }

        else if ((UnitGetType(EventUnitCreatedUnit()) == "BaleogPlayAgainGhost")) {

            lv_offsetAngle = -120.0;

            lv_vikingType = "HeroBaleog";

        }

    }

    else {

    }

    lv_movePoint = PointWithOffsetPolar(UnitTypePlacementFromPoint(lv_vikingType, UnitGetOwner(EventUnit()), UnitGetPosition(lv_cairn), 3.0), DistanceBetweenPoints(UnitGetPosition(lv_cairn), UnitGetPosition(EventUnit())), (AngleBetweenPoints(UnitGetPosition(lv_cairn), UnitGetPosition(EventUnit())) + lv_offsetAngle));

    libStEx_gf_MoveUnit(EventUnitCreatedUnit(), lv_movePoint, false);

    libNtve_gf_MakeUnitFacePoint(EventUnitCreatedUnit(), UnitGetPosition(lv_cairn), 0.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsPlayAgainForceGhostFacingPlacement_Init () {

    libGDHL_gt_HeroLostVikingsPlayAgainForceGhostFacingPlacement = TriggerCreate("libGDHL_gt_HeroLostVikingsPlayAgainForceGhostFacingPlacement_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsPlayAgainForceGhostFacingPlacement, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroLostVikingsPlayAgainForceGhostFacingPlacement, null, "LostVikingsPlayAgain", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Checkpoint Timer Pause in Time Stop

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itPlayer;

    unit lv_cairn;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "LostVikingsPlayAgainCairn"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_cairn = EventUnit();

    lv_itPlayer = UnitGetOwner(lv_cairn);

    if ((EventUnitBehaviorChange() == c_unitBehaviorChangeActivate) && (TimerIsPaused(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTimer) == false)) {

        TimerPause(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTimer, true);

    }



    if ((EventUnitBehaviorChange() == c_unitBehaviorChangeDeactivate) && (TimerIsPaused(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTimer) == true)) {

        TimerPause(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTimer, false);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop_Init () {

    libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop = TriggerCreate("libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop, null, c_behaviorCategoryTimeStop, c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop, null, c_behaviorCategoryTimeStop, c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Checkpoint Reached Timer Countdown

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsCheckpointReachedTimerCountdown_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itPlayer;



    // Automatic Variable Declarations

    const int autoF7D0772B_ae = libCore_gv_bALMaxPlayers;

    const int autoF7D0772B_ai = 1;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_itPlayer = 1;

    for ( ; ( (autoF7D0772B_ai >= 0 && lv_itPlayer <= autoF7D0772B_ae) || (autoF7D0772B_ai < 0 && lv_itPlayer >= autoF7D0772B_ae) ) ; lv_itPlayer += autoF7D0772B_ai ) {

        if ((UnitGetType(libGame_gv_players[lv_itPlayer].lv_heroUnit) == "HeroLostVikingsController") && (libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedDeathTimerActive == true) && (libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTextTag != c_textTagNone)) {

            if ((TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTimer) > 0.0)) {

                TextTagSetText(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTextTag, IntToText(FixedToInt(TimerGetRemaining(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTimer))));

            }



        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsCheckpointReachedTimerCountdown_Init () {

    libGDHL_gt_HeroLostVikingsCheckpointReachedTimerCountdown = TriggerCreate("libGDHL_gt_HeroLostVikingsCheckpointReachedTimerCountdown_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsCheckpointReachedTimerCountdown, false);

    TriggerAddEventTimePeriodic(libGDHL_gt_HeroLostVikingsCheckpointReachedTimerCountdown, 1.0, c_timeGame);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Checkpoint Reach Timer Expires

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itPlayer;

    int lv_itViking;

    unit lv_cairn;

    fixed lv_polarMove;



    // Automatic Variable Declarations

    const int autoE81687E9_ae = libCore_gv_bALMaxPlayers;

    const int autoE81687E9_ai = 1;

    unitgroup autoF6B97AA2_g;

    int autoF6B97AA2_u;

    unit autoF6B97AA2_var;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_itPlayer = 1;

    for ( ; ( (autoE81687E9_ai >= 0 && lv_itPlayer <= autoE81687E9_ae) || (autoE81687E9_ai < 0 && lv_itPlayer >= autoE81687E9_ae) ) ; lv_itPlayer += autoE81687E9_ai ) {

        if ((libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTimer == EventTimer())) {

            TextTagDestroy(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCarinRespawnTextTag);

            autoF6B97AA2_g = libGame_gv_players[lv_itPlayer].lv_heroUnitGroup;

            autoF6B97AA2_u = UnitGroupCount(autoF6B97AA2_g, c_unitCountAll);

            for (;; autoF6B97AA2_u -= 1) {

                autoF6B97AA2_var = UnitGroupUnitFromEnd(autoF6B97AA2_g, autoF6B97AA2_u);

                if (autoF6B97AA2_var == null) { break; }

                UnitBehaviorRemove(autoF6B97AA2_var, "LostVikingsVikingDowned", 1);

                UnitBehaviorRemove(autoF6B97AA2_var, "LostVikingsErikDowned", 1);

                UnitBehaviorRemove(autoF6B97AA2_var, "LostVikingsBaleogDowned", 1);

                UnitBehaviorRemove(autoF6B97AA2_var, "LostVikingsOlafDowned", 1);

                if ((libNtve_gf_UnitGroupIsDead(libNtve_gf_ConvertUnitToUnitGroup(autoF6B97AA2_var)) == true)) {

                    libGDHL_gf_VikingDownRespawnVikingforPlayer(autoF6B97AA2_var);

                    UnitSelect(autoF6B97AA2_var, lv_itPlayer, true);

                }



                UnitCreateEffectUnit(autoF6B97AA2_var, "LostVikingsCheckpointReachedCreateHealer", autoF6B97AA2_var);

            }

            TimerPause(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_olafDeathTimer, true);

            TimerPause(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_erikDeathTimer, true);

            TimerPause(libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_baleogDeathTimer, true);

            libUIUI_gf_FullscreenOverlaysShowHideDeathOverlay(false, lv_itPlayer);

            libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedCairn = null;

            libGDHL_gv_lostVikingsPlayer[lv_itPlayer].lv_checkpointReachedDeathTimerActive = false;

            break;

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires_Init () {

    libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires = TriggerCreate("libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, false);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[1].lv_checkpointReachedCarinRespawnTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[2].lv_checkpointReachedCarinRespawnTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[3].lv_checkpointReachedCarinRespawnTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[4].lv_checkpointReachedCarinRespawnTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[5].lv_checkpointReachedCarinRespawnTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[6].lv_checkpointReachedCarinRespawnTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[7].lv_checkpointReachedCarinRespawnTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[8].lv_checkpointReachedCarinRespawnTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[9].lv_checkpointReachedCarinRespawnTimer);

    TriggerAddEventTimer(libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires, libGDHL_gv_lostVikingsPlayer[10].lv_checkpointReachedCarinRespawnTimer);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Longboat Raid Selection

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsLongboatRaidSelection_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_erik;

    bool lv_erikLoaded;

    unit lv_baleog;

    bool lv_baleogLoaded;

    unit lv_olaf;

    bool lv_olafLoaded;

    unit lv_boat;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto3C20B553_g;

    int auto3C20B553_u;

    unit auto3C20B553_var;

    unitgroup autoF93DF35C_g;

    int autoF93DF35C_u;

    unit autoF93DF35C_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "LongboatRaidBoat"))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[UnitGetOwner(EventUnit())].lv_heroUnit) != "HeroAbathur"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_boat = EventUnit();

    lv_player = UnitGetOwner(lv_boat);

    libGDHL_gv_lostVikingsPlayer[lv_player].lv_boat = lv_boat;

    UISetFrameVisible(libCore_gv_playerGroupFromPlayer[lv_player], c_syncFrameTypeControlGroupPanel, false);

    libUIUI_gf_HeroConsoleUnitStatusBarsSetUnitForBars(lv_boat, lv_player);

    libUIUI_gf_HeroConsoleUnitStatusBarsSetChannelBehaviorForBehaviorChannelBar(lv_player, EventUnitBehavior());

    libUIUI_gf_UIUnitStatusFramesUpdateUnitStatusFramesForUnit(lv_player, lv_boat);

    libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_boat);

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    UnitGroupSelect(UnitGroupSelected(lv_player), lv_player, false);

    UnitSelect(lv_boat, lv_player, true);

    auto3C20B553_g = libGame_gv_players[lv_player].lv_heroUnitGroup;

    auto3C20B553_u = UnitGroupCount(auto3C20B553_g, c_unitCountAll);

    for (;; auto3C20B553_u -= 1) {

        auto3C20B553_var = UnitGroupUnitFromEnd(auto3C20B553_g, auto3C20B553_u);

        if (auto3C20B553_var == null) { break; }

        if ((UnitBehaviorCount(auto3C20B553_var, "LostVikingsLongboatRaidPoofDisabler") == 1)) {

            if ((UnitGetType(auto3C20B553_var) == "HeroOlaf")) {

                lv_olafLoaded = true;

                lv_olaf = auto3C20B553_var;

                UnitGroupAdd(libGDHL_gv_lostVikingsPlayer[UnitGetOwner(EventUnit())].lv_longboatCrew, auto3C20B553_var);

            }

            else if ((UnitGetType(auto3C20B553_var) == "HeroErik")) {

                lv_erikLoaded = true;

                lv_erik = auto3C20B553_var;

                UnitGroupAdd(libGDHL_gv_lostVikingsPlayer[UnitGetOwner(EventUnit())].lv_longboatCrew, auto3C20B553_var);

            }

            else if ((UnitGetType(auto3C20B553_var) == "HeroBaleog")) {

                lv_baleogLoaded = true;

                lv_baleog = auto3C20B553_var;

                UnitGroupAdd(libGDHL_gv_lostVikingsPlayer[UnitGetOwner(EventUnit())].lv_longboatCrew, auto3C20B553_var);

            }

        }

        else {

            if ((UnitGetType(auto3C20B553_var) == "HeroOlaf")) {

                lv_olaf = auto3C20B553_var;

            }

            else if ((UnitGetType(auto3C20B553_var) == "HeroErik")) {

                lv_erik = auto3C20B553_var;

            }

            else if ((UnitGetType(auto3C20B553_var) == "HeroBaleog")) {

                lv_baleog = auto3C20B553_var;

            }

        }

    }

    AIAddPlayerUnit(lv_boat);

    if ((lv_olafLoaded == true)) {

        AIRemovePlayerUnit(lv_olaf);

        UnitControlGroupRemoveUnit(lv_player, 1, lv_olaf);

        UnitControlGroupAddUnit(lv_player, 1, lv_boat);

        UnitControlGroupAddUnit(lv_player, 4, lv_boat);

    }



    if ((lv_erikLoaded == true)) {

        AIRemovePlayerUnit(lv_erik);

        UnitControlGroupRemoveUnit(lv_player, 3, lv_erik);

        UnitControlGroupAddUnit(lv_player, 3, lv_boat);

        UnitControlGroupAddUnit(lv_player, 4, lv_boat);

    }



    if ((lv_baleogLoaded == true)) {

        AIRemovePlayerUnit(lv_baleog);

        UnitControlGroupRemoveUnit(lv_player, 2, lv_baleog);

        UnitControlGroupAddUnit(lv_player, 2, lv_boat);

        UnitControlGroupAddUnit(lv_player, 4, lv_boat);

    }



    if (((libCore_gf_ActorStoredForUnit(lv_erik, 1) != null) || (libCore_gf_ActorStoredForUnit(lv_olaf, 1) != null) || (libCore_gf_ActorStoredForUnit(lv_baleog, 1) != null))) {

        libNtve_gf_AttachActorToUnit(lv_boat, "GenericHeroLight", "Ref_Origin");

        libCore_gf_StoreActorForUnit(lv_boat, 1, libNtve_gf_ActorLastCreated());

    }



    autoF93DF35C_g = libGDHL_gv_lostVikingsPlayer[lv_player].lv_longboatCrew;

    autoF93DF35C_u = UnitGroupCount(autoF93DF35C_g, c_unitCountAll);

    for (;; autoF93DF35C_u -= 1) {

        autoF93DF35C_var = UnitGroupUnitFromEnd(autoF93DF35C_g, autoF93DF35C_u);

        if (autoF93DF35C_var == null) { break; }

        UnitBehaviorAdd(autoF93DF35C_var, "LongboatIsActive", lv_boat, 1);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsLongboatRaidSelection_Init () {

    libGDHL_gt_HeroLostVikingsLongboatRaidSelection = TriggerCreate("libGDHL_gt_HeroLostVikingsLongboatRaidSelection_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidSelection, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLostVikingsLongboatRaidSelection, null, "LongboatRaidTimedLife", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Longboat Raid Ends (Reset Control Groups)

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsLongboatRaidEndsResetControlGroups_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_boat;

    int lv_lVPlayer;

    unit lv_erik;

    unit lv_olaf;

    unit lv_baleog;



    // Automatic Variable Declarations

    unitgroup auto01DFE41C_g;

    int auto01DFE41C_u;

    unit auto01DFE41C_var;

    string auto45D50667_val;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((EventPlayerEffectUsedUnit(c_effectUnitCaster) != null))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))].lv_heroUnit) != "HeroAbathur"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_boat = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    AIRemovePlayerUnit(lv_boat);

    lv_lVPlayer = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));

    auto01DFE41C_g = libGDHL_gv_lostVikingsPlayer[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))].lv_longboatCrew;

    auto01DFE41C_u = UnitGroupCount(auto01DFE41C_g, c_unitCountAll);

    for (;; auto01DFE41C_u -= 1) {

        auto01DFE41C_var = UnitGroupUnitFromEnd(auto01DFE41C_g, auto01DFE41C_u);

        if (auto01DFE41C_var == null) { break; }

        auto45D50667_val = UnitGetType(auto01DFE41C_var);

        if (auto45D50667_val == "HeroErik") {

            lv_erik = auto01DFE41C_var;

            UnitControlGroupAddUnit(lv_lVPlayer, 3, lv_erik);

            UnitControlGroupRemoveUnit(lv_lVPlayer, 3, lv_boat);

            AIAddPlayerUnit(lv_erik);

        }

        else if (auto45D50667_val == "HeroBaleog") {

            lv_baleog = auto01DFE41C_var;

            UnitControlGroupAddUnit(lv_lVPlayer, 2, lv_baleog);

            UnitControlGroupRemoveUnit(lv_lVPlayer, 2, lv_boat);

            AIAddPlayerUnit(lv_baleog);

        }

        else if (auto45D50667_val == "HeroOlaf") {

            lv_olaf = auto01DFE41C_var;

            UnitControlGroupAddUnit(lv_lVPlayer, 1, lv_olaf);

            UnitControlGroupRemoveUnit(lv_lVPlayer, 1, lv_boat);

            AIAddPlayerUnit(lv_olaf);

        }

        else {

        }

    }

    UnitControlGroupRemoveUnit(lv_lVPlayer, 4, lv_boat);

    Wait(0.25, c_timeGame);

    libUIUI_gf_UIHeroTrackerArrowShowHideForPlayer(true, lv_lVPlayer);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsLongboatRaidEndsResetControlGroups_Init () {

    libGDHL_gt_HeroLostVikingsLongboatRaidEndsResetControlGroups = TriggerCreate("libGDHL_gt_HeroLostVikingsLongboatRaidEndsResetControlGroups_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidEndsResetControlGroups, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLostVikingsLongboatRaidEndsResetControlGroups, c_playerAny, "LostVikingsLongboatRaidDeathDelay");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Longboat Raid Expiration

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsLongboatRaidExpiration_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_erik;

    fixed lv_erikCurrentFace;

    point lv_erikLaunchLoc;

    unit lv_baleog;

    fixed lv_baleogCurrentFace;

    point lv_baleogLaunchLoc;

    unit lv_olaf;

    fixed lv_olafCurrentFace;

    point lv_olafLaunchLoc;

    unit lv_boat;

    int lv_lVPlayer;



    // Automatic Variable Declarations

    unitgroup auto0A18325D_g;

    int auto0A18325D_u;

    unit auto0A18325D_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((EventPlayerEffectUsedUnit(c_effectUnitCaster) != null))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))].lv_heroUnit) != "HeroAbathur"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_boat = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_lVPlayer = UnitGetOwner(lv_boat);

    libGDHL_gv_lostVikingsPlayer[UnitGetOwner(lv_boat)].lv_boat = null;

    UnitSelect(lv_boat, UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)), false);

    auto0A18325D_g = libGDHL_gv_lostVikingsPlayer[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))].lv_longboatCrew;

    auto0A18325D_u = UnitGroupCount(auto0A18325D_g, c_unitCountAll);

    for (;; auto0A18325D_u -= 1) {

        auto0A18325D_var = UnitGroupUnitFromEnd(auto0A18325D_g, auto0A18325D_u);

        if (auto0A18325D_var == null) { break; }

        if ((UnitGetType(auto0A18325D_var) == "HeroErik")) {

            lv_erik = auto0A18325D_var;

            if ((UnitIsAlive(lv_erik) == true)) {

                UnitSetPosition(auto0A18325D_var, UnitGetPosition(lv_boat), false);

            }



            UnitCreateEffectUnit(lv_erik, "LostVikingsLongboatRaidTeleport", lv_erik);

            UnitCreateEffectUnit(lv_erik, "LongboatRaidModifyCooldown", lv_erik);

            UnitBehaviorAdd(lv_erik, "TLVLongboatRaidExitAbilityDisabler", lv_erik, 1);

            UnitBehaviorRemove(lv_erik, "LongboatRaidHideVikings", 1);

            UnitSelect(lv_erik, UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)), true);

            UnitGroupRemove(libGDHL_gv_lostVikingsPlayer[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))].lv_longboatCrew, auto0A18325D_var);

            UnitCreateEffectUnit(lv_erik, "LostVikingsSuppressClickActionSoundCreatePersistent", lv_erik);

            if ((PlayerHasTalent(EventPlayer(), "LostVikingsMasterySpyGames") == true)) {

                UnitBehaviorAdd(lv_erik, "SpyGamesCooldown", lv_erik, 1);

            }



        }



        if ((UnitGetType(auto0A18325D_var) == "HeroBaleog")) {

            lv_baleog = auto0A18325D_var;

            if ((UnitIsAlive(lv_baleog) == true)) {

                UnitSetPosition(auto0A18325D_var, UnitGetPosition(lv_boat), false);

            }



            UnitCreateEffectUnit(lv_baleog, "LostVikingsLongboatRaidTeleport", lv_baleog);

            UnitBehaviorAdd(lv_baleog, "TLVLongboatRaidExitAbilityDisabler", lv_baleog, 1);

            UnitBehaviorRemove(lv_baleog, "LongboatRaidHideVikings", 1);

            UnitSelect(lv_baleog, UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)), true);

            UnitGroupRemove(libGDHL_gv_lostVikingsPlayer[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))].lv_longboatCrew, auto0A18325D_var);

            UnitCreateEffectUnit(lv_baleog, "LostVikingsSuppressClickActionSoundCreatePersistent", lv_baleog);

        }



        if ((UnitGetType(auto0A18325D_var) == "HeroOlaf")) {

            lv_olaf = auto0A18325D_var;

            if ((UnitIsAlive(lv_olaf) == true)) {

                UnitSetPosition(auto0A18325D_var, UnitGetPosition(lv_boat), false);

            }



            UnitCreateEffectUnit(lv_olaf, "LostVikingsLongboatRaidTeleport", lv_olaf);

            UnitBehaviorAdd(lv_olaf, "TLVLongboatRaidExitAbilityDisabler", lv_olaf, 1);

            UnitBehaviorRemove(lv_olaf, "LongboatRaidHideVikings", 1);

            UnitSelect(lv_olaf, UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)), true);

            UnitGroupRemove(libGDHL_gv_lostVikingsPlayer[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))].lv_longboatCrew, auto0A18325D_var);

            UnitCreateEffectUnit(lv_olaf, "LostVikingsSuppressClickActionSoundCreatePersistent", lv_olaf);

        }



        UISetFrameVisible(libCore_gv_playerGroupFromPlayer[EventPlayer()], c_syncFrameTypeControlGroupPanel, true);

    }

    libGame_gv_players[lv_lVPlayer].lv_cameraCurrentTargetGroup = null;

    libGame_gv_players[lv_lVPlayer].lv_cameraPlayerUnitGroupToFocusOn = null;

    libGame_gf_CameraUpdateCameraForPlayer(lv_lVPlayer);

    libUIUI_gv_uIHeroStatusFrames[lv_lVPlayer].lv_unitCount -= 1;

    Wait(0.25, c_timeGame);

    libUIUI_gf_UIHeroTrackerArrowShowHideForPlayer(true, lv_lVPlayer);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsLongboatRaidExpiration_Init () {

    libGDHL_gt_HeroLostVikingsLongboatRaidExpiration = TriggerCreate("libGDHL_gt_HeroLostVikingsLongboatRaidExpiration_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsLongboatRaidExpiration, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLostVikingsLongboatRaidExpiration, c_playerAny, "LongboatRaidExpirationDelayDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Hide Vikings On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsHideVikingsOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    unit lv_boat;

    int lv_itPlayer;



    // Automatic Variable Declarations

    unitgroup auto3DC5B74E_g;

    int auto3DC5B74E_u;

    unit auto3DC5B74E_var;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_unit = EventUnit();

    lv_itPlayer = UnitGetOwner(EventUnit());

    libUIUI_gf_UIHeroTrackerArrowShowHideForPlayer(false, lv_itPlayer);

    auto3DC5B74E_g = UnitGroup("LongboatRaidBoat", UnitGetOwner(EventUnit()), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 1);

    auto3DC5B74E_u = UnitGroupCount(auto3DC5B74E_g, c_unitCountAll);

    for (;; auto3DC5B74E_u -= 1) {

        auto3DC5B74E_var = UnitGroupUnitFromEnd(auto3DC5B74E_g, auto3DC5B74E_u);

        if (auto3DC5B74E_var == null) { break; }

        lv_boat = auto3DC5B74E_var;

    }

    libGame_gf_SendEventCheckUnitForAbilityRedirect(lv_unit, lv_boat, false, UnitGetPosition(lv_boat));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsHideVikingsOn_Init () {

    libGDHL_gt_HeroLostVikingsHideVikingsOn = TriggerCreate("libGDHL_gt_HeroLostVikingsHideVikingsOn_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsHideVikingsOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLostVikingsHideVikingsOn, null, "LongboatRaidHideVikings", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings - Abathur Clone

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsAbathurClone_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itPlayer;

    int lv_lVPlayer;

    string lv_heroicCooldownLink;



    // Automatic Variable Declarations

    const int autoED12D7AD_ae = 10;

    const int autoED12D7AD_ai = 1;

    string auto0F54B8AF_val;



    // Variable Initialization

    lv_heroicCooldownLink = "";



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(EventUnit()) == "HeroErik") || (UnitGetType(EventUnit()) == "HeroBaleog") || (UnitGetType(EventUnit()) == "HeroOlaf")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_itPlayer = 1;

    for ( ; ( (autoED12D7AD_ai >= 0 && lv_itPlayer <= autoED12D7AD_ae) || (autoED12D7AD_ai < 0 && lv_itPlayer >= autoED12D7AD_ae) ) ; lv_itPlayer += autoED12D7AD_ai ) {

        if ((UnitGetType(libGame_gv_players[lv_itPlayer].lv_heroUnit) == "HeroLostVikingsController")) {

            lv_lVPlayer = lv_itPlayer;

            break;

        }



    }

    auto0F54B8AF_val = UnitGetType(EventUnit());

    if (auto0F54B8AF_val == "HeroErik") {

        UnitBehaviorAdd(EventUnit(), "LostVikingsBaleogDowned", EventUnit(), 1);

        UnitBehaviorAdd(EventUnit(), "LostVikingsOlafDowned", EventUnit(), 1);

    }

    else if (auto0F54B8AF_val == "HeroBaleog") {

        UnitBehaviorAdd(EventUnit(), "LostVikingsErikDowned", EventUnit(), 1);

        UnitBehaviorAdd(EventUnit(), "LostVikingsOlafDowned", EventUnit(), 1);

    }

    else if (auto0F54B8AF_val == "HeroOlaf") {

        UnitBehaviorAdd(EventUnit(), "LostVikingsErikDowned", EventUnit(), 1);

        UnitBehaviorAdd(EventUnit(), "LostVikingsBaleogDowned", EventUnit(), 1);

    }

    else {

    }

    UnitBehaviorAdd(EventUnit(), "LostVikings1VikingAlive", EventUnit(), 1);

    UnitBehaviorAdd(EventUnit(), "UltimateEvolutionAlternateHero", EventUnit(), 1);

    PlayerAddCooldown(UnitGetOwner(EventUnit()), CatalogFieldValueGet(c_gameCatalogAbil, "LostVikingsLongboatRaidNewer", "Cost[" + IntToString(0) + "].Cooldown.Link", UnitGetOwner(EventUnit())), 15.0);

    PlayerAddCooldown(UnitGetOwner(EventUnit()), CatalogFieldValueGet(c_gameCatalogAbil, "LostVikingsPlayAgain", "Cost[" + IntToString(0) + "].Cooldown.Link", UnitGetOwner(EventUnit())), 15.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsAbathurClone_Init () {

    libGDHL_gt_HeroLostVikingsAbathurClone = TriggerCreate("libGDHL_gt_HeroLostVikingsAbathurClone_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsAbathurClone, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLostVikingsAbathurClone, null, "UltimateEvolutionBuild", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings Clone - Longboat Raid Selection

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsCloneLongboatRaidSelection_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_erik;

    bool lv_erikLoaded;

    unit lv_baleog;

    bool lv_baleogLoaded;

    unit lv_olaf;

    bool lv_olafLoaded;

    unit lv_boat;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "LongboatRaidBoat"))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[UnitGetOwner(EventUnit())].lv_heroUnit) == "HeroAbathur"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_boat = EventUnit();

    lv_player = UnitGetOwner(lv_boat);

    libUIUI_gf_HeroConsoleUnitStatusBarsSetUnitForBars(lv_boat, lv_player);

    libUIUI_gf_HeroConsoleUnitStatusBarsSetChannelBehaviorForBehaviorChannelBar(lv_player, EventUnitBehavior());

    UnitSelect(lv_boat, lv_player, true);

    UnitBehaviorAdd(lv_boat, "UltimateEvolutionAlternateHero", libGame_gv_players[lv_player].lv_heroUnit, 1);

    if ((UnitBehaviorCount(libGame_gv_players[lv_player].lv_activeVehicle, "LostVikingsLongboatRaidPoofDisabler") == 1)) {

        UnitGroupAdd(libGDHL_gv_lostVikingsPlayer[lv_player].lv_longboatCrew, libGame_gv_players[lv_player].lv_activeVehicle);

    }



    libGame_gv_players[lv_player].lv_cameraPlayerHasControl = false;

    libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_boat);

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    libGame_gv_players[lv_player].lv_cameraPlayerHasControl = true;

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsCloneLongboatRaidSelection_Init () {

    libGDHL_gt_HeroLostVikingsCloneLongboatRaidSelection = TriggerCreate("libGDHL_gt_HeroLostVikingsCloneLongboatRaidSelection_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsCloneLongboatRaidSelection, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroLostVikingsCloneLongboatRaidSelection, null, "LongboatRaidTimedLife", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Lost Vikings Clone - Longboat Raid Expiration

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroLostVikingsCloneLongboatRaidExpiration_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_viking;

    unit lv_boat;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))].lv_heroUnit) == "HeroAbathur"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_boat = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));

    UnitSelect(lv_boat, UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)), false);

    if ((UnitIsAlive(libGame_gv_players[lv_player].lv_activeVehicle) == true)) {

        lv_viking = libGame_gv_players[lv_player].lv_activeVehicle;

        UnitSetPosition(lv_viking, UnitGetPosition(lv_boat), false);

        UnitCreateEffectUnit(lv_viking, "LostVikingsLongboatRaidTeleport", lv_viking);

        UnitBehaviorRemove(lv_viking, "LongboatRaidHideVikings", 1);

        UnitSelect(lv_viking, UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)), true);

        UnitGroupRemove(libGDHL_gv_lostVikingsPlayer[UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster))].lv_longboatCrew, lv_viking);

        libGame_gv_players[lv_player].lv_cameraPlayerHasControl = false;

        libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_viking);

        libGame_gf_CameraUpdateCameraForPlayer(lv_player);

        libGame_gv_players[lv_player].lv_cameraPlayerHasControl = true;

        libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroLostVikingsCloneLongboatRaidExpiration_Init () {

    libGDHL_gt_HeroLostVikingsCloneLongboatRaidExpiration = TriggerCreate("libGDHL_gt_HeroLostVikingsCloneLongboatRaidExpiration_Func");

    TriggerEnable(libGDHL_gt_HeroLostVikingsCloneLongboatRaidExpiration, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroLostVikingsCloneLongboatRaidExpiration, c_playerAny, "LostVikingsLongboatRaidDeathDelay");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Lost Vikings UI Initialize

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LostVikingsUIInitialize_Func (bool testConds, bool runActions) {

    int init_i;



    // Variable Declarations

    int[6] lv_panels;

    int lv_currentPanelLayer;



    // Automatic Variable Declarations

    // Variable Initialization

    for (init_i = 0; init_i <= 5; init_i += 1) {

        lv_panels[init_i] = c_invalidDialogControlId;

    }



    // Actions

    if (!runActions) {

        return true;

    }



    DialogControlCreateInPanelFromTemplate(libUIUI_gv_heroSpecificStatusContainer, c_triggerControlTypePanel, "LostVikings/LostVikingsIconFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_lostVikingsUI.lv_lostVikingsIconFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "LostVikingsOlafIconDeselected");

    libGDHL_gv_lostVikingsUI.lv_olafUnselectedIconImage = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "LostVikingsOlafIconSelected");

    libGDHL_gv_lostVikingsUI.lv_olafSelectedIconImage = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "LostVikingsOlafIconDead");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    libGDHL_gv_lostVikingsUI.lv_olafDeadImage = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypePanel, "LostVikingsOlafDeadOverlayFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    libGDHL_gv_lostVikingsUI.lv_lostOlafDeadImageOverlay = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "LostVikingsBaleogIconDeselected");

    libGDHL_gv_lostVikingsUI.lv_baleogUnselectedIconImage = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "LostVikingsBaleogIconSelected");

    libGDHL_gv_lostVikingsUI.lv_baleogSelectedIconImage = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "LostVikingsBaleogIconDead");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    libGDHL_gv_lostVikingsUI.lv_baleogDeadImage = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypePanel, "LostVikingsBaleogDeadOverlayFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    libGDHL_gv_lostVikingsUI.lv_lostBaleogDeadImageOverlay = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "LostVikingsErikIconDeselected");

    libGDHL_gv_lostVikingsUI.lv_erikUnselectedIconImage = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "LostVikingsErikIconSelected");

    libGDHL_gv_lostVikingsUI.lv_erikSelectedIconImage = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "LostVikingsErikIconDead");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    libGDHL_gv_lostVikingsUI.lv_erikDeadImage = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypePanel, "LostVikingsErikDeadOverlayFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    libGDHL_gv_lostVikingsUI.lv_lostErikDeadImageOverlay = DialogControlLastCreated();

    lv_currentPanelLayer -= 1;

    DialogControlCreateInPanelFromTemplate(libUIUI_gv_heroSpecificFullUIModContainer, c_triggerControlTypePanel, "LostVikings/LostVikingsChannelFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_lostVikingsUI.lv_lostVikingsChannelFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "LostVikingsOlafCastChannelBarFrame");

    libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafCastChannelBarFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "LostVikingsBaleogCastChannelBarFrame");

    libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogCastChannelBarFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "LostVikingsErikCastChannelBarFrame");

    libGDHL_gv_lostVikingsUI.lv_lostVikingsErikCastChannelBarFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "LostVikingsOlafBehaviorChannelBarFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatusDurationBar, "LostVikingsBehaviorChannelBar");

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarDurationBar = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "LostVikingsBehaviorChannelBar/ChannelNameLabel");

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    libGDHL_gv_lostVikingsUI.lv_lostVikingsOlafBehaviorChannelBarBehaviorLabel = DialogControlLastCreated();

    lv_currentPanelLayer -= 1;

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "LostVikingsBaleogBehaviorChannelBarFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatusDurationBar, "LostVikingsBehaviorChannelBar");

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarDurationBar = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "LostVikingsBehaviorChannelBar/ChannelNameLabel");

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    libGDHL_gv_lostVikingsUI.lv_lostVikingsBaleogBehaviorChannelBarBehaviorLabel = DialogControlLastCreated();

    lv_currentPanelLayer -= 1;

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "LostVikingsErikBehaviorChannelBarFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatusDurationBar, "LostVikingsBehaviorChannelBar");

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarDurationBar = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "LostVikingsBehaviorChannelBar/ChannelNameLabel");

    DialogControlSetObservedType(DialogControlLastCreated(), c_triggerObservedTypeObservedPlayerId);

    libGDHL_gv_lostVikingsUI.lv_lostVikingsErikBehaviorChannelBarBehaviorLabel = DialogControlLastCreated();

    lv_currentPanelLayer -= 1;

    lv_currentPanelLayer -= 1;

    DialogControlCreateInPanelFromTemplate(libUIUI_gv_heroSpecificFullUIModContainer, c_triggerControlTypePanel, "LostVikings/LostVikingsHeroStatsFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_lostVikingsUI.lv_heroStatsFrame = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "ErikUnitStatusFrame");

    libGDHL_gv_lostVikingsUI.lv_erikUnitStatusFrame = DialogControlLastCreated();

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "UnitNameLabel/Label");

    libGDHL_gv_lostVikingsUI.lv_erikNameLabel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "HealthBarLabel/StatusLabel");

    libGDHL_gv_lostVikingsUI.lv_erikHPLabel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "DownedLabel");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    libGDHL_gv_lostVikingsUI.lv_erikDownedLabel = DialogControlLastCreated();

    lv_currentPanelLayer -= 1;

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "BaleogUnitStatusFrame");

    libGDHL_gv_lostVikingsUI.lv_baleogUnitStatusFrame = DialogControlLastCreated();

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "UnitNameLabel/Label");

    libGDHL_gv_lostVikingsUI.lv_baleogNameLabel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "HealthBarLabel/StatusLabel");

    libGDHL_gv_lostVikingsUI.lv_baleogHPLabel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "DownedLabel");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    libGDHL_gv_lostVikingsUI.lv_baleogDownedLabel = DialogControlLastCreated();

    lv_currentPanelLayer -= 1;

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "OlafUnitStatusFrame");

    libGDHL_gv_lostVikingsUI.lv_olafUnitStatusFrame = DialogControlLastCreated();

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "UnitNameLabel/Label");

    libGDHL_gv_lostVikingsUI.lv_olafNameLabel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "HealthBarLabel/StatusLabel");

    libGDHL_gv_lostVikingsUI.lv_olafHPLabel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "DownedLabel");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    libGDHL_gv_lostVikingsUI.lv_olafDownedLabel = DialogControlLastCreated();

    lv_currentPanelLayer -= 1;

    lv_currentPanelLayer -= 1;

    DialogControlHookupStandard(c_triggerControlTypeImage, "UIContainer/ConsoleUIContainer/ControlGroupPanel/ControlGroupButton0/ControlGroupStatusFrame");

    libGDHL_gv_lostVikingsUI.lv_olafDeathStatusFrame = DialogControlLastCreated();

    DialogControlHookupStandard(c_triggerControlTypeImage, "UIContainer/ConsoleUIContainer/ControlGroupPanel/ControlGroupButton1/ControlGroupStatusFrame");

    libGDHL_gv_lostVikingsUI.lv_baleogDeathStatusFrame = DialogControlLastCreated();

    DialogControlHookupStandard(c_triggerControlTypeImage, "UIContainer/ConsoleUIContainer/ControlGroupPanel/ControlGroupButton2/ControlGroupStatusFrame");

    libGDHL_gv_lostVikingsUI.lv_erikDeathStatusFrame = DialogControlLastCreated();

    DialogControlHookupStandard(c_triggerControlTypeImage, "UIContainer/ConsoleUIContainer/ControlGroupPanel/ControlGroupButton3/ControlGroupStatusFrame");

    libGDHL_gv_lostVikingsUI.lv_allDeathStatusFrame = DialogControlLastCreated();

    TriggerEnable(libGDHL_gt_LostVikingsUIUpdate, true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LostVikingsUIInitialize_Init () {

    libGDHL_gt_LostVikingsUIInitialize = TriggerCreate("libGDHL_gt_LostVikingsUIInitialize_Func");

    libCore_gf_IncludeModInitialization(libGDHL_gt_LostVikingsUIInitialize);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Lost Vikings UI Update

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LostVikingsUIUpdate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itLostVikingsPlayer;



    // Automatic Variable Declarations

    int auto929639CD_ae;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    auto929639CD_ae = libCore_gv_bALMaxPlayers;

    lv_itLostVikingsPlayer = 1;

    for ( ; lv_itLostVikingsPlayer <= auto929639CD_ae ; lv_itLostVikingsPlayer += 1 ) {

        if ((UnitGetType(libGame_gv_players[lv_itLostVikingsPlayer].lv_heroUnit) != "HeroLostVikingsController")) {

            continue;

        }



        libGDHL_gf_LostVikingsUIUpdateAllSelectionDownedStatusForPlayer(lv_itLostVikingsPlayer);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LostVikingsUIUpdate_Init () {

    libGDHL_gt_LostVikingsUIUpdate = TriggerCreate("libGDHL_gt_LostVikingsUIUpdate_Func");

    TriggerEnable(libGDHL_gt_LostVikingsUIUpdate, false);

    TriggerAddEventTimePeriodic(libGDHL_gt_LostVikingsUIUpdate, 0.0625, c_timeGame);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Lost Vikings UI Clean Up UI For Debug Hero Swap

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LostVikingsUICleanUpUIForDebugHeroSwap_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = libGame_gf_DebugHeroSwappedPlayer();

    if ((libGame_gv_players[lv_player].lv_heroIndex != libCore_gf_GetHeroIndexForUnitType("HeroLostVikingsController"))) {

        libGDHL_gf_LostVikingsUIUnSetupUIForPlayer(lv_player);

    }



    libAIAI_gf_HeroAILostVikingsClearDebuggingUI(lv_player);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LostVikingsUICleanUpUIForDebugHeroSwap_Init () {

    libGDHL_gt_LostVikingsUICleanUpUIForDebugHeroSwap = TriggerCreate("libGDHL_gt_LostVikingsUICleanUpUIForDebugHeroSwap_Func");

    libGame_gf_DebugHeroSwapped(libGDHL_gt_LostVikingsUICleanUpUIForDebugHeroSwap);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Lost Vikings Console Unit Status Bars Channel Behavior Added

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_LostVikingsConsoleUnitStatusBarsChannelBehaviorAdded_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_heroUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((EventPlayer() >= 1))) {

            return false;

        }



        if (!((EventPlayer() <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((CatalogFieldValueGetAsInt(c_gameCatalogBehavior, EventUnitBehavior(), "BehaviorCategories[Restorable]", c_playerAny) == 1))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayer();

    if ((UnitGetType(EventUnit()) != "HeroErik") && (UnitGetType(EventUnit()) != "HeroBaleog") && (UnitGetType(EventUnit()) != "HeroOlaf")) {

        return true;

    }



    libGDHL_gf_LostVikingsConsoleUnitStatusBarsSetChannelBehaviorForBehaviorChannelBar(lv_player, EventUnitBehavior(), EventUnit());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_LostVikingsConsoleUnitStatusBarsChannelBehaviorAdded_Init () {

    libGDHL_gt_LostVikingsConsoleUnitStatusBarsChannelBehaviorAdded = TriggerCreate("libGDHL_gt_LostVikingsConsoleUnitStatusBarsChannelBehaviorAdded_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_LostVikingsConsoleUnitStatusBarsChannelBehaviorAdded, null, null, c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Malfurion - Twilight Dream - Silence Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetUnit;

    int lv_owner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_targetUnit = EventUnit();

    lv_owner = UnitGetOwner(lv_targetUnit);



    // Conditions

    if (testConds) {

        if (!((lv_owner > 0))) {

            return false;

        }



        if (!((lv_owner <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitTypeTestAttribute(UnitGetType(lv_targetUnit), c_unitAttributeHeroic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libUIUI_gf_UILowHPSetSoundChannelsForSilence(lv_owner);

    SoundPlayForPlayer(SoundLink("Malfurion_TwilightDream_Loop", -1), lv_owner, libCore_gv_playerGroupFromPlayer[lv_owner], 100.0, 0.0);

    Wait(5.0, c_timeGame);

    SoundStop(SoundLastPlayed(), true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget_Init () {

    libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget = TriggerCreate("libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget_Func");

    TriggerEnable(libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget, null, "TwilightDreamSilence", c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget, null, "TwilightDreamSilence", c_unitBehaviorChangeRefresh);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Malfurion - Twilight Dream - Silence End

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMalfurionTwilightDreamSilenceEnd_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetUnit;

    int lv_owner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_targetUnit = EventUnit();

    lv_owner = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!((lv_owner > 0))) {

            return false;

        }



        if (!((lv_owner <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitTypeTestAttribute(UnitGetType(lv_targetUnit), c_unitAttributeHeroic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libUIUI_gf_UILowHPSetSoundChannelsForNormal(lv_owner);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMalfurionTwilightDreamSilenceEnd_Init () {

    libGDHL_gt_HeroMalfurionTwilightDreamSilenceEnd = TriggerCreate("libGDHL_gt_HeroMalfurionTwilightDreamSilenceEnd_Func");

    TriggerEnable(libGDHL_gt_HeroMalfurionTwilightDreamSilenceEnd, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMalfurionTwilightDreamSilenceEnd, null, "TwilightDreamSilence", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Malfurion - Innervate CDR

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMalfurionInnervateCDR_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_cDRAmount;

    int lv_itAbility;

    unit lv_hero;

    int lv_heroIndex;

    string lv_abilLink;

    string lv_cooldownLink;

    fixed lv_currentCooldownAmount;

    fixed lv_newCooldownAmount;

    string lv_chargeLink;

    fixed lv_currentChargeAmount;

    fixed lv_newChargeAmount;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_cDRAmount = -0.5;

    lv_cooldownLink = "";

    lv_chargeLink = "";



    // Actions

    if (!runActions) {

        return true;

    }



    lv_hero = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    libGame_gf_StormUniversalModifyCooldownonUnitCDRforAbilities(lv_hero, lv_cDRAmount, false, false, false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMalfurionInnervateCDR_Init () {

    libGDHL_gt_HeroMalfurionInnervateCDR = TriggerCreate("libGDHL_gt_HeroMalfurionInnervateCDR_Func");

    TriggerEnable(libGDHL_gt_HeroMalfurionInnervateCDR, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMalfurionInnervateCDR, c_playerAny, "MalfurionInnervateModifyUnitDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Malfurion - Tenacious Roots Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMalfurionTenaciousRootsProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "MalfurionMasteryTenaciousRootsEntanglingRoots") == true))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroMalfurion"))) {

            return false;

        }



        if (!((UnitHasBehaviorWithCategoryFlag(lv_unit, c_behaviorCategoryBuffUnstoppable) == false))) {

            return false;

        }



        if (!((UnitHasBehaviorWithCategoryFlag(lv_unit, c_behaviorCategoryInvulnerable) == false))) {

            return false;

        }



        if (!((UnitIsAlive(lv_unit) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_unit, "MalfurionEntanglingRootsTenaciousRootsApplyCooldownBehavior", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMalfurionTenaciousRootsProc_Init () {

    libGDHL_gt_HeroMalfurionTenaciousRootsProc = TriggerCreate("libGDHL_gt_HeroMalfurionTenaciousRootsProc_Func");

    TriggerEnable(libGDHL_gt_HeroMalfurionTenaciousRootsProc, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroMalfurionTenaciousRootsProc, null, c_behaviorCategoryStun, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroMalfurionTenaciousRootsProc, null, c_behaviorCategoryStun, c_unitBehaviorChangeRefresh);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Healing Beam UI Initialize

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HealingBeamUIInitialize_Func (bool testConds, bool runActions) {

    int init_i;



    // Variable Declarations

    int[6] lv_panels;

    int lv_currentPanelLayer;



    // Automatic Variable Declarations

    // Variable Initialization

    for (init_i = 0; init_i <= 5; init_i += 1) {

        lv_panels[init_i] = c_invalidDialogControlId;

    }



    // Actions

    if (!runActions) {

        return true;

    }



    DialogControlHookup(libUIUI_gv_heroSpecificStatusContainer, c_triggerControlTypeImage, "MedicFrame/UnitStatusFrame0/MechanicTexture");

    libGDHL_gv_healingBeamUI.lv_healingBeamTargetPortrait = DialogControlLastCreated();

    DialogControlHookup(libUIUI_gv_heroSpecificStatusContainer, c_triggerControlTypeLabel, "MedicFrame/UnitStatusFrame0/MedicHealingBeamName");

    libGDHL_gv_healingBeamUI.lv_healingBeamTargetDisplayName = DialogControlLastCreated();

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HealingBeamUIInitialize_Init () {

    libGDHL_gt_HealingBeamUIInitialize = TriggerCreate("libGDHL_gt_HealingBeamUIInitialize_Func");

    libCore_gf_IncludeModInitialization(libGDHL_gt_HealingBeamUIInitialize);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Medic UI Initialize

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_MedicUIInitialize_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    DialogControlHookup(libUIUI_gv_fullscreenStatusPanel, c_triggerControlTypePanel, "MedivacAlert");

    libGDHL_gv_medicUI.lv_medivacAlert = DialogControlLastCreated();

    DialogControlHookup(libGDHL_gv_medicUI.lv_medivacAlert, c_triggerControlTypeLabel, "DepartSecondsLabel");

    libGDHL_gv_medicUI.lv_medivacCountdownNumber = DialogControlLastCreated();

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_MedicUIInitialize_Init () {

    libGDHL_gt_MedicUIInitialize = TriggerCreate("libGDHL_gt_MedicUIInitialize_Func");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Stim Drone Fullscreen Overlay On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOn_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_MedicStimDroneOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOn_Init () {

    libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOn = TriggerCreate("libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOn_Func");

    TriggerEnable(libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOn, null, "MedicStimDroneAttackSpeedBuff", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Stim Drone Fullscreen Overlay Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_MedicStimDroneOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff_Init () {

    libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff = TriggerCreate("libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff_Func");

    TriggerEnable(libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff, null, "MedicStimDroneAttackSpeedBuff", c_unitBehaviorChangeDestroy);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff, null, "MedicStimDroneAttackSpeedBuff", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Dropship Created

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacDropshipCreated_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_medic;

    unit lv_dropship;

    point lv_positionOfMedivac;

    unit lv_dropshipBeacon;

    point lv_positionOfBeacon;

    int lv_medicPlayer;

    int lv_medicPlayerTeam;

    playergroup lv_alliedPlayersAnnouncementGroup;

    int lv_localPathDisplay;

    fixed lv_acceptingPassengersDuration;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_medic = EventUnit();

    lv_dropship = EventUnitCreatedUnit();

    lv_positionOfMedivac = UnitGetPosition(lv_dropship);

    lv_medicPlayer = UnitGetOwner(lv_medic);

    lv_medicPlayerTeam = libGame_gf_TeamNumberOfPlayer(lv_medicPlayer);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_dropship) == "MedicMedivacDropship"))) {

            return false;

        }



        if (!((UnitIsAlive(lv_medic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_dropshipBeacon = UnitGroupUnit(UnitGetTrackedUnitGroup(lv_dropship, "MedicMedivacBeaconTrackerBehavior"), 1);

    lv_positionOfBeacon = UnitGetPosition(lv_dropshipBeacon);

    lv_alliedPlayersAnnouncementGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_medicPlayer);

    PlayerGroupRemove(lv_alliedPlayersAnnouncementGroup, lv_medicPlayer);

    if ((EventUnitCreatedAbil() == "MedicMedivacDropship")) {

        UnitPutInTransport(lv_medic, lv_dropship);

    }



    libNtve_gf_MakeUnitFacePoint(lv_dropship, UnitGetPosition(lv_dropshipBeacon), 0.0);

    if ((UnitHasBehavior2(lv_dropship, "MedicMedivacDropshipReinforcementsTalentDropshipBehavior") == false)) {

        UnitSelect(lv_medic, lv_medicPlayer, false);

        UnitSelect(lv_dropship, lv_medicPlayer, true);

        libUIUI_gf_UIHeroConsoleSetUpForPlayer(lv_dropship, lv_medicPlayer);

        libUIUI_gf_HeroConsoleUnitStatusBarsSetUnitForBars(lv_dropship, lv_medicPlayer);

        UIDisplayMessage(lv_alliedPlayersAnnouncementGroup, c_messageAreaChat, StringExternal("Param/Value/lib_GDHL_8F5B2805"));

    }

    else {

        UIDisplayMessage(lv_alliedPlayersAnnouncementGroup, c_messageAreaChat, StringExternal("Param/Value/lib_GDHL_E848DA65"));

    }

    libCore_gf_CreateMinimapPingStorm(libGame_gv_teams[lv_medicPlayerTeam].lv_teamPlayerGroupNoNPCPlayers, "MedivacAlert", lv_positionOfMedivac, Color(0.00, 0.00, 100.00), 2.0);

    libCore_gf_CreateMinimapPingStorm(libGame_gv_teams[lv_medicPlayerTeam].lv_teamPlayerGroupNoNPCPlayers, "StormObjective", lv_positionOfBeacon, ColorWithAlpha(0,0,0,0), 8.0);

    PathCreateForUnit(libGame_gv_teams[lv_medicPlayerTeam].lv_teamPlayerGroupNoNPCPlayers, lv_dropship);

    lv_localPathDisplay = PathLastCreated();

    PathSetDestinationPoint(lv_localPathDisplay, lv_positionOfBeacon);

    PathSetVisible(PathLastCreated(), c_pathLocationWorld, false);

    PathSetDestinationUnit(lv_localPathDisplay, lv_dropshipBeacon);

    PathSetLineTexture(lv_localPathDisplay, c_pathLocationAll, "Assets\\Textures\\storm_waypointline.dds");

    UIDisplayMessage(libGame_gv_teams[libGame_gf_EnemyTeamNumberOfPlayer(lv_medicPlayer)].lv_teamPlayerGroupNoNPCPlayers, c_messageAreaChat, StringExternal("Param/Value/lib_GDHL_14ED487B"));

    AIAddPortal(libGame_gf_ComputerPlayerInFaction(libGame_gv_players[lv_medicPlayer].lv_faction), lv_dropship, lv_dropshipBeacon, 0.5, 9.0, "SmartCommandUnitInteraction", null);

    while ((UnitIsAlive(lv_dropship) == true) && (UnitHasBehavior2(lv_dropship, "MedicMedivacDropshipFinalDepartureDelay") == false)) {

        Wait(0.0625, c_timeGame);

    }

    PathDestroy(lv_localPathDisplay);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacDropshipCreated_Init () {

    libGDHL_gt_HeroMedicMedivacDropshipCreated = TriggerCreate("libGDHL_gt_HeroMedicMedivacDropshipCreated_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipCreated, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroMedicMedivacDropshipCreated, null, "MedicMedivacDropship", null);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroMedicMedivacDropshipCreated, null, "MedicReinforcements", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Dropship En Route Orders

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacDropshipEnRouteOrders_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_dropship;

    int lv_player;

    point lv_medivacPoint;

    unit lv_dropshipBeacon;

    point lv_positionOfBeacon;

    unit lv_itCargoUnit;



    // Automatic Variable Declarations

    unitgroup auto6F5F367E_g;

    int auto6F5F367E_u;



    // Variable Initialization

    lv_dropship = EventUnit();

    lv_player = UnitGetOwner(lv_dropship);

    lv_medivacPoint = UnitGetPosition(lv_dropship);

    lv_dropshipBeacon = UnitGroupUnit(UnitGetTrackedUnitGroup(lv_dropship, "MedicMedivacBeaconTrackerBehavior"), 1);

    lv_positionOfBeacon = UnitGetPosition(lv_dropshipBeacon);



    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_MakeUnitFacePoint(lv_dropship, UnitGetPosition(lv_dropshipBeacon), 0.0);

    UnitCreateEffectPoint(lv_dropship, "MedicMedivacDropshipLaunchMissile", UnitGetPosition(lv_dropshipBeacon));

    UnitBehaviorAdd(lv_dropship, "MedicMedivacDropshipUncommandable", lv_dropship, 1);

    AIRemovePortal(lv_dropship);

    if ((DistanceBetweenPoints(lv_medivacPoint, lv_positionOfBeacon) > 20.0)) {

        libNtve_gf_SendActorMessageToUnit(lv_dropship, "AnimPlay Spell Spell,B NonLooping");

    }



    auto6F5F367E_g = UnitCargoGroup(lv_dropship);

    auto6F5F367E_u = UnitGroupCount(auto6F5F367E_g, c_unitCountAll);

    for (;; auto6F5F367E_u -= 1) {

        lv_itCargoUnit = UnitGroupUnitFromEnd(auto6F5F367E_g, auto6F5F367E_u);

        if (lv_itCargoUnit == null) { break; }

        libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI(false, UnitGetOwner(lv_itCargoUnit));

    }

    UnitCreateEffectPoint(lv_dropship, "MedicMedivacDropshipDestinationDecelerationPersistent", lv_positionOfBeacon);

    UnitCreateEffectUnit(lv_dropship, "MedicMedivacDropshipRemoveHonkClickResponse", lv_dropship);

    while ((UnitIsAlive(lv_dropship) == true) && (UnitBehaviorCount(lv_dropship, "MedicMedivacDropshipEnRoute") == 1)) {

        lv_medivacPoint = UnitGetPosition(lv_dropship);

        if ((DistanceBetweenPoints(lv_medivacPoint, lv_positionOfBeacon) <= 5.0)) {

            UnitBehaviorRemove(lv_dropship, "MedicMedivacDropshipDepartureAscent", 1);

        }



        if ((DistanceBetweenPoints(lv_medivacPoint, lv_positionOfBeacon) <= 1.0)) {

            UnitBehaviorSetDurationRemaining(lv_dropship, "MedicMedivacDropshipDropoffLocationTimedLife", 0.0);

            UnitBehaviorRemove(lv_dropship, "MedicMedivacDropshipEnRoute", 1);

        }



        Wait(0.0625, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacDropshipEnRouteOrders_Init () {

    libGDHL_gt_HeroMedicMedivacDropshipEnRouteOrders = TriggerCreate("libGDHL_gt_HeroMedicMedivacDropshipEnRouteOrders_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipEnRouteOrders, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMedicMedivacDropshipEnRouteOrders, null, "MedicMedivacDropshipDepartureAscent", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Dropship Death Cleanup

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacDropshipDeathCleanup_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_dropship;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_dropship = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_dropship) == "MedicMedivacDropship"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGroupCount(UnitGetTrackedUnitGroup(lv_dropship, "MedicMedivacBeaconTrackerBehavior"), c_unitCountAlive) > 0)) {

        UnitKill(UnitGroupUnit(UnitGetTrackedUnitGroup(lv_dropship, "MedicMedivacBeaconTrackerBehavior"), 1));

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacDropshipDeathCleanup_Init () {

    libGDHL_gt_HeroMedicMedivacDropshipDeathCleanup = TriggerCreate("libGDHL_gt_HeroMedicMedivacDropshipDeathCleanup_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipDeathCleanup, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroMedicMedivacDropshipDeathCleanup, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Dropship Load Event

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacDropshipLoadEvent_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_cargoUnit;

    unit lv_medivac;

    int lv_cargoAmt;

    playergroup lv_pipPlayerGroup;

    int lv_itPlayer;

    int lv_itPip;



    // Automatic Variable Declarations

    unitgroup autoFD3CF396_g;

    int autoFD3CF396_u;

    unit autoFD3CF396_var;

    playergroup auto76C240DB_g;

    int auto94E6FF96_ae;

    const int auto94E6FF96_ai = 1;



    // Variable Initialization

    lv_cargoUnit = EventUnitCargo();

    lv_medivac = EventUnit();

    lv_pipPlayerGroup = PlayerGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_medivac) == "MedicMedivacDropship"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gf_SendEventHeroEnteredTransport(UnitGetOwner(lv_cargoUnit), lv_medivac, lv_cargoUnit);

    if ((UnitGetType(libGame_gv_players[UnitGetOwner(lv_cargoUnit)].lv_heroUnit) != "HeroLostVikingsController")) {

        libGame_gv_players[UnitGetOwner(lv_cargoUnit)].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_medivac);

        libGame_gf_CameraUpdateCameraForPlayer(UnitGetOwner(lv_cargoUnit));

        if ((UnitGetOwner(lv_medivac) != UnitGetOwner(lv_cargoUnit))) {

            libNtve_gf_StoreUnitSelection(UnitGetOwner(lv_cargoUnit), libNtve_ge_UnitSelectionStoreOption_ClearUnitSelection);

        }

        else {

            AIAddPlayerUnit(lv_medivac);

        }

    }



    if (((libGame_gv_players[UnitGetOwner(lv_cargoUnit)].lv_activeVehicle != null) && (UnitGetType(libGame_gv_players[UnitGetOwner(lv_cargoUnit)].lv_heroUnit) == "HeroAbathur"))) {

        TransmissionSendForPlayerSelect(PlayerGroupSingle(UnitGetOwner(lv_cargoUnit)), TransmissionSourceFromUnit(libGame_gv_players[UnitGetOwner(lv_cargoUnit)].lv_activeVehicle, false, true, ""), PortraitGetGame(), "", "Stand", null, StringExternal("Param/Value/lib_GDHL_4FE2EF61"), StringToText(""), 60.0, c_transmissionDurationAdd, false, c_maxPlayers, false);

        libGDHL_gv_medivacTransmissionPortraitOverride[UnitGetOwner(lv_cargoUnit)] = TransmissionLastSent();

    }

    else {

        TransmissionSendForPlayerSelect(PlayerGroupSingle(UnitGetOwner(lv_cargoUnit)), TransmissionSourceFromUnit(libGame_gv_players[UnitGetOwner(lv_cargoUnit)].lv_heroUnit, false, true, ""), PortraitGetGame(), "", "Stand", null, StringExternal("Param/Value/lib_GDHL_8F93019A"), StringToText(""), 60.0, c_transmissionDurationAdd, false, c_maxPlayers, false);

        libGDHL_gv_medivacTransmissionPortraitOverride[UnitGetOwner(lv_cargoUnit)] = TransmissionLastSent();

    }

    lv_cargoAmt = UnitGroupCount(UnitCargoGroup(lv_medivac), c_unitCountAlive);

    autoFD3CF396_g = UnitCargoGroup(lv_medivac);

    autoFD3CF396_u = UnitGroupCount(autoFD3CF396_g, c_unitCountAll);

    for (;; autoFD3CF396_u -= 1) {

        autoFD3CF396_var = UnitGroupUnitFromEnd(autoFD3CF396_g, autoFD3CF396_u);

        if (autoFD3CF396_var == null) { break; }

        PlayerGroupAdd(lv_pipPlayerGroup, UnitGetOwner(autoFD3CF396_var));

    }

    auto76C240DB_g = lv_pipPlayerGroup;

    lv_itPlayer = -1;

    while (true) {

        	lv_itPlayer = PlayerGroupNextPlayer(auto76C240DB_g, lv_itPlayer);

        	if (lv_itPlayer<0) { break; }

        	auto94E6FF96_ae = lv_cargoAmt;

        lv_itPip = 1;

        for ( ; ( (auto94E6FF96_ai >= 0 && lv_itPip <= auto94E6FF96_ae) || (auto94E6FF96_ai < 0 && lv_itPip >= auto94E6FF96_ae) ) ; lv_itPip += auto94E6FF96_ai ) {

            DialogControlSendAnimationEvent(libGDHL_gv_medicUI.lv_medivacAlert, libCore_gv_playerGroupFromPlayer[lv_itPlayer], ("Pip" + IntToString(lv_itPip)));

        }

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacDropshipLoadEvent_Init () {

    libGDHL_gt_HeroMedicMedivacDropshipLoadEvent = TriggerCreate("libGDHL_gt_HeroMedicMedivacDropshipLoadEvent_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipLoadEvent, false);

    TriggerAddEventUnitCargo(libGDHL_gt_HeroMedicMedivacDropshipLoadEvent, null, true);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Dropship Unload Event

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacDropshipUnloadEvent_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_dropship;

    unit lv_cargoUnit;

    int lv_cargoPlayer;

    string lv_typeOfCargoUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_dropship = EventUnit();

    lv_cargoUnit = EventUnitCargo();

    lv_cargoPlayer = UnitGetOwner(lv_cargoUnit);

    lv_typeOfCargoUnit = UnitGetType(lv_cargoUnit);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_dropship) == "MedicMedivacDropship"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((lv_typeOfCargoUnit != "HeroLostVikingsController") && (lv_typeOfCargoUnit != "HeroSamuro")) {

        libGame_gv_players[lv_cargoPlayer].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[lv_cargoPlayer].lv_heroUnitGroup;

        libGame_gf_CameraUpdateCameraForPlayer(lv_cargoPlayer);

        if (((lv_cargoUnit == libGame_gv_players[lv_cargoPlayer].lv_heroUnit) || (UnitGroupHasUnit(libGame_gv_players[lv_cargoPlayer].lv_heroUnitGroup, lv_cargoUnit) == true))) {

            UnitSelect(lv_dropship, lv_cargoPlayer, false);

            UnitSelect(libGame_gv_players[lv_cargoPlayer].lv_heroUnit, lv_cargoPlayer, true);

            libNtve_gf_RestoreUnitSelection(lv_cargoPlayer);

        }

        else {

            if ((lv_cargoUnit == libGame_gv_players[lv_cargoPlayer].lv_activeVehicle)) {

                UnitSelect(lv_dropship, lv_cargoPlayer, false);

                UnitSelect(libGame_gv_players[lv_cargoPlayer].lv_activeVehicle, lv_cargoPlayer, true);

            }



        }

        if ((lv_cargoPlayer == UnitGetOwner(lv_dropship)) && (lv_typeOfCargoUnit == "HeroMedic")) {

            libUIUI_gf_UIHeroConsoleSetUpForPlayer(libGame_gv_players[lv_cargoPlayer].lv_heroUnit, lv_cargoPlayer);

            libUIUI_gf_HeroConsoleUnitStatusBarsSetUnitForBars(libGame_gv_players[lv_cargoPlayer].lv_heroUnit, lv_cargoPlayer);

            libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI(false, lv_cargoPlayer);

            AIRemovePlayerUnit(lv_dropship);

        }



    }



    if ((libNtve_gf_UnitIsInsideTransport(libGame_gv_players[lv_cargoPlayer].lv_heroUnit) == true)) {

        libGame_gv_players[lv_cargoPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(UnitTransport(libGame_gv_players[lv_cargoPlayer].lv_heroUnit));

        libGame_gf_CameraUpdateCameraForPlayer(lv_cargoPlayer);

    }



    TransmissionClear(libGDHL_gv_medivacTransmissionPortraitOverride[lv_cargoPlayer]);

    libGame_gf_SendEventHeroExitedTransport(lv_cargoPlayer, lv_dropship);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacDropshipUnloadEvent_Init () {

    libGDHL_gt_HeroMedicMedivacDropshipUnloadEvent = TriggerCreate("libGDHL_gt_HeroMedicMedivacDropshipUnloadEvent_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipUnloadEvent, false);

    TriggerAddEventUnitCargo(libGDHL_gt_HeroMedicMedivacDropshipUnloadEvent, null, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Dropship Rejoin Hide Medivac UI

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacDropshipRejoinHideMedivacUI_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = EventPlayer();



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI(false, lv_player);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacDropshipRejoinHideMedivacUI_Init () {

    libGDHL_gt_HeroMedicMedivacDropshipRejoinHideMedivacUI = TriggerCreate("libGDHL_gt_HeroMedicMedivacDropshipRejoinHideMedivacUI_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipRejoinHideMedivacUI, false);

    TriggerAddEventPlayerJoin(libGDHL_gt_HeroMedicMedivacDropshipRejoinHideMedivacUI, c_playerAny);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Dropship Overlay

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacDropshipOverlay_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    int lv_ownerOfTransport;

    string lv_triggeringBehavior;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);

    lv_ownerOfTransport = UnitGetOwner(UnitTransport(lv_unit));

    lv_triggeringBehavior = EventUnitBehavior();



    // Conditions

    if (testConds) {

        if (!((UnitTestState(lv_unit, c_unitStateHallucination) == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    SoundPlayForPlayer(SoundLink("Medic_MedivacDropship_2D_On", -1), c_maxPlayers, PlayerGroupSingle(lv_player), 100.0, 0.0);

    SoundPlayForPlayer(SoundLink("Medic_MedivacDropship_2D_BG", -1), c_maxPlayers, PlayerGroupSingle(lv_player), 100.0, 0.0);

    if (((PlayerSkin(lv_ownerOfTransport) == "MedicSkinLove") || (PlayerSkin(lv_ownerOfTransport) == "MedicSkinLoveVar1") || (PlayerSkin(lv_ownerOfTransport) == "MedicSkinLoveVar2"))) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(lv_player, libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_MedivacLoveOverlay.StormCutscene", lv_triggeringBehavior);

    }

    else if (((PlayerSkin(lv_ownerOfTransport) == "MedicEnforcerVar4") || (PlayerSkin(lv_ownerOfTransport) == "MedicEnforcer") || (PlayerSkin(lv_ownerOfTransport) == "MedicEnforcerVar3") || (PlayerSkin(lv_ownerOfTransport) == "MedicEnforcerVar1"))) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(lv_player, libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_MedivacEnforcerOverlay.StormCutscene", lv_triggeringBehavior);

    }

    else if (true) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(lv_player, libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_MedivacOverlay.StormCutscene", lv_triggeringBehavior);

    }

    libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI(true, lv_player);

    while ((UnitHasBehavior2(lv_unit, "MedicInsideMedivacDropship") == true)) {

        Wait(0.0625, c_timeGame);

    }

    SoundStop(SoundLastPlayed(), true);

    SoundPlayForPlayer(SoundLink("Medic_MedivacDropship_2D_Off", -1), c_maxPlayers, PlayerGroupSingle(lv_player), 100.0, 0.0);

    libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(lv_player, "Cutscenes\\GameUI_MedivacEnforcerOverlay.StormCutscene", lv_triggeringBehavior);

    libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(lv_player, "Cutscenes\\GameUI_MedivacLoveOverlay.StormCutscene", lv_triggeringBehavior);

    libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(lv_player, "Cutscenes\\GameUI_MedivacOverlay.StormCutscene", lv_triggeringBehavior);

    libGDHL_gf_UIHeroSpecificStatusFrameShowHideMedivacUI(false, lv_player);

    if ((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) != "HeroLostVikingsController")) {

        libGame_gf_CameraPanCameraForPlayerAndUpdateMapBoundsIfNecessary(lv_player, UnitGetPosition(lv_unit), 0.0, -1, 0.0, false);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacDropshipOverlay_Init () {

    libGDHL_gt_HeroMedicMedivacDropshipOverlay = TriggerCreate("libGDHL_gt_HeroMedicMedivacDropshipOverlay_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipOverlay, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMedicMedivacDropshipOverlay, null, "MedicInsideMedivacDropship", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Dropship Countdown Sound

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacDropshipCountdownSound_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_itUnit;

    playergroup lv_playersInVac;

    string lv_triggeringEffect;

    unit lv_dropship;



    // Automatic Variable Declarations

    unitgroup auto1F71FD26_g;

    int auto1F71FD26_u;



    // Variable Initialization

    lv_playersInVac = PlayerGroupEmpty();

    lv_triggeringEffect = EventPlayerEffectUsed();

    lv_dropship = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    auto1F71FD26_g = UnitCargoGroup(lv_dropship);

    auto1F71FD26_u = UnitGroupCount(auto1F71FD26_g, c_unitCountAll);

    for (;; auto1F71FD26_u -= 1) {

        lv_itUnit = UnitGroupUnitFromEnd(auto1F71FD26_g, auto1F71FD26_u);

        if (lv_itUnit == null) { break; }

        if ((PlayerGroupHasPlayer(lv_playersInVac, UnitGetOwner(lv_itUnit)) == false)) {

            PlayerGroupAdd(lv_playersInVac, UnitGetOwner(lv_itUnit));

        }



    }

    if ((lv_triggeringEffect == "MedicMedivacDropshipCountdownSound")) {

        SoundPlayForPlayer(SoundLink("Medic_MedivacDropship_2D_Warning_Beep_Regular", -1), c_maxPlayers, lv_playersInVac, 100.0, 0.0);

    }

    else {

        SoundPlayForPlayer(SoundLink("Medic_MedivacDropship_2D_Warning_Beep_OneSecond", -1), c_maxPlayers, lv_playersInVac, 100.0, 0.0);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacDropshipCountdownSound_Init () {

    libGDHL_gt_HeroMedicMedivacDropshipCountdownSound = TriggerCreate("libGDHL_gt_HeroMedicMedivacDropshipCountdownSound_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacDropshipCountdownSound, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMedicMedivacDropshipCountdownSound, c_playerAny, "MedicMedivacDropshipCountdownSound");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMedicMedivacDropshipCountdownSound, c_playerAny, "MedicMedivacDropshipCountdownSoundFinal");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Being Boarded

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacBeingBoarded_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Conditions

    if (testConds) {

        if (!((UnitIsAlive(lv_caster) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_caster, "MedicMedivacDropshipBoarding", EventPlayerEffectUsedUnit(c_effectUnitTarget), 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacBeingBoarded_Init () {

    libGDHL_gt_HeroMedicMedivacBeingBoarded = TriggerCreate("libGDHL_gt_HeroMedicMedivacBeingBoarded_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacBeingBoarded, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMedicMedivacBeingBoarded, c_playerAny, "MedicMedivacDropshipSmartCommandCreatePersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Medivac Game Over Hide

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicMedivacGameOverHide_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    DialogControlSetVisible(libGDHL_gv_medicUI.lv_medivacAlert, PlayerGroupAll(), false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicMedivacGameOverHide_Init () {

    libGDHL_gt_HeroMedicMedivacGameOverHide = TriggerCreate("libGDHL_gt_HeroMedicMedivacGameOverHide_Func");

    TriggerEnable(libGDHL_gt_HeroMedicMedivacGameOverHide, false);

    libGame_gf_ClearHeroSpecificUI(libGDHL_gt_HeroMedicMedivacGameOverHide);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Healing Beam Target Actions

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicHealingBeamTargetActions_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_medic;

    unit lv_target;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_medic = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitFilterMatch(lv_target, UnitGetOwner(lv_target), UnitFilter((1 << c_targetFilterHeroic), 0, (1 << c_targetFilterEnemy) | (1 << c_targetFilterImmuneToFriendlyAbilities) | (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true)) {

        libGDHL_gf_MedicUIHealingBeam(false, UnitGetOwner(lv_medic), lv_target);

    }

    else {

        libGDHL_gf_MedicUIHealingBeam(true, UnitGetOwner(lv_medic), lv_target);

    }

    Wait(0.125, c_timeGame);

    libNtve_gf_MakeUnitLookAtUnit(lv_medic, "RobotArmsOnly", lv_target, "Ref_Center");

    while (!((UnitBehaviorCount(lv_medic, "MedicCastingHealingBeamBuff") == 0))) {

        Wait(0.0625, c_timeGame);

    }

    libNtve_gf_SimpleLookAtStop(lv_medic, "RobotArmsOnly");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicHealingBeamTargetActions_Init () {

    libGDHL_gt_HeroMedicHealingBeamTargetActions = TriggerCreate("libGDHL_gt_HeroMedicHealingBeamTargetActions_Func");

    TriggerEnable(libGDHL_gt_HeroMedicHealingBeamTargetActions, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMedicHealingBeamTargetActions, c_playerAny, "MedicHealingBeamCreatePersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Healing Beam UI Reset

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicHealingBeamUIReset_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_medic;

    unit lv_target;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_medic = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    Wait(0.0625, c_timeGame);

    if ((UnitBehaviorCount(lv_medic, "MedicCastingHealingBeamBuff") == 1)) {

    }

    else {

        libGDHL_gf_MedicUIHealingBeam(true, UnitGetOwner(lv_medic), lv_target);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicHealingBeamUIReset_Init () {

    libGDHL_gt_HeroMedicHealingBeamUIReset = TriggerCreate("libGDHL_gt_HeroMedicHealingBeamUIReset_Func");

    TriggerEnable(libGDHL_gt_HeroMedicHealingBeamUIReset, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMedicHealingBeamUIReset, c_playerAny, "MedicHealingBeamFinalSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Hearth Cleanup

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicHearthCleanup_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_hearthingUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_hearthingUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_hearthingUnit, "MedicHealingBeamDestroyPersistent", lv_hearthingUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicHearthCleanup_Init () {

    libGDHL_gt_HeroMedicHearthCleanup = TriggerCreate("libGDHL_gt_HeroMedicHearthCleanup_Func");

    TriggerEnable(libGDHL_gt_HeroMedicHearthCleanup, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMedicHearthCleanup, c_playerAny, "HearthstoneTeleport");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Healing Beam Ally Range Visibility

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicHealingBeamAllyRangeVisibility_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(EventPlayerEffectUsedUnit(c_effectUnitTarget), "MedicHealingBeamApplyAllyRangeDisplayBuff", EventPlayerEffectUsedUnit(c_effectUnitCaster));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicHealingBeamAllyRangeVisibility_Init () {

    libGDHL_gt_HeroMedicHealingBeamAllyRangeVisibility = TriggerCreate("libGDHL_gt_HeroMedicHealingBeamAllyRangeVisibility_Func");

    TriggerEnable(libGDHL_gt_HeroMedicHealingBeamAllyRangeVisibility, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMedicHealingBeamAllyRangeVisibility, c_playerAny, "MedicHealingBeamApplyAllyRangeDisplayDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Medic - Safeguard Vanadium Plating Talent Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    unit lv_medic;

    int lv_medicPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitBehaviorCount(lv_unit, "MedicSafeguardBuff") >= 1))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_medic = UnitBehaviorEffectUnit(lv_unit, "MedicSafeguardBuff", c_effectUnitCaster, 0);

    lv_medicPlayer = UnitGetOwner(lv_medic);

    if ((PlayerHasTalent(lv_medicPlayer, "MedicVanadiumPlating") == true)) {

        UnitCreateEffectUnit(lv_medic, "MedicSafeguardVanadiumPlatingTalentSet", lv_unit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc_Init () {

    libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc = TriggerCreate("libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc_Func");

    TriggerEnable(libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc, null, c_behaviorCategoryStun, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc, null, c_behaviorCategoryStun, c_unitBehaviorChangeRefresh);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc, null, c_behaviorCategoryDebuffRoot, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc, null, c_behaviorCategoryDebuffRoot, c_unitBehaviorChangeRefresh);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Monk - Sixth Sense Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMonkSixthSenseProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "MonkSixthSense") == true))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroMonk"))) {

            return false;

        }



        if (!((UnitHasBehaviorWithCategoryFlag(lv_unit, c_behaviorCategoryBuffUnstoppable) == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_unit, "MonkSixthSenseApplyBlockBehavior", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMonkSixthSenseProc_Init () {

    libGDHL_gt_HeroMonkSixthSenseProc = TriggerCreate("libGDHL_gt_HeroMonkSixthSenseProc_Func");

    TriggerEnable(libGDHL_gt_HeroMonkSixthSenseProc, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroMonkSixthSenseProc, null, c_behaviorCategoryStun, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroMonkSixthSenseProc, null, c_behaviorCategoryDebuffRoot, c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Monk - Deadly Reach Playstyle Update Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_khazimUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_khazimUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((libAIAI_gf_HeroAIIsPlayerActive(UnitGetOwner(EventUnit()), 0) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSetInt(c_gameCatalogUnit, UnitGetType(lv_khazimUnit), "HeroPlaystyleFlags[ChanneledAutoAttacker]", EventPlayer(), 0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOff_Init () {

    libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOff = TriggerCreate("libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOff_Func");

    TriggerEnable(libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOff, null, "MonkDeadlyReachCasterBehavior", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Monk - Deadly Reach Playstyle Update On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_khazimUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_khazimUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((libAIAI_gf_HeroAIIsPlayerActive(UnitGetOwner(EventUnit()), 0) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSetInt(c_gameCatalogUnit, UnitGetType(lv_khazimUnit), "HeroPlaystyleFlags[ChanneledAutoAttacker]", EventPlayer(), 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOn_Init () {

    libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOn = TriggerCreate("libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOn_Func");

    TriggerEnable(libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOn, null, "MonkDeadlyReachCasterBehavior", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero -Monk - Divine Palm - Set Life

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMonkDivinePalmSetLife_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    UnitSetPropertyFixed(EventUnit(), c_unitPropLife, 1.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMonkDivinePalmSetLife_Init () {

    libGDHL_gt_HeroMonkDivinePalmSetLife = TriggerCreate("libGDHL_gt_HeroMonkDivinePalmSetLife_Func");

    TriggerEnable(libGDHL_gt_HeroMonkDivinePalmSetLife, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMonkDivinePalmSetLife, null, "MonkDivinePalmProcBehavior", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Monk - Divine Palm Overlay On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMonkDivinePalmOverlayOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitIsAlive(lv_unit) == true) && (UnitTestState(lv_unit, c_unitStateHallucination) == false) && (UnitHasBehavior2(lv_unit, "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_unit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMonkDivinePalmOverlayOn_Init () {

    libGDHL_gt_HeroMonkDivinePalmOverlayOn = TriggerCreate("libGDHL_gt_HeroMonkDivinePalmOverlayOn_Func");

    TriggerEnable(libGDHL_gt_HeroMonkDivinePalmOverlayOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMonkDivinePalmOverlayOn, null, "MonkDivinePalmProcBehavior", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Monk - Divine Palm Overlay Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMonkDivinePalmOverlayOff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_unit, "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(lv_unit), "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMonkDivinePalmOverlayOff_Init () {

    libGDHL_gt_HeroMonkDivinePalmOverlayOff = TriggerCreate("libGDHL_gt_HeroMonkDivinePalmOverlayOff_Func");

    TriggerEnable(libGDHL_gt_HeroMonkDivinePalmOverlayOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMonkDivinePalmOverlayOff, null, "MonkDivinePalmProcBehavior", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Monk - Seven-Sided Strike Take Facing

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMonkSevenSidedStrikeTakeFacing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroMonkFacing[UnitGetOwner(lv_unit)] = UnitGetFacing(lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMonkSevenSidedStrikeTakeFacing_Init () {

    libGDHL_gt_HeroMonkSevenSidedStrikeTakeFacing = TriggerCreate("libGDHL_gt_HeroMonkSevenSidedStrikeTakeFacing_Func");

    TriggerEnable(libGDHL_gt_HeroMonkSevenSidedStrikeTakeFacing, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroMonkSevenSidedStrikeTakeFacing, null, AbilityCommand("MonkSevenSidedStrike", 0), c_unitAbilStageAll, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Monk - Seven-Sided Strike Finish Set Facing

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_unit, "MonkSevenSidedStrikeIdle") == true)) {

        UnitSetFacing(lv_unit, 270.0, 0.0);

    }

    else {

        UnitSetFacing(lv_unit, libGDHL_gv_heroMonkFacing[UnitGetOwner(lv_unit)], 0.0);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing_Init () {

    libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing = TriggerCreate("libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing_Func");

    TriggerEnable(libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing, c_playerAny, "MonkSevenSidedStrikeFinalTeleport");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing, c_playerAny, "MonkSevenSidedStrikeIdleTeleport");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Monk - Abathur Ultimate Evolution Clone

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMonkAbathurUltimateEvolutionClone_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_ownerofAbathur;

    int lv_ownerofTarget;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_ownerofAbathur = libGDHL_gf_AbathurUltimateEvolutionHeroCopiedAbathurOwner();

    lv_ownerofTarget = libGDHL_gf_AbathurUltimateEvolutionHeroCopiedTargetOwner();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_ownerofAbathur].lv_activeVehicle) == "HeroMonk"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(libGame_gv_players[lv_ownerofTarget].lv_heroUnit, "MonkTranscendenceCarryBehavior") == true)) {

        UnitBehaviorAdd(libGame_gv_players[lv_ownerofAbathur].lv_activeVehicle, "MonkTranscendenceCarryBehavior", libGame_gv_players[lv_ownerofAbathur].lv_activeVehicle, 1);

    }



    if ((UnitHasBehavior2(libGame_gv_players[lv_ownerofTarget].lv_heroUnit, "MonkIronFistsCarryBehavior") == true)) {

        UnitBehaviorAdd(libGame_gv_players[lv_ownerofAbathur].lv_activeVehicle, "MonkIronFistsCarryBehavior", libGame_gv_players[lv_ownerofAbathur].lv_activeVehicle, 1);

    }



    if ((UnitHasBehavior2(libGame_gv_players[lv_ownerofTarget].lv_heroUnit, "MonkInsightQuestToken") == true)) {

        UnitBehaviorAdd(libGame_gv_players[lv_ownerofAbathur].lv_activeVehicle, "MonkInsightQuestToken", libGame_gv_players[lv_ownerofAbathur].lv_activeVehicle, 1);

        UnitSetTokenCount(libGame_gv_players[lv_ownerofAbathur].lv_activeVehicle, "MonkInsightQuestToken", 1.0, libGame_gv_players[lv_ownerofAbathur].lv_activeVehicle);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMonkAbathurUltimateEvolutionClone_Init () {

    libGDHL_gt_HeroMonkAbathurUltimateEvolutionClone = TriggerCreate("libGDHL_gt_HeroMonkAbathurUltimateEvolutionClone_Func");

    libGDHL_gf_AbathurUltimateEvolutionHeroCopied(libGDHL_gt_HeroMonkAbathurUltimateEvolutionClone);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Muradin - Haymaker

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMuradinHaymaker_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetUnit;

    unit lv_muradin;

    fixed lv_abilityRange;

    fixed lv_distanceFromMuradinToPlayerTargetPoint;

    fixed lv_muradinRadius;

    point lv_targetPoint;

    point lv_actualTargetPoint;

    fixed lv_modifiedDistance;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_muradin = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_abilityRange = libGDHL_gv_heroMuradinHaymakerLaunchDistance;

    lv_targetPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_targetUnit), lv_abilityRange, UnitGetPosition(lv_muradin));

    lv_modifiedDistance = (lv_abilityRange + 0.0);

    lv_actualTargetPoint = lv_targetPoint;

    while ((PointPathingPassable(lv_actualTargetPoint) == false)) {

        lv_modifiedDistance += 0.125;

        lv_actualTargetPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_targetUnit), lv_modifiedDistance, UnitGetPosition(lv_muradin));

        if ((lv_modifiedDistance >= libGDHL_gv_heroMuradinHaymakerCutoffDistance)) {

            return true;

        }



    }

    if ((UnitBehaviorCount(lv_targetUnit, "Dead") == 0)) {

        if ((UnitHasBehavior2(lv_muradin, "HaymakerGrandSlamCarryBehavior") == true)) {

            UnitCreateEffectPoint(lv_targetUnit, "HaymakerGrandSlamLaunchTarget", lv_actualTargetPoint);

        }

        else {

            UnitCreateEffectPoint(lv_targetUnit, "HaymakerLaunchTarget", lv_actualTargetPoint);

        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMuradinHaymaker_Init () {

    libGDHL_gt_HeroMuradinHaymaker = TriggerCreate("libGDHL_gt_HeroMuradinHaymaker_Func");

    TriggerEnable(libGDHL_gt_HeroMuradinHaymaker, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMuradinHaymaker, c_playerAny, "HaymakerImpactDelayPersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Muradin - Avatar Apply Health Buff

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMuradinAvatarApplyHealthBuff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSet(c_gameCatalogBehavior, "MuradinAvatarHealthBuff", "Modification.VitalMaxArray[" + IntToString(0) + "]", lv_player, CatalogFieldValueGet(c_gameCatalogBehavior, "MuradinAvatar", "Modification.VitalMaxArray[" + IntToString(0) + "]", lv_player));

    UnitCreateEffectUnit(lv_unit, "MuradinAvatarApplyBehaviorsSet", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMuradinAvatarApplyHealthBuff_Init () {

    libGDHL_gt_HeroMuradinAvatarApplyHealthBuff = TriggerCreate("libGDHL_gt_HeroMuradinAvatarApplyHealthBuff_Func");

    TriggerEnable(libGDHL_gt_HeroMuradinAvatarApplyHealthBuff, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroMuradinAvatarApplyHealthBuff, null, AbilityCommand("MuradinAvatar", 0), c_abilEffectStageCast, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Muradin - Haymaker Grand Slam Talent Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMuradinHaymakerGrandSlamTalentProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_killedUnit;

    int lv_killingPlayer;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_killedUnit = libGame_gf_HeroParticipatedInTakedownKilledHero();

    lv_killingPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_killingPlayer, "MuradinMasteryHaymakerGrandSlam") == true))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_killedUnit, "MuradinHaymakerGrandSlamTalentDeathMarker") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_unit = UnitBehaviorEffectUnit(lv_killedUnit, "MuradinHaymakerGrandSlamTalentDeathMarker", c_effectUnitCaster, 0);

    UnitCreateEffectUnit(lv_unit, "MuradinHaymakerGrandSlamTalentModifyChargeCount", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMuradinHaymakerGrandSlamTalentProc_Init () {

    libGDHL_gt_HeroMuradinHaymakerGrandSlamTalentProc = TriggerCreate("libGDHL_gt_HeroMuradinHaymakerGrandSlamTalentProc_Func");

    TriggerEnable(libGDHL_gt_HeroMuradinHaymakerGrandSlamTalentProc, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroMuradinHaymakerGrandSlamTalentProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Muradin - It's Hammer Time On Death Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMuradinItsHammerTimeOnDeathProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_i;

    unit lv_killedUnit;

    int lv_killingPlayer;

    unit[libCore_gv_bALMaxPlayersOnATeam + 1] lv_unit;



    // Automatic Variable Declarations

    const int auto534F8C5E_ae = 4;

    const int auto534F8C5E_ai = 1;



    // Variable Initialization

    lv_killedUnit = libGame_gf_HeroParticipatedInTakedownKilledHero();

    lv_killingPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();



    // Conditions

    if (testConds) {

        if (!((lv_killingPlayer >= 1))) {

            return false;

        }



        if (!((lv_killingPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_killedUnit, "MuradinStormBoltPerfectStormKillBonusBehavior") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_i = 0;

    for ( ; ( (auto534F8C5E_ai >= 0 && lv_i <= auto534F8C5E_ae) || (auto534F8C5E_ai < 0 && lv_i >= auto534F8C5E_ae) ) ; lv_i += auto534F8C5E_ai ) {

        lv_unit[lv_i] = UnitBehaviorEffectUnit(lv_killedUnit, "MuradinStormBoltPerfectStormKillBonusBehavior", c_effectUnitCaster, lv_i);

        if ((UnitGetOwner(lv_unit[lv_i]) == lv_killingPlayer)) {

            UnitCreateEffectUnit(lv_unit[lv_i], "MuradinStormboltPerfectStormKillCDReset", lv_unit[lv_i]);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMuradinItsHammerTimeOnDeathProc_Init () {

    libGDHL_gt_HeroMuradinItsHammerTimeOnDeathProc = TriggerCreate("libGDHL_gt_HeroMuradinItsHammerTimeOnDeathProc_Func");

    TriggerEnable(libGDHL_gt_HeroMuradinItsHammerTimeOnDeathProc, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroMuradinItsHammerTimeOnDeathProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Muradin - Free Piercing Stormbolt

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMuradinFreePiercingStormbolt_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroLevelUpPlayer();

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((libGame_gf_HeroLevelUpLevel() >= 10))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroMuradin"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "MuradinStormBoltIt'sHammerTime") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    PlayerAddTalent(lv_player, "MuradinStormBoltIt'sHammerTime");

    UnitCreateEffectUnit(lv_unit, "MuradinStormboltItsHammerTimeInstantComplete", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMuradinFreePiercingStormbolt_Init () {

    libGDHL_gt_HeroMuradinFreePiercingStormbolt = TriggerCreate("libGDHL_gt_HeroMuradinFreePiercingStormbolt_Func");

    libGame_gf_HeroLevelUp(libGDHL_gt_HeroMuradinFreePiercingStormbolt);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Muradin - Reset Free Piercing Stormbolt

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMuradinResetFreePiercingStormbolt_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroMuradin"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "MuradinStormBoltIt'sHammerTime") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    PlayerRemoveTalent(lv_player, "MuradinStormBoltIt'sHammerTime");

    UnitCreateEffectUnit(lv_unit, "MuradinStormboltItsHammerTimeInstantReset", lv_unit);

    Wait(0.125, c_timeGame);

    if ((UnitBehaviorCount(EventUnit(), "HeroDummyVeterancy") >= 10)) {

        PlayerAddTalent(lv_player, "MuradinStormBoltIt'sHammerTime");

        UnitCreateEffectUnit(lv_unit, "MuradinStormboltItsHammerTimeInstantComplete", lv_unit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMuradinResetFreePiercingStormbolt_Init () {

    libGDHL_gt_HeroMuradinResetFreePiercingStormbolt = TriggerCreate("libGDHL_gt_HeroMuradinResetFreePiercingStormbolt_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMuradinResetFreePiercingStormbolt, null, "MuradinItsHammerTimeTokenCounter", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Murky UI Initialize

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_MurkyUIInitialize_Func (bool testConds, bool runActions) {

    int init_i;



    // Variable Declarations

    int[6] lv_panels;

    int lv_currentPanelLayer;



    // Automatic Variable Declarations

    // Variable Initialization

    for (init_i = 0; init_i <= 5; init_i += 1) {

        lv_panels[init_i] = c_invalidDialogControlId;

    }



    // Actions

    if (!runActions) {

        return true;

    }



    DialogControlCreateInPanelFromTemplate(libUIUI_gv_heroSpecificStatusContainer, c_triggerControlTypePanel, "Murky/MurkyEggFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_murkyUI.lv_mainPanel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "MurkyEggOk");

    libGDHL_gv_murkyUI.lv_eggOk = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "MurkyEggBroken");

    libGDHL_gv_murkyUI.lv_eggBroken = DialogControlLastCreated();

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_MurkyUIInitialize_Init () {

    libGDHL_gt_MurkyUIInitialize = TriggerCreate("libGDHL_gt_MurkyUIInitialize_Func");

    libCore_gf_IncludeModInitialization(libGDHL_gt_MurkyUIInitialize);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - Murky Egg Dies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyMurkyEggDies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_eggOwnerPlayer;

    int lv_eggOwnerPlayerTeam;

    unit lv_murkyHeroUnit;

    int lv_killingPlayer;

    int lv_level;

    int lv_enemyTeam;

    fixed lv_revealDuration;

    fixed lv_cooldownOnEgg;

    fixed lv_cooldownToAdd;

    playergroup lv_killingTeamGroup;

    int lv_itPlayer;

    playergroup lv_awardGroup;

    fixed lv_xPGranted;

    playergroup lv_killingGroup;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_killingTeamGroup = PlayerGroupEmpty();

    lv_awardGroup = PlayerGroupEmpty();

    lv_killingGroup = PlayerGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "MurkyRespawnEgg"))) {

            return false;

        }



        if (!(((libGame_gv_heroDeathMurkyRespawnEggs[EventPlayer()] == EventUnit()) || (libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[EventPlayer()] == EventUnit())))) {

            return false;

        }



        if (!((libCore_gv_sYSGameMode != libCore_ge_GameModes_ModeC))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[EventPlayer()].lv_heroUnit) == "HeroMurky"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_eggOwnerPlayer = EventPlayer();

    lv_eggOwnerPlayerTeam = libGame_gf_TeamNumberOfPlayer(lv_eggOwnerPlayer);

    lv_murkyHeroUnit = libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit;

    if ((UnitGetOwner(libNtve_gf_KillingUnit()) != lv_eggOwnerPlayer) && (PlayerHasTalent(lv_eggOwnerPlayer, "MurkyEggShell") == true)) {

        UnitCreateEffectUnit(lv_murkyHeroUnit, "MurkyEggShellProcSet", lv_murkyHeroUnit);

    }



    if ((UnitIsValid(lv_murkyHeroUnit) == false)) {

        libGame_gv_heroDeathMurkyRespawnEggs[lv_eggOwnerPlayer] = null;

        libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lv_eggOwnerPlayer] = null;

        return true;

    }



    if ((libGame_gv_heroDeathMurkyRespawnEggs[EventPlayer()] == EventUnit())) {

        if ((libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[EventPlayer()] != null)) {

            libGame_gv_heroDeathMurkyRespawnEggs[lv_eggOwnerPlayer] = libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lv_eggOwnerPlayer];

            libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lv_eggOwnerPlayer] = null;

        }

        else {

            libGame_gv_heroDeathMurkyRespawnEggs[lv_eggOwnerPlayer] = null;

        }

    }



    if ((libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[EventPlayer()] == EventUnit())) {

        libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lv_eggOwnerPlayer] = null;

    }



    libGame_gv_players[lv_eggOwnerPlayer].lv_soundDeathAlertPrefix = "UI_HeroDeath_Murky_";

    lv_killingPlayer = libNtve_gf_KillingPlayer();

    libGame_gv_heroDeathMurkyRespawnEggDeathTimeStamp[lv_eggOwnerPlayer] = TimerGetElapsed(libGame_gv_gameTimer);

    if ((UnitHasBehavior2(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit, "Dead") == true) && (libGame_gv_players[lv_eggOwnerPlayer].lv_isDead == true)) {

        UnitSetPosition(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit, libGame_gv_players[lv_eggOwnerPlayer].lv_spawnPoint, false);

        lv_level = libGame_gf_GetCustomValueLevelofHeroUnit(lv_murkyHeroUnit);

        if (((TimerGetElapsed(libGame_gv_players[lv_eggOwnerPlayer].lv_respawnTimer) > 0.0) || ((TimerGetElapsed(libGame_gv_players[lv_eggOwnerPlayer].lv_respawnTimer) == 0.0) && (TimerGetRemaining(libGame_gv_players[lv_eggOwnerPlayer].lv_respawnTimer) != libCore_gf_HeroDeathTime(lv_eggOwnerPlayer, lv_level))))) {

            if ((libGDHL_gv_murkyDeathOverlayActive[lv_eggOwnerPlayer] == true) && (libGame_gv_heroDeathMurkyRespawnEggs[EventPlayer()] == null) && (libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[EventPlayer()] == null)) {

                libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit), "Cutscenes\\GameUI_MedivacOverlay.StormCutscene", "MurkyDeathTimerDummy");

                libGDHL_gv_murkyDeathOverlayActive[lv_eggOwnerPlayer] = false;

                libUIUI_gf_FullscreenOverlaysShowHideDeathOverlay(true, lv_eggOwnerPlayer);

            }



            if ((libGame_gv_heroDeathMurkyRespawnEggs[EventPlayer()] == null) && (libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[EventPlayer()] == null)) {

                libGame_gf_HeroDeathModifyRespawnTimer(lv_eggOwnerPlayer, (libCore_gf_HeroDeathTime(lv_eggOwnerPlayer, lv_level) - libCore_gv_bALMurkyWithEggDeathTime));

                SoundPlayForPlayer(SoundLink("Murky_Death_NoEgg_Vox", -1), lv_eggOwnerPlayer, PlayerGroupAll(), 100.0, 0.0);

            }



        }



    }

    else {

        if ((libGame_gv_heroDeathMurkyRespawnEggs[EventPlayer()] == null) && (libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[EventPlayer()] == null)) {

            UnitBehaviorAdd(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit, "MurkyDeadEggReveal", libNtve_gf_KillingUnit(), 1);

        }



        lv_enemyTeam = (3 - lv_eggOwnerPlayerTeam);

        lv_revealDuration = CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "MurkyDeadEggReveal", "Duration", c_playerAny);

        libGDHL_gv_murkyRevealPing[lv_eggOwnerPlayer] = PingLastCreated();

        if ((UnitGetOwner(libNtve_gf_KillingUnit()) <= libCore_gv_bALMaxPlayers)) {

            if ((PlayerHasTalent(lv_eggOwnerPlayer, "MurkyShellGame") == true)) {

                TextExpressionSetToken("Param/Expression/lib_GDHL_39CFD00B", "A", UnitTypeGetName(UnitGetType(libGame_gv_players[UnitGetOwner(libNtve_gf_KillingUnit())].lv_heroUnit)));

                TextExpressionSetToken("Param/Expression/lib_GDHL_39CFD00B", "B", FixedToText(libGDHL_gv_mURKY_BAL_EGG_DEATH_TALENT, 0));

                UIDisplayMessage(libGame_gv_teams[lv_enemyTeam].lv_teamPlayerGroupNoNPCPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_39CFD00B"));

            }

            else {

                TextExpressionSetToken("Param/Expression/lib_GDHL_886F69BD", "A", UnitTypeGetName(UnitGetType(libGame_gv_players[UnitGetOwner(libNtve_gf_KillingUnit())].lv_heroUnit)));

                TextExpressionSetToken("Param/Expression/lib_GDHL_886F69BD", "B", FixedToText(libGDHL_gv_mURKY_BAL_EGG_DEATH_cd, 0));

                UIDisplayMessage(libGame_gv_teams[lv_enemyTeam].lv_teamPlayerGroupNoNPCPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_886F69BD"));

            }

        }

        else if (((UnitGetOwner(libNtve_gf_KillingUnit()) == libCore_gv_cOMPUTER_TeamOrder) || (UnitGetOwner(libNtve_gf_KillingUnit()) == libCore_gv_cOMPUTER_TeamChaos) || (libGame_gv_heroDeathMurkyRespawnEggs[EventPlayer()] != null) || (libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[EventPlayer()] != null))) {

            if ((PlayerHasTalent(lv_eggOwnerPlayer, "MurkyShellGame") == true)) {

                TextExpressionSetToken("Param/Expression/lib_GDHL_06884218", "A", StringExternal("Param/Value/lib_GDHL_B22AD03A"));

                TextExpressionSetToken("Param/Expression/lib_GDHL_06884218", "B", FixedToText(libGDHL_gv_mURKY_BAL_EGG_DEATH_TALENT, 0));

                UIDisplayMessage(libGame_gv_teams[lv_enemyTeam].lv_teamPlayerGroupNoNPCPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_06884218"));

            }

            else {

                TextExpressionSetToken("Param/Expression/lib_GDHL_2F88A6C6", "A", StringExternal("Param/Value/lib_GDHL_A749A22B"));

                TextExpressionSetToken("Param/Expression/lib_GDHL_2F88A6C6", "B", FixedToText(libGDHL_gv_mURKY_BAL_EGG_DEATH_cd, 0));

                UIDisplayMessage(libGame_gv_teams[lv_enemyTeam].lv_teamPlayerGroupNoNPCPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_2F88A6C6"));

            }

        }

        else if ((UnitGetOwner(libNtve_gf_KillingUnit()) == libCore_gv_cOMPUTER_Hostile) && (libGame_gv_heroDeathMurkyRespawnEggs[EventPlayer()] != null) && (libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[EventPlayer()] != null)) {

            if ((PlayerHasTalent(lv_eggOwnerPlayer, "MurkyShellGame") == true)) {

                TextExpressionSetToken("Param/Expression/lib_GDHL_2226FB00", "A", StringExternal("Param/Value/lib_GDHL_EB28EBD4"));

                TextExpressionSetToken("Param/Expression/lib_GDHL_2226FB00", "B", FixedToText(libGDHL_gv_mURKY_BAL_EGG_DEATH_TALENT, 0));

                UIDisplayMessage(libGame_gv_teams[lv_enemyTeam].lv_teamPlayerGroupNoNPCPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_2226FB00"));

            }

            else {

                TextExpressionSetToken("Param/Expression/lib_GDHL_C06C1EB1", "A", StringExternal("Param/Value/lib_GDHL_D5FDD47E"));

                TextExpressionSetToken("Param/Expression/lib_GDHL_C06C1EB1", "B", FixedToText(libGDHL_gv_mURKY_BAL_EGG_DEATH_cd, 0));

                UIDisplayMessage(libGame_gv_teams[lv_enemyTeam].lv_teamPlayerGroupNoNPCPlayers, c_messageAreaChat, TextExpressionAssemble("Param/Expression/lib_GDHL_C06C1EB1"));

            }

        }

    }

    SoundPlayForPlayer(SoundLink("Murky_RespawnEgg_Death_Vox", -1), lv_eggOwnerPlayer, PlayerGroupSingle(lv_eggOwnerPlayer), 100.0, 0.0);

    libGDHL_gf_UIHeroSpecificStatusFrameUpdateMurkyEggStatus(UnitGetOwner(EventUnit()));

    lv_cooldownOnEgg = UnitGetCooldown(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit, CatalogFieldValueGet(c_gameCatalogAbil, "MurkyRespawnEgg", "Cost[" + IntToString(0) + "].Cooldown.Link", UnitGetOwner(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit)));

    UnitCreateEffectUnit(lv_murkyHeroUnit, "RespawnEggCancelOrder", lv_murkyHeroUnit);

    if ((PlayerHasTalent(lv_eggOwnerPlayer, "MurkyShellGame") == false) && (lv_cooldownOnEgg <= libGDHL_gv_mURKY_BAL_EGG_DEATH_cd)) {

        lv_cooldownToAdd = (libGDHL_gv_mURKY_BAL_EGG_DEATH_cd - lv_cooldownOnEgg);

        UnitModifyCooldown(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit, CatalogFieldValueGet(c_gameCatalogAbil, "MurkyRespawnEgg", "Cost[" + IntToString(0) + "].Cooldown.Link", UnitGetOwner(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit)), lv_cooldownToAdd, c_cooldownOperationAdd);

        TimerStart(libGDHL_gv_murkyEggDeathTimer[lv_eggOwnerPlayer], libGDHL_gv_mURKY_BAL_EGG_DEATH_cd, false, c_timeGame);

    }

    else {

        if ((PlayerHasTalent(lv_eggOwnerPlayer, "MurkyShellGame") == true) && (lv_cooldownOnEgg <= libGDHL_gv_mURKY_BAL_EGG_DEATH_TALENT)) {

            lv_cooldownToAdd = (libGDHL_gv_mURKY_BAL_EGG_DEATH_TALENT - lv_cooldownOnEgg);

            UnitModifyCooldown(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit, CatalogFieldValueGet(c_gameCatalogAbil, "MurkyRespawnEgg", "Cost[" + IntToString(0) + "].Cooldown.Link", UnitGetOwner(libGame_gv_players[lv_eggOwnerPlayer].lv_heroUnit)), lv_cooldownToAdd, c_cooldownOperationAdd);

            TimerStart(libGDHL_gv_murkyEggDeathTimer[lv_eggOwnerPlayer], libGDHL_gv_mURKY_BAL_EGG_DEATH_TALENT, false, c_timeGame);

        }

        else {

            if ((PlayerHasTalent(lv_eggOwnerPlayer, "MurkyShellGame") == true)) {

                TimerStart(libGDHL_gv_murkyEggDeathTimer[lv_eggOwnerPlayer], libGDHL_gv_mURKY_BAL_EGG_DEATH_TALENT, false, c_timeGame);

            }

            else {

                TimerStart(libGDHL_gv_murkyEggDeathTimer[lv_eggOwnerPlayer], libGDHL_gv_mURKY_BAL_EGG_DEATH_cd, false, c_timeGame);

            }

        }

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyMurkyEggDies_Init () {

    libGDHL_gt_HeroMurkyMurkyEggDies = TriggerCreate("libGDHL_gt_HeroMurkyMurkyEggDies_Func");

    TriggerEnable(libGDHL_gt_HeroMurkyMurkyEggDies, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroMurkyMurkyEggDies, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - Murky Dies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyMurkyDies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_deadUnit;

    int lv_deadPlayer;

    int lv_killingPlayer;

    playergroup lv_killingTeamGroup;

    playergroup lv_killingGroup;

    int lv_i;

    fixed lv_respawnTime;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_killingTeamGroup = PlayerGroupEmpty();

    lv_killingGroup = PlayerGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroMurky"))) {

            return false;

        }



        if (!((EventUnit() == libGame_gv_players[UnitGetOwner(EventUnit())].lv_heroUnit))) {

            return false;

        }



        if (!((UnitHasBehavior2(EventUnit(), "AbnormalDeath") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_deadUnit = EventUnit();

    lv_deadPlayer = EventPlayer();

    lv_killingPlayer = libNtve_gf_KillingPlayer();

    PingDestroy(libGDHL_gv_murkyRevealPing[lv_deadPlayer]);

    libGame_gv_players[lv_deadPlayer].lv_isDead = true;

    libGame_gf_SendEventHeroKilled(lv_killingPlayer, lv_deadUnit);

    lv_killingTeamGroup = libGame_gf_EnemyPlayerGroupOfPlayer(lv_deadPlayer);

    lv_killingGroup = libGame_gf_HeroDeathGetKillingGroupFromKillingTeamGroupAndDeadUnit(lv_killingTeamGroup, lv_killingPlayer, lv_deadUnit);

    if (((UnitIsAlive(libGame_gv_heroDeathMurkyRespawnEggs[lv_deadPlayer]) == false) || (libGame_gv_heroDeathMurkyRespawnEggs[lv_deadPlayer] == null))) {

        libNtve_gf_CreateUnitsWithDefaultFacing(1, "DeadUnitCameraTarget", 0, lv_deadPlayer, UnitGetPosition(lv_deadUnit), null);

        libGame_gv_players[lv_deadPlayer].lv_cameraDeadUnitCameraTarget = UnitLastCreated();

        libGame_gv_players[lv_deadPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGame_gv_players[lv_deadPlayer].lv_cameraDeadUnitCameraTarget);

        libGame_gf_HeroDeathUpdateUIElementsForDeath(true, true, true, lv_deadPlayer, lv_killingPlayer);

        lv_respawnTime = libCore_gf_HeroDeathTime(lv_deadPlayer, UnitLevel(libGame_gv_players[lv_deadPlayer].lv_heroUnit));

    }

    else {

        UnitBehaviorAdd(libGame_gv_heroDeathMurkyRespawnEggs[lv_deadPlayer], "MurkyEggAnimDelay", libGame_gv_players[lv_deadPlayer].lv_heroUnit, 1);

        UnitBehaviorAdd(libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[lv_deadPlayer], "MurkyEggAnimDelay", libGame_gv_players[lv_deadPlayer].lv_heroUnit, 1);

        libNtve_gf_CreateUnitsWithDefaultFacing(1, "DeadUnitCameraTarget", 0, lv_deadPlayer, UnitGetPosition(lv_deadUnit), null);

        libGame_gv_players[lv_deadPlayer].lv_cameraDeadUnitCameraTarget = UnitLastCreated();

        if ((libCore_gv_sYSGameMode != libCore_ge_GameModes_Tutorial1Deprecated)) {

            libGame_gv_players[lv_deadPlayer].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGame_gv_players[lv_deadPlayer].lv_cameraDeadUnitCameraTarget);

        }



        libGame_gv_players[lv_deadPlayer].lv_cameraCameraLockInterrupt = true;

        libGame_gf_HeroDeathUpdateUIElementsForDeath(false, true, false, lv_deadPlayer, lv_killingPlayer);

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(lv_deadPlayer, libUIUI_ge_FullscreenOverlayPriorities_Death, "Cutscenes\\GameUI_MurkyRespawnOverlay.StormCutscene", "MurkyDeathTimerDummy");

        libGDHL_gv_murkyDeathOverlayActive[lv_deadPlayer] = true;

        lv_respawnTime = libCore_gv_bALMurkyWithEggDeathTime;

    }

    libGame_gf_CameraUpdateCameraForPlayer(lv_deadPlayer);

    SoundPlayForPlayer(SoundLink("Murky_Death_NoEgg_Vox", -1), lv_deadPlayer, lv_killingGroup, 100.0, 0.0);

    libGame_gf_HeroDeathStartRespawnTimer(lv_deadPlayer, lv_respawnTime);

    if ((libGDHL_gv_murkyEggDeathTimer[lv_deadPlayer] != null)) {

    }



    libGame_gf_HeroDeathPortHeroBackAndSetDeathState(lv_deadPlayer, libGame_gv_players[lv_deadPlayer].lv_spawnPoint);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyMurkyDies_Init () {

    libGDHL_gt_HeroMurkyMurkyDies = TriggerCreate("libGDHL_gt_HeroMurkyMurkyDies_Func");

    TriggerEnable(libGDHL_gt_HeroMurkyMurkyDies, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroMurkyMurkyDies, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - Revive While Egg Is Alive

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyReviveWhileEggIsAlive_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_respawningPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_respawningPlayer = libGame_gf_HeroRespawnPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_respawningPlayer].lv_heroUnit) == "HeroMurky"))) {

            return false;

        }



        if (!((libGDHL_gv_murkyDeathOverlayActive[lv_respawningPlayer] == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_murkyDeathOverlayActive[lv_respawningPlayer] = false;

    libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(libGame_gv_players[lv_respawningPlayer].lv_heroUnit), "Cutscenes\\GameUI_MedivacOverlay.StormCutscene", "MurkyDeathTimerDummy");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyReviveWhileEggIsAlive_Init () {

    libGDHL_gt_HeroMurkyReviveWhileEggIsAlive = TriggerCreate("libGDHL_gt_HeroMurkyReviveWhileEggIsAlive_Func");

    TriggerEnable(libGDHL_gt_HeroMurkyReviveWhileEggIsAlive, false);

    libGame_gf_HeroRespawn(libGDHL_gt_HeroMurkyReviveWhileEggIsAlive);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - Create Egg On Spawn

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyCreateEggOnSpawn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_egg;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((libCore_gv_sYSGameMode != libCore_ge_GameModes_ModeC))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[libGame_gf_HeroSpawnPlayer()].lv_heroUnit) == "HeroMurky"))) {

            return false;

        }



        if (!((libGame_gv_heroDeathMurkyRespawnEggs[libGame_gf_HeroSpawnPlayer()] == null))) {

            return false;

        }



        if (!((libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[libGame_gf_HeroSpawnPlayer()] == null))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gf_HeroMurkyCreateEggAtBaseforPlayer(libGame_gf_HeroSpawnPlayer());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyCreateEggOnSpawn_Init () {

    libGDHL_gt_HeroMurkyCreateEggOnSpawn = TriggerCreate("libGDHL_gt_HeroMurkyCreateEggOnSpawn_Func");

    TriggerEnable(libGDHL_gt_HeroMurkyCreateEggOnSpawn, false);

    libGame_gf_HeroSpawn(libGDHL_gt_HeroMurkyCreateEggOnSpawn);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - Egg Spawns, Change Death Sound

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyEggSpawnsChangeDeathSound_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_eggUnit;

    int lv_murkyPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_eggUnit = EventUnitCreatedUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_eggUnit) == "MurkyRespawnEgg"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_murkyPlayer = UnitGetOwner(lv_eggUnit);

    libGame_gv_players[lv_murkyPlayer].lv_soundDeathAlertPrefix = "UI_HeroDeath_Murky_Short_";

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyEggSpawnsChangeDeathSound_Init () {

    libGDHL_gt_HeroMurkyEggSpawnsChangeDeathSound = TriggerCreate("libGDHL_gt_HeroMurkyEggSpawnsChangeDeathSound_Func");

    TriggerEnable(libGDHL_gt_HeroMurkyEggSpawnsChangeDeathSound, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroMurkyEggSpawnsChangeDeathSound, null, null, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - Clean Up Egg UI For Debug Hero Swap

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyCleanUpEggUIForDebugHeroSwap_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = libGame_gf_DebugHeroSwappedPlayer();

    if ((libGame_gv_players[lv_player].lv_heroIndex != libCore_gf_GetHeroIndexForUnitType("HeroMurky"))) {

        DialogControlSetVisible(libGDHL_gv_murkyUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[lv_player], false);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyCleanUpEggUIForDebugHeroSwap_Init () {

    libGDHL_gt_HeroMurkyCleanUpEggUIForDebugHeroSwap = TriggerCreate("libGDHL_gt_HeroMurkyCleanUpEggUIForDebugHeroSwap_Func");

    libGame_gf_DebugHeroSwapped(libGDHL_gt_HeroMurkyCleanUpEggUIForDebugHeroSwap);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - A Fishy Deal Variables

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyAFishyDealVariables_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gv_players[lv_player].lv_bribeTokenLink = "MurkyAFishyDealTokenCounter";

    libGame_gv_players[lv_player].lv_bribeChargeStackRequirement = libGDHL_gv_heroMurkyAFishyDealStackCountRequirement;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyAFishyDealVariables_Init () {

    libGDHL_gt_HeroMurkyAFishyDealVariables = TriggerCreate("libGDHL_gt_HeroMurkyAFishyDealVariables_Func");

    TriggerEnable(libGDHL_gt_HeroMurkyAFishyDealVariables, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMurkyAFishyDealVariables, null, "MurkyAFishyDealTokenCounter", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - A Fishy Deal Charge Count Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyAFishyDealChargeCountProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitAddChargeUsed(lv_caster, "Abil/MurkyAFishyDeal", -1.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyAFishyDealChargeCountProc_Init () {

    libGDHL_gt_HeroMurkyAFishyDealChargeCountProc = TriggerCreate("libGDHL_gt_HeroMurkyAFishyDealChargeCountProc_Func");

    TriggerEnable(libGDHL_gt_HeroMurkyAFishyDealChargeCountProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroMurkyAFishyDealChargeCountProc, c_playerAny, "MurkyAFishyDealIncreaseChargeCountDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - Fish Eye Dynamic Application

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyFishEyeDynamicApplication_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup autoE8972419_g;

    int autoE8972419_u;

    unit autoE8972419_var;



    // Actions

    if (!runActions) {

        return true;

    }



    autoE8972419_g = UnitGroup("MurkyRespawnEgg", UnitGetOwner(EventUnit()), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    autoE8972419_u = UnitGroupCount(autoE8972419_g, c_unitCountAll);

    for (;; autoE8972419_u -= 1) {

        autoE8972419_var = UnitGroupUnitFromEnd(autoE8972419_g, autoE8972419_u);

        if (autoE8972419_var == null) { break; }

        UnitBehaviorAdd(autoE8972419_var, "MurkySpawnEggFishEyeTalentBuff", EventUnit(), 1);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyFishEyeDynamicApplication_Init () {

    libGDHL_gt_HeroMurkyFishEyeDynamicApplication = TriggerCreate("libGDHL_gt_HeroMurkyFishEyeDynamicApplication_Func");

    TriggerEnable(libGDHL_gt_HeroMurkyFishEyeDynamicApplication, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroMurkyFishEyeDynamicApplication, null, "MurkySpawnEggFishEyeTalentCarryBehavior", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Murky - Respawn Egg Created

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroMurkyRespawnEggCreated_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup auto20EC3322_g;

    int auto20EC3322_u;

    unit auto20EC3322_var;



    // Actions

    if (!runActions) {

        return true;

    }



    if ((PlayerHasTalent(UnitGetOwner(EventUnit()), "MurkyShellGame") == true)) {

        libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[UnitGetOwner(EventUnit())] = libGame_gv_heroDeathMurkyRespawnEggs[UnitGetOwner(EventUnit())];

        libGame_gv_heroDeathMurkyRespawnEggPoint2[UnitGetOwner(EventUnit())] = libGame_gv_heroDeathMurkyRespawnEggPoint[UnitGetOwner(EventUnit())];

    }



    libGame_gv_heroDeathMurkyRespawnEggs[UnitGetOwner(EventUnit())] = EventUnitCreatedUnit();

    libGame_gv_heroDeathMurkyRespawnEggPoint[UnitGetOwner(EventUnit())] = UnitGetPosition(EventUnitCreatedUnit());

    libGDHL_gf_UIHeroSpecificStatusFrameUpdateMurkyEggStatus(UnitGetOwner(EventUnitCreatedUnit()));

    auto20EC3322_g = UnitGroup("MurkyRespawnEgg", UnitGetOwner(EventUnit()), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto20EC3322_u = UnitGroupCount(auto20EC3322_g, c_unitCountAll);

    for (;; auto20EC3322_u -= 1) {

        auto20EC3322_var = UnitGroupUnitFromEnd(auto20EC3322_g, auto20EC3322_u);

        if (auto20EC3322_var == null) { break; }

        if ((auto20EC3322_var != libGame_gv_heroDeathMurkyRespawnEggs[UnitGetOwner(EventUnit())]) && (auto20EC3322_var != libGame_gv_heroDeathMurkyRespawnEgg2FromTalent[UnitGetOwner(EventUnit())])) {

            UnitCreateEffectUnit(auto20EC3322_var, "TimedLifeFate", auto20EC3322_var);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroMurkyRespawnEggCreated_Init () {

    libGDHL_gt_HeroMurkyRespawnEggCreated = TriggerCreate("libGDHL_gt_HeroMurkyRespawnEggCreated_Func");

    TriggerEnable(libGDHL_gt_HeroMurkyRespawnEggCreated, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroMurkyRespawnEggCreated, null, "MurkyRespawnEgg", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Necromancer - Skeleton Mastery Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNecromancerSkeletonMasteryProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_playerHero;

    unit lv_playerVehicle;

    int lv_player;

    unit lv_minion;

    point lv_positionofMinion;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(libGame_gf_HeroParticipatedInNPCTakedownMinion()) == "FootmanMinion") || (UnitGetType(libGame_gf_HeroParticipatedInNPCTakedownMinion()) == "RangedMinion") || (UnitBehaviorCount(libGame_gf_HeroParticipatedInNPCTakedownMinion(), "IsCatapultMinionOrCatapultReplacement") > 0) || (UnitGetType(libGame_gf_HeroParticipatedInNPCTakedownMinion()) == "WizardMinion") || ((libCore_gv_sYSGameMode == libCore_ge_GameModes_ModeC) && (UnitFilterMatch(libGame_gf_HeroParticipatedInNPCTakedownMinion(), libCore_gv_cOMPUTER_TeamChaos, UnitFilter((1 << c_targetFilterMinion), 0, 0, 0)) == true))))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = libGame_gf_HeroParticipatedInNPCTakedownKillingPlayer();

    lv_minion = libGame_gf_HeroParticipatedInNPCTakedownMinion();

    lv_positionofMinion = UnitGetPosition(lv_minion);

    lv_playerHero = libGame_gv_players[lv_player].lv_heroUnit;

    lv_playerVehicle = libGame_gv_players[lv_player].lv_activeVehicle;

    if ((UnitGetType(lv_playerHero) == "HeroNecromancer")) {

        if ((UnitIsAlive(lv_playerHero) == true) && (lv_playerVehicle == null) && (DistanceBetweenPoints(UnitGetPosition(lv_playerHero), lv_positionofMinion) <= libGDHL_gv_heroNecromancerSkeletonMasteryRange) && (UnitFilterMatch(lv_playerHero, lv_player, UnitFilter(0, (1 << (c_targetFilterStasis - 32)), 0, 0)) == false)) {

            UnitCreateEffectPointWithSource(lv_playerHero, "NecromancerRaiseSkeletonCreationPersistent", lv_positionofMinion, c_gameCatalogAbil, "NecromancerRaiseSkeletonDisplayAbility");

        }



    }

    else {

        if ((UnitGetType(lv_playerVehicle) == "HeroNecromancer")) {

            if ((UnitIsAlive(lv_playerVehicle) == true) && (DistanceBetweenPoints(UnitGetPosition(lv_playerVehicle), lv_positionofMinion) <= libGDHL_gv_heroNecromancerSkeletonMasteryRange) && (UnitFilterMatch(lv_playerVehicle, lv_player, UnitFilter(0, (1 << (c_targetFilterStasis - 32)), 0, 0)) == false)) {

                UnitCreateEffectPointWithSource(lv_playerVehicle, "NecromancerRaiseSkeletonCreationPersistent", lv_positionofMinion, c_gameCatalogAbil, "NecromancerRaiseSkeletonDisplayAbility");

            }



        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNecromancerSkeletonMasteryProc_Init () {

    libGDHL_gt_HeroNecromancerSkeletonMasteryProc = TriggerCreate("libGDHL_gt_HeroNecromancerSkeletonMasteryProc_Func");

    TriggerEnable(libGDHL_gt_HeroNecromancerSkeletonMasteryProc, false);

    libGame_gf_HeroParticipatedInNPCTakedown(libGDHL_gt_HeroNecromancerSkeletonMasteryProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Necromancer - Skeleton Mastery Spawned

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNecromancerSkeletonMasterySpawned_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_u;

    unit lv_lowestUnit;

    fixed lv_lowestHP;

    int lv_unitGroup;

    unit lv_skeleton;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup autoCA2FE564_g;

    int autoCA2FE564_u;

    unit autoCA2FE564_var;



    // Variable Initialization

    lv_lowestHP = 10000.0;

    lv_skeleton = EventUnit();

    lv_player = UnitGetOwner(lv_skeleton);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitGroupAdd(libGDHL_gv_heroNecromancerSkeletonMasteryUnitGroup[lv_player], lv_skeleton);

    if ((UnitGroupCount(libGDHL_gv_heroNecromancerSkeletonMasteryUnitGroup[lv_player], c_unitCountAlive) > libGDHL_gv_heroNecromancerSkeletonMasteryMaxUnits)) {

        autoCA2FE564_g = libGDHL_gv_heroNecromancerSkeletonMasteryUnitGroup[lv_player];

        autoCA2FE564_u = UnitGroupCount(autoCA2FE564_g, c_unitCountAll);

        for (;; autoCA2FE564_u -= 1) {

            autoCA2FE564_var = UnitGroupUnitFromEnd(autoCA2FE564_g, autoCA2FE564_u);

            if (autoCA2FE564_var == null) { break; }

            lv_u = autoCA2FE564_var;

            if ((UnitGetPropertyFixed(lv_u, c_unitPropLife, c_unitPropCurrent) < lv_lowestHP)) {

                lv_lowestHP = UnitGetPropertyFixed(lv_u, c_unitPropLife, c_unitPropCurrent);

                lv_lowestUnit = lv_u;

            }



        }

        UnitKill(lv_lowestUnit);

    }



    lv_unitGroup = UnitGroupCount(libGDHL_gv_heroNecromancerSkeletonMasteryUnitGroup[lv_player], c_unitCountAlive);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNecromancerSkeletonMasterySpawned_Init () {

    libGDHL_gt_HeroNecromancerSkeletonMasterySpawned = TriggerCreate("libGDHL_gt_HeroNecromancerSkeletonMasterySpawned_Func");

    TriggerEnable(libGDHL_gt_HeroNecromancerSkeletonMasterySpawned, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroNecromancerSkeletonMasterySpawned, null, "NecromancerRaiseSkeletonTimedLife", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Necromancer - Skeleton Mastery Max Count Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNecromancerSkeletonMasteryMaxCountProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_u;

    unit lv_lowestUnit;

    fixed lv_lowestHP;

    int lv_unitGroup;

    unit lv_skeleton;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto95A7A4B4_g;

    int auto95A7A4B4_u;

    unit auto95A7A4B4_var;



    // Variable Initialization

    lv_lowestHP = 10000.0;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));

    auto95A7A4B4_g = libGDHL_gv_heroNecromancerSkeletonMasteryUnitGroup[lv_player];

    auto95A7A4B4_u = UnitGroupCount(auto95A7A4B4_g, c_unitCountAll);

    for (;; auto95A7A4B4_u -= 1) {

        auto95A7A4B4_var = UnitGroupUnitFromEnd(auto95A7A4B4_g, auto95A7A4B4_u);

        if (auto95A7A4B4_var == null) { break; }

        lv_u = auto95A7A4B4_var;

        if ((UnitGetPropertyFixed(lv_u, c_unitPropLife, c_unitPropCurrent) < lv_lowestHP)) {

            lv_lowestHP = UnitGetPropertyFixed(lv_u, c_unitPropLife, c_unitPropCurrent);

            lv_lowestUnit = lv_u;

        }



    }

    UnitKill(lv_lowestUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNecromancerSkeletonMasteryMaxCountProc_Init () {

    libGDHL_gt_HeroNecromancerSkeletonMasteryMaxCountProc = TriggerCreate("libGDHL_gt_HeroNecromancerSkeletonMasteryMaxCountProc_Func");

    TriggerEnable(libGDHL_gt_HeroNecromancerSkeletonMasteryMaxCountProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroNecromancerSkeletonMasteryMaxCountProc, c_playerAny, "NecromancerRaiseSkeletonPeriodicDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Necromancer - Track Mortal Wounds Damage Reduction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNecromancerTrackMortalWoundsDamageReduction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_ownerOfUnit;

    fixed lv_healAmountPrevented;

    fixed lv_healAmount;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_ownerOfUnit = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((lv_ownerOfUnit <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitBehaviorCount(lv_unit, "NecromancerSpectralScytheMasteryMortalWoundDebuff") == 1))) {

            return false;

        }



        if (!((UnitFilterMatch(lv_unit, lv_ownerOfUnit, libCore_gv_filtersHeroic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_healAmount = EventUnitHealAmount();

    lv_healAmountPrevented = (lv_healAmount * 3.0);

    libGDHL_gv_heroNecromancerMortalWoundsNumbers[lv_ownerOfUnit] += lv_healAmountPrevented;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNecromancerTrackMortalWoundsDamageReduction_Init () {

    libGDHL_gt_HeroNecromancerTrackMortalWoundsDamageReduction = TriggerCreate("libGDHL_gt_HeroNecromancerTrackMortalWoundsDamageReduction_Func");

    TriggerEnable(libGDHL_gt_HeroNecromancerTrackMortalWoundsDamageReduction, false);

    TriggerAddEventUnitHealed(libGDHL_gt_HeroNecromancerTrackMortalWoundsDamageReduction, null, c_unitVitalLife, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Necromancer - Mortal Wounds Debuff Controller

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNecromancerMortalWoundsDebuffController_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;

    unit lv_target;

    int lv_ownerofTarget;

    fixed lv_horizOffset;

    fixed lv_vertOffset;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventUnit();

    lv_ownerofTarget = UnitGetOwner(lv_target);

    lv_horizOffset = RandomFixed(-0.4, -0.6);

    lv_vertOffset = 2.0;



    // Conditions

    if (testConds) {

        if (!((lv_ownerofTarget <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitFilterMatch(lv_target, lv_ownerofTarget, libCore_gv_filtersHeroic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventUnitBehaviorChange() == c_unitBehaviorChangeActivate)) {

        lv_caster = UnitBehaviorEffectUnit(lv_target, "NecromancerSpectralScytheMasteryMortalWoundDebuff", c_effectUnitCaster, 0);

        libGDHL_gv_heroNecromancerMortalWoundsCasterOwner[lv_ownerofTarget] = UnitGetOwner(lv_caster);

    }

    else if ((EventUnitBehaviorChange() == c_unitBehaviorChangeRefresh)) {

        lv_caster = UnitBehaviorEffectUnit(lv_target, "NecromancerSpectralScytheMasteryMortalWoundDebuff", c_effectUnitCaster, 0);

        libGDHL_gv_heroNecromancerMortalWoundsCasterOwner[lv_ownerofTarget] = UnitGetOwner(lv_caster);

        if ((libGDHL_gv_heroNecromancerMortalWoundsNumbers[lv_ownerofTarget] > 0.0)) {

            libUIUI_gf_UIFloatingCombatTextCreateTextTag(libGDHL_gv_heroNecromancerMortalWoundsCasterOwner[lv_ownerofTarget], libUIUI_gv_floatingCombatTextMediumDuration, (StringExternal("Param/Value/lib_GDHL_C4E4A123") + FixedToText(libGDHL_gv_heroNecromancerMortalWoundsNumbers[lv_ownerofTarget], 0)), lv_target, lv_vertOffset, lv_horizOffset, libCore_ge_FloatingTextType_InsaneDamage, true);

        }



        libGDHL_gv_heroNecromancerMortalWoundsNumbers[lv_ownerofTarget] = 0.0;

    }

    else if ((EventUnitBehaviorChange() == c_unitBehaviorChangeDeactivate)) {

        if ((libGDHL_gv_heroNecromancerMortalWoundsNumbers[lv_ownerofTarget] > 0.0)) {

            libUIUI_gf_UIFloatingCombatTextCreateTextTag(libGDHL_gv_heroNecromancerMortalWoundsCasterOwner[lv_ownerofTarget], libUIUI_gv_floatingCombatTextMediumDuration, (StringExternal("Param/Value/lib_GDHL_36589B6A") + FixedToText(libGDHL_gv_heroNecromancerMortalWoundsNumbers[lv_ownerofTarget], 0)), lv_target, lv_vertOffset, lv_horizOffset, libCore_ge_FloatingTextType_InsaneDamage, true);

        }



        libGDHL_gv_heroNecromancerMortalWoundsNumbers[lv_ownerofTarget] = 0.0;

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNecromancerMortalWoundsDebuffController_Init () {

    libGDHL_gt_HeroNecromancerMortalWoundsDebuffController = TriggerCreate("libGDHL_gt_HeroNecromancerMortalWoundsDebuffController_Func");

    TriggerEnable(libGDHL_gt_HeroNecromancerMortalWoundsDebuffController, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroNecromancerMortalWoundsDebuffController, null, "NecromancerSpectralScytheMasteryMortalWoundDebuff", c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroNecromancerMortalWoundsDebuffController, null, "NecromancerSpectralScytheMasteryMortalWoundDebuff", c_unitBehaviorChangeRefresh);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroNecromancerMortalWoundsDebuffController, null, "NecromancerSpectralScytheMasteryMortalWoundDebuff", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Nova - Covert Mission Takedown

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNovaCovertMissionTakedown_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_i;

    int lv_stacksGranted;

    int lv_player;

    unit lv_nova;



    // Automatic Variable Declarations

    int auto1E7F2B54_ae;

    const int auto1E7F2B54_ai = 1;



    // Variable Initialization

    lv_stacksGranted = 10;

    lv_player = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_nova = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "NovaCovertMission") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto1E7F2B54_ae = lv_stacksGranted;

    lv_i = 1;

    for ( ; ( (auto1E7F2B54_ai >= 0 && lv_i <= auto1E7F2B54_ae) || (auto1E7F2B54_ai < 0 && lv_i >= auto1E7F2B54_ae) ) ; lv_i += auto1E7F2B54_ai ) {

        UnitCreateEffectUnit(lv_nova, "TalentBribeAdd1Token", lv_nova);

        if ((ModI(UnitBehaviorCount(lv_nova, libGame_gv_players[lv_player].lv_bribeTokenLink), libGame_gv_players[lv_player].lv_bribeChargeStackRequirement) == 0)) {

            UnitAddChargeUsed(lv_nova, "Abil/TalentBucketBribe", -1.0);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNovaCovertMissionTakedown_Init () {

    libGDHL_gt_HeroNovaCovertMissionTakedown = TriggerCreate("libGDHL_gt_HeroNovaCovertMissionTakedown_Func");

    TriggerEnable(libGDHL_gt_HeroNovaCovertMissionTakedown, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroNovaCovertMissionTakedown);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Nova - Covert Mission Variables

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNovaCovertMissionVariables_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gv_players[lv_player].lv_bribeTokenLink = "NovaCovertMissionTokenCounter";

    libGame_gv_players[lv_player].lv_bribeChargeStackRequirement = libGDHL_gv_heroNovaCovertMissionStackCountRequirement;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNovaCovertMissionVariables_Init () {

    libGDHL_gt_HeroNovaCovertMissionVariables = TriggerCreate("libGDHL_gt_HeroNovaCovertMissionVariables_Func");

    TriggerEnable(libGDHL_gt_HeroNovaCovertMissionVariables, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroNovaCovertMissionVariables, null, "NovaCovertMissionTokenCounter", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Nova - Triple Tap Ability Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNovaTripleTapAbilityUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetUnit;

    unit lv_itUnit;

    int lv_novaPlayer;

    point lv_currentPositionOfTarget;



    // Automatic Variable Declarations

    unitgroup auto3426D486_g;

    int auto3426D486_u;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_novaPlayer = UnitGetOwner(EventUnit());

    lv_targetUnit = EventUnitTargetUnit();

    libGDHL_gv_novaTripleTapCaster[lv_novaPlayer] = EventUnit();

    libGDHL_gv_novaTripleTapTarget[lv_novaPlayer] = lv_targetUnit;

    libGDHL_gv_novaTripleTapTargetLastPoint[lv_novaPlayer] = UnitGetPosition(lv_targetUnit);

    libGDHL_gv_novaTripleTappingBoolean[lv_novaPlayer] = true;

    while ((libGDHL_gv_novaTripleTappingBoolean[lv_novaPlayer] == true)) {

        if (((UnitIsAlive(libGDHL_gv_novaTripleTapTarget[lv_novaPlayer]) == false) || (DistanceBetweenPoints(UnitGetPosition(libGDHL_gv_novaTripleTapTarget[lv_novaPlayer]), libGDHL_gv_novaTripleTapTargetLastPoint[lv_novaPlayer]) >= libGDHL_gv_novaTripleTapDisjointDistanceThreshold))) {

            libGDHL_gv_novaTripleTappingBoolean[lv_novaPlayer] = false;

            UnitBehaviorAdd(libGDHL_gv_novaTripleTapTarget[lv_novaPlayer], "TripleTapDummyRemove", libGDHL_gv_novaTripleTapCaster[lv_novaPlayer], 1);

            break;

        }



        lv_currentPositionOfTarget = UnitGetPosition(libGDHL_gv_novaTripleTapTarget[lv_novaPlayer]);

        if ((DistanceBetweenPoints(lv_currentPositionOfTarget, libGDHL_gv_novaTripleTapTargetLastPoint[lv_novaPlayer]) > libGDHL_gv_novaTripleTapRedirectDistanceThreshold) && (DistanceBetweenPoints(lv_currentPositionOfTarget, libGDHL_gv_novaTripleTapTargetLastPoint[lv_novaPlayer]) < libGDHL_gv_novaTripleTapDisjointDistanceThreshold)) {

            auto3426D486_g = libGDHL_gv_novaTripleTapMissileGroup[lv_novaPlayer];

            auto3426D486_u = UnitGroupCount(auto3426D486_g, c_unitCountAll);

            for (;; auto3426D486_u -= 1) {

                lv_itUnit = UnitGroupUnitFromEnd(auto3426D486_g, auto3426D486_u);

                if (lv_itUnit == null) { break; }

                UnitCreateEffectUnit(lv_itUnit, "NovaTripleTapMissileRedirect", libGDHL_gv_novaTripleTapTarget[lv_novaPlayer]);

            }

        }



        libGDHL_gv_novaTripleTapTargetLastPoint[lv_novaPlayer] = lv_currentPositionOfTarget;

        Wait(0.0625, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNovaTripleTapAbilityUsed_Init () {

    libGDHL_gt_HeroNovaTripleTapAbilityUsed = TriggerCreate("libGDHL_gt_HeroNovaTripleTapAbilityUsed_Func");

    TriggerEnable(libGDHL_gt_HeroNovaTripleTapAbilityUsed, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroNovaTripleTapAbilityUsed, null, AbilityCommand("NovaTripleTap", 0), c_abilEffectStageCast, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Nova - Triple Tap Missiles

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNovaTripleTapMissiles_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnitCreatedUnit()) == "TripleTapArrowMissile"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = UnitGetOwner(EventUnitCreatedUnit());

    if ((libGDHL_gv_novaTripleTappingBoolean[lv_player] == false)) {

        UnitCreateEffectPoint(EventUnitCreatedUnit(), "NovaTripleTapMissileRedirectPoint", libGDHL_gv_novaTripleTapTargetLastPoint[lv_player]);

        return true;

    }



    UnitGroupAdd(libGDHL_gv_novaTripleTapMissileGroup[lv_player], EventUnitCreatedUnit());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNovaTripleTapMissiles_Init () {

    libGDHL_gt_HeroNovaTripleTapMissiles = TriggerCreate("libGDHL_gt_HeroNovaTripleTapMissiles_Func");

    TriggerEnable(libGDHL_gt_HeroNovaTripleTapMissiles, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroNovaTripleTapMissiles, null, null, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Nova - Triple Tap Missile Cleanup

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNovaTripleTapMissileCleanup_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_heroNovaUnit;

    int lv_player;

    unitgroup lv_missileUnitGroup;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_missileUnitGroup = UnitGroupEmpty();



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayer();

    lv_missileUnitGroup = libGDHL_gv_novaTripleTapMissileGroup[lv_player];

    if (((UnitGroupCount(lv_missileUnitGroup, c_unitCountAlive) == 0) && (UnitHasBehavior2(libGDHL_gv_novaTripleTapCaster[lv_player], "TripleTapInventoryDisableBehavior") == false))) {

        libGDHL_gv_novaTripleTappingBoolean[lv_player] = false;

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNovaTripleTapMissileCleanup_Init () {

    libGDHL_gt_HeroNovaTripleTapMissileCleanup = TriggerCreate("libGDHL_gt_HeroNovaTripleTapMissileCleanup_Func");

    TriggerEnable(libGDHL_gt_HeroNovaTripleTapMissileCleanup, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroNovaTripleTapMissileCleanup, c_playerAny, "TripleTapSuicideRemove");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Nova - Holo Clone Spawned

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNovaHoloCloneSpawned_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_creatingUnit;

    unit lv_createdUnit;

    int lv_ownerOfCreatedUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_createdUnit = EventUnitCreatedUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_createdUnit) == "NovaHoloClone"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_ownerOfCreatedUnit = UnitGetOwner(lv_createdUnit);

    if ((UnitGetType(libGame_gv_players[lv_ownerOfCreatedUnit].lv_heroUnit) == "HeroAbathur")) {

        UnitBehaviorAdd(lv_createdUnit, "UltimateEvolutionAlternateHero", lv_createdUnit, 1);

        lv_creatingUnit = libGame_gv_players[lv_ownerOfCreatedUnit].lv_activeVehicle;

    }

    else {

        lv_creatingUnit = libGame_gv_players[lv_ownerOfCreatedUnit].lv_heroUnit;

    }

    UnitBehaviorAdd(lv_createdUnit, "MapMechanicStack", lv_creatingUnit, UnitBehaviorCount(lv_creatingUnit, "MapMechanicStack"));

    UISetSelectionTypeEnabled(PlayerGroupSingle(lv_ownerOfCreatedUnit), c_localSelectionTypeWorldPanelHero, false);

    UnitSetFacing(lv_createdUnit, UnitGetFacing(lv_creatingUnit), 0.0);

    UnitSetPropertyFixed(lv_createdUnit, c_unitPropXP, UnitXPTotal(lv_creatingUnit));

    UnitSetPropertyFixed(lv_createdUnit, c_unitPropLifeMax, UnitGetPropertyFixed(lv_creatingUnit, c_unitPropLifeMax, c_unitPropCurrent));

    UnitSetPropertyFixed(lv_createdUnit, c_unitPropLife, UnitGetPropertyFixed(lv_creatingUnit, c_unitPropLife, c_unitPropCurrent));

    UnitSetPropertyFixed(lv_createdUnit, c_unitPropEnergyMax, UnitGetPropertyFixed(lv_creatingUnit, c_unitPropEnergyMax, c_unitPropCurrent));

    UnitSetPropertyFixed(lv_createdUnit, c_unitPropEnergy, UnitGetPropertyFixed(lv_creatingUnit, c_unitPropEnergy, c_unitPropCurrent));

    UnitIssueOrder(lv_createdUnit, OrderTargetingPoint(AbilityCommand("attack", 0), UnitGetPosition(lv_createdUnit)), c_orderQueueReplace);

    UnitGroupAdd(libGame_gv_players[lv_ownerOfCreatedUnit].lv_altClickPartyFrameAnnouncementUnitGroup, lv_createdUnit);

    while ((UnitIsAlive(lv_createdUnit) == true)) {

        Wait(0.125, c_timeGame);

    }

    UISetSelectionTypeEnabled(PlayerGroupSingle(lv_ownerOfCreatedUnit), c_localSelectionTypeWorldPanelHero, true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNovaHoloCloneSpawned_Init () {

    libGDHL_gt_HeroNovaHoloCloneSpawned = TriggerCreate("libGDHL_gt_HeroNovaHoloCloneSpawned_Func");

    TriggerEnable(libGDHL_gt_HeroNovaHoloCloneSpawned, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroNovaHoloCloneSpawned, null, "NovaHoloDecoy", null);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroNovaHoloCloneSpawned, null, "NovaGhostProtocol", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Nova - Holo Clone Damage Duplication

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNovaHoloCloneDamageDuplication_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_damage;

    unit lv_image;

    int lv_imageOwner;

    unit lv_caster;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_damage = (EventUnitDamageBehaviorShield() + EventUnitDamageAmount());

    lv_image = EventUnit();

    lv_imageOwner = UnitGetOwner(lv_image);

    lv_caster = EventUnitDamageSourceUnit();



    // Conditions

    if (testConds) {

        if (!((EventUnitDamageEffect() != "HeroGenericFakeHeroDuplicationDamage"))) {

            return false;

        }



        if (!((UnitGetType(lv_image) == "NovaHoloClone"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitIsValid(libGame_gv_teams[libGame_gf_EnemyTeamNumberOfPlayer(lv_imageOwner)].lv_core) == true)) {

        UnitDamage(libGame_gv_teams[libGame_gf_EnemyTeamNumberOfPlayer(lv_imageOwner)].lv_core, "HeroGenericFakeHeroDuplicationDamage", lv_image, lv_damage);

    }

    else {

        UnitDamage(lv_caster, "HeroGenericFakeHeroDuplicationDamage", lv_image, lv_damage);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNovaHoloCloneDamageDuplication_Init () {

    libGDHL_gt_HeroNovaHoloCloneDamageDuplication = TriggerCreate("libGDHL_gt_HeroNovaHoloCloneDamageDuplication_Func");

    TriggerEnable(libGDHL_gt_HeroNovaHoloCloneDamageDuplication, false);

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroNovaHoloCloneDamageDuplication, null, c_unitDamageTypeAny, c_unitDamageNonFatal, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Nova - Anti-Armor Shells Attack Cooldown Controller

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroNovaAntiArmorShellsAttackCooldownController_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_nova;



    // Automatic Variable Declarations

    fixed auto4121A5FF_at;



    // Variable Initialization

    lv_nova = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    auto4121A5FF_at = 0;

    while (!((UnitWeaponPeriodRemaining(lv_nova, 2) == 0.0)) && auto4121A5FF_at <= 3.0) {

        Wait(0.0625, c_timeGame);

        auto4121A5FF_at = auto4121A5FF_at + 0.0625;

    }

    UnitBehaviorRemove(lv_nova, "NovaAntiArmorShellsWeaponSuppression", 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroNovaAntiArmorShellsAttackCooldownController_Init () {

    libGDHL_gt_HeroNovaAntiArmorShellsAttackCooldownController = TriggerCreate("libGDHL_gt_HeroNovaAntiArmorShellsAttackCooldownController_Func");

    TriggerEnable(libGDHL_gt_HeroNovaAntiArmorShellsAttackCooldownController, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroNovaAntiArmorShellsAttackCooldownController, null, "NovaAntiArmorShellsWeaponSuppression", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Raynor - Raynor's Banshee Fly In

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRaynorRaynorsBansheeFlyIn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;

    int lv_player;

    point lv_dropPoint;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_caster);

    lv_dropPoint = EventPlayerEffectUsedPoint(c_effectLocationCasterPoint);



    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_CreateUnitsAtPoint2(1, "RaynorRaynorsBanshee", 0, lv_player, libNtve_gf_PointOffsetTowardsPoint(lv_dropPoint, 4.0, libGame_gv_players[lv_player].lv_spawnPoint), lv_caster);

    UnitCreateEffectUnit(lv_caster, "RaynorBansheeApplyTimeoutBehavior", UnitLastCreated());

    UnitGroupAdd(libGame_gv_players[lv_player].lv_summonedUnitGroup, UnitLastCreated());

    UnitCreateEffectUnit(lv_caster, "RaynorRaynorsRaidersRetargetBansheesPersistent", EventPlayerEffectUsedUnit(c_effectUnitTarget));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRaynorRaynorsBansheeFlyIn_Init () {

    libGDHL_gt_HeroRaynorRaynorsBansheeFlyIn = TriggerCreate("libGDHL_gt_HeroRaynorRaynorsBansheeFlyIn_Func");

    TriggerEnable(libGDHL_gt_HeroRaynorRaynorsBansheeFlyIn, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRaynorRaynorsBansheeFlyIn, c_playerAny, "RaynorRaynorsRaidersCreationDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Raynor - Raynor's Banshee Fly Out

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRaynorRaynorsBansheeFlyOut_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    point lv_flyAway;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_flyAway = UnitGetPosition(lv_unit);

    UnitIssueOrder(lv_unit, OrderTargetingPoint(AbilityCommand("move", 0), libNtve_gf_PointOffsetTowardsPoint(lv_flyAway, 20.0, libGame_gv_players[lv_player].lv_spawnPoint)), c_orderQueueReplace);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRaynorRaynorsBansheeFlyOut_Init () {

    libGDHL_gt_HeroRaynorRaynorsBansheeFlyOut = TriggerCreate("libGDHL_gt_HeroRaynorRaynorsBansheeFlyOut_Func");

    TriggerEnable(libGDHL_gt_HeroRaynorRaynorsBansheeFlyOut, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRaynorRaynorsBansheeFlyOut, null, "RaynorRaynorsBansheeAscend", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Raynor - Banshees Command

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRaynorBansheesCommand_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_p;

    unit lv_u;

    unit lv_itBanshee;

    unitgroup lv_raynorsRaidersBanshees;

    unit lv_bansheeTargetUnit;



    // Automatic Variable Declarations

    unitgroup auto91691D68_g;

    int auto91691D68_u;



    // Variable Initialization

    lv_raynorsRaidersBanshees = UnitGroupEmpty();



    // Actions

    if (!runActions) {

        return true;

    }



    lv_raynorsRaidersBanshees = UnitGetTrackedUnitGroup(EventPlayerEffectUsedUnit(c_effectUnitCaster), "RaynorRaynorsRaidersUnitTracker");

    lv_bansheeTargetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    auto91691D68_g = lv_raynorsRaidersBanshees;

    auto91691D68_u = UnitGroupCount(auto91691D68_g, c_unitCountAll);

    for (;; auto91691D68_u -= 1) {

        lv_itBanshee = UnitGroupUnitFromEnd(auto91691D68_g, auto91691D68_u);

        if (lv_itBanshee == null) { break; }

        if ((UnitIsAlive(lv_itBanshee) == true)) {

            if ((lv_bansheeTargetUnit == null)) {

                UnitIssueOrder(lv_itBanshee, OrderTargetingPoint(AbilityCommand("move", 0), EventPlayerEffectUsedPoint(c_effectLocationTargetPoint)), c_orderQueueReplace);

            }

            else {

                if ((EventPlayerEffectUsed() == "RaynorRaynorsRaidersRetargetSummonedUnitSpecialCaseInteractionDummy")) {

                    UnitIssueOrder(lv_itBanshee, OrderTargetingUnit(AbilityCommand("HeroGenericSummonedUnitSpecialCaseInteraction", 0), lv_bansheeTargetUnit), c_orderQueueReplace);

                }

                else {

                    UnitIssueOrder(lv_itBanshee, OrderTargetingUnit(AbilityCommand("attack", 0), lv_bansheeTargetUnit), c_orderQueueReplace);

                }

            }

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRaynorBansheesCommand_Init () {

    libGDHL_gt_HeroRaynorBansheesCommand = TriggerCreate("libGDHL_gt_HeroRaynorBansheesCommand_Func");

    TriggerEnable(libGDHL_gt_HeroRaynorBansheesCommand, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRaynorBansheesCommand, c_playerAny, "RaynorRaynorsRaidersRetargetBansheesPersistent");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRaynorBansheesCommand, c_playerAny, "RaynorRaynorsRaidersRetargetSummonedUnitSpecialCaseInteractionDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Raynor - Banshee Teleport

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRaynorBansheeTeleport_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup autoD0FD4CB9_g;

    int autoD0FD4CB9_u;

    unit autoD0FD4CB9_var;



    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = EventPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroRaynor"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoD0FD4CB9_g = UnitGetTrackedUnitGroup(lv_unit, "RaynorRaynorsRaidersUnitTracker");

    autoD0FD4CB9_u = UnitGroupCount(autoD0FD4CB9_g, c_unitCountAll);

    for (;; autoD0FD4CB9_u -= 1) {

        autoD0FD4CB9_var = UnitGroupUnitFromEnd(autoD0FD4CB9_g, autoD0FD4CB9_u);

        if (autoD0FD4CB9_var == null) { break; }

        if ((UnitGetType(autoD0FD4CB9_var) == "RaynorRaynorsBanshee")) {

            UnitSetPosition(autoD0FD4CB9_var, UnitGetPosition(libGame_gv_players[lv_player].lv_heroUnit), false);

            if ((EventPlayerEffectUsed() == "HearthstoneTeleport")) {

                UnitCreateEffectUnit(autoD0FD4CB9_var, "HearthstoneHealthCreateHealer", autoD0FD4CB9_var);

            }



            UnitCreateEffectUnit(lv_unit, "RaynorRaynorsRaidersLeashTrackedUnits", lv_unit);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRaynorBansheeTeleport_Init () {

    libGDHL_gt_HeroRaynorBansheeTeleport = TriggerCreate("libGDHL_gt_HeroRaynorBansheeTeleport_Func");

    TriggerEnable(libGDHL_gt_HeroRaynorBansheeTeleport, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRaynorBansheeTeleport, c_playerAny, "HearthstoneTeleport");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRaynorBansheeTeleport, c_playerAny, "UnderworldTeleport");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Raynor - Remove Banshee On Enter Vehicle

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRaynorRemoveBansheeOnEnterVehicle_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup autoEE8FA48C_g;

    int autoEE8FA48C_u;

    unit autoEE8FA48C_var;



    // Variable Initialization

    lv_unit = libGame_gf_UseVehiclePassengerHero();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "RaynorHeroicAbilityRaynorsRaiders") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoEE8FA48C_g = UnitGetTrackedUnitGroup(lv_unit, "RaynorRaynorsRaidersUnitTracker");

    autoEE8FA48C_u = UnitGroupCount(autoEE8FA48C_g, c_unitCountAll);

    for (;; autoEE8FA48C_u -= 1) {

        autoEE8FA48C_var = UnitGroupUnitFromEnd(autoEE8FA48C_g, autoEE8FA48C_u);

        if (autoEE8FA48C_var == null) { break; }

        UnitBehaviorAdd(autoEE8FA48C_var, "RaynorRaynorsBansheeAscend", autoEE8FA48C_var, 1);

        UnitBehaviorAdd(autoEE8FA48C_var, "RaynorRaynorsRaidersSuppressFinalCooldown", autoEE8FA48C_var, 1);

        UnitCreateEffectUnit(lv_unit, "RaynorRaynorsRaidersResetCooldown", lv_unit);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRaynorRemoveBansheeOnEnterVehicle_Init () {

    libGDHL_gt_HeroRaynorRemoveBansheeOnEnterVehicle = TriggerCreate("libGDHL_gt_HeroRaynorRemoveBansheeOnEnterVehicle_Func");

    TriggerEnable(libGDHL_gt_HeroRaynorRemoveBansheeOnEnterVehicle, false);

    libGame_gf_HeroEnteredVehicleInstant(libGDHL_gt_HeroRaynorRemoveBansheeOnEnterVehicle);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Raynor - A Card To Play - Talent Gained

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRaynorACardToPlayTalentGained_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(libGame_gf_HeroGainTalentPlayer(), "RaynorACardToPlay") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    TriggerEnable(libGDHL_gt_HeroRaynorACardToPlayHeroTakedown, true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRaynorACardToPlayTalentGained_Init () {

    libGDHL_gt_HeroRaynorACardToPlayTalentGained = TriggerCreate("libGDHL_gt_HeroRaynorACardToPlayTalentGained_Func");

    TriggerEnable(libGDHL_gt_HeroRaynorACardToPlayTalentGained, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroRaynorACardToPlayTalentGained);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Raynor - A Card To Play - Hero Takedown

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRaynorACardToPlayHeroTakedown_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itPlayer;

    fixed lv_cooldownReduction;



    // Automatic Variable Declarations

    const int auto7A59D43D_ae = libCore_gv_bALMaxPlayers;

    const int auto7A59D43D_ai = 1;



    // Variable Initialization

    lv_cooldownReduction = -15.0;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_itPlayer = 1;

    for ( ; ( (auto7A59D43D_ai >= 0 && lv_itPlayer <= auto7A59D43D_ae) || (auto7A59D43D_ai < 0 && lv_itPlayer >= auto7A59D43D_ae) ) ; lv_itPlayer += auto7A59D43D_ai ) {

        if ((PlayerHasTalent(lv_itPlayer, "RaynorACardToPlay") == true)) {

            UnitModifyCooldown(libGame_gv_players[lv_itPlayer].lv_heroUnit, CatalogFieldValueGet(c_gameCatalogAbil, "RaynorHyperion", "Cost[" + IntToString(0) + "].Cooldown.Link", lv_itPlayer), lv_cooldownReduction, c_cooldownOperationDefault);

            UnitModifyCooldown(libGame_gv_players[lv_itPlayer].lv_heroUnit, CatalogFieldValueGet(c_gameCatalogAbil, "RaynorRaynorsBansheeTargeted", "Cost[" + IntToString(0) + "].Cooldown.Link", lv_itPlayer), lv_cooldownReduction, c_cooldownOperationDefault);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRaynorACardToPlayHeroTakedown_Init () {

    libGDHL_gt_HeroRaynorACardToPlayHeroTakedown = TriggerCreate("libGDHL_gt_HeroRaynorACardToPlayHeroTakedown_Func");

    TriggerEnable(libGDHL_gt_HeroRaynorACardToPlayHeroTakedown, false);

    libGame_gf_HeroKilled(libGDHL_gt_HeroRaynorACardToPlayHeroTakedown);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Raynor - Execute Order - Death Timer Mod

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRaynorExecuteOrderDeathTimerMod_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_raynor;

    int lv_player;

    fixed lv_reductionAmount;



    // Automatic Variable Declarations

    fixed auto2762DC95_at;



    // Variable Initialization

    lv_raynor = libGame_gf_HeroKilledUnit();

    lv_player = libGame_gf_HeroKilledPlayer();

    lv_reductionAmount = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "RaynorExecuteOrdersDeathTimerReduction", "XP", lv_player);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "RaynorHyperionExecuteOrders") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto2762DC95_at = 0;

    while (!((TimerGetDuration(libGame_gv_players[lv_player].lv_respawnTimer) > 1)) && auto2762DC95_at <= 10.0) {

        Wait(0.125, c_timeGame);

        auto2762DC95_at = auto2762DC95_at + 0.125;

    }

    libGame_gf_HeroDeathModifyRespawnTimer(lv_player, lv_reductionAmount);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRaynorExecuteOrderDeathTimerMod_Init () {

    libGDHL_gt_HeroRaynorExecuteOrderDeathTimerMod = TriggerCreate("libGDHL_gt_HeroRaynorExecuteOrderDeathTimerMod_Func");

    TriggerEnable(libGDHL_gt_HeroRaynorExecuteOrderDeathTimerMod, false);

    libGame_gf_HeroKilled(libGDHL_gt_HeroRaynorExecuteOrderDeathTimerMod);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Raynor - Execute Order - Hyperion Activate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRaynorExecuteOrderHyperionActivate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_raynor;

    point lv_targetPoint;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_raynor = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_targetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectPointWithSource(lv_raynor, "ExecuteOrdersInitialCreatePersistent", lv_targetPoint, c_gameCatalogAbil, "RaynorHyperionExecuteOrders");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRaynorExecuteOrderHyperionActivate_Init () {

    libGDHL_gt_HeroRaynorExecuteOrderHyperionActivate = TriggerCreate("libGDHL_gt_HeroRaynorExecuteOrderHyperionActivate_Func");

    TriggerEnable(libGDHL_gt_HeroRaynorExecuteOrderHyperionActivate, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRaynorExecuteOrderHyperionActivate, c_playerAny, "RaynorExecuteOrdersDummyEffect");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rehgar - Tidal Waves Modify Cooldown

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRehgarTidalWavesModifyCooldown_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_rehgarUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_rehgarUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitModifyCooldown(lv_rehgarUnit, CatalogReferenceGet("Abil,RehgarChainHeal,Cost[0].Cooldown.Link", UnitGetOwner(lv_rehgarUnit)), -1.0, c_cooldownOperationAdd);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRehgarTidalWavesModifyCooldown_Init () {

    libGDHL_gt_HeroRehgarTidalWavesModifyCooldown = TriggerCreate("libGDHL_gt_HeroRehgarTidalWavesModifyCooldown_Func");

    TriggerEnable(libGDHL_gt_HeroRehgarTidalWavesModifyCooldown, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRehgarTidalWavesModifyCooldown, c_playerAny, "RehgarChainHealTidalWavesModifyCooldownRehgarDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rehgar - Earthliving Enchant - Hot Apply

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRehgarEarthlivingEnchantHotApply_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_rehgarUnit;

    unit lv_targetUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_rehgarUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_targetUnit, "RehgarChainHealEarthlivingEnchantHeal", lv_rehgarUnit, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRehgarEarthlivingEnchantHotApply_Init () {

    libGDHL_gt_HeroRehgarEarthlivingEnchantHotApply = TriggerCreate("libGDHL_gt_HeroRehgarEarthlivingEnchantHotApply_Func");

    TriggerEnable(libGDHL_gt_HeroRehgarEarthlivingEnchantHotApply, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRehgarEarthlivingEnchantHotApply, c_playerAny, "RehgarChainHealEarthlivingEnchantApplyHealBehaviorDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rehgar - Totemic Projection (Talent) - Save Totem

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRehgarTotemicProjectionTalentSaveTotem_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroRehgarTotemicProjectionTalentActiveTotem[EventPlayer()] = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRehgarTotemicProjectionTalentSaveTotem_Init () {

    libGDHL_gt_HeroRehgarTotemicProjectionTalentSaveTotem = TriggerCreate("libGDHL_gt_HeroRehgarTotemicProjectionTalentSaveTotem_Func");

    TriggerEnable(libGDHL_gt_HeroRehgarTotemicProjectionTalentSaveTotem, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRehgarTotemicProjectionTalentSaveTotem, c_playerAny, "RehgarEarthbindTotemSpawnSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rehgar - Totemic Projection (Talent) - Move Totem

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRehgarTotemicProjectionTalentMoveTotem_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectPoint(lv_unit, "TotemicProjectionDeathDummyEffect", UnitGetPosition(libGDHL_gv_heroRehgarTotemicProjectionTalentActiveTotem[lv_player]));

    UnitSetPosition(libGDHL_gv_heroRehgarTotemicProjectionTalentActiveTotem[lv_player], EventPlayerEffectUsedPoint(c_effectLocationTargetPoint), false);

    libNtve_gf_SendActorMessageToUnit(libGDHL_gv_heroRehgarTotemicProjectionTalentActiveTotem[lv_player], "Signal EarthbindTotemPlayBirth");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRehgarTotemicProjectionTalentMoveTotem_Init () {

    libGDHL_gt_HeroRehgarTotemicProjectionTalentMoveTotem = TriggerCreate("libGDHL_gt_HeroRehgarTotemicProjectionTalentMoveTotem_Func");

    TriggerEnable(libGDHL_gt_HeroRehgarTotemicProjectionTalentMoveTotem, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRehgarTotemicProjectionTalentMoveTotem, c_playerAny, "RehgarTotemicProjectionTargetPoint");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rehgar - Totemic Projection Reset On Rewind Use

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRehgarTotemicProjectionResetOnRewindUse_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_caster) == "HeroRehgar"))) {

            return false;

        }



        if (!((UnitGetOwner(lv_caster) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_caster, "RehgarEarthbindTotemTotemicProjectionEnabler") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorRemove(lv_caster, "RehgarEarthbindTotemTotemicProjectionEnabler", 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRehgarTotemicProjectionResetOnRewindUse_Init () {

    libGDHL_gt_HeroRehgarTotemicProjectionResetOnRewindUse = TriggerCreate("libGDHL_gt_HeroRehgarTotemicProjectionResetOnRewindUse_Func");

    TriggerEnable(libGDHL_gt_HeroRehgarTotemicProjectionResetOnRewindUse, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRehgarTotemicProjectionResetOnRewindUse, c_playerAny, "TalentRewindSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rehgar - Ghost Wolf After Port To Town

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRehgarGhostWolfAfterPortToTown_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroPortedBackToTownPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroRehgar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    Wait(0.25, c_timeGame);

    UnitBehaviorAdd(libGame_gv_players[lv_player].lv_heroUnit, "RehgarGhostWolfBuff", libGame_gv_players[lv_player].lv_heroUnit, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRehgarGhostWolfAfterPortToTown_Init () {

    libGDHL_gt_HeroRehgarGhostWolfAfterPortToTown = TriggerCreate("libGDHL_gt_HeroRehgarGhostWolfAfterPortToTown_Func");

    TriggerEnable(libGDHL_gt_HeroRehgarGhostWolfAfterPortToTown, false);

    libGame_gf_HeroPortedBackToTown(libGDHL_gt_HeroRehgarGhostWolfAfterPortToTown);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rehgar - Ghost Wolf Mounting Special Case

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRehgarGhostWolfMountingSpecialCase_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroSpecialCaseMountingPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroRehgar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(libGame_gv_players[lv_player].lv_heroUnit, "RehgarGhostWolfBuff", libGame_gv_players[lv_player].lv_heroUnit, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRehgarGhostWolfMountingSpecialCase_Init () {

    libGDHL_gt_HeroRehgarGhostWolfMountingSpecialCase = TriggerCreate("libGDHL_gt_HeroRehgarGhostWolfMountingSpecialCase_Func");

    TriggerEnable(libGDHL_gt_HeroRehgarGhostWolfMountingSpecialCase, false);

    libGame_gf_HeroSpecialCaseMounting(libGDHL_gt_HeroRehgarGhostWolfMountingSpecialCase);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rehgar - Electric Charge - Add Leech

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRehgarElectricChargeAddLeech_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_damageAmount;

    unit lv_rehgarUnit;

    int lv_rehgarPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_rehgarUnit = EventUnitDamageSourceUnit();

    lv_rehgarPlayer = UnitGetOwner(EventUnitDamageSourceUnit());



    // Conditions

    if (testConds) {

        if (!((UnitTypeTestAttribute(UnitGetType(EventUnit()), c_unitAttributeHeroic) == true))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_rehgarPlayer, "RehgarLightningShieldElectricCharge") == true))) {

            return false;

        }



        if (!((lv_rehgarPlayer >= 1))) {

            return false;

        }



        if (!((lv_rehgarPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_damageAmount = ((EventUnitDamageAmount() + EventUnitDamageBehaviorShield()) * CatalogFieldValueGetAsFixed(c_gameCatalogEffect, EventUnitDamageEffect(), "LeechFraction[" + IntToString(c_unitVitalLife) + "]", lv_rehgarPlayer));

    libGDHL_gv_heroRehgarElecrtricChargeLeechCombined[lv_rehgarPlayer] = (libGDHL_gv_heroRehgarElecrtricChargeLeechCombined[lv_rehgarPlayer] + lv_damageAmount);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRehgarElectricChargeAddLeech_Init () {

    libGDHL_gt_HeroRehgarElectricChargeAddLeech = TriggerCreate("libGDHL_gt_HeroRehgarElectricChargeAddLeech_Func");

    TriggerEnable(libGDHL_gt_HeroRehgarElectricChargeAddLeech, false);

    TriggerAddDamageEvent(libGDHL_gt_HeroRehgarElectricChargeAddLeech, "HeroRehgar", null, c_unitDamageTypeAbility, c_unitDamageEither, "RehgarLightningShieldDamage");

    TriggerAddDamageEvent(libGDHL_gt_HeroRehgarElectricChargeAddLeech, "HeroRehgar", null, c_unitDamageTypeAbility, c_unitDamageEither, "RehgarLightningShieldElectricChargeTalentDamage");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rehgar - Electric Charge - Leech Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRehgarElectricChargeLeechProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_rehgarUnit;

    unit lv_sourceUnit;

    int lv_rehgarPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_rehgarUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_sourceUnit = EventPlayerEffectUsedUnit(c_effectUnitSource);

    lv_rehgarPlayer = UnitGetOwner(lv_rehgarUnit);



    // Conditions

    if (testConds) {

        if (!((libGDHL_gv_heroRehgarElecrtricChargeLeechCombined[lv_rehgarPlayer] > 0.0))) {

            return false;

        }



        if (!((lv_rehgarPlayer >= 1))) {

            return false;

        }



        if (!((lv_rehgarPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSetFixed(c_gameCatalogEffect, "RehgarElectricChargeCreateHealer", "RechargeVitalRate", lv_rehgarPlayer, libGDHL_gv_heroRehgarElecrtricChargeLeechCombined[lv_rehgarPlayer]);

    UnitCreateEffectUnit(lv_rehgarUnit, "RehgarElectricChargeCreateHealerSet", lv_sourceUnit);

    libGDHL_gv_heroRehgarElecrtricChargeLeechCombined[lv_rehgarPlayer] = 0.0;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRehgarElectricChargeLeechProc_Init () {

    libGDHL_gt_HeroRehgarElectricChargeLeechProc = TriggerCreate("libGDHL_gt_HeroRehgarElectricChargeLeechProc_Func");

    TriggerEnable(libGDHL_gt_HeroRehgarElectricChargeLeechProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRehgarElectricChargeLeechProc, c_playerAny, "RehgarLightningShieldLeechProcDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Rexxar UI Initialize

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_RexxarUIInitialize_Func (bool testConds, bool runActions) {

    int init_i;



    // Variable Declarations

    int[6] lv_panels;

    int lv_currentPanelLayer;



    // Automatic Variable Declarations

    // Variable Initialization

    for (init_i = 0; init_i <= 5; init_i += 1) {

        lv_panels[init_i] = c_invalidDialogControlId;

    }



    // Actions

    if (!runActions) {

        return true;

    }



    DialogControlCreateInPanelFromTemplate(libUIUI_gv_heroSpecificStatusContainer, c_triggerControlTypePanel, "Rexxar/RexxarMishaUnitStatusFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_rexxarUI.lv_mainPanel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatus, "HeroUnitStatusFrame");

    libGDHL_gv_rexxarUI.lv_rexxarMishaUnitStatus = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeUnitStatusBar, "HeroUnitStatusFrame/HealthBar");

    libGDHL_gv_rexxarUI.lv_rexxarMishaHealth = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "RexxarMishaDarkImage");

    libGDHL_gv_rexxarUI.lv_rexxarMishaDarkImage = DialogControlLastCreated();

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "RexxarMishaSkullImage");

    libGDHL_gv_rexxarUI.lv_rexxarMishaSkullImage = DialogControlLastCreated();

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_RexxarUIInitialize_Init () {

    libGDHL_gt_RexxarUIInitialize = TriggerCreate("libGDHL_gt_RexxarUIInitialize_Func");

    libCore_gf_IncludeModInitialization(libGDHL_gt_RexxarUIInitialize);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Rexxar UI Cleanup For Hero Swap

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_RexxarUICleanupForHeroSwap_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = libGame_gf_DebugHeroSwappedPlayer();

    if ((libGame_gv_players[lv_player].lv_heroIndex != libCore_gf_GetHeroIndexForUnitType("HeroRexxar"))) {

        libGDHL_gf_RexxarUICleanup(lv_player);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_RexxarUICleanupForHeroSwap_Init () {

    libGDHL_gt_RexxarUICleanupForHeroSwap = TriggerCreate("libGDHL_gt_RexxarUICleanupForHeroSwap_Func");

    libGame_gf_DebugHeroSwapped(libGDHL_gt_RexxarUICleanupForHeroSwap);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Clean Up - For Abathur Ultimate Evolution Clone

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarCleanUpForAbathurUltimateEvolutionClone_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGDHL_gf_AbathurUltimateEvolutionEndedClonedUnit()) == "HeroRexxar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gf_RexxarUICleanup(libGDHL_gf_AbathurUltimateEvolutionEndedAbathurPlayer());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarCleanUpForAbathurUltimateEvolutionClone_Init () {

    libGDHL_gt_HeroRexxarCleanUpForAbathurUltimateEvolutionClone = TriggerCreate("libGDHL_gt_HeroRexxarCleanUpForAbathurUltimateEvolutionClone_Func");

    libGDHL_gf_AbathurUltimateEvolutionEnded(libGDHL_gt_HeroRexxarCleanUpForAbathurUltimateEvolutionClone);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Unleash the Boars Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarUnleashtheBoarsCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_monitoredUnit;

    unit lv_boarUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_boarUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_monitoredUnit = OrderGetTargetUnit(UnitOrder(lv_boarUnit, 0));

    libGDHL_gf_HeroRexxarUnleashtheBoarsTeleportValidation(lv_boarUnit, lv_monitoredUnit, 15.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarUnleashtheBoarsCast_Init () {

    libGDHL_gt_HeroRexxarUnleashtheBoarsCast = TriggerCreate("libGDHL_gt_HeroRexxarUnleashtheBoarsCast_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarUnleashtheBoarsCast, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarUnleashtheBoarsCast, c_playerAny, "RexxarUnleashTheBoarsIssueAttackOrder");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha - Clear Pursuit Target on Unit Death

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_rexxarPlayer;

    unit lv_target;



    // Automatic Variable Declarations

    const int auto500B7D6E_ae = libCore_gv_bALMaxPlayers;

    const int auto500B7D6E_ai = 1;



    // Variable Initialization

    lv_target = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    lv_rexxarPlayer = 1;

    for ( ; ( (auto500B7D6E_ai >= 0 && lv_rexxarPlayer <= auto500B7D6E_ae) || (auto500B7D6E_ai < 0 && lv_rexxarPlayer >= auto500B7D6E_ae) ) ; lv_rexxarPlayer += auto500B7D6E_ai ) {

        if ((lv_target == libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer])) {

            libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] = null;

            libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_rexxarPlayer] = null;

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath_Init () {

    libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath = TriggerCreate("libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[1]"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[2]"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[3]"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[4]"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[5]"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[6]"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[7]"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[8]"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[9]"));

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[10]"));

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[1]"), "Dead", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[2]"), "Dead", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[3]"), "Dead", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[4]"), "Dead", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[5]"), "Dead", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[6]"), "Dead", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[7]"), "Dead", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[8]"), "Dead", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[9]"), "Dead", c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath, UnitRefFromVariable("libGDHL_gv_heroRexxarMishaPursuitTarget[10]"), "Dead", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha - Set Pursuit Target From Misha, Focus!

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromMishaFocus_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_rexxar;

    int lv_rexxarPlayer;

    unit lv_target;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_rexxar = EventPlayerEffectUsedUnitLaunch();

    lv_rexxarPlayer = UnitGetOwner(lv_rexxar);

    lv_target = EventPlayerEffectUsedUnitImpact();



    // Actions

    if (!runActions) {

        return true;

    }



    if ((libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] != lv_target)) {

        libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] = null;

        libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_rexxarPlayer] = null;

        if ((UnitTypeTestAttribute(UnitGetType(lv_target), c_unitAttributeStructure) == false) && (UnitGetType(lv_target) != UnitGetType(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer]))) {

            libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] = lv_target;

            libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_rexxarPlayer] = UnitGetPosition(lv_target);

        }



    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromMishaFocus_Init () {

    libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromMishaFocus = TriggerCreate("libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromMishaFocus_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromMishaFocus, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromMishaFocus, c_playerAny, "RexxarMishaFocusModifyUnit");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha - Clear Pursuit Target From Misha, Follow!

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaClearPursuitTargetFromMishaFollow_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_rexxar;

    int lv_rexxarPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_rexxar = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_rexxarPlayer = UnitGetOwner(lv_rexxar);



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] = null;

    libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_rexxarPlayer] = null;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaClearPursuitTargetFromMishaFollow_Init () {

    libGDHL_gt_HeroRexxarMishaClearPursuitTargetFromMishaFollow = TriggerCreate("libGDHL_gt_HeroRexxarMishaClearPursuitTargetFromMishaFollow_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaClearPursuitTargetFromMishaFollow, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarMishaClearPursuitTargetFromMishaFollow, c_playerAny, "RexxaeMishaFollowFollowApply");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha - Set Pursuit Target From Attacks

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromAttacks_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_misha;

    int lv_rexxarPlayer;

    unit lv_target;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_misha = EventPlayerEffectUsedUnitLaunch();

    lv_rexxarPlayer = UnitGetOwner(lv_misha);

    lv_target = EventPlayerEffectUsedUnitImpact();



    // Conditions

    if (testConds) {

        if (!((lv_rexxarPlayer >= 1))) {

            return false;

        }



        if (!((lv_rexxarPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] != lv_target)) {

        libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] = null;

        libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_rexxarPlayer] = null;

        if ((UnitTypeTestAttribute(UnitGetType(lv_target), c_unitAttributeStructure) == false)) {

            libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] = lv_target;

            libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_rexxarPlayer] = UnitGetPosition(lv_target);

        }



    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromAttacks_Init () {

    libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromAttacks = TriggerCreate("libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromAttacks_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromAttacks, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromAttacks, c_playerAny, "RexxarMishaWeaponDamage");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha, Focus! Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaFocusUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_rexxar;

    int lv_rexxarPlayer;

    unit lv_targetUnit;

    point lv_targetPoint;

    unit lv_misha;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_rexxar = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_rexxarPlayer = EventPlayer();

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_targetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    lv_misha = libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer];



    // Actions

    if (!runActions) {

        return true;

    }



    if (((UnitIsValid(lv_targetUnit) == true) || (PointPathingPassable(lv_targetPoint) == true))) {

    }

    else {

        lv_targetPoint = UnitTypePlacementFromPoint(UnitGetType(lv_misha), lv_rexxarPlayer, lv_targetPoint, 500.0);

        UnitCreateEffectPoint(lv_rexxar, "RexxarMishaFocusTargetSet", lv_targetPoint);

        return true;

    }

    if ((UnitIsSelected(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], lv_rexxarPlayer) == true)) {

        UnitSelect(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], lv_rexxarPlayer, false);

    }



    if ((UnitHasBehavior2(lv_rexxar, "RexxarMishaFollowRexxarCarry") == true)) {

        UnitAbilityReset(lv_rexxar, AbilityCommand("RexxarMishaFollowCancel", 0), c_spendLocationUnit);

        UnitIssueOrder(lv_rexxar, Order(AbilityCommand("RexxarMishaFollowCancel", 0)), c_orderQueueAddToFront);

    }



    if ((libGDHL_gv_commandMishaTargetUnit[lv_rexxarPlayer] != null)) {

        UnitBehaviorRemovePlayer(libGDHL_gv_commandMishaTargetUnit[lv_rexxarPlayer], "RexxarMishaFocussedTargetUnit", lv_rexxarPlayer, 1);

        UnitCreateEffectUnit(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocusTargetOff", libGDHL_gv_commandMishaTargetUnit[lv_rexxarPlayer]);

    }



    if ((libGDHL_gv_commandMishaTargetPoint[lv_rexxarPlayer] != null)) {

        UnitCreateEffectPoint(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocusTargetOff", libGDHL_gv_commandMishaTargetPoint[lv_rexxarPlayer]);

    }



    if ((libGDHL_gv_commandMishaTargetMoonwell[lv_rexxarPlayer] != null)) {

        UnitCreateEffectUnit(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocusTargetOff", libGDHL_gv_commandMishaTargetMoonwell[lv_rexxarPlayer]);

    }



    if ((lv_targetUnit != null) && (lv_targetUnit != lv_misha)) {

        libGDHL_gv_commandMishaTargetPoint[lv_rexxarPlayer] = null;

        if (((UnitFilterMatch(lv_targetUnit, EventPlayer(), UnitFilter((1 << c_targetFilterVisible), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true) || (UnitFilterMatch(lv_targetUnit, EventPlayer(), UnitFilter((1 << c_targetFilterStructure), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true))) {

            libGDHL_gv_commandMishaTargetUnit[lv_rexxarPlayer] = lv_targetUnit;

            UnitCreateEffectUnit(lv_rexxar, "RexxarApplyMishaFocusTargetBehavior", libGDHL_gv_commandMishaTargetUnit[lv_rexxarPlayer]);

            UnitBehaviorRemove(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnPoint", 1);

            UnitBehaviorAddPlayer(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnUnit", lv_rexxarPlayer, 1);

            TransmissionSendForPlayerSelect(PlayerGroupSingle(lv_rexxarPlayer), TransmissionSourceFromUnit(libGame_gv_players[lv_rexxarPlayer].lv_heroUnit, false, true, ""), PortraitGetGame(), "", "Talk", SoundLink("RexxarBase_Misha_FocusUnit", c_soundIndexAny), StringToText(""), StringToText(""), 0.0, c_transmissionDurationAdd, false, lv_rexxarPlayer, false);

        }

        else {

            if (((UnitGetType(lv_targetUnit) == "TownMoonwell") || (UnitGetType(lv_targetUnit) == "TownMoonwellL2") || (UnitGetType(lv_targetUnit) == "TownMoonwellL3"))) {

                UnitBehaviorRemove(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnUnit", 1);

                UnitBehaviorAdd(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnPoint", lv_rexxar, 1);

                libGDHL_gv_commandMishaTargetMoonwell[lv_rexxarPlayer] = lv_targetUnit;

            }

            else {

                UnitCreateEffectUnit(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocusTargetOff", lv_targetUnit);

                libGDHL_gv_commandMishaTargetPoint[lv_rexxarPlayer] = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_targetUnit), 3.0, UnitGetPosition(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer]));

                UnitCreateEffectPoint(lv_rexxar, "RexxarMishaFocusTargetOn", libGDHL_gv_commandMishaTargetPoint[lv_rexxarPlayer]);

                libGDHL_gv_commandMishaTargetUnit[lv_rexxarPlayer] = null;

                libGDHL_gv_commandMishaTargetMoonwell[lv_rexxarPlayer] = null;

                UnitBehaviorRemove(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnUnit", 1);

                UnitBehaviorAddPlayer(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnPoint", lv_rexxarPlayer, 1);

                TransmissionSendForPlayer(PlayerGroupSingle(lv_rexxarPlayer), TransmissionSourceFromUnit(libGame_gv_players[lv_rexxarPlayer].lv_heroUnit, false, true, ""), PortraitGetGame(), "", "Talk", SoundLink("RexxarBase_Misha_FocusPoint", c_soundIndexAny), StringToText(""), StringToText(""), 0.0, c_transmissionDurationAdd, false, lv_rexxarPlayer);

            }

        }

    }

    else {

        if ((lv_targetPoint != null)) {

            libGDHL_gv_commandMishaTargetPoint[lv_rexxarPlayer] = lv_targetPoint;

            libGDHL_gv_commandMishaTargetUnit[lv_rexxarPlayer] = null;

            libGDHL_gv_commandMishaTargetMoonwell[lv_rexxarPlayer] = null;

            UnitBehaviorRemove(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnUnit", 1);

            UnitBehaviorAddPlayer(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnPoint", lv_rexxarPlayer, 1);

            TransmissionSendForPlayer(PlayerGroupSingle(lv_rexxarPlayer), TransmissionSourceFromUnit(libGame_gv_players[lv_rexxarPlayer].lv_heroUnit, false, true, ""), PortraitGetGame(), "", "Talk", SoundLink("RexxarBase_Misha_FocusPoint", c_soundIndexAny), StringToText(""), StringToText(""), 0.0, c_transmissionDurationAdd, false, lv_rexxarPlayer);

        }



        if ((lv_targetUnit == lv_misha)) {

            libGDHL_gv_commandMishaTargetPoint[lv_rexxarPlayer] = UnitGetPosition(lv_misha);

            libGDHL_gv_commandMishaTargetUnit[lv_rexxarPlayer] = null;

            libGDHL_gv_commandMishaTargetMoonwell[lv_rexxarPlayer] = null;

            UnitBehaviorRemove(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnUnit", 1);

            UnitBehaviorAddPlayer(libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer], "RexxarMishaFocussedOnPoint", lv_rexxarPlayer, 1);

            TransmissionSendForPlayer(PlayerGroupSingle(lv_rexxarPlayer), TransmissionSourceFromUnit(libGame_gv_players[lv_rexxarPlayer].lv_heroUnit, false, true, ""), PortraitGetGame(), "", "Talk", SoundLink("RexxarBase_Misha_FocusPoint", c_soundIndexAny), StringToText(""), StringToText(""), 0.0, c_transmissionDurationAdd, false, lv_rexxarPlayer);

        }



    }

    libGDHL_gf_HeroRexxarMishaThink(lv_rexxarPlayer);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaFocusUsed_Init () {

    libGDHL_gt_HeroRexxarMishaFocusUsed = TriggerCreate("libGDHL_gt_HeroRexxarMishaFocusUsed_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaFocusUsed, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarMishaFocusUsed, c_playerAny, "RexxarMishaFocusTargetOn");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Gains Map Mechanic Stack

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaGainsMapMechanicStack_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_mishaUnit;

    int lv_rexxarPlayer;

    unit lv_rexxarUnit;

    int lv_mapMechanicCount;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_mishaUnit = EventUnit();

    lv_rexxarPlayer = UnitGetOwner(lv_mishaUnit);

    lv_rexxarUnit = libGame_gv_players[lv_rexxarPlayer].lv_heroUnit;

    lv_mapMechanicCount = UnitBehaviorCount(lv_mishaUnit, "MapMechanicStack");



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "RexxarMisha"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_rexxarUnit, "MapMechanicStack", lv_mishaUnit, lv_mapMechanicCount);

    UnitBehaviorRemove(lv_mishaUnit, "MapMechanicStack", lv_mapMechanicCount);

    if ((UnitBehaviorCount(lv_rexxarUnit, "MapMechanicStack") >= 100)) {

        UnitBehaviorAdd(lv_mishaUnit, "RexxarMishaDisableMapMechanicItemPickup", lv_mishaUnit, 1);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaGainsMapMechanicStack_Init () {

    libGDHL_gt_HeroRexxarMishaGainsMapMechanicStack = TriggerCreate("libGDHL_gt_HeroRexxarMishaGainsMapMechanicStack_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaGainsMapMechanicStack, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaGainsMapMechanicStack, null, "MapMechanicStack", c_unitBehaviorChangeIncrease);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Charge Disable

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaChargeDisable_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_rexxarPlayer;

    unit lv_mishaUnit;

    unit lv_rexxarUnit;



    // Automatic Variable Declarations

    fixed autoC7C43B8B_at;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "RexxarMisha"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_rexxarPlayer = UnitGetOwner(EventUnit());

    lv_mishaUnit = EventUnit();

    lv_rexxarUnit = libGame_gv_players[lv_rexxarPlayer].lv_heroUnit;

    UnitBehaviorAdd(lv_rexxarUnit, "RexxarDisableCharge", lv_rexxarUnit, 1);

    autoC7C43B8B_at = 0;

    while (!((UnitHasBehavior2(lv_mishaUnit, EventUnitBehavior()) == false)) && autoC7C43B8B_at <= 20.0) {

        Wait(0.0625, c_timeGame);

        autoC7C43B8B_at = autoC7C43B8B_at + 0.0625;

    }

    UnitBehaviorRemove(lv_rexxarUnit, "RexxarDisableCharge", 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaChargeDisable_Init () {

    libGDHL_gt_HeroRexxarMishaChargeDisable = TriggerCreate("libGDHL_gt_HeroRexxarMishaChargeDisable_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaChargeDisable, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroRexxarMishaChargeDisable, null, c_behaviorCategoryStun, c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroRexxarMishaChargeDisable, null, c_behaviorCategorySleeping, c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroRexxarMishaChargeDisable, null, c_behaviorCategoryDebuffStasis, c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroRexxarMishaChargeDisable, null, c_behaviorCategoryDebuffSilence, c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroRexxarMishaChargeDisable, null, c_behaviorCategoryDebuffRoot, c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaChargeDisable, null, "SylvanasMindControlTarget", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Mend Pet Disable

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaMendPetDisable_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_rexxarPlayer;

    unit lv_mishaUnit;

    unit lv_rexxarUnit;



    // Automatic Variable Declarations

    fixed auto5D78EC36_at;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "RexxarMisha"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_rexxarPlayer = UnitGetOwner(EventUnit());

    lv_mishaUnit = EventUnit();

    lv_rexxarUnit = libGame_gv_players[lv_rexxarPlayer].lv_heroUnit;

    UnitBehaviorAdd(lv_rexxarUnit, "RexxarDisableMendPet", lv_rexxarUnit, 1);

    auto5D78EC36_at = 0;

    while (!((UnitHasBehavior2(lv_mishaUnit, EventUnitBehavior()) == false)) && auto5D78EC36_at <= 20.0) {

        Wait(0.0625, c_timeGame);

        auto5D78EC36_at = auto5D78EC36_at + 0.0625;

    }

    UnitBehaviorRemove(lv_rexxarUnit, "RexxarDisableMendPet", 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaMendPetDisable_Init () {

    libGDHL_gt_HeroRexxarMishaMendPetDisable = TriggerCreate("libGDHL_gt_HeroRexxarMishaMendPetDisable_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaMendPetDisable, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroRexxarMishaMendPetDisable, null, c_behaviorCategoryDebuffStasis, c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Spawn

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaSpawn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_rexxarPlayer;

    unit lv_misha;

    unit lv_rexxar;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnitCreatedUnit()) == "RexxarMisha"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_rexxarPlayer = UnitGetOwner(EventUnitCreatedUnit());

    lv_misha = EventUnitCreatedUnit();

    libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer] = EventUnitCreatedUnit();

    lv_rexxar = libGame_gv_players[lv_rexxarPlayer].lv_heroUnit;

    libGDHL_gv_commandMishaTargetPoint[lv_rexxarPlayer] = null;

    libGDHL_gv_commandMishaTargetUnit[lv_rexxarPlayer] = null;

    libGDHL_gv_mishaCurrentAIState[lv_rexxarPlayer] = libGDHL_ge_MishaState_Idle;

    UnitBehaviorRemove(lv_misha, "RexxarMishaHold", 1);

    libNtve_gf_MakeUnitFacePoint(lv_misha, PointWithOffset(UnitGetGoalPosition(lv_rexxar), 0.0, -5.0), 0.0);

    if ((UnitGetType(libGame_gv_players[lv_rexxarPlayer].lv_heroUnit) == "HeroAbathur")) {

        lv_rexxar = libGame_gv_players[lv_rexxarPlayer].lv_activeVehicle;

        UnitBehaviorAdd(lv_misha, "UltimateEvolutionBuff", lv_rexxar, 1);

        UnitBehaviorAdd(lv_misha, "AbathurUltimateEvolutionCleanupTarget", lv_rexxar, 1);

    }

    else {

        if ((PlayerHasTalent(lv_rexxarPlayer, "RexxarHunterGatherer") == true)) {

            UnitBehaviorAdd(lv_misha, "RexxarHunterGathererCarryBehavior", lv_misha, 1);

            UnitBehaviorAdd(lv_misha, "RexxarHunterGathererMishaTokenCounter", lv_misha, 1);

            CatalogFieldValueSetInt(c_gameCatalogEffect, "RexxarHunterGathererModifyDynamicMishaTokenCount", "Value", lv_rexxarPlayer, UnitBehaviorCount(lv_rexxar, "RexxarHunterGathererRexxarTokenCounter"));

            UnitCreateEffectUnit(lv_rexxar, "RexxarHunterGathererModifyDynamicMishaTokenCount", lv_misha);

        }



        if ((PlayerHasTalent(lv_rexxarPlayer, "RexxarSpiritBondGrizzledFortitude") == true)) {

            UnitBehaviorAdd(lv_misha, "TalentBucketBlockChargedTarget", lv_misha, 1);

        }



        if ((PlayerHasTalent(lv_rexxarPlayer, "RexxarSpiritBondWildfireBear") == true)) {

            UnitBehaviorAdd(lv_misha, "RexxarSpiritBondWildfireBear", lv_misha, 1);

        }



        if ((PlayerHasTalent(lv_rexxarPlayer, "RexxarAnimalHusbandry") == true)) {

            UnitBehaviorAdd(lv_misha, "RexxarAnimalHusbandryHealthBuffCarry", lv_misha, 1);

            UnitBehaviorAdd(lv_misha, "RexxarAnimalHusbandryTokenCounter", lv_misha, 1);

            CatalogFieldValueSetInt(c_gameCatalogEffect, "RexxarAnimalHusbandryDynamicModifyTokenCounter", "Value", lv_rexxarPlayer, (UnitBehaviorCount(lv_rexxar, "RexxarAnimalHusbandryTokenCounter") / 2));

            UnitCreateEffectUnit(lv_rexxar, "RexxarAnimalHusbandryDynamicModifyTokenCounter", lv_misha);

        }



        if ((PlayerHasTalent(lv_rexxarPlayer, "RexxarSpiritBondPrimalIntimidation") == true)) {

            UnitBehaviorAdd(lv_misha, "TalentImposingPresenceCarry", lv_misha, 1);

        }



        if ((PlayerHasTalent(lv_rexxarPlayer, "RexxarDireBeast") == true)) {

            UnitBehaviorAdd(lv_misha, "RexxarDireBeastTokenCounter", lv_misha, 1);

        }



    }

    if (((libGame_gv_players[lv_rexxarPlayer].lv_activeVehicle != null) && (UnitGetType(libGame_gv_players[lv_rexxarPlayer].lv_activeVehicle) != "HeroRexxar"))) {

        UnitSetPosition(lv_misha, UnitGetPosition(libGame_gv_players[lv_rexxarPlayer].lv_heroUnit), false);

        UnitBehaviorAdd(lv_misha, "UsingVehicle", lv_misha, 1);

        UnitGroupRemove(libGame_gv_players[lv_rexxarPlayer].lv_heroUnitGroup, lv_misha);

    }



    UnitGroupAdd(libGame_gv_players[lv_rexxarPlayer].lv_heroUnitGroup, lv_misha);

    AITrackUnitDanger(lv_misha);

    libGDHL_gf_RexxarUISetup(lv_rexxarPlayer, lv_misha);

    libUIUI_gf_UIUnitStatusFramesUpdateUnitStatusFramesForUnit(lv_rexxarPlayer, lv_misha);

    if ((UnitHasBehavior2(lv_rexxar, "AbathurUltimateEvolutionControlBehavior") == false)) {

        libUIUI_gf_UIPartyFrameSetPetFrame(lv_misha, lv_rexxarPlayer);

    }



    DialogControlSetVisible(libGDHL_gv_rexxarUI.lv_rexxarMishaDarkImage, libCore_gv_playerGroupFromPlayer[lv_rexxarPlayer], false);

    DialogControlSetVisible(libGDHL_gv_rexxarUI.lv_rexxarMishaSkullImage, libCore_gv_playerGroupFromPlayer[lv_rexxarPlayer], false);

    UnitCreateEffectUnit(lv_rexxar, "RexxarMishaCreateDummyPersistent", lv_misha);

    libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Add, libGDHL_gv_aIHeroDelegateTokenValueMishaValue, libGame_gf_TeamNumberOfPlayer(lv_rexxarPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

    libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueMishaValue, libGame_gf_TeamNumberOfPlayer(lv_rexxarPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

    while ((UnitIsAlive(lv_misha) == true) && (UnitIsAlive(lv_rexxar) == true)) {

        libGDHL_gf_HeroRexxarMishaThink(lv_rexxarPlayer);

        Wait(0.0625, c_timeGame);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaSpawn_Init () {

    libGDHL_gt_HeroRexxarMishaSpawn = TriggerCreate("libGDHL_gt_HeroRexxarMishaSpawn_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaSpawn, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroRexxarMishaSpawn, null, null, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Dance

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaDance_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroRexxar"))) {

            return false;

        }



        if (!((libGDHL_gv_rexxarMishaUnit[EventPlayer()] != null))) {

            return false;

        }



        if (!((UnitIsAlive(libGDHL_gv_rexxarMishaUnit[EventPlayer()]) == true))) {

            return false;

        }



        if (!((OrderGetAbilityCommand(UnitOrder(libGDHL_gv_rexxarMishaUnit[EventPlayer()], 0)) != AbilityCommand("stop", 3)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitIssueOrder(libGDHL_gv_rexxarMishaUnit[EventPlayer()], EventUnitOrder(), c_orderQueueAddToFront);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaDance_Init () {

    libGDHL_gt_HeroRexxarMishaDance = TriggerCreate("libGDHL_gt_HeroRexxarMishaDance_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaDance, false);

    TriggerAddEventUnitOrder(libGDHL_gt_HeroRexxarMishaDance, null, AbilityCommand("HoldFire", 3));

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Rexxar Dies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarRexxarDies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_rexxarPlayer;

    unit lv_misha;



    // Automatic Variable Declarations

    unitgroup autoB87840D3_g;

    int autoB87840D3_u;

    unit autoB87840D3_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gf_HeroKilledUnit()) == "HeroRexxar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_rexxarPlayer = libGame_gf_HeroKilledPlayer();

    libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] = null;

    libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_rexxarPlayer] = null;

    if ((UnitHasBehavior2(libGame_gf_HeroKilledUnit(), "RexxarMishaAlive") == true)) {

        Wait(0.0625, c_timeGame);

        autoB87840D3_g = libGame_gv_players[lv_rexxarPlayer].lv_heroUnitGroup;

        autoB87840D3_u = UnitGroupCount(autoB87840D3_g, c_unitCountAll);

        for (;; autoB87840D3_u -= 1) {

            autoB87840D3_var = UnitGroupUnitFromEnd(autoB87840D3_g, autoB87840D3_u);

            if (autoB87840D3_var == null) { break; }

            if ((UnitGetType(autoB87840D3_var) == "RexxarMisha")) {

                lv_misha = autoB87840D3_var;

                UnitCreateEffectUnit(lv_misha, "RexxarAnimalHusbandryResetTokenCounter", lv_misha);

            }



        }

        UnitKill(lv_misha);

        UnitCreateEffectUnit(libGame_gv_players[lv_rexxarPlayer].lv_heroUnit, "RexxarSpiritBondRemoveMishaAliveTarget", libGame_gv_players[lv_rexxarPlayer].lv_heroUnit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarRexxarDies_Init () {

    libGDHL_gt_HeroRexxarRexxarDies = TriggerCreate("libGDHL_gt_HeroRexxarRexxarDies_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarRexxarDies, false);

    libGame_gf_HeroKilled(libGDHL_gt_HeroRexxarRexxarDies);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Rexxar Loses Map Mechanic Stacks

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarRexxarLosesMapMechanicStacks_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_rexxarUnit;

    int lv_rexxarPlayer;

    unit lv_mishaUnit;

    int lv_mapMechanicCount;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_rexxarUnit = EventUnit();

    lv_rexxarPlayer = UnitGetOwner(lv_rexxarUnit);

    lv_mapMechanicCount = UnitBehaviorCount(lv_rexxarUnit, "MapMechanicStack");



    // Conditions

    if (testConds) {

        if (!((lv_rexxarPlayer >= 1))) {

            return false;

        }



        if (!((lv_rexxarPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitGetType(EventUnit()) == "HeroRexxar"))) {

            return false;

        }



        if (!((lv_mapMechanicCount < 100))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_mishaUnit = libGDHL_gv_rexxarMishaUnit[lv_rexxarPlayer];

    UnitBehaviorRemove(lv_mishaUnit, "RexxarMishaDisableMapMechanicItemPickup", 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarRexxarLosesMapMechanicStacks_Init () {

    libGDHL_gt_HeroRexxarRexxarLosesMapMechanicStacks = TriggerCreate("libGDHL_gt_HeroRexxarRexxarLosesMapMechanicStacks_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarRexxarLosesMapMechanicStacks, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarRexxarLosesMapMechanicStacks, null, "MapMechanicStack", c_unitBehaviorChangeDecrease);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Remove Misha

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarRemoveMisha_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_rexxarPlayer;



    // Automatic Variable Declarations

    unitgroup auto39C2B936_g;

    int auto39C2B936_u;

    unit auto39C2B936_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroRexxar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_rexxarPlayer = UnitGetOwner(EventUnit());

    auto39C2B936_g = UnitGroup("RexxarMisha", lv_rexxarPlayer, RegionEntireMap(), UnitFilter(0, 0, 0, 0), 0);

    auto39C2B936_u = UnitGroupCount(auto39C2B936_g, c_unitCountAll);

    for (;; auto39C2B936_u -= 1) {

        auto39C2B936_var = UnitGroupUnitFromEnd(auto39C2B936_g, auto39C2B936_u);

        if (auto39C2B936_var == null) { break; }

        if ((TimerIsPaused(libGDHL_gv_mishaDeathTimer[lv_rexxarPlayer]) == true)) {

            libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueMishaValue, libGame_gf_TeamNumberOfPlayer(lv_rexxarPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

        }

        else {

            libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueMishaValue, libGame_gf_TeamNumberOfPlayer(lv_rexxarPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

        }

        libNtve_gf_StopTimer(libGDHL_gv_mishaDeathTimer[lv_rexxarPlayer]);

        UnitRemove(auto39C2B936_var);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarRemoveMisha_Init () {

    libGDHL_gt_HeroRexxarRemoveMisha = TriggerCreate("libGDHL_gt_HeroRexxarRemoveMisha_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarRemoveMisha, false);

    TriggerAddEventUnitRemoved(libGDHL_gt_HeroRexxarRemoveMisha, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Rexxar Stasis Start (Includes Feign Death)

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarRexxarStasisStartIncludesFeignDeath_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_rexxarPlayer;

    unit lv_misha;



    // Automatic Variable Declarations

    unitgroup autoCFD1E677_g;

    int autoCFD1E677_u;

    unit autoCFD1E677_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroRexxar"))) {

            return false;

        }



        if (!((UnitHasBehavior2(EventUnit(), "RexxarFeignDeathInvulnerable") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_rexxarIsInStasis[UnitGetOwner(EventUnit())] = true;

    libGDHL_gv_rexxarStasisOrderCount[UnitGetOwner(EventUnit())] = UnitOrderCount(EventUnit());

    libGDHL_gf_HeroRexxarMishaFocusOff(UnitGetOwner(EventUnit()));

    if ((UnitHasBehavior2(EventUnit(), "RexxarMishaAlive") == true)) {

        autoCFD1E677_g = libGame_gv_players[UnitGetOwner(EventUnit())].lv_heroUnitGroup;

        autoCFD1E677_u = UnitGroupCount(autoCFD1E677_g, c_unitCountAll);

        for (;; autoCFD1E677_u -= 1) {

            autoCFD1E677_var = UnitGroupUnitFromEnd(autoCFD1E677_g, autoCFD1E677_u);

            if (autoCFD1E677_var == null) { break; }

            if ((UnitGetType(autoCFD1E677_var) == "RexxarMisha")) {

                lv_misha = autoCFD1E677_var;

            }



        }

        UnitSelect(lv_misha, UnitGetOwner(EventUnit()), true);

        if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(UnitGetOwner(EventUnit())) == true)) {

            UnitCreateAIThinkTree(lv_misha);

        }



    }



    UISetSelectionTypeEnabled(PlayerGroupSingle(lv_rexxarPlayer), c_localSelectionTypeWorldPanelHero, false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarRexxarStasisStartIncludesFeignDeath_Init () {

    libGDHL_gt_HeroRexxarRexxarStasisStartIncludesFeignDeath = TriggerCreate("libGDHL_gt_HeroRexxarRexxarStasisStartIncludesFeignDeath_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarRexxarStasisStartIncludesFeignDeath, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroRexxarRexxarStasisStartIncludesFeignDeath, null, c_behaviorCategoryDebuffStasis, c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Rexxar Stasis End (Included Feign Death)

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarRexxarStasisEndIncludedFeignDeath_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_rexxarPlayer;

    unit lv_misha;



    // Automatic Variable Declarations

    unitgroup auto712D24ED_g;

    int auto712D24ED_u;

    unit auto712D24ED_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroRexxar"))) {

            return false;

        }



        if (!((UnitHasBehavior2(EventUnit(), "RexxarFeignDeathInvulnerable") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_rexxarIsInStasis[UnitGetOwner(EventUnit())] = false;

    auto712D24ED_g = libGame_gv_players[UnitGetOwner(EventUnit())].lv_heroUnitGroup;

    auto712D24ED_u = UnitGroupCount(auto712D24ED_g, c_unitCountAll);

    for (;; auto712D24ED_u -= 1) {

        auto712D24ED_var = UnitGroupUnitFromEnd(auto712D24ED_g, auto712D24ED_u);

        if (auto712D24ED_var == null) { break; }

        if ((UnitGetType(auto712D24ED_var) == "RexxarMisha")) {

            lv_misha = auto712D24ED_var;

        }



        UnitSelect(lv_misha, UnitGetOwner(EventUnit()), false);

        UnitDestroyAIThinkTree(lv_misha);

    }

    UISetSelectionTypeEnabled(PlayerGroupSingle(lv_rexxarPlayer), c_localSelectionTypeWorldPanelHero, true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarRexxarStasisEndIncludedFeignDeath_Init () {

    libGDHL_gt_HeroRexxarRexxarStasisEndIncludedFeignDeath = TriggerCreate("libGDHL_gt_HeroRexxarRexxarStasisEndIncludedFeignDeath_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarRexxarStasisEndIncludedFeignDeath, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroRexxarRexxarStasisEndIncludedFeignDeath, null, c_behaviorCategoryDebuffStasis, c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Dies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaDies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itPlayer;

    int lv_killingPlayer;

    int lv_rexxarPlayer;

    unit lv_rexxarUnit;

    unit lv_misha;

    playergroup lv_killingTeamGroup;

    playergroup lv_killingGroup;



    // Automatic Variable Declarations

    playergroup auto6A884D65_g;



    // Variable Initialization

    lv_killingTeamGroup = PlayerGroupEmpty();

    lv_killingGroup = PlayerGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "RexxarMisha"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_rexxarPlayer = UnitGetOwner(EventUnit());

    lv_misha = EventUnit();

    lv_killingPlayer = libNtve_gf_KillingPlayer();

    lv_killingTeamGroup = libGame_gf_EnemyPlayerGroupOfPlayer(lv_rexxarPlayer);

    libGDHL_gv_heroRexxarMishaPursuitTarget[lv_rexxarPlayer] = null;

    libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[lv_rexxarPlayer] = null;

    UnitBehaviorAdd(lv_misha, "Dead", lv_misha, 1);

    libGDHL_gf_HeroRexxarMishaFocusOff(lv_rexxarPlayer);

    if ((UnitGetType(libGame_gv_players[EventPlayer()].lv_heroUnit) != "HeroAbathur")) {

        lv_rexxarUnit = libGame_gv_players[lv_rexxarPlayer].lv_heroUnit;

        lv_killingGroup = libGame_gf_HeroDeathGetKillingGroupFromKillingTeamGroupAndDeadUnit(lv_killingTeamGroup, libNtve_gf_KillingPlayer(), EventUnit());

        libGame_gf_HeroDeathAwardXP(lv_killingPlayer, EventUnit(), lv_killingTeamGroup, lv_killingGroup, true);

        if ((lv_killingPlayer == 16)) {

            libGame_gf_SendEventHeroAllyKilled(lv_rexxarPlayer, lv_misha);

        }

        else {

            libGame_gf_SendEventHeroAllyKilled(lv_killingPlayer, lv_misha);

            libUIUI_gf_KillLogAnnounceKill(lv_killingPlayer, lv_misha);

        }

        auto6A884D65_g = lv_killingGroup;

        lv_itPlayer = -1;

        while (true) {

            	lv_itPlayer = PlayerGroupNextPlayer(auto6A884D65_g, lv_itPlayer);

            	if (lv_itPlayer<0) { break; }

            	libGame_gf_ScoreValuesRecordXPContributionForPlayer(lv_itPlayer, (libCore_gf_DataXPXPForHero(lv_itPlayer, EventUnit()) / PlayerGroupCount(lv_killingGroup)), false);

            libGame_gf_SendEventHeroParticipatedInTakedown(libNtve_gf_KillingPlayer(), lv_itPlayer, lv_rexxarPlayer, EventUnit(), UnitGetPosition(EventUnit()));

        }

        if ((UnitIsAlive(lv_rexxarUnit) == true)) {

            TimerStart(libGDHL_gv_mishaDeathTimer[lv_rexxarPlayer], UnitBehaviorDurationTotal(lv_rexxarUnit, "RexxarSpiritBondCooldown"), false, c_timeGame);

            libUIUI_gf_UIPartyFramePetDies(lv_rexxarPlayer, libGDHL_gv_mishaDeathTimer[lv_rexxarPlayer]);

        }



        libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Remove, libGDHL_gv_aIHeroDelegateTokenValueMishaValue, libGame_gf_TeamNumberOfPlayer(lv_rexxarPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroAlive);

        libAIAI_gf_AITeamDelegateModifyHeroStatusTokensforTeam(libAIAI_ge_AITeamDelegateAddRemoveLaneValue_Add, libGDHL_gv_aIHeroDelegateTokenValueMishaValue, libGame_gf_TeamNumberOfPlayer(lv_rexxarPlayer), libAIAI_ge_AITeamDelegateLivingDeadHeroStatusUpdates_HeroDead);

    }



    UnitSelect(EventUnit(), lv_rexxarPlayer, false);

    libUIUI_gv_uIHeroStatusFrames[lv_rexxarPlayer].lv_unitCount -= 1;

    DialogControlSetVisible(libGDHL_gv_rexxarUI.lv_rexxarMishaHealth, libCore_gv_playerGroupFromPlayer[lv_rexxarPlayer], false);

    DialogControlSetVisible(libGDHL_gv_rexxarUI.lv_rexxarMishaDarkImage, libCore_gv_playerGroupFromPlayer[lv_rexxarPlayer], true);

    DialogControlSetVisible(libGDHL_gv_rexxarUI.lv_rexxarMishaSkullImage, libCore_gv_playerGroupFromPlayer[lv_rexxarPlayer], true);

    DialogControlSendAnimationEvent(libGDHL_gv_rexxarUI.lv_rexxarMishaSkullImage, libCore_gv_playerGroupFromPlayer[lv_rexxarPlayer], "ShrinkOverlay");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaDies_Init () {

    libGDHL_gt_HeroRexxarMishaDies = TriggerCreate("libGDHL_gt_HeroRexxarMishaDies_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaDies, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroRexxarMishaDies, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Deselect Misha On Vehicle Enter

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarDeselectMishaOnVehicleEnter_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(EventUnit()) == "RexxarMisha")) {

        UnitSelect(EventUnit(), UnitGetOwner(EventUnit()), false);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarDeselectMishaOnVehicleEnter_Init () {

    libGDHL_gt_HeroRexxarDeselectMishaOnVehicleEnter = TriggerCreate("libGDHL_gt_HeroRexxarDeselectMishaOnVehicleEnter_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarDeselectMishaOnVehicleEnter, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarDeselectMishaOnVehicleEnter, null, "UsingVehicle", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Select Misha On Vehicle Exit

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarSelectMishaOnVehicleExit_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(EventUnit()) == "RexxarMisha")) {

        libGDHL_gv_heroRexxarMishaPursuitTarget[UnitGetOwner(EventUnit())] = null;

        libGDHL_gv_heroRexxarMishaLastKnownTargetLocation[UnitGetOwner(EventUnit())] = null;

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarSelectMishaOnVehicleExit_Init () {

    libGDHL_gt_HeroRexxarSelectMishaOnVehicleExit = TriggerCreate("libGDHL_gt_HeroRexxarSelectMishaOnVehicleExit_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarSelectMishaOnVehicleExit, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarSelectMishaOnVehicleExit, null, "UsingVehicle", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Gorge End

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarGorgeEnd_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_misha;

    unit lv_rexxar;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(EventUnit()) == "RexxarMisha") || (UnitGetType(EventUnit()) == "HeroRexxar")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = UnitGetOwner(EventUnit());

    lv_rexxar = libGame_gv_players[lv_player].lv_heroUnit;

    lv_misha = libGDHL_gv_rexxarMishaUnit[lv_player];

    if ((libGame_gv_players[lv_player].lv_activeVehicle == null)) {

        if ((UnitPathableToUnit(lv_misha, lv_rexxar, 0.0, 0.0) == false)) {

            UnitSetPosition(lv_misha, UnitGetPosition(lv_rexxar), false);

        }



    }

    else {

        if ((UnitPathableToUnit(lv_misha, lv_rexxar, 0.0, 0.0) == false)) {

            UnitSetPosition(lv_misha, UnitGetPosition(lv_rexxar), false);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarGorgeEnd_Init () {

    libGDHL_gt_HeroRexxarGorgeEnd = TriggerCreate("libGDHL_gt_HeroRexxarGorgeEnd_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarGorgeEnd, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarGorgeEnd, null, "StitchesGorgePostGorgeTargetCleanup", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Teleport

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaTeleport_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    unitgroup autoFF82D22F_g;

    int autoFF82D22F_u;

    unit autoFF82D22F_var;



    // Variable Initialization

    lv_player = EventPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroRexxar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoFF82D22F_g = libGame_gv_players[lv_player].lv_heroUnitGroup;

    autoFF82D22F_u = UnitGroupCount(autoFF82D22F_g, c_unitCountAll);

    for (;; autoFF82D22F_u -= 1) {

        autoFF82D22F_var = UnitGroupUnitFromEnd(autoFF82D22F_g, autoFF82D22F_u);

        if (autoFF82D22F_var == null) { break; }

        if ((UnitGetType(autoFF82D22F_var) == "RexxarMisha")) {

            if ((EventPlayerEffectUsed() != "HearthstoneTeleport")) {

                UnitCreateEffectUnit(autoFF82D22F_var, "RexxarMishaHoldIssueStopOrder", autoFF82D22F_var);

                UnitSetPosition(autoFF82D22F_var, UnitGetPosition(libGame_gv_players[lv_player].lv_heroUnit), false);

            }



            Wait(0.0625, c_timeGame);

            libGDHL_gf_HeroRexxarMishaStopMishaandResetThink(autoFF82D22F_var);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaTeleport_Init () {

    libGDHL_gt_HeroRexxarMishaTeleport = TriggerCreate("libGDHL_gt_HeroRexxarMishaTeleport_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaTeleport, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarMishaTeleport, c_playerAny, "HearthstoneTeleport");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarMishaTeleport, c_playerAny, "UnderworldTeleport");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Underworld Gate Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaUnderworldGateUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_mishaUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gf_MapHauntedMinesPlayerChangesPlaneHeroUnit()) == "RexxarMisha"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = libGame_gf_MapHauntedMinesPlayerUsesGatePlayer();

    lv_mishaUnit = libGame_gf_MapHauntedMinesPlayerUsesGateHeroUnit();

    if ((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroRexxar")) {

        UnitSetPosition(lv_mishaUnit, UnitGetPosition(libGame_gv_players[lv_player].lv_heroUnit), false);

    }

    else {

        UnitSetPosition(lv_mishaUnit, UnitGetPosition(libGame_gv_players[lv_player].lv_activeVehicle), false);

    }

    Wait(0.0625, c_timeGame);

    libGDHL_gf_HeroRexxarMishaStopMishaandResetThink(lv_mishaUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaUnderworldGateUsed_Init () {

    libGDHL_gt_HeroRexxarMishaUnderworldGateUsed = TriggerCreate("libGDHL_gt_HeroRexxarMishaUnderworldGateUsed_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaUnderworldGateUsed, false);

    libGame_gf_MapHauntedMinesPlayerChangesPlane(libGDHL_gt_HeroRexxarMishaUnderworldGateUsed);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Vehicle Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaVehicleUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_rexxarPlayer;



    // Automatic Variable Declarations

    unitgroup autoEF981130_g;

    int autoEF981130_u;

    unit autoEF981130_var;



    // Variable Initialization

    lv_rexxarPlayer = libGame_gf_UseVehicleHeroPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_rexxarPlayer].lv_heroUnit) == "HeroRexxar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gf_HeroRexxarMishaFocusOff(lv_rexxarPlayer);

    autoEF981130_g = libGame_gv_players[lv_rexxarPlayer].lv_heroUnitGroup;

    autoEF981130_u = UnitGroupCount(autoEF981130_g, c_unitCountAll);

    for (;; autoEF981130_u -= 1) {

        autoEF981130_var = UnitGroupUnitFromEnd(autoEF981130_g, autoEF981130_u);

        if (autoEF981130_var == null) { break; }

        if ((UnitGetType(autoEF981130_var) == "RexxarMisha")) {

            while (((UnitFilterMatch(autoEF981130_var, UnitGetOwner(autoEF981130_var), UnitFilter(0, 0, (1 << c_targetFilterAlly) | (1 << c_targetFilterNeutral) | (1 << c_targetFilterEnemy) | (1 << c_targetFilterMissile), (1 << (c_targetFilterStasis - 32)))) != true) || (UnitHasBehavior2(autoEF981130_var, "StitchesGorgePostGorgeTargetCleanup") == true))) {

                Wait(0.0625, c_timeGame);

                if ((libGame_gv_players[UnitGetOwner(autoEF981130_var)].lv_activeVehicle == null)) {

                    return true;

                }



            }

            UnitCreateEffectUnit(autoEF981130_var, "RexxarMishaCommandRemoveTargetPriorityBuffSearch", autoEF981130_var);

            UnitSetPosition(autoEF981130_var, UnitGetPosition(libGame_gv_players[lv_rexxarPlayer].lv_heroUnit), false);

            UnitBehaviorAdd(autoEF981130_var, "UsingVehicle", autoEF981130_var, 1);

            break;

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaVehicleUsed_Init () {

    libGDHL_gt_HeroRexxarMishaVehicleUsed = TriggerCreate("libGDHL_gt_HeroRexxarMishaVehicleUsed_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaVehicleUsed, false);

    libGame_gf_HeroEnteredVehicleInstant(libGDHL_gt_HeroRexxarMishaVehicleUsed);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Vehicle Done

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaVehicleDone_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_UnitStopsOccupyingVehiclePlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroRexxar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((lv_player > 0) && (lv_player <= libCore_gv_bALMaxPlayers)) {

        Wait(0.0625, c_timeGame);

        UnitSetPosition(libGDHL_gv_rexxarMishaUnit[lv_player], UnitGetPosition(libGame_gv_players[lv_player].lv_heroUnit), false);

        UnitBehaviorRemove(libGDHL_gv_rexxarMishaUnit[lv_player], "UsingVehicle", 1);

        Wait(0.0625, c_timeGame);

        UnitCreateEffectUnit(libGame_gv_players[lv_player].lv_heroUnit, "RexxarMishaFollowInitialSet", libGame_gv_players[lv_player].lv_heroUnit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaVehicleDone_Init () {

    libGDHL_gt_HeroRexxarMishaVehicleDone = TriggerCreate("libGDHL_gt_HeroRexxarMishaVehicleDone_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaVehicleDone, false);

    libGame_gf_UnitStopsOccupyingVehicleInstant(libGDHL_gt_HeroRexxarMishaVehicleDone);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Stuff Misha Into Transport

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarStuffMishaIntoTransport_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup autoF44E8865_g;

    int autoF44E8865_u;

    unit autoF44E8865_var;



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(libGame_gv_players[libGame_gf_HeroEnteredTransportPlayerEntering()].lv_heroUnit) == "HeroRexxar") || (UnitGetType(libGame_gv_players[libGame_gf_HeroEnteredTransportPlayerEntering()].lv_activeVehicle) == "HeroRexxar")))) {

            return false;

        }



        if (!((libGDHL_gv_rexxarMishaUnit[libGame_gf_HeroEnteredTransportPlayerEntering()] != null))) {

            return false;

        }



        if (!((UnitIsAlive(libGDHL_gv_rexxarMishaUnit[libGame_gf_HeroEnteredTransportPlayerEntering()]) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoF44E8865_g = libGame_gv_players[libGame_gf_HeroEnteredTransportPlayerEntering()].lv_heroUnitGroup;

    autoF44E8865_u = UnitGroupCount(autoF44E8865_g, c_unitCountAll);

    for (;; autoF44E8865_u -= 1) {

        autoF44E8865_var = UnitGroupUnitFromEnd(autoF44E8865_g, autoF44E8865_u);

        if (autoF44E8865_var == null) { break; }

        if ((UnitGetType(autoF44E8865_var) == "RexxarMisha")) {

            while (((UnitFilterMatch(autoF44E8865_var, UnitGetOwner(autoF44E8865_var), UnitFilter(0, (1 << (c_targetFilterStasis - 32)), 0, (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true) || (UnitFilterMatch(autoF44E8865_var, UnitGetOwner(autoF44E8865_var), UnitFilter((1 << c_targetFilterMissile), 0, 0, (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true) || (UnitHasBehavior2(autoF44E8865_var, "StitchesGorgePostGorgeTargetCleanup") == true))) {

                Wait(0.0625, c_timeGame);

            }

            if ((UnitFilterMatch(autoF44E8865_var, UnitGetOwner(autoF44E8865_var), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true) && (((libGame_gv_players[UnitGetOwner(autoF44E8865_var)].lv_activeVehicle != null) && (libNtve_gf_UnitIsInsideTransport(libGame_gv_players[libGame_gf_HeroEnteredTransportPlayerEntering()].lv_activeVehicle) == true)) || ((libGame_gv_players[UnitGetOwner(autoF44E8865_var)].lv_activeVehicle == null) && (libNtve_gf_UnitIsInsideTransport(libGame_gv_players[libGame_gf_HeroEnteredTransportPlayerEntering()].lv_heroUnit) == true)))) {

                UnitCreateEffectUnit(autoF44E8865_var, "RexxarMishaCommandRemoveTargetPriorityBuffSearch", autoF44E8865_var);

                UnitSetPosition(autoF44E8865_var, UnitGetPosition(libGame_gv_players[libGame_gf_HeroEnteredTransportPlayerEntering()].lv_heroUnit), false);

                UnitBehaviorAdd(autoF44E8865_var, "UsingVehicle", autoF44E8865_var, 1);

            }



        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarStuffMishaIntoTransport_Init () {

    libGDHL_gt_HeroRexxarStuffMishaIntoTransport = TriggerCreate("libGDHL_gt_HeroRexxarStuffMishaIntoTransport_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarStuffMishaIntoTransport, false);

    libGame_gf_HeroEnteredTransport(libGDHL_gt_HeroRexxarStuffMishaIntoTransport);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Kick Misha Out Of Transport

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarKickMishaOutOfTransport_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup auto38092D9F_g;

    int auto38092D9F_u;

    unit auto38092D9F_var;



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_heroUnit) == "HeroRexxar") || (UnitGetType(libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_activeVehicle) == "HeroRexxar")))) {

            return false;

        }



        if (!((libGDHL_gv_rexxarMishaUnit[libGame_gf_HeroExitingTransportPlayerExiting()] != null))) {

            return false;

        }



        if (!((UnitIsAlive(libGDHL_gv_rexxarMishaUnit[libGame_gf_HeroExitingTransportPlayerExiting()]) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto38092D9F_g = libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_heroUnitGroup;

    auto38092D9F_u = UnitGroupCount(auto38092D9F_g, c_unitCountAll);

    for (;; auto38092D9F_u -= 1) {

        auto38092D9F_var = UnitGroupUnitFromEnd(auto38092D9F_g, auto38092D9F_u);

        if (auto38092D9F_var == null) { break; }

        if ((UnitGetType(auto38092D9F_var) == "RexxarMisha") && (UnitHasBehavior2(auto38092D9F_var, "UsingVehicle") == true)) {

            Wait(0.0625, c_timeGame);

            UnitSetPosition(auto38092D9F_var, UnitGetPosition(libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_heroUnit), false);

            UnitBehaviorRemove(auto38092D9F_var, "UsingVehicle", 1);

            Wait(0.0625, c_timeGame);

            UnitCreateEffectUnit(libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_heroUnit, "RexxarMishaFollowInitialSet", libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_heroUnit);

        }



    }

    libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_heroUnit);

    libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_cameraCurrentTargetGroup = libNtve_gf_ConvertUnitToUnitGroup(libGame_gv_players[libGame_gf_HeroExitingTransportPlayerExiting()].lv_heroUnit);

    libGame_gf_CameraUpdateCameraForPlayer(libGame_gf_HeroExitingTransportPlayerExiting());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarKickMishaOutOfTransport_Init () {

    libGDHL_gt_HeroRexxarKickMishaOutOfTransport = TriggerCreate("libGDHL_gt_HeroRexxarKickMishaOutOfTransport_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarKickMishaOutOfTransport, false);

    libGame_gf_HeroExitedTransport(libGDHL_gt_HeroRexxarKickMishaOutOfTransport);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Misha Mounted Behavior Disabled

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarMishaMountedBehaviorDisabled_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "RexxarMisha"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(EventUnit(), "SummonedUnitMountBehaviorSuppressor", EventUnit(), 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarMishaMountedBehaviorDisabled_Init () {

    libGDHL_gt_HeroRexxarMishaMountedBehaviorDisabled = TriggerCreate("libGDHL_gt_HeroRexxarMishaMountedBehaviorDisabled_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarMishaMountedBehaviorDisabled, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarMishaMountedBehaviorDisabled, null, "SummonedUnitMountBehavior", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Alive Misha Grizzled Fortitude

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarAliveMishaGrizzledFortitude_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup autoD003F0D9_g;

    int autoD003F0D9_u;

    unit autoD003F0D9_var;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnit) == "HeroRexxar"))) {

            return false;

        }



        if (!((PlayerHasTalent(libGame_gf_HeroGainTalentPlayer(), "RexxarSpiritBondGrizzledFortitude") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoD003F0D9_g = libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnitGroup;

    autoD003F0D9_u = UnitGroupCount(autoD003F0D9_g, c_unitCountAll);

    for (;; autoD003F0D9_u -= 1) {

        autoD003F0D9_var = UnitGroupUnitFromEnd(autoD003F0D9_g, autoD003F0D9_u);

        if (autoD003F0D9_var == null) { break; }

        if (((UnitGetType(autoD003F0D9_var) == "RexxarMisha") || (UnitGetType(autoD003F0D9_var) == "HeroRexxar"))) {

            UnitBehaviorAdd(autoD003F0D9_var, "TalentBucketBlockChargedTarget", autoD003F0D9_var, 1);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarAliveMishaGrizzledFortitude_Init () {

    libGDHL_gt_HeroRexxarAliveMishaGrizzledFortitude = TriggerCreate("libGDHL_gt_HeroRexxarAliveMishaGrizzledFortitude_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaGrizzledFortitude, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroRexxarAliveMishaGrizzledFortitude);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Alive Misha Easy Prey

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarAliveMishaEasyPrey_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup auto8CA001CC_g;

    int auto8CA001CC_u;

    unit auto8CA001CC_var;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnit) == "HeroRexxar"))) {

            return false;

        }



        if (!((PlayerHasTalent(libGame_gf_HeroGainTalentPlayer(), "RexxarSpiritBondEasyPrey") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto8CA001CC_g = libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnitGroup;

    auto8CA001CC_u = UnitGroupCount(auto8CA001CC_g, c_unitCountAll);

    for (;; auto8CA001CC_u -= 1) {

        auto8CA001CC_var = UnitGroupUnitFromEnd(auto8CA001CC_g, auto8CA001CC_u);

        if (auto8CA001CC_var == null) { break; }

        if ((UnitGetType(auto8CA001CC_var) == "RexxarMisha")) {

            UnitBehaviorAdd(auto8CA001CC_var, "RexxarMishaEasyPreyDamageReduction", auto8CA001CC_var, 1);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarAliveMishaEasyPrey_Init () {

    libGDHL_gt_HeroRexxarAliveMishaEasyPrey = TriggerCreate("libGDHL_gt_HeroRexxarAliveMishaEasyPrey_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaEasyPrey, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroRexxarAliveMishaEasyPrey);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Alive Misha Wildfire Bear

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarAliveMishaWildfireBear_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup autoEE0ABCAC_g;

    int autoEE0ABCAC_u;

    unit autoEE0ABCAC_var;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnit) == "HeroRexxar"))) {

            return false;

        }



        if (!((PlayerHasTalent(libGame_gf_HeroGainTalentPlayer(), "RexxarSpiritBondWildfireBear") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoEE0ABCAC_g = libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnitGroup;

    autoEE0ABCAC_u = UnitGroupCount(autoEE0ABCAC_g, c_unitCountAll);

    for (;; autoEE0ABCAC_u -= 1) {

        autoEE0ABCAC_var = UnitGroupUnitFromEnd(autoEE0ABCAC_g, autoEE0ABCAC_u);

        if (autoEE0ABCAC_var == null) { break; }

        if ((UnitGetType(autoEE0ABCAC_var) == "RexxarMisha")) {

            UnitBehaviorAdd(autoEE0ABCAC_var, "RexxarSpiritBondWildfireBear", autoEE0ABCAC_var, 1);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarAliveMishaWildfireBear_Init () {

    libGDHL_gt_HeroRexxarAliveMishaWildfireBear = TriggerCreate("libGDHL_gt_HeroRexxarAliveMishaWildfireBear_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaWildfireBear, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroRexxarAliveMishaWildfireBear);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Alive Misha Animal Husbandry

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarAliveMishaAnimalHusbandry_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup auto3BFCD07E_g;

    int auto3BFCD07E_u;

    unit auto3BFCD07E_var;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnit) == "HeroRexxar"))) {

            return false;

        }



        if (!((PlayerHasTalent(libGame_gf_HeroGainTalentPlayer(), "RexxarAnimalHusbandry") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto3BFCD07E_g = libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnitGroup;

    auto3BFCD07E_u = UnitGroupCount(auto3BFCD07E_g, c_unitCountAll);

    for (;; auto3BFCD07E_u -= 1) {

        auto3BFCD07E_var = UnitGroupUnitFromEnd(auto3BFCD07E_g, auto3BFCD07E_u);

        if (auto3BFCD07E_var == null) { break; }

        if ((UnitGetType(auto3BFCD07E_var) == "RexxarMisha")) {

            UnitBehaviorAdd(auto3BFCD07E_var, "RexxarAnimalHusbandryHealthBuffCarry", auto3BFCD07E_var, 1);

            UnitBehaviorAdd(auto3BFCD07E_var, "RexxarAnimalHusbandryTokenCounter", auto3BFCD07E_var, 1);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarAliveMishaAnimalHusbandry_Init () {

    libGDHL_gt_HeroRexxarAliveMishaAnimalHusbandry = TriggerCreate("libGDHL_gt_HeroRexxarAliveMishaAnimalHusbandry_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaAnimalHusbandry, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroRexxarAliveMishaAnimalHusbandry);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Alive Misha Dire Beast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarAliveMishaDireBeast_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup auto08B50D48_g;

    int auto08B50D48_u;

    unit auto08B50D48_var;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnit) == "HeroRexxar"))) {

            return false;

        }



        if (!((PlayerHasTalent(libGame_gf_HeroGainTalentPlayer(), "RexxarDireBeast") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto08B50D48_g = libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnitGroup;

    auto08B50D48_u = UnitGroupCount(auto08B50D48_g, c_unitCountAll);

    for (;; auto08B50D48_u -= 1) {

        auto08B50D48_var = UnitGroupUnitFromEnd(auto08B50D48_g, auto08B50D48_u);

        if (auto08B50D48_var == null) { break; }

        if ((UnitGetType(auto08B50D48_var) == "RexxarMisha")) {

            UnitBehaviorAdd(auto08B50D48_var, "RexxarDireBeastTokenCounter", auto08B50D48_var, 1);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarAliveMishaDireBeast_Init () {

    libGDHL_gt_HeroRexxarAliveMishaDireBeast = TriggerCreate("libGDHL_gt_HeroRexxarAliveMishaDireBeast_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaDireBeast, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroRexxarAliveMishaDireBeast);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Alive Misha Primal Intimidation

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarAliveMishaPrimalIntimidation_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup auto05C5E352_g;

    int auto05C5E352_u;

    unit auto05C5E352_var;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroRexxar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto05C5E352_g = libGame_gv_players[UnitGetOwner(EventUnit())].lv_heroUnitGroup;

    auto05C5E352_u = UnitGroupCount(auto05C5E352_g, c_unitCountAll);

    for (;; auto05C5E352_u -= 1) {

        auto05C5E352_var = UnitGroupUnitFromEnd(auto05C5E352_g, auto05C5E352_u);

        if (auto05C5E352_var == null) { break; }

        if ((UnitGetType(auto05C5E352_var) == "RexxarMisha")) {

            UnitBehaviorAdd(auto05C5E352_var, "TalentImposingPresenceCarry", EventUnit(), 1);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarAliveMishaPrimalIntimidation_Init () {

    libGDHL_gt_HeroRexxarAliveMishaPrimalIntimidation = TriggerCreate("libGDHL_gt_HeroRexxarAliveMishaPrimalIntimidation_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaPrimalIntimidation, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarAliveMishaPrimalIntimidation, null, "TalentImposingPresenceCarry", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Alive Misha Hunter-Gatherer

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarAliveMishaHunterGatherer_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    unitgroup autoD5C7FCC2_g;

    int autoD5C7FCC2_u;

    unit autoD5C7FCC2_var;



    // Variable Initialization

    lv_unit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) != "RexxarMisha"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoD5C7FCC2_g = libGame_gv_players[UnitGetOwner(lv_unit)].lv_heroUnitGroup;

    autoD5C7FCC2_u = UnitGroupCount(autoD5C7FCC2_g, c_unitCountAll);

    for (;; autoD5C7FCC2_u -= 1) {

        autoD5C7FCC2_var = UnitGroupUnitFromEnd(autoD5C7FCC2_g, autoD5C7FCC2_u);

        if (autoD5C7FCC2_var == null) { break; }

        if ((UnitGetType(autoD5C7FCC2_var) == "RexxarMisha")) {

            UnitBehaviorAdd(autoD5C7FCC2_var, "RexxarHunterGathererMishaTokenCounter", autoD5C7FCC2_var, 1);

            UnitBehaviorAdd(autoD5C7FCC2_var, "RexxarHunterGathererCarryBehavior", autoD5C7FCC2_var, 1);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarAliveMishaHunterGatherer_Init () {

    libGDHL_gt_HeroRexxarAliveMishaHunterGatherer = TriggerCreate("libGDHL_gt_HeroRexxarAliveMishaHunterGatherer_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarAliveMishaHunterGatherer, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarAliveMishaHunterGatherer, null, "RexxarHunterGathererCarryBehavior", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Hunter-Gatherer Controller

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarHunterGathererController_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    unitgroup auto943832EA_g;

    int auto943832EA_u;

    unit auto943832EA_var;



    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);



    // Conditions

    if (testConds) {

        if (!((lv_player > 0))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((libGDHL_gv_hunterGathererGlobe[lv_player] != lv_unit))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "RexxarHunterGatherer") == true))) {

            return false;

        }



        if (!((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroRexxar"))) {

            return false;

        }



        if (!((UnitBehaviorCount(libGame_gv_players[lv_player].lv_heroUnit, "RexxarHunterGathererQuestCompleteCarry") == 0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_hunterGathererGlobe[lv_player] = lv_unit;

    auto943832EA_g = libGame_gv_players[lv_player].lv_heroUnitGroup;

    auto943832EA_u = UnitGroupCount(auto943832EA_g, c_unitCountAll);

    for (;; auto943832EA_u -= 1) {

        auto943832EA_var = UnitGroupUnitFromEnd(auto943832EA_g, auto943832EA_u);

        if (auto943832EA_var == null) { break; }

        UnitCreateEffectUnit(auto943832EA_var, "RexxarHunterGathererModifyTokenCount", auto943832EA_var);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarHunterGathererController_Init () {

    libGDHL_gt_HeroRexxarHunterGathererController = TriggerCreate("libGDHL_gt_HeroRexxarHunterGathererController_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarHunterGathererController, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarHunterGathererController, c_playerAny, "RexxarHunterGathererDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Thrill of the Hunt Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarThrilloftheHuntProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventPlayerEffectUsedUnit(c_effectUnitCaster)) == "HeroRexxar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitIsAlive(libGDHL_gv_rexxarMishaUnit[lv_player]) == true)) {

        UnitBehaviorAdd(libGDHL_gv_rexxarMishaUnit[lv_player], "RexxarThrilloftheHuntBuff", EventPlayerEffectUsedUnit(c_effectUnitCaster), 1);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarThrilloftheHuntProc_Init () {

    libGDHL_gt_HeroRexxarThrilloftheHuntProc = TriggerCreate("libGDHL_gt_HeroRexxarThrilloftheHuntProc_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarThrilloftheHuntProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarThrilloftheHuntProc, c_playerAny, "RexxarThrilloftheHuntProcSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Hardened Skin

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarHardenedSkin_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventPlayerEffectUsedUnit(c_effectUnitCaster)) == "HeroRexxar"))) {

            return false;

        }



        if (!((UnitIsAlive(libGDHL_gv_rexxarMishaUnit[lv_player]) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(libGDHL_gv_rexxarMishaUnit[lv_player], "RexxarHardenedSkinBuff", EventPlayerEffectUsedUnit(c_effectUnitCaster), 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarHardenedSkin_Init () {

    libGDHL_gt_HeroRexxarHardenedSkin = TriggerCreate("libGDHL_gt_HeroRexxarHardenedSkin_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarHardenedSkin, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroRexxarHardenedSkin, c_playerAny, "RexxarHardenedSkinCastSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Bestial Wrath Spirit Bond/Bear Necessities Heal Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarBestialWrathSpiritBondBearNecessitiesHealProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_mishaUnit;

    unit lv_damagedUnit;

    int lv_mishaPlayer;

    fixed lv_healAmount;

    fixed lv_spiritBondHealMod;

    fixed lv_bearNecessitiesHealMod;

    fixed lv_bearNecessitiesMendPetHealMod;

    fixed lv_finalHealMod;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_mishaUnit = EventUnitDamageSourceUnit();

    lv_damagedUnit = EventUnit();

    lv_mishaPlayer = UnitGetOwner(lv_mishaUnit);

    lv_spiritBondHealMod = 0.5;

    lv_bearNecessitiesHealMod = 0.5;

    lv_bearNecessitiesMendPetHealMod = 1.0;



    // Conditions

    if (testConds) {

        if (!((((PlayerHasTalent(lv_mishaPlayer, "RexxarBearNecessitiesCharge") == true) && (UnitFilterMatch(lv_damagedUnit, lv_mishaPlayer, UnitFilter((1 << c_targetFilterMinion), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly) | (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true)) || ((PlayerHasTalent(lv_mishaPlayer, "RexxarSpiritBond") == true) && (UnitBehaviorCount(EventUnitDamageSourceUnit(), "RexxarBestialWrathMishaBehavior") == 1))))) {

            return false;

        }



        if (!((UnitIsAlive(libGame_gv_players[lv_mishaPlayer].lv_heroUnit) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((PlayerHasTalent(lv_mishaPlayer, "RexxarSpiritBond") == true) && (UnitBehaviorCount(lv_mishaUnit, "RexxarBestialWrathMishaBehavior") == 1)) {

        lv_finalHealMod += lv_spiritBondHealMod;

    }

    if ((PlayerHasTalent(lv_mishaPlayer, "RexxarBearNecessitiesCharge") == true) && (UnitFilterMatch(lv_damagedUnit, lv_mishaPlayer, UnitFilter((1 << c_targetFilterMinion), 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly) | (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true)) {

        if ((UnitBehaviorCount(lv_mishaUnit, "RexxarMendPet") == 1)) {

            lv_finalHealMod += lv_bearNecessitiesMendPetHealMod;

        }

        else {

            lv_finalHealMod += lv_bearNecessitiesHealMod;

        }

    }

    lv_healAmount = ((EventUnitDamageAmount() + EventUnitDamageBehaviorShield()) * lv_finalHealMod);

    CatalogFieldValueSetFixed(c_gameCatalogEffect, "RexxarMishaBasicAttackRexxarHealingCreateHealer", "RechargeVitalRate", lv_mishaPlayer, lv_healAmount);

    UnitCreateEffectUnitWithSource(EventUnitDamageSourceUnit(), "RexxarMishaBasicAttackRexxarHealingCreateHealer", libGame_gv_players[lv_mishaPlayer].lv_heroUnit, c_gameCatalogAbil, "RexxarBestialWrath");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarBestialWrathSpiritBondBearNecessitiesHealProc_Init () {

    libGDHL_gt_HeroRexxarBestialWrathSpiritBondBearNecessitiesHealProc = TriggerCreate("libGDHL_gt_HeroRexxarBestialWrathSpiritBondBearNecessitiesHealProc_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarBestialWrathSpiritBondBearNecessitiesHealProc, false);

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroRexxarBestialWrathSpiritBondBearNecessitiesHealProc, null, c_unitDamageTypeAny, c_unitDamageEither, "RexxarMishaWeaponDamage");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Charge Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarChargeCast_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((libGDHL_gv_commandMishaTargetPoint[EventPlayer()] != null))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gf_HeroRexxarMishaFocusOff(EventPlayer());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarChargeCast_Init () {

    libGDHL_gt_HeroRexxarChargeCast = TriggerCreate("libGDHL_gt_HeroRexxarChargeCast_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarChargeCast, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroRexxarChargeCast, null, AbilityCommand("RexxarMishaChargeRedirect", 0), c_abilEffectStageCast, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Feign Death Overlay On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarFeignDeathOverlayOn_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitIsAlive(EventUnit()) == true) && (UnitTestState(EventUnit(), c_unitStateHallucination) == false) && (UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(EventPlayer(), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarFeignDeathOverlayOn_Init () {

    libGDHL_gt_HeroRexxarFeignDeathOverlayOn = TriggerCreate("libGDHL_gt_HeroRexxarFeignDeathOverlayOn_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarFeignDeathOverlayOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarFeignDeathOverlayOn, null, "RexxarFeignDeathInvulnerable", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Rexxar - Feign Death Overlay Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroRexxarFeignDeathOverlayOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroRexxarFeignDeathOverlayOff_Init () {

    libGDHL_gt_HeroRexxarFeignDeathOverlayOff = TriggerCreate("libGDHL_gt_HeroRexxarFeignDeathOverlayOff_Func");

    TriggerEnable(libGDHL_gt_HeroRexxarFeignDeathOverlayOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroRexxarFeignDeathOverlayOff, null, "RexxarFeignDeathInvulnerable", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Complete Hearthstone

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerCompleteHearthstone_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroSgtHammer"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(EventUnit(), "SgtHammerHearthed", EventUnit(), 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerCompleteHearthstone_Init () {

    libGDHL_gt_HeroSgtHammerCompleteHearthstone = TriggerCreate("libGDHL_gt_HeroSgtHammerCompleteHearthstone_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerCompleteHearthstone, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroSgtHammerCompleteHearthstone, null, AbilityCommand("Hearthstone", 0), c_abilEffectStageFinish, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroSgtHammerCompleteHearthstone, null, AbilityCommand("Hearthstone", 0), c_unitAbilStageComplete, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Siege Mode Update

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerSiegeModeUpdate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_sgtHammerUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_sgtHammerUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(lv_sgtHammerUnit) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitAbilityReset(lv_sgtHammerUnit, AbilityCommand("SgtHammerSiegeMode", 0), c_spendLocationAll);

    UnitAbilitySpendExplicit(lv_sgtHammerUnit, AbilityCommand("SgtHammerSiegeMode", 0), c_spendLocationAll, 0.0, 1.0, 1.0, 1.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerSiegeModeUpdate_Init () {

    libGDHL_gt_HeroSgtHammerSiegeModeUpdate = TriggerCreate("libGDHL_gt_HeroSgtHammerSiegeModeUpdate_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerSiegeModeUpdate, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSgtHammerSiegeModeUpdate, null, "SiegeMode", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Blunt Force Gun - Prep Start

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerBluntForceGunPrepStart_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_casterPoint;

    point lv_targetPoint;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_casterPoint = UnitGetPosition(EventUnit());

    lv_targetPoint = EventUnitTargetPoint();



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectPoint(EventUnit(), "SgtHammerModifyUnitTankTurret", EventUnitTargetPoint());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerBluntForceGunPrepStart_Init () {

    libGDHL_gt_HeroSgtHammerBluntForceGunPrepStart = TriggerCreate("libGDHL_gt_HeroSgtHammerBluntForceGunPrepStart_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunPrepStart, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroSgtHammerBluntForceGunPrepStart, null, AbilityCommand("SgtHammerBluntForceGun", 0), c_abilEffectStagePrep, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Blunt Force Gun - Target Calculation

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculation_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_casterPoint;

    unit lv_sgtHammerCasterUnit;

    int lv_sgtHammerCasterPlayer;

    point lv_targetPoint;

    fixed lv_targetAngle;

    point lv_abilityTargetPoint;

    point lv_originTargetPoint;

    fixed lv_yPointOffset;

    fixed lv_xPointOffsetDistance;

    fixed lv_xofFoundPoint;

    fixed lv_yofFoundPoint;

    fixed lv_yTriangleOriginal;

    fixed lv_yTriangleNew;

    fixed lv_xTriangleOriginal;

    fixed lv_xTriangleNew;

    int lv_ping;

    fixed lv_distanceBetweenPoints;

    fixed lv_distanceBetweenPointsIncrement;

    fixed lv_pingDistance;

    int lv_pingLoop;

    int lv_pingIncrement;

    int lv_pingPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_casterPoint = UnitGetPosition(EventUnit());

    lv_sgtHammerCasterUnit = EventUnit();

    lv_sgtHammerCasterPlayer = EventPlayer();

    lv_targetPoint = EventUnitTargetPoint();



    // Conditions

    if (testConds) {

        if (!((libGDHL_gv_heroSgtHammerUseEffectForBFGTargetCalculation == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    PathDestroy(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer]);

    PathDestroy(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer]);

    if ((UnitGetType(lv_sgtHammerCasterUnit) == "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

        if ((EventUnitTargetPoint() != libGDHL_gv_heroSgtHammerOrbitalBFGTargetPoint[lv_sgtHammerCasterPlayer])) {

            return true;

        }



    }



    if ((libMapM_gf_MapMechanicExistsOnMap("HauntedMinesRework") == true)) {

        if ((((UnitGetType(lv_sgtHammerCasterUnit) == "SgtHammerBluntForceGunInvisibleOrbitalDummy") && (libGDHL_gv_heroSgtHammerSgtHammerWasAboveGroundWhenSheCast[lv_sgtHammerCasterPlayer] == false)) || ((lv_sgtHammerCasterUnit == libGame_gv_players[lv_sgtHammerCasterPlayer].lv_heroUnit) && (libNtve_gf_UnitInRegion(libGame_gv_players[lv_sgtHammerCasterPlayer].lv_heroUnit, RegionFromName("Underworld Below")) == true)))) {

            if ((EventUnit() == libGame_gv_players[lv_sgtHammerCasterPlayer].lv_heroUnit)) {

                libGDHL_gv_heroSgtHammerSgtHammerWasAboveGroundWhenSheCast[lv_sgtHammerCasterPlayer] = false;

            }



            lv_abilityTargetPoint = libGDHL_gf_TargetCalculation(lv_targetPoint, lv_casterPoint, RegionEntireMap());

            if ((UnitGetType(lv_sgtHammerCasterUnit) != "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

                libGDHL_gv_heroSgtHammerOrbitalBFGTargetPoint[lv_sgtHammerCasterPlayer] = lv_abilityTargetPoint;

            }



            lv_targetAngle = AngleBetweenPoints(lv_casterPoint, lv_abilityTargetPoint);

            if ((PointGetY(lv_abilityTargetPoint) >= 130.0)) {

                lv_xofFoundPoint = PointGetX(lv_abilityTargetPoint);

                lv_yofFoundPoint = PointGetY(lv_abilityTargetPoint);

                if ((PointGetX(lv_abilityTargetPoint) > PointGetX(lv_casterPoint))) {

                    lv_yTriangleOriginal = (PointGetY(lv_casterPoint) - lv_yofFoundPoint);

                    lv_xTriangleOriginal = (PointGetX(lv_casterPoint) - lv_xofFoundPoint);

                    lv_yPointOffset = (130.0 - lv_yofFoundPoint);

                    lv_yTriangleNew = (PointGetY(lv_casterPoint) - 130.0);

                    if ((lv_yTriangleOriginal != 0.0)) {

                        lv_xTriangleNew = ((lv_yTriangleNew/lv_yTriangleOriginal) * lv_xTriangleOriginal);

                    }



                    lv_xPointOffsetDistance = (lv_xTriangleOriginal - lv_xTriangleNew);

                    lv_abilityTargetPoint = PointWithOffset(lv_abilityTargetPoint, lv_xPointOffsetDistance, lv_yPointOffset);

                }

                else {

                    if ((PointGetX(lv_abilityTargetPoint) < PointGetX(lv_casterPoint))) {

                        lv_yTriangleOriginal = (PointGetY(lv_casterPoint) - lv_yofFoundPoint);

                        lv_xTriangleOriginal = (lv_xofFoundPoint - PointGetX(lv_casterPoint));

                        lv_yPointOffset = (130.0 - lv_yofFoundPoint);

                        lv_yTriangleNew = (PointGetY(lv_casterPoint) - 130.0);

                        if ((lv_yTriangleOriginal != 0.0)) {

                            lv_xTriangleNew = ((lv_yTriangleNew/lv_yTriangleOriginal) * lv_xTriangleOriginal);

                        }



                        lv_xPointOffsetDistance = (lv_xTriangleOriginal - lv_xTriangleNew);

                        lv_xPointOffsetDistance = (-1.0 * lv_xPointOffsetDistance);

                        lv_abilityTargetPoint = PointWithOffset(lv_abilityTargetPoint, lv_xPointOffsetDistance, lv_yPointOffset);

                    }



                }

            }



            lv_distanceBetweenPoints = DistanceBetweenPoints(lv_casterPoint, lv_abilityTargetPoint);

            if ((lv_abilityTargetPoint != null)) {

                lv_originTargetPoint = libGDHL_gf_TargetCalculation(PointWithOffsetPolar(lv_casterPoint, 1.0, (lv_targetAngle + 180)), lv_casterPoint, RegionFromName("Underworld Above"));

                if ((PointGetY(lv_originTargetPoint) >= 130.0)) {

                    lv_xofFoundPoint = PointGetX(lv_originTargetPoint);

                    lv_yofFoundPoint = PointGetY(lv_originTargetPoint);

                    if ((PointGetX(lv_originTargetPoint) > PointGetX(lv_casterPoint))) {

                        lv_yTriangleOriginal = (PointGetY(lv_casterPoint) - lv_yofFoundPoint);

                        lv_xTriangleOriginal = (PointGetX(lv_casterPoint) - lv_xofFoundPoint);

                        lv_yPointOffset = (130.0 - lv_yofFoundPoint);

                        lv_yTriangleNew = (PointGetY(lv_casterPoint) - 130.0);

                        if ((lv_yTriangleOriginal != 0.0)) {

                            lv_xTriangleNew = ((lv_yTriangleNew/lv_yTriangleOriginal) * lv_xTriangleOriginal);

                        }



                        lv_xPointOffsetDistance = (lv_xTriangleOriginal - lv_xTriangleNew);

                        lv_originTargetPoint = PointWithOffset(lv_originTargetPoint, lv_xPointOffsetDistance, lv_yPointOffset);

                    }

                    else {

                        if ((PointGetX(lv_originTargetPoint) < PointGetX(lv_casterPoint))) {

                            lv_yTriangleOriginal = (PointGetY(lv_casterPoint) - lv_yofFoundPoint);

                            lv_xTriangleOriginal = (lv_xofFoundPoint - PointGetX(lv_casterPoint));

                            lv_yPointOffset = (130.0 - lv_yofFoundPoint);

                            lv_yTriangleNew = (PointGetY(lv_casterPoint) - 130.0);

                            if ((lv_yTriangleOriginal != 0.0)) {

                                lv_xTriangleNew = ((lv_yTriangleNew/lv_yTriangleOriginal) * lv_xTriangleOriginal);

                            }



                            lv_xPointOffsetDistance = (lv_xTriangleOriginal - lv_xTriangleNew);

                            lv_xPointOffsetDistance = (-1.0 * lv_xPointOffsetDistance);

                            lv_originTargetPoint = PointWithOffset(lv_originTargetPoint, lv_xPointOffsetDistance, lv_yPointOffset);

                        }

                        else {

                            if ((PointGetX(lv_originTargetPoint) == PointGetX(lv_casterPoint))) {

                                lv_originTargetPoint = PointWithOffset(lv_originTargetPoint, 0.0, lv_yPointOffset);

                            }



                        }

                    }

                }



                if ((UnitGetType(lv_sgtHammerCasterUnit) != "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

                    libGDHL_gv_heroSgtHammerOrbitalBFGOriginPoint[lv_sgtHammerCasterPlayer] = lv_originTargetPoint;

                }



                if ((UnitGetType(lv_sgtHammerCasterUnit) == "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

                    UnitCreateEffectPointWithSource(lv_sgtHammerCasterUnit, "BluntForceGunLaunchMissileOrbital", lv_abilityTargetPoint, c_gameCatalogAbil, "SgtHammerBluntForceGun");

                }

                else {

                    UnitCreateEffectPointWithSource(lv_sgtHammerCasterUnit, "BluntForceGunLaunchMissile", lv_abilityTargetPoint, c_gameCatalogAbil, "SgtHammerBluntForceGun");

                }

            }



        }

        else {

            if ((EventUnit() == libGame_gv_players[lv_sgtHammerCasterPlayer].lv_heroUnit)) {

                libGDHL_gv_heroSgtHammerSgtHammerWasAboveGroundWhenSheCast[lv_sgtHammerCasterPlayer] = true;

            }



            lv_abilityTargetPoint = libGDHL_gf_TargetCalculation(lv_targetPoint, lv_casterPoint, RegionFromName("Underworld Above"));

            if ((UnitGetType(lv_sgtHammerCasterUnit) != "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

                libGDHL_gv_heroSgtHammerOrbitalBFGTargetPoint[lv_sgtHammerCasterPlayer] = lv_abilityTargetPoint;

            }



            lv_targetAngle = AngleBetweenPoints(lv_casterPoint, lv_abilityTargetPoint);

            if ((PointGetY(lv_abilityTargetPoint) <= 130.0)) {

                lv_xofFoundPoint = PointGetX(lv_abilityTargetPoint);

                lv_yofFoundPoint = PointGetY(lv_abilityTargetPoint);

                if ((PointGetX(lv_abilityTargetPoint) > PointGetX(lv_casterPoint))) {

                    lv_yTriangleOriginal = (PointGetY(lv_casterPoint) - lv_yofFoundPoint);

                    lv_xTriangleOriginal = (PointGetX(lv_casterPoint) - lv_xofFoundPoint);

                    lv_yPointOffset = (130.0 - lv_yofFoundPoint);

                    lv_yTriangleNew = (PointGetY(lv_casterPoint) - 130.0);

                    if ((lv_yTriangleOriginal != 0.0)) {

                        lv_xTriangleNew = ((lv_yTriangleNew/lv_yTriangleOriginal) * lv_xTriangleOriginal);

                    }



                    lv_xPointOffsetDistance = (lv_xTriangleOriginal - lv_xTriangleNew);

                    lv_abilityTargetPoint = PointWithOffset(lv_abilityTargetPoint, lv_xPointOffsetDistance, lv_yPointOffset);

                }

                else {

                    if ((PointGetX(lv_abilityTargetPoint) < PointGetX(lv_casterPoint))) {

                        lv_yTriangleOriginal = (PointGetY(lv_casterPoint) - lv_yofFoundPoint);

                        lv_xTriangleOriginal = (lv_xofFoundPoint - PointGetX(lv_casterPoint));

                        lv_yPointOffset = (130.0 - lv_yofFoundPoint);

                        lv_yTriangleNew = (PointGetY(lv_casterPoint) - 130.0);

                        if ((lv_yTriangleOriginal != 0.0)) {

                            lv_xTriangleNew = ((lv_yTriangleNew/lv_yTriangleOriginal) * lv_xTriangleOriginal);

                        }



                        lv_xPointOffsetDistance = (lv_xTriangleOriginal - lv_xTriangleNew);

                        lv_xPointOffsetDistance = (-1.0 * lv_xPointOffsetDistance);

                        lv_abilityTargetPoint = PointWithOffset(lv_abilityTargetPoint, lv_xPointOffsetDistance, lv_yPointOffset);

                    }



                }

            }



            lv_distanceBetweenPoints = DistanceBetweenPoints(lv_casterPoint, lv_abilityTargetPoint);

            if ((lv_abilityTargetPoint != null)) {

                lv_originTargetPoint = libGDHL_gf_TargetCalculation(PointWithOffsetPolar(lv_casterPoint, 1.0, (lv_targetAngle + 180)), lv_casterPoint, RegionFromName("Underworld Above"));

                if ((PointGetY(lv_originTargetPoint) <= 130.0)) {

                    lv_xofFoundPoint = PointGetX(lv_originTargetPoint);

                    lv_yofFoundPoint = PointGetY(lv_originTargetPoint);

                    if ((PointGetX(lv_originTargetPoint) > PointGetX(lv_casterPoint))) {

                        lv_yTriangleOriginal = (PointGetY(lv_casterPoint) - lv_yofFoundPoint);

                        lv_xTriangleOriginal = (PointGetX(lv_casterPoint) - lv_xofFoundPoint);

                        lv_yPointOffset = (130.0 - lv_yofFoundPoint);

                        lv_yTriangleNew = (PointGetY(lv_casterPoint) - 130.0);

                        if ((lv_yTriangleOriginal != 0.0)) {

                            lv_xTriangleNew = ((lv_yTriangleNew/lv_yTriangleOriginal) * lv_xTriangleOriginal);

                        }



                        lv_xPointOffsetDistance = (lv_xTriangleOriginal - lv_xTriangleNew);

                        lv_originTargetPoint = PointWithOffset(lv_originTargetPoint, lv_xPointOffsetDistance, lv_yPointOffset);

                    }

                    else {

                        if ((PointGetX(lv_originTargetPoint) < PointGetX(lv_casterPoint))) {

                            lv_yTriangleOriginal = (PointGetY(lv_casterPoint) - lv_yofFoundPoint);

                            lv_xTriangleOriginal = (lv_xofFoundPoint - PointGetX(lv_casterPoint));

                            lv_yPointOffset = (130.0 - lv_yofFoundPoint);

                            lv_yTriangleNew = (PointGetY(lv_casterPoint) - 130.0);

                            if ((lv_yTriangleOriginal != 0.0)) {

                                lv_xTriangleNew = ((lv_yTriangleNew/lv_yTriangleOriginal) * lv_xTriangleOriginal);

                            }



                            lv_xPointOffsetDistance = (lv_xTriangleOriginal - lv_xTriangleNew);

                            lv_xPointOffsetDistance = (-1.0 * lv_xPointOffsetDistance);

                            lv_originTargetPoint = PointWithOffset(lv_originTargetPoint, lv_xPointOffsetDistance, lv_yPointOffset);

                        }

                        else {

                            if ((PointGetX(lv_originTargetPoint) == PointGetX(lv_casterPoint))) {

                                lv_originTargetPoint = PointWithOffset(lv_originTargetPoint, 0.0, lv_yPointOffset);

                            }



                        }

                    }

                }



                if ((UnitGetType(lv_sgtHammerCasterUnit) != "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

                    libGDHL_gv_heroSgtHammerOrbitalBFGOriginPoint[lv_sgtHammerCasterPlayer] = lv_originTargetPoint;

                }



                if ((UnitGetType(lv_sgtHammerCasterUnit) == "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

                    UnitCreateEffectPointWithSource(lv_sgtHammerCasterUnit, "BluntForceGunLaunchMissileOrbital", lv_abilityTargetPoint, c_gameCatalogAbil, "SgtHammerBluntForceGun");

                }

                else {

                    UnitCreateEffectPointWithSource(lv_sgtHammerCasterUnit, "BluntForceGunLaunchMissile", lv_abilityTargetPoint, c_gameCatalogAbil, "SgtHammerBluntForceGun");

                }

            }



        }

    }

    else {

        lv_abilityTargetPoint = libGDHL_gf_TargetCalculation(lv_targetPoint, lv_casterPoint, RegionPlayableMap());

        if ((UnitGetType(lv_sgtHammerCasterUnit) != "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

            libGDHL_gv_heroSgtHammerOrbitalBFGTargetPoint[lv_sgtHammerCasterPlayer] = lv_abilityTargetPoint;

        }



        lv_targetAngle = AngleBetweenPoints(lv_casterPoint, lv_targetPoint);

        if ((lv_abilityTargetPoint != null)) {

            if ((UnitGetType(lv_sgtHammerCasterUnit) == "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

                UnitCreateEffectPointWithSource(lv_sgtHammerCasterUnit, "BluntForceGunLaunchMissileOrbital", lv_abilityTargetPoint, c_gameCatalogAbil, "SgtHammerBluntForceGun");

            }

            else {

                UnitCreateEffectPointWithSource(lv_sgtHammerCasterUnit, "BluntForceGunLaunchMissile", lv_abilityTargetPoint, c_gameCatalogAbil, "SgtHammerBluntForceGun");

            }

            lv_originTargetPoint = libGDHL_gf_TargetCalculation(PointWithOffsetPolar(lv_casterPoint, 1.0, (lv_targetAngle + 180)), lv_casterPoint, RegionPlayableMap());

            if ((UnitGetType(lv_sgtHammerCasterUnit) != "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

                libGDHL_gv_heroSgtHammerOrbitalBFGOriginPoint[lv_sgtHammerCasterPlayer] = lv_originTargetPoint;

            }



        }



    }

    if ((UnitGetType(lv_sgtHammerCasterUnit) == "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

        if ((PlayerGroupHasPlayer(libGame_gv_teams[libGame_gv_teamChaosIndex_C].lv_teamPlayerGroupNoNPCPlayers, lv_sgtHammerCasterPlayer) == true)) {

            PathCreateForUnit(libGame_gf_PlayersOnTeamHeroes(libGame_gv_teamChaosIndex_C, false), lv_sgtHammerCasterUnit);

            PathSetLineTexture(PathLastCreated(), c_pathLocationMinimap, "Assets\\Textures\\storm_waypointline.dds");

            libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer] = PathLastCreated();

            PathSetColor(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], c_pathLocationMinimap, Color(0.00, 0.00, 100.00));

            PathSetDestinationPoint(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], lv_abilityTargetPoint);

            PathSetVisible(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], c_pathLocationWorld, false);

            if ((PlayerGroupCount(libGame_gv_teams[libGame_gv_teamOrderIndex_C].lv_teamPlayerGroupNoNPCPlayers) > 0)) {

                PathCreateForUnit(libGame_gf_PlayersOnTeamHeroes(libGame_gv_teamOrderIndex_C, false), lv_sgtHammerCasterUnit);

                PathSetLineTexture(PathLastCreated(), c_pathLocationMinimap, "Assets\\Textures\\storm_waypointline.dds");

                libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer] = PathLastCreated();

                PathSetColor(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], c_pathLocationMinimap, Color(100.00, 0.00, 0.00));

                PathSetDestinationPoint(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], lv_abilityTargetPoint);

                PathSetVisible(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], c_pathLocationWorld, false);

            }



        }

        else {

            PathCreateForUnit(libGame_gf_PlayersOnTeamHeroes(libGame_gv_teamOrderIndex_C, false), lv_sgtHammerCasterUnit);

            PathSetLineTexture(PathLastCreated(), c_pathLocationMinimap, "Assets\\Textures\\storm_waypointline.dds");

            libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer] = PathLastCreated();

            PathSetColor(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], c_pathLocationMinimap, Color(0.00, 0.00, 100.00));

            PathSetDestinationPoint(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], lv_abilityTargetPoint);

            PathSetVisible(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], c_pathLocationWorld, false);

            if ((PlayerGroupCount(libGame_gv_teams[libGame_gv_teamChaosIndex_C].lv_teamPlayerGroupNoNPCPlayers) > 0)) {

                PathCreateForUnit(libGame_gf_PlayersOnTeamHeroes(libGame_gv_teamChaosIndex_C, false), lv_sgtHammerCasterUnit);

                PathSetLineTexture(PathLastCreated(), c_pathLocationMinimap, "Assets\\Textures\\storm_waypointline.dds");

                libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer] = PathLastCreated();

                PathSetColor(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], c_pathLocationMinimap, Color(100.00, 0.00, 0.00));

                PathSetDestinationPoint(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], lv_abilityTargetPoint);

                PathSetVisible(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], c_pathLocationWorld, false);

            }



        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculation_Init () {

    libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculation = TriggerCreate("libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculation_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculation, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculation, null, AbilityCommand("SgtHammerBluntForceGun", 0), c_abilEffectStageFinish, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Blunt Force Gun - Target Calculation (Via Effect)

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculationViaEffect_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_casterPoint;

    unit lv_sgtHammerCasterUnit;

    int lv_sgtHammerCasterPlayer;

    point lv_targetPoint;

    fixed lv_targetAngle;

    point lv_abilityTargetPoint;

    point lv_originTargetPoint;

    fixed lv_yPointOffset;

    fixed lv_xPointOffsetDistance;

    fixed lv_xofFoundPoint;

    fixed lv_yofFoundPoint;

    fixed lv_yTriangleOriginal;

    fixed lv_yTriangleNew;

    fixed lv_xTriangleOriginal;

    fixed lv_xTriangleNew;

    int lv_ping;

    fixed lv_distanceBetweenPoints;

    fixed lv_distanceBetweenPointsIncrement;

    fixed lv_pingDistance;

    int lv_pingLoop;

    int lv_pingIncrement;

    int lv_pingPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_casterPoint = UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitCaster));

    lv_sgtHammerCasterUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_sgtHammerCasterPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_targetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);



    // Conditions

    if (testConds) {

        if (!((libGDHL_gv_heroSgtHammerUseEffectForBFGTargetCalculation == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    PathDestroy(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer]);

    PathDestroy(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer]);

    if ((UnitGetType(lv_sgtHammerCasterUnit) == "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

        if ((lv_targetPoint != libGDHL_gv_heroSgtHammerOrbitalBFGTargetPoint[lv_sgtHammerCasterPlayer])) {

            return true;

        }



    }



    lv_abilityTargetPoint = libGDHL_gf_TargetCalculation(lv_targetPoint, lv_casterPoint, RegionPlayableMap());

    if ((UnitGetType(lv_sgtHammerCasterUnit) != "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

        libGDHL_gv_heroSgtHammerOrbitalBFGTargetPoint[lv_sgtHammerCasterPlayer] = lv_abilityTargetPoint;

    }



    lv_targetAngle = AngleBetweenPoints(lv_casterPoint, lv_targetPoint);

    if ((lv_abilityTargetPoint != null)) {

        if ((UnitGetType(lv_sgtHammerCasterUnit) == "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

            UnitCreateEffectPointWithSource(lv_sgtHammerCasterUnit, "BluntForceGunLaunchMissileOrbital", lv_abilityTargetPoint, c_gameCatalogAbil, "SgtHammerBluntForceGun");

        }

        else {

            UnitCreateEffectPointWithSource(lv_sgtHammerCasterUnit, "BluntForceGunLaunchMissile", lv_abilityTargetPoint, c_gameCatalogAbil, "SgtHammerBluntForceGun");

        }

        lv_originTargetPoint = libGDHL_gf_TargetCalculation(PointWithOffsetPolar(lv_casterPoint, 1.0, (lv_targetAngle + 180)), lv_casterPoint, RegionPlayableMap());

        if ((UnitGetType(lv_sgtHammerCasterUnit) != "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

            libGDHL_gv_heroSgtHammerOrbitalBFGOriginPoint[lv_sgtHammerCasterPlayer] = lv_originTargetPoint;

        }



    }



    if ((UnitGetType(lv_sgtHammerCasterUnit) == "SgtHammerBluntForceGunInvisibleOrbitalDummy")) {

        if ((PlayerGroupHasPlayer(libGame_gv_teams[libGame_gv_teamChaosIndex_C].lv_teamPlayerGroupNoNPCPlayers, lv_sgtHammerCasterPlayer) == true)) {

            PathCreateForUnit(libGame_gf_PlayersOnTeamHeroes(libGame_gv_teamChaosIndex_C, false), lv_sgtHammerCasterUnit);

            PathSetLineTexture(PathLastCreated(), c_pathLocationMinimap, "Assets\\Textures\\storm_waypointline.dds");

            libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer] = PathLastCreated();

            PathSetColor(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], c_pathLocationMinimap, Color(0.00, 0.00, 100.00));

            PathSetDestinationPoint(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], lv_abilityTargetPoint);

            PathSetVisible(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], c_pathLocationWorld, false);

            if ((PlayerGroupCount(libGame_gv_teams[libGame_gv_teamOrderIndex_C].lv_teamPlayerGroupNoNPCPlayers) > 0)) {

                PathCreateForUnit(libGame_gf_PlayersOnTeamHeroes(libGame_gv_teamOrderIndex_C, false), lv_sgtHammerCasterUnit);

                PathSetLineTexture(PathLastCreated(), c_pathLocationMinimap, "Assets\\Textures\\storm_waypointline.dds");

                libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer] = PathLastCreated();

                PathSetColor(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], c_pathLocationMinimap, Color(100.00, 0.00, 0.00));

                PathSetDestinationPoint(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], lv_abilityTargetPoint);

                PathSetVisible(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], c_pathLocationWorld, false);

            }



        }

        else {

            PathCreateForUnit(libGame_gf_PlayersOnTeamHeroes(libGame_gv_teamOrderIndex_C, false), lv_sgtHammerCasterUnit);

            PathSetLineTexture(PathLastCreated(), c_pathLocationMinimap, "Assets\\Textures\\storm_waypointline.dds");

            libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer] = PathLastCreated();

            PathSetColor(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], c_pathLocationMinimap, Color(0.00, 0.00, 100.00));

            PathSetDestinationPoint(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], lv_abilityTargetPoint);

            PathSetVisible(libGDHL_gv_heroSgtHammerPathDisplay[lv_sgtHammerCasterPlayer], c_pathLocationWorld, false);

            if ((PlayerGroupCount(libGame_gv_teams[libGame_gv_teamChaosIndex_C].lv_teamPlayerGroupNoNPCPlayers) > 0)) {

                PathCreateForUnit(libGame_gf_PlayersOnTeamHeroes(libGame_gv_teamChaosIndex_C, false), lv_sgtHammerCasterUnit);

                PathSetLineTexture(PathLastCreated(), c_pathLocationMinimap, "Assets\\Textures\\storm_waypointline.dds");

                libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer] = PathLastCreated();

                PathSetColor(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], c_pathLocationMinimap, Color(100.00, 0.00, 0.00));

                PathSetDestinationPoint(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], lv_abilityTargetPoint);

                PathSetVisible(libGDHL_gv_heroSgtHammerPathDisplayEnemies[lv_sgtHammerCasterPlayer], c_pathLocationWorld, false);

            }



        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculationViaEffect_Init () {

    libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculationViaEffect = TriggerCreate("libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculationViaEffect_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculationViaEffect, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculationViaEffect, c_playerAny, "SgtHammerBluntForceGunInitialSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Blunt Force Gun Check For Location

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerBluntForceGunCheckForLocation_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_missile;

    unit lv_dummy;

    int lv_sgtHammerPlayer;

    bool lv_dummyBoolean;



    // Automatic Variable Declarations

    fixed auto8AB055E4_at;



    // Variable Initialization

    lv_missile = EventUnit();

    lv_sgtHammerPlayer = UnitGetOwner(lv_missile);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_sgtHammerPlayer, "SgtHammerMasteryOrbitalBFGBluntForceGun") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroSgtHammerOrbitalBFGUnit[lv_sgtHammerPlayer] = lv_missile;

    auto8AB055E4_at = 0;

    while (!((UnitIsAlive(lv_missile) == false)) && auto8AB055E4_at <= 30.0) {

        Wait(0.0625, c_timeGame);

        auto8AB055E4_at = auto8AB055E4_at + 0.0625;

    }

    Wait(5.0, c_timeGame);

    if ((libGDHL_gv_heroSgtHammerOrbitalBFGUnit[lv_sgtHammerPlayer] == lv_missile)) {

        libNtve_gf_UnitCreateFacingPoint(1, "SgtHammerBluntForceGunInvisibleOrbitalDummy", c_unitCreateIgnorePlacement, lv_sgtHammerPlayer, libGDHL_gv_heroSgtHammerOrbitalBFGOriginPoint[lv_sgtHammerPlayer], libGDHL_gv_heroSgtHammerOrbitalBFGTargetPoint[lv_sgtHammerPlayer], lv_missile);

        lv_dummy = UnitLastCreated();

        UnitIssueOrder(lv_dummy, OrderTargetingPoint(AbilityCommand("SgtHammerBluntForceGun", 0), libGDHL_gv_heroSgtHammerOrbitalBFGTargetPoint[lv_sgtHammerPlayer]), c_orderQueueReplace);

        Wait(45.0, c_timeGame);

        UnitRemove(lv_dummy);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerBluntForceGunCheckForLocation_Init () {

    libGDHL_gt_HeroSgtHammerBluntForceGunCheckForLocation = TriggerCreate("libGDHL_gt_HeroSgtHammerBluntForceGunCheckForLocation_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunCheckForLocation, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSgtHammerBluntForceGunCheckForLocation, null, "BluntForceGunMissileScan", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Blunt Force Gun Apply Orbital Scan

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerBluntForceGunApplyOrbitalScan_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_sourceUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_sourceUnit = EventPlayerEffectUsedUnit(c_effectUnitSource);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_sourceUnit) == "SgtHammerBluntForceGunMissileOrbital"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnitWithSource(libGame_gv_players[UnitGetOwner(lv_sourceUnit)].lv_heroUnit, "BluntForceGunApplyMissileScanOrbital", lv_sourceUnit, c_gameCatalogAbil, "SgtHammerOrbitalBFGBluntForceGun");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerBluntForceGunApplyOrbitalScan_Init () {

    libGDHL_gt_HeroSgtHammerBluntForceGunApplyOrbitalScan = TriggerCreate("libGDHL_gt_HeroSgtHammerBluntForceGunApplyOrbitalScan_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerBluntForceGunApplyOrbitalScan, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSgtHammerBluntForceGunApplyOrbitalScan, c_playerAny, "BluntForceGunApplyMissileScanDelay");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Concussive Blast - Cancel

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerConcussiveBlastCancel_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_soundPoint;



    // Automatic Variable Declarations

    unitgroup autoC6B58B5B_g;

    int autoC6B58B5B_u;

    unit autoC6B58B5B_var;

    unitgroup autoA8C37E68_g;

    int autoA8C37E68_u;

    unit autoA8C37E68_var;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    autoC6B58B5B_g = UnitGroup("SgtHammerConcussiveBlastScrap", EventPlayer(), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    autoC6B58B5B_u = UnitGroupCount(autoC6B58B5B_g, c_unitCountAll);

    for (;; autoC6B58B5B_u -= 1) {

        autoC6B58B5B_var = UnitGroupUnitFromEnd(autoC6B58B5B_g, autoC6B58B5B_u);

        if (autoC6B58B5B_var == null) { break; }

        UnitKill(autoC6B58B5B_var);

    }

    autoA8C37E68_g = UnitGroup("SgtHammerConcussiveBlastScrapCenter", EventPlayer(), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    autoA8C37E68_u = UnitGroupCount(autoA8C37E68_g, c_unitCountAll);

    for (;; autoA8C37E68_u -= 1) {

        autoA8C37E68_var = UnitGroupUnitFromEnd(autoA8C37E68_g, autoA8C37E68_u);

        if (autoA8C37E68_var == null) { break; }

        UnitKill(autoA8C37E68_var);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerConcussiveBlastCancel_Init () {

    libGDHL_gt_HeroSgtHammerConcussiveBlastCancel = TriggerCreate("libGDHL_gt_HeroSgtHammerConcussiveBlastCancel_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerConcussiveBlastCancel, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSgtHammerConcussiveBlastCancel, c_playerAny, "ConcussiveBlastScrapCancelDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Concussive Blast Forced Destruction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerConcussiveBlastForcedDestruction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventPlayerEffectUsedUnitImpact();

    lv_player = UnitGetOwner(lv_target);



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(lv_target) == "SgtHammerConcussiveBlastScrap") || (UnitGetType(lv_target) == "SgtHammerConcussiveBlastScrapCenter")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(libGame_gv_players[lv_player].lv_heroUnit, "ConcussiveBlastScrapCancelDummySet", libGame_gv_players[lv_player].lv_heroUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerConcussiveBlastForcedDestruction_Init () {

    libGDHL_gt_HeroSgtHammerConcussiveBlastForcedDestruction = TriggerCreate("libGDHL_gt_HeroSgtHammerConcussiveBlastForcedDestruction_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerConcussiveBlastForcedDestruction, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSgtHammerConcussiveBlastForcedDestruction, c_playerAny, "DestroyPathingBlockerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Maelstrom Rounds Add Charge

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerMaelstromRoundsAddCharge_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(lv_unit) > 0))) {

            return false;

        }



        if (!((UnitGetOwner(lv_unit) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "SgtHammerSiegeModeMaelstromRounds") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitAddChargeUsed(lv_unit, "Abil/SgtHammerSiegeModeDestructiveMunitions", -1.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerMaelstromRoundsAddCharge_Init () {

    libGDHL_gt_HeroSgtHammerMaelstromRoundsAddCharge = TriggerCreate("libGDHL_gt_HeroSgtHammerMaelstromRoundsAddCharge_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerMaelstromRoundsAddCharge, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSgtHammerMaelstromRoundsAddCharge, c_playerAny, "SgtHammerSiegeModeMaelstromRoundsDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - SgtHammer - Hearthstone Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSgtHammerHearthstoneUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_sgtHammerPlayer;

    unit lv_sgtHammerUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_sgtHammerPlayer = libGame_gf_HeroPortedBackToTownPlayer();

    lv_sgtHammerUnit = libGame_gv_players[lv_sgtHammerPlayer].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(lv_sgtHammerUnit, "SiegeMode") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_sgtHammerUnit, "SiegeModeRemoveSet", lv_sgtHammerUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSgtHammerHearthstoneUsed_Init () {

    libGDHL_gt_HeroSgtHammerHearthstoneUsed = TriggerCreate("libGDHL_gt_HeroSgtHammerHearthstoneUsed_Func");

    TriggerEnable(libGDHL_gt_HeroSgtHammerHearthstoneUsed, false);

    libGame_gf_HeroPortedBackToTown(libGDHL_gt_HeroSgtHammerHearthstoneUsed);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Stitches - Gift From The Embalmer Death Timer Reduction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroStitchesGiftFromTheEmbalmerDeathTimerReduction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_stitches;

    int lv_stitchesOwner;

    fixed lv_deathTimerMod;

    fixed lv_tokenMod;

    fixed lv_finalMod;



    // Automatic Variable Declarations

    fixed autoF8D4DFFC_at;



    // Variable Initialization

    lv_stitches = libGame_gf_HeroKilledUnit();

    lv_stitchesOwner = libGame_gf_HeroKilledPlayer();

    lv_deathTimerMod = 0.02;



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_stitchesOwner, "StitchesGiftFromTheEmbalmer") == true))) {

            return false;

        }



        if (!((UnitGetTokenCount(lv_stitches, "StitchesPutridBileGiftFromTheEmbalmerTalentTokenCounter") > 0.0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoF8D4DFFC_at = 0;

    while (!((TimerGetDuration(libGame_gv_players[lv_stitchesOwner].lv_respawnTimer) > 1)) && autoF8D4DFFC_at <= 10.0) {

        Wait(1.0, c_timeGame);

        autoF8D4DFFC_at = autoF8D4DFFC_at + 1.0;

    }

    lv_tokenMod = (UnitGetTokenCount(lv_stitches, "StitchesPutridBileGiftFromTheEmbalmerTalentTokenCounter") * lv_deathTimerMod);

    lv_finalMod = (TimerGetRemaining(libGame_gv_players[lv_stitchesOwner].lv_respawnTimer) * lv_tokenMod);

    libGame_gf_HeroDeathModifyRespawnTimer(lv_stitchesOwner, (-1.0 * lv_finalMod));

    UnitCreateEffectUnit(lv_stitches, "StitchesPutridBileGiftFromTheEmbalmerTalentResetToken", lv_stitches);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroStitchesGiftFromTheEmbalmerDeathTimerReduction_Init () {

    libGDHL_gt_HeroStitchesGiftFromTheEmbalmerDeathTimerReduction = TriggerCreate("libGDHL_gt_HeroStitchesGiftFromTheEmbalmerDeathTimerReduction_Func");

    TriggerEnable(libGDHL_gt_HeroStitchesGiftFromTheEmbalmerDeathTimerReduction, false);

    libGame_gf_HeroKilled(libGDHL_gt_HeroStitchesGiftFromTheEmbalmerDeathTimerReduction);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Stitches - Hook - Hook Vision

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroStitchesHookHookVision_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_stitches;

    point lv_effectPoint;

    int lv_stitchesTeam;

    int lv_enemyTeam;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_stitches = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_effectPoint = EventPlayerEffectUsedPoint(c_effectLocationSourcePoint);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_stitchesTeam = libGame_gf_TeamNumberOfPlayer(UnitGetOwner(lv_stitches));

    if ((lv_stitchesTeam == 1)) {

        lv_enemyTeam = libCore_gv_cOMPUTER_TeamChaos;

    }

    else {

        lv_enemyTeam = libCore_gv_cOMPUTER_TeamOrder;

    }

    if ((VisIsVisibleForPlayer(lv_enemyTeam, lv_effectPoint) == true)) {

        PlayerCreateEffectUnit(lv_enemyTeam, "ApplyMissileSourceRevealer", lv_stitches);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroStitchesHookHookVision_Init () {

    libGDHL_gt_HeroStitchesHookHookVision = TriggerCreate("libGDHL_gt_HeroStitchesHookHookVision_Func");

    TriggerEnable(libGDHL_gt_HeroStitchesHookHookVision, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroStitchesHookHookVision, c_playerAny, "StitchesHookMissileSearch");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Stitches - Hook Launch Target Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroStitchesHookLaunchTargetUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_stitchesUnit;

    unit lv_targetUnit;

    point lv_currentPositionOfTarget;

    bool lv_notTimeStopped;

    unit lv_hookUnit;



    // Automatic Variable Declarations

    unitgroup auto23D1CC35_g;

    int auto23D1CC35_u;

    unit auto23D1CC35_var;



    // Variable Initialization

    lv_stitchesUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_notTimeStopped = true;



    // Actions

    if (!runActions) {

        return true;

    }



    while ((UnitHasBehavior2(lv_targetUnit, "StitchesHooked") == true) && (UnitIsAlive(lv_targetUnit) == true) && (UnitIsAlive(lv_stitchesUnit) == true) && (lv_notTimeStopped == true)) {

        if ((UnitHasBehaviorWithCategoryFlag(lv_targetUnit, c_behaviorCategoryTimeStop) == true)) {

            if ((UnitHasBehaviorWithCategoryFlag(lv_stitchesUnit, c_behaviorCategoryTimeStop) == true)) {

                auto23D1CC35_g = UnitGroup("StitchesHookLaunchUnitSecondaryMissile", UnitGetOwner(lv_stitchesUnit), RegionCircle(UnitGetPosition(lv_targetUnit), 5.0), UnitFilter((1 << c_targetFilterMissile), 0, (1 << c_targetFilterAlly) | (1 << c_targetFilterNeutral) | (1 << c_targetFilterEnemy), 0), 0);

                auto23D1CC35_u = UnitGroupCount(auto23D1CC35_g, c_unitCountAll);

                for (;; auto23D1CC35_u -= 1) {

                    auto23D1CC35_var = UnitGroupUnitFromEnd(auto23D1CC35_g, auto23D1CC35_u);

                    if (auto23D1CC35_var == null) { break; }

                    libNtve_gf_PauseUnit(auto23D1CC35_var, true);

                    lv_hookUnit = auto23D1CC35_var;

                }

                UnitCreateEffectUnit(lv_stitchesUnit, "StitchesHookPauseHookDummy", lv_stitchesUnit);

                lv_notTimeStopped = false;

            }

            else {

                UnitCreateEffectUnit(lv_stitchesUnit, "TimeStopMissileUnitRedirect", lv_targetUnit);

                lv_notTimeStopped = false;

            }

        }

        else {

            if ((UnitHasBehaviorWithCategoryFlag(lv_stitchesUnit, c_behaviorCategoryTimeStop) == true)) {

                UnitCreateEffectUnit(lv_stitchesUnit, "TimeStopMissileUnitRedirect", lv_targetUnit);

                lv_notTimeStopped = false;

            }



            if ((UnitFilterMatch(lv_targetUnit, 1, UnitFilter(0, (1 << (c_targetFilterStasis - 32)), 0, 0)) == true)) {

                UnitCreateEffectUnit(lv_stitchesUnit, "TimeStopMissileUnitRedirect", lv_targetUnit);

                lv_notTimeStopped = false;

            }



        }

        Wait(0.0625, c_timeGame);

    }

    while ((lv_hookUnit != null)) {

        if ((UnitHasBehaviorWithCategoryFlag(lv_stitchesUnit, c_behaviorCategoryTimeStop) == false)) {

            libNtve_gf_PauseUnit(lv_hookUnit, false);

            lv_hookUnit = null;

        }

        else {

            Wait(0.0625, c_timeGame);

        }

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroStitchesHookLaunchTargetUsed_Init () {

    libGDHL_gt_HeroStitchesHookLaunchTargetUsed = TriggerCreate("libGDHL_gt_HeroStitchesHookLaunchTargetUsed_Func");

    TriggerEnable(libGDHL_gt_HeroStitchesHookLaunchTargetUsed, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroStitchesHookLaunchTargetUsed, c_playerAny, "StitchesHookLaunchUnit");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Stitches - Gorge Decreases

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroStitchesGorgeDecreases_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitBehaviorCount(EventUnit(), "StitchesHookCurrentlyCasting") == 0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_SendActorMessageToUnit(EventUnit(), "AnimPlay Spell Spell,D 0 -1.000000 -1.000000 1.000000 AsTimeScale");

    libNtve_gf_SendActorMessageToUnit(EventUnit(), "AnimSetTime Spell 1.000000");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroStitchesGorgeDecreases_Init () {

    libGDHL_gt_HeroStitchesGorgeDecreases = TriggerCreate("libGDHL_gt_HeroStitchesGorgeDecreases_Func");

    TriggerEnable(libGDHL_gt_HeroStitchesGorgeDecreases, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroStitchesGorgeDecreases, null, "StitchesGorgeInitialCasterBehavior", c_unitBehaviorChangeDecrease);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Stitches - Gorge Activate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroStitchesGorgeActivate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_stitches;

    unit lv_eatenUnit;

    int lv_stitchesPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_stitches = UnitBehaviorEffectUnit(EventUnit(), "StitchesGorgeTarget", c_effectUnitCaster, 0);

    lv_eatenUnit = UnitBehaviorEffectUnit(EventUnit(), "StitchesGorgeTarget", c_effectUnitTarget, 0);

    lv_stitchesPlayer = UnitGetOwner(lv_stitches);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitTestState(lv_eatenUnit, c_unitStateHallucination) == false) && (UnitIsAlive(lv_eatenUnit) == true) && (UnitHasBehavior2(lv_eatenUnit, "HeroGenericIgnoreFullscreenOverlay") == false)) {

        if ((PlayerSkin(lv_stitchesPlayer) == "StitchesToys18")) {

            libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_eatenUnit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_GorgeToys18Overlay.StormCutscene", EventUnitBehavior());

        }

        else if ((PlayerSkin(lv_stitchesPlayer) == "StitchesToys18Var1")) {

            libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_eatenUnit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_GorgeToys18Var1Overlay.StormCutscene", EventUnitBehavior());

        }

        else if ((PlayerSkin(lv_stitchesPlayer) == "StitchesToys18Var2")) {

            libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_eatenUnit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_GorgeToys18Var2Overlay.StormCutscene", EventUnitBehavior());

        }

        else if ((PlayerSkin(lv_stitchesPlayer) == "StitchesToys18Var3")) {

            libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_eatenUnit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_GorgeToys18Var3Overlay.StormCutscene", EventUnitBehavior());

        }

        else if ((PlayerSkin(lv_stitchesPlayer) == "StitchesToys18Var4")) {

            libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_eatenUnit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_GorgeToys18Var4Overlay.StormCutscene", EventUnitBehavior());

        }

        else if ((PlayerSkin(lv_stitchesPlayer) == "StitchesToys18Var5")) {

            libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_eatenUnit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_GorgeToys18Var5Overlay.StormCutscene", EventUnitBehavior());

        }

        else if (((PlayerSkin(lv_stitchesPlayer) == "StitchesOWC20") || (PlayerSkin(lv_stitchesPlayer) == "StitchesOWC20Var1") || (PlayerSkin(lv_stitchesPlayer) == "StitchesOWC20Var2"))) {

            libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_eatenUnit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_GorgeOverlayOWC20.StormCutscene", EventUnitBehavior());

        }

        else if ((PlayerSkin(lv_stitchesPlayer) != "StitchesToys18Var1") && (PlayerSkin(lv_stitchesPlayer) != "StitchesToys18") && (PlayerSkin(lv_stitchesPlayer) != "StitchesToys18Var2") && (PlayerSkin(lv_stitchesPlayer) != "StitchesToys18Var3") && (PlayerSkin(lv_stitchesPlayer) != "StitchesToys18Var4") && (PlayerSkin(lv_stitchesPlayer) != "StitchesToys18Var5")) {

            libUIUI_gf_FullscreenOverlayAddItemForPlayer(UnitGetOwner(lv_eatenUnit), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_GorgeOverlay.StormCutscene", EventUnitBehavior());

        }

    }



    while ((UnitIsAlive(lv_stitches) == true) && (UnitHasBehavior2(lv_eatenUnit, "StitchesGorgeTarget") == true)) {

        if (((libGame_gv_players[UnitGetOwner(lv_stitches)].lv_activeVehicle != null) || (UnitHasBehavior2(lv_stitches, "InCargo") == true))) {

            break;

        }



        if ((UnitHasBehavior2(lv_eatenUnit, "StitchesGorgeDummyBehavior") == true)) {

            UnitSetPosition(lv_eatenUnit, UnitGetPosition(lv_stitches), true);

        }



        Wait(0.0625, c_timeGame);

    }

    if ((UnitIsAlive(lv_eatenUnit) == true)) {

        UnitBehaviorRemove(lv_stitches, "StitchesGorgeInitialCasterBehavior", 1);

        if ((libGame_gv_players[UnitGetOwner(lv_stitches)].lv_activeVehicle != null)) {

            lv_stitches = libGame_gv_players[UnitGetOwner(lv_stitches)].lv_activeVehicle;

        }



        UnitSetPosition(lv_eatenUnit, UnitGetPosition(lv_stitches), false);

        UnitCreateEffectPoint(lv_eatenUnit, "StitchesGorgeLaunchTargetOut", PointWithOffsetPolar(UnitGetPosition(lv_stitches), 1.75, UnitGetFacing(lv_stitches)));

        UnitBehaviorRemove(lv_eatenUnit, "StitchesGorgeTarget", 1);

        UnitBehaviorRemove(lv_eatenUnit, "StitchesGorgeTargetTimer", 1);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroStitchesGorgeActivate_Init () {

    libGDHL_gt_HeroStitchesGorgeActivate = TriggerCreate("libGDHL_gt_HeroStitchesGorgeActivate_Func");

    TriggerEnable(libGDHL_gt_HeroStitchesGorgeActivate, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroStitchesGorgeActivate, null, "StitchesGorgeTarget", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Stitches - Gorge Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroStitchesGorgeOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(EventUnit()), "Cutscenes\\GameUI_GorgeOverlay.StormCutscene", EventUnitBehavior());

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(EventUnit()), "Cutscenes\\GameUI_GorgeToys18Overlay.StormCutscene", EventUnitBehavior());

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(EventUnit()), "Cutscenes\\GameUI_GorgeToys18Var1Overlay.StormCutscene", EventUnitBehavior());

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(EventUnit()), "Cutscenes\\GameUI_GorgeToys18Var2Overlay.StormCutscene", EventUnitBehavior());

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(EventUnit()), "Cutscenes\\GameUI_GorgeToys18Var3Overlay.StormCutscene", EventUnitBehavior());

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(EventUnit()), "Cutscenes\\GameUI_GorgeToys18Var4Overlay.StormCutscene", EventUnitBehavior());

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(EventUnit()), "Cutscenes\\GameUI_GorgeToys18Var5Overlay.StormCutscene", EventUnitBehavior());

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(UnitGetOwner(EventUnit()), "Cutscenes\\GameUI_GorgeOverlayOWC20.StormCutscene", EventUnitBehavior());

    }



    if ((UnitGetType(EventUnit()) != "HeroFalstad") && (UnitGetType(EventUnit()) != "HeroFaerieDragon")) {

        UnitSetPropertyFixed(EventUnit(), c_unitPropHeight, 0.0);

        return true;

    }



    if ((UnitGetType(EventUnit()) == "HeroFaerieDragon")) {

        UnitSetPropertyFixed(EventUnit(), c_unitPropHeight, 1.0);

        return true;

    }



    if ((UnitGetType(EventUnit()) == "HeroFalstad")) {

        UnitSetPropertyFixed(EventUnit(), c_unitPropHeight, 2.0);

        return true;

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroStitchesGorgeOff_Init () {

    libGDHL_gt_HeroStitchesGorgeOff = TriggerCreate("libGDHL_gt_HeroStitchesGorgeOff_Func");

    TriggerEnable(libGDHL_gt_HeroStitchesGorgeOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroStitchesGorgeOff, null, "StitchesGorgeTarget", c_unitBehaviorChangeDeactivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroStitchesGorgeOff, null, "StitchesGorgeTarget", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Stitches - Free Fishing Hook Talent

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroStitchesFreeFishingHookTalent_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;

    int lv_level;

    int lv_max;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroLevelUpPlayer();

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;

    lv_level = libGame_gf_HeroLevelUpLevel();

    lv_max = CatalogFieldValueGetAsInt(c_gameCatalogBehavior, "StitchesHookExtendedHookTokenCounter", "Max", 0);



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroStitches"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "StitchesFishingHook") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetTokenCount(lv_unit, "StitchesHookExtendedHookTokenCounter") <= lv_max)) {

        UnitSetTokenCount(lv_unit, "StitchesHookExtendedHookTokenCounter", lv_level, lv_unit);

    }



    if ((lv_level >= lv_max)) {

        PlayerAddTalent(lv_player, "StitchesFishingHook");

        UnitCreateEffectUnit(lv_unit, "StitchesHookLevel13ExtendedHookModifyPlayer", lv_unit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroStitchesFreeFishingHookTalent_Init () {

    libGDHL_gt_HeroStitchesFreeFishingHookTalent = TriggerCreate("libGDHL_gt_HeroStitchesFreeFishingHookTalent_Func");

    libGame_gf_HeroLevelUp(libGDHL_gt_HeroStitchesFreeFishingHookTalent);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Stitches - Reset Free Fishing Hook Talent

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroStitchesResetFreeFishingHookTalent_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;

    int lv_level;

    int lv_max;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;

    lv_level = UnitGetOwner(EventUnit());

    lv_max = CatalogFieldValueGetAsInt(c_gameCatalogBehavior, "StitchesHookExtendedHookTokenCounter", "Max", 0);



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroStitches"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "StitchesFishingHook") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    PlayerRemoveTalent(lv_player, "StitchesFishingHook");

    UnitCreateEffectUnit(lv_unit, "StitchesHookLevel13ExtendedHookResetPlayer", lv_unit);

    Wait(0.125, c_timeGame);

    lv_level = UnitBehaviorCount(EventUnit(), "HeroDummyVeterancy");

    if ((lv_level >= lv_max)) {

        PlayerAddTalent(lv_player, "StitchesFishingHook");

        UnitCreateEffectUnit(lv_unit, "StitchesHookLevel13ExtendedHookModifyPlayer", lv_unit);

    }

    else {

        if ((UnitGetTokenCount(lv_unit, "StitchesHookExtendedHookTokenCounter") < lv_max)) {

            UnitSetTokenCount(lv_unit, "StitchesHookExtendedHookTokenCounter", lv_level, lv_unit);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroStitchesResetFreeFishingHookTalent_Init () {

    libGDHL_gt_HeroStitchesResetFreeFishingHookTalent = TriggerCreate("libGDHL_gt_HeroStitchesResetFreeFishingHookTalent_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroStitchesResetFreeFishingHookTalent, null, "StitchesHookExtendedHookTokenCounter", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Mind Control - Target Select

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasMindControlTargetSelect_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unitgroup lv_previousCameraUnitGroup;

    int lv_targetPlayer;

    playergroup lv_targetPlayerGroup;

    int lv_casterPlayer;

    unit lv_sylvanas;

    unit lv_mindControlledUnit;

    bool lv_mindControlledUnitIsPlayerHero;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_previousCameraUnitGroup = UnitGroupEmpty();

    lv_targetPlayer = UnitGetOwner(EventUnit());

    lv_targetPlayerGroup = PlayerGroupEmpty();

    lv_casterPlayer = UnitGetOwner(UnitBehaviorEffectUnit(EventUnit(), EventUnitBehavior(), c_effectUnitCaster, 0));

    lv_mindControlledUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!(((lv_targetPlayer >= 1) && (lv_targetPlayer <= libCore_gv_bALMaxPlayers)))) {

            return false;

        }



        if (!(((lv_casterPlayer >= 1) && (lv_casterPlayer <= libCore_gv_bALMaxPlayers)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_sylvanas = libGame_gv_players[lv_casterPlayer].lv_heroUnit;

    lv_targetPlayerGroup = PlayerGroupSingle(lv_targetPlayer);

    if ((lv_mindControlledUnit == libGame_gv_players[lv_targetPlayer].lv_heroUnit)) {

        lv_mindControlledUnitIsPlayerHero = true;

    }



    if (((UnitBehaviorCount(lv_mindControlledUnit, "AbathurUltimateEvolutionControlBehavior") < 1) && (UnitTestState(lv_mindControlledUnit, c_unitStateHallucination) == true))) {

        libAIAI_gf_MinionAIUnhookUnitFromMinionAI(lv_mindControlledUnit);

    }



    UnitCreateEffectUnit(lv_mindControlledUnit, "HeroGenericCancelMove", lv_mindControlledUnit);

    UnitCreateEffectUnit(lv_mindControlledUnit, "HeroGenericIssueStopOrderTarget", lv_mindControlledUnit);

    libNtve_gf_MakeUnitUncommandable(lv_mindControlledUnit, true);

    if ((lv_mindControlledUnitIsPlayerHero == true)) {

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowButtons, false);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowHotkeys, false);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowInfoPanel, false);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowMinimap, false);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowModifiers, false);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowPings, false);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowQueue, false);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowSmartClick, false);

        if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_targetPlayer) == true)) {

            AISetUnitTacticalDisabled(lv_mindControlledUnit, true);

        }



    }



    libGDHL_gv_heroSylvanasMindControlTargetUnit[lv_casterPlayer] = lv_mindControlledUnit;

    libNtve_gf_ShareVisionofUnit(lv_mindControlledUnit, true, lv_casterPlayer);

    libGame_gf_PlayerHeroDisplacementCameraLock(lv_mindControlledUnit, EventUnitBehavior());

    libGDHL_gv_heroSylvanasActiveMindControlCounter += 1;

    TriggerEnable(libGDHL_gt_HeroSylvanasMovementCommandForwarding, true);

    if (((lv_mindControlledUnit == libGame_gv_players[lv_targetPlayer].lv_heroUnit) || (lv_mindControlledUnit == libGame_gv_players[lv_targetPlayer].lv_activeVehicle))) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(lv_targetPlayer, libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_SylvanasOverlay.StormCutscene", "SylvanasMindControlTarget");

    }



    while ((UnitHasBehavior2(lv_mindControlledUnit, "SylvanasMindControlTarget") == true)) {

        if ((UnitHasBehaviorWithCategoryFlag(lv_mindControlledUnit, c_behaviorCategoryTimeStop) == true)) {

            if ((UnitHasBehaviorWithCategoryFlag(lv_sylvanas, c_behaviorCategoryTimeStop) == true)) {

            }

            else {

                UnitBehaviorRemove(lv_mindControlledUnit, "SylvanasMindControlTarget", 1);

            }

        }

        else {

            if ((UnitHasBehaviorWithCategoryFlag(lv_sylvanas, c_behaviorCategoryTimeStop) == true)) {

                UnitBehaviorRemove(lv_mindControlledUnit, "SylvanasMindControlTarget", 1);

            }



        }

        Wait(0.0625, c_timeGame);

    }

    if (((UnitBehaviorCount(lv_mindControlledUnit, "AbathurUltimateEvolutionControlBehavior") < 1) && (UnitTestState(lv_mindControlledUnit, c_unitStateHallucination) == true))) {

        UnitCreateAIThinkTree(lv_mindControlledUnit);

    }



    if ((lv_mindControlledUnitIsPlayerHero == true)) {

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowButtons, true);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowHotkeys, true);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowInfoPanel, true);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowMinimap, true);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowModifiers, true);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowPings, true);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowQueue, true);

        UISetCommandAllowed(lv_targetPlayerGroup, c_uiCommandAllowSmartClick, true);

        if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_targetPlayer) == true)) {

            AISetUnitTacticalDisabled(lv_mindControlledUnit, false);

        }



    }



    libNtve_gf_MakeUnitUncommandable(lv_mindControlledUnit, false);

    libGDHL_gv_heroSylvanasMindControlTargetUnit[lv_casterPlayer] = null;

    libNtve_gf_ShareVisionofUnit(lv_mindControlledUnit, false, lv_casterPlayer);

    libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(lv_targetPlayer, "Cutscenes\\GameUI_SylvanasOverlay.StormCutscene", "SylvanasMindControlTarget");

    libGDHL_gv_heroSylvanasActiveMindControlCounter -= 1;

    if ((libGDHL_gv_heroSylvanasActiveMindControlCounter < 1)) {

        libGDHL_gv_heroSylvanasActiveMindControlCounter = 0;

        TriggerEnable(libGDHL_gt_HeroSylvanasMovementCommandForwarding, false);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasMindControlTargetSelect_Init () {

    libGDHL_gt_HeroSylvanasMindControlTargetSelect = TriggerCreate("libGDHL_gt_HeroSylvanasMindControlTargetSelect_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasMindControlTargetSelect, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasMindControlTargetSelect, null, "SylvanasMindControlTarget", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Movement Command Forwarding

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasMovementCommandForwarding_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_orderTargetPoint;

    int lv_queueLocation;



    // Automatic Variable Declarations

    int autoA680DF96_val;



    // Variable Initialization

    lv_queueLocation = c_orderQueueReplace;



    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroSylvanas"))) {

            return false;

        }



        if (!((UnitHasBehavior2(EventUnit(), "SylvanasMindControlCaster") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    TriggerEnable(TriggerGetCurrent(), false);

    autoA680DF96_val = OrderGetTargetType(EventUnitOrder());

    if (autoA680DF96_val == c_orderTargetPoint) {

        lv_orderTargetPoint = OrderGetTargetPoint(EventUnitOrder());

    }

    else if (autoA680DF96_val == c_orderTargetUnit) {

        lv_orderTargetPoint = UnitGetPosition(OrderGetTargetUnit(EventUnitOrder()));

    }

    else {

        TriggerEnable(TriggerGetCurrent(), true);

        return true;

    }

    if ((OrderGetFlag(EventUnitOrder(), c_cmdQueued) == true)) {

        lv_queueLocation = c_orderQueueAddToEnd;

    }

    else {

        lv_queueLocation = c_orderQueueReplace;

    }

    UnitIssueOrder(libGDHL_gv_heroSylvanasMindControlTargetUnit[EventPlayer()], OrderTargetingPoint(AbilityCommand("move", 0), lv_orderTargetPoint), lv_queueLocation);

    TriggerEnable(TriggerGetCurrent(), true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasMovementCommandForwarding_Init () {

    libGDHL_gt_HeroSylvanasMovementCommandForwarding = TriggerCreate("libGDHL_gt_HeroSylvanasMovementCommandForwarding_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasMovementCommandForwarding, false);

    TriggerAddEventUnitOrder(libGDHL_gt_HeroSylvanasMovementCommandForwarding, null, AbilityCommand("move", 0));

    TriggerAddEventUnitOrder(libGDHL_gt_HeroSylvanasMovementCommandForwarding, null, AbilityCommand("move", 3));

    TriggerAddEventUnitOrder(libGDHL_gt_HeroSylvanasMovementCommandForwarding, null, AbilityCommand("CaptureMacGuffin", 0));

    TriggerAddEventUnitOrder(libGDHL_gt_HeroSylvanasMovementCommandForwarding, null, AbilityCommand("CaptureMacGuffinTwo", 0));

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Dark Lady's Call Talent Apply Ally Vision Suppression

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasDarkLadysCallTalentApplyAllyVisionSuppression_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_sylvanasPlayer;

    unit lv_targethero;

    int lv_targetplayer;

    unitgroup lv_targetPlayerVisionGroup;

    playergroup lv_AllyPlayerGroup;

    int lv_p;



    // Automatic Variable Declarations

    playergroup autoF1683EB6_g;



    // Variable Initialization

    lv_sylvanasPlayer = UnitBehaviorEffectPlayer(EventUnit(), "SylvanasMindControlDarkLadysCallVisionReduction", c_effectPlayerSource, 0);

    lv_targethero = EventUnit();

    lv_targetplayer = UnitGetOwner(lv_targethero);

    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_sylvanasPlayer > 0))) {

            return false;

        }



        if (!((lv_sylvanasPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitTypeTestAttribute(UnitGetType(lv_targethero), c_unitAttributeHeroic) == true))) {

            return false;

        }



        if (!(((lv_targethero == libGame_gv_players[lv_targetplayer].lv_heroUnit) || (lv_targethero == libAIAI_gv_aIHeroes[lv_targetplayer].lv_currentHeroUnit) || (UnitGetType(lv_targethero) == "HeroBaleog") || (UnitGetType(lv_targethero) == "HeroErik") || (UnitGetType(lv_targethero) == "HeroOlaf") || (UnitGetType(lv_targethero) == "HeroChenEarth") || (UnitGetType(lv_targethero) == "HeroChenFire") || (UnitGetType(lv_targethero) == "HeroChenStorm")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gf_ShareUnshareVisionOfAlliesForPlayer(false, lv_targetplayer);

    lv_AllyPlayerGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_targetplayer);

    autoF1683EB6_g = lv_AllyPlayerGroup;

    lv_p = -1;

    while (true) {

        	lv_p = PlayerGroupNextPlayer(autoF1683EB6_g, lv_p);

        	if (lv_p<0) { break; }

        	PlayerSetAlliance(lv_p, c_allianceIdSeekHelp, lv_targetplayer, false);

        PlayerSetAlliance(lv_p, c_allianceIdGiveHelp, lv_targetplayer, false);

    }

    VisRevealerEnable(libGame_gv_baseRevealers[lv_targetplayer], false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasDarkLadysCallTalentApplyAllyVisionSuppression_Init () {

    libGDHL_gt_HeroSylvanasDarkLadysCallTalentApplyAllyVisionSuppression = TriggerCreate("libGDHL_gt_HeroSylvanasDarkLadysCallTalentApplyAllyVisionSuppression_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasDarkLadysCallTalentApplyAllyVisionSuppression, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasDarkLadysCallTalentApplyAllyVisionSuppression, null, "SylvanasMindControlDarkLadysCallVisionReduction", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Dark Lady's Call Talent Reset Ally Vision Suppression

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasDarkLadysCallTalentResetAllyVisionSuppression_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetHero;

    int lv_targetPlayer;

    playergroup lv_allyPlayerGroup;

    int lv_p;



    // Automatic Variable Declarations

    playergroup autoC255B45D_g;



    // Variable Initialization

    lv_targetHero = EventUnit();

    lv_targetPlayer = UnitGetOwner(EventUnit());

    lv_allyPlayerGroup = PlayerGroupEmpty();



    // Conditions

    if (testConds) {

        if (!((UnitTypeTestAttribute(UnitGetType(EventUnit()), c_unitAttributeHeroic) == true))) {

            return false;

        }



        if (!((lv_targetPlayer > 0))) {

            return false;

        }



        if (!((lv_targetPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehaviorWithCategoryFlag(lv_targetHero, c_behaviorCategoryVisionRemoval) == false)) {

        libGame_gf_ShareUnshareVisionOfAlliesForPlayer(true, lv_targetPlayer);

        lv_allyPlayerGroup = libGame_gf_AlliedPlayerGroupOfPlayer(lv_targetPlayer);

        autoC255B45D_g = lv_allyPlayerGroup;

        lv_p = -1;

        while (true) {

            	lv_p = PlayerGroupNextPlayer(autoC255B45D_g, lv_p);

            	if (lv_p<0) { break; }

            	PlayerSetAlliance(lv_p, c_allianceIdSeekHelp, lv_targetPlayer, true);

            PlayerSetAlliance(lv_p, c_allianceIdGiveHelp, lv_targetPlayer, true);

        }

        VisRevealerEnable(libGame_gv_baseRevealers[lv_targetPlayer], true);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasDarkLadysCallTalentResetAllyVisionSuppression_Init () {

    libGDHL_gt_HeroSylvanasDarkLadysCallTalentResetAllyVisionSuppression = TriggerCreate("libGDHL_gt_HeroSylvanasDarkLadysCallTalentResetAllyVisionSuppression_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasDarkLadysCallTalentResetAllyVisionSuppression, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasDarkLadysCallTalentResetAllyVisionSuppression, null, "SylvanasMindControlDarkLadysCallVisionReduction", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas- Mind Control- Camera Lock

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasMindControlCameraLock_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_targetPlayer;

    int lv_itPlayer;

    fixed lv_vertOffset;

    fixed lv_horizOffset;



    // Automatic Variable Declarations

    const int auto77CC311C_ae = libCore_gv_bALMaxPlayers;

    const int auto77CC311C_ai = 1;



    // Variable Initialization

    lv_targetPlayer = UnitGetOwner(EventUnit());



    // Conditions

    if (testConds) {

        if (!(((UnitGetOwner(EventUnit()) >= 1) && (UnitGetOwner(EventUnit()) <= 10) && (EventUnit() == libGame_gv_players[lv_targetPlayer].lv_heroUnit) && (UnitIsAlive(EventUnit()) == true)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gf_PlayerHeroDisplacementCameraLock(EventUnit(), EventUnitBehavior());

    lv_itPlayer = 1;

    for ( ; ( (auto77CC311C_ai >= 0 && lv_itPlayer <= auto77CC311C_ae) || (auto77CC311C_ai < 0 && lv_itPlayer >= auto77CC311C_ae) ) ; lv_itPlayer += auto77CC311C_ai ) {

        lv_vertOffset = 1.5;

        lv_horizOffset = RandomFixed(-0.4, -0.6);

        libUIUI_gf_UIFloatingCombatTextCreateTextTag(lv_itPlayer, 2.0, StringExternal("Param/Value/lib_GDHL_950067B8"), EventUnit(), 0.0, 0.0, libCore_ge_FloatingTextType_InsaneDamage, true);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasMindControlCameraLock_Init () {

    libGDHL_gt_HeroSylvanasMindControlCameraLock = TriggerCreate("libGDHL_gt_HeroSylvanasMindControlCameraLock_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasMindControlCameraLock, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasMindControlCameraLock, null, "SylvanasMindControlSlow", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Wailing Arrow - Silence Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetUnit;

    int lv_owner;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventUnit()) > 0))) {

            return false;

        }



        if (!((UnitGetOwner(EventUnit()) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitTypeTestAttribute(UnitGetType(EventUnit()), c_unitAttributeHeroic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_targetUnit = EventUnit();

    lv_owner = UnitGetOwner(lv_targetUnit);

    libUIUI_gf_UILowHPSetSoundChannelsForSilence(lv_owner);

    SoundPlayForPlayer(SoundLink("Sylvanas_WailingArrow_SilenceLoop", -1), UnitGetOwner(lv_targetUnit), libCore_gv_playerGroupFromPlayer[UnitGetOwner(lv_targetUnit)], 100.0, 0.0);

    Wait(2.5, c_timeGame);

    SoundStop(SoundLastPlayed(), true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget_Init () {

    libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget = TriggerCreate("libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget, null, "SylvanasWailingArrowTarget", c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget, null, "SylvanasWailingArrowTarget", c_unitBehaviorChangeRefresh);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Wailing Arrow - Deafening Blast Silence Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetUnit;

    int lv_owner;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventUnit()) > 0))) {

            return false;

        }



        if (!((UnitGetOwner(EventUnit()) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitTypeTestAttribute(UnitGetType(EventUnit()), c_unitAttributeHeroic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_targetUnit = EventUnit();

    lv_owner = UnitGetOwner(lv_targetUnit);

    libUIUI_gf_UILowHPSetSoundChannelsForSilence(lv_owner);

    SoundPlayForPlayer(SoundLink("Sylvanas_WailingArrow_SilenceLoop", -1), UnitGetOwner(lv_targetUnit), libCore_gv_playerGroupFromPlayer[UnitGetOwner(lv_targetUnit)], 100.0, 0.0);

    Wait(5.0, c_timeGame);

    SoundStop(SoundLastPlayed(), true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget_Init () {

    libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget = TriggerCreate("libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget, null, "SylvanasWailingArrowDeafeningBlastTarget", c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget, null, "SylvanasWailingArrowDeafeningBlastTarget", c_unitBehaviorChangeRefresh);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Wailing Arrow - Silence End

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_i;

    unit lv_targetUnit;

    int lv_owner;

    fixed lv_cooldownTime;

    fixed lv_modifiedCooldownTime;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventUnit()) > 0))) {

            return false;

        }



        if (!((UnitGetOwner(EventUnit()) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((UnitTypeTestAttribute(UnitGetType(EventUnit()), c_unitAttributeHeroic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_targetUnit = EventUnit();

    lv_owner = UnitGetOwner(lv_targetUnit);

    libUIUI_gf_UILowHPSetSoundChannelsForNormal(lv_owner);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd_Init () {

    libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd = TriggerCreate("libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd, null, "SylvanasWailingArrowTarget", c_unitBehaviorChangeDeactivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd, null, "SylvanasWailingArrowDeafeningBlastTarget", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Withering Fire Hero Kill Add Charge

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasWitheringFireHeroKillAddCharge_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_sylvanas;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!(((UnitGetType(libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_heroUnit) == "HeroSylvanas") || (UnitGetType(libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_activeVehicle) == "HeroSylvanas")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_heroUnit) == "HeroSylvanas")) {

        lv_sylvanas = libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_heroUnit;

    }

    else {

        lv_sylvanas = libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_activeVehicle;

    }

    UnitCreateEffectUnit(lv_sylvanas, "SylvanasWitheringFireHeroTakedownCooldownRefresh", lv_sylvanas);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasWitheringFireHeroKillAddCharge_Init () {

    libGDHL_gt_HeroSylvanasWitheringFireHeroKillAddCharge = TriggerCreate("libGDHL_gt_HeroSylvanasWitheringFireHeroKillAddCharge_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasWitheringFireHeroKillAddCharge, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroSylvanasWitheringFireHeroKillAddCharge);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Possession Rewire

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasPossessionRewire_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_bribedUnit;

    unit lv_greedUnit;

    int lv_regenGlobeOwner;

    fixed lv_xPGrantedFromUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_bribedUnit = EventUnit();

    lv_greedUnit = UnitBehaviorEffectUnit(lv_bribedUnit, EventUnitBehavior(), c_effectUnitCaster, 0);

    if ((UnitGetOwner(lv_bribedUnit) == libCore_gv_cOMPUTER_TeamOrder)) {

        lv_regenGlobeOwner = libCore_gv_cOMPUTER_TeamChaos;

    }

    else {

        lv_regenGlobeOwner = libCore_gv_cOMPUTER_TeamOrder;

    }

    if ((libGame_gv_oldXPCheat == true)) {

        lv_xPGrantedFromUnit = UnitGetPropertyFixed(lv_bribedUnit, c_unitPropKillXP, c_unitPropCurrent);

        libGame_gf_AwardXPForNPCKill(lv_bribedUnit, UnitGetOwner(lv_greedUnit), c_unitAttributeMinion, UnitGetOwner(lv_greedUnit), lv_xPGrantedFromUnit);

    }

    else {

        if ((UnitGetType(lv_bribedUnit) == "WizardMinion")) {

            libNtve_gf_CreateUnitsWithDefaultFacing(1, "RegenGlobe", c_unitCreateIgnorePlacement, lv_regenGlobeOwner, UnitGetPosition(lv_bribedUnit), null);

        }

        else {

            if ((UnitHasBehavior2(lv_bribedUnit, "IsCatapultMinionOrCatapultReplacement") == false)) {

                UnitCreateEffectUnit(lv_bribedUnit, "ExperienceGlobeDummyImpactSetLastHit", lv_greedUnit);

            }



        }

    }

    libGame_gf_SendEventHeroMindControlsNPC(lv_bribedUnit, UnitGetOwner(lv_bribedUnit));

    UnitSetOwner(lv_bribedUnit, lv_regenGlobeOwner, true);

    UnitStatusBarClearOverride(lv_bribedUnit);

    Wait(0.25, c_timeGame);

    UnitStatusBarOverride(lv_bribedUnit, c_unitStatusGroupAll);

    UnitIssueOrder(lv_bribedUnit, Order(libAIAI_gv_aIStopAbil), c_orderQueueReplace);

    libGame_gf_CalculateSpawnedMinionGoalPoints(UnitGetOwner(lv_bribedUnit), UnitGetPosition(lv_bribedUnit));

    libAIAI_gf_MinionAIStartMinionAI(-1, lv_bribedUnit, libGame_gv_spawnedMinionLane, libGame_gv_spawnedMinionFirstWaypointIndex, false, true, false, libGame_gf_EnemyTeam(libGame_gf_TeamNumberOfPlayer(UnitGetOwner(lv_greedUnit))), false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasPossessionRewire_Init () {

    libGDHL_gt_HeroSylvanasPossessionRewire = TriggerCreate("libGDHL_gt_HeroSylvanasPossessionRewire_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasPossessionRewire, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroSylvanasPossessionRewire, null, "SylvanasPossessionTarget", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Sylvanas - Possession Catapult Minion Modify Charge Count

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroSylvanasPossessionCatapultMinionModifyChargeCount_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitAddChargeUsed(lv_caster, "Abil/SylvanasPossession", 2.0);

    UnitAddChargeRegenRemaining(lv_caster, "Abil/SylvanasPossession", 0.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroSylvanasPossessionCatapultMinionModifyChargeCount_Init () {

    libGDHL_gt_HeroSylvanasPossessionCatapultMinionModifyChargeCount = TriggerCreate("libGDHL_gt_HeroSylvanasPossessionCatapultMinionModifyChargeCount_Func");

    TriggerEnable(libGDHL_gt_HeroSylvanasPossessionCatapultMinionModifyChargeCount, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroSylvanasPossessionCatapultMinionModifyChargeCount, c_playerAny, "SylvanasPossessionUse3ChargesOnCatapultMinions");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tassadar - Update Distortion Beam Period

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "HeroTassadar"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libCore_gf_UpdateTassadarAbilityStats(lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod_Init () {

    libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod = TriggerCreate("libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod_Func");

    TriggerEnable(libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod, null, c_behaviorCategoryDebuffAutoattackDPS, c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod, null, c_behaviorCategoryDebuffAutoattackDPS, c_unitBehaviorChangeDeactivate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod, null, c_behaviorCategoryBuffAutoattackDPS, c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod, null, c_behaviorCategoryBuffAutoattackDPS, c_unitBehaviorChangeDeactivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod, null, "TassadarArchon", c_unitBehaviorChangeDeactivate);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod, null, "ArchonTwilightArchon", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tassadar - Force Wall Forced Destruction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTassadarForceWallForcedDestruction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventPlayerEffectUsedUnitImpact();

    lv_player = UnitGetOwner(lv_target);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_target) == "TassadarForceWall"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(libGame_gv_players[lv_player].lv_heroUnit, "TassadarForceWallCancelSearch", libGame_gv_players[lv_player].lv_heroUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTassadarForceWallForcedDestruction_Init () {

    libGDHL_gt_HeroTassadarForceWallForcedDestruction = TriggerCreate("libGDHL_gt_HeroTassadarForceWallForcedDestruction_Func");

    TriggerEnable(libGDHL_gt_HeroTassadarForceWallForcedDestruction, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTassadarForceWallForcedDestruction, c_playerAny, "DestroyPathingBlockerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tassadar - Shock Ray - Vision

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTassadarShockRayVision_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_tass;

    point lv_effectPoint;

    int lv_tassTeam;

    int lv_enemyTeam;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_tass = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_effectPoint = EventPlayerEffectUsedPoint(c_effectLocationSourcePoint);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_tassTeam = libGame_gf_TeamNumberOfPlayer(UnitGetOwner(lv_tass));

    if ((lv_tassTeam == 1)) {

        lv_enemyTeam = libCore_gv_cOMPUTER_TeamChaos;

    }

    else {

        lv_enemyTeam = libCore_gv_cOMPUTER_TeamOrder;

    }

    if ((VisIsVisibleForPlayer(lv_enemyTeam, lv_effectPoint) == true)) {

        PlayerCreateEffectUnit(lv_enemyTeam, "ApplyMissileSourceRevealer", lv_tass);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTassadarShockRayVision_Init () {

    libGDHL_gt_HeroTassadarShockRayVision = TriggerCreate("libGDHL_gt_HeroTassadarShockRayVision_Func");

    TriggerEnable(libGDHL_gt_HeroTassadarShockRayVision, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTassadarShockRayVision, c_playerAny, "TassadarShockRaySearch");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Thrall UI Initialize

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_ThrallUIInitialize_Func (bool testConds, bool runActions) {

    int init_i;



    // Variable Declarations

    int[6] lv_panels;

    int lv_currentPanelLayer;

    int lv_itTraitStackFrame;



    // Automatic Variable Declarations

    const int auto0DDEF1BA_ae = libGDHL_gv_thrallTraitMaxStacks;

    const int auto0DDEF1BA_ai = 1;



    // Variable Initialization

    for (init_i = 0; init_i <= 5; init_i += 1) {

        lv_panels[init_i] = c_invalidDialogControlId;

    }



    // Actions

    if (!runActions) {

        return true;

    }



    DialogControlCreateInPanelFromTemplate(libUIUI_gv_heroSpecificStatusContainer, c_triggerControlTypePanel, "Thrall/ThrallTraitFrame");

    DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    libGDHL_gv_thrallUI.lv_mainPanel = DialogControlLastCreated();

    lv_itTraitStackFrame = 1;

    for ( ; ( (auto0DDEF1BA_ai >= 0 && lv_itTraitStackFrame <= auto0DDEF1BA_ae) || (auto0DDEF1BA_ai < 0 && lv_itTraitStackFrame >= auto0DDEF1BA_ae) ) ; lv_itTraitStackFrame += auto0DDEF1BA_ai ) {

        DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "ThrallChargeFrame" + IntToString(lv_itTraitStackFrame) + "/ChargedTrait");

        DialogControlSetVisible(DialogControlLastCreated(), PlayerGroupAll(), false);

        libGDHL_gv_thrallUI.lv_counterImage[lv_itTraitStackFrame] = DialogControlLastCreated();

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_ThrallUIInitialize_Init () {

    libGDHL_gt_ThrallUIInitialize = TriggerCreate("libGDHL_gt_ThrallUIInitialize_Func");

    libCore_gf_IncludeModInitialization(libGDHL_gt_ThrallUIInitialize);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Thrall - Show Frostwolf Resilience UI

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_ThrallShowFrostwolfResilienceUI_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);

    DialogControlSetVisible(libGDHL_gv_thrallUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[lv_player], true);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_ThrallShowFrostwolfResilienceUI_Init () {

    libGDHL_gt_ThrallShowFrostwolfResilienceUI = TriggerCreate("libGDHL_gt_ThrallShowFrostwolfResilienceUI_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_ThrallShowFrostwolfResilienceUI, c_playerAny, "ThrallFrostwolfResilienceInitialDummy");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_ThrallShowFrostwolfResilienceUI, c_playerAny, "ThrallFrostwolfResilienceDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Thrall - Gets Stack Of Frostwolf Resilience

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_ThrallGetsStackOfFrostwolfResilience_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);

    libGDHL_gf_UIHeroSpecificStatusFrameUpdateThrallStatus(lv_player);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_ThrallGetsStackOfFrostwolfResilience_Init () {

    libGDHL_gt_ThrallGetsStackOfFrostwolfResilience = TriggerCreate("libGDHL_gt_ThrallGetsStackOfFrostwolfResilience_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_ThrallGetsStackOfFrostwolfResilience, c_playerAny, "ThrallFrostwolfResilienceApplySwitch");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Thrall UI Clean Up UI For Debug Hero Swap

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_ThrallUICleanUpUIForDebugHeroSwap_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = libGame_gf_DebugHeroSwappedPlayer();

    libGDHL_gf_UIClearThrallFrostwolfCount(lv_player);

    if ((libGame_gv_players[lv_player].lv_heroIndex != libCore_gf_GetHeroIndexForUnitType("HeroThrall"))) {

        DialogControlSetVisible(libGDHL_gv_thrallUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[lv_player], false);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_ThrallUICleanUpUIForDebugHeroSwap_Init () {

    libGDHL_gt_ThrallUICleanUpUIForDebugHeroSwap = TriggerCreate("libGDHL_gt_ThrallUICleanUpUIForDebugHeroSwap_Func");

    libGame_gf_DebugHeroSwapped(libGDHL_gt_ThrallUICleanUpUIForDebugHeroSwap);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Thrall UI Clean Up UI For Abathur Ultimate Evolution Clone

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_ThrallUICleanUpUIForAbathurUltimateEvolutionClone_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(libGDHL_gf_AbathurUltimateEvolutionEndedClonedUnit()) == "HeroThrall")) {

        DialogControlSetVisible(libGDHL_gv_thrallUI.lv_mainPanel, libCore_gv_playerGroupFromPlayer[libGDHL_gf_AbathurUltimateEvolutionEndedAbathurPlayer()], false);

        libGDHL_gf_UIClearThrallFrostwolfCount(libGDHL_gf_AbathurUltimateEvolutionEndedAbathurPlayer());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_ThrallUICleanUpUIForAbathurUltimateEvolutionClone_Init () {

    libGDHL_gt_ThrallUICleanUpUIForAbathurUltimateEvolutionClone = TriggerCreate("libGDHL_gt_ThrallUICleanUpUIForAbathurUltimateEvolutionClone_Func");

    libGDHL_gf_AbathurUltimateEvolutionEnded(libGDHL_gt_ThrallUICleanUpUIForAbathurUltimateEvolutionClone);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Thrall Dies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_ThrallDies_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gf_HeroKilledUnit()) == "HeroThrall"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gf_UIClearThrallFrostwolfCount(libGame_gf_HeroKilledPlayer());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_ThrallDies_Init () {

    libGDHL_gt_ThrallDies = TriggerCreate("libGDHL_gt_ThrallDies_Func");

    libGame_gf_HeroKilled(libGDHL_gt_ThrallDies);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Thrall - Ancestral Wrath Healing Dummy Update

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroThrallAncestralWrathHealingDummyUpdate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_thrall;

    unit lv_target;

    int lv_thrallOwner;

    int lv_targetOwner;

    fixed lv_scale;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_thrall = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_thrallOwner = UnitGetOwner(lv_thrall);

    lv_targetOwner = UnitGetOwner(lv_target);

    lv_scale = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "ThrallAncestralWrathDamage", "VitalFractionMax[" + IntToString(c_unitVitalLife) + "]", lv_thrallOwner);



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(lv_target) >= 1))) {

            return false;

        }



        if (!((UnitGetOwner(lv_target) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSetFixed(c_gameCatalogEffect, "ThrallAncestralWrathDummyHealer", "RechargeVitalRate", lv_targetOwner, ((lv_scale * UnitGetPropertyFixed(lv_target, c_unitPropLifeMax, c_unitPropCurrent)) * 1.5));

    UnitBehaviorAdd(lv_thrall, "ThrallAncestralWrathHealingDummy", lv_target, 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroThrallAncestralWrathHealingDummyUpdate_Init () {

    libGDHL_gt_HeroThrallAncestralWrathHealingDummyUpdate = TriggerCreate("libGDHL_gt_HeroThrallAncestralWrathHealingDummyUpdate_Func");

    TriggerEnable(libGDHL_gt_HeroThrallAncestralWrathHealingDummyUpdate, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroThrallAncestralWrathHealingDummyUpdate, c_playerAny, "ThrallAncestralWrathApplyDebuff");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Thrall - Ancestral Wrath Charge Count Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroThrallAncestralWrathChargeCountProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    UnitAddChargeUsed(lv_caster, "Abil/ThrallAncestralWrath", -1.0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroThrallAncestralWrathChargeCountProc_Init () {

    libGDHL_gt_HeroThrallAncestralWrathChargeCountProc = TriggerCreate("libGDHL_gt_HeroThrallAncestralWrathChargeCountProc_Func");

    TriggerEnable(libGDHL_gt_HeroThrallAncestralWrathChargeCountProc, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroThrallAncestralWrathChargeCountProc, c_playerAny, "ThrallAncestralWrathModifyUnitDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Thrall - Earthquake Earthen Shield Mastery Shield Application

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroThrallEarthquakeEarthenShieldMasteryShieldApplication_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    unit lv_thrall;

    fixed lv_maxHealth;

    fixed lv_shieldHealthMod;

    fixed lv_totalShield;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_thrall = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_shieldHealthMod = 0.15;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_maxHealth = UnitGetPropertyFixed(lv_unit, c_unitPropLifeMax, c_unitPropCurrent);

    lv_totalShield = (lv_maxHealth * lv_shieldHealthMod);

    CatalogFieldValueSetFixed(c_gameCatalogBehavior, "ThrallEarthenShield", "DamageResponse.ModifyLimit", UnitGetOwner(lv_thrall), lv_totalShield);

    UnitCreateEffectUnit(lv_thrall, "ThrallEarthquakeApplyEarthenShieldsMasteryBuff", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroThrallEarthquakeEarthenShieldMasteryShieldApplication_Init () {

    libGDHL_gt_HeroThrallEarthquakeEarthenShieldMasteryShieldApplication = TriggerCreate("libGDHL_gt_HeroThrallEarthquakeEarthenShieldMasteryShieldApplication_Func");

    TriggerEnable(libGDHL_gt_HeroThrallEarthquakeEarthenShieldMasteryShieldApplication, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroThrallEarthquakeEarthenShieldMasteryShieldApplication, c_playerAny, "ThrallEarthquakeEarthenShieldMasteryImpactDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Thrall - World Breaker Forced Destruction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroThrallWorldBreakerForcedDestruction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventPlayerEffectUsedUnitImpact();

    lv_player = UnitGetOwner(lv_target);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_target) == "ThrallSunderingWorldbreakerPathingBlocker"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(libGame_gv_players[lv_player].lv_heroUnit, "ThrallSunderingWorldbreakerTalentRemoveActive", libGame_gv_players[lv_player].lv_heroUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroThrallWorldBreakerForcedDestruction_Init () {

    libGDHL_gt_HeroThrallWorldBreakerForcedDestruction = TriggerCreate("libGDHL_gt_HeroThrallWorldBreakerForcedDestruction_Func");

    TriggerEnable(libGDHL_gt_HeroThrallWorldBreakerForcedDestruction, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroThrallWorldBreakerForcedDestruction, c_playerAny, "DestroyPathingBlockerDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tinker - Focus Turrets! Set Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTinkerFocusTurretsSetTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_owningPlayer;

    unit lv_focusTarget;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_owningPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_focusTarget = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((libGDHL_gv_heroTinkerFocusTurretsTarget[lv_owningPlayer] != null)) {

        if ((libGDHL_gv_heroTinkerFocusTurretsTarget[lv_owningPlayer] == lv_focusTarget)) {

        }

        else {

            UnitBehaviorRemove(libGDHL_gv_heroTinkerFocusTurretsTarget[lv_owningPlayer], "TinkerFocusTurretsTargetBuff", 1);

            libGDHL_gv_heroTinkerFocusTurretsTarget[lv_owningPlayer] = lv_focusTarget;

        }

    }

    else {

        libGDHL_gv_heroTinkerFocusTurretsTarget[lv_owningPlayer] = lv_focusTarget;

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTinkerFocusTurretsSetTarget_Init () {

    libGDHL_gt_HeroTinkerFocusTurretsSetTarget = TriggerCreate("libGDHL_gt_HeroTinkerFocusTurretsSetTarget_Func");

    TriggerEnable(libGDHL_gt_HeroTinkerFocusTurretsSetTarget, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTinkerFocusTurretsSetTarget, c_playerAny, "TinkerFocusTurretsApplyTargetBuff");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tychus - Relentless Soldier Talent Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTychusRelentlessSoldierTalentProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "TychusRelentlessSoldier") == true))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroTychus"))) {

            return false;

        }



        if (!((UnitHasBehaviorWithCategoryFlag(lv_unit, c_behaviorCategoryBuffUnstoppable) == false))) {

            return false;

        }



        if (!((UnitIsAlive(lv_unit) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_unit, "TychusRelentlessSoldierApplyResistantBehavior", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTychusRelentlessSoldierTalentProc_Init () {

    libGDHL_gt_HeroTychusRelentlessSoldierTalentProc = TriggerCreate("libGDHL_gt_HeroTychusRelentlessSoldierTalentProc_Func");

    TriggerEnable(libGDHL_gt_HeroTychusRelentlessSoldierTalentProc, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroTychusRelentlessSoldierTalentProc, null, c_behaviorCategoryStun, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroTychusRelentlessSoldierTalentProc, null, c_behaviorCategoryStun, c_unitBehaviorChangeRefresh);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroTychusRelentlessSoldierTalentProc, null, c_behaviorCategoryDebuffRoot, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroTychusRelentlessSoldierTalentProc, null, c_behaviorCategoryDebuffRoot, c_unitBehaviorChangeRefresh);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tychus - Master Assassin - Hero Takedown Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTychusMasterAssassinHeroTakedownProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_tychusPlayer;

    unit lv_tychusUnit;

    const int lv_masterAssassinMaxCount = 15;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_tychusPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_tychusUnit = libGame_gv_players[lv_tychusPlayer].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_tychusPlayer >= 1))) {

            return false;

        }



        if (!((lv_tychusPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_tychusPlayer, "TychusMasterAssassin") == true))) {

            return false;

        }



        if (!((UnitBehaviorCount(lv_tychusUnit, "TychusMasterAssassinQuestToken") < lv_masterAssassinMaxCount))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_tychusUnit, "TychusMasterAssassinQuestIncrementToken", lv_tychusUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTychusMasterAssassinHeroTakedownProc_Init () {

    libGDHL_gt_HeroTychusMasterAssassinHeroTakedownProc = TriggerCreate("libGDHL_gt_HeroTychusMasterAssassinHeroTakedownProc_Func");

    TriggerEnable(libGDHL_gt_HeroTychusMasterAssassinHeroTakedownProc, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroTychusMasterAssassinHeroTakedownProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tychus - That's The Stuff - On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTychusThatsTheStuffOn_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(UnitGetOwner(EventUnit()), "TychusThatsTheStuff") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffDamageTracker, true);

    libGDHL_gv_heroTychusThatsTheStuffCastCount += 1;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTychusThatsTheStuffOn_Init () {

    libGDHL_gt_HeroTychusThatsTheStuffOn = TriggerCreate("libGDHL_gt_HeroTychusThatsTheStuffOn_Func");

    TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTychusThatsTheStuffOn, null, "TychusMinigunActiveBuff", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tychus - That's The Stuff - Damage Tracker

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTychusThatsTheStuffDamageTracker_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_damageAmount;

    const fixed lv_damageDealtHealingFraction = 1.0;

    unit lv_itUnit;

    int lv_itPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_itUnit = EventUnitDamageSourceUnit();

    lv_itPlayer = UnitGetOwner(EventUnitDamageSourceUnit());



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(lv_itUnit, "TychusMinigunActiveBuff") == true))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_itPlayer, "TychusThatsTheStuff") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if (((lv_itPlayer > libCore_gv_bALMaxPlayers) || (lv_itPlayer <= 0))) {

        return true;

    }



    lv_damageAmount = ((EventUnitDamageAmount() + EventUnitDamageBehaviorShield()) * lv_damageDealtHealingFraction);

    libGDHL_gv_heroTychusThatsTheStuffCombinedHeal[lv_itPlayer] += lv_damageAmount;

    libGDHL_gv_heroTychusThatsTheStuffHealPreviewCombinedDamage[UnitGetOwner(lv_itUnit)] += lv_damageAmount;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTychusThatsTheStuffDamageTracker_Init () {

    libGDHL_gt_HeroTychusThatsTheStuffDamageTracker = TriggerCreate("libGDHL_gt_HeroTychusThatsTheStuffDamageTracker_Func");

    TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffDamageTracker, false);

    TriggerAddDamageEvent(libGDHL_gt_HeroTychusThatsTheStuffDamageTracker, "HeroTychus", null, c_unitDamageTypeAny, c_unitDamageEither, "TychusMinigunDamage");

    TriggerAddDamageEvent(libGDHL_gt_HeroTychusThatsTheStuffDamageTracker, "HeroTychus", null, c_unitDamageTypeAny, c_unitDamageEither, "TychusMinigunTheBiggerTheyAreDamage");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tychus - That's The Stuff - Heal Preview Catalog

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTychusThatsTheStuffHealPreviewCatalog_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_itUnit;

    int lv_itPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_itUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_itPlayer = UnitGetOwner(lv_itUnit);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_itUnit) == "HeroTychus"))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_itUnit, "TychusMinigunActiveBuff") == true))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_itPlayer, "TychusThatsTheStuff") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSetFixed(c_gameCatalogEffect, "TychusMinigunThatsTheStuffTalentDummyHealer", "RechargeVitalRate", lv_itPlayer, libGDHL_gv_heroTychusThatsTheStuffHealPreviewCombinedDamage[lv_itPlayer]);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTychusThatsTheStuffHealPreviewCatalog_Init () {

    libGDHL_gt_HeroTychusThatsTheStuffHealPreviewCatalog = TriggerCreate("libGDHL_gt_HeroTychusThatsTheStuffHealPreviewCatalog_Func");

    TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffHealPreviewCatalog, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTychusThatsTheStuffHealPreviewCatalog, c_playerAny, "TychusMinigunThatsTheStuffDamageResponseSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tychus - That's The Stuff - Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTychusThatsTheStuffOff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_itUnit;

    int lv_itPlayer;

    fixed lv_healAmount;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_itUnit = EventUnit();

    lv_itPlayer = UnitGetOwner(lv_itUnit);

    lv_healAmount = libGDHL_gv_heroTychusThatsTheStuffCombinedHeal[lv_itPlayer];



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_itPlayer, "TychusThatsTheStuff") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroTychusThatsTheStuffCastCount -= 1;

    if ((libGDHL_gv_heroTychusThatsTheStuffCastCount == 0)) {

        TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffDamageTracker, false);

    }



    CatalogFieldValueSetFixed(c_gameCatalogEffect, "TychusMinigunThatsTheStuffTalentCreateHealer", "RechargeVitalRate", lv_itPlayer, lv_healAmount);

    CatalogFieldValueSet(c_gameCatalogEffect, "TychusMinigunThatsTheStuffTalentDummyHealer", "RechargeVitalRate", lv_itPlayer, "0");

    UnitCreateEffectUnitWithSource(lv_itUnit, "TychusMinigunThatsTheStuffTalentCreateHealer", lv_itUnit, c_gameCatalogAbil, "TychusMinigunActive");

    libGDHL_gv_heroTychusThatsTheStuffCombinedHeal[lv_itPlayer] = 0.0;

    libGDHL_gv_heroTychusThatsTheStuffHealPreviewCombinedDamage[lv_itPlayer] = 0.0;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTychusThatsTheStuffOff_Init () {

    libGDHL_gt_HeroTychusThatsTheStuffOff = TriggerCreate("libGDHL_gt_HeroTychusThatsTheStuffOff_Func");

    TriggerEnable(libGDHL_gt_HeroTychusThatsTheStuffOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTychusThatsTheStuffOff, null, "TychusMinigunActiveBuff", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tychus - Update Orders On Issue Order Ability

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTychusUpdateOrdersOnIssueOrderAbility_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    unitgroup autoB1D16965_g;

    int autoB1D16965_u;

    unit autoB1D16965_var;



    // Actions

    if (!runActions) {

        return true;

    }



    autoB1D16965_g = UnitGroup("TychusLaserDrill", EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster), RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    autoB1D16965_u = UnitGroupCount(autoB1D16965_g, c_unitCountAll);

    for (;; autoB1D16965_u -= 1) {

        autoB1D16965_var = UnitGroupUnitFromEnd(autoB1D16965_g, autoB1D16965_u);

        if (autoB1D16965_var == null) { break; }

        UnitIssueOrder(autoB1D16965_var, OrderTargetingUnit(AbilityCommand("attack", 0), EventPlayerEffectUsedUnit(c_effectUnitTarget)), c_orderQueueReplace);

        UnitBehaviorRemove(autoB1D16965_var, "LaserDrillDamageIncrease", 5);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTychusUpdateOrdersOnIssueOrderAbility_Init () {

    libGDHL_gt_HeroTychusUpdateOrdersOnIssueOrderAbility = TriggerCreate("libGDHL_gt_HeroTychusUpdateOrdersOnIssueOrderAbility_Func");

    TriggerEnable(libGDHL_gt_HeroTychusUpdateOrdersOnIssueOrderAbility, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTychusUpdateOrdersOnIssueOrderAbility, c_playerAny, "LaserDrillAttackOrderCreatePersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tychus - Overkill Targeted Retarget v.H16

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTychusOverkillTargetedRetargetvH16_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitIsAlive(EventPlayerEffectUsedUnit(c_effectUnitTarget)) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnitWithSource(EventPlayerEffectUsedUnit(c_effectUnitCaster), "OverkillTargetedRetargetInitialPersistent", EventPlayerEffectUsedUnit(c_effectUnitTarget), c_gameCatalogAbil, "TychusOverkillTargeted");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTychusOverkillTargetedRetargetvH16_Init () {

    libGDHL_gt_HeroTychusOverkillTargetedRetargetvH16 = TriggerCreate("libGDHL_gt_HeroTychusOverkillTargetedRetargetvH16_Func");

    TriggerEnable(libGDHL_gt_HeroTychusOverkillTargetedRetargetvH16, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTychusOverkillTargetedRetargetvH16, c_playerAny, "OverkillTargetedRetargetDestroyPersistentSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tychus - Overkill Rolling Reload

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTychusOverkillRollingReload_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_tychus;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_tychus = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    if ((UnitHasBehavior2(lv_tychus, "TychusOverkillTargetedActive") == true) && (PlayerHasTalent(UnitGetOwner(lv_tychus), "TychusRunAndGunRollingReload") == true)) {

        UnitBehaviorSetDurationRemaining(lv_tychus, "TychusOverkillTargetedActive", (UnitBehaviorDuration(lv_tychus, "TychusOverkillTargetedActive") + libGDHL_gv_tychus_RunAndGunRollingReload_DurationInc));

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTychusOverkillRollingReload_Init () {

    libGDHL_gt_HeroTychusOverkillRollingReload = TriggerCreate("libGDHL_gt_HeroTychusOverkillRollingReload_Func");

    TriggerEnable(libGDHL_gt_HeroTychusOverkillRollingReload, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTychusOverkillRollingReload, c_playerAny, "RunAndGunApplyBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tyrael - Sanctification Facing

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTyraelSanctificationFacing_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gv_players[lv_player].lv_cameraCameraLockInterrupt = false;

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    UnitSetFacing(libGame_gv_players[lv_player].lv_heroUnit, 270.0, 0.05);

    Wait(0.05, c_timeGame);

    UnitSetFacing(libGame_gv_players[lv_player].lv_heroUnit, 270.0, 0.05);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTyraelSanctificationFacing_Init () {

    libGDHL_gt_HeroTyraelSanctificationFacing = TriggerCreate("libGDHL_gt_HeroTyraelSanctificationFacing_Func");

    TriggerEnable(libGDHL_gt_HeroTyraelSanctificationFacing, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTyraelSanctificationFacing, c_playerAny, "SanctificationInitialSet");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTyraelSanctificationFacing, c_playerAny, "TyraelSanctificationPrepareSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tyrael - Sanctification Timer Start

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTyraelSanctificationTimerStart_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);



    // Actions

    if (!runActions) {

        return true;

    }



    TimerStart(libGDHL_gv_sanctifcationTimer[lv_player], CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "TyraelSanctificationDisplayBehavior", "Duration", lv_player), false, c_timeGame);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTyraelSanctificationTimerStart_Init () {

    libGDHL_gt_HeroTyraelSanctificationTimerStart = TriggerCreate("libGDHL_gt_HeroTyraelSanctificationTimerStart_Func");

    TriggerEnable(libGDHL_gt_HeroTyraelSanctificationTimerStart, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroTyraelSanctificationTimerStart, c_playerAny, "TyraelSanctificationStationaryInitialSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tyrael - Archangel's Wrath Suppress Collision

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTyraelArchangelsWrathSuppressCollision_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSet(c_gameCatalogUnit, "HeroTyrael", "Collide[" + IntToString(1) + "]", UnitGetOwner(EventUnit()), "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroTyrael", "Collide[" + IntToString(12) + "]", UnitGetOwner(EventUnit()), "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroTyrael", "Collide[" + IntToString(8) + "]", UnitGetOwner(EventUnit()), "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroTyrael", "Collide[" + IntToString(10) + "]", UnitGetOwner(EventUnit()), "1");

    while (!((UnitHasBehavior2(EventUnit(), "TyraelArchangelsWrathDeathActiveBuff") == false))) {

        Wait(0.0625, c_timeGame);

    }

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroTyrael", "Collide[" + IntToString(1) + "]", UnitGetOwner(EventUnit()), "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroTyrael", "Collide[" + IntToString(12) + "]", UnitGetOwner(EventUnit()), "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroTyrael", "Collide[" + IntToString(8) + "]", UnitGetOwner(EventUnit()), "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroTyrael", "Collide[" + IntToString(10) + "]", UnitGetOwner(EventUnit()), "0");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTyraelArchangelsWrathSuppressCollision_Init () {

    libGDHL_gt_HeroTyraelArchangelsWrathSuppressCollision = TriggerCreate("libGDHL_gt_HeroTyraelArchangelsWrathSuppressCollision_Func");

    TriggerEnable(libGDHL_gt_HeroTyraelArchangelsWrathSuppressCollision, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTyraelArchangelsWrathSuppressCollision, null, "TyraelArchangelsWrathDeathActiveBuff", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tyrael - Archangel's Wrath Death Timer Modification

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTyraelArchangelsWrathDeathTimerModification_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_i;

    unit lv_tyrael;

    int lv_tyraelOwner;

    fixed lv_timerMod;

    fixed lv_baseTimerValue;

    fixed lv_existingTimer;

    fixed lv_newTimer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_tyrael = EventUnit();

    lv_tyraelOwner = UnitGetOwner(lv_tyrael);

    lv_timerMod = 0.1;



    // Actions

    if (!runActions) {

        return true;

    }



    lv_baseTimerValue = libCore_gf_HeroDeathTime(lv_tyraelOwner, UnitLevel(lv_tyrael));

    lv_existingTimer = TimerGetRemaining(libGame_gv_players[lv_tyraelOwner].lv_respawnTimer);

    lv_newTimer = lv_existingTimer;

    if ((lv_baseTimerValue > 1)) {

        lv_newTimer -= (lv_baseTimerValue * lv_timerMod);

        if ((lv_newTimer > 2.0)) {

            libGame_gf_HeroDeathUpdateRespawnTimer(lv_tyraelOwner, lv_newTimer);

        }



    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTyraelArchangelsWrathDeathTimerModification_Init () {

    libGDHL_gt_HeroTyraelArchangelsWrathDeathTimerModification = TriggerCreate("libGDHL_gt_HeroTyraelArchangelsWrathDeathTimerModification_Func");

    TriggerEnable(libGDHL_gt_HeroTyraelArchangelsWrathDeathTimerModification, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTyraelArchangelsWrathDeathTimerModification, null, "ArchangelsWrathDeathTimeStack", c_unitBehaviorChangeIncrease);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tyrael - Sanctification Fullscreen Overlay On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    string lv_sanctificationBehavior;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_sanctificationBehavior = EventUnitBehavior();



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_unit, "TyraelSanctificationDisplayBehavior", UnitBehaviorEffectUnit(lv_unit, lv_sanctificationBehavior, c_effectUnitCaster, 0), 1);

    UnitBehaviorSetDurationRemaining(lv_unit, "TyraelSanctificationDisplayBehavior", TimerGetRemaining(libGDHL_gv_sanctifcationTimer[UnitBehaviorEffectPlayer(lv_unit, lv_sanctificationBehavior, c_effectPlayerOrigin, 0)]));

    if ((UnitTestState(lv_unit, c_unitStateHallucination) == false) && (UnitHasBehavior2(lv_unit, "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(EventPlayer(), libUIUI_ge_FullscreenOverlayPriorities_Invulnerable, "Cutscenes\\GameUI_InvulnerableOverlay.StormCutscene", lv_sanctificationBehavior);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOn_Init () {

    libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOn = TriggerCreate("libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOn_Func");

    TriggerEnable(libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOn, null, "Sanctification", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tyrael - Sanctification Fullscreen Overlay Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorRemove(lv_unit, "TyraelSanctificationDisplayBehavior", 1);

    if ((UnitHasBehavior2(lv_unit, "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_InvulnerableOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff_Init () {

    libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff = TriggerCreate("libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff_Func");

    TriggerEnable(libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff, null, "Sanctification", c_unitBehaviorChangeDestroy);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff, null, "Sanctification", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tyrande - Elune's Chosen Set Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTyrandeElunesChosenSetTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_target;

    int lv_targetOwner;

    int lv_tyrandePlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_target = EventUnit();

    lv_targetOwner = UnitGetOwner(lv_target);

    lv_tyrandePlayer = UnitGetOwner(UnitBehaviorEffectUnit(lv_target, "TyrandeElunesChosenAllyBuff", c_effectUnitCaster, 0));



    // Conditions

    if (testConds) {

        if (!((lv_targetOwner >= 1))) {

            return false;

        }



        if (!((lv_targetOwner <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroTyrandeElunesChosenTarget[lv_tyrandePlayer] = lv_target;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTyrandeElunesChosenSetTarget_Init () {

    libGDHL_gt_HeroTyrandeElunesChosenSetTarget = TriggerCreate("libGDHL_gt_HeroTyrandeElunesChosenSetTarget_Func");

    TriggerEnable(libGDHL_gt_HeroTyrandeElunesChosenSetTarget, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTyrandeElunesChosenSetTarget, null, "TyrandeElunesChosenAllyBuff", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tyrande - Elune's Chosen Damage Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTyrandeElunesChosenDamageProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_damageDealt;

    fixed lv_damageScale;

    unit lv_tyrande;

    int lv_tyrandePlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_damageDealt = (EventUnitDamageAmount()+EventUnitDamageBehaviorShield());

    lv_damageScale = 1.75;

    lv_tyrande = EventUnitDamageSourceUnit();

    lv_tyrandePlayer = UnitGetOwner(lv_tyrande);



    // Conditions

    if (testConds) {

        if (!((lv_damageDealt > 0.0))) {

            return false;

        }



        if (!((UnitBehaviorCount(lv_tyrande, "TyrandeElunesChosenSelfBuff") == 1))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSet(c_gameCatalogEffect, "TyrandeElunesChosenCreateHealer", "RechargeVitalRate", lv_tyrandePlayer, FixedToString((lv_damageDealt * lv_damageScale), c_fixedPrecisionAny));

    UnitCreateEffectUnitWithSource(lv_tyrande, "TyrandeElunesChosenCreateHealer", libGDHL_gv_heroTyrandeElunesChosenTarget[lv_tyrandePlayer], c_gameCatalogAbil, "TyrandeElunesChosen");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTyrandeElunesChosenDamageProc_Init () {

    libGDHL_gt_HeroTyrandeElunesChosenDamageProc = TriggerCreate("libGDHL_gt_HeroTyrandeElunesChosenDamageProc_Func");

    TriggerEnable(libGDHL_gt_HeroTyrandeElunesChosenDamageProc, false);

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroTyrandeElunesChosenDamageProc, null, c_unitDamageTypeBasic, c_unitDamageEither, "TyrandeHeroWeaponDamage");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Tyrande - Eyes Of The Huntress Activate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroTyrandeEyesOfTheHuntressActivate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_tyrande;

    int lv_tyrandePlayer;

    int lv_enemyTeam;



    // Automatic Variable Declarations

    playergroup auto3561D253_g;

    int auto3561D253_var;

    unitgroup auto8AB2AAC7_g;

    int auto8AB2AAC7_u;

    unit auto8AB2AAC7_var;



    // Variable Initialization

    lv_tyrande = EventUnit();

    lv_tyrandePlayer = UnitGetOwner(lv_tyrande);

    lv_enemyTeam = libGame_gf_EnemyTeamNumberOfPlayer(lv_tyrandePlayer);



    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(lv_tyrande) > 0))) {

            return false;

        }



        if (!((UnitGetOwner(lv_tyrande) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_tyrandePlayer, "TyrandeEyesOfTheHuntress") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    auto3561D253_g = libGame_gf_PlayersOnTeamHeroes(lv_enemyTeam, true);

    auto3561D253_var = -1;

    while (true) {

        	auto3561D253_var = PlayerGroupNextPlayer(auto3561D253_g, auto3561D253_var);

        	if (auto3561D253_var<0) { break; }

        	auto8AB2AAC7_g = libGame_gv_players[auto3561D253_var].lv_heroUnitGroup;

        auto8AB2AAC7_u = UnitGroupCount(auto8AB2AAC7_g, c_unitCountAll);

        for (;; auto8AB2AAC7_u -= 1) {

            auto8AB2AAC7_var = UnitGroupUnitFromEnd(auto8AB2AAC7_g, auto8AB2AAC7_u);

            if (auto8AB2AAC7_var == null) { break; }

            UnitBehaviorAdd(auto8AB2AAC7_var, "TyrandeShadowstalkEyesOfTheHuntressTalentRevealer", lv_tyrande, 1);

        }

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroTyrandeEyesOfTheHuntressActivate_Init () {

    libGDHL_gt_HeroTyrandeEyesOfTheHuntressActivate = TriggerCreate("libGDHL_gt_HeroTyrandeEyesOfTheHuntressActivate_Func");

    TriggerEnable(libGDHL_gt_HeroTyrandeEyesOfTheHuntressActivate, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroTyrandeEyesOfTheHuntressActivate, null, "ShadowstalkCloak", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor - Zombie Prison - Kill Zombies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorZombiePrisonKillZombies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;

    int lv_player;

    point lv_soundPoint;



    // Automatic Variable Declarations

    unitgroup auto3D6429A1_g;

    int auto3D6429A1_u;

    unit auto3D6429A1_var;

    unitgroup auto340695BA_g;

    int auto340695BA_u;

    unit auto340695BA_var;



    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_caster);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((PlayerHasTalent(lv_player, "WitchDoctorDeadRush") == true)) {

        auto3D6429A1_g = UnitGroup("WitchDoctorZombieWallUnit", lv_player, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 1);

        auto3D6429A1_u = UnitGroupCount(auto3D6429A1_g, c_unitCountAll);

        for (;; auto3D6429A1_u -= 1) {

            auto3D6429A1_var = UnitGroupUnitFromEnd(auto3D6429A1_g, auto3D6429A1_u);

            if (auto3D6429A1_var == null) { break; }

            UnitCreateEffectUnit(lv_caster, "WitchDoctorZombieWallDeadRushTalentSearch", auto3D6429A1_var);

        }

    }



    auto340695BA_g = UnitGroup("WitchDoctorZombieWallUnit", lv_player, RegionEntireMap(), UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32))), 0);

    auto340695BA_u = UnitGroupCount(auto340695BA_g, c_unitCountAll);

    for (;; auto340695BA_u -= 1) {

        auto340695BA_var = UnitGroupUnitFromEnd(auto340695BA_g, auto340695BA_u);

        if (auto340695BA_var == null) { break; }

        lv_soundPoint = UnitGetPosition(auto340695BA_var);

        UnitCreateEffectUnit(auto340695BA_var, "WitchDoctorZombieWallCancelModifyTimedLifeDuration", auto340695BA_var);

    }

    PlayerCreateEffectPoint(UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)), "WitchDoctorZombieWallDeathSoundPersistent", lv_soundPoint);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorZombiePrisonKillZombies_Init () {

    libGDHL_gt_HeroWitchDoctorZombiePrisonKillZombies = TriggerCreate("libGDHL_gt_HeroWitchDoctorZombiePrisonKillZombies_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorZombiePrisonKillZombies, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroWitchDoctorZombiePrisonKillZombies, c_playerAny, "WitchDoctorZombiePrisonCancelDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor - Zombie Prison - Relic Zombies Spawned

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorZombiePrisonRelicZombiesSpawned_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_zombie;

    int lv_ownerPlayer;

    point lv_positionOfAbility;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_zombie = EventUnit();

    lv_ownerPlayer = UnitGetOwner(lv_zombie);

    lv_positionOfAbility = UnitGetPosition(lv_zombie);

    UnitCreateAIThinkTree(lv_zombie);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorZombiePrisonRelicZombiesSpawned_Init () {

    libGDHL_gt_HeroWitchDoctorZombiePrisonRelicZombiesSpawned = TriggerCreate("libGDHL_gt_HeroWitchDoctorZombiePrisonRelicZombiesSpawned_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorZombiePrisonRelicZombiesSpawned, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroWitchDoctorZombiePrisonRelicZombiesSpawned, null, AbilityCommand("WitchDoctorZombieWallMorph", 0), c_unitAbilStageComplete, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor - Ravenous Spirit - Cast

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorRavenousSpiritCast_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_ravenousSpiritUnit;

    string lv_ravenousSpiritBehavior;

    fixed lv_ravenousSpiritDuration;

    unit lv_controllerUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_ravenousSpiritBehavior = "";



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = EventPlayerEffectUsedUnitOwner(c_effectUnitCaster);

    if ((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroAbathur")) {

        lv_controllerUnit = libGame_gv_players[lv_player].lv_activeVehicle;

    }

    else {

        lv_controllerUnit = libGame_gv_players[lv_player].lv_heroUnit;

    }

    UnitSelect(EventPlayerEffectUsedUnit(c_effectUnitTarget), lv_player, true);

    lv_ravenousSpiritUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_ravenousSpiritBehavior = CatalogFieldValueGet(c_gameCatalogEffect, (EventPlayerEffectUsed()), "Behavior", lv_player);

    lv_ravenousSpiritDuration = CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, lv_ravenousSpiritBehavior, "Duration", lv_player);

    UnitBehaviorSetDuration(EventPlayerEffectUsedUnit(c_effectUnitCaster), "RavenousSoulsChannel", lv_ravenousSpiritDuration);

    UnitBehaviorSetDurationRemaining(EventPlayerEffectUsedUnit(c_effectUnitCaster), "RavenousSoulsChannel", lv_ravenousSpiritDuration);

    libGame_gv_players[lv_player].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(lv_ravenousSpiritUnit);

    libGame_gv_players[lv_player].lv_cameraCurrentTarget = lv_ravenousSpiritUnit;

    libGame_gf_CameraUpdateCameraForPlayer(lv_player);

    if ((libAIAI_gf_HeroAIIsAIEnabledForPlayer(lv_player) == true)) {

        UnitCreateAIThinkTree(lv_ravenousSpiritUnit);

    }



    UnitBehaviorAdd(lv_controllerUnit, "DisableAIGoalAssignment", lv_controllerUnit, 1);

    while ((UnitHasBehavior2(lv_controllerUnit, "RavenousSoulsChannel") == true)) {

        Wait(0.0625, c_timeGame);

    }

    UnitKill(lv_ravenousSpiritUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorRavenousSpiritCast_Init () {

    libGDHL_gt_HeroWitchDoctorRavenousSpiritCast = TriggerCreate("libGDHL_gt_HeroWitchDoctorRavenousSpiritCast_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorRavenousSpiritCast, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroWitchDoctorRavenousSpiritCast, c_playerAny, "WitchDoctorRavenousSpiritApplyBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor - Ravenous Spirit - Expires

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorRavenousSpiritExpires_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "WitchDoctorRavenousSpiritUnit"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorRemove(libGame_gv_players[EventPlayer()].lv_heroUnit, "RavenousSoulsChannel", 1);

    UnitBehaviorRemove(libGame_gv_players[EventPlayer()].lv_heroUnit, "DisableAIGoalAssignment", 1);

    if ((UnitGetType(libGame_gv_players[UnitGetOwner(EventUnit())].lv_heroUnit) == "HeroAbathur")) {

        if ((UnitIsAlive(libGame_gv_players[UnitGetOwner(EventUnit())].lv_activeVehicle) == true)) {

            libGame_gv_players[EventPlayer()].lv_cameraPlayerUnitGroupToFocusOn = libNtve_gf_ConvertUnitToUnitGroup(libGame_gv_players[EventPlayer()].lv_activeVehicle);

        }

        else {

            libGame_gv_players[EventPlayer()].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[EventPlayer()].lv_heroUnitGroup;

        }

    }

    else {

        libGame_gv_players[EventPlayer()].lv_cameraPlayerUnitGroupToFocusOn = libGame_gv_players[EventPlayer()].lv_heroUnitGroup;

    }

    libGame_gf_CameraUpdateCameraForPlayer(EventPlayer());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorRavenousSpiritExpires_Init () {

    libGDHL_gt_HeroWitchDoctorRavenousSpiritExpires = TriggerCreate("libGDHL_gt_HeroWitchDoctorRavenousSpiritExpires_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorRavenousSpiritExpires, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroWitchDoctorRavenousSpiritExpires, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor - Passive (Target)

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorPassiveTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    string lv_debuff;

    unit lv_witchDoctor;

    unit lv_killedUnit;

    int lv_wDPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_killedUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!(((UnitBehaviorCount(lv_killedUnit, "WitchDoctorVoodooRitualDoT") == 1) || (UnitBehaviorCount(lv_killedUnit, "WitchDoctorVoodooRitualDeathRitualTalentDoT") == 1)))) {

            return false;

        }



        if (!((UnitBehaviorCount(lv_killedUnit, "SylvanasPossessionTarget") == 0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitBehaviorCount(lv_killedUnit, "WitchDoctorVoodooRitualDoT") == 1)) {

        lv_debuff = "WitchDoctorVoodooRitualDoT";

    }

    else {

        lv_debuff = "WitchDoctorVoodooRitualDeathRitualTalentDoT";

    }

    lv_witchDoctor = libGame_gv_players[UnitBehaviorEffectPlayer(lv_killedUnit, lv_debuff, c_effectPlayerCaster, 0)].lv_heroUnit;

    lv_wDPlayer = UnitGetOwner(lv_witchDoctor);

    if ((UnitTypeTestAttribute(UnitGetType(lv_killedUnit), c_unitAttributeStructure) == false) && (UnitTypeTestAttribute(UnitGetType(lv_killedUnit), c_unitAttributeSummoned) == false) && (UnitTypeTestAttribute(UnitGetType(lv_killedUnit), c_unitAttributeCreep) == false) && (UnitTypeTestAttribute(UnitGetType(lv_killedUnit), c_unitAttributeMerc) == false) && (UnitTypeTestAttribute(UnitGetType(lv_killedUnit), c_unitAttributeMinion) == true)) {

        UnitCreateEffectUnit(lv_witchDoctor, "WitchDoctorVoodooRitualProcSet", lv_witchDoctor);

    }



    if ((PlayerHasTalent(lv_wDPlayer, "WitchDoctorBloodRitual") == true)) {

        UnitCreateEffectUnit(lv_witchDoctor, "WitchDoctorVoodooRitualBloodRitualSet", lv_witchDoctor);

    }



    UnitBehaviorRemove(EventUnit(), "WitchDoctorVoodooRitualDoT", 1);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorPassiveTarget_Init () {

    libGDHL_gt_HeroWitchDoctorPassiveTarget = TriggerCreate("libGDHL_gt_HeroWitchDoctorPassiveTarget_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorPassiveTarget, false);

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroWitchDoctorPassiveTarget, null, c_unitDamageTypeBasic, c_unitDamageFatal, null);

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroWitchDoctorPassiveTarget, null, c_unitDamageTypeAbility, c_unitDamageFatal, null);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroWitchDoctorPassiveTarget, null, c_behaviorCategorySpecialDeathState, c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor - Blood Ritual - Hero Takedown Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorBloodRitualHeroTakedownProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_wDPlayer;

    unit lv_wD;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_wDPlayer = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_wD = libGame_gv_players[lv_wDPlayer].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_wDPlayer >= 1))) {

            return false;

        }



        if (!((lv_wDPlayer <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_wDPlayer, "WitchDoctorBloodRitual") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_wD, "WitchDoctorVoodooRitualBloodRitualTalentTakedownProcPersistent", lv_wD);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorBloodRitualHeroTakedownProc_Init () {

    libGDHL_gt_HeroWitchDoctorBloodRitualHeroTakedownProc = TriggerCreate("libGDHL_gt_HeroWitchDoctorBloodRitualHeroTakedownProc_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorBloodRitualHeroTakedownProc, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroWitchDoctorBloodRitualHeroTakedownProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor- Gargantuan - Created

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorGargantuanCreated_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_witchDoctorUnit;

    unit lv_gargantuanUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());

    lv_witchDoctorUnit = libGame_gv_players[lv_player].lv_heroUnit;

    lv_gargantuanUnit = EventUnitCreatedUnit();



    // Actions

    if (!runActions) {

        return true;

    }



    UnitGroupAdd(libGame_gv_players[lv_player].lv_summonedUnitGroup, lv_gargantuanUnit);

    UnitGroupClear(libGDHL_gv_heroWitchDoctorGargantuanAggroGroup[lv_player]);

    UnitCreateEffectUnit(lv_gargantuanUnit, "WitchDoctorGargantuanApplyStompController", lv_witchDoctorUnit);

    libGDHL_gf_HeroWitchDoctorGargantuanAI(lv_witchDoctorUnit, EventUnitCreatedUnit(), lv_player, UnitGetPosition(EventUnitCreatedUnit()));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorGargantuanCreated_Init () {

    libGDHL_gt_HeroWitchDoctorGargantuanCreated = TriggerCreate("libGDHL_gt_HeroWitchDoctorGargantuanCreated_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorGargantuanCreated, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroWitchDoctorGargantuanCreated, null, "WitchDoctorGargantuan", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor- Gargantuan - Stomp Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorGargantuanStompUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_originalOwner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_originalOwner = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(libGame_gv_players[lv_originalOwner].lv_heroUnit, "WitchDoctorGargantuanModifyStompCommandCooldown", libGame_gv_players[lv_originalOwner].lv_heroUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorGargantuanStompUsed_Init () {

    libGDHL_gt_HeroWitchDoctorGargantuanStompUsed = TriggerCreate("libGDHL_gt_HeroWitchDoctorGargantuanStompUsed_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorGargantuanStompUsed, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroWitchDoctorGargantuanStompUsed, c_playerAny, "WitchDoctorGargantuanStompSearch");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor - Vile Infection Taken

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorVileInfectionTaken_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_hero;

    string lv_talent;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_hero = libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnit;

    lv_talent = libGame_gf_HeroGainTalentGainedTalent();



    // Conditions

    if (testConds) {

        if (!((lv_talent == "WitchDoctorVileInfection"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitSetTokenCount(lv_hero, "WitchDoctorVoodooRitualVileInfection", UnitGetTokenCount(lv_hero, "WitchDoctorVoodooRitual"), lv_hero);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorVileInfectionTaken_Init () {

    libGDHL_gt_HeroWitchDoctorVileInfectionTaken = TriggerCreate("libGDHL_gt_HeroWitchDoctorVileInfectionTaken_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorVileInfectionTaken, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroWitchDoctorVileInfectionTaken);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Witch Doctor - Thing of the Deep Taken

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWitchDoctorThingoftheDeepTaken_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_hero;

    string lv_talent;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_hero = libGame_gv_players[libGame_gf_HeroGainTalentPlayer()].lv_heroUnit;

    lv_talent = libGame_gf_HeroGainTalentGainedTalent();



    // Conditions

    if (testConds) {

        if (!((lv_talent == "WitchDoctorThingOfTheDeep"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitSetTokenCount(lv_hero, "WitchDoctorThingOfTheDeepQuestToken", UnitGetTokenCount(lv_hero, "WitchDoctorVoodooRitual"), lv_hero);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWitchDoctorThingoftheDeepTaken_Init () {

    libGDHL_gt_HeroWitchDoctorThingoftheDeepTaken = TriggerCreate("libGDHL_gt_HeroWitchDoctorThingoftheDeepTaken_Func");

    TriggerEnable(libGDHL_gt_HeroWitchDoctorThingoftheDeepTaken, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroWitchDoctorThingoftheDeepTaken);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Wizard - Critical Mass CD Reduction

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWizardCriticalMassCDReduction_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;

    unit lv_vehicle;

    point lv_deadUnitPosition;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;

    lv_vehicle = libGame_gv_players[lv_player].lv_activeVehicle;



    // Conditions

    if (testConds) {

        if (!((UnitIsAlive(lv_unit) == true))) {

            return false;

        }



        if (!(((UnitGetType(lv_unit) == "HeroWizard") || (UnitGetType(lv_vehicle) == "HeroWizard")))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_deadUnitPosition = UnitGetPosition(libGame_gf_HeroParticipatedInTakedownKilledHero());

    if ((UnitGetType(lv_unit) == "HeroWizard")) {

        UnitCreateEffectUnit(lv_unit, "WizardCriticalMassCooldownRefund", lv_unit);

        UnitCreateEffectUnit(lv_unit, "WizardCriticalMassModifyPlayerCooldowns", lv_unit);

        UnitCreateEffectPoint(lv_unit, "WizardCriticalMassDummyPersistent", lv_deadUnitPosition);

    }

    else {

        UnitCreateEffectUnit(lv_vehicle, "WizardCriticalMassCooldownRefund", lv_vehicle);

        UnitCreateEffectUnit(lv_vehicle, "WizardCriticalMassModifyPlayerCooldowns", lv_vehicle);

        UnitCreateEffectPoint(lv_vehicle, "WizardCriticalMassDummyPersistent", lv_deadUnitPosition);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWizardCriticalMassCDReduction_Init () {

    libGDHL_gt_HeroWizardCriticalMassCDReduction = TriggerCreate("libGDHL_gt_HeroWizardCriticalMassCDReduction_Func");

    TriggerEnable(libGDHL_gt_HeroWizardCriticalMassCDReduction, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroWizardCriticalMassCDReduction);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Wizard - Dominance

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWizardDominance_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((UnitIsAlive(lv_unit) == true))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroWizard"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "WizardDominance") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnitWithSource(lv_unit, "WizardDominanceSet", lv_unit, c_gameCatalogBehavior, "WizardDominanceDummySourceBehavior");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWizardDominance_Init () {

    libGDHL_gt_HeroWizardDominance = TriggerCreate("libGDHL_gt_HeroWizardDominance_Func");

    TriggerEnable(libGDHL_gt_HeroWizardDominance, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroWizardDominance);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Wizard - Illusionist - Damage Check

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroWizardIllusionistDamageCheck_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    fixed lv_damageTaken;

    fixed lv_totalHealth;

    fixed lv_percentDamageTaken;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_unit) == "HeroWizard"))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "WizardTeleportIllusionist") == true))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_unit, "WizardIllusionistCooldown") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_damageTaken = EventUnitDamageAmount();

    lv_totalHealth = UnitGetPropertyFixed(lv_unit, c_unitPropLifeMax, c_unitPropCurrent);

    lv_percentDamageTaken = (lv_damageTaken/lv_totalHealth);

    if ((lv_percentDamageTaken > libGDHL_gv_illusionistProcPercentageConstant)) {

        UnitCreateEffectUnit(lv_unit, "WizardIllusionistProcSet", lv_unit);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroWizardIllusionistDamageCheck_Init () {

    libGDHL_gt_HeroWizardIllusionistDamageCheck = TriggerCreate("libGDHL_gt_HeroWizardIllusionistDamageCheck_Func");

    TriggerEnable(libGDHL_gt_HeroWizardIllusionistDamageCheck, false);

    TriggerAddEventUnitDamaged(libGDHL_gt_HeroWizardIllusionistDamageCheck, null, c_unitDamageTypeAny, c_unitDamageEither, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Uther - Armor of Faith Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroUtherArmorofFaithProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((UnitBehaviorCount(lv_unit, "UtherHolyLightArmorOfFaithCooldown") < 1))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "UtherEternalDevotionArmorOfFaith") == true))) {

            return false;

        }



        if (!((UnitGetType(lv_unit) == "HeroUther"))) {

            return false;

        }



        if (!((UnitHasBehaviorWithCategoryFlag(lv_unit, c_behaviorCategoryBuffUnstoppable) == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_unit, "UtherHolyLightArmorOfFaithProcSet", lv_unit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroUtherArmorofFaithProc_Init () {

    libGDHL_gt_HeroUtherArmorofFaithProc = TriggerCreate("libGDHL_gt_HeroUtherArmorofFaithProc_Func");

    TriggerEnable(libGDHL_gt_HeroUtherArmorofFaithProc, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroUtherArmorofFaithProc, null, c_behaviorCategoryStun, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroUtherArmorofFaithProc, null, c_behaviorCategoryDebuffRoot, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libGDHL_gt_HeroUtherArmorofFaithProc, null, c_behaviorCategoryDebuffSilence, c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Uther - Blessed Champion Target Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroUtherBlessedChampionTargetProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    fixed lv_healAmount;

    fixed lv_blessedChampionMod;

    fixed lv_healAmountMod;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnitHealLaunchUnit();

    lv_player = UnitGetOwner(lv_unit);

    lv_healAmount = EventUnitHealAmount();

    lv_blessedChampionMod = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "UtherBlessedChampionHealRatio", "XP", lv_player);

    lv_healAmountMod = (lv_healAmount * lv_blessedChampionMod);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "UtherMasteryBlessedChampion") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroUtherBlessedChampionRegisteredHeals[lv_player] += 1;

    libGDHL_gv_heroUtherBlessedChampionStoredHealing[lv_player][1] = lv_healAmountMod;

    if ((libGDHL_gv_heroUtherBlessedChampionRegisteredHeals[lv_player] == 2)) {

        libGDHL_gf_HeroUtherBlessedChampionSetHeal(lv_player);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroUtherBlessedChampionTargetProc_Init () {

    libGDHL_gt_HeroUtherBlessedChampionTargetProc = TriggerCreate("libGDHL_gt_HeroUtherBlessedChampionTargetProc_Func");

    TriggerEnable(libGDHL_gt_HeroUtherBlessedChampionTargetProc, false);

    TriggerAddEventUnitHealed(libGDHL_gt_HeroUtherBlessedChampionTargetProc, null, c_unitVitalLife, "HolyLightCreateHealer");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Uther - Blessed Champion Self-Healing Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroUtherBlessedChampionSelfHealingProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    fixed lv_healAmount;

    fixed lv_blessedChampionMod;

    fixed lv_healAmountMod;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnitHealLaunchUnit();

    lv_player = UnitGetOwner(lv_unit);

    lv_healAmount = EventUnitHealAmount();

    lv_blessedChampionMod = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "UtherBlessedChampionHealRatio", "XP", lv_player);

    lv_healAmountMod = (lv_healAmount * lv_blessedChampionMod);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "UtherMasteryBlessedChampion") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroUtherBlessedChampionRegisteredHeals[lv_player] += 1;

    libGDHL_gv_heroUtherBlessedChampionStoredHealing[lv_player][2] = lv_healAmountMod;

    if ((libGDHL_gv_heroUtherBlessedChampionRegisteredHeals[lv_player] == 2)) {

        libGDHL_gf_HeroUtherBlessedChampionSetHeal(lv_player);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroUtherBlessedChampionSelfHealingProc_Init () {

    libGDHL_gt_HeroUtherBlessedChampionSelfHealingProc = TriggerCreate("libGDHL_gt_HeroUtherBlessedChampionSelfHealingProc_Func");

    TriggerEnable(libGDHL_gt_HeroUtherBlessedChampionSelfHealingProc, false);

    TriggerAddEventUnitHealed(libGDHL_gt_HeroUtherBlessedChampionSelfHealingProc, null, c_unitVitalLife, "HolyLightCreateSelfHealer");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Uther - Blessed Champion Dummy Procs

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroUtherBlessedChampionDummyProcs_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = UnitGetOwner(lv_unit);



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_player, "UtherMasteryBlessedChampion") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGDHL_gv_heroUtherBlessedChampionRegisteredHeals[lv_player] += 1;

    if (((EventPlayerEffectUsed() == "HolyShockDamage") || (EventPlayerEffectUsed() == "UtherHolyLightBlessedChampionTalentTargetHealDummy"))) {

        libGDHL_gv_heroUtherBlessedChampionStoredHealing[lv_player][1] = 0.0;

    }

    else {

        libGDHL_gv_heroUtherBlessedChampionStoredHealing[lv_player][2] = 0.0;

    }

    if ((libGDHL_gv_heroUtherBlessedChampionRegisteredHeals[lv_player] == 2)) {

        libGDHL_gf_HeroUtherBlessedChampionSetHeal(lv_player);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroUtherBlessedChampionDummyProcs_Init () {

    libGDHL_gt_HeroUtherBlessedChampionDummyProcs = TriggerCreate("libGDHL_gt_HeroUtherBlessedChampionDummyProcs_Func");

    TriggerEnable(libGDHL_gt_HeroUtherBlessedChampionDummyProcs, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroUtherBlessedChampionDummyProcs, c_playerAny, "UtherHolyLightBlessedChampionTalentSelfHealDummy");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroUtherBlessedChampionDummyProcs, c_playerAny, "UtherHolyLightBlessedChampionTalentTargetHealDummy");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroUtherBlessedChampionDummyProcs, c_playerAny, "HolyShockDamage");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Uther - Spirit of Redemption Cooldown Reset

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroUtherSpiritofRedemptionCooldownReset_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_i;

    unit lv_hero;

    int lv_heroIndex;

    string lv_abilLink;

    string lv_cooldownLink;

    fixed lv_currentCooldownAmount;

    fixed lv_newCooldownAmount;

    string lv_chargeLink;

    fixed lv_currentChargeAmount;

    fixed lv_newChargeAmount;



    // Automatic Variable Declarations

    const int auto5E5F8669_ae = libCore_gv_dataHeroesMaxAbilitiesPerHero;

    const int auto5E5F8669_ai = 1;



    // Variable Initialization

    lv_hero = EventUnit();

    lv_cooldownLink = "";

    lv_chargeLink = "";



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventUnitBehaviorChange() == c_unitBehaviorChangeActivate)) {

        lv_heroIndex = libCore_gf_GetHeroIndexForUnitType(UnitGetType(lv_hero));

        libNtve_gf_UnitRemoveCooldown(EventUnit(), "Abil/UtherHolyShock");

        lv_i = 1;

        for ( ; ( (auto5E5F8669_ai >= 0 && lv_i <= auto5E5F8669_ae) || (auto5E5F8669_ai < 0 && lv_i >= auto5E5F8669_ae) ) ; lv_i += auto5E5F8669_ai ) {

            lv_abilLink = libGame_gv_players[lv_heroIndex].lv_heroData.lv_abilities[lv_i].lv_ability;

            if ((lv_abilLink != null)) {

                if ((lv_abilLink != "UtherDivineStorm") && (lv_abilLink != "UtherDivineIntervention")) {

                    lv_cooldownLink = CatalogFieldValueGet(c_gameCatalogAbil, lv_abilLink, "Cost[" + IntToString(0) + "].Cooldown.Link", UnitGetOwner(lv_hero));

                    libNtve_gf_UnitRemoveCooldown(lv_hero, lv_cooldownLink);

                }



                lv_chargeLink = CatalogFieldValueGet(c_gameCatalogAbil, lv_abilLink, "Cost[" + IntToString(0) + "].Charge.Link", UnitGetOwner(lv_hero));

                UnitAddChargeUsed(lv_hero, lv_chargeLink, -1.0);

            }



        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroUtherSpiritofRedemptionCooldownReset_Init () {

    libGDHL_gt_HeroUtherSpiritofRedemptionCooldownReset = TriggerCreate("libGDHL_gt_HeroUtherSpiritofRedemptionCooldownReset_Func");

    TriggerEnable(libGDHL_gt_HeroUtherSpiritofRedemptionCooldownReset, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroUtherSpiritofRedemptionCooldownReset, null, "SpiritOfRedemptionSpiritFormBuff", c_unitBehaviorChangeAny);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Uther - Eternal Devotion Suppress Collision

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroUtherEternalDevotionSuppressCollision_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    CatalogFieldValueSet(c_gameCatalogUnit, "HeroUther", "Collide[" + IntToString(1) + "]", UnitGetOwner(EventUnit()), "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroUther", "Collide[" + IntToString(12) + "]", UnitGetOwner(EventUnit()), "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroUther", "Collide[" + IntToString(8) + "]", UnitGetOwner(EventUnit()), "0");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroUther", "Collide[" + IntToString(10) + "]", UnitGetOwner(EventUnit()), "1");

    while (!((UnitHasBehavior2(EventUnit(), "SpiritOfRedemptionSpiritFormBuff") == false))) {

        Wait(0.0625, c_timeGame);

    }

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroUther", "Collide[" + IntToString(1) + "]", UnitGetOwner(EventUnit()), "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroUther", "Collide[" + IntToString(12) + "]", UnitGetOwner(EventUnit()), "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroUther", "Collide[" + IntToString(8) + "]", UnitGetOwner(EventUnit()), "1");

    CatalogFieldValueSet(c_gameCatalogUnit, "HeroUther", "Collide[" + IntToString(10) + "]", UnitGetOwner(EventUnit()), "0");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroUtherEternalDevotionSuppressCollision_Init () {

    libGDHL_gt_HeroUtherEternalDevotionSuppressCollision = TriggerCreate("libGDHL_gt_HeroUtherEternalDevotionSuppressCollision_Func");

    TriggerEnable(libGDHL_gt_HeroUtherEternalDevotionSuppressCollision, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroUtherEternalDevotionSuppressCollision, null, "SpiritOfRedemptionSpiritFormBuff", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Uther - Divine Shield Fullscreen Overlay On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOn_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_InvulnerableOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOn_Init () {

    libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOn = TriggerCreate("libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOn_Func");

    TriggerEnable(libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOn, null, "DivineInterventionInvulnerable", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Uther - Divine Shield Fullscreen Overlay Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_InvulnerableOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff_Init () {

    libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff = TriggerCreate("libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff_Func");

    TriggerEnable(libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff, null, "DivineInterventionInvulnerable", c_unitBehaviorChangeDestroy);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff, null, "DivineInterventionInvulnerable", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Devouring Maw - Overlay On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraDevouringMawOverlayOn_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitIsAlive(EventUnit()) == true) && (UnitTestState(EventUnit(), c_unitStateHallucination) == false) && (UnitTypeTestAttribute(UnitGetType(EventUnit()), c_unitAttributeHeroic) == true) && (UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(EventPlayer(), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraDevouringMawOverlayOn_Init () {

    libGDHL_gt_HeroZagaraDevouringMawOverlayOn = TriggerCreate("libGDHL_gt_HeroZagaraDevouringMawOverlayOn_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraDevouringMawOverlayOn, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroZagaraDevouringMawOverlayOn, null, "DevouringMawTargetBehavior", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Devouring Maw - Overlay Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraDevouringMawOverlayOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraDevouringMawOverlayOff_Init () {

    libGDHL_gt_HeroZagaraDevouringMawOverlayOff = TriggerCreate("libGDHL_gt_HeroZagaraDevouringMawOverlayOff_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraDevouringMawOverlayOff, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroZagaraDevouringMawOverlayOff, null, "DevouringMawTargetBehavior", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Exit Nydus Worm Used

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraExitNydusWormUsed_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_nydusWormUnit;

    unit lv_zagaraUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));

    lv_nydusWormUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    if ((UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroZagara")) {

        lv_zagaraUnit = libGame_gv_players[lv_player].lv_heroUnit;

    }

    else {

        lv_zagaraUnit = libGame_gv_players[lv_player].lv_activeVehicle;

    }

    libGame_gf_CameraPanCameraForPlayerAndUpdateMapBoundsIfNecessary(UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)), UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitCaster)), 0.0, -1, 0.0, false);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraExitNydusWormUsed_Init () {

    libGDHL_gt_HeroZagaraExitNydusWormUsed = TriggerCreate("libGDHL_gt_HeroZagaraExitNydusWormUsed_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraExitNydusWormUsed, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZagaraExitNydusWormUsed, c_playerAny, "ZagaraExitNydusWormRemoveBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Nydus Worm Spawned

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraNydusWormSpawned_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_newWorm;

    int lv_playerId;

    unit lv_itUnit;



    // Automatic Variable Declarations

    unitgroup autoA03094B1_g;

    int autoA03094B1_u;



    // Variable Initialization

    lv_newWorm = EventUnitCreatedUnit();

    lv_playerId = UnitGetOwner(lv_newWorm);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_newWorm) == "ZagaraNydusWorm"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    autoA03094B1_g = libGDHL_gv_heroZagaraNydusWormUnitGroup[lv_playerId];

    autoA03094B1_u = UnitGroupCount(autoA03094B1_g, c_unitCountAll);

    for (;; autoA03094B1_u -= 1) {

        lv_itUnit = UnitGroupUnitFromEnd(autoA03094B1_g, autoA03094B1_u);

        if (lv_itUnit == null) { break; }

        AIAddPortal(lv_playerId, lv_newWorm, lv_itUnit, 1.5, 0.0, "ZagaraEnterNydusWorm", "ZagaraExitNydusWorm");

        AIAddPortal(lv_playerId, lv_itUnit, lv_newWorm, 1.5, 0.0, "ZagaraEnterNydusWorm", "ZagaraExitNydusWorm");

    }

    UnitGroupAdd(libGDHL_gv_heroZagaraNydusWormUnitGroup[lv_playerId], lv_newWorm);

    libGDHL_gf_HeroZagaraUpdateNydusWormLineofSuccession(lv_playerId);

    if (((UnitHasBehavior2(EventUnit(), "UltimateEvolutionBuff") == true) || (UnitHasBehavior2(EventUnit(), "UltimateEvolutionBuild") == true))) {

        UnitBehaviorAdd(lv_newWorm, "AbathurUltimateEvolutionCleanupTarget", lv_newWorm, 1);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraNydusWormSpawned_Init () {

    libGDHL_gt_HeroZagaraNydusWormSpawned = TriggerCreate("libGDHL_gt_HeroZagaraNydusWormSpawned_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraNydusWormSpawned, false);

    TriggerAddEventUnitCreated(libGDHL_gt_HeroZagaraNydusWormSpawned, null, "ZagaraSummonNydusWorm", null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Nydus Worm Targeting State

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraNydusWormTargetingState_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_wormUnit;



    // Automatic Variable Declarations

    unitgroup autoB9C44FF0_g;

    int autoB9C44FF0_u;

    unitgroup auto7CB34C57_g;

    int auto7CB34C57_u;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitGroupCount(libGDHL_gv_heroZagaraNydusWormUnitGroup[EventPlayer()], c_unitCountAlive) == 10))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventTargetModeState() == c_targetModeStateOn)) {

        auto7CB34C57_g = libGDHL_gv_heroZagaraNydusWormUnitGroup[EventPlayer()];

        auto7CB34C57_u = UnitGroupCount(auto7CB34C57_g, c_unitCountAll);

        for (;; auto7CB34C57_u -= 1) {

            lv_wormUnit = UnitGroupUnitFromEnd(auto7CB34C57_g, auto7CB34C57_u);

            if (lv_wormUnit == null) { break; }

            UnitBehaviorAdd(lv_wormUnit, "ZagaraNydusWormOldestWorm", lv_wormUnit, 1);

            break;

        }

    }

    else {

        autoB9C44FF0_g = libGDHL_gv_heroZagaraNydusWormUnitGroup[EventPlayer()];

        autoB9C44FF0_u = UnitGroupCount(autoB9C44FF0_g, c_unitCountAll);

        for (;; autoB9C44FF0_u -= 1) {

            lv_wormUnit = UnitGroupUnitFromEnd(autoB9C44FF0_g, autoB9C44FF0_u);

            if (lv_wormUnit == null) { break; }

            UnitBehaviorRemove(lv_wormUnit, "ZagaraNydusWormOldestWorm", 1);

            break;

        }

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraNydusWormTargetingState_Init () {

    libGDHL_gt_HeroZagaraNydusWormTargetingState = TriggerCreate("libGDHL_gt_HeroZagaraNydusWormTargetingState_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraNydusWormTargetingState, false);

    TriggerAddEventTargetModeUpdate(libGDHL_gt_HeroZagaraNydusWormTargetingState, c_playerAny, AbilityCommand("ZagaraSummonNydusWorm", 0), c_targetModeStateOn);

    TriggerAddEventTargetModeUpdate(libGDHL_gt_HeroZagaraNydusWormTargetingState, c_playerAny, AbilityCommand("ZagaraSummonNydusWorm", 0), c_targetModeStateOff);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Nydus Worm Dies

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraNydusWormDies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_deadWorm;

    int lv_playerId;

    unit lv_zagaraUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_deadWorm = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_deadWorm) == "ZagaraNydusWorm"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_playerId = UnitGetOwner(lv_deadWorm);

    UnitGroupRemove(libGDHL_gv_heroZagaraNydusWormUnitGroup[lv_playerId], lv_deadWorm);

    AIRemovePortal(lv_deadWorm);

    if (((UnitHasBehavior2(libGame_gv_players[lv_playerId].lv_heroUnit, "ZagaraInsideNydusWorm") == true) || (UnitHasBehavior2(libGame_gv_players[lv_playerId].lv_activeVehicle, "ZagaraInsideNydusWorm") == true))) {

        if ((UnitGetType(libGame_gv_players[lv_playerId].lv_heroUnit) == "HeroZagara")) {

            lv_zagaraUnit = libGame_gv_players[lv_playerId].lv_heroUnit;

        }

        else {

            lv_zagaraUnit = libGame_gv_players[lv_playerId].lv_activeVehicle;

        }

        if ((UnitGroupCount(libGDHL_gv_heroZagaraNydusWormUnitGroup[lv_playerId], c_unitCountAlive) < 1)) {

            UnitSetPosition(lv_zagaraUnit, UnitGetPosition(lv_deadWorm), false);

            UnitBehaviorRemove(lv_zagaraUnit, "ZagaraInsideNydusWorm", 1);

        }

        else {

            UnitSetPosition(lv_zagaraUnit, UnitGetPosition(UnitGroupRandomUnit(libGDHL_gv_heroZagaraNydusWormUnitGroup[lv_playerId], c_unitCountAlive)), false);

        }

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraNydusWormDies_Init () {

    libGDHL_gt_HeroZagaraNydusWormDies = TriggerCreate("libGDHL_gt_HeroZagaraNydusWormDies_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraNydusWormDies, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroZagaraNydusWormDies, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Nydus Worm Dies - Update Line of Succession

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraNydusWormDiesUpdateLineofSuccession_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "ZagaraNydusWorm"))) {

            return false;

        }



        if (!((EventPlayer() > 0))) {

            return false;

        }



        if (!((EventPlayer() <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    AIRemovePortal(EventUnit());

    UnitGroupRemove(libGDHL_gv_heroZagaraNydusWormUnitGroup[UnitGetOwner(EventUnit())], EventUnit());

    libGDHL_gf_HeroZagaraUpdateNydusWormLineofSuccession(UnitGetOwner(EventUnit()));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraNydusWormDiesUpdateLineofSuccession_Init () {

    libGDHL_gt_HeroZagaraNydusWormDiesUpdateLineofSuccession = TriggerCreate("libGDHL_gt_HeroZagaraNydusWormDiesUpdateLineofSuccession_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraNydusWormDiesUpdateLineofSuccession, false);

    TriggerAddEventUnitDied(libGDHL_gt_HeroZagaraNydusWormDiesUpdateLineofSuccession, null);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Nydus Worm Exit Animation

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraNydusWormExitAnimation_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_nydusWormUnit;

    unit lv_zagara;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_zagara = EventUnit();

    lv_nydusWormUnit = EventUnitTargetUnit();

    if ((UnitHasBehavior2(lv_nydusWormUnit, "ZagaraNydusWormBirth") == false)) {

        libNtve_gf_SendActorMessageToUnit(lv_nydusWormUnit, "AnimPlay Spell Spell,B");

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraNydusWormExitAnimation_Init () {

    libGDHL_gt_HeroZagaraNydusWormExitAnimation = TriggerCreate("libGDHL_gt_HeroZagaraNydusWormExitAnimation_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraNydusWormExitAnimation, false);

    TriggerAddEventUnitAbility(libGDHL_gt_HeroZagaraNydusWormExitAnimation, null, AbilityCommand("ZagaraExitNydusWorm", 0), c_abilEffectStageFinish, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Baneling Barrage

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraBanelingBarrage_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_movementIncrement;

    int lv_triggeringPlayer;

    unit lv_zagara;

    point lv_targetPoint;

    unit lv_baneling;

    point lv_lastPointChecked;

    point lv_forwardPoint;

    point lv_leftPoint;

    point lv_rightPoint;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_movementIncrement = 1.0;

    lv_triggeringPlayer = EventPlayer();

    lv_zagara = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_targetPoint = EventPlayerEffectUsedPoint(c_effectLocationTargetPoint);

    lv_lastPointChecked = UnitGetPosition(lv_zagara);



    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_UnitCreateFacingPoint(1, "ZagaraBaneling", c_unitCreateIgnorePlacement, lv_triggeringPlayer, libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_zagara), 0.75, lv_targetPoint), lv_targetPoint, lv_zagara);

    lv_baneling = UnitLastCreated();

    if ((EventPlayerEffectUsed() == "SummonBanelingsLaunchDummy")) {

        UnitBehaviorAdd(lv_baneling, "ZagaraBanelingExplode", lv_zagara, 1);

    }

    else {

        UnitBehaviorAdd(lv_baneling, "ZagaraBanelingExplodeBroodmother", lv_zagara, 1);

    }

    SoundPlayOnUnit(SoundLink("Zagara_BanelingEgg_Explode", -1), PlayerGroupAll(), lv_baneling, 0.0, 100.0, 0.0);

    lv_forwardPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_baneling), lv_movementIncrement, lv_targetPoint);

    UnitIssueOrder(lv_baneling, OrderTargetingPoint(AbilityCommand("move", 0), lv_forwardPoint), c_orderQueueReplace);

    UnitCreateEffectUnit(lv_zagara, "SummonBanelingsSpeedCheckApplyPersistent", lv_baneling);

    while ((UnitIsAlive(lv_baneling) == true) && (DistanceBetweenPoints(UnitGetPosition(lv_baneling), lv_targetPoint) > lv_movementIncrement)) {

        lv_forwardPoint = libNtve_gf_PointOffsetTowardsPoint(UnitGetPosition(lv_baneling), lv_movementIncrement, lv_targetPoint);

        lv_leftPoint = PointWithOffsetPolar(lv_forwardPoint, 0.7, (AngleBetweenPoints(UnitGetPosition(lv_baneling), lv_targetPoint) + 70.0));

        lv_rightPoint = PointWithOffsetPolar(lv_forwardPoint, 0.7, (AngleBetweenPoints(UnitGetPosition(lv_baneling), lv_targetPoint) - 70.0));

        if (((PointPathingPassable(lv_forwardPoint) == true) || (PointPathingPassable(lv_leftPoint) == true) || (PointPathingPassable(lv_rightPoint) == true))) {

            UnitIssueOrder(lv_baneling, OrderTargetingPoint(AbilityCommand("move", 0), lv_forwardPoint), c_orderQueueReplace);

            lv_lastPointChecked = UnitGetPosition(lv_baneling);

            Wait(0.125, c_timeGame);

        }

        else {

            UnitKill(lv_baneling);

        }

    }

    UnitKill(lv_baneling);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraBanelingBarrage_Init () {

    libGDHL_gt_HeroZagaraBanelingBarrage = TriggerCreate("libGDHL_gt_HeroZagaraBanelingBarrage_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraBanelingBarrage, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZagaraBanelingBarrage, c_playerAny, "SummonBanelingsLaunchDummy");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZagaraBanelingBarrage, c_playerAny, "SummonBanelingsBroodmotherLaunchDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Hydralisk or Mutalisk Control

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraHydraliskorMutaliskControl_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_triggeringPlayer;

    unit lv_zagara;

    unit lv_targetUnit;

    point lv_lastKnownLocation;

    string lv_summonedPetType;

    unit lv_summonedPet;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_triggeringPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_zagara = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventPlayerEffectUsed() == "SummonHydraliskPersistent")) {

        lv_summonedPetType = "ZagaraHydralisk";

    }

    else {

        lv_summonedPetType = "ZagaraMutalisk";

    }

    if ((UnitIsValid(lv_targetUnit) == true)) {

        lv_lastKnownLocation = UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitTarget));

        libNtve_gf_UnitCreateFacingPoint(1, lv_summonedPetType, 0, lv_triggeringPlayer, PointWithOffsetPolar(UnitGetPosition(lv_zagara), 1.0, AngleBetweenPoints(UnitGetPosition(lv_zagara), UnitGetPosition(lv_targetUnit))), UnitGetPosition(lv_targetUnit), lv_zagara);

    }

    else {

        UnitCreate(1, lv_summonedPetType, 0, lv_triggeringPlayer, PointWithOffsetPolar(UnitGetPosition(lv_zagara), 1.0, 0.0), 0.0, lv_zagara);

    }

    lv_summonedPet = UnitLastCreated();

    UnitBehaviorAdd(lv_summonedPet, "ZagaraHydraliskAbilityController", lv_zagara, 1);

    libAIAI_gf_MinionAIUnhookUnitFromMinionAI(lv_summonedPet);

    while ((UnitIsValid(lv_targetUnit) == true) && (UnitIsAlive(lv_summonedPet) == true) && (UnitFilterMatch(lv_targetUnit, lv_triggeringPlayer, UnitFilter(0, 0, (1 << c_targetFilterMissile), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterHidden - 32)))) == true) && ((libNtve_gf_UnitIsVisibleToPlayer(lv_targetUnit, lv_triggeringPlayer) == true) || (DistanceBetweenPoints(UnitGetPosition(lv_summonedPet), lv_lastKnownLocation) != 0.0))) {

        if ((DistanceBetweenPoints(UnitGetPosition(lv_summonedPet), UnitGetPosition(lv_targetUnit)) > 30.0)) {

            break;

        }



        if ((libNtve_gf_UnitIsVisibleToPlayer(lv_targetUnit, lv_triggeringPlayer) == true)) {

            UnitIssueOrder(lv_summonedPet, OrderTargetingUnit(AbilityCommand("attack", 0), lv_targetUnit), c_orderQueueReplace);

            lv_lastKnownLocation = PointWithOffsetPolar(UnitGetPosition(lv_targetUnit), 2.0, UnitGetFacing(lv_targetUnit));

        }

        else {

            UnitIssueOrder(lv_summonedPet, OrderTargetingPoint(AbilityCommand("move", 0), lv_lastKnownLocation), c_orderQueueReplace);

        }

        Wait(0.125, c_timeGame);

    }

    if ((UnitIsAlive(lv_summonedPet) == true)) {

        UnitCreateAIThinkTree(lv_summonedPet);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraHydraliskorMutaliskControl_Init () {

    libGDHL_gt_HeroZagaraHydraliskorMutaliskControl = TriggerCreate("libGDHL_gt_HeroZagaraHydraliskorMutaliskControl_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraHydraliskorMutaliskControl, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZagaraHydraliskorMutaliskControl, c_playerAny, "SummonHydraliskPersistent");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZagaraHydraliskorMutaliskControl, c_playerAny, "SummonMutaliskPersistent");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Infested Drop Spawn Roach

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraInfestedDropSpawnRoach_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectPointWithSource(EventPlayerEffectUsedUnit(c_effectUnitCaster), "InfestedDropLaunchTriggeredRoachSpawnMissile", UnitTypePlacementFromPoint(UnitGetType(EventPlayerEffectUsedUnit(c_effectUnitCaster)), UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster)), EventPlayerEffectUsedPoint(c_effectLocationTargetPoint), 15.0), c_gameCatalogAbil, "ZagaraInfestedDrop");

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraInfestedDropSpawnRoach_Init () {

    libGDHL_gt_HeroZagaraInfestedDropSpawnRoach = TriggerCreate("libGDHL_gt_HeroZagaraInfestedDropSpawnRoach_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraInfestedDropSpawnRoach, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZagaraInfestedDropSpawnRoach, c_playerAny, "InfestedDropRoachSpawnDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Infest Scaling

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraInfestScaling_Func (bool testConds, bool runActions) {

    // Variable Declarations

    fixed lv_rangedDamageDealtFraction;

    int lv_player;

    unit lv_zagara;

    fixed lv_siegeScore;

    fixed lv_modScore;

    fixed lv_finalScore;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_rangedDamageDealtFraction = 1.0;

    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_zagara = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_siegeScore = PlayerScoreValueGetAsFixed(lv_player, "SiegeDamage");

    lv_modScore = (lv_siegeScore / 1000.0);

    lv_finalScore = (lv_rangedDamageDealtFraction + (Trunc(lv_modScore) / 100.0));



    // Actions

    if (!runActions) {

        return true;

    }



    if ((CatalogFieldValueGet(c_gameCatalogBehavior, "ZagaraInfestBuff", "Modification.DamageDealtFraction[" + IntToString(c_unitDamageTypeBasic) + "]", lv_player) != FixedToString(lv_finalScore, c_fixedPrecisionAny))) {

        CatalogFieldValueSetFixed(c_gameCatalogBehavior, "ZagaraInfestBuff", "Modification.DamageDealtFraction[" + IntToString(c_unitDamageTypeBasic) + "]", lv_player, lv_finalScore);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraInfestScaling_Init () {

    libGDHL_gt_HeroZagaraInfestScaling = TriggerCreate("libGDHL_gt_HeroZagaraInfestScaling_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraInfestScaling, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZagaraInfestScaling, c_playerAny, "ZagaraInfestSearch");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Tyrant Maw CDR on Death

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraTyrantMawCDRonDeath_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(libGame_gf_HeroParticipatedInTakedownKillingPlayer(), "ZagaraMasteryTyrantMaw") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_heroUnit, "DevouringMawTyrantMawMasteryModifyCooldown", libGame_gv_players[libGame_gf_HeroParticipatedInTakedownKillingPlayer()].lv_heroUnit);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraTyrantMawCDRonDeath_Init () {

    libGDHL_gt_HeroZagaraTyrantMawCDRonDeath = TriggerCreate("libGDHL_gt_HeroZagaraTyrantMawCDRonDeath_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraTyrantMawCDRonDeath, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroZagaraTyrantMawCDRonDeath);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Hunter Killer - Hydralisk Transfusion

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraHunterKillerHydraliskTransfusion_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_zagaraPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_zagaraPlayer = UnitGetOwner(EventUnitTarget());



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(lv_zagaraPlayer, "ZagaraMasteryHydraliskTransfusion") == true))) {

            return false;

        }



        if (!((UnitFilterMatch(EventUnit(), UnitGetOwner(EventUnit()), libCore_gv_filtersHeroic) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((PlayerHasTalent(lv_zagaraPlayer, "ZagaraMasteryGroovedSpines") == true)) {

        UnitCreateEffectUnit(EventUnitTarget(), "ZagaraHunterKillerHydraliskTransfusionGroovedSpinesCreateHealer", libGame_gv_players[lv_zagaraPlayer].lv_heroUnit);

    }

    else {

        UnitCreateEffectUnit(EventUnitTarget(), "ZagaraHunterKillerHydraliskTransfusionCreateHealer", libGame_gv_players[lv_zagaraPlayer].lv_heroUnit);

    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraHunterKillerHydraliskTransfusion_Init () {

    libGDHL_gt_HeroZagaraHunterKillerHydraliskTransfusion = TriggerCreate("libGDHL_gt_HeroZagaraHunterKillerHydraliskTransfusion_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraHunterKillerHydraliskTransfusion, false);

    TriggerAddEventUnitAttacked2(libGDHL_gt_HeroZagaraHunterKillerHydraliskTransfusion, null, "ZagaraHydraliskMelee");

    TriggerAddEventUnitAttacked2(libGDHL_gt_HeroZagaraHunterKillerHydraliskTransfusion, null, "ZagaraHydraliskRanged");

    TriggerAddEventUnitAttacked2(libGDHL_gt_HeroZagaraHunterKillerHydraliskTransfusion, null, "ZagaraMutaliskWeapon");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zagara - Endless Creep Apply Behavior

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZagaraEndlessCreepApplyBehavior_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_zagaraPlayer;



    // Automatic Variable Declarations

    unitgroup autoF722F209_g;

    int autoF722F209_u;

    unit autoF722F209_var;

    unitgroup autoF0412A21_g;

    int autoF0412A21_u;

    unit autoF0412A21_var;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(libGame_gf_HeroGainTalentPlayer(), "ZagaraMasteryEndlessCreep") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_zagaraPlayer = libGame_gf_HeroGainTalentPlayer();

    autoF722F209_g = UnitGroup("ZagaraCreepTumorBurrowed", lv_zagaraPlayer, RegionEntireMap(), UnitFilter(0, 0, 0, 0), 0);

    autoF722F209_u = UnitGroupCount(autoF722F209_g, c_unitCountAll);

    for (;; autoF722F209_u -= 1) {

        autoF722F209_var = UnitGroupUnitFromEnd(autoF722F209_g, autoF722F209_u);

        if (autoF722F209_var == null) { break; }

        if ((UnitHasBehavior2(autoF722F209_var, "ZagaraCreepTumorEndlessCreepLife") == false)) {

            UnitCreateEffectUnit(libGame_gv_players[lv_zagaraPlayer].lv_heroUnit, "ZagaraCreepTumorEndlessCreepApplyBehavior", autoF722F209_var);

        }



    }

    autoF0412A21_g = UnitGroup("ZagaraCreepTumor", lv_zagaraPlayer, RegionEntireMap(), UnitFilter(0, 0, 0, 0), 0);

    autoF0412A21_u = UnitGroupCount(autoF0412A21_g, c_unitCountAll);

    for (;; autoF0412A21_u -= 1) {

        autoF0412A21_var = UnitGroupUnitFromEnd(autoF0412A21_g, autoF0412A21_u);

        if (autoF0412A21_var == null) { break; }

        if ((UnitHasBehavior2(autoF0412A21_var, "ZagaraCreepTumorEndlessCreepLife") == false)) {

            UnitCreateEffectUnit(libGame_gv_players[lv_zagaraPlayer].lv_heroUnit, "ZagaraCreepTumorEndlessCreepApplyBehavior", autoF0412A21_var);

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZagaraEndlessCreepApplyBehavior_Init () {

    libGDHL_gt_HeroZagaraEndlessCreepApplyBehavior = TriggerCreate("libGDHL_gt_HeroZagaraEndlessCreepApplyBehavior_Func");

    TriggerEnable(libGDHL_gt_HeroZagaraEndlessCreepApplyBehavior, false);

    libGame_gf_HeroGainTalent(libGDHL_gt_HeroZagaraEndlessCreepApplyBehavior);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zeratul - Shroud of Adun FCT

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZeratulShroudofAdunFCT_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    fixed lv_shieldValue;

    fixed lv_health;

    fixed lv_healthPercentage;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_player = UnitGetOwner(lv_unit);

    lv_health = UnitGetPropertyFixed(lv_unit, c_unitPropLifeMax, c_unitPropCurrent);

    lv_healthPercentage = (lv_health * 0.2);



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_shieldValue = UnitBehaviorDamageModifyRemaining(lv_unit, "ZeratulShroudofAdun");

    if ((lv_shieldValue > 0.0)) {

        FloatingCombatElementCreateTextAtUnit(PlayerGroupSingle(UnitGetOwner(lv_unit)), "FloatingCombatElements/FloatingCombatLesserAmountReceived", "ShieldState", lv_unit, FixedToText(lv_shieldValue, 0), libNtve_gv_FloatingCombatTextAutoRandomSeed);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZeratulShroudofAdunFCT_Init () {

    libGDHL_gt_HeroZeratulShroudofAdunFCT = TriggerCreate("libGDHL_gt_HeroZeratulShroudofAdunFCT_Func");

    TriggerEnable(libGDHL_gt_HeroZeratulShroudofAdunFCT, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZeratulShroudofAdunFCT, c_playerAny, "ZeratulShroudofAdunApplyShield");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZeratulShroudofAdunFCT, c_playerAny, "ZeratulShroudofAdunApply3Shield");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zeratul - Seeker In The Dark Structure Target

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZeratulSeekerInTheDarkStructureTarget_Func (bool testConds, bool runActions) {

    // Variable Declarations

    point lv_point;

    unit lv_unit;

    point lv_unitPoint;

    int lv_player;

    point lv_newPoint;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_point = EventPlayerEffectUsedPoint(c_effectLocationTargetUnit);

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_unitPoint = UnitGetPosition(lv_unit);

    lv_player = UnitGetOwner(lv_unit);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_point = libNtve_gf_PointOffsetTowardsPoint(lv_point, 2.0, lv_unitPoint);

    lv_newPoint = UnitTypePlacementFromPoint(UnitGetType(lv_unit), lv_player, lv_point, 5.0);

    UnitCreateEffectPoint(lv_unit, "ZeratulSingularitySpikeSeekerInTheDarkTalentTeleport", lv_newPoint);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZeratulSeekerInTheDarkStructureTarget_Init () {

    libGDHL_gt_HeroZeratulSeekerInTheDarkStructureTarget = TriggerCreate("libGDHL_gt_HeroZeratulSeekerInTheDarkStructureTarget_Func");

    TriggerEnable(libGDHL_gt_HeroZeratulSeekerInTheDarkStructureTarget, false);

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_HeroZeratulSeekerInTheDarkStructureTarget, c_playerAny, "ZeratulSingularitySpikeSeekerInTheDarkTalentTargetisStructureDummy");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zeratul - Grim Task Proc

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZeratulGrimTaskProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_zeratul;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_zeratul = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((lv_player >= 1))) {

            return false;

        }



        if (!((lv_player <= libCore_gv_bALMaxPlayers))) {

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "ZeratulGrimTask") == true))) {

            return false;

        }



        if (!((UnitGetTokenCount(lv_zeratul, CatalogFieldValueGet(c_gameCatalogBehavior, "ZeratulGrimTaskQuestToken", "TokenId", c_playerAny)) < CatalogFieldValueGetAsInt(c_gameCatalogBehavior, "ZeratulGrimTaskQuestToken", "Max", c_playerAny)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_zeratul, "ZeratulGrimTaskModifyQuestToken", lv_zeratul);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZeratulGrimTaskProc_Init () {

    libGDHL_gt_HeroZeratulGrimTaskProc = TriggerCreate("libGDHL_gt_HeroZeratulGrimTaskProc_Func");

    TriggerEnable(libGDHL_gt_HeroZeratulGrimTaskProc, false);

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_HeroZeratulGrimTaskProc);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zeratul - Void Prison Apply Stasis Overlay

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZeratulVoidPrisonApplyStasisOverlay_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_prisoner;

    int lv_prisonerOwner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_prisoner = EventUnit();

    lv_prisonerOwner = UnitGetOwner(lv_prisoner);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitIsAlive(lv_prisoner) == true) && (UnitTestState(lv_prisoner, c_unitStateHallucination) == false) && (UnitTypeTestAttribute(UnitGetType(lv_prisoner), c_unitAttributeHeroic) == true) && (UnitHasBehavior2(lv_prisoner, "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(lv_prisonerOwner, libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZeratulVoidPrisonApplyStasisOverlay_Init () {

    libGDHL_gt_HeroZeratulVoidPrisonApplyStasisOverlay = TriggerCreate("libGDHL_gt_HeroZeratulVoidPrisonApplyStasisOverlay_Func");

    TriggerEnable(libGDHL_gt_HeroZeratulVoidPrisonApplyStasisOverlay, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroZeratulVoidPrisonApplyStasisOverlay, null, "VoidPrison", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Hero - Zeratul - Void Prison Remove Stasis Overlay

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_HeroZeratulVoidPrisonRemoveStasisOverlay_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_prisoner;

    int lv_prisonerOwner;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_prisoner = EventUnit();

    lv_prisonerOwner = UnitGetOwner(lv_prisoner);



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_prisoner, "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(lv_prisonerOwner, "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_HeroZeratulVoidPrisonRemoveStasisOverlay_Init () {

    libGDHL_gt_HeroZeratulVoidPrisonRemoveStasisOverlay = TriggerCreate("libGDHL_gt_HeroZeratulVoidPrisonRemoveStasisOverlay_Func");

    TriggerEnable(libGDHL_gt_HeroZeratulVoidPrisonRemoveStasisOverlay, false);

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_HeroZeratulVoidPrisonRemoveStasisOverlay, null, "VoidPrison", c_unitBehaviorChangeDeactivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Overdrive Update Mana And AP

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentOverdriveUpdateManaAndAP_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!(((EventUnitBehaviorChange() == c_unitBehaviorChangeActivate) || (EventUnitBehaviorChange() == c_unitBehaviorChangeDeactivate)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libGame_gf_UpdateHeroManaCosts(EventUnit());

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentOverdriveUpdateManaAndAP_Init () {

    libGDHL_gt_TalentOverdriveUpdateManaAndAP = TriggerCreate("libGDHL_gt_TalentOverdriveUpdateManaAndAP_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_TalentOverdriveUpdateManaAndAP, null, "BucketOverdrive", c_unitBehaviorChangeAny);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Focused Attack Cooldown

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_FocusedAttackCooldown_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_hero;

    fixed lv_currentCooldownAmount;

    fixed lv_newCooldownAmount;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_hero = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    if ((UnitHasBehavior2(lv_hero, "TalentBucketMarksmanCooldown") == true) && (UnitHasBehavior2(lv_hero, "TalentBucketMarksman") == false)) {

        lv_currentCooldownAmount = UnitBehaviorDuration(lv_hero, "TalentBucketMarksmanCooldown");

        lv_newCooldownAmount = (lv_currentCooldownAmount - 1.0);

        UnitBehaviorSetDurationRemaining(lv_hero, "TalentBucketMarksmanCooldown", MaxF(lv_newCooldownAmount, 0.1));

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_FocusedAttackCooldown_Init () {

    libGDHL_gt_FocusedAttackCooldown = TriggerCreate("libGDHL_gt_FocusedAttackCooldown_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_FocusedAttackCooldown, c_playerAny, "FocusedAttackCooldownReductionDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Ice Block - Overlay On

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentIceBlockOverlayOn_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitIsAlive(EventUnit()) == true) && (UnitTestState(EventUnit(), c_unitStateHallucination) == false) && (UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayAddItemForPlayer(EventPlayer(), libUIUI_ge_FullscreenOverlayPriorities_Stasis, "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentIceBlockOverlayOn_Init () {

    libGDHL_gt_TalentIceBlockOverlayOn = TriggerCreate("libGDHL_gt_TalentIceBlockOverlayOn_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_TalentIceBlockOverlayOn, null, "TalentBucketIceBlock", c_unitBehaviorChangeActivate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Ice Block - Overlay Off

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentIceBlockOverlayOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false)) {

        libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_StasisOverlay.StormCutscene", EventUnitBehavior());

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentIceBlockOverlayOff_Init () {

    libGDHL_gt_TalentIceBlockOverlayOff = TriggerCreate("libGDHL_gt_TalentIceBlockOverlayOff_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_TalentIceBlockOverlayOff, null, "TalentBucketIceBlock", c_unitBehaviorChangeDestroy);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Rewind Activate

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentRewindActivate_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itAbility;

    unit lv_hero;

    int lv_heroIndex;

    string lv_abilLink;

    string lv_cooldownLink;

    fixed lv_currentCooldownAmount;

    fixed lv_newCooldownAmount;

    string lv_chargeLink;

    fixed lv_currentChargeAmount;

    fixed lv_newChargeAmount;



    // Automatic Variable Declarations

    int auto17161144_ae;

    const int auto17161144_ai = 1;



    // Variable Initialization

    lv_cooldownLink = "";

    lv_chargeLink = "";



    // Actions

    if (!runActions) {

        return true;

    }



    lv_hero = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_heroIndex = libCore_gf_GetHeroIndexForUnitType(UnitGetType(lv_hero));

    auto17161144_ae = libGame_gv_players[lv_heroIndex].lv_heroData.lv_numberOfAbilities;

    lv_itAbility = 1;

    for ( ; ( (auto17161144_ai >= 0 && lv_itAbility <= auto17161144_ae) || (auto17161144_ai < 0 && lv_itAbility >= auto17161144_ae) ) ; lv_itAbility += auto17161144_ai ) {

        if ((libGame_gv_players[lv_heroIndex].lv_heroData.lv_abilities[lv_itAbility].lv_isAffectedByCooldownReduction == true) && (libGame_gv_players[lv_heroIndex].lv_heroData.lv_abilities[lv_itAbility].lv_isHeroic == false) && (libGame_gv_players[lv_heroIndex].lv_heroData.lv_abilities[lv_itAbility].lv_isTrait == false) && (libGame_gv_players[lv_heroIndex].lv_heroData.lv_abilities[lv_itAbility].lv_isMountReplacement == false)) {

            lv_abilLink = libGame_gv_players[lv_heroIndex].lv_heroData.lv_abilities[lv_itAbility].lv_ability;

            lv_cooldownLink = CatalogFieldValueGet(c_gameCatalogAbil, lv_abilLink, "Cost[" + IntToString(0) + "].Cooldown.Link", UnitGetOwner(lv_hero));

            UnitModifyCooldown(lv_hero, lv_cooldownLink, -60.0, c_cooldownOperationAdd);

            if ((libGame_gv_players[lv_heroIndex].lv_heroData.lv_abilities[lv_itAbility].lv_usesCharges == true)) {

                lv_chargeLink = CatalogFieldValueGet(c_gameCatalogAbil, lv_abilLink, "Cost[" + IntToString(0) + "].Charge.Link", UnitGetOwner(lv_hero));

                UnitAddChargeUsed(lv_hero, lv_chargeLink, -1.0);

            }



        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentRewindActivate_Init () {

    libGDHL_gt_TalentRewindActivate = TriggerCreate("libGDHL_gt_TalentRewindActivate_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_TalentRewindActivate, c_playerAny, "TalentRewindSet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Follow Through

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentFollowThrough_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_i;

    unit lv_hero;

    int lv_heroIndex;

    string lv_abilLink;



    // Automatic Variable Declarations

    const int auto98ECC35E_ae = libCore_gv_dataHeroesMaxAbilitiesPerHero;

    const int auto98ECC35E_ai = 1;



    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(EventUnit(), "TalentBucketFollowThroughCarryBehavior") == true))) {

            return false;

        }



        if (!((AbilityCommandGetAbility(AbilityCommand("BarbarianShotofFury", 0)) != AbilityCommandGetAbility(EventUnitAbility())))) {

            return false;

        }



        if (!((AbilityCommandGetAbility(AbilityCommand("BarbarianAncientSpear", 0)) != AbilityCommandGetAbility(EventUnitAbility())))) {

            return false;

        }



        if (!((AbilityCommandGetAbility(AbilityCommand("L90ETCPowerslide", 0)) != AbilityCommandGetAbility(EventUnitAbility())))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_hero = EventUnit();

    lv_heroIndex = libCore_gf_GetHeroIndexForUnitType(UnitGetType(lv_hero));

    lv_i = 1;

    for ( ; ( (auto98ECC35E_ai >= 0 && lv_i <= auto98ECC35E_ae) || (auto98ECC35E_ai < 0 && lv_i >= auto98ECC35E_ae) ) ; lv_i += auto98ECC35E_ai ) {

        lv_abilLink = libGame_gv_players[lv_heroIndex].lv_heroData.lv_abilities[lv_i].lv_ability;

        if ((lv_abilLink == AbilityCommandGetAbility(EventUnitAbility()))) {

            UnitBehaviorAdd(lv_hero, "TalentBucketFollowThrough", lv_hero, 1);

            break;

        }



    }

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentFollowThrough_Init () {

    libGDHL_gt_TalentFollowThrough = TriggerCreate("libGDHL_gt_TalentFollowThrough_Func");

    TriggerAddEventUnitAbility(libGDHL_gt_TalentFollowThrough, null, null, c_abilEffectStageFinish, false);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Gathering Power Takedowns

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentGatheringPowerTakedowns_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroParticipatedInTakedownKillingPlayer();

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;



    // Actions

    if (!runActions) {

        return true;

    }



    if (((libGame_gv_players[lv_player].lv_isDead == true) || (UnitHasBehavior2(lv_unit, "TalentGatheringPowerCarry") == false))) {

        return true;

    }



    if ((UnitIsAlive(lv_unit) == true)) {

        UnitBehaviorAdd(lv_unit, "TalentGatheringPowerStack", lv_unit, 1);

    }



    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentGatheringPowerTakedowns_Init () {

    libGDHL_gt_TalentGatheringPowerTakedowns = TriggerCreate("libGDHL_gt_TalentGatheringPowerTakedowns_Func");

    libGame_gf_HeroParticipatedInTakedown(libGDHL_gt_TalentGatheringPowerTakedowns);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Gathering Power Removal

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentGatheringPowerRemoval_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_killedHero;

    int lv_gatheringPowerStacks;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(libGame_gf_HeroKilledUnit(), "TalentGatheringPowerCarry") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_killedHero = libGame_gf_HeroKilledUnit();

    lv_gatheringPowerStacks = UnitBehaviorCount(lv_killedHero, "TalentGatheringPowerStack");

    lv_gatheringPowerStacks /= 2;

    UnitBehaviorRemove(lv_killedHero, "TalentGatheringPowerStack", c_unitBehaviorCountAll);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentGatheringPowerRemoval_Init () {

    libGDHL_gt_TalentGatheringPowerRemoval = TriggerCreate("libGDHL_gt_TalentGatheringPowerRemoval_Func");

    libGame_gf_HeroKilled(libGDHL_gt_TalentGatheringPowerRemoval);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Scouting Drone Self Revealer

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentScoutingDroneSelfRevealer_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitTarget)) >= 1))) {

            return false;

        }



        if (!((UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitTarget)) <= 12))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(EventPlayerEffectUsedUnit(c_effectUnitTarget), "ScoutingDroneApplySelfRevealer", EventPlayerEffectUsedUnit(c_effectUnitCaster));

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentScoutingDroneSelfRevealer_Init () {

    libGDHL_gt_TalentScoutingDroneSelfRevealer = TriggerCreate("libGDHL_gt_TalentScoutingDroneSelfRevealer_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_TalentScoutingDroneSelfRevealer, c_playerAny, "TalentScoutingDroneDummySet");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Apply XP To MULE

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentApplyXPToMULE_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_mULEUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_mULEUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    libGame_gf_UpdateScalingForUnit(lv_mULEUnit, libGame_gv_scalingTicks, 0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentApplyXPToMULE_Init () {

    libGDHL_gt_TalentApplyXPToMULE = TriggerCreate("libGDHL_gt_TalentApplyXPToMULE_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_TalentApplyXPToMULE, c_playerAny, "CalldownMULEApplyTimedLifeBehavior");

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Apply XP To Healing Ward

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentApplyXPToHealingWard_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_healingWardUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_healingWardUnit = EventUnit();

    libGame_gf_UpdateScalingForUnit(lv_healingWardUnit, libGame_gv_scalingTicks, 0);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentApplyXPToHealingWard_Init () {

    libGDHL_gt_TalentApplyXPToHealingWard = TriggerCreate("libGDHL_gt_TalentApplyXPToHealingWard_Func");

    TriggerAddEventUnitBehaviorChange(libGDHL_gt_TalentApplyXPToHealingWard, null, "HealingWardTimedLife", c_unitBehaviorChangeCreate);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Bribe - Add Stacks on Cooldown Reset

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentBribeAddStacksonCooldownReset_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_playerHero;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_SpecialCaseTalentCooldownResetPlayer();

    lv_playerHero = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!(((UnitHasBehavior2(libGame_gv_players[lv_player].lv_heroUnit, "TalentBribeTalentCarry") == true) || (PlayerHasTalent(libGame_gf_SpecialCaseTalentCooldownResetPlayer(), "BrightwingPixieCharm") == true)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_playerHero, "TalentBribeAdd100Token", lv_playerHero);

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentBribeAddStacksonCooldownReset_Init () {

    libGDHL_gt_TalentBribeAddStacksonCooldownReset = TriggerCreate("libGDHL_gt_TalentBribeAddStacksonCooldownReset_Func");

    libGame_gf_SpecialCaseTalentCooldownReset(libGDHL_gt_TalentBribeAddStacksonCooldownReset);

}



//--------------------------------------------------------------------------------------------------

// Trigger: Talent - Bribe Camp Respawn Timer Modification

//--------------------------------------------------------------------------------------------------

bool libGDHL_gt_TalentBribeCampRespawnTimerModification_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_campIndex;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_campIndex = libMapM_gf_JungleGetJungleCampForUnit(EventPlayerEffectUsedUnit(c_effectUnitTarget));



    // Actions

    if (!runActions) {

        return true;

    }



    libMapM_gv_jungleCreepCamps[lv_campIndex].lv_defenderDefendersBribedCount += 1;

    return true;

}



//--------------------------------------------------------------------------------------------------

void libGDHL_gt_TalentBribeCampRespawnTimerModification_Init () {

    libGDHL_gt_TalentBribeCampRespawnTimerModification = TriggerCreate("libGDHL_gt_TalentBribeCampRespawnTimerModification_Func");

    TriggerAddEventPlayerEffectUsed(libGDHL_gt_TalentBribeCampRespawnTimerModification, c_playerAny, "TalentBribeTimeReductionDummy");

}



void libGDHL_InitTriggers () {

    libGDHL_gt_IncludeGameDataHelper_Init();

    libGDHL_gt_SummonedUnitAPApplication_Init();

    libGDHL_gt_SummonedUnitImposingPresenceApplication_Init();

    libGDHL_gt_SummonedUnitDamageDealtEnumTargetCasterHandled_Init();

    libGDHL_gt_HeroGenericCameraShakeLightTarget_Init();

    libGDHL_gt_HeroGenericCameraShakeMediumTarget_Init();

    libGDHL_gt_HeroGenericCameraShakeHeavyTarget_Init();

    libGDHL_gt_HeroGenericCameraShakeAutoCaster_Init();

    libGDHL_gt_HeroGenericCameraShakeLightCaster_Init();

    libGDHL_gt_HeroGenericCameraShakeMediumCaster_Init();

    libGDHL_gt_HeroGenericCameraShakeHeavyCaster_Init();

    libGDHL_gt_HeroGenericSpeedRibbonController_Init();

    libGDHL_gt_HeroGenericSlowFXController_Init();

    libGDHL_gt_HeroGenericRevealCloakedPeriodicDamageSource_Init();

    libGDHL_gt_HeroGenericRevealCloakedOneOffDamageSource_Init();

    libGDHL_gt_HeroGenericSuperStealthActivateDeactivate_Init();

    libGDHL_gt_HeroAllHeroRespec_Init();

    libGDHL_gt_HearthstoneTeleport_Init();

    libGDHL_gt_HearthstoneChannelingBuffOn_Init();

    libGDHL_gt_HearthstoneChannelingBuffOff_Init();

    libGDHL_gt_HearthstoneChannelingBuffCanceled_Init();

    libGDHL_gt_HeroicSummonsUnitGainsHeroicSummonBehavior_Init();

    libGDHL_gt_HeroAbathurDeepTunnelPing_Init();

    libGDHL_gt_HeroAbathurAbathurExitsTransport_Init();

    libGDHL_gt_HeroAbathurSymbiote_Init();

    libGDHL_gt_HeroAbathurCarapaceRegenerativeMicrobes_Init();

    libGDHL_gt_HeroAbathurSymbioteScreenEffect_Init();

    libGDHL_gt_HeroAbathurStabFacer_Init();

    libGDHL_gt_HeroAbathurVolatileMutationUltimateEvolution_Init();

    libGDHL_gt_HeroAbathurUltimateEvolutionStartControl_Init();

    libGDHL_gt_HeroAbathurUltimateEvolutionStopControl_Init();

    libGDHL_gt_HeroAbathurUltimateEvolutionGameEnd_Init();

    libGDHL_gt_HeroAbathurUltimateEvolutionUnitDead_Init();

    libGDHL_gt_HeroAbathurLocustSpawned_Init();

    libGDHL_gt_HeroAbathurLocustNestSetFacing_Init();

    libGDHL_gt_HeroAbathurLocustNestCast_Init();

    libGDHL_gt_HeroAbathurSymbioteHivemindSingleTarget_Init();

    libGDHL_gt_HeroAbathurSymbioteHivemindStab_Init();

    libGDHL_gt_HeroAbathurMonstrosityDeepTunnelPing_Init();

    libGDHL_gt_HeroAbathurMonstrosityAddMinionKillStacks_Init();

    libGDHL_gt_HeroAbathurMonstrositySymbioteendHooktoAI_Init();

    libGDHL_gt_HeroAbathurMonstrosityDeselectedHooktoAI_Init();

    libGDHL_gt_HeroAbathurMonstrosityUnhookAI_Init();

    libGDHL_gt_HeroAbathurMonstrosityKillInitialTarget_Init();

    libGDHL_gt_HeroAbathurMonstrosityAddSymbioteStacks_Init();

    libGDHL_gt_HeroAbathurSymbiotedMonstrositySymbioted_Init();

    libGDHL_gt_HeroAbathurSymbioteMinimapIcon_Init();

    libGDHL_gt_HeroArtanisProtectorofAiurHeroTakedownProc_Init();

    libGDHL_gt_HeroArtanisBladeDashPhasePrismCast_Init();

    libGDHL_gt_HeroArtanisTwinBladesZealotChargeTargeting_Init();

    libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamSetTarget_Init();

    libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamUnitCreated_Init();

    libGDHL_gt_HeroArtanisSpearofAdunPurifierBeamRedirectTarget2ElectricBoogaloo_Init();

    libGDHL_gt_HeroArthasAntiMagicShellHeal_Init();

    libGDHL_gt_HeroArthasArmyoftheDeadLegionofNorthrendTalentSpawn_Init();

    libGDHL_gt_HeroArthasArmyoftheDeadNPCDeathProc_Init();

    libGDHL_gt_HeroArthasArmyoftheDeadTakedownDeathProc_Init();

    libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverDeath_Init();

    libGDHL_gt_HeroArthasArmyoftheDeadMinionAITakeoverTransport_Init();

    libGDHL_gt_HeroArthasArmyoftheDeadPortGhouls_Init();

    libGDHL_gt_HeroArthasArmyoftheDeadGhoulSpawned_Init();

    libGDHL_gt_HeroArthasDeathPactTalentTakedownTokenProc_Init();

    libGDHL_gt_HeroAnubarakBurrowChargeSuppressCollision_Init();

    libGDHL_gt_HeroAnubarakBurrowChargeMaxRange_Init();

    libGDHL_gt_HeroAnubarakBurrowChargeCancel_Init();

    libGDHL_gt_HeroAnubarakBurrowChargeUnpathableCheck_Init();

    libGDHL_gt_HeroAnubarakBeetleJuicedMasterySpecialDeathStateProc_Init();

    libGDHL_gt_HeroAnubarakCocoonUnitHit_Init();

    libGDHL_gt_HeroAnubarakCocoonSpawned_Init();

    libGDHL_gt_HeroAnubarakCocoonSoundEffect_Init();

    libGDHL_gt_HeroAnubarakCocoonOn_Init();

    libGDHL_gt_HeroAnubarakCocoonOff_Init();

    libGDHL_gt_HeroAzmodanSpawned_Init();

    libGDHL_gt_HeroAzmodanDemonicInvasionAddUnitstoUnitGroup_Init();

    libGDHL_gt_HeroAzmodanDemonicInvasionUnpathableLocation_Init();

    libGDHL_gt_HeroAzmodanDemonicInvasionRemoveExistingDemons_Init();

    libGDHL_gt_HeroAzmodanAnnihilationStackScoreValues_Init();

    libGDHL_gt_HeroAzmodanAnnihilationStackScoreValuesReset_Init();

    libGDHL_gt_HeroAzmodanCustomKillVO_Init();

    libGDHL_gt_HeroAzmodanGlobeTalentPicked_Init();

    libGDHL_gt_HeroAzmodanDemonCreate_Init();

    libGDHL_gt_HeroAzmodanDemonGeneralBirthFacing_Init();

    libGDHL_gt_HeroSonyaWrathoftheBerserkerBuffDurationExtension_Init();

    libGDHL_gt_HeroBarbarianAncientSpearLaunchBarbarianUsed_Init();

    libGDHL_gt_HeroBarbarianLeap_Init();

    libGDHL_gt_HeroBarbarianLeapRefactor_Init();

    libGDHL_gt_HeroBarbarianLeapArreatCraterForcedDestruction_Init();

    libGDHL_gt_HeroButcherRuthlessOnslaughtTargetAudioTelegraph_Init();

    libGDHL_gt_HeroButcherRuthlessOnslaughtTravelValidation_Init();

    libGDHL_gt_HeroButcherRuthlessOnslaughtCast_Init();

    libGDHL_gt_HeroButcherRuthlessOnslaughtCancelAnimationHook_Init();

    libGDHL_gt_HeroButcherButcherParticipatedInTakedown_Init();

    libGDHL_gt_HeroButcherFreshMeatVehiclePickup_Init();

    libGDHL_gt_HeroButcherFreshMeatVehicleOccupy_Init();

    libGDHL_gt_HeroButcherFreshMeatUpdateStackCounter_Init();

    libGDHL_gt_HeroChenWanderingKegActivate_Init();

    libGDHL_gt_HeroChenWanderingKegDeactivate_Init();

    libGDHL_gt_HeroChenStormEarthFireTimedLifeIncrease_Init();

    libGDHL_gt_HeroChenStormEarthAndFireStasis_Init();

    libGDHL_gt_HeroChenStormEarthAndFireTimestop_Init();

    libGDHL_gt_HeroChenStormEarthAndFireStasisCleanup_Init();

    libGDHL_gt_HeroChenStormEarthFireActivatedNew_Init();

    libGDHL_gt_HeroChenElementDies_Init();

    libGDHL_gt_HeroChenElementFatalDamageResponse_Init();

    libGDHL_gt_HeroChenExpirationCleanup_Init();

    libGDHL_gt_HeroChenStormEarthFireEarthAbility_Init();

    libGDHL_gt_HeroChenSwiftReflexesTalentMissed_Init();

    libGDHL_gt_HeroChenFreshestIngredientsTalentProc_Init();

    libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModification_Init();

    libGDHL_gt_HeroChenStaggerGiftOfTheOxTalentDamageModificationReset_Init();

    libGDHL_gt_HeroChenStaggerDamageResponse_Init();

    libGDHL_gt_HeroChenStaggerDisplayUpdate_Init();

    libGDHL_gt_CrusaderFallingSwordTeleport_Init();

    libGDHL_gt_CrusaderFallingSwordFinalSet_Init();

    libGDHL_gt_CrusaderFallingSwordSuppressCollision_Init();

    libGDHL_gt_HeroDiabloOverpowerSetFacing_Init();

    libGDHL_gt_HeroDiabloInfernoBreathCast_Init();

    libGDHL_gt_HeroDiabloInfernoBreathEnd_Init();

    libGDHL_gt_HeroDiabloEternalSoulstoneRessurection_Init();

    libGDHL_gt_HeroDiabloResetEternalSoulstoneRessurection_Init();

    libGDHL_gt_HeroDiabloBlackSoulstoneStackTalentPicked_Init();

    libGDHL_gt_HeroDemonHunterVaultDamageBuff_Init();

    libGDHL_gt_HeroDemonHunterManticoreProc_Init();

    libGDHL_gt_HeroDryadLeapingStrikeSetTargetVariable_Init();

    libGDHL_gt_HeroDryadLeapingStrikeFindLandingLocation_Init();

    libGDHL_gt_HeroDryadLeapingStrikeCreateAttackPersistent_Init();

    libGDHL_gt_HeroDryadNaturesToxinHandleApplication_Init();

    libGDHL_gt_HeroDryadWispDividingWispDuration_Init();

    libGDHL_gt_HeroDryadDanceCancelOrders_Init();

    libGDHL_gt_HeroDryadAbolishMagicBehaviorActivate_Init();

    libGDHL_gt_HeroDryadAbolishMagicBehaviorDeactivate_Init();

    libGDHL_gt_HeroDryadAbolishMagicCCRecognition_Init();

    libGDHL_gt_HeroDryadActivateCameraSettings_Init();

    libGDHL_gt_HeroDryadDeactivateCameraSettings_Init();

    libGDHL_gt_HeroDryadActivateCameraforSymbiote_Init();

    libGDHL_gt_HeroDryadLossofControlCamera_Init();

    libGDHL_gt_HeroGreymaneGofortheThroatSpecialDeathProcs_Init();

    libGDHL_gt_HeroGreymaneActorSoundSwaps_Init();

    libGDHL_gt_HeroGreymaneTalentWizenedDuelistDeath_Init();

    libGDHL_gt_HeroFaerieDragonPhaseShiftPing_Init();

    libGDHL_gt_HeroFaerieDragonPhaseShiftCamera_Init();

    libGDHL_gt_HeroFaerieDragonPixieCharmChargeCountProc_Init();

    libGDHL_gt_HeroFalstadDishonorableDischargeHeroKillRefreshCooldown_Init();

    libGDHL_gt_HeroFalstadFlightPing_Init();

    libGDHL_gt_HeroFalstadFlightCameraHeightRestore_Init();

    libGDHL_gt_HeroFalstadWingmanVariables_Init();

    libGDHL_gt_HeroIllidanApplyFotBCooldownonInventoryUse_Init();

    libGDHL_gt_HeroIllidanMetamorphosisAvatarApplyHealthBuff_Init();

    libGDHL_gt_HeroIllidanTheHuntNowhereToHideTalentActivate_Init();

    libGDHL_gt_HeroIllidanBladesOfAzzinothAddCharge_Init();

    libGDHL_gt_HeroIllidanUnendingHatredHeroTakedown_Init();

    libGDHL_gt_HeroIllidanUnendingHatredNPCKill_Init();

    libGDHL_gt_HeroIllidanMetamorphisisUnendingHatredHearthstoneUsed_Init();

    libGDHL_gt_HeroJainaWaterElementalCreated_Init();

    libGDHL_gt_HeroJainaWaterElementalCommand_Init();

    libGDHL_gt_HeroJainaWaterElementalSummonedUnitSpecialCaseInteraction_Init();

    libGDHL_gt_HeroJainaFrostboltWintermuteCast_Init();

    libGDHL_gt_HeroJainaConeofColdWintermuteCast_Init();

    libGDHL_gt_HeroJainaBlizzardWintermuteCast_Init();

    libGDHL_gt_HeroJainaWaterElementalVehicleInitial_Init();

    libGDHL_gt_HeroJainaFrostbiteIceblockItem_Init();

    libGDHL_gt_HeroJainaFrostbiteQuestReset_Init();

    libGDHL_gt_HeroJainaChilledDamageResponse_Init();

    libGDHL_gt_HeroJainaFrostbittenCompletionDummy_Init();

    libGDHL_gt_HeroJainaImprovedIceBlockOverlayOn_Init();

    libGDHL_gt_HeroJainaImprovedIceBlockOverlayOff_Init();

    libGDHL_gt_HeroKaelthasPhoenixSpawnSelection_Init();

    libGDHL_gt_HeroKaelthasTwinSpheresTalentPickCooldownReset_Init();

    libGDHL_gt_HeroKaelthasPyroblastMissileCreated_Init();

    libGDHL_gt_HeroKerriganUltraliskSummonUltralisk_Init();

    libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbility_Init();

    libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilitySummonedUnitSpecialCaseInteraction_Init();

    libGDHL_gt_HeroKerriganUltraliskUpdateOrdersOnIssueOrderAbilityPoint_Init();

    libGDHL_gt_HeroKerriganUltraliskDies_Init();

    libGDHL_gt_HeroKerriganImpalingBladesKineticFulminationTokenTransfer_Init();

    libGDHL_gt_HeroETCProgRockTalentRegenGlobeProc_Init();

    libGDHL_gt_HeroL90ETCPowerslideTargetCheck_Init();

    libGDHL_gt_HeroL90ETCStageDiveTeleportUnit_Init();

    libGDHL_gt_HeroL90ETCStageDiveFinalSet_Init();

    libGDHL_gt_HeroL90ETCMoshPitOn_Init();

    libGDHL_gt_HeroLiLiCloudSerpentTurretSerpentSummonandSimplifiedAI_Init();

    libGDHL_gt_HeroLiLiCloudSerpentSummonandSimplifiedAI_Init();

    libGDHL_gt_HeroLiLiCloudSerpentAttackMimic_Init();

    libGDHL_gt_LeoricSpawn_Init();

    libGDHL_gt_HeroLeoricEntombForcedDestruction_Init();

    libGDHL_gt_HeroLeoricWraithWalkDevouringMawSpecialCase_Init();

    libGDHL_gt_HeroLeoricWraithWalkCast_Init();

    libGDHL_gt_LeoricUndyingStart_Init();

    libGDHL_gt_LeoricUndyingEnd_Init();

    libGDHL_gt_LeoricSwappedDuringUndying_Init();

    libGDHL_gt_LeoricUndyingHealingDeathTimerReduction_Init();

    libGDHL_gt_LeoricUIInitialize_Init();

    libGDHL_gt_LeoricUICleanUpUIForHeroSwap_Init();

    libGDHL_gt_LeoricFealtyUntoDeathEnemyNPCProcListener_Init();

    libGDHL_gt_LeoricFealtyUntoDeathAlliedNPCProcListener_Init();

    libGDHL_gt_HeroLeoricOsseinRenewalTalentGlobeProc_Init();

    libGDHL_gt_HeroLeoricShroudOfTheDeadKingFloatingText_Init();

    libGDHL_gt_HeroLostVikingsVikingBriberyNPCProcListener_Init();

    libGDHL_gt_HeroLostVikingsVikingBriberyUsed_Init();

    libGDHL_gt_HeroLostVikingsVikingBriberyScoreReset_Init();

    libGDHL_gt_HeroLostVikingsVikingBriberyAddStacksonCooldownReset_Init();

    libGDHL_gt_HeroLostVikingsVikingHoard_Init();

    libGDHL_gt_HeroLostVikingsSpinToWin_Init();

    libGDHL_gt_HeroLostVikingsOlafTheStout_Init();

    libGDHL_gt_HeroLostVikingsRespawnTimerExpires_Init();

    libGDHL_gt_HeroLostVikingsSpawn_Init();

    libGDHL_gt_HeroLostVikingsDebugSwap_Init();

    libGDHL_gt_HeroLostVikingsVikingDies_Init();

    libGDHL_gt_HeroLostVikingsVikingRemoved_Init();

    libGDHL_gt_HeroLostVikingsUnderAttackPing_Init();

    libGDHL_gt_HeroLostVikingsUnderAttackUI_Init();

    libGDHL_gt_HeroLostVikingsXPGain_Init();

    libGDHL_gt_HeroLostVikingsBehaviorTalentGained_Init();

    libGDHL_gt_HeroLostVikingsUnitControllerUpdate_Init();

    libGDHL_gt_HeroLostVikingsMoonwellRedistribution_Init();

    libGDHL_gt_HeroLostVikingsVikingEntersStasis_Init();

    libGDHL_gt_HeroLostVikingsVikingsLeavesStasis_Init();

    libGDHL_gt_HeroLostVikingsUnitSelected_Init();

    libGDHL_gt_HeroLostVikingsUnitDeselected_Init();

    libGDHL_gt_HeroLostVikingsUseTransport_Init();

    libGDHL_gt_HeroLostVikingsRallyCast_Init();

    libGDHL_gt_HeroLostVikingsRallyFinishCancel_Init();

    libGDHL_gt_HeroLostVikingsRallySounds_Init();

    libGDHL_gt_HeroLostVikingsPlayAgainComplete_Init();

    libGDHL_gt_HeroLostVikingsPlayAgainForceGhostFacingPlacement_Init();

    libGDHL_gt_HeroLostVikingsCheckpointTimerPauseinTimeStop_Init();

    libGDHL_gt_HeroLostVikingsCheckpointReachedTimerCountdown_Init();

    libGDHL_gt_HeroLostVikingsCheckpointReachTimerExpires_Init();

    libGDHL_gt_HeroLostVikingsLongboatRaidSelection_Init();

    libGDHL_gt_HeroLostVikingsLongboatRaidEndsResetControlGroups_Init();

    libGDHL_gt_HeroLostVikingsLongboatRaidExpiration_Init();

    libGDHL_gt_HeroLostVikingsHideVikingsOn_Init();

    libGDHL_gt_HeroLostVikingsAbathurClone_Init();

    libGDHL_gt_HeroLostVikingsCloneLongboatRaidSelection_Init();

    libGDHL_gt_HeroLostVikingsCloneLongboatRaidExpiration_Init();

    libGDHL_gt_LostVikingsUIInitialize_Init();

    libGDHL_gt_LostVikingsUIUpdate_Init();

    libGDHL_gt_LostVikingsUICleanUpUIForDebugHeroSwap_Init();

    libGDHL_gt_LostVikingsConsoleUnitStatusBarsChannelBehaviorAdded_Init();

    libGDHL_gt_HeroMalfurionTwilightDreamSilenceTarget_Init();

    libGDHL_gt_HeroMalfurionTwilightDreamSilenceEnd_Init();

    libGDHL_gt_HeroMalfurionInnervateCDR_Init();

    libGDHL_gt_HeroMalfurionTenaciousRootsProc_Init();

    libGDHL_gt_HealingBeamUIInitialize_Init();

    libGDHL_gt_MedicUIInitialize_Init();

    libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOn_Init();

    libGDHL_gt_HeroMedicStimDroneFullscreenOverlayOff_Init();

    libGDHL_gt_HeroMedicMedivacDropshipCreated_Init();

    libGDHL_gt_HeroMedicMedivacDropshipEnRouteOrders_Init();

    libGDHL_gt_HeroMedicMedivacDropshipDeathCleanup_Init();

    libGDHL_gt_HeroMedicMedivacDropshipLoadEvent_Init();

    libGDHL_gt_HeroMedicMedivacDropshipUnloadEvent_Init();

    libGDHL_gt_HeroMedicMedivacDropshipRejoinHideMedivacUI_Init();

    libGDHL_gt_HeroMedicMedivacDropshipOverlay_Init();

    libGDHL_gt_HeroMedicMedivacDropshipCountdownSound_Init();

    libGDHL_gt_HeroMedicMedivacBeingBoarded_Init();

    libGDHL_gt_HeroMedicMedivacGameOverHide_Init();

    libGDHL_gt_HeroMedicHealingBeamTargetActions_Init();

    libGDHL_gt_HeroMedicHealingBeamUIReset_Init();

    libGDHL_gt_HeroMedicHearthCleanup_Init();

    libGDHL_gt_HeroMedicHealingBeamAllyRangeVisibility_Init();

    libGDHL_gt_HeroMedicSafeguardVanadiumPlatingTalentProc_Init();

    libGDHL_gt_HeroMonkSixthSenseProc_Init();

    libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOff_Init();

    libGDHL_gt_HeroMonkDeadlyReachPlaystyleUpdateOn_Init();

    libGDHL_gt_HeroMonkDivinePalmSetLife_Init();

    libGDHL_gt_HeroMonkDivinePalmOverlayOn_Init();

    libGDHL_gt_HeroMonkDivinePalmOverlayOff_Init();

    libGDHL_gt_HeroMonkSevenSidedStrikeTakeFacing_Init();

    libGDHL_gt_HeroMonkSevenSidedStrikeFinishSetFacing_Init();

    libGDHL_gt_HeroMonkAbathurUltimateEvolutionClone_Init();

    libGDHL_gt_HeroMuradinHaymaker_Init();

    libGDHL_gt_HeroMuradinAvatarApplyHealthBuff_Init();

    libGDHL_gt_HeroMuradinHaymakerGrandSlamTalentProc_Init();

    libGDHL_gt_HeroMuradinItsHammerTimeOnDeathProc_Init();

    libGDHL_gt_HeroMuradinFreePiercingStormbolt_Init();

    libGDHL_gt_HeroMuradinResetFreePiercingStormbolt_Init();

    libGDHL_gt_MurkyUIInitialize_Init();

    libGDHL_gt_HeroMurkyMurkyEggDies_Init();

    libGDHL_gt_HeroMurkyMurkyDies_Init();

    libGDHL_gt_HeroMurkyReviveWhileEggIsAlive_Init();

    libGDHL_gt_HeroMurkyCreateEggOnSpawn_Init();

    libGDHL_gt_HeroMurkyEggSpawnsChangeDeathSound_Init();

    libGDHL_gt_HeroMurkyCleanUpEggUIForDebugHeroSwap_Init();

    libGDHL_gt_HeroMurkyAFishyDealVariables_Init();

    libGDHL_gt_HeroMurkyAFishyDealChargeCountProc_Init();

    libGDHL_gt_HeroMurkyFishEyeDynamicApplication_Init();

    libGDHL_gt_HeroMurkyRespawnEggCreated_Init();

    libGDHL_gt_HeroNecromancerSkeletonMasteryProc_Init();

    libGDHL_gt_HeroNecromancerSkeletonMasterySpawned_Init();

    libGDHL_gt_HeroNecromancerSkeletonMasteryMaxCountProc_Init();

    libGDHL_gt_HeroNecromancerTrackMortalWoundsDamageReduction_Init();

    libGDHL_gt_HeroNecromancerMortalWoundsDebuffController_Init();

    libGDHL_gt_HeroNovaCovertMissionTakedown_Init();

    libGDHL_gt_HeroNovaCovertMissionVariables_Init();

    libGDHL_gt_HeroNovaTripleTapAbilityUsed_Init();

    libGDHL_gt_HeroNovaTripleTapMissiles_Init();

    libGDHL_gt_HeroNovaTripleTapMissileCleanup_Init();

    libGDHL_gt_HeroNovaHoloCloneSpawned_Init();

    libGDHL_gt_HeroNovaHoloCloneDamageDuplication_Init();

    libGDHL_gt_HeroNovaAntiArmorShellsAttackCooldownController_Init();

    libGDHL_gt_HeroRaynorRaynorsBansheeFlyIn_Init();

    libGDHL_gt_HeroRaynorRaynorsBansheeFlyOut_Init();

    libGDHL_gt_HeroRaynorBansheesCommand_Init();

    libGDHL_gt_HeroRaynorBansheeTeleport_Init();

    libGDHL_gt_HeroRaynorRemoveBansheeOnEnterVehicle_Init();

    libGDHL_gt_HeroRaynorACardToPlayTalentGained_Init();

    libGDHL_gt_HeroRaynorACardToPlayHeroTakedown_Init();

    libGDHL_gt_HeroRaynorExecuteOrderDeathTimerMod_Init();

    libGDHL_gt_HeroRaynorExecuteOrderHyperionActivate_Init();

    libGDHL_gt_HeroRehgarTidalWavesModifyCooldown_Init();

    libGDHL_gt_HeroRehgarEarthlivingEnchantHotApply_Init();

    libGDHL_gt_HeroRehgarTotemicProjectionTalentSaveTotem_Init();

    libGDHL_gt_HeroRehgarTotemicProjectionTalentMoveTotem_Init();

    libGDHL_gt_HeroRehgarTotemicProjectionResetOnRewindUse_Init();

    libGDHL_gt_HeroRehgarGhostWolfAfterPortToTown_Init();

    libGDHL_gt_HeroRehgarGhostWolfMountingSpecialCase_Init();

    libGDHL_gt_HeroRehgarElectricChargeAddLeech_Init();

    libGDHL_gt_HeroRehgarElectricChargeLeechProc_Init();

    libGDHL_gt_RexxarUIInitialize_Init();

    libGDHL_gt_RexxarUICleanupForHeroSwap_Init();

    libGDHL_gt_HeroRexxarCleanUpForAbathurUltimateEvolutionClone_Init();

    libGDHL_gt_HeroRexxarUnleashtheBoarsCast_Init();

    libGDHL_gt_HeroRexxarMishaClearPursuitTargetonUnitDeath_Init();

    libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromMishaFocus_Init();

    libGDHL_gt_HeroRexxarMishaClearPursuitTargetFromMishaFollow_Init();

    libGDHL_gt_HeroRexxarMishaSetPursuitTargetFromAttacks_Init();

    libGDHL_gt_HeroRexxarMishaFocusUsed_Init();

    libGDHL_gt_HeroRexxarMishaGainsMapMechanicStack_Init();

    libGDHL_gt_HeroRexxarMishaChargeDisable_Init();

    libGDHL_gt_HeroRexxarMishaMendPetDisable_Init();

    libGDHL_gt_HeroRexxarMishaSpawn_Init();

    libGDHL_gt_HeroRexxarMishaDance_Init();

    libGDHL_gt_HeroRexxarRexxarDies_Init();

    libGDHL_gt_HeroRexxarRexxarLosesMapMechanicStacks_Init();

    libGDHL_gt_HeroRexxarRemoveMisha_Init();

    libGDHL_gt_HeroRexxarRexxarStasisStartIncludesFeignDeath_Init();

    libGDHL_gt_HeroRexxarRexxarStasisEndIncludedFeignDeath_Init();

    libGDHL_gt_HeroRexxarMishaDies_Init();

    libGDHL_gt_HeroRexxarDeselectMishaOnVehicleEnter_Init();

    libGDHL_gt_HeroRexxarSelectMishaOnVehicleExit_Init();

    libGDHL_gt_HeroRexxarGorgeEnd_Init();

    libGDHL_gt_HeroRexxarMishaTeleport_Init();

    libGDHL_gt_HeroRexxarMishaUnderworldGateUsed_Init();

    libGDHL_gt_HeroRexxarMishaVehicleUsed_Init();

    libGDHL_gt_HeroRexxarMishaVehicleDone_Init();

    libGDHL_gt_HeroRexxarStuffMishaIntoTransport_Init();

    libGDHL_gt_HeroRexxarKickMishaOutOfTransport_Init();

    libGDHL_gt_HeroRexxarMishaMountedBehaviorDisabled_Init();

    libGDHL_gt_HeroRexxarAliveMishaGrizzledFortitude_Init();

    libGDHL_gt_HeroRexxarAliveMishaEasyPrey_Init();

    libGDHL_gt_HeroRexxarAliveMishaWildfireBear_Init();

    libGDHL_gt_HeroRexxarAliveMishaAnimalHusbandry_Init();

    libGDHL_gt_HeroRexxarAliveMishaDireBeast_Init();

    libGDHL_gt_HeroRexxarAliveMishaPrimalIntimidation_Init();

    libGDHL_gt_HeroRexxarAliveMishaHunterGatherer_Init();

    libGDHL_gt_HeroRexxarHunterGathererController_Init();

    libGDHL_gt_HeroRexxarThrilloftheHuntProc_Init();

    libGDHL_gt_HeroRexxarHardenedSkin_Init();

    libGDHL_gt_HeroRexxarBestialWrathSpiritBondBearNecessitiesHealProc_Init();

    libGDHL_gt_HeroRexxarChargeCast_Init();

    libGDHL_gt_HeroRexxarFeignDeathOverlayOn_Init();

    libGDHL_gt_HeroRexxarFeignDeathOverlayOff_Init();

    libGDHL_gt_HeroSgtHammerCompleteHearthstone_Init();

    libGDHL_gt_HeroSgtHammerSiegeModeUpdate_Init();

    libGDHL_gt_HeroSgtHammerBluntForceGunPrepStart_Init();

    libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculation_Init();

    libGDHL_gt_HeroSgtHammerBluntForceGunTargetCalculationViaEffect_Init();

    libGDHL_gt_HeroSgtHammerBluntForceGunCheckForLocation_Init();

    libGDHL_gt_HeroSgtHammerBluntForceGunApplyOrbitalScan_Init();

    libGDHL_gt_HeroSgtHammerConcussiveBlastCancel_Init();

    libGDHL_gt_HeroSgtHammerConcussiveBlastForcedDestruction_Init();

    libGDHL_gt_HeroSgtHammerMaelstromRoundsAddCharge_Init();

    libGDHL_gt_HeroSgtHammerHearthstoneUsed_Init();

    libGDHL_gt_HeroStitchesGiftFromTheEmbalmerDeathTimerReduction_Init();

    libGDHL_gt_HeroStitchesHookHookVision_Init();

    libGDHL_gt_HeroStitchesHookLaunchTargetUsed_Init();

    libGDHL_gt_HeroStitchesGorgeDecreases_Init();

    libGDHL_gt_HeroStitchesGorgeActivate_Init();

    libGDHL_gt_HeroStitchesGorgeOff_Init();

    libGDHL_gt_HeroStitchesFreeFishingHookTalent_Init();

    libGDHL_gt_HeroStitchesResetFreeFishingHookTalent_Init();

    libGDHL_gt_HeroSylvanasMindControlTargetSelect_Init();

    libGDHL_gt_HeroSylvanasMovementCommandForwarding_Init();

    libGDHL_gt_HeroSylvanasDarkLadysCallTalentApplyAllyVisionSuppression_Init();

    libGDHL_gt_HeroSylvanasDarkLadysCallTalentResetAllyVisionSuppression_Init();

    libGDHL_gt_HeroSylvanasMindControlCameraLock_Init();

    libGDHL_gt_HeroSylvanasWailingArrowSilenceTarget_Init();

    libGDHL_gt_HeroSylvanasWailingArrowDeafeningBlastSilenceTarget_Init();

    libGDHL_gt_HeroSylvanasWailingArrowSilenceEnd_Init();

    libGDHL_gt_HeroSylvanasWitheringFireHeroKillAddCharge_Init();

    libGDHL_gt_HeroSylvanasPossessionRewire_Init();

    libGDHL_gt_HeroSylvanasPossessionCatapultMinionModifyChargeCount_Init();

    libGDHL_gt_HeroTassadarUpdateDistortionBeamPeriod_Init();

    libGDHL_gt_HeroTassadarForceWallForcedDestruction_Init();

    libGDHL_gt_HeroTassadarShockRayVision_Init();

    libGDHL_gt_ThrallUIInitialize_Init();

    libGDHL_gt_ThrallShowFrostwolfResilienceUI_Init();

    libGDHL_gt_ThrallGetsStackOfFrostwolfResilience_Init();

    libGDHL_gt_ThrallUICleanUpUIForDebugHeroSwap_Init();

    libGDHL_gt_ThrallUICleanUpUIForAbathurUltimateEvolutionClone_Init();

    libGDHL_gt_ThrallDies_Init();

    libGDHL_gt_HeroThrallAncestralWrathHealingDummyUpdate_Init();

    libGDHL_gt_HeroThrallAncestralWrathChargeCountProc_Init();

    libGDHL_gt_HeroThrallEarthquakeEarthenShieldMasteryShieldApplication_Init();

    libGDHL_gt_HeroThrallWorldBreakerForcedDestruction_Init();

    libGDHL_gt_HeroTinkerFocusTurretsSetTarget_Init();

    libGDHL_gt_HeroTychusRelentlessSoldierTalentProc_Init();

    libGDHL_gt_HeroTychusMasterAssassinHeroTakedownProc_Init();

    libGDHL_gt_HeroTychusThatsTheStuffOn_Init();

    libGDHL_gt_HeroTychusThatsTheStuffDamageTracker_Init();

    libGDHL_gt_HeroTychusThatsTheStuffHealPreviewCatalog_Init();

    libGDHL_gt_HeroTychusThatsTheStuffOff_Init();

    libGDHL_gt_HeroTychusUpdateOrdersOnIssueOrderAbility_Init();

    libGDHL_gt_HeroTychusOverkillTargetedRetargetvH16_Init();

    libGDHL_gt_HeroTychusOverkillRollingReload_Init();

    libGDHL_gt_HeroTyraelSanctificationFacing_Init();

    libGDHL_gt_HeroTyraelSanctificationTimerStart_Init();

    libGDHL_gt_HeroTyraelArchangelsWrathSuppressCollision_Init();

    libGDHL_gt_HeroTyraelArchangelsWrathDeathTimerModification_Init();

    libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOn_Init();

    libGDHL_gt_HeroTyraelSanctificationFullscreenOverlayOff_Init();

    libGDHL_gt_HeroTyrandeElunesChosenSetTarget_Init();

    libGDHL_gt_HeroTyrandeElunesChosenDamageProc_Init();

    libGDHL_gt_HeroTyrandeEyesOfTheHuntressActivate_Init();

    libGDHL_gt_HeroWitchDoctorZombiePrisonKillZombies_Init();

    libGDHL_gt_HeroWitchDoctorZombiePrisonRelicZombiesSpawned_Init();

    libGDHL_gt_HeroWitchDoctorRavenousSpiritCast_Init();

    libGDHL_gt_HeroWitchDoctorRavenousSpiritExpires_Init();

    libGDHL_gt_HeroWitchDoctorPassiveTarget_Init();

    libGDHL_gt_HeroWitchDoctorBloodRitualHeroTakedownProc_Init();

    libGDHL_gt_HeroWitchDoctorGargantuanCreated_Init();

    libGDHL_gt_HeroWitchDoctorGargantuanStompUsed_Init();

    libGDHL_gt_HeroWitchDoctorVileInfectionTaken_Init();

    libGDHL_gt_HeroWitchDoctorThingoftheDeepTaken_Init();

    libGDHL_gt_HeroWizardCriticalMassCDReduction_Init();

    libGDHL_gt_HeroWizardDominance_Init();

    libGDHL_gt_HeroWizardIllusionistDamageCheck_Init();

    libGDHL_gt_HeroUtherArmorofFaithProc_Init();

    libGDHL_gt_HeroUtherBlessedChampionTargetProc_Init();

    libGDHL_gt_HeroUtherBlessedChampionSelfHealingProc_Init();

    libGDHL_gt_HeroUtherBlessedChampionDummyProcs_Init();

    libGDHL_gt_HeroUtherSpiritofRedemptionCooldownReset_Init();

    libGDHL_gt_HeroUtherEternalDevotionSuppressCollision_Init();

    libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOn_Init();

    libGDHL_gt_HeroUtherDivineShieldFullscreenOverlayOff_Init();

    libGDHL_gt_HeroZagaraDevouringMawOverlayOn_Init();

    libGDHL_gt_HeroZagaraDevouringMawOverlayOff_Init();

    libGDHL_gt_HeroZagaraExitNydusWormUsed_Init();

    libGDHL_gt_HeroZagaraNydusWormSpawned_Init();

    libGDHL_gt_HeroZagaraNydusWormTargetingState_Init();

    libGDHL_gt_HeroZagaraNydusWormDies_Init();

    libGDHL_gt_HeroZagaraNydusWormDiesUpdateLineofSuccession_Init();

    libGDHL_gt_HeroZagaraNydusWormExitAnimation_Init();

    libGDHL_gt_HeroZagaraBanelingBarrage_Init();

    libGDHL_gt_HeroZagaraHydraliskorMutaliskControl_Init();

    libGDHL_gt_HeroZagaraInfestedDropSpawnRoach_Init();

    libGDHL_gt_HeroZagaraInfestScaling_Init();

    libGDHL_gt_HeroZagaraTyrantMawCDRonDeath_Init();

    libGDHL_gt_HeroZagaraHunterKillerHydraliskTransfusion_Init();

    libGDHL_gt_HeroZagaraEndlessCreepApplyBehavior_Init();

    libGDHL_gt_HeroZeratulShroudofAdunFCT_Init();

    libGDHL_gt_HeroZeratulSeekerInTheDarkStructureTarget_Init();

    libGDHL_gt_HeroZeratulGrimTaskProc_Init();

    libGDHL_gt_HeroZeratulVoidPrisonApplyStasisOverlay_Init();

    libGDHL_gt_HeroZeratulVoidPrisonRemoveStasisOverlay_Init();

    libGDHL_gt_TalentOverdriveUpdateManaAndAP_Init();

    libGDHL_gt_FocusedAttackCooldown_Init();

    libGDHL_gt_TalentIceBlockOverlayOn_Init();

    libGDHL_gt_TalentIceBlockOverlayOff_Init();

    libGDHL_gt_TalentRewindActivate_Init();

    libGDHL_gt_TalentFollowThrough_Init();

    libGDHL_gt_TalentGatheringPowerTakedowns_Init();

    libGDHL_gt_TalentGatheringPowerRemoval_Init();

    libGDHL_gt_TalentScoutingDroneSelfRevealer_Init();

    libGDHL_gt_TalentApplyXPToMULE_Init();

    libGDHL_gt_TalentApplyXPToHealingWard_Init();

    libGDHL_gt_TalentBribeAddStacksonCooldownReset_Init();

    libGDHL_gt_TalentBribeCampRespawnTimerModification_Init();

}



//--------------------------------------------------------------------------------------------------

// Library Initialization

//--------------------------------------------------------------------------------------------------

bool libGDHL_InitLib_completed = false;



void libGDHL_InitLib () {

    if (libGDHL_InitLib_completed) {

        return;

    }



    libGDHL_InitLib_completed = true;



    libGDHL_InitLibraries();

    libGDHL_InitVariables();

    libGDHL_InitTriggers();

}



include "TriggerLibs/HeroesLib"

include "TriggerLibs/GameLib"

include "TriggerLibs/MapMechanicsLib"

include "TriggerLibs/AILib"

include "TriggerLibs/UILib"

include "TriggerLibs/StartingExperienceLib"

include "TriggerLibs/SoundLib"

include "TriggerLibs/SupportLib"