From 107fbf5aa2f9d64805c225091eecc39ed121c82f Mon Sep 17 00:00:00 2001 From: funjoker Date: Sat, 26 Jun 2021 00:47:02 +0200 Subject: [PATCH] Core/Misc: Fix zonewide spell_area not being updated on quest update --- src/server/game/Entities/Player/Player.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 26ab0dc1064..75ceeba5c86 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15679,11 +15679,25 @@ void Player::SendQuestUpdate(uint32 questId) uint32 zone = 0, area = 0; GetZoneAndAreaId(zone, area); - SpellAreaForQuestAreaMapBounds saBounds = sSpellMgr->GetSpellAreaForQuestAreaMapBounds(area, questId); + SpellAreaForQuestAreaMapBounds saZoneBounds = sSpellMgr->GetSpellAreaForQuestAreaMapBounds(zone, questId); - if (saBounds.first != saBounds.second) + if (saZoneBounds.first != saZoneBounds.second) { - for (SpellAreaForQuestAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr) + for (SpellAreaForQuestAreaMap::const_iterator itr = saZoneBounds.first; itr != saZoneBounds.second; ++itr) + { + if (itr->second->flags & SPELL_AREA_FLAG_AUTOREMOVE && !itr->second->IsFitToRequirements(this, zone, area)) + RemoveAurasDueToSpell(itr->second->spellId); + else if (itr->second->flags & SPELL_AREA_FLAG_AUTOCAST) + if (!HasAura(itr->second->spellId)) + CastSpell(this, itr->second->spellId, true); + } + } + + SpellAreaForQuestAreaMapBounds saAreaBounds = sSpellMgr->GetSpellAreaForQuestAreaMapBounds(area, questId); + + if (saAreaBounds.first != saAreaBounds.second) + { + for (SpellAreaForQuestAreaMap::const_iterator itr = saAreaBounds.first; itr != saAreaBounds.second; ++itr) { if (itr->second->flags & SPELL_AREA_FLAG_AUTOREMOVE && !itr->second->IsFitToRequirements(this, zone, area)) RemoveAurasDueToSpell(itr->second->spellId);