From 8c1b72937592cd3082bd25bc2fd01d21ce50e4e4 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Tue, 28 Jun 2022 22:19:35 +0200 Subject: [PATCH] fix(Core/Spells): Removed any triggered auras on glyph removal. (#12168) * fix(Core/Spells): Removed any triggered auras on glyph removal. Fixes #11939 * Update. --- src/server/game/Handlers/CharacterHandler.cpp | 17 +++++++++++++++++ src/server/game/Spells/SpellEffects.cpp | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index d3118660c..718dfce06 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1579,6 +1579,23 @@ void WorldSession::HandleRemoveGlyph(WorldPacket& recvData) if (GlyphPropertiesEntry const* glyphEntry = sGlyphPropertiesStore.LookupEntry(glyph)) { _player->RemoveAurasDueToSpell(glyphEntry->SpellId); + + // Removed any triggered auras + Unit::AuraMap& ownedAuras = _player->GetOwnedAuras(); + for (Unit::AuraMap::iterator iter = ownedAuras.begin(); iter != ownedAuras.end();) + { + Aura* aura = iter->second; + if (SpellInfo const* triggeredByAuraSpellInfo = aura->GetTriggeredByAuraSpellInfo()) + { + if (triggeredByAuraSpellInfo->Id == glyphEntry->SpellId) + { + _player->RemoveOwnedAura(iter); + continue; + } + } + ++iter; + } + _player->SendLearnPacket(glyphEntry->SpellId, false); // Send packet to properly handle client-side spell tooltips _player->SetGlyph(slot, 0, true); _player->SendTalentsInfoData(false); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 1097e49b5..bf087abac 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4401,6 +4401,23 @@ void Spell::EffectApplyGlyph(SpellEffIndex effIndex) if (GlyphPropertiesEntry const* oldGlyphEntry = sGlyphPropertiesStore.LookupEntry(oldGlyph)) { player->RemoveAurasDueToSpell(oldGlyphEntry->SpellId); + + // Removed any triggered auras + Unit::AuraMap& ownedAuras = player->GetOwnedAuras(); + for (Unit::AuraMap::iterator iter = ownedAuras.begin(); iter != ownedAuras.end();) + { + Aura* aura = iter->second; + if (SpellInfo const* triggeredByAuraSpellInfo = aura->GetTriggeredByAuraSpellInfo()) + { + if (triggeredByAuraSpellInfo->Id == oldGlyphEntry->SpellId) + { + player->RemoveOwnedAura(iter); + continue; + } + } + ++iter; + } + player->SendLearnPacket(oldGlyphEntry->SpellId, false); // Send packet to properly handle client-side spell tooltips }