diff options
| author | AlιAѕѕaѕѕιN <AilSynthax@gmail.com> | 2019-08-28 10:33:41 +0430 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-12-18 21:31:17 +0100 |
| commit | e1598fa1d64b46fc53607182898fae2da172957b (patch) | |
| tree | 763306eb21e782a14b331ba5b6d26f2e9b597ce1 /src/server/game/Spells/SpellMgr.cpp | |
| parent | 9d3dd3db84a86f77a77d78039b5ad3a9b873ef10 (diff) | |
[3.3.5] Fix spell_area not checking for zoneID for quests (#23719)
* Fix spell_area not checking for zoneID for quests
* Addendum to bdffe0a4a641414fe26c9b75b00f8e70ff0f1cb8
* Fix spell_area handle same spell with the same quests
Also fix not checking for quest_end at all.
* Addendum to 2d6b0545e3762b3a25005726d4093cf4a7945a8d
* Better commenting for 7a50189de3104f000d8b31fa6c415bb69cf1a3e7
* Addendum to 2d6b0545e3762b3a25005726d4093cf4a7945a8d
(cherry picked from commit 92d83c3c2eaba3f5b58dc98472318872f3a54706)
Diffstat (limited to 'src/server/game/Spells/SpellMgr.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index b9e20688c9f..313108a5f30 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -685,11 +685,6 @@ SpellAreaForAreaMapBounds SpellMgr::GetSpellAreaForAreaMapBounds(uint32 area_id) return mSpellAreaForAreaMap.equal_range(area_id); } -SpellAreaForQuestAreaMapBounds SpellMgr::GetSpellAreaForQuestAreaMapBounds(uint32 area_id, uint32 quest_id) const -{ - return mSpellAreaForQuestAreaMap.equal_range(std::pair<uint32, uint32>(area_id, quest_id)); -} - SpellInfo const* SpellMgr::GetSpellInfo(uint32 spellId, Difficulty difficulty) const { auto itr = mSpellInfoMap.find(boost::make_tuple(spellId, difficulty)); @@ -2287,7 +2282,6 @@ void SpellMgr::LoadSpellAreas() mSpellAreaForQuestMap.clear(); mSpellAreaForQuestEndMap.clear(); mSpellAreaForAuraMap.clear(); - mSpellAreaForQuestAreaMap.clear(); // 0 1 2 3 4 5 6 7 8 9 QueryResult result = WorldDatabase.Query("SELECT spell, area, quest_start, quest_start_status, quest_end_status, quest_end, aura_spell, racemask, gender, flags FROM spell_area"); @@ -2449,9 +2443,19 @@ void SpellMgr::LoadSpellAreas() if (spellArea.areaId) mSpellAreaForAreaMap.insert(SpellAreaForAreaMap::value_type(spellArea.areaId, sa)); - // for search at quest start/reward - if (spellArea.questStart) - mSpellAreaForQuestMap.insert(SpellAreaForQuestMap::value_type(spellArea.questStart, sa)); + // for search at quest update checks + if (spellArea.questStart || spellArea.questEnd) + { + if (spellArea.questStart == spellArea.questEnd) + mSpellAreaForQuestMap.insert(SpellAreaForQuestMap::value_type(spellArea.questStart, sa)); + else + { + if (spellArea.questStart) + mSpellAreaForQuestMap.insert(SpellAreaForQuestMap::value_type(spellArea.questStart, sa)); + if (spellArea.questEnd) + mSpellAreaForQuestMap.insert(SpellAreaForQuestMap::value_type(spellArea.questEnd, sa)); + } + } // for search at quest start/reward if (spellArea.questEnd) @@ -2461,12 +2465,6 @@ void SpellMgr::LoadSpellAreas() if (spellArea.auraSpell) mSpellAreaForAuraMap.insert(SpellAreaForAuraMap::value_type(abs(spellArea.auraSpell), sa)); - if (spellArea.areaId && spellArea.questStart) - mSpellAreaForQuestAreaMap.insert(SpellAreaForQuestAreaMap::value_type(std::pair<uint32, uint32>(spellArea.areaId, spellArea.questStart), sa)); - - if (spellArea.areaId && spellArea.questEnd) - mSpellAreaForQuestAreaMap.insert(SpellAreaForQuestAreaMap::value_type(std::pair<uint32, uint32>(spellArea.areaId, spellArea.questEnd), sa)); - ++count; } while (result->NextRow()); |
