diff options
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index ef19db50d51..b063d786aa5 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3863,6 +3863,7 @@ void ObjectMgr::LoadQuests() for (QuestMap::const_iterator itr=_questTemplates.begin(); itr != _questTemplates.end(); ++itr) delete itr->second; _questTemplates.clear(); + _questObjectives.clear(); mExclusiveQuestGroups.clear(); @@ -4308,6 +4309,9 @@ void ObjectMgr::LoadQuests() for (QuestObjective const& obj : qinfo->GetObjectives()) { + // Store objective for lookup by id + _questObjectives[obj.ID] = std::make_pair(&obj, qinfo->GetQuestId()); + // Check storage index for objectives which store data if (obj.StorageIndex < 0) { @@ -4388,9 +4392,7 @@ void ObjectMgr::LoadQuests() TC_LOG_ERROR("sql.sql", "Quest %u objective %u has non existing criteria tree id %d", qinfo->GetQuestId(), obj.ID, obj.ObjectID); break; case QUEST_OBJECTIVE_AREATRIGGER: - if (sAreaTriggerStore.LookupEntry(uint32(obj.ObjectID))) - _questAreaTriggerStore[obj.ObjectID].insert(qinfo->ID); - else if (obj.ObjectID != -1) + if (!sAreaTriggerStore.LookupEntry(uint32(obj.ObjectID)) && obj.ObjectID != -1) TC_LOG_ERROR("sql.sql", "Quest %u objective %u has non existing areatrigger id %d", qinfo->GetQuestId(), obj.ID, obj.ObjectID); break; case QUEST_OBJECTIVE_MONEY: @@ -5859,6 +5861,13 @@ void ObjectMgr::LoadQuestAreaTriggers() } while (result->NextRow()); + for (auto const& pair : _questObjectives) + { + QuestObjective const* objective = pair.second.first; + if (objective->Type == QUEST_OBJECTIVE_AREATRIGGER) + _questAreaTriggerStore[objective->ObjectID].insert(pair.second.second); + } + TC_LOG_INFO("server.loading", ">> Loaded %u quest trigger points in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } |