From 665d7ac140e75a3e3f4645b981c0b5af0190c625 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Sun, 25 Aug 2024 00:29:19 -0400 Subject: [PATCH] Core/Auras: Corrected implementation of dungeon encounter related interrupt flags Port From (https://github.com/TrinityCore/TrinityCore/commit/e4e6eccdf592cd0760c780d485c439f121e06d4c) --- .../Framework/Constants/Spells/SpellConst.cs | 24 +++++++++---------- Source/Game/Entities/Unit/Unit.cs | 19 +++++++++------ 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/Source/Framework/Constants/Spells/SpellConst.cs b/Source/Framework/Constants/Spells/SpellConst.cs index 428c45370..630569a91 100644 --- a/Source/Framework/Constants/Spells/SpellConst.cs +++ b/Source/Framework/Constants/Spells/SpellConst.cs @@ -151,31 +151,31 @@ namespace Framework.Constants public enum SpellAuraInterruptFlags2 { None = 0, - Falling = 0x01, // NYI + Falling = 0x01, // Implemented in Unit::UpdatePosition Swimming = 0x02, NotMoving = 0x04, // NYI Ground = 0x08, Transform = 0x10, // NYI Jump = 0x20, ChangeSpec = 0x40, - AbandonVehicle = 0x80, // NYI - StartOfEncounter = 0x100, // NYI - EndOfEncounter = 0x200, // NYI + AbandonVehicle = 0x80, // Implemented in Unit::_ExitVehicle + StartOfRaidEncounterAndStartOfMythicPlus = 0x100, // Implemented in Unit::AtStartOfEncounter + EndOfRaidEncounterAndStartOfMythicPlus = 0x200, // Implemented in Unit::AtEndOfEncounter Disconnect = 0x400, // NYI - EnteringInstance = 0x800, // NYI - DuelEnd = 0x1000, // NYI - LeaveArenaOrBattleground = 0x2000, // NYI + EnteringInstance = 0x800, // Implemented in Map::AddPlayerToMap + DuelEnd = 0x1000, // Implemented in Player::DuelComplete + LeaveArenaOrBattleground = 0x2000, // Implemented in Battleground::RemovePlayerAtLeave ChangeTalent = 0x4000, ChangeGlyph = 0x8000, SeamlessTransfer = 0x10000, // NYI - WarModeLeave = 0x20000, // NYI + WarModeLeave = 0x20000, // Implemented in Player::UpdateWarModeAuras TouchingGround = 0x40000, // NYI ChromieTime = 0x80000, // NYI SplineFlightOrFreeFlight = 0x100000, // NYI - ProcOrPeriodicAttacking = 0x200000, // NYI - StartOfMythicPlusRun = 0x400000, // Implemented in Unit::AtStartOfEncounter - StartOfDungeonEncounter = 0x800000, // Implemented in Unit::AtStartOfEncounter - Similar to StartOfEncounter (but only with bosses, not m+ run or battleground) - EndOfDungeonEncounter = 0x1000000, // Implemented in Unit::AtEndOfEncounter - Similar to EndOfEncounter (but only with bosses, not m+ run or battleground) + ProcOrPeriodicAttacking = 0x200000, // NYI + ChallengeModeStart = 0x400000, // Implemented in Unit::AtStartOfEncounter + StartOfEncounter = 0x800000, // Implemented in Unit::AtStartOfEncounter + EndOfEncounter = 0x1000000, // Implemented in Unit::AtEndOfEncounter } // Enum with EffectRadiusIndex and their actual radius diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index bdbea8d7d..8daae10b7 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -613,15 +613,20 @@ namespace Game.Entities public void 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; @@ -633,12 +638,12 @@ namespace Game.Entities public void 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;