aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-05-22 16:35:43 +0200
committerShauren <shauren.trinity@gmail.com>2024-05-22 16:35:43 +0200
commite4e6eccdf592cd0760c780d485c439f121e06d4c (patch)
treeb56c7dd15f8964400944861e4b80a5177db34ea5
parent5f5871708ff0d9080936cdf1e30b5b3481813b6a (diff)
Core/Auras: Corrected implementation of dungeon encounter related interrupt flags
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp19
-rw-r--r--src/server/game/Spells/SpellDefines.h52
2 files changed, 38 insertions, 33 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 95d78ba4dbb..4cdac457f5b 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -538,15 +538,20 @@ void Unit::MonsterMoveWithSpeed(float x, float y, float z, float speed, bool gen
void Unit::AtStartOfEncounter(EncounterType type)
{
- RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::StartOfEncounter);
-
switch (type)
{
case EncounterType::DungeonEncounter:
- RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::StartOfDungeonEncounter);
+ if (GetMap()->IsRaid())
+ RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::StartOfRaidEncounterAndStartOfMythicPlus);
+ RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::StartOfEncounter);
break;
case EncounterType::MythicPlusRun:
- RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::StartOfMythicPlusRun);
+ RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::StartOfRaidEncounterAndStartOfMythicPlus);
+ RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::EndOfRaidEncounterAndStartOfMythicPlus);
+ RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::ChallengeModeStart);
+ break;
+ case EncounterType::Battleground:
+ RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::StartOfRaidEncounterAndStartOfMythicPlus);
break;
default:
break;
@@ -558,12 +563,12 @@ void Unit::AtStartOfEncounter(EncounterType type)
void Unit::AtEndOfEncounter(EncounterType type)
{
- RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::EndOfEncounter);
-
switch (type)
{
case EncounterType::DungeonEncounter:
- RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::EndOfDungeonEncounter);
+ if (GetMap()->IsRaid())
+ RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::EndOfRaidEncounterAndStartOfMythicPlus);
+ RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::EndOfEncounter);
break;
default:
break;
diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h
index 5d310348bee..5c8176cee06 100644
--- a/src/server/game/Spells/SpellDefines.h
+++ b/src/server/game/Spells/SpellDefines.h
@@ -117,32 +117,32 @@ DEFINE_ENUM_FLAG(SpellAuraInterruptFlags);
enum class SpellAuraInterruptFlags2 : uint32
{
- None = 0,
- Falling = 0x00000001, // Implemented in Unit::UpdatePosition
- Swimming = 0x00000002,
- NotMoving = 0x00000004, // NYI
- Ground = 0x00000008,
- Transform = 0x00000010, // NYI
- Jump = 0x00000020,
- ChangeSpec = 0x00000040,
- AbandonVehicle = 0x00000080, // Implemented in Unit::_ExitVehicle
- StartOfEncounter = 0x00000100, // Implemented in Unit::AtStartOfEncounter
- EndOfEncounter = 0x00000200, // Implemented in Unit::AtEndOfEncounter
- Disconnect = 0x00000400, // NYI
- EnteringInstance = 0x00000800, // Implemented in Map::AddPlayerToMap
- DuelEnd = 0x00001000, // Implemented in Player::DuelComplete
- LeaveArenaOrBattleground = 0x00002000, // Implemented in Battleground::RemovePlayerAtLeave
- ChangeTalent = 0x00004000,
- ChangeGlyph = 0x00008000,
- SeamlessTransfer = 0x00010000, // NYI
- WarModeLeave = 0x00020000, // Implemented in Player::UpdateWarModeAuras
- TouchingGround = 0x00040000, // NYI
- ChromieTime = 0x00080000, // NYI
- SplineFlightOrFreeFlight = 0x00100000, // NYI
- ProcOrPeriodicAttacking = 0x00200000, // NYI
- StartOfMythicPlusRun = 0x00400000, // Implemented in Unit::AtStartOfEncounter
- StartOfDungeonEncounter = 0x00800000, // Implemented in Unit::AtStartOfEncounter - Similar to StartOfEncounter (but only with bosses, not m+ run or battleground)
- EndOfDungeonEncounter = 0x01000000, // Implemented in Unit::AtEndOfEncounter - Similar to EndOfEncounter (but only with bosses, not m+ run or battleground)
+ None = 0,
+ Falling = 0x00000001, // Implemented in Unit::UpdatePosition
+ Swimming = 0x00000002,
+ NotMoving = 0x00000004, // NYI
+ Ground = 0x00000008,
+ Transform = 0x00000010, // NYI
+ Jump = 0x00000020,
+ ChangeSpec = 0x00000040,
+ AbandonVehicle = 0x00000080, // Implemented in Unit::_ExitVehicle
+ StartOfRaidEncounterAndStartOfMythicPlus = 0x00000100, // Implemented in Unit::AtStartOfEncounter
+ EndOfRaidEncounterAndStartOfMythicPlus = 0x00000200, // Implemented in Unit::AtEndOfEncounter
+ Disconnect = 0x00000400, // NYI
+ EnteringInstance = 0x00000800, // Implemented in Map::AddPlayerToMap
+ DuelEnd = 0x00001000, // Implemented in Player::DuelComplete
+ LeaveArenaOrBattleground = 0x00002000, // Implemented in Battleground::RemovePlayerAtLeave
+ ChangeTalent = 0x00004000,
+ ChangeGlyph = 0x00008000,
+ SeamlessTransfer = 0x00010000, // NYI
+ WarModeLeave = 0x00020000, // Implemented in Player::UpdateWarModeAuras
+ TouchingGround = 0x00040000, // NYI
+ ChromieTime = 0x00080000, // NYI
+ SplineFlightOrFreeFlight = 0x00100000, // NYI
+ ProcOrPeriodicAttacking = 0x00200000, // NYI
+ ChallengeModeStart = 0x00400000, // Implemented in Unit::AtStartOfEncounter
+ StartOfEncounter = 0x00800000, // Implemented in Unit::AtStartOfEncounter
+ EndOfEncounter = 0x01000000, // Implemented in Unit::AtEndOfEncounter
};
DEFINE_ENUM_FLAG(SpellAuraInterruptFlags2);