diff --git a/src/game/AI/ScriptDevAI/include/sc_instance.cpp b/src/game/AI/ScriptDevAI/include/sc_instance.cpp index 3dcb925a69c..64548ab40a5 100644 --- a/src/game/AI/ScriptDevAI/include/sc_instance.cpp +++ b/src/game/AI/ScriptDevAI/include/sc_instance.cpp @@ -196,10 +196,18 @@ void ScriptedInstance::DoStartTimedAchievement(AchievementCriteriaTypes criteria debug_log("SD2: DoStartTimedAchievement attempt start achievements but no players in map."); } -void ScriptedInstance::GetCreatureGuidMapFromStorage(uint32 uiEntry, EntryGuidSet &uiEntryGuidSet, bool bSkipDebugLog) +void ScriptedInstance::GetCreatureGuidVectorFromStorage(uint32 uiEntry, GuidVector &uiEntryGuidVector, bool bSkipDebugLog) { - std::pair range = m_mNpcEntryGuidCollection.equal_range(uiEntry); - uiEntryGuidSet.insert(range.first, range.second); + auto iter = m_mNpcEntryGuidCollection.find(uiEntry); + if (iter != m_mNpcEntryGuidCollection.end()) + uiEntryGuidVector = (*iter).second; +} + +void ScriptedInstance::GetGameObjectGuidVectorFromStorage(uint32 uiEntry, GuidVector &uiEntryGuidVector, bool bSkipDebugLog) +{ + auto iter = m_mGoEntryGuidCollection.find(uiEntry); + if (iter != m_mGoEntryGuidCollection.end()) + uiEntryGuidVector = (*iter).second; } /** diff --git a/src/game/AI/ScriptDevAI/include/sc_instance.h b/src/game/AI/ScriptDevAI/include/sc_instance.h index 4622fc5c8c1..d9de259577c 100644 --- a/src/game/AI/ScriptDevAI/include/sc_instance.h +++ b/src/game/AI/ScriptDevAI/include/sc_instance.h @@ -27,7 +27,7 @@ class ScriptedInstance : public InstanceData { public: typedef std::map EntryGuidMap; - typedef std::multimap EntryGuidSet; + typedef std::unordered_map EntryGuidCollection; ScriptedInstance(Map* pMap) : InstanceData(pMap) {} ~ScriptedInstance() {} @@ -35,7 +35,8 @@ class ScriptedInstance : public InstanceData // Default accessor functions GameObject* GetSingleGameObjectFromStorage(uint32 uiEntry); Creature* GetSingleCreatureFromStorage(uint32 uiEntry, bool bSkipDebugLog = false); - void GetCreatureGuidMapFromStorage(uint32 uiEntry, EntryGuidSet &uiEntryGuidSet, bool bSkipDebugLog = false); + void GetCreatureGuidVectorFromStorage(uint32 uiEntry, GuidVector &uiEntryGuidVector, bool bSkipDebugLog = false); + void GetGameObjectGuidVectorFromStorage(uint32 uiEntry, GuidVector &uiEntryGuidVector, bool bSkipDebugLog = false); // Change active state of doors or buttons void DoUseDoorOrButton(ObjectGuid guid, uint32 uiWithRestoreTime = 0, bool bUseAlternativeState = false); @@ -69,7 +70,8 @@ class ScriptedInstance : public InstanceData // Storage for GO-Guids and NPC-Guids EntryGuidMap m_mGoEntryGuidStore; ///< Store unique GO-Guids by entry EntryGuidMap m_mNpcEntryGuidStore; ///< Store unique NPC-Guids by entry - EntryGuidSet m_mNpcEntryGuidCollection; ///< Store all Guids by entry + EntryGuidCollection m_mNpcEntryGuidCollection; ///< Store all Guids by entry + EntryGuidCollection m_mGoEntryGuidCollection; ///< Store all Guids by entry }; // Class for world maps (May need additional zone-wide functions later on) diff --git a/src/game/AI/ScriptDevAI/scripts/outland/blades_edge_mountains.cpp b/src/game/AI/ScriptDevAI/scripts/outland/blades_edge_mountains.cpp index 18330fdeef4..3267302f2f4 100644 --- a/src/game/AI/ScriptDevAI/scripts/outland/blades_edge_mountains.cpp +++ b/src/game/AI/ScriptDevAI/scripts/outland/blades_edge_mountains.cpp @@ -988,14 +988,14 @@ struct npc_vimgol_visual_bunnyAI : public ScriptedAI { m_pMap = (ScriptedMap*)pCreature->GetInstanceData(); - EntryGuidSet bunnyGuids; + GuidVector bunnyGuids; if (m_pMap) { - m_pMap->GetCreatureGuidMapFromStorage(m_creature->GetEntry(), bunnyGuids); + m_pMap->GetCreatureGuidVectorFromStorage(m_creature->GetEntry(), bunnyGuids); - for (EntryGuidSet::iterator it = bunnyGuids.begin(); it != bunnyGuids.end(); ++it) - if (it->second == m_creature->GetObjectGuid()) + for (auto it = bunnyGuids.begin(); it != bunnyGuids.end(); ++it) + if ((*it) == m_creature->GetObjectGuid()) m_uiBunnyId = std::distance(bunnyGuids.begin(), it); } @@ -1003,7 +1003,6 @@ struct npc_vimgol_visual_bunnyAI : public ScriptedAI } ScriptedMap* m_pMap; - typedef std::multimap EntryGuidSet; uint8 m_uiBunnyId; uint32 m_uiCastTimer; @@ -1060,14 +1059,13 @@ struct npc_vimgol_middle_bunnyAI : public ScriptedAI m_pMap = (ScriptedMap*)pCreature->GetInstanceData(); if (m_pMap) - m_pMap->GetCreatureGuidMapFromStorage(NPC_VIMGOL_VISUAL_BUNNY, m_uiBunnyGuids); + m_pMap->GetCreatureGuidVectorFromStorage(NPC_VIMGOL_VISUAL_BUNNY, m_uiBunnyGuids); Reset(); } ScriptedMap* m_pMap; - typedef std::multimap EntryGuidSet; - EntryGuidSet m_uiBunnyGuids; + GuidVector m_uiBunnyGuids; bool m_uiSpawned; bool m_uiActiveCircles[5]; @@ -1098,7 +1096,7 @@ struct npc_vimgol_middle_bunnyAI : public ScriptedAI if (m_uiBunnyGuids.size() < 5 && m_pMap) { m_uiBunnyGuids.clear(); - m_pMap->GetCreatureGuidMapFromStorage(NPC_VIMGOL_VISUAL_BUNNY, m_uiBunnyGuids); + m_pMap->GetCreatureGuidVectorFromStorage(NPC_VIMGOL_VISUAL_BUNNY, m_uiBunnyGuids); } for (int i = 0; i < 5; i++) @@ -1119,7 +1117,7 @@ struct npc_vimgol_middle_bunnyAI : public ScriptedAI if (!(*itr)->GetAura(tmpAuras[i], SpellEffectIndex(0))) continue; - if (it->second != (*itr)->GetAura(tmpAuras[i], SpellEffectIndex(0))->GetCasterGuid()) + if ((*it) != (*itr)->GetAura(tmpAuras[i], SpellEffectIndex(0))->GetCasterGuid()) continue; m_uiActiveCircles[std::distance(m_uiBunnyGuids.begin(), it)] = true; @@ -1142,8 +1140,8 @@ struct npc_vimgol_middle_bunnyAI : public ScriptedAI std::list creatureList; GetCreatureListWithEntryInGrid(creatureList, m_creature, NPC_VIMGOL_VISUAL_BUNNY, 200.0f); for (auto& bunny : creatureList) - for (EntryGuidSet::iterator it = m_uiBunnyGuids.begin(); it != m_uiBunnyGuids.end(); ++it) - if (it->second == bunny->GetObjectGuid()) + for (auto it = m_uiBunnyGuids.begin(); it != m_uiBunnyGuids.end(); ++it) + if ((*it) == bunny->GetObjectGuid()) if (m_uiActiveCircles[std::distance(m_uiBunnyGuids.begin(), it)]) bunny->CastSpell(pTarget ? pTarget : bunny, uSpell, TRIGGERED_OLD_TRIGGERED); } diff --git a/src/game/AI/ScriptDevAI/scripts/world/world_map_scripts.cpp b/src/game/AI/ScriptDevAI/scripts/world/world_map_scripts.cpp index 0b30630f081..ae7deded281 100644 --- a/src/game/AI/ScriptDevAI/scripts/world/world_map_scripts.cpp +++ b/src/game/AI/ScriptDevAI/scripts/world/world_map_scripts.cpp @@ -241,7 +241,7 @@ struct world_map_outland : public ScriptedMap m_mNpcEntryGuidStore[NPC_EMISSARY_OF_HATE] = pCreature->GetObjectGuid(); break; case NPC_VIMGOL_VISUAL_BUNNY: - m_mNpcEntryGuidCollection.insert(EntryGuidSet::value_type(pCreature->GetEntry(), pCreature->GetObjectGuid())); + m_mNpcEntryGuidCollection[pCreature->GetEntry()].push_back(pCreature->GetObjectGuid()); break; } }