diff options
author | raczman <none@none> | 2009-03-31 00:15:17 +0200 |
---|---|---|
committer | raczman <none@none> | 2009-03-31 00:15:17 +0200 |
commit | 075d8a44a5fae838f7a92da9945fe8b9c71d65f9 (patch) | |
tree | dd5056238128ae4973a393b08ea81f579c99dc31 /src | |
parent | 8e308da25990a965750ec795dd22f9c104b10ceb (diff) |
Optimize storage for eventAI. Store as Map of creature id's linked to vectors of events used by that creature id
Author of both commits: NoFantasy.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/bindings/scripts/ScriptMgr.cpp | 8 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/creature/mob_event_ai.cpp | 33 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/creature/mob_event_ai.h | 2 |
3 files changed, 25 insertions, 18 deletions
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp index 0d7f47a4c84..156358eddd9 100644 --- a/src/bindings/scripts/ScriptMgr.cpp +++ b/src/bindings/scripts/ScriptMgr.cpp @@ -52,7 +52,7 @@ UNORDERED_MAP<int32, StringTextData> TextMap; //*** EventAI data *** //Event AI structure. Used exclusivly by mob_event_ai.cpp (60 bytes each) -std::list<EventAI_Event> EventAI_Event_List; +UNORDERED_MAP<uint32, std::vector<EventAI_Event> > EventAI_Event_Map; //Event AI summon structure. Used exclusivly by mob_event_ai.cpp. UNORDERED_MAP<uint32, EventAI_Summon> EventAI_Summon_Map; @@ -901,7 +901,7 @@ void LoadDatabase() "FROM eventai_scripts"); //Drop Existing EventAI List - EventAI_Event_List.clear(); + EventAI_Event_Map.clear(); outstring_log("TSCR: Loading EventAI scripts..."); if (result) @@ -919,6 +919,7 @@ void LoadDatabase() temp.event_id = fields[0].GetUInt32(); uint32 i = temp.event_id; temp.creature_id = fields[1].GetUInt32(); + uint32 creature_id = temp.creature_id; temp.event_type = fields[2].GetUInt16(); temp.event_inverse_phase_mask = fields[3].GetUInt32(); temp.event_chance = fields[4].GetUInt8(); @@ -1282,7 +1283,8 @@ void LoadDatabase() } //Add to list - EventAI_Event_List.push_back(temp); + EventAI_Event_Map[creature_id].push_back(temp); + ++Count; } while (result->NextRow()); diff --git a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp b/src/bindings/scripts/scripts/creature/mob_event_ai.cpp index b302f1b3837..233c93d34b1 100644 --- a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp +++ b/src/bindings/scripts/scripts/creature/mob_event_ai.cpp @@ -1381,15 +1381,17 @@ CreatureAI* GetAI_Mob_EventAI(Creature *pCreature) { //Select events by creature id std::list<EventHolder> EventList; - uint32 ID = pCreature->GetEntry(); - std::list<EventAI_Event>::iterator i; + //Find creature id in the Event map + UNORDERED_MAP<uint32, std::vector<EventAI_Event> >::iterator CreatureEvents = EventAI_Event_Map.find(pCreature->GetEntry()); - for (i = EventAI_Event_List.begin(); i != EventAI_Event_List.end(); ++i) + if (CreatureEvents != EventAI_Event_Map.end()) { - if ((*i).creature_id == ID) + std::vector<EventAI_Event>::iterator i; + + for (i = (*CreatureEvents).second.begin(); i != (*CreatureEvents).second.end(); ++i) { -//Debug check + //Debug check #ifndef _DEBUG if ((*i).event_flags & EFLAG_DEBUG_ONLY) continue; @@ -1404,16 +1406,19 @@ CreatureAI* GetAI_Mob_EventAI(Creature *pCreature) EventList.push_back(EventHolder(*i)); } - } - - //EventAI is pointless to use without events and may cause crashes - if (EventList.empty()) - { - if (EAI_ErrorLevel > 1) - error_db_log("SD2: Eventlist for Creature %u is empty but creature is using Mob_EventAI. Preventing EventAI on this creature.", pCreature->GetEntry()); - return NULL; - } + //EventMap had events but they were not added because they must be for instance + if (EventList.empty()) + { + if (EAI_ErrorLevel > 1) + error_db_log("SD2: CreatureId has events but no events added to list because of instance flags.", pCreature->GetEntry()); + } + } + else + { + if (EAI_ErrorLevel > 1) + error_db_log("SD2: EventMap for Creature %u is empty but creature is using Mob_EventAI.", pCreature->GetEntry()); + } return new Mob_EventAI (pCreature, EventList); } diff --git a/src/bindings/scripts/scripts/creature/mob_event_ai.h b/src/bindings/scripts/scripts/creature/mob_event_ai.h index 39bf050cd70..aff54b824f4 100644 --- a/src/bindings/scripts/scripts/creature/mob_event_ai.h +++ b/src/bindings/scripts/scripts/creature/mob_event_ai.h @@ -186,7 +186,7 @@ struct EventAI_Event }; //Event_Map -extern std::list<EventAI_Event> EventAI_Event_List; +extern UNORDERED_MAP<uint32, std::vector<EventAI_Event> > EventAI_Event_Map; struct EventAI_Summon { |