Core/Auras: Corrected implementation of dungeon encounter related interrupt flags

This commit is contained in:
Shauren
2024-05-22 16:35:43 +02:00
parent 5f5871708f
commit e4e6eccdf5
2 changed files with 38 additions and 33 deletions

View File

@@ -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;

View File

@@ -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);