diff options
author | Teleqraph <nyrdeveloper@gmail.com> | 2023-05-06 21:03:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-06 21:03:00 +0200 |
commit | 998ee363c5e41141da158ea39c0dae0814967fba (patch) | |
tree | 07663b2482dcc0d90fa7001ab452d08b51dd34c7 | |
parent | 15135ce16f76d1635fa5606c99822b60bced94bf (diff) |
Core/Auras: Implement SpellAuraInterruptFlags2::EndOfEncounter (#28939)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
-rw-r--r-- | src/server/game/Battlegrounds/Battleground.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Instances/InstanceScript.cpp | 14 | ||||
-rw-r--r-- | 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 |