bool QuestParserCollection::HasQuestSubLocal(uint32 npcid, QuestEventID evt) { std::map<uint32, uint32>::iterator iter = _npc_quest_status.find(npcid); if(iter != _npc_quest_status.end()) { //loaded or failed to load if(iter->second != QuestFailedToLoad) { std::map<uint32, QuestInterface*>::iterator qiter = _interfaces.find(iter->second); if(qiter->second->HasQuestSub(npcid, evt)) { return true; } } } else { std::string filename; QuestInterface *qi = GetQIByNPCQuest(npcid, filename); if(qi) { _npc_quest_status[npcid] = qi->GetIdentifier(); qi->LoadNPCScript(filename, npcid); if(qi->HasQuestSub(npcid, evt)) { return true; } } else { _npc_quest_status[npcid] = QuestFailedToLoad; } } return false; }
int QuestParserCollection::EventNPCLocal(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, std::vector<void*> *extra_pointers) { std::map<uint32, uint32>::iterator iter = _npc_quest_status.find(npc->GetNPCTypeID()); if(iter != _npc_quest_status.end()) { //loaded or failed to load if(iter->second != QuestFailedToLoad) { std::map<uint32, QuestInterface*>::iterator qiter = _interfaces.find(iter->second); return qiter->second->EventNPC(evt, npc, init, data, extra_data, extra_pointers); } } else { std::string filename; QuestInterface *qi = GetQIByNPCQuest(npc->GetNPCTypeID(), filename); if(qi) { _npc_quest_status[npc->GetNPCTypeID()] = qi->GetIdentifier(); qi->LoadNPCScript(filename, npc->GetNPCTypeID()); return qi->EventNPC(evt, npc, init, data, extra_data, extra_pointers); } else { _npc_quest_status[npc->GetNPCTypeID()] = QuestFailedToLoad; } } return 0; }