From 4e802921a51fef0d40900c10724c94ce67530d32 Mon Sep 17 00:00:00 2001 From: KimLS Date: Sun, 17 Feb 2013 15:36:53 -0800 Subject: [PATCH] Fix for sub checking on global npc quests --- zone/QuestParserCollection.cpp | 72 ++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 16 deletions(-) diff --git a/zone/QuestParserCollection.cpp b/zone/QuestParserCollection.cpp index 0d6debad3..af82c2958 100644 --- a/zone/QuestParserCollection.cpp +++ b/zone/QuestParserCollection.cpp @@ -51,34 +51,74 @@ void QuestParserCollection::ReloadQuests(bool reset_timers) { bool QuestParserCollection::HasQuestSub(uint32 npcid, const char *subname) { std::map::iterator iter = _npc_quest_status.find(npcid); - if(_global_npc_quest_status == QuestUnloaded){ - QuestInterface *qi = GetQIByGlobalNPCQuest(); - if(qi) { - _global_npc_quest_status = qi->GetIdentifier(); - return qi->HasGlobalQuestSub(subname); - } - } - + if(iter != _npc_quest_status.end()) { //loaded or failed to load if(iter->second != QuestFailedToLoad) { std::map::iterator qiter = _interfaces.find(iter->second); - return qiter->second->HasQuestSub(npcid, subname) || qiter->second->HasGlobalQuestSub(subname); + if(qiter->second->HasQuestSub(npcid, subname)) { + return true; + } } } else { - QuestInterface *qi = GetQIByGlobalNPCQuest(); - if(qi) { - _global_npc_quest_status = qi->GetIdentifier(); - } - - qi = GetQIByNPCQuest(npcid); + QuestInterface *qi = GetQIByNPCQuest(npcid); if(qi) { _npc_quest_status[npcid] = qi->GetIdentifier(); - return qi->HasQuestSub(npcid, subname) || qi->HasGlobalQuestSub(subname); + if(qi->HasQuestSub(npcid, subname)) { + return true; + } } else { _npc_quest_status[npcid] = QuestFailedToLoad; } } + + if(_global_npc_quest_status == QuestUnloaded){ + QuestInterface *qi = GetQIByGlobalNPCQuest(); + if(qi) { + _global_npc_quest_status = qi->GetIdentifier(); + if(qi->HasGlobalQuestSub(subname)) { + return true; + } + } + } else { + QuestInterface *qi = GetQIByGlobalNPCQuest(); + if(qi) { + _global_npc_quest_status = qi->GetIdentifier(); + if(qi->HasGlobalQuestSub(subname)) { + return true; + } + } + } + + //std::map::iterator iter = _npc_quest_status.find(npcid); + //if(_global_npc_quest_status == QuestUnloaded){ + // QuestInterface *qi = GetQIByGlobalNPCQuest(); + // if(qi) { + // _global_npc_quest_status = qi->GetIdentifier(); + // return qi->HasGlobalQuestSub(subname); + // } + //} + // + //if(iter != _npc_quest_status.end()) { + // //loaded or failed to load + // if(iter->second != QuestFailedToLoad) { + // std::map::iterator qiter = _interfaces.find(iter->second); + // return qiter->second->HasQuestSub(npcid, subname) || qiter->second->HasGlobalQuestSub(subname); + // } + //} else { + // QuestInterface *qi = GetQIByGlobalNPCQuest(); + // if(qi) { + // _global_npc_quest_status = qi->GetIdentifier(); + // } + // + // qi = GetQIByNPCQuest(npcid); + // if(qi) { + // _npc_quest_status[npcid] = qi->GetIdentifier(); + // return qi->HasQuestSub(npcid, subname) || qi->HasGlobalQuestSub(subname); + // } else { + // _npc_quest_status[npcid] = QuestFailedToLoad; + // } + //} return false; }