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