From 998ee363c5e41141da158ea39c0dae0814967fba Mon Sep 17 00:00:00 2001 From: Teleqraph Date: Sat, 6 May 2023 21:03:00 +0200 Subject: Core/Auras: Implement SpellAuraInterruptFlags2::EndOfEncounter (#28939) Co-authored-by: Shauren --- src/server/game/Battlegrounds/Battleground.cpp | 2 ++ src/server/game/Instances/InstanceScript.cpp | 14 ++++++++++++++ src/server/game/Spells/SpellDefines.h | 4 ++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 21ca45d99db..ee768353eb7 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -912,6 +912,8 @@ void Battleground::RemovePlayerAtLeave(ObjectGuid guid, bool Transport, bool Sen player->RemoveAura(SPELL_MERCENARY_SHAPESHIFT); player->RemovePlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE); + player->AtEndOfEncounter(); + player->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::LeaveArenaOrBattleground); if (!player->IsAlive()) // resurrect on exit diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index 9abe63e469f..bbe13257978 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -414,10 +414,18 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state) break; } case FAIL: + { ResetCombatResurrections(); SendEncounterEnd(); + + instance->DoOnPlayers([](Player* player) + { + player->AtEndOfEncounter(); + }); break; + } case DONE: + { ResetCombatResurrections(); SendEncounterEnd(); dungeonEncounter = bossInfo->GetDungeonEncounterForDifficulty(instance->GetDifficultyID()); @@ -426,7 +434,13 @@ bool InstanceScript::SetBossState(uint32 id, EncounterState state) DoUpdateCriteria(CriteriaType::DefeatDungeonEncounter, dungeonEncounter->ID); SendBossKillCredit(dungeonEncounter->ID); } + + instance->DoOnPlayers([](Player* player) + { + player->AtEndOfEncounter(); + }); break; + } default: break; } diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 0af891cbdb3..30238c6e192 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -124,8 +124,8 @@ enum class SpellAuraInterruptFlags2 : uint32 Jump = 0x00000020, ChangeSpec = 0x00000040, AbandonVehicle = 0x00000080, // Implemented in Unit::_ExitVehicle - StartOfEncounter = 0x00000100, // Implemented in InstanceScript::SetBossState and Battleground::_ProcessJoin - EndOfEncounter = 0x00000200, // NYI + 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 -- cgit v1.2.3