include "TriggerLibs/NativeLib"

include "TriggerLibs/HeroesLib"

include "TriggerLibs/GameLib"

include "TriggerLibs/UILib"



include "LibHALA_h"



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

// Library: Alarak

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

// External Library Initialization

void libHALA_InitLibraries () {

    libNtve_InitVariables();

    libCore_InitVariables();

    libGame_InitVariables();

    libUIUI_InitVariables();

}



// Variable Initialization

bool libHALA_InitVariables_completed = false;



void libHALA_InitVariables () {

    int init_i;



    if (libHALA_InitVariables_completed) {

        return;

    }



    libHALA_InitVariables_completed = true;



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

        libHALA_gv_heroAlarakCounterStrikeUnitGroup[init_i] = UnitGroupEmpty();

    }

    libHALA_gv_alarakUI.lv_mainPanel = c_invalidDialogControlId;

    libHALA_gv_alarakUI.lv_sadismProgressBar = c_invalidDialogControlId;

    libHALA_gv_alarakUI.lv_sadismPercentageLabel = c_invalidDialogControlId;

    libHALA_gv_alarakUI.lv_sadismExtraGlowImage = c_invalidDialogControlId;

}



// Functions

void libHALA_gf_HeroAlarakIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHALA_gv_heroAlarakTriggerRegistrationVariable += 1;

    if ((libHALA_gv_heroAlarakTriggerRegistrationVariable == 1)) {

        TriggerEnable(libHALA_gt_HeroAlarakHeroSpawned, true);

        TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeSetFacing, true);

        TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeDamageResponseProc, true);

        TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset, true);

        TriggerEnable(libHALA_gt_HeroAlarakPureMaliceAllyDeathProc, true);

        TriggerEnable(libHALA_gt_HeroAlarakSadismTakedownBonusProc, true);

        TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOn, true);

        TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOff, true);

        TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeCasterClicked, true);

        TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeExecuteEffect, true);

        TriggerEnable(libHALA_gt_HeroAlarakSadismRespecReset, true);

        TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff, true);

        TriggerEnable(libHALA_gt_HeroAlarakSadismTokensModified, true);

        TriggerEnable(libHALA_gt_HeroAlarakSurgeActorMessages, true);

        TriggerEnable(libHALA_gt_HeroAlarakRiteofRakShirFXDebuffAndCasterReveal, true);

        TriggerEnable(libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect, true);

        TriggerEnable(libHALA_gt_HeroAlarakRiteofRakShirTargetDies, true);

    }



}



void libHALA_gf_HeroAlarakDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHALA_gv_heroAlarakTriggerRegistrationVariable -= 1;

    if ((libHALA_gv_heroAlarakTriggerRegistrationVariable < 0)) {

        libHALA_gv_heroAlarakTriggerRegistrationVariable = 0;

    }



    if ((libHALA_gv_heroAlarakTriggerRegistrationVariable == 0)) {

        TriggerEnable(libHALA_gt_HeroAlarakHeroSpawned, false);

        TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeSetFacing, false);

        TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeDamageResponseProc, false);

        TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset, false);

        TriggerEnable(libHALA_gt_HeroAlarakPureMaliceAllyDeathProc, false);

        TriggerEnable(libHALA_gt_HeroAlarakSadismTakedownBonusProc, false);

        TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOn, false);

        TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOff, false);

        TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeCasterClicked, false);

        TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeExecuteEffect, false);

        TriggerEnable(libHALA_gt_HeroAlarakSadismRespecReset, false);

        TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff, false);

        TriggerEnable(libHALA_gt_HeroAlarakSadismTokensModified, false);

        TriggerEnable(libHALA_gt_HeroAlarakSurgeActorMessages, false);

        TriggerEnable(libHALA_gt_HeroAlarakRiteofRakShirFXDebuffAndCasterReveal, false);

        TriggerEnable(libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect, false);

        TriggerEnable(libHALA_gt_HeroAlarakRiteofRakShirTargetDies, false);

    }



}



void libHALA_gf_HeroAlarakUpdateSadismUI (int lp_player) {

    // Variable Declarations

    int lv_player;

    unit lv_alarakUnit;

    fixed lv_sadismValue;

    string lv_sadismString;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_alarakUnit = libGame_gv_players[lp_player].lv_heroUnit;

    lv_sadismString = "";



    // Implementation

    lv_sadismValue = (StringToFixed(CatalogFieldValueGet(c_gameCatalogAccumulator, "AlarakSadismAccumulator", "Scale", lp_player)) * UnitGetTokenCount(lv_alarakUnit, CatalogFieldValueGet(c_gameCatalogAccumulator, "AlarakSadismAccumulator", "TokenId", lp_player)));

    lv_sadismValue = (lv_sadismValue + (StringToFixed(CatalogFieldValueGet(c_gameCatalogAccumulator, "AlarakSadismPureMaliceAccumulator", "Scale", lp_player)) * UnitGetTokenCount(lv_alarakUnit, CatalogFieldValueGet(c_gameCatalogAccumulator, "AlarakSadismPureMaliceAccumulator", "TokenId", lp_player))));

    lv_sadismValue = (lv_sadismValue * 100.0);

    if ((lv_sadismValue > 100.0)) {

        if ((lv_sadismValue > 100.0) && (lv_sadismValue < 109.0)) {

            DialogControlSendAnimationEvent(libHALA_gv_alarakUI.lv_sadismExtraGlowImage, libCore_gv_playerGroupFromPlayer[lp_player], "PureMaliceStack1");

        }



        if ((lv_sadismValue > 109.0) && (lv_sadismValue < 117.0)) {

            DialogControlSendAnimationEvent(libHALA_gv_alarakUI.lv_sadismExtraGlowImage, libCore_gv_playerGroupFromPlayer[lp_player], "PureMaliceStack2");

        }



        if ((lv_sadismValue > 117.0) && (lv_sadismValue < 125.0)) {

            DialogControlSendAnimationEvent(libHALA_gv_alarakUI.lv_sadismExtraGlowImage, libCore_gv_playerGroupFromPlayer[lp_player], "PureMaliceStack3");

        }



        if ((lv_sadismValue > 125.0) && (lv_sadismValue < 133.0)) {

            DialogControlSendAnimationEvent(libHALA_gv_alarakUI.lv_sadismExtraGlowImage, libCore_gv_playerGroupFromPlayer[lp_player], "PureMaliceStack4");

        }



        if ((lv_sadismValue > 133.0)) {

            DialogControlSendAnimationEvent(libHALA_gv_alarakUI.lv_sadismExtraGlowImage, libCore_gv_playerGroupFromPlayer[lp_player], "PureMaliceStack5");

        }



    }

    else {

        DialogControlSetVisible(libHALA_gv_alarakUI.lv_sadismExtraGlowImage, libCore_gv_playerGroupFromPlayer[lp_player], false);

    }

    libNtve_gf_SetDialogItemCurrentValue(libHALA_gv_alarakUI.lv_sadismProgressBar, FixedToInt(lv_sadismValue), libCore_gv_playerGroupFromPlayer[lp_player]);

    libNtve_gf_SetDialogItemText(libHALA_gv_alarakUI.lv_sadismPercentageLabel, FixedToText(lv_sadismValue, 0), libCore_gv_playerGroupFromPlayer[lp_player]);

}



// Triggers

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

// Trigger: Hero - Alarak - Hero Spawned

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

bool libHALA_gt_HeroAlarakHeroSpawned_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) == "HeroAlarak"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    TriggerAddEventMouseClicked(libHALA_gt_HeroAlarakDeadlyChargeCasterClicked, lv_player, c_mouseButtonLeft, true);

    return true;

}



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

void libHALA_gt_HeroAlarakHeroSpawned_Init () {

    libHALA_gt_HeroAlarakHeroSpawned = TriggerCreate("libHALA_gt_HeroAlarakHeroSpawned_Func");

    TriggerEnable(libHALA_gt_HeroAlarakHeroSpawned, false);

    libGame_gf_HeroSpawn(libHALA_gt_HeroAlarakHeroSpawned);

}



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

// Trigger: Hero - Alarak - Deadly Charge - Turn Triggers On

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

bool libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());



    // Actions

    if (!runActions) {

        return true;

    }



    libHALA_gv_heroAlarakIsPlayerCastingDeadlyCharge[lv_player] = true;

    libHALA_gv_heroAlarakActiveDeadlyChargeCasters += 1;

    TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeCasterClicked, true);

    return true;

}



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

void libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOn_Init () {

    libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOn = TriggerCreate("libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOn_Func");

    TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOn, false);

    TriggerAddEventUnitBehaviorChange(libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOn, null, "AlarakDeadlyChargeChanneling", c_unitBehaviorChangeCreate);

}



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

// Trigger: Hero - Alarak - Deadly Charge - Turn Triggers Off

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

bool libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = UnitGetOwner(EventUnit());



    // Actions

    if (!runActions) {

        return true;

    }



    libHALA_gv_heroAlarakIsPlayerCastingDeadlyCharge[lv_player] = false;

    libHALA_gv_heroAlarakActiveDeadlyChargeCasters -= 1;

    libHALA_gv_heroAlarakActiveDeadlyChargeCasters = libNtve_gf_ArithmeticIntClamp(libHALA_gv_heroAlarakActiveDeadlyChargeCasters, 0, 10);

    if ((libHALA_gv_heroAlarakActiveDeadlyChargeCasters == 0)) {

        TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeCasterClicked, false);

    }



    return true;

}



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

void libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOff_Init () {

    libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOff = TriggerCreate("libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOff_Func");

    TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOff, false);

    TriggerAddEventUnitBehaviorChange(libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOff, null, "AlarakDeadlyChargeChanneling", c_unitBehaviorChangeDestroy);

}



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

// Trigger: Hero - Alarak - Deadly Charge - Caster Clicked

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

bool libHALA_gt_HeroAlarakDeadlyChargeCasterClicked_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = EventPlayer();

    lv_unit = libGame_gv_players[lv_player].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((libHALA_gv_heroAlarakIsPlayerCastingDeadlyCharge[lv_player] == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_unit, "AlarakDeadlyChargeAsHeroic") == true)) {

        UnitIssueOrder(lv_unit, Order(AbilityCommand("AlarakDeadlyChargeExecute", 0)), c_orderQueueReplace);

    }

    else {

        UnitIssueOrder(lv_unit, Order(AbilityCommand("AlarakDeadlyChargeExecute2ndHeroic", 0)), c_orderQueueReplace);

    }

    return true;

}



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

void libHALA_gt_HeroAlarakDeadlyChargeCasterClicked_Init () {

    libHALA_gt_HeroAlarakDeadlyChargeCasterClicked = TriggerCreate("libHALA_gt_HeroAlarakDeadlyChargeCasterClicked_Func");

    TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeCasterClicked, false);

}



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

// Trigger: Hero - Alarak - Deadly Charge - Execute Effect

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

bool libHALA_gt_HeroAlarakDeadlyChargeExecuteEffect_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;

    }



    UnitCreateEffectPoint(lv_unit, "AlarakDeadlyChargeExecuteSet", PointWithOffsetPolar(UnitGetPosition(lv_unit), 1.0, UnitGetFacing(lv_unit)));

    return true;

}



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

void libHALA_gt_HeroAlarakDeadlyChargeExecuteEffect_Init () {

    libHALA_gt_HeroAlarakDeadlyChargeExecuteEffect = TriggerCreate("libHALA_gt_HeroAlarakDeadlyChargeExecuteEffect_Func");

    TriggerEnable(libHALA_gt_HeroAlarakDeadlyChargeExecuteEffect, false);

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakDeadlyChargeExecuteEffect, c_playerAny, "AlarakDeadlyChargeExecuteTriggerDummy");

}



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

// Trigger: Hero - Alarak - Counter-Strike - Set Facing

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

bool libHALA_gt_HeroAlarakCounterStrikeSetFacing_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libNtve_gf_MakeUnitFacePoint(EventPlayerEffectUsedUnit(c_effectUnitCaster), UnitGetPosition(EventPlayerEffectUsedUnit(c_effectUnitTarget)), 0.0);

    return true;

}



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

void libHALA_gt_HeroAlarakCounterStrikeSetFacing_Init () {

    libHALA_gt_HeroAlarakCounterStrikeSetFacing = TriggerCreate("libHALA_gt_HeroAlarakCounterStrikeSetFacing_Func");

    TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeSetFacing, false);

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakCounterStrikeSetFacing, c_playerAny, "AlarakCounterStrikeProcSet");

}



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

// Trigger: Hero - Alarak - Counter-Strike - Damage Response Proc

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

bool libHALA_gt_HeroAlarakCounterStrikeDamageResponseProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_caster;

    unit lv_target;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_caster = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_target = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Conditions

    if (testConds) {

        if (!((lv_target != null))) {

            return false;

        }



        if (!((EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget) <= libCore_gv_bALMaxPlayers))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitBehaviorCount(lv_caster, "AlarakCounterStrikeReady") == 0)) {

        UnitCreateEffectUnit(lv_target, "AlarakCounterStrikeApplyReadyBehavior", lv_caster);

        UnitGroupAdd(libHALA_gv_heroAlarakCounterStrikeUnitGroup[UnitGetOwner(lv_caster)], libGame_gv_players[UnitGetOwner(lv_target)].lv_heroUnit);

    }



    return true;

}



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

void libHALA_gt_HeroAlarakCounterStrikeDamageResponseProc_Init () {

    libHALA_gt_HeroAlarakCounterStrikeDamageResponseProc = TriggerCreate("libHALA_gt_HeroAlarakCounterStrikeDamageResponseProc_Func");

    TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeDamageResponseProc, false);

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakCounterStrikeDamageResponseProc, c_playerAny, "AlarakCounterStrikeDamageResponseDummy");

}



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

// Trigger: Hero - Alarak - Counter-Strike - Unit Group Reset

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

bool libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset_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;

    }



    UnitGroupClear(libHALA_gv_heroAlarakCounterStrikeUnitGroup[UnitGetOwner(lv_caster)]);

    return true;

}



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

void libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset_Init () {

    libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset = TriggerCreate("libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset_Func");

    TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset, false);

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset, c_playerAny, "AlarakCounterStrikeCastSet");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset, c_playerAny, "AlarakCounterStrikeProcPersistentFinalSet");

}



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

// Trigger: Hero - Alarak - Counter-Strike Protected On/Off

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

bool libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    int lv_index;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

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

            return false;

        }



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

            return false;

        }



        if (!((UnitTestState(EventUnit(), c_unitStateHallucination) == false))) {

            return false;

        }



        if (!((UnitBehaviorCount(EventUnit(), "HeroGenericHasNoStatusBar") == 0))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_player = UnitGetOwner(EventUnit());

    lv_index = libUIUI_gf_UIUnitStatusFramesGetUnitIndex(lv_player, EventUnit());

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

        DialogControlSendAnimationEvent(libUIUI_gv_uIHeroStatusFrames[lv_player].lv_unitHealthBarInvincible[lv_index], PlayerGroupAll(), "InvincibleOn");

        libUIUI_gv_uIHeroBehaviorStates[lv_player].lv_invincibleActive[lv_index] = true;

    }

    else {

        DialogControlSendAnimationEvent(libUIUI_gv_uIHeroStatusFrames[lv_player].lv_unitHealthBarInvincible[lv_index], PlayerGroupAll(), "InvincibleOff");

        libUIUI_gv_uIHeroBehaviorStates[lv_player].lv_invincibleActive[lv_index] = false;

    }

    return true;

}



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

void libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff_Init () {

    libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff = TriggerCreate("libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff_Func");

    TriggerEnable(libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff, false);

    TriggerAddEventUnitBehaviorChange(libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff, null, "AlarakCounterStrikeShield", c_unitBehaviorChangeActivate);

    TriggerAddEventUnitBehaviorChange(libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff, null, "AlarakCounterStrikeShield", c_unitBehaviorChangeDeactivate);

}



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

// Trigger: Hero - Alarak - Pure Malice - Ally Death Proc

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

bool libHALA_gt_HeroAlarakPureMaliceAllyDeathProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_pickedUnit;

    int lv_deadUnitOwner;

    point lv_deadUnitLocation;



    // Automatic Variable Declarations

    playergroup autoF00BC071_g;

    int autoF00BC071_var;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    if ((EventGenericName() == "HeroKilled")) {

        lv_deadUnitOwner = libGame_gf_HeroKilledPlayer();

        lv_deadUnitLocation = libGame_gf_HeroKilledLocation();

    }

    else {

        lv_deadUnitOwner = libGame_gf_HeroAllyKilledPlayer();

        lv_deadUnitLocation = libGame_gf_HeroAllyKilledLocation();

    }

    autoF00BC071_g = PlayerGroupAlliance(c_playerGroupAlly, lv_deadUnitOwner);

    autoF00BC071_var = -1;

    while (true) {

        	autoF00BC071_var = PlayerGroupNextPlayer(autoF00BC071_g, autoF00BC071_var);

        	if (autoF00BC071_var<0) { break; }

        	lv_player = autoF00BC071_var;

        if ((lv_player != lv_deadUnitOwner) && (UnitIsAlive(libGame_gv_players[lv_player].lv_heroUnit) == true) && (lv_player <= libCore_gv_bALMaxPlayers) && (UnitGetType(libGame_gv_players[lv_player].lv_heroUnit) == "HeroAlarak") && (PlayerHasTalent(lv_player, "AlarakPureMalice") == true)) {

            lv_pickedUnit = libGame_gv_players[lv_player].lv_heroUnit;

            if ((UnitBehaviorCount(lv_pickedUnit, "AlarakSadismPureMaliceTalentStack") < 4)) {

                UnitCreateEffectUnit(lv_pickedUnit, "AlarakSadismApplyPureMaliceTalentStack", lv_pickedUnit);

            }



        }



    }

    return true;

}



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

void libHALA_gt_HeroAlarakPureMaliceAllyDeathProc_Init () {

    libHALA_gt_HeroAlarakPureMaliceAllyDeathProc = TriggerCreate("libHALA_gt_HeroAlarakPureMaliceAllyDeathProc_Func");

    TriggerEnable(libHALA_gt_HeroAlarakPureMaliceAllyDeathProc, false);

    libGame_gf_HeroKilled(libHALA_gt_HeroAlarakPureMaliceAllyDeathProc);

    libGame_gf_HeroAllyKilled(libHALA_gt_HeroAlarakPureMaliceAllyDeathProc);

}



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

// Trigger: Hero - Alarak - Rite of Rak'Shir FX Debuff And Caster Reveal

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

bool libHALA_gt_HeroAlarakRiteofRakShirFXDebuffAndCasterReveal_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, "AlarakSadismRiteofRakShirMarkerDummy", lv_unit);

    if ((libHALA_gv_heroAlarakRiteofRakShirActivelyTransferring[UnitBehaviorEffectPlayer(lv_unit, "AlarakSadismRiteofRakShirTalentDebuff", c_effectPlayerCaster, 0)] == false)) {

        UnitCreateEffectUnit(UnitBehaviorEffectUnit(EventUnit(), EventUnitBehavior(), c_effectUnitCaster, 0), "OneOffDamageRevealSourceApplyRevealer", lv_unit);

    }

    else {

        libHALA_gv_heroAlarakRiteofRakShirActivelyTransferring[UnitBehaviorEffectPlayer(lv_unit, "AlarakSadismRiteofRakShirTalentDebuff", c_effectPlayerCaster, 0)] = false;

    }

    return true;

}



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

void libHALA_gt_HeroAlarakRiteofRakShirFXDebuffAndCasterReveal_Init () {

    libHALA_gt_HeroAlarakRiteofRakShirFXDebuffAndCasterReveal = TriggerCreate("libHALA_gt_HeroAlarakRiteofRakShirFXDebuffAndCasterReveal_Func");

    TriggerEnable(libHALA_gt_HeroAlarakRiteofRakShirFXDebuffAndCasterReveal, false);

    TriggerAddEventUnitBehaviorChange(libHALA_gt_HeroAlarakRiteofRakShirFXDebuffAndCasterReveal, null, "AlarakSadismRiteofRakShirTalentDebuff", c_unitBehaviorChangeActivate);

}



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

// Trigger: Hero - Alarak - Rite of Rak'Shir Transport Redirect

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

bool libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect_Func (bool testConds, bool runActions) {

    // Variable Declarations

    string lv_effect;

    fixed lv_behaviorDuration;

    unit lv_transportingUnit;

    unit lv_transportedUnit;

    unit lv_oldTarget;

    unit lv_newTarget;

    unit lv_alarak;



    // Automatic Variable Declarations

    fixed auto86D088E3_at;



    // Variable Initialization

    lv_effect = EventPlayerEffectUsed();

    lv_transportingUnit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_transportedUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);



    // Conditions

    if (testConds) {

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

            return false;

        }



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

            return false;

        }



        if (!(((UnitBehaviorCount(lv_transportingUnit, "AlarakSadismRiteofRakShirTalentDebuff") == 1) || (UnitBehaviorCount(lv_transportedUnit, "AlarakSadismRiteofRakShirTalentDebuff") == 1)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((lv_effect == "HeroGenericLoadTransportRedirectBehaviorsDummy")) {

        lv_oldTarget = lv_transportedUnit;

        lv_newTarget = lv_transportingUnit;

    }

    else {

        lv_oldTarget = lv_transportingUnit;

        lv_newTarget = lv_transportedUnit;

    }

    lv_alarak = UnitBehaviorEffectUnit(lv_oldTarget, "AlarakSadismRiteofRakShirTalentDebuff", c_effectUnitSource, 0);

    lv_behaviorDuration = UnitBehaviorDuration(lv_oldTarget, "AlarakSadismRiteofRakShirTalentDebuff");

    libHALA_gv_heroAlarakRiteofRakShirActivelyTransferring[UnitGetOwner(lv_alarak)] = true;

    UnitBehaviorAdd(lv_newTarget, "AlarakSadismRiteofRakShirSuppressVOX", lv_alarak, 1);

    UnitCreateEffectUnit(lv_alarak, "AlarakSadismRiteofRakShirTalentApplyDebuff", lv_newTarget);

    UnitBehaviorRemove(lv_oldTarget, "AlarakSadismRiteofRakShirTalentDebuff", 1);

    auto86D088E3_at = 0;

    while (!((UnitBehaviorCount(lv_newTarget, "AlarakSadismRiteofRakShirTalentDebuff") == 1)) && auto86D088E3_at <= 5.0) {

        Wait(0.0625, c_timeGame);

        auto86D088E3_at = auto86D088E3_at + 0.0625;

    }

    UnitBehaviorSetDurationRemaining(lv_newTarget, "AlarakSadismRiteofRakShirTalentDebuff", lv_behaviorDuration);

    return true;

}



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

void libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect_Init () {

    libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect = TriggerCreate("libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect_Func");

    TriggerEnable(libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect, false);

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect, c_playerAny, "HeroGenericLoadTransportRedirectBehaviorsDummy");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect, c_playerAny, "HeroGenericUnloadTransportRedirectBehaviorsDummy");

}



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

// Trigger: Hero - Alarak - Rite of Rak'Shir Target Dies

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

bool libHALA_gt_HeroAlarakRiteofRakShirTargetDies_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_iter;

    unit lv_deadUnit;

    unit lv_alarakUnit;



    // Automatic Variable Declarations

    int autoB6FE2083_ae;

    const int autoB6FE2083_ai = 1;



    // Variable Initialization

    lv_deadUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(lv_deadUnit, "AlarakSadismRiteofRakShirTalentDebuff") == true))) {

            return false;

        }



        if (!((UnitTestState(lv_deadUnit, c_unitStateIsTransport) == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(lv_deadUnit) == "LongboatRaidBoat") && (UnitHasBehavior2(lv_deadUnit, "LostVikingsLongboatRaidDeathDummy") == false)) {

        return true;

    }



    autoB6FE2083_ae = (UnitBehaviorCount(lv_deadUnit, "AlarakSadismRiteofRakShirTalentDebuff") - 1);

    lv_iter = 0;

    for ( ; ( (autoB6FE2083_ai >= 0 && lv_iter <= autoB6FE2083_ae) || (autoB6FE2083_ai < 0 && lv_iter >= autoB6FE2083_ae) ) ; lv_iter += autoB6FE2083_ai ) {

        lv_alarakUnit = UnitBehaviorEffectUnit(lv_deadUnit, "AlarakSadismRiteofRakShirTalentDebuff", c_effectUnitCaster, lv_iter);

        UnitCreateEffectUnit(lv_alarakUnit, "AlarakSadismRiteofRakShirTalentResetPlayerCooldown", lv_alarakUnit);

        if ((UnitTestState(lv_deadUnit, c_unitStateHallucination) == false) && (UnitHasBehavior2(lv_deadUnit, "IsPseudoStructure") == false)) {

            UnitCreateEffectUnit(lv_alarakUnit, "AlarakSadismRiteofRakShirTalentApplyKillStack", lv_alarakUnit);

        }



    }

    UnitBehaviorRemove(lv_deadUnit, "AlarakSadismRiteofRakShirTalentDebuff", -1);

    return true;

}



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

void libHALA_gt_HeroAlarakRiteofRakShirTargetDies_Init () {

    libHALA_gt_HeroAlarakRiteofRakShirTargetDies = TriggerCreate("libHALA_gt_HeroAlarakRiteofRakShirTargetDies_Func");

    TriggerEnable(libHALA_gt_HeroAlarakRiteofRakShirTargetDies, false);

    TriggerAddEventUnitDied(libHALA_gt_HeroAlarakRiteofRakShirTargetDies, null);

    TriggerAddEventUnitBehaviorChangeFromCategory(libHALA_gt_HeroAlarakRiteofRakShirTargetDies, null, c_behaviorCategorySpecialDeathState, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChange(libHALA_gt_HeroAlarakRiteofRakShirTargetDies, null, "LostVikingsLongboatRaidDeathDummy", c_unitBehaviorChangeCreate);

}



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

// Trigger: Hero - Alarak - Sadism - Takedown Bonus Proc

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

bool libHALA_gt_HeroAlarakSadismTakedownBonusProc_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroParticipatedInTakedownKillingPlayer();



    // Conditions

    if (testConds) {

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

            return false;

        }



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

            return false;

        }



        if (!((UnitIsAlive(libGame_gv_players[lv_player].lv_heroUnit) == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



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

    return true;

}



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

void libHALA_gt_HeroAlarakSadismTakedownBonusProc_Init () {

    libHALA_gt_HeroAlarakSadismTakedownBonusProc = TriggerCreate("libHALA_gt_HeroAlarakSadismTakedownBonusProc_Func");

    TriggerEnable(libHALA_gt_HeroAlarakSadismTakedownBonusProc, false);

    libGame_gf_HeroParticipatedInTakedown(libHALA_gt_HeroAlarakSadismTakedownBonusProc);

}



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

// Trigger: Hero - Alarak - Sadism Respec Reset

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

bool libHALA_gt_HeroAlarakSadismRespecReset_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) == "HeroAlarak"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitSetTokenCount(libGame_gv_players[lv_player].lv_heroUnit, CatalogFieldValueGet(c_gameCatalogBehavior, "AlarakSadismToken", "TokenId", c_playerAny), StringToFixed(CatalogFieldValueGet(c_gameCatalogBehavior, "AlarakSadismToken", "Init", c_playerAny)), libGame_gv_players[lv_player].lv_heroUnit);

    UnitSetTokenCount(libGame_gv_players[lv_player].lv_heroUnit, CatalogFieldValueGet(c_gameCatalogBehavior, "AlarakSadismDeathReductionTokenCounter", "TokenId", c_playerAny), StringToFixed(CatalogFieldValueGet(c_gameCatalogBehavior, "AlarakSadismDeathReductionTokenCounter", "Init", c_playerAny)), libGame_gv_players[lv_player].lv_heroUnit);

    UnitSetTokenCount(libGame_gv_players[lv_player].lv_heroUnit, CatalogFieldValueGet(c_gameCatalogBehavior, "AlarakSadismTakedownIncreaseTokenCounter", "TokenId", c_playerAny), StringToFixed(CatalogFieldValueGet(c_gameCatalogBehavior, "AlarakSadismTakedownIncreaseTokenCounter", "Init", c_playerAny)), libGame_gv_players[lv_player].lv_heroUnit);

    libHALA_gf_HeroAlarakUpdateSadismUI(lv_player);

    return true;

}



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

void libHALA_gt_HeroAlarakSadismRespecReset_Init () {

    libHALA_gt_HeroAlarakSadismRespecReset = TriggerCreate("libHALA_gt_HeroAlarakSadismRespecReset_Func");

    TriggerEnable(libHALA_gt_HeroAlarakSadismRespecReset, false);

    libGame_gf_HeroRespecsTalents(libHALA_gt_HeroAlarakSadismRespecReset);

}



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

// Trigger: Hero - Alarak - Sadism Tokens Modified

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

bool libHALA_gt_HeroAlarakSadismTokensModified_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerTarget);



    // Actions

    if (!runActions) {

        return true;

    }



    libHALA_gf_HeroAlarakUpdateSadismUI(lv_player);

    return true;

}



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

void libHALA_gt_HeroAlarakSadismTokensModified_Init () {

    libHALA_gt_HeroAlarakSadismTokensModified = TriggerCreate("libHALA_gt_HeroAlarakSadismTokensModified_Func");

    TriggerEnable(libHALA_gt_HeroAlarakSadismTokensModified, false);

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSadismTokensModified, c_playerAny, "AlarakSadismTokenModifiedDummy");

}



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

// Trigger: Hero - Alarak - Surge Actor Messages

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

bool libHALA_gt_HeroAlarakSurgeActorMessages_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;

    int lv_player;

    string lv_effectString;

    string lv_searchNumber;

    fixed lv_finalNumberReal;

    string lv_finalNumberString;

    text lv_finalNumberText;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_player = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    lv_effectString = (EventPlayerEffectUsed());

    lv_searchNumber = StringReplaceWord(lv_effectString, "AlarakLightningSurgeSearch", "", c_stringReplaceAll, c_stringCase);

    lv_finalNumberReal = (StringToFixed(lv_searchNumber) * 0.12);

    lv_finalNumberString = FixedToString(lv_finalNumberReal, 3);

    lv_finalNumberText = StringToText(lv_finalNumberString);



    // Actions

    if (!runActions) {

        return true;

    }



    lv_finalNumberReal = (StringToFixed(lv_searchNumber) * 0.12);

    if ((lv_finalNumberReal > 14.0)) {

        lv_finalNumberReal = 14.0;

    }



    if ((lv_searchNumber == "1")) {

        lv_finalNumberReal = 0.2;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.200000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.200000");

    }

    else if ((lv_searchNumber == "2")) {

        lv_finalNumberReal = 0.3;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.300000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.300000");

    }

    else if ((lv_searchNumber == "3")) {

        lv_finalNumberReal = 0.39;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.390000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.390000");

    }

    else if ((lv_searchNumber == "4")) {

        lv_finalNumberReal = 0.43;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.430000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.430000");

    }

    else if ((lv_searchNumber == "5")) {

        lv_finalNumberReal = 0.54;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.540000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.540000");

    }

    else if ((lv_searchNumber == "6")) {

        lv_finalNumberReal = 0.6;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.600000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.600000");

    }

    else if ((lv_searchNumber == "7")) {

        lv_finalNumberReal = 0.68;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.680000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.680000");

    }

    else if ((lv_searchNumber == "8")) {

        lv_finalNumberReal = 0.74;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.740000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.740000");

    }

    else if ((lv_searchNumber == "9")) {

        lv_finalNumberReal = 0.81;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.810000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.810000");

    }

    else if ((lv_searchNumber == "10")) {

        lv_finalNumberReal = 0.88;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.880000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.880000");

    }

    else if ((lv_searchNumber == "11")) {

        lv_finalNumberReal = 0.96;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 0.960000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 0.960000");

    }

    else if (((lv_searchNumber == "12") || (lv_searchNumber == "13") || (lv_searchNumber == "14") || (lv_searchNumber == "15") || (lv_searchNumber == "16"))) {

        lv_finalNumberReal = 1.0;

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetTime Custom 1.000000");

        ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetTime Custom 1.000000");

    }

    lv_finalNumberString = FixedToString(lv_finalNumberReal, 3);

    lv_finalNumberText = StringToText(lv_finalNumberString);

    ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeReticule", "AnimSetPaused Custom");

    ActorSendTo(libNtve_gf_MainActorofUnit(lv_unit), "AlarakLightningSurgeBeam", "AnimSetPaused Custom");

    return true;

}



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

void libHALA_gt_HeroAlarakSurgeActorMessages_Init () {

    libHALA_gt_HeroAlarakSurgeActorMessages = TriggerCreate("libHALA_gt_HeroAlarakSurgeActorMessages_Func");

    TriggerEnable(libHALA_gt_HeroAlarakSurgeActorMessages, false);

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch1");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch2");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch3");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch4");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch5");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch6");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch7");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch8");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch9");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch10");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch11");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch12");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch13");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch14");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch15");

    TriggerAddEventPlayerEffectUsed(libHALA_gt_HeroAlarakSurgeActorMessages, c_playerAny, "AlarakLightningSurgeSearch16");

}



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

// Trigger: Hero - Alarak - UI Initialize

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

bool libHALA_gt_HeroAlarakUIInitialize_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, "AlarakFrame");

    libHALA_gv_alarakUI.lv_mainPanel = DialogControlLastCreated();

    lv_currentPanelLayer += 1;

    lv_panels[lv_currentPanelLayer] = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeProgressBar, "UnitStatusFrame0/AlarakSadismProgressBar");

    libHALA_gv_alarakUI.lv_sadismProgressBar = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeLabel, "UnitStatusFrame0/SadismLabel");

    libHALA_gv_alarakUI.lv_sadismPercentageLabel = DialogControlLastCreated();

    DialogControlHookup(lv_panels[lv_currentPanelLayer], c_triggerControlTypeImage, "UnitStatusFrame0/ExtraGlowImage");

    libHALA_gv_alarakUI.lv_sadismExtraGlowImage = DialogControlLastCreated();

    return true;

}



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

void libHALA_gt_HeroAlarakUIInitialize_Init () {

    libHALA_gt_HeroAlarakUIInitialize = TriggerCreate("libHALA_gt_HeroAlarakUIInitialize_Func");

    libCore_gf_IncludeModInitialization(libHALA_gt_HeroAlarakUIInitialize);

}



void libHALA_InitTriggers () {

    libHALA_gt_HeroAlarakHeroSpawned_Init();

    libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOn_Init();

    libHALA_gt_HeroAlarakDeadlyChargeTurnTriggersOff_Init();

    libHALA_gt_HeroAlarakDeadlyChargeCasterClicked_Init();

    libHALA_gt_HeroAlarakDeadlyChargeExecuteEffect_Init();

    libHALA_gt_HeroAlarakCounterStrikeSetFacing_Init();

    libHALA_gt_HeroAlarakCounterStrikeDamageResponseProc_Init();

    libHALA_gt_HeroAlarakCounterStrikeUnitGroupReset_Init();

    libHALA_gt_HeroAlarakCounterStrikeProtectedOnOff_Init();

    libHALA_gt_HeroAlarakPureMaliceAllyDeathProc_Init();

    libHALA_gt_HeroAlarakRiteofRakShirFXDebuffAndCasterReveal_Init();

    libHALA_gt_HeroAlarakRiteofRakShirTransportRedirect_Init();

    libHALA_gt_HeroAlarakRiteofRakShirTargetDies_Init();

    libHALA_gt_HeroAlarakSadismTakedownBonusProc_Init();

    libHALA_gt_HeroAlarakSadismRespecReset_Init();

    libHALA_gt_HeroAlarakSadismTokensModified_Init();

    libHALA_gt_HeroAlarakSurgeActorMessages_Init();

    libHALA_gt_HeroAlarakUIInitialize_Init();

}



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

// Library Initialization

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

bool libHALA_InitLib_completed = false;



void libHALA_InitLib () {

    if (libHALA_InitLib_completed) {

        return;

    }



    libHALA_InitLib_completed = true;



    libHALA_InitLibraries();

    libHALA_InitVariables();

    libHALA_InitTriggers();

}