Fix for sub checking on global npc quests

This commit is contained in:
KimLS 2013-02-17 15:36:53 -08:00
parent c6d8895b70
commit 4e802921a5

View File

@ -51,34 +51,74 @@ void QuestParserCollection::ReloadQuests(bool reset_timers) {
bool QuestParserCollection::HasQuestSub(uint32 npcid, const char *subname) {
std::map<uint32, uint32>::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<uint32, QuestInterface*>::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<uint32, uint32>::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<uint32, QuestInterface*>::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;
}