]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv-2.0/libgameservgldl/src/DataLayer/File/FileMonsterDAO.cpp
Changed Range to be a template class so it can be used with unsigned & signed ints...
[irc/gameservirc.git] / gameserv-2.0 / libgameservgldl / src / DataLayer / File / FileMonsterDAO.cpp
index 10aed07ade8497f8825d7351e5402c9debf031f1..b612f817207583806cf49baa682dd932ba59ac69 100644 (file)
@@ -163,17 +163,27 @@ bool FileMonsterDAO::IdExists(const string &Id) const
        return (iter != spMonsterCache.end());\r
 }\r
 \r
-vector< shared_ptr<MonsterGO> > FileMonsterDAO::GetMonstersByLevelId(const string &LevelId) const\r
+vector<string> FileMonsterDAO::GetMonsterIdsByLevelId(const string &LevelId) const\r
 {\r
-       vector< shared_ptr<MonsterGO> > monsters;\r
-\r
-       map<string, shared_ptr<MonsterGO> >::const_iterator iter;\r
-       for (iter = spMonsterCache.begin(); iter != spMonsterCache.end(); iter++)\r
+       static map<string, vector<string> > MonsterLevelIndex;\r
+       map<string, vector<string> >::const_iterator leveliter;\r
+       leveliter = MonsterLevelIndex.find(LevelId);\r
+       if (leveliter == MonsterLevelIndex.end())\r
        {\r
-               if (iter->second->LevelId() == LevelId)\r
+               vector<string> monsterIds;\r
+               map<string, shared_ptr<MonsterGO> >::const_iterator iter;\r
+               for (iter = spMonsterCache.begin(); iter != spMonsterCache.end(); iter++)\r
                {\r
-                       monsters.push_back(shared_ptr<MonsterGO>(iter->second->Clone()));\r
+                       if (iter->second->LevelId() == LevelId)\r
+                       {\r
+                               monsterIds.push_back(iter->second->Id());\r
+                       }\r
                }\r
+               MonsterLevelIndex[LevelId] = monsterIds;\r
+               return monsterIds;\r
+       }\r
+       else\r
+       {\r
+               return MonsterLevelIndex[LevelId];\r
        }\r
-       return monsters;\r
 }\r