Skip to content

Commit

Permalink
Refactor m_mNpcEntryGuidCollection and add GO option
Browse files Browse the repository at this point in the history
  • Loading branch information
killerwife committed May 29, 2017
1 parent 00accb7 commit 274222f
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 19 deletions.
14 changes: 11 additions & 3 deletions src/game/AI/ScriptDevAI/include/sc_instance.cpp
Expand Up @@ -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<EntryGuidSet::iterator, EntryGuidSet::iterator> 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;
}

/**
Expand Down
8 changes: 5 additions & 3 deletions src/game/AI/ScriptDevAI/include/sc_instance.h
Expand Up @@ -27,15 +27,16 @@ class ScriptedInstance : public InstanceData
{
public:
typedef std::map<uint32, ObjectGuid> EntryGuidMap;
typedef std::multimap<uint32, ObjectGuid> EntryGuidSet;
typedef std::unordered_map<uint32, GuidVector> EntryGuidCollection;

ScriptedInstance(Map* pMap) : InstanceData(pMap) {}
~ScriptedInstance() {}

// 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);
Expand Down Expand Up @@ -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)
Expand Down
22 changes: 10 additions & 12 deletions src/game/AI/ScriptDevAI/scripts/outland/blades_edge_mountains.cpp
Expand Up @@ -988,22 +988,21 @@ 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);
}

Reset();
}

ScriptedMap* m_pMap;
typedef std::multimap<uint32, ObjectGuid> EntryGuidSet;

uint8 m_uiBunnyId;
uint32 m_uiCastTimer;
Expand Down Expand Up @@ -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<uint32, ObjectGuid> EntryGuidSet;
EntryGuidSet m_uiBunnyGuids;
GuidVector m_uiBunnyGuids;

bool m_uiSpawned;
bool m_uiActiveCircles[5];
Expand Down Expand Up @@ -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++)
Expand All @@ -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;
Expand All @@ -1142,8 +1140,8 @@ struct npc_vimgol_middle_bunnyAI : public ScriptedAI
std::list<Creature*> 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);
}
Expand Down
Expand Up @@ -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;
}
}
Expand Down

0 comments on commit 274222f

Please sign in to comment.