diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-05-22 16:35:43 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-05-22 16:35:43 +0200 |
commit | e4e6eccdf592cd0760c780d485c439f121e06d4c (patch) | |
tree | b56c7dd15f8964400944861e4b80a5177db34ea5 | |
parent | 5f5871708ff0d9080936cdf1e30b5b3481813b6a (diff) |
Core/Auras: Corrected implementation of dungeon encounter related interrupt flags
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 19 | ||||
-rw-r--r-- | src/server/game/Spells/SpellDefines.h | 52 |
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); |