diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-03-19 17:25:00 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-03-19 17:25:00 +0100 |
| commit | d4176eb2f1a1860ee0691111d62cb8b231ac2fff (patch) | |
| tree | 568323c74c82c4af94a6fc12081fc05303bcfb9e /src/server/game/Globals/ObjectMgr.cpp | |
| parent | 27bf4010b8d12c27d3d8f6df40bff3d9b1a425b1 (diff) | |
Core/Quests: Fixed loading areatriggers linked to quest by objective and expose ObjectMgr::GetQuestObjective to lookup quest objectives by id (for conditions)
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)); } |
