include "TriggerLibs/NativeLib"

include "TriggerLibs/HeroesLib"

include "TriggerLibs/GameLib"

include "TriggerLibs/SoundLib"



include "LibHLUC_h"



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

// Library: Lucio

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

// External Library Initialization

void libHLUC_InitLibraries () {

    libNtve_InitVariables();

    libCore_InitVariables();

    libGame_InitVariables();

    libSond_InitVariables();

}



// Variable Initialization

bool libHLUC_InitVariables_completed = false;



void libHLUC_InitVariables () {

    if (libHLUC_InitVariables_completed) {

        return;

    }



    libHLUC_InitVariables_completed = true;



}



// Functions

void libHLUC_gf_HeroLucioIncrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHLUC_gv_heroLucioTriggerRegistrationVariable += 1;

    if ((libHLUC_gv_heroLucioTriggerRegistrationVariable == 1)) {

        TriggerEnable(libHLUC_gt_HeroLucioSoundtrackInitialization, true);

        TriggerEnable(libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit, true);

        TriggerEnable(libHLUC_gt_HeroLucioTargetAcquired, true);

        TriggerEnable(libHLUC_gt_HeroLucioForceAcquireTargetTaunt, true);

        TriggerEnable(libHLUC_gt_HeroLucioHoldFire, true);

        TriggerEnable(libHLUC_gt_HeroLucioCrossfadeSpeedBoostInitializer, true);

        TriggerEnable(libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText, true);

        TriggerEnable(libHLUC_gt_HeroLucioReverseAmpNonstopRemix, true);

        TriggerEnable(libHLUC_gt_HeroLucioAmpItUpMaximumTempo, true);

        TriggerEnable(libHLUC_gt_HeroLucioBackInTheMix, true);

        TriggerEnable(libHLUC_gt_HeroLucioCantStopWontStop, true);

        TriggerEnable(libHLUC_gt_HeroLucioCrossfadeBoomboxSynaesthesiaAuditiva, true);

        TriggerEnable(libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText, true);

    }



}



void libHLUC_gf_HeroLucioDecrementHeroCountFunction () {

    // Automatic Variable Declarations

    // Implementation

    libHLUC_gv_heroLucioTriggerRegistrationVariable -= 1;

    if ((libHLUC_gv_heroLucioTriggerRegistrationVariable < 0)) {

        libHLUC_gv_heroLucioTriggerRegistrationVariable = 0;

    }



    if ((libHLUC_gv_heroLucioTriggerRegistrationVariable == 0)) {

        TriggerEnable(libHLUC_gt_HeroLucioSoundtrackInitialization, false);

        TriggerEnable(libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit, false);

        TriggerEnable(libHLUC_gt_HeroLucioTargetAcquired, false);

        TriggerEnable(libHLUC_gt_HeroLucioForceAcquireTargetTaunt, false);

        TriggerEnable(libHLUC_gt_HeroLucioHoldFire, false);

        TriggerEnable(libHLUC_gt_HeroLucioCrossfadeSpeedBoostInitializer, false);

        TriggerEnable(libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText, false);

        TriggerEnable(libHLUC_gt_HeroLucioReverseAmpNonstopRemix, false);

        TriggerEnable(libHLUC_gt_HeroLucioAmpItUpMaximumTempo, false);

        TriggerEnable(libHLUC_gt_HeroLucioBackInTheMix, false);

        TriggerEnable(libHLUC_gt_HeroLucioCantStopWontStop, false);

        TriggerEnable(libHLUC_gt_HeroLucioCrossfadeBoomboxSynaesthesiaAuditiva, false);

        TriggerEnable(libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText, false);

    }



}



trigger auto_libHLUC_gf_SoundtrackPlayMapIntroSoundtrackForAllPlayers_Trigger = null;



void libHLUC_gf_SoundtrackPlayMapIntroSoundtrackForAllPlayers () {

    if (auto_libHLUC_gf_SoundtrackPlayMapIntroSoundtrackForAllPlayers_Trigger == null) {

        auto_libHLUC_gf_SoundtrackPlayMapIntroSoundtrackForAllPlayers_Trigger = TriggerCreate("auto_libHLUC_gf_SoundtrackPlayMapIntroSoundtrackForAllPlayers_TriggerFunc");

    }



    TriggerExecute(auto_libHLUC_gf_SoundtrackPlayMapIntroSoundtrackForAllPlayers_Trigger, false, false);

}



bool auto_libHLUC_gf_SoundtrackPlayMapIntroSoundtrackForAllPlayers_TriggerFunc (bool testConds, bool runActions) {

    // Variable Declarations

    string lv_soundtrack;



    // Automatic Variable Declarations

    // Variable Initialization



    // Implementation

    lv_soundtrack = libCore_gv_mAPMapSoundtrack[0];

    if ((lv_soundtrack == null)) {

        return true;

    }



    libSond_gv_soundtrack_MapSoundtrackPlaying = true;

    libSond_gv_soundtrack_IntroSoundtrackPlaying = true;

    SoundtrackPlay(PlayerGroupAll(), c_soundtrackCategoryMusic, lv_soundtrack, c_soundtrackCueAny, c_soundtrackIndexAny, false);

    SoundtrackStop(PlayerGroupAll(), c_soundtrackCategoryMusic, true);

    SoundtrackWait(lv_soundtrack);

    libSond_gf_SoundtrackUpdateMapSoundtrackIndex();

    return true;

}



// Triggers

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

// Trigger: Hero - Lucio - Soundtrack Initialization

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

bool libHLUC_gt_HeroLucioSoundtrackInitialization_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_lucioPlayer;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    if ((UnitGetType(libGame_gv_players[libGame_gf_HeroSpawnPlayer()].lv_heroUnit) == "HeroLucio")) {

        lv_lucioPlayer = UnitGetOwner(libGame_gv_players[libGame_gf_HeroSpawnPlayer()].lv_heroUnit);

        SoundtrackStop(PlayerGroupSingle(libGame_gf_HeroSpawnPlayer()), c_soundtrackCategoryMusic, false);

        libSond_gv_soundtrack_UniqueSoundtrackEnabled[lv_lucioPlayer] = true;

    }



    return true;

}



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

void libHLUC_gt_HeroLucioSoundtrackInitialization_Init () {

    libHLUC_gt_HeroLucioSoundtrackInitialization = TriggerCreate("libHLUC_gt_HeroLucioSoundtrackInitialization_Func");

    TriggerEnable(libHLUC_gt_HeroLucioSoundtrackInitialization, false);

    libGame_gf_HeroSpawn(libHLUC_gt_HeroLucioSoundtrackInitialization);

}



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

// Trigger: Hero - Lucio - Hero Weapon Apply Targeting Unit

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

bool libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_lucioUnit;

    unit lv_targetUnit;

    point lv_targetPoint;

    int lv_lucioPlayer;

    bool lv_hadHoldFire;

    bool lv_hadDisabler;

    bool lv_hadMountedDisabler;



    // Automatic Variable Declarations

    // Variable Initialization



    // Conditions

    if (testConds) {

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

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lucioUnit = EventUnit();

    lv_lucioPlayer = UnitGetOwner(EventUnit());

    lv_targetUnit = EventUnitTargetUnit();

    if ((lv_targetUnit != null) && (UnitFilterMatch(lv_targetUnit, lv_lucioPlayer, UnitFilter(0, 0, (1 << c_targetFilterPlayer) | (1 << c_targetFilterAlly) | (1 << c_targetFilterMissile) | (1 << c_targetFilterItem), (1 << (c_targetFilterStasis - 32)) | (1 << (c_targetFilterDead - 32)) | (1 << (c_targetFilterInvulnerable - 32)))) == true)) {

        if ((lv_targetUnit == libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer]) && (UnitHasBehavior2(libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer], "LucioWeaponTargeting") == true)) {

            return true;

        }



        if ((libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer] != null) && (libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer] != lv_targetUnit) && (UnitHasBehavior2(libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer], "LucioWeaponTargeting") == true)) {

            UnitCreateEffectUnit(lv_lucioUnit, "LucioWeaponRemoveTargetingBehavior", libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer]);

        }



        UnitCreateEffectUnit(lv_lucioUnit, "LucioWeaponClearWeaponTargets", lv_lucioUnit);

        UnitCreateEffectUnit(lv_lucioUnit, "LucioWeaponApplyTargetingBehavior", lv_targetUnit);

        libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer] = lv_targetUnit;

        UnitBehaviorAdd(lv_lucioUnit, "LucioWeaponCasterTargetFinderDisabler", lv_lucioUnit, 1);

    }

    else {

        if ((EventUnitTargetPoint() != null) && (DistanceBetweenPoints(EventUnitTargetPoint(), UnitGetPosition(lv_lucioUnit)) > 0.0)) {

            if ((UnitHasBehavior2(lv_lucioUnit, "LucioWeaponCasterTargetFinderDisabler") == true)) {

                lv_hadDisabler = true;

                UnitBehaviorRemove(lv_lucioUnit, "LucioWeaponCasterTargetFinderDisabler", 1);

            }



            if ((UnitHasBehavior2(lv_lucioUnit, "HoldFire") == true)) {

                lv_hadHoldFire = true;

                UnitBehaviorAdd(lv_lucioUnit, "LucioHoldFireDisabler", lv_lucioUnit, 1);

            }



            lv_targetPoint = EventUnitTargetPoint();

            while (!((UnitOrder(lv_lucioUnit, 0) != OrderTargetingPoint(AbilityCommand("LucioAttack", 0), lv_targetPoint)))) {

                Wait(0.125, c_timeGame);

            }

            if ((lv_hadDisabler == true)) {

                lv_hadDisabler = false;

                UnitBehaviorAdd(lv_lucioUnit, "LucioWeaponCasterTargetFinderDisabler", lv_lucioUnit, 1);

            }



            if ((lv_hadHoldFire == true)) {

                lv_hadHoldFire = false;

                UnitBehaviorRemove(lv_lucioUnit, "LucioHoldFireDisabler", 1);

            }



        }



    }

    return true;

}



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

void libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit_Init () {

    libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit = TriggerCreate("libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit_Func");

    TriggerEnable(libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit, false);

    TriggerAddEventUnitAbility(libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit, null, AbilityCommand("LucioSmartTargetingRightClick", 0), c_abilEffectStageApproach, false);

    TriggerAddEventUnitAbility(libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit, null, AbilityCommand("LucioSmartTargetingRightClick", 0), c_abilEffectStageCast, false);

    TriggerAddEventUnitAbility(libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit, null, AbilityCommand("LucioTargetingAttackClick", 0), c_unitAbilStageExecute, false);

}



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

// Trigger: Hero - Lucio - Target Acquired

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

bool libHLUC_gt_HeroLucioTargetAcquired_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_targetUnit;

    int lv_lucioPlayer;

    unit lv_lucio;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_targetUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_lucioPlayer = UnitGetOwner(EventPlayerEffectUsedUnit(c_effectUnitCaster));



    // Conditions

    if (testConds) {

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

            return false;

        }



        if (!((lv_targetUnit != libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer]))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lucio = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    if ((libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer] != null) && (UnitHasBehavior2(libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer], "LucioWeaponTargeting") == true)) {

        UnitCreateEffectUnit(lv_lucio, "LucioWeaponRemoveTargetingBehavior", libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer]);

    }



    UnitCreateEffectUnit(lv_lucio, "LucioWeaponCasterTargetApplyDisablerBehavior", lv_lucio);

    libHLUC_gv_heroLucioCurrentAttackTarget[lv_lucioPlayer] = lv_targetUnit;

    return true;

}



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

void libHLUC_gt_HeroLucioTargetAcquired_Init () {

    libHLUC_gt_HeroLucioTargetAcquired = TriggerCreate("libHLUC_gt_HeroLucioTargetAcquired_Func");

    TriggerEnable(libHLUC_gt_HeroLucioTargetAcquired, false);

    TriggerAddEventPlayerEffectUsed(libHLUC_gt_HeroLucioTargetAcquired, c_playerAny, "LucioWeaponNewTargetImpactSet");

}



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

// Trigger: Hero - Lucio - Force Acquire Target (Taunt)

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

bool libHLUC_gt_HeroLucioForceAcquireTargetTaunt_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_unittoAttack;

    unit lv_lucioUnit;

    int lv_lucioPlayer;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_unittoAttack = EventPlayerEffectUsedUnit(c_effectUnitCaster);

    lv_lucioUnit = EventPlayerEffectUsedUnit(c_effectUnitTarget);

    lv_lucioPlayer = UnitGetOwner(lv_lucioUnit);



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_lucioUnit) == "HeroLucio"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitIssueOrder(lv_lucioUnit, OrderTargetingUnit(AbilityCommand("LucioSmartTargetingRightClick", 0), lv_unittoAttack), c_orderQueueReplace);

    return true;

}



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

void libHLUC_gt_HeroLucioForceAcquireTargetTaunt_Init () {

    libHLUC_gt_HeroLucioForceAcquireTargetTaunt = TriggerCreate("libHLUC_gt_HeroLucioForceAcquireTargetTaunt_Func");

    TriggerEnable(libHLUC_gt_HeroLucioForceAcquireTargetTaunt, false);

    TriggerAddEventPlayerEffectUsed(libHLUC_gt_HeroLucioForceAcquireTargetTaunt, c_playerAny, "ForceTargetToAttackCasterUnitScriptDummy");

}



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

// Trigger: Hero - Lucio - Hold Fire

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

bool libHLUC_gt_HeroLucioHoldFire_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_lucio;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_lucio = EventUnit();



    // Conditions

    if (testConds) {

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

            return false;

        }



        if (!((UnitGetType(lv_lucio) == "HeroLucio"))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_lucio, "LucioWeaponDisablerHoldFire", lv_lucio, 1);

    return true;

}



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

void libHLUC_gt_HeroLucioHoldFire_Init () {

    libHLUC_gt_HeroLucioHoldFire = TriggerCreate("libHLUC_gt_HeroLucioHoldFire_Func");

    TriggerEnable(libHLUC_gt_HeroLucioHoldFire, false);

    TriggerAddEventUnitOrder(libHLUC_gt_HeroLucioHoldFire, null, AbilityCommand("HoldFire", 1));

}



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

// Trigger: Hero - Lucio - Crossfade Speed Boost Initializer

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

bool libHLUC_gt_HeroLucioCrossfadeSpeedBoostInitializer_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_lucioUnit;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lucioUnit = EventUnit();

    UnitCreateEffectUnit(lv_lucioUnit, "LucioCrossfadeSpeedBoostApplierInitialSet", lv_lucioUnit);

    return true;

}



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

void libHLUC_gt_HeroLucioCrossfadeSpeedBoostInitializer_Init () {

    libHLUC_gt_HeroLucioCrossfadeSpeedBoostInitializer = TriggerCreate("libHLUC_gt_HeroLucioCrossfadeSpeedBoostInitializer_Func");

    TriggerEnable(libHLUC_gt_HeroLucioCrossfadeSpeedBoostInitializer, false);

    TriggerAddEventUnitBehaviorChange(libHLUC_gt_HeroLucioCrossfadeSpeedBoostInitializer, null, "LucioCrossfadeSpeedBoostApplier", c_unitBehaviorChangeActivate);

}



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

// Trigger: Hero - Lucio - Sound Barrier - Shields Combat Text

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

bool libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_casterPlayer;

    fixed lv_shieldsToAdd;

    fixed lv_vertOffset;

    fixed lv_horizOffset;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_casterPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    if ((EventPlayerEffectUsed() == "LucioSoundBarrierShieldApply")) {

        lv_shieldsToAdd = (CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "LucioSoundBarrierShieldApply", "Count", lv_casterPlayer) * CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "LucioSoundBarrierShield", "DamageResponse.ModifyLimit", lv_casterPlayer));

    }

    else {

        lv_shieldsToAdd = (CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "LucioSoundBarrierBossaNovaShieldApply", "Count", lv_casterPlayer) * CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "LucioSoundBarrierBossaNovaShield", "DamageResponse.ModifyLimit", lv_casterPlayer));

    }

    lv_vertOffset = 2.0;

    lv_horizOffset = RandomFixed(-0.4, -0.6);

    FloatingCombatElementCreateTextAtUnit(PlayerGroupSingle(lv_casterPlayer), "FloatingCombatElements/FloatingCombatLesserAmountReceived", "ShieldState", EventPlayerEffectUsedUnit(c_effectUnitTarget), FixedToText(lv_shieldsToAdd, 0), libNtve_gv_FloatingCombatTextAutoRandomSeed);

    return true;

}



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

void libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText_Init () {

    libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText = TriggerCreate("libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText_Func");

    TriggerEnable(libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText, false);

    TriggerAddEventPlayerEffectUsed(libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText, c_playerAny, "LucioSoundBarrierShieldApply");

    TriggerAddEventPlayerEffectUsed(libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText, c_playerAny, "LucioSoundBarrierBossaNovaShieldApply");

}



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

// Trigger: Hero - Lucio - Reverse - Amp Nonstop Remix

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

bool libHLUC_gt_HeroLucioReverseAmpNonstopRemix_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_lucioUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_lucioUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(EventPlayer(), "LucioReverseAmpNonstopRemix") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    while ((UnitHasBehavior2(lv_lucioUnit, "LucioReverseAmp") == true)) {

        if ((UnitBehaviorCount(lv_lucioUnit, "LucioReverseAmpNonstopRemixToken") >= 2)) {

            UnitBehaviorSetDurationRemaining(lv_lucioUnit, "LucioReverseAmp", (UnitBehaviorDuration(lv_lucioUnit, "LucioReverseAmp") + 0.0625));

        }



        Wait(0.0625, c_timeGame);

    }

    return true;

}



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

void libHLUC_gt_HeroLucioReverseAmpNonstopRemix_Init () {

    libHLUC_gt_HeroLucioReverseAmpNonstopRemix = TriggerCreate("libHLUC_gt_HeroLucioReverseAmpNonstopRemix_Func");

    TriggerEnable(libHLUC_gt_HeroLucioReverseAmpNonstopRemix, false);

    TriggerAddEventUnitBehaviorChange(libHLUC_gt_HeroLucioReverseAmpNonstopRemix, null, "LucioReverseAmp", c_unitBehaviorChangeCreate);

}



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

// Trigger: Hero - Lucio - Amp It Up - Maximum Tempo

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

bool libHLUC_gt_HeroLucioAmpItUpMaximumTempo_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_player;

    unit lv_lucio;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_player = libGame_gf_HeroParticipatedInTakedownKillingPlayer();



    // Conditions

    if (testConds) {

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

            return false;

        }



        if (!((PlayerHasTalent(lv_player, "LucioAmpItUpMaximumTempoQuest") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    lv_lucio = libGame_gv_players[lv_player].lv_heroUnit;

    if ((UnitIsAlive(lv_lucio) == true) && (UnitHasBehavior2(lv_lucio, "LucioCrossfadeSpeedBoost") == true)) {

        UnitCreateEffectUnit(lv_lucio, "LucioAmpItUpMaximumTempoModifyQuestToken", lv_lucio);

    }



    return true;

}



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

void libHLUC_gt_HeroLucioAmpItUpMaximumTempo_Init () {

    libHLUC_gt_HeroLucioAmpItUpMaximumTempo = TriggerCreate("libHLUC_gt_HeroLucioAmpItUpMaximumTempo_Func");

    TriggerEnable(libHLUC_gt_HeroLucioAmpItUpMaximumTempo, false);

    libGame_gf_HeroParticipatedInTakedown(libHLUC_gt_HeroLucioAmpItUpMaximumTempo);

}



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

// Trigger: Hero - Lucio - Back In The Mix

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

bool libHLUC_gt_HeroLucioBackInTheMix_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_lucioUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_lucioUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_lucioUnit) == "HeroLucio"))) {

            return false;

        }



        if (!((PlayerHasTalent(UnitGetOwner(lv_lucioUnit), "LucioBackInTheMix") == true))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_lucioUnit, "LucioBackInTheMixDisabler") == false))) {

            return false;

        }



        if (!((((UnitHasBehaviorWithCategoryFlag(lv_lucioUnit, c_behaviorCategoryBuffUnstoppable) == false) && (UnitHasBehaviorWithCategoryFlag(lv_lucioUnit, c_behaviorCategoryInvulnerable) == false)) || ((UnitHasBehaviorWithCategoryFlag(lv_lucioUnit, c_behaviorCategoryBuffUnstoppable) == true) && (UnitHasBehaviorWithCategoryFlag(lv_lucioUnit, c_behaviorCategoryTimeStop) == true)) || ((UnitHasBehaviorWithCategoryFlag(lv_lucioUnit, c_behaviorCategoryInvulnerable) == true) && (UnitHasBehaviorWithCategoryFlag(lv_lucioUnit, c_behaviorCategoryTimeStop) == true))))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitBehaviorAdd(lv_lucioUnit, "LucioBackInTheMixDisabler", lv_lucioUnit, 1);

    UnitCreateEffectUnit(lv_lucioUnit, "LucioBackInTheMixHeal", lv_lucioUnit);

    return true;

}



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

void libHLUC_gt_HeroLucioBackInTheMix_Init () {

    libHLUC_gt_HeroLucioBackInTheMix = TriggerCreate("libHLUC_gt_HeroLucioBackInTheMix_Func");

    TriggerEnable(libHLUC_gt_HeroLucioBackInTheMix, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libHLUC_gt_HeroLucioBackInTheMix, null, c_behaviorCategoryStun, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libHLUC_gt_HeroLucioBackInTheMix, null, c_behaviorCategoryStun, c_unitBehaviorChangeRefresh);

    TriggerAddEventUnitBehaviorChangeFromCategory(libHLUC_gt_HeroLucioBackInTheMix, null, c_behaviorCategoryTimeStop, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libHLUC_gt_HeroLucioBackInTheMix, null, c_behaviorCategoryTimeStop, c_unitBehaviorChangeRefresh);

    TriggerAddEventUnitBehaviorChangeFromCategory(libHLUC_gt_HeroLucioBackInTheMix, null, c_behaviorCategoryDebuffSilence, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libHLUC_gt_HeroLucioBackInTheMix, null, c_behaviorCategoryDebuffSilence, c_unitBehaviorChangeRefresh);

}



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

// Trigger: Hero - Lucio - Can't Stop, Won't Stop

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

bool libHLUC_gt_HeroLucioCantStopWontStop_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_lucioUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_lucioUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((UnitGetType(lv_lucioUnit) == "HeroLucio"))) {

            return false;

        }



        if (!((PlayerHasTalent(UnitGetOwner(lv_lucioUnit), "LucioWallRideCantStopWontStop") == true))) {

            return false;

        }



        if (!((UnitHasBehavior2(lv_lucioUnit, "LucioWallRideSpeed") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    ActorCreate(ActorScopeFromUnit(lv_lucioUnit), "LucioWallRideCantStopWontStopActivate", null, null, null);

    return true;

}



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

void libHLUC_gt_HeroLucioCantStopWontStop_Init () {

    libHLUC_gt_HeroLucioCantStopWontStop = TriggerCreate("libHLUC_gt_HeroLucioCantStopWontStop_Func");

    TriggerEnable(libHLUC_gt_HeroLucioCantStopWontStop, false);

    TriggerAddEventUnitBehaviorChangeFromCategory(libHLUC_gt_HeroLucioCantStopWontStop, null, c_behaviorCategorySlow, c_unitBehaviorChangeCreate);

    TriggerAddEventUnitBehaviorChangeFromCategory(libHLUC_gt_HeroLucioCantStopWontStop, null, c_behaviorCategoryDebuffRoot, c_unitBehaviorChangeCreate);

}



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

// Trigger: Hero - Lucio - Crossfade Boombox Synaesthesia Auditiva

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

bool libHLUC_gt_HeroLucioCrossfadeBoomboxSynaesthesiaAuditiva_Func (bool testConds, bool runActions) {

    // Variable Declarations

    unit lv_boomboxUnit;



    // Automatic Variable Declarations

    // Variable Initialization

    lv_boomboxUnit = EventUnit();



    // Conditions

    if (testConds) {

        if (!((PlayerHasTalent(UnitGetOwner(lv_boomboxUnit), "LucioAmpItUpSynaesthesiaAuditiva") == true))) {

            return false;

        }



        if (!((UnitHasBehavior2(libGame_gv_players[UnitGetOwner(lv_boomboxUnit)].lv_heroUnit, "LucioAmpItUpSynaesthesiaAuditivaCastTracker") == true))) {

            return false;

        }

    }



    // Actions

    if (!runActions) {

        return true;

    }



    UnitCreateEffectUnit(lv_boomboxUnit, "LucioAmpItUpSynaesthesiaAuditivaSearchArea", lv_boomboxUnit);

    return true;

}



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

void libHLUC_gt_HeroLucioCrossfadeBoomboxSynaesthesiaAuditiva_Init () {

    libHLUC_gt_HeroLucioCrossfadeBoomboxSynaesthesiaAuditiva = TriggerCreate("libHLUC_gt_HeroLucioCrossfadeBoomboxSynaesthesiaAuditiva_Func");

    TriggerEnable(libHLUC_gt_HeroLucioCrossfadeBoomboxSynaesthesiaAuditiva, false);

    TriggerAddEventUnitBehaviorChange(libHLUC_gt_HeroLucioCrossfadeBoomboxSynaesthesiaAuditiva, null, "LucioBoomboxAmpItUpDetector", c_unitBehaviorChangeActivate);

}



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

// Trigger: Hero - Lucio - Good Vibrations - Shields Combat Text

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

bool libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText_Func (bool testConds, bool runActions) {

    // Variable Declarations

    int lv_casterPlayer;

    fixed lv_shieldsToAdd;

    fixed lv_vertOffset;

    fixed lv_horizOffset;



    // Automatic Variable Declarations

    // Variable Initialization



    // Actions

    if (!runActions) {

        return true;

    }



    lv_casterPlayer = EventPlayerEffectUsedUnitOwner(c_effectPlayerCaster);

    if ((EventPlayerEffectUsed() == "LucioSoundwaveGoodVibrationsApplyShieldBehaviorHero")) {

        lv_shieldsToAdd = (CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "LucioSoundwaveGoodVibrationsApplyShieldBehaviorHero", "Count", lv_casterPlayer) * CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "LucioSoundwaveGoodVibrationsShield", "DamageResponse.ModifyLimit", lv_casterPlayer));

    }

    else {

        lv_shieldsToAdd = (CatalogFieldValueGetAsFixed(c_gameCatalogEffect, "LucioSoundwaveGoodVibrationsApplyShieldBehavior", "Count", lv_casterPlayer) * CatalogFieldValueGetAsFixed(c_gameCatalogBehavior, "LucioSoundwaveGoodVibrationsShield", "DamageResponse.ModifyLimit", lv_casterPlayer));

    }

    lv_vertOffset = 2.0;

    lv_horizOffset = RandomFixed(-0.4, -0.6);

    FloatingCombatElementCreateTextAtUnit(PlayerGroupSingle(lv_casterPlayer), "FloatingCombatElements/FloatingCombatLesserAmountReceived", "ShieldState", EventPlayerEffectUsedUnit(c_effectUnitTarget), FixedToText(lv_shieldsToAdd, 0), libNtve_gv_FloatingCombatTextAutoRandomSeed);

    return true;

}



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

void libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText_Init () {

    libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText = TriggerCreate("libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText_Func");

    TriggerEnable(libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText, false);

    TriggerAddEventPlayerEffectUsed(libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText, c_playerAny, "LucioSoundwaveGoodVibrationsApplyShieldBehaviorHero");

    TriggerAddEventPlayerEffectUsed(libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText, c_playerAny, "LucioSoundwaveGoodVibrationsApplyShieldBehavior");

}



void libHLUC_InitTriggers () {

    libHLUC_gt_HeroLucioSoundtrackInitialization_Init();

    libHLUC_gt_HeroLucioHeroWeaponApplyTargetingUnit_Init();

    libHLUC_gt_HeroLucioTargetAcquired_Init();

    libHLUC_gt_HeroLucioForceAcquireTargetTaunt_Init();

    libHLUC_gt_HeroLucioHoldFire_Init();

    libHLUC_gt_HeroLucioCrossfadeSpeedBoostInitializer_Init();

    libHLUC_gt_HeroLucioSoundBarrierShieldsCombatText_Init();

    libHLUC_gt_HeroLucioReverseAmpNonstopRemix_Init();

    libHLUC_gt_HeroLucioAmpItUpMaximumTempo_Init();

    libHLUC_gt_HeroLucioBackInTheMix_Init();

    libHLUC_gt_HeroLucioCantStopWontStop_Init();

    libHLUC_gt_HeroLucioCrossfadeBoomboxSynaesthesiaAuditiva_Init();

    libHLUC_gt_HeroLucioGoodVibrationsShieldsCombatText_Init();

}



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

// Library Initialization

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

bool libHLUC_InitLib_completed = false;



void libHLUC_InitLib () {

    if (libHLUC_InitLib_completed) {

        return;

    }



    libHLUC_InitLib_completed = true;



    libHLUC_InitLibraries();

    libHLUC_InitVariables();

    libHLUC_InitTriggers();

}