include "TriggerLibs/NativeLib"

include "TriggerLibs/HeroesLib"

include "TriggerLibs/GameLib"

include "TriggerLibs/UILib"

include "TriggerLibs/GameDataHelperLib"



include "LibHYRL_h"



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

// Library: Yrel

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

// External Library Initialization

void libHYRL_InitLibraries () {

    libNtve_InitVariables();

    libCore_InitVariables();

    libGame_InitVariables();

    libUIUI_InitVariables();

    libGDHL_InitVariables();

}



// Variable Initialization

bool libHYRL_InitVariables_completed = false;



void libHYRL_InitVariables () {

    if (libHYRL_InitVariables_completed) {

        return;

    }



    libHYRL_InitVariables_completed = true;



    libHYRL_gv_heroYrelArdentDefenderDamageConversionScale = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "YrelArdentDefenderDamageConversionScaleDummyModifyUnit", "XP", 0);

}



// Functions

void libHYRL_gf_HeroYrelIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHYRL_gv_heroYrelTriggerRegistrationVariable += 1;

    if ((libHYRL_gv_heroYrelTriggerRegistrationVariable == 1)) {

        TriggerEnable(libHYRL_gt_HeroYrelHeroSpawned, true);

        TriggerEnable(libHYRL_gt_HeroYrelAbathurUltimateEvolutionHeroCopied, true);

        TriggerEnable(libHYRL_gt_HeroYrelGameOverEvent, true);

        TriggerEnable(libHYRL_gt_HeroYrelVindicationOn, true);

        TriggerEnable(libHYRL_gt_HeroYrelVindicationOff, true);

        TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerOn, true);

        TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerOff, true);

        TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathOn, true);

        TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathOff, true);

        TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderOn, true);

        TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderOff, true);

        TriggerEnable(libHYRL_gt_HeroYrelBubbleHearthOverlayOn, true);

        TriggerEnable(libHYRL_gt_HeroYrelBubbleHearthOverlayOff, true);

        TriggerEnable(libHYRL_gt_HeroYrelBubbleHearthHearthstoneTalentDisableCheck, true);

    }



    TriggerExecute(libHYRL_gt_HeroYrelHeroSpawned, true, false);

}



void libHYRL_gf_HeroYrelDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHYRL_gv_heroYrelTriggerRegistrationVariable -= 1;

    if ((libHYRL_gv_heroYrelTriggerRegistrationVariable < 0)) {

        libHYRL_gv_heroYrelTriggerRegistrationVariable = 0;

    }



    if ((libHYRL_gv_heroYrelTriggerRegistrationVariable == 0)) {

        TriggerEnable(libHYRL_gt_HeroYrelHeroSpawned, false);

        TriggerEnable(libHYRL_gt_HeroYrelAbathurUltimateEvolutionHeroCopied, false);

        TriggerEnable(libHYRL_gt_HeroYrelGameOverEvent, false);

        libHYRL_gv_heroYrelVindicationPlayerCount = 0;

        TriggerEnable(libHYRL_gt_HeroYrelVindicationOn, false);

        TriggerEnable(libHYRL_gt_HeroYrelVindicationPlayerClicked, false);

        TriggerEnable(libHYRL_gt_HeroYrelVindicationOff, false);

        libHYRL_gv_heroYrelRighteousHammerPlayerCount = 0;

        TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerOn, false);

        TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerPlayerClicked, false);

        TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerOff, false);

        libHYRL_gv_heroYrelAvengingWrathPlayerCount = 0;

        TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathOn, false);

        TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathPlayerClicked, false);

        TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathOff, false);

        libHYRL_gv_heroYrelArdentDefenderPlayerCount = 0;

        TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderOn, false);

        TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderDamageTracker, false);

        TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderOff, false);

        TriggerEnable(libHYRL_gt_HeroYrelBubbleHearthOverlayOn, false);

        TriggerEnable(libHYRL_gt_HeroYrelBubbleHearthOverlayOff, false);

        TriggerEnable(libHYRL_gt_HeroYrelBubbleHearthHearthstoneTalentDisableCheck, false);

    }



}



// Triggers

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

// Trigger: Hero - Yrel - Hero Spawned

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

bool libHYRL_gt_HeroYrelHeroSpawned_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_playerID;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_playerID = libGame_gf_HeroSpawnPlayer();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(libGame_gv_players[lv_playerID].lv_heroUnit) == "HeroYrel"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    TriggerAddEventMouseClicked(libHYRL_gt_HeroYrelVindicationPlayerClicked, lv_playerID, c_mouseButtonLeft,true);

    TriggerAddEventMouseClicked(libHYRL_gt_HeroYrelRighteousHammerPlayerClicked, lv_playerID, c_mouseButtonLeft,true);

    TriggerAddEventMouseClicked(libHYRL_gt_HeroYrelAvengingWrathPlayerClicked, lv_playerID, c_mouseButtonLeft,true);

    return true;

}



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

void libHYRL_gt_HeroYrelHeroSpawned_Init () {

    libHYRL_gt_HeroYrelHeroSpawned = TriggerCreate("libHYRL_gt_HeroYrelHeroSpawned_Func");

    TriggerEnable(libHYRL_gt_HeroYrelHeroSpawned, false);

    libGame_gf_HeroSpawn(libHYRL_gt_HeroYrelHeroSpawned);

}



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

// Trigger: Hero - Yrel - Abathur Ultimate Evolution Hero Copied

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

bool libHYRL_gt_HeroYrelAbathurUltimateEvolutionHeroCopied_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_playerID;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_playerID = libGDHL_gf_AbathurUltimateEvolutionHeroCopiedAbathurOwner();



    // Conditions

    if (testConds) {

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

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    TriggerAddEventMouseClicked(libHYRL_gt_HeroYrelVindicationPlayerClicked, lv_playerID, c_mouseButtonLeft,true);

    TriggerAddEventMouseClicked(libHYRL_gt_HeroYrelRighteousHammerPlayerClicked, lv_playerID, c_mouseButtonLeft,true);

    TriggerAddEventMouseClicked(libHYRL_gt_HeroYrelAvengingWrathPlayerClicked, lv_playerID, c_mouseButtonLeft,true);

    return true;

}



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

void libHYRL_gt_HeroYrelAbathurUltimateEvolutionHeroCopied_Init () {

    libHYRL_gt_HeroYrelAbathurUltimateEvolutionHeroCopied = TriggerCreate("libHYRL_gt_HeroYrelAbathurUltimateEvolutionHeroCopied_Func");

    TriggerEnable(libHYRL_gt_HeroYrelAbathurUltimateEvolutionHeroCopied, false);

    libGDHL_gf_AbathurUltimateEvolutionHeroCopied(libHYRL_gt_HeroYrelAbathurUltimateEvolutionHeroCopied);

}



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

// Trigger: Hero - Yrel - Game Over Event

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

bool libHYRL_gt_HeroYrelGameOverEvent_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_itPlayer;



    // Automatic Variable Declarations

    const int auto27FD1D5C_ae = libCore_gv_bALMaxPlayers;

    const int auto27FD1D5C_ai = 1;



    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_itPlayer = 1;

    for ( ; ( (auto27FD1D5C_ai >= 0 && lv_itPlayer <= auto27FD1D5C_ae) || (auto27FD1D5C_ai < 0 && lv_itPlayer >= auto27FD1D5C_ae) ) ; lv_itPlayer += auto27FD1D5C_ai ) {

        if ((UnitGetType(libGame_gv_players[lv_itPlayer].lv_heroUnit) == "HeroYrel")) {

            UnitBehaviorRemove(libGame_gv_players[lv_itPlayer].lv_heroUnit, "YrelVindicationChannelBuff", c_unitBehaviorCountAll);

            UnitBehaviorRemove(libGame_gv_players[lv_itPlayer].lv_heroUnit, "YrelRighteousHammerChannelBuff", c_unitBehaviorCountAll);

            UnitBehaviorRemove(libGame_gv_players[lv_itPlayer].lv_heroUnit, "YrelAvengingWrathChannelBuff", c_unitBehaviorCountAll);

            UnitBehaviorRemove(libGame_gv_players[lv_itPlayer].lv_heroUnit, "YrelDivinePurposeBuff", c_unitBehaviorCountAll);

        }



        if ((UnitGetType(libGame_gv_players[lv_itPlayer].lv_activeVehicle) == "HeroYrel")) {

            UnitBehaviorRemove(libGame_gv_players[lv_itPlayer].lv_activeVehicle, "YrelVindicationChannelBuff", c_unitBehaviorCountAll);

            UnitBehaviorRemove(libGame_gv_players[lv_itPlayer].lv_activeVehicle, "YrelRighteousHammerChannelBuff", c_unitBehaviorCountAll);

            UnitBehaviorRemove(libGame_gv_players[lv_itPlayer].lv_activeVehicle, "YrelAvengingWrathChannelBuff", c_unitBehaviorCountAll);

            UnitBehaviorRemove(libGame_gv_players[lv_itPlayer].lv_activeVehicle, "YrelDivinePurposeBuff", c_unitBehaviorCountAll);

        }



    }

    return true;

}



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

void libHYRL_gt_HeroYrelGameOverEvent_Init () {

    libHYRL_gt_HeroYrelGameOverEvent = TriggerCreate("libHYRL_gt_HeroYrelGameOverEvent_Func");

    TriggerEnable(libHYRL_gt_HeroYrelGameOverEvent, false);

    TriggerAddEventUnitDied(libHYRL_gt_HeroYrelGameOverEvent, UnitRefFromVariable("libGame_gv_teams[libGame_gv_teamOrderIndex_C].lv_core"));

    TriggerAddEventUnitDied(libHYRL_gt_HeroYrelGameOverEvent, UnitRefFromVariable("libGame_gv_teams[libGame_gv_teamChaosIndex_C].lv_core"));

}



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

// Trigger: Hero - Yrel - Vindication - On

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

bool libHYRL_gt_HeroYrelVindicationOn_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libHYRL_gv_heroYrelVindicationPlayerCount += 1;

    TriggerEnable(libHYRL_gt_HeroYrelVindicationPlayerClicked, true);

    return true;

}



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

void libHYRL_gt_HeroYrelVindicationOn_Init () {

    libHYRL_gt_HeroYrelVindicationOn = TriggerCreate("libHYRL_gt_HeroYrelVindicationOn_Func");

    TriggerEnable(libHYRL_gt_HeroYrelVindicationOn, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelVindicationOn, null, "YrelVindicationChannelBuff", c_unitBehaviorChangeActivate);

}



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

// Trigger: Hero - Yrel - Vindication - Player Clicked

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

bool libHYRL_gt_HeroYrelVindicationPlayerClicked_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_playerID;

    unit lv_heroUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_playerID = EventPlayer();

    lv_heroUnit = libGame_gv_players[lv_playerID].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((EventKeyAlt() == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_heroUnit, "YrelVindicationChannelBuff") == true)) {

        UnitIssueOrder(lv_heroUnit, Order(AbilityCommand("YrelVindicationCast", 0)), c_orderQueueReplace);

        return true;

    }



    if ((UnitGetType(libGame_gv_players[lv_playerID].lv_heroUnit) == "HeroAbathur") && (UnitHasBehavior2(libGame_gv_players[lv_playerID].lv_activeVehicle, "YrelVindicationChannelBuff") == true)) {

        UnitIssueOrder(libGame_gv_players[lv_playerID].lv_activeVehicle, Order(AbilityCommand("YrelVindicationCast", 0)), c_orderQueueReplace);

    }



    return true;

}



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

void libHYRL_gt_HeroYrelVindicationPlayerClicked_Init () {

    libHYRL_gt_HeroYrelVindicationPlayerClicked = TriggerCreate("libHYRL_gt_HeroYrelVindicationPlayerClicked_Func");

    TriggerEnable(libHYRL_gt_HeroYrelVindicationPlayerClicked, false);

}



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

// Trigger: Hero - Yrel - Vindication - Off

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

bool libHYRL_gt_HeroYrelVindicationOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libHYRL_gv_heroYrelVindicationPlayerCount -= 1;

    if ((libHYRL_gv_heroYrelVindicationPlayerCount < 0)) {

        libHYRL_gv_heroYrelVindicationPlayerCount = 0;

    }



    if ((libHYRL_gv_heroYrelVindicationPlayerCount == 0)) {

        TriggerEnable(libHYRL_gt_HeroYrelVindicationPlayerClicked, false);

    }



    return true;

}



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

void libHYRL_gt_HeroYrelVindicationOff_Init () {

    libHYRL_gt_HeroYrelVindicationOff = TriggerCreate("libHYRL_gt_HeroYrelVindicationOff_Func");

    TriggerEnable(libHYRL_gt_HeroYrelVindicationOff, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelVindicationOff, null, "YrelVindicationChannelBuff", c_unitBehaviorChangeDeactivate);

}



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

// Trigger: Hero - Yrel - Righteous Hammer - On

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

bool libHYRL_gt_HeroYrelRighteousHammerOn_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libHYRL_gv_heroYrelRighteousHammerPlayerCount += 1;

    TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerPlayerClicked, true);

    return true;

}



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

void libHYRL_gt_HeroYrelRighteousHammerOn_Init () {

    libHYRL_gt_HeroYrelRighteousHammerOn = TriggerCreate("libHYRL_gt_HeroYrelRighteousHammerOn_Func");

    TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerOn, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelRighteousHammerOn, null, "YrelRighteousHammerChannelBuff", c_unitBehaviorChangeActivate);

}



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

// Trigger: Hero - Yrel - Righteous Hammer - Player Clicked

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

bool libHYRL_gt_HeroYrelRighteousHammerPlayerClicked_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_playerID;

    unit lv_heroUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_playerID = EventPlayer();

    lv_heroUnit = libGame_gv_players[lv_playerID].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((EventKeyAlt() == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_heroUnit, "YrelRighteousHammerChannelBuff") == true)) {

        UnitIssueOrder(lv_heroUnit, OrderTargetingPoint(AbilityCommand("YrelRighteousHammer", 0), Point(EventMouseClickedPosXWorld(), EventMouseClickedPosYWorld())), c_orderQueueReplace);

        return true;

    }



    if ((UnitGetType(libGame_gv_players[lv_playerID].lv_heroUnit) == "HeroAbathur") && (UnitHasBehavior2(libGame_gv_players[lv_playerID].lv_activeVehicle, "YrelRighteousHammerChannelBuff") == true)) {

        UnitIssueOrder(libGame_gv_players[lv_playerID].lv_activeVehicle, OrderTargetingPoint(AbilityCommand("YrelRighteousHammer", 0), Point(EventMouseClickedPosXWorld(), EventMouseClickedPosYWorld())), c_orderQueueReplace);

    }



    return true;

}



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

void libHYRL_gt_HeroYrelRighteousHammerPlayerClicked_Init () {

    libHYRL_gt_HeroYrelRighteousHammerPlayerClicked = TriggerCreate("libHYRL_gt_HeroYrelRighteousHammerPlayerClicked_Func");

    TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerPlayerClicked, false);

}



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

// Trigger: Hero - Yrel - Righteous Hammer - Off

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

bool libHYRL_gt_HeroYrelRighteousHammerOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libHYRL_gv_heroYrelRighteousHammerPlayerCount -= 1;

    if ((libHYRL_gv_heroYrelRighteousHammerPlayerCount < 0)) {

        libHYRL_gv_heroYrelRighteousHammerPlayerCount = 0;

    }



    if ((libHYRL_gv_heroYrelRighteousHammerPlayerCount == 0)) {

        TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerPlayerClicked, false);

    }



    return true;

}



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

void libHYRL_gt_HeroYrelRighteousHammerOff_Init () {

    libHYRL_gt_HeroYrelRighteousHammerOff = TriggerCreate("libHYRL_gt_HeroYrelRighteousHammerOff_Func");

    TriggerEnable(libHYRL_gt_HeroYrelRighteousHammerOff, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelRighteousHammerOff, null, "YrelRighteousHammerChannelBuff", c_unitBehaviorChangeDeactivate);

}



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

// Trigger: Hero - Yrel - Avenging Wrath - On

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

bool libHYRL_gt_HeroYrelAvengingWrathOn_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libHYRL_gv_heroYrelAvengingWrathPlayerCount += 1;

    TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathPlayerClicked, true);

    return true;

}



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

void libHYRL_gt_HeroYrelAvengingWrathOn_Init () {

    libHYRL_gt_HeroYrelAvengingWrathOn = TriggerCreate("libHYRL_gt_HeroYrelAvengingWrathOn_Func");

    TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathOn, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelAvengingWrathOn, null, "YrelAvengingWrathChannelBuff", c_unitBehaviorChangeActivate);

}



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

// Trigger: Hero - Yrel - Avenging Wrath - Player Clicked

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

bool libHYRL_gt_HeroYrelAvengingWrathPlayerClicked_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_playerID;

    unit lv_heroUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_playerID = EventPlayer();

    lv_heroUnit = libGame_gv_players[lv_playerID].lv_heroUnit;



    // Conditions

    if (testConds) {

        if (!((EventKeyAlt() == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitHasBehavior2(lv_heroUnit, "YrelAvengingWrathChannelBuff") == true)) {

        UnitIssueOrder(lv_heroUnit, OrderTargetingPoint(AbilityCommand("YrelAvengingWrath", 0), Point(EventMouseClickedPosXWorld(), EventMouseClickedPosYWorld())), c_orderQueueReplace);

        return true;

    }



    if ((UnitGetType(libGame_gv_players[lv_playerID].lv_heroUnit) == "HeroAbathur") && (UnitHasBehavior2(libGame_gv_players[lv_playerID].lv_activeVehicle, "YrelAvengingWrathChannelBuff") == true)) {

        UnitIssueOrder(libGame_gv_players[lv_playerID].lv_activeVehicle, OrderTargetingPoint(AbilityCommand("YrelAvengingWrath", 0), Point(EventMouseClickedPosXWorld(), EventMouseClickedPosYWorld())), c_orderQueueReplace);

    }



    return true;

}



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

void libHYRL_gt_HeroYrelAvengingWrathPlayerClicked_Init () {

    libHYRL_gt_HeroYrelAvengingWrathPlayerClicked = TriggerCreate("libHYRL_gt_HeroYrelAvengingWrathPlayerClicked_Func");

    TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathPlayerClicked, false);

}



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

// Trigger: Hero - Yrel - Avenging Wrath - Off

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

bool libHYRL_gt_HeroYrelAvengingWrathOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libHYRL_gv_heroYrelAvengingWrathPlayerCount -= 1;

    if ((libHYRL_gv_heroYrelAvengingWrathPlayerCount < 0)) {

        libHYRL_gv_heroYrelAvengingWrathPlayerCount = 0;

    }



    if ((libHYRL_gv_heroYrelAvengingWrathPlayerCount == 0)) {

        TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathPlayerClicked, false);

    }



    return true;

}



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

void libHYRL_gt_HeroYrelAvengingWrathOff_Init () {

    libHYRL_gt_HeroYrelAvengingWrathOff = TriggerCreate("libHYRL_gt_HeroYrelAvengingWrathOff_Func");

    TriggerEnable(libHYRL_gt_HeroYrelAvengingWrathOff, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelAvengingWrathOff, null, "YrelAvengingWrathChannelBuff", c_unitBehaviorChangeDeactivate);

}



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

// Trigger: Hero - Yrel - Ardent Defender - On

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

bool libHYRL_gt_HeroYrelArdentDefenderOn_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libHYRL_gv_heroYrelArdentDefenderPlayerCount += 1;

    TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderDamageTracker, true);

    return true;

}



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

void libHYRL_gt_HeroYrelArdentDefenderOn_Init () {

    libHYRL_gt_HeroYrelArdentDefenderOn = TriggerCreate("libHYRL_gt_HeroYrelArdentDefenderOn_Func");

    TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderOn, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelArdentDefenderOn, null, "YrelArdentDefenderDamageTracker", c_unitBehaviorChangeActivate);

}



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

// Trigger: Hero - Yrel - Ardent Defender - Damage Tracker

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

bool libHYRL_gt_HeroYrelArdentDefenderDamageTracker_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_yrelUnit;

    int lv_yrelPlayer;

    fixed lv_damageAmount;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_yrelUnit = EventUnit();

    lv_yrelPlayer = UnitGetOwner(lv_yrelUnit);



    // Conditions

    if (testConds) {

        if (!((EventUnitDamageEffect() != "HeroGenericDummyInterruptDamage"))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_yrelUnit, "YrelArdentDefenderDamageTracker") == true))) {

            return false;

        }



        if (!(((lv_yrelPlayer >= 1) && (lv_yrelPlayer <= libCore_gv_bALMaxPlayers)))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libHYRL_gv_heroYrelArdentDefenderDamageConversionScale = CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "YrelArdentDefenderDamageConversionScaleDummyModifyUnit", "XP", lv_yrelPlayer);

    lv_damageAmount = (libHYRL_gv_heroYrelArdentDefenderDamageConversionScale * (EventUnitDamageAmount() + EventUnitDamageBehaviorShield()));

    CatalogFieldValueSetFixed(c_gameCatalogEffect, "YrelArdentDefenderCreateHealer", "RechargeVitalRate", lv_yrelPlayer, lv_damageAmount);

    UnitCreateEffectUnit(lv_yrelUnit, "YrelArdentDefenderHealSet", lv_yrelUnit);

    if ((PlayerHasTalent(lv_yrelPlayer, "YrelArdentDefenderWordOfGlory") == true)) {

        CatalogFieldValueSetFixed(c_gameCatalogEffect, "YrelArdentDefenderWordOfGloryCreateHealer", "RechargeVitalRate", lv_yrelPlayer, lv_damageAmount);

        UnitCreateEffectUnit(lv_yrelUnit, "YrelArdentDefenderWordOfGlorySearchArea", lv_yrelUnit);

    }



    return true;

}



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

void libHYRL_gt_HeroYrelArdentDefenderDamageTracker_Init () {

    libHYRL_gt_HeroYrelArdentDefenderDamageTracker = TriggerCreate("libHYRL_gt_HeroYrelArdentDefenderDamageTracker_Func");

    TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderDamageTracker, false);

    TriggerAddDamageEvent(libHYRL_gt_HeroYrelArdentDefenderDamageTracker, null, "HeroYrel", c_unitDamageTypeAny, c_unitDamageEither, null);

}



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

// Trigger: Hero - Yrel - Ardent Defender - Off

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

bool libHYRL_gt_HeroYrelArdentDefenderOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Actions

    if (!runActions) {

        return true;

    }



    libHYRL_gv_heroYrelArdentDefenderPlayerCount -= 1;

    if ((libHYRL_gv_heroYrelArdentDefenderPlayerCount < 0)) {

        libHYRL_gv_heroYrelArdentDefenderPlayerCount = 0;

    }



    if ((libHYRL_gv_heroYrelArdentDefenderPlayerCount == 0)) {

        TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderDamageTracker, false);

    }



    return true;

}



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

void libHYRL_gt_HeroYrelArdentDefenderOff_Init () {

    libHYRL_gt_HeroYrelArdentDefenderOff = TriggerCreate("libHYRL_gt_HeroYrelArdentDefenderOff_Func");

    TriggerEnable(libHYRL_gt_HeroYrelArdentDefenderOff, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelArdentDefenderOff, null, "YrelArdentDefenderDamageTracker", c_unitBehaviorChangeDeactivate);

}



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

// Trigger: Hero - Yrel - Bubble Hearth - Overlay On

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

bool libHYRL_gt_HeroYrelBubbleHearthOverlayOn_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitIsAlive(lv_unit) == true))) {

            return false;

        }



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

            return false;

        }



        if (!((UnitHasBehavior2(lv_unit, "HeroGenericIgnoreFullscreenOverlay") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libUIUI_gf_FullscreenOverlayAddItemForPlayer(EventPlayer(), libUIUI_ge_FullscreenOverlayPriorities_Invulnerable, "Cutscenes\\GameUI_InvulnerableOverlay.StormCutscene", EventUnitBehavior());

    return true;

}



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

void libHYRL_gt_HeroYrelBubbleHearthOverlayOn_Init () {

    libHYRL_gt_HeroYrelBubbleHearthOverlayOn = TriggerCreate("libHYRL_gt_HeroYrelBubbleHearthOverlayOn_Func");

    TriggerEnable(libHYRL_gt_HeroYrelBubbleHearthOverlayOn, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelBubbleHearthOverlayOn, null, "YrelBubbleHearthChannelBuff", c_unitBehaviorChangeActivate);

}



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

// Trigger: Hero - Yrel - Bubble Hearth - Overlay Off

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

bool libHYRL_gt_HeroYrelBubbleHearthOverlayOff_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitHasBehavior2(EventUnit(), "HeroGenericIgnoreFullscreenOverlay") == false))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    libUIUI_gf_FullscreenOverlayRemoveItemFromQueueForPlayer(EventPlayer(), "Cutscenes\\GameUI_InvulnerableOverlay.StormCutscene", EventUnitBehavior());

    return true;

}



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

void libHYRL_gt_HeroYrelBubbleHearthOverlayOff_Init () {

    libHYRL_gt_HeroYrelBubbleHearthOverlayOff = TriggerCreate("libHYRL_gt_HeroYrelBubbleHearthOverlayOff_Func");

    TriggerEnable(libHYRL_gt_HeroYrelBubbleHearthOverlayOff, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelBubbleHearthOverlayOff, null, "YrelBubbleHearthChannelBuff", c_unitBehaviorChangeDestroy);

}



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

// Trigger: Hero - Yrel - Bubble Hearth - Hearthstone Talent Disable Check

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

bool libHYRL_gt_HeroYrelBubbleHearthHearthstoneTalentDisableCheck_Func (bool testConds, bool runActions) {

    // Automatic Variable Declarations

    // Conditions

    if (testConds) {

        if (!((UnitGetType(EventUnit()) == "HeroYrel"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    SetTalentEnabled("YrelBubbleHearth", false);

    return true;

}



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

void libHYRL_gt_HeroYrelBubbleHearthHearthstoneTalentDisableCheck_Init () {

    libHYRL_gt_HeroYrelBubbleHearthHearthstoneTalentDisableCheck = TriggerCreate("libHYRL_gt_HeroYrelBubbleHearthHearthstoneTalentDisableCheck_Func");

    TriggerEnable(libHYRL_gt_HeroYrelBubbleHearthHearthstoneTalentDisableCheck, false);

    TriggerAddEventUnitBehaviorChange(libHYRL_gt_HeroYrelBubbleHearthHearthstoneTalentDisableCheck, null, "HearthstonePermanentDisableAbilityBuff", c_unitBehaviorChangeActivate);

}



void libHYRL_InitTriggers () {

    libHYRL_gt_HeroYrelHeroSpawned_Init();

    libHYRL_gt_HeroYrelAbathurUltimateEvolutionHeroCopied_Init();

    libHYRL_gt_HeroYrelGameOverEvent_Init();

    libHYRL_gt_HeroYrelVindicationOn_Init();

    libHYRL_gt_HeroYrelVindicationPlayerClicked_Init();

    libHYRL_gt_HeroYrelVindicationOff_Init();

    libHYRL_gt_HeroYrelRighteousHammerOn_Init();

    libHYRL_gt_HeroYrelRighteousHammerPlayerClicked_Init();

    libHYRL_gt_HeroYrelRighteousHammerOff_Init();

    libHYRL_gt_HeroYrelAvengingWrathOn_Init();

    libHYRL_gt_HeroYrelAvengingWrathPlayerClicked_Init();

    libHYRL_gt_HeroYrelAvengingWrathOff_Init();

    libHYRL_gt_HeroYrelArdentDefenderOn_Init();

    libHYRL_gt_HeroYrelArdentDefenderDamageTracker_Init();

    libHYRL_gt_HeroYrelArdentDefenderOff_Init();

    libHYRL_gt_HeroYrelBubbleHearthOverlayOn_Init();

    libHYRL_gt_HeroYrelBubbleHearthOverlayOff_Init();

    libHYRL_gt_HeroYrelBubbleHearthHearthstoneTalentDisableCheck_Init();

}



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

// Library Initialization

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

bool libHYRL_InitLib_completed = false;



void libHYRL_InitLib () {

    if (libHYRL_InitLib_completed) {

        return;

    }



    libHYRL_InitLib_completed = true;



    libHYRL_InitLibraries();

    libHYRL_InitVariables();

    libHYRL_InitTriggers();

}