aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Globals/ObjectMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp15
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));
}