From 1085b3f43321e58f151c1543a70b3558c26ed8e5 Mon Sep 17 00:00:00 2001 From: Meji Date: Mon, 22 Sep 2025 21:56:04 +0200 Subject: Core/AreaTriggers: Implement AreaTriggerActionSetFlag::DontRunOnLeaveWhenExpiring (#31276) --- src/server/game/AI/CoreAI/AreaTriggerAI.h | 3 +- src/server/game/AI/SmartScripts/SmartAI.cpp | 2 +- src/server/game/AI/SmartScripts/SmartAI.h | 3 +- src/server/game/DataStores/DBCEnums.h | 2 +- .../game/Entities/AreaTrigger/AreaTrigger.cpp | 23 +++++++----- src/server/game/Entities/AreaTrigger/AreaTrigger.h | 10 ++++-- .../boss_garothi_worldbreaker.cpp | 2 +- .../battleground_temple_of_kotmogu.cpp | 4 +-- .../scripts/Draenor/Garrison/garrison_generic.cpp | 2 +- .../Draenor/zone_assault_on_the_dark_portal.cpp | 2 +- .../scripts/DragonIsles/AzureVault/boss_leymor.cpp | 2 +- .../AzureVault/boss_telash_greywing.cpp | 2 +- .../ReturnToKarazhan/boss_maiden_of_virtue_rtk.cpp | 2 +- .../ReturnToKarazhan/boss_mana_devourer.cpp | 2 +- .../ReturnToKarazhan/boss_the_curator_rtk.cpp | 2 +- .../KulTiras/ShrineOfTheStorm/boss_aqusirr.cpp | 2 +- .../WaycrestManor/boss_heartsbane_triad.cpp | 42 ++-------------------- .../KulTiras/WaycrestManor/waycrest_manor.cpp | 14 +------- .../SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp | 4 +-- src/server/scripts/Spells/spell_dh.cpp | 2 +- src/server/scripts/Spells/spell_dk.cpp | 2 +- src/server/scripts/Spells/spell_hunter.cpp | 4 +-- src/server/scripts/Spells/spell_mage.cpp | 2 +- src/server/scripts/Spells/spell_paladin.cpp | 4 +-- src/server/scripts/Spells/spell_priest.cpp | 2 +- src/server/scripts/Spells/spell_shaman.cpp | 2 +- .../scripts/Zandalar/AtalDazar/boss_volkaal.cpp | 2 +- .../Zandalar/KingsRest/boss_golden_serpent.cpp | 2 +- 28 files changed, 57 insertions(+), 90 deletions(-) (limited to 'src') diff --git a/src/server/game/AI/CoreAI/AreaTriggerAI.h b/src/server/game/AI/CoreAI/AreaTriggerAI.h index d912c92f9c9..238f6cd1618 100644 --- a/src/server/game/AI/CoreAI/AreaTriggerAI.h +++ b/src/server/game/AI/CoreAI/AreaTriggerAI.h @@ -24,6 +24,7 @@ class AreaTrigger; class Spell; class Unit; +enum class AreaTriggerExitReason : uint8; class TC_GAME_API AreaTriggerAI { @@ -58,7 +59,7 @@ class TC_GAME_API AreaTriggerAI virtual void OnUnitEnter([[maybe_unused]] Unit* unit) { } // Called when an unit exit the AreaTrigger, or when the AreaTrigger is removed - virtual void OnUnitExit([[maybe_unused]] Unit* unit) { } + virtual void OnUnitExit([[maybe_unused]] Unit* unit, [[maybe_unused]] AreaTriggerExitReason reason) { } // Called when the AreaTrigger is removed virtual void OnRemove() { } diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index ca10757769b..cdc2530617c 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -1135,7 +1135,7 @@ void SmartAreaTriggerAI::OnUnitEnter(Unit* unit) GetScript()->ProcessEventsFor(SMART_EVENT_AREATRIGGER_ENTER, unit); } -void SmartAreaTriggerAI::OnUnitExit(Unit* unit) +void SmartAreaTriggerAI::OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) { GetScript()->ProcessEventsFor(SMART_EVENT_AREATRIGGER_EXIT, unit); } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 02e9b73bb76..0d1054796d2 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -25,6 +25,7 @@ #include "SmartScript.h" #include "WaypointDefines.h" +enum class AreaTriggerExitReason : uint8; enum class MovementStopReason : uint8; enum SmartEscortState : uint8 @@ -341,7 +342,7 @@ public: void OnInitialize() override; void OnUpdate(uint32 diff) override; void OnUnitEnter(Unit* unit) override; - void OnUnitExit(Unit* unit) override; + void OnUnitExit(Unit* unit, AreaTriggerExitReason reason) override; SmartScript* GetScript() { return &mScript; } void SetTimedActionList(SmartScriptHolder& e, uint32 entry, Unit* invoker); diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 7c96b94ffee..6e2c3806d8a 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -189,7 +189,7 @@ enum class AreaTriggerActionSetFlag : uint32 SuppressConditionError = 0x0040, // NYI NotTriggeredbyCaster = 0x0080, CreatorsPartyOnly = 0x0100, - DontRunOnLeaveWhenExpiring = 0x0200, /*NYI*/ + DontRunOnLeaveWhenExpiring = 0x0200, CanAffectUninteractible = 0x0400, DontDespawnWithCreator = 0x0800, CanAffectBeastmaster = 0x1000, // Can affect GMs diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index d3ff2686e05..829aa4d4816 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -96,7 +96,7 @@ void AreaTrigger::RemoveFromWorld() _ai->OnRemove(); // Handle removal of all units, calling OnUnitExit & deleting auras if needed - HandleUnitEnterExit({}); + HandleUnitEnterExit({}, AreaTriggerExitReason::ByExpire); WorldObject::RemoveFromWorld(); @@ -850,7 +850,7 @@ void AreaTrigger::SearchUnitInBoundedPlane(UF::AreaTriggerBoundedPlane const& bo }); } -void AreaTrigger::HandleUnitEnterExit(std::vector const& newTargetList) +void AreaTrigger::HandleUnitEnterExit(std::vector const& newTargetList, AreaTriggerExitReason exitMode) { GuidUnorderedSet exitUnits(std::move(_insideUnits)); @@ -870,7 +870,7 @@ void AreaTrigger::HandleUnitEnterExit(std::vector const& newTargetList) for (ObjectGuid const& exitUnitGuid : exitUnits) if (Unit* leavingUnit = ObjectAccessor::GetUnit(*this, exitUnitGuid)) - HandleUnitExitInternal(leavingUnit); + HandleUnitExitInternal(leavingUnit, exitMode); UpdateHasPlayersFlag(); @@ -897,22 +897,29 @@ void AreaTrigger::HandleUnitEnter(Unit* unit) unit->EnterAreaTrigger(this); } -void AreaTrigger::HandleUnitExitInternal(Unit* unit) +void AreaTrigger::HandleUnitExitInternal(Unit* unit, AreaTriggerExitReason exitMode) { + bool canTriggerOnExit = exitMode != AreaTriggerExitReason::ByExpire || !HasActionSetFlag(AreaTriggerActionSetFlag::DontRunOnLeaveWhenExpiring); + if (Player* player = unit->ToPlayer()) { if (player->isDebugAreaTriggers) ChatHandler(player->GetSession()).PSendSysMessage(LANG_DEBUG_AREATRIGGER_ENTITY_LEFT, GetEntry(), IsCustom(), IsStaticSpawn(), _spawnId); - player->UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_AREA_TRIGGER_EXIT, GetEntry(), 1); + if (canTriggerOnExit) + { + player->UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_AREA_TRIGGER_EXIT, GetEntry(), 1); - if (GetTemplate()->ActionSetId) - player->UpdateCriteria(CriteriaType::LeaveAreaTriggerWithActionSet, GetTemplate()->ActionSetId); + if (GetTemplate()->ActionSetId) + player->UpdateCriteria(CriteriaType::LeaveAreaTriggerWithActionSet, GetTemplate()->ActionSetId); + } } UndoActions(unit); - _ai->OnUnitExit(unit); + if (canTriggerOnExit) + _ai->OnUnitExit(unit, exitMode); + unit->ExitAreaTrigger(this); } diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index 4ab68286d1b..b4638b57c10 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -65,6 +65,12 @@ enum class AreaTriggerPathType : int32 MovementScript = 3 }; +enum class AreaTriggerExitReason : uint8 +{ + NotInside = 0, // Unit leave areatrigger + ByExpire = 1 // On areatrigger despawn +}; + class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject, public MapObject { public: @@ -228,9 +234,9 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject& targetList); void SearchUnitInDisk(UF::AreaTriggerDisk const& disk, std::vector& targetList); void SearchUnitInBoundedPlane(UF::AreaTriggerBoundedPlane const& boundedPlane, std::vector& targetList); - void HandleUnitEnterExit(std::vector const& targetList); + void HandleUnitEnterExit(std::vector const& targetList, AreaTriggerExitReason exitMode = AreaTriggerExitReason::NotInside); void HandleUnitEnter(Unit* unit); - void HandleUnitExitInternal(Unit* unit); + void HandleUnitExitInternal(Unit* unit, AreaTriggerExitReason exitMode = AreaTriggerExitReason::NotInside); void DoActions(Unit* unit); void UndoActions(Unit* unit); diff --git a/src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp b/src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp index 9e574dbdeeb..65e07c5a476 100644 --- a/src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp +++ b/src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp @@ -501,7 +501,7 @@ struct at_garothi_annihilation : AreaTriggerAI annihilation->RemoveAurasDueToSpell(SPELL_ANNIHILATION_WARNING); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { if (!unit->IsPlayer()) return; diff --git a/src/server/scripts/Battlegrounds/TempleOfKotmogu/battleground_temple_of_kotmogu.cpp b/src/server/scripts/Battlegrounds/TempleOfKotmogu/battleground_temple_of_kotmogu.cpp index 912d62f825b..db1f854367e 100644 --- a/src/server/scripts/Battlegrounds/TempleOfKotmogu/battleground_temple_of_kotmogu.cpp +++ b/src/server/scripts/Battlegrounds/TempleOfKotmogu/battleground_temple_of_kotmogu.cpp @@ -594,7 +594,7 @@ struct at_bg_temple_of_kotmogu_small_area : AreaTriggerAI } } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(TempleOfKotmogu::Spells::SmallAura); } @@ -629,7 +629,7 @@ struct at_bg_temple_of_kotmogu_medium_area : AreaTriggerAI player->CastSpell(player, TempleOfKotmogu::Spells::MediumAura, true); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(TempleOfKotmogu::Spells::MediumAura); } diff --git a/src/server/scripts/Draenor/Garrison/garrison_generic.cpp b/src/server/scripts/Draenor/Garrison/garrison_generic.cpp index 7b804e2aece..9218d9f1483 100644 --- a/src/server/scripts/Draenor/Garrison/garrison_generic.cpp +++ b/src/server/scripts/Draenor/Garrison/garrison_generic.cpp @@ -57,7 +57,7 @@ struct at_garrison_exit : AreaTriggerAI at->setActive(true); // has to be active, otherwise the at is no longer updated before we are able to leave it } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { Player* player = unit->ToPlayer(); if (!player) diff --git a/src/server/scripts/Draenor/zone_assault_on_the_dark_portal.cpp b/src/server/scripts/Draenor/zone_assault_on_the_dark_portal.cpp index c9a7bb16b78..6f9ceedd95b 100644 --- a/src/server/scripts/Draenor/zone_assault_on_the_dark_portal.cpp +++ b/src/server/scripts/Draenor/zone_assault_on_the_dark_portal.cpp @@ -430,7 +430,7 @@ struct at_altar_altercation_reach_altar : AreaTriggerAI player->CastSpell(nullptr, SPELL_ON_ALTAR); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_ON_ALTAR); } diff --git a/src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp b/src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp index ac7c68938df..827089ce558 100644 --- a/src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp +++ b/src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp @@ -427,7 +427,7 @@ struct at_leymor_arcane_eruption : AreaTriggerAI unit->ApplyMovementForce(at->GetGUID(), at->GetPosition(), -20.0f, MovementForceType::Gravity); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { if (!unit->IsPlayer()) return; diff --git a/src/server/scripts/DragonIsles/AzureVault/boss_telash_greywing.cpp b/src/server/scripts/DragonIsles/AzureVault/boss_telash_greywing.cpp index 987ea9f564f..8861b73858f 100644 --- a/src/server/scripts/DragonIsles/AzureVault/boss_telash_greywing.cpp +++ b/src/server/scripts/DragonIsles/AzureVault/boss_telash_greywing.cpp @@ -267,7 +267,7 @@ struct at_telash_greywing_vault_rune : AreaTriggerAI caster->CastSpell(nullptr, SPELL_VAULT_RUNE_SHIELD, true); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { if (!unit->IsPlayer()) return; diff --git a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_maiden_of_virtue_rtk.cpp b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_maiden_of_virtue_rtk.cpp index a488b0e8549..2d0d9f9519f 100644 --- a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_maiden_of_virtue_rtk.cpp +++ b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_maiden_of_virtue_rtk.cpp @@ -279,7 +279,7 @@ struct at_maiden_of_virtue_rtk_sacred_ground : AreaTriggerAI caster->CastSpell(unit, SPELL_SACRED_GROUND_PERIODIC, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAura(SPELL_SACRED_GROUND_PERIODIC); } diff --git a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_mana_devourer.cpp b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_mana_devourer.cpp index a318685475d..c382d8b0991 100644 --- a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_mana_devourer.cpp +++ b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_mana_devourer.cpp @@ -358,7 +358,7 @@ struct at_mana_devourer_energy_void : AreaTriggerAI at->SetOverrideScaleCurve(points); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_ENERGY_VOID_DAMAGE); diff --git a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_the_curator_rtk.cpp b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_the_curator_rtk.cpp index 7c4673fdb98..7e275c66f37 100644 --- a/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_the_curator_rtk.cpp +++ b/src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_the_curator_rtk.cpp @@ -307,7 +307,7 @@ struct at_the_curator_rtk_power_discharge : AreaTriggerAI caster->CastSpell(unit, SPELL_POWER_DISCHARGE_DAMAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_POWER_DISCHARGE_DAMAGE, at->GetCasterGuid()); } diff --git a/src/server/scripts/KulTiras/ShrineOfTheStorm/boss_aqusirr.cpp b/src/server/scripts/KulTiras/ShrineOfTheStorm/boss_aqusirr.cpp index 49d63ede3a8..3c25f72d16f 100644 --- a/src/server/scripts/KulTiras/ShrineOfTheStorm/boss_aqusirr.cpp +++ b/src/server/scripts/KulTiras/ShrineOfTheStorm/boss_aqusirr.cpp @@ -682,7 +682,7 @@ struct at_aqusirr_undertow : AreaTriggerAI unit->ApplyMovementForce(at->GetGUID(), at->GetPosition(), -5.0f, MovementForceType::Gravity); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { if (!unit->IsPlayer()) return; diff --git a/src/server/scripts/KulTiras/WaycrestManor/boss_heartsbane_triad.cpp b/src/server/scripts/KulTiras/WaycrestManor/boss_heartsbane_triad.cpp index 480c122bade..4ee73330aca 100644 --- a/src/server/scripts/KulTiras/WaycrestManor/boss_heartsbane_triad.cpp +++ b/src/server/scripts/KulTiras/WaycrestManor/boss_heartsbane_triad.cpp @@ -824,22 +824,10 @@ struct at_heartsbane_triad_aura_of_apathy : AreaTriggerAI unit->CastSpell(unit, SPELL_AURA_OF_APATHY_DEBUFF, true); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_AURA_OF_APATHY_DEBUFF); } - - void OnRemove() override - { - for (ObjectGuid const& guid : at->GetInsideUnits()) - { - Unit* unit = ObjectAccessor::GetUnit(*at, guid); - if (!unit) - continue; - - OnUnitExit(unit); - } - } }; // 17791 - Aura of Dread @@ -855,23 +843,11 @@ struct at_heartsbane_triad_aura_of_dread : AreaTriggerAI unit->CastSpell(unit, SPELL_AURA_OF_DREAD_MOVE_CHECK, true); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_AURA_OF_DREAD_MOVE_CHECK); unit->RemoveAurasDueToSpell(SPELL_AURA_OF_DREAD_DAMAGE); } - - void OnRemove() override - { - for (ObjectGuid const& guid : at->GetInsideUnits()) - { - Unit* unit = ObjectAccessor::GetUnit(*at, guid); - if (!unit) - continue; - - OnUnitExit(unit); - } - } }; // 268088 - Aura of Dread @@ -949,22 +925,10 @@ struct at_heartsbane_triad_aura_of_thorns : AreaTriggerAI unit->CastSpell(unit, SPELL_AURA_OF_THORNS_CHECK_PROC, true); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_AURA_OF_THORNS_CHECK_PROC); } - - void OnRemove() override - { - for (ObjectGuid const& guid : at->GetInsideUnits()) - { - Unit* unit = ObjectAccessor::GetUnit(*at, guid); - if (!unit) - continue; - - OnUnitExit(unit); - } - } }; // 268122 - Aura of Thorns diff --git a/src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp b/src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp index 21fb2e722fc..a40eaca0158 100644 --- a/src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp +++ b/src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp @@ -272,23 +272,11 @@ struct at_waycrest_manor_wildfire : AreaTriggerAI } } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_WILDFIRE_DAMAGE); unit->RemoveAurasDueToSpell(SPELL_WILDFIRE_DAMAGE_NPC); } - - void OnRemove() override - { - for (ObjectGuid const& guid : at->GetInsideUnits()) - { - Unit* unit = ObjectAccessor::GetUnit(*at, guid); - if (!unit) - continue; - - OnUnitExit(unit); - } - } }; // 267643 - Organ Missiles diff --git a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp index 8ec595ede47..4e0236a8963 100644 --- a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp +++ b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp @@ -2449,7 +2449,7 @@ struct at_anduin_wrynn_befouled_barrier : AreaTriggerAI caster->CastSpell(unit, SPELL_BEFOULED_BARRIER_DEBUFF, true); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAura(SPELL_BEFOULED_BARRIER_DEBUFF); } @@ -3555,7 +3555,7 @@ struct at_anduin_wrynn_hopelessness : AreaTriggerAI } } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { if (!unit->IsAlive() && unit->HasAura(at->GetSpellId())) unit->RemoveAurasDueToSpell(at->GetSpellId()); diff --git a/src/server/scripts/Spells/spell_dh.cpp b/src/server/scripts/Spells/spell_dh.cpp index 2f756e609af..b806137bdb5 100644 --- a/src/server/scripts/Spells/spell_dh.cpp +++ b/src/server/scripts/Spells/spell_dh.cpp @@ -737,7 +737,7 @@ struct areatrigger_dh_darkness : AreaTriggerAI }); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAura(SPELL_DH_DARKNESS_ABSORB, at->GetCasterGuid()); } diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 7ba94820ccc..a9fe0abdd83 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -1396,7 +1396,7 @@ struct at_dk_death_and_decay : AreaTriggerAI unit->CastSpell(unit, SPELL_DK_SANGUINE_GROUND); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { if (unit->GetGUID() != at->GetCasterGuid()) return; diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index 119ff115cd6..9eb1ee51fd6 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -285,7 +285,7 @@ struct at_hun_binding_shot : AreaTriggerAI } } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_HUNTER_BINDING_SHOT_MARKER, at->GetCasterGuid()); @@ -1331,7 +1331,7 @@ struct areatrigger_hun_tar_trap : AreaTriggerAI } } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_HUNTER_TAR_TRAP_SLOW, at->GetCasterGuid()); } diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 34a7dd2eb8c..80c741fc389 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -1564,7 +1564,7 @@ struct at_mage_meteor_burn : public AreaTriggerAI caster->CastSpell(unit, SPELL_MAGE_METEOR_BURN_DAMAGE, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_MAGE_METEOR_BURN_DAMAGE, at->GetCasterGuid()); } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index f5e35fddc24..4ab419b1067 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -277,7 +277,7 @@ struct areatrigger_pal_ashen_hallow : AreaTriggerAI unit->CastSpell(unit, SPELL_PALADIN_ASHEN_HALLOW_ALLOW_HAMMER, true); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { if (unit->GetGUID() == at->GetCasterGuid()) unit->RemoveAura(SPELL_PALADIN_ASHEN_HALLOW_ALLOW_HAMMER); @@ -463,7 +463,7 @@ struct areatrigger_pal_consecration : AreaTriggerAI } } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { if (at->GetCasterGuid() == unit->GetGUID()) unit->RemoveAurasDueToSpell(SPELL_PALADIN_CONSECRATION_PROTECTION_AURA, at->GetCasterGuid()); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 6aa96c48d20..2b65dd903fb 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -1077,7 +1077,7 @@ struct areatrigger_pri_divine_star : AreaTriggerAI HandleUnitEnterExit(unit); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { // Note: this ensures any unit receives a second hit if they happen to be inside the AT when Divine Star starts its return path. HandleUnitEnterExit(unit); diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 1f7f1842478..9a88a31425d 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -3358,7 +3358,7 @@ struct areatrigger_sha_arctic_snowstorm : AreaTriggerAI } } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_SHAMAN_ARCTIC_SNOWSTORM_SLOW, at->GetCasterGuid()); } diff --git a/src/server/scripts/Zandalar/AtalDazar/boss_volkaal.cpp b/src/server/scripts/Zandalar/AtalDazar/boss_volkaal.cpp index 1ac109041b6..5aad4c12b4a 100644 --- a/src/server/scripts/Zandalar/AtalDazar/boss_volkaal.cpp +++ b/src/server/scripts/Zandalar/AtalDazar/boss_volkaal.cpp @@ -434,7 +434,7 @@ struct at_volkaal_rapid_decay : AreaTriggerAI unit->CastSpell(unit, SPELL_TOXIC_POOL, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_TOXIC_POOL); } diff --git a/src/server/scripts/Zandalar/KingsRest/boss_golden_serpent.cpp b/src/server/scripts/Zandalar/KingsRest/boss_golden_serpent.cpp index a3475b42735..6fcf27796bd 100644 --- a/src/server/scripts/Zandalar/KingsRest/boss_golden_serpent.cpp +++ b/src/server/scripts/Zandalar/KingsRest/boss_golden_serpent.cpp @@ -306,7 +306,7 @@ struct at_kings_rest_molten_gold : AreaTriggerAI unit->CastSpell(nullptr, SPELL_MOLTEN_GOLD_DAMAGE, false); } - void OnUnitExit(Unit* unit) override + void OnUnitExit(Unit* unit, AreaTriggerExitReason /*reason*/) override { unit->RemoveAurasDueToSpell(SPELL_MOLTEN_GOLD_DAMAGE); } -- cgit v1.2.3