aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2025-09-22 21:56:04 +0200
committerGitHub <noreply@github.com>2025-09-22 21:56:04 +0200
commit1085b3f43321e58f151c1543a70b3558c26ed8e5 (patch)
tree621f525f17904bd95a0018eca9310c0c63aaf897
parentdf02bec2a1871267548494bc473711a0f9de9b43 (diff)
Core/AreaTriggers: Implement AreaTriggerActionSetFlag::DontRunOnLeaveWhenExpiring (#31276)
-rw-r--r--src/server/game/AI/CoreAI/AreaTriggerAI.h3
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h3
-rw-r--r--src/server/game/DataStores/DBCEnums.h2
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp23
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.h10
-rw-r--r--src/server/scripts/Argus/AntorusTheBurningThrone/boss_garothi_worldbreaker.cpp2
-rw-r--r--src/server/scripts/Battlegrounds/TempleOfKotmogu/battleground_temple_of_kotmogu.cpp4
-rw-r--r--src/server/scripts/Draenor/Garrison/garrison_generic.cpp2
-rw-r--r--src/server/scripts/Draenor/zone_assault_on_the_dark_portal.cpp2
-rw-r--r--src/server/scripts/DragonIsles/AzureVault/boss_leymor.cpp2
-rw-r--r--src/server/scripts/DragonIsles/AzureVault/boss_telash_greywing.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_maiden_of_virtue_rtk.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_mana_devourer.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ReturnToKarazhan/boss_the_curator_rtk.cpp2
-rw-r--r--src/server/scripts/KulTiras/ShrineOfTheStorm/boss_aqusirr.cpp2
-rw-r--r--src/server/scripts/KulTiras/WaycrestManor/boss_heartsbane_triad.cpp42
-rw-r--r--src/server/scripts/KulTiras/WaycrestManor/waycrest_manor.cpp14
-rw-r--r--src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp4
-rw-r--r--src/server/scripts/Spells/spell_dh.cpp2
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp2
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp4
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp2
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp4
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp2
-rw-r--r--src/server/scripts/Spells/spell_shaman.cpp2
-rw-r--r--src/server/scripts/Zandalar/AtalDazar/boss_volkaal.cpp2
-rw-r--r--src/server/scripts/Zandalar/KingsRest/boss_golden_serpent.cpp2
28 files changed, 57 insertions, 90 deletions
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<Unit*> const& newTargetList)
+void AreaTrigger::HandleUnitEnterExit(std::vector<Unit*> const& newTargetList, AreaTriggerExitReason exitMode)
{
GuidUnorderedSet exitUnits(std::move(_insideUnits));
@@ -870,7 +870,7 @@ void AreaTrigger::HandleUnitEnterExit(std::vector<Unit*> 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<AreaTrigger>, public MapObject
{
public:
@@ -228,9 +234,9 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
void SearchUnitInCylinder(UF::AreaTriggerCylinder const& cylinder, std::vector<Unit*>& targetList);
void SearchUnitInDisk(UF::AreaTriggerDisk const& disk, std::vector<Unit*>& targetList);
void SearchUnitInBoundedPlane(UF::AreaTriggerBoundedPlane const& boundedPlane, std::vector<Unit*>& targetList);
- void HandleUnitEnterExit(std::vector<Unit*> const& targetList);
+ void HandleUnitEnterExit(std::vector<Unit*> 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);
}