diff options
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 67bf9047c82..3aea616d607 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4759,7 +4759,8 @@ void ObjectMgr::LoadQuests() Field* fields = result->Fetch(); uint32 questId = fields[0].GetUInt32(); - _questTemplates.emplace(std::piecewise_construct, std::forward_as_tuple(questId), std::forward_as_tuple(fields)); + auto itr = _questTemplates.emplace(std::piecewise_construct, std::forward_as_tuple(questId), std::forward_as_tuple(new Quest(fields))).first; + itr->second->_weakRef = itr->second; } while (result->NextRow()); std::unordered_map<uint32, uint32> usedMailTemplates; @@ -4808,7 +4809,7 @@ void ObjectMgr::LoadQuests() auto itr = _questTemplates.find(questId); if (itr != _questTemplates.end()) - (itr->second.*loader.LoaderFunction)(fields); + (itr->second.get()->*loader.LoaderFunction)(fields); else TC_LOG_ERROR("server.loading", "Table `{}` has data for quest {} but such quest does not exist", loader.TableName, questId); } while (result->NextRow()); @@ -4822,7 +4823,7 @@ void ObjectMgr::LoadQuests() if (DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, questPair.first, nullptr)) continue; - Quest* qinfo = &questPair.second; + Quest* qinfo = questPair.second.get(); // additional quest integrity checks (GO, creature_template and item_template must be loaded already) @@ -5329,7 +5330,7 @@ void ObjectMgr::LoadQuests() auto prevQuestItr = _questTemplates.find(prevQuestId); if (prevQuestItr == _questTemplates.end()) TC_LOG_ERROR("sql.sql", "Quest {} has PrevQuestId {}, but no such quest", qinfo->GetQuestId(), qinfo->_prevQuestId); - else if (prevQuestItr->second._breadcrumbForQuestId) + else if (prevQuestItr->second->_breadcrumbForQuestId) TC_LOG_ERROR("sql.sql", "Quest {} should not be unlocked by breadcrumb quest {}", qinfo->_id, prevQuestId); else if (qinfo->_prevQuestId > 0) qinfo->DependentPreviousQuests.push_back(prevQuestId); @@ -5341,7 +5342,7 @@ void ObjectMgr::LoadQuests() if (nextQuestItr == _questTemplates.end()) TC_LOG_ERROR("sql.sql", "Quest {} has NextQuestId {}, but no such quest", qinfo->GetQuestId(), qinfo->_nextQuestId); else - nextQuestItr->second.DependentPreviousQuests.push_back(qinfo->GetQuestId()); + nextQuestItr->second->DependentPreviousQuests.push_back(qinfo->GetQuestId()); } if (uint32 breadcrumbForQuestId = std::abs(qinfo->_breadcrumbForQuestId)) @@ -5390,7 +5391,7 @@ void ObjectMgr::LoadQuests() if (DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, questPair.first, nullptr)) continue; - Quest* qinfo = &questPair.second; + Quest* qinfo = questPair.second.get(); uint32 qid = qinfo->GetQuestId(); uint32 breadcrumbForQuestId = std::abs(qinfo->_breadcrumbForQuestId); std::set<uint32> questSet; @@ -6934,7 +6935,8 @@ uint32 ObjectMgr::GetTaxiMountDisplayId(uint32 id, uint32 team, bool allowed_alt Quest const* ObjectMgr::GetQuestTemplate(uint32 quest_id) const { - return Trinity::Containers::MapGetValuePtr(_questTemplates, quest_id); + auto itr = _questTemplates.find(quest_id); + return itr != _questTemplates.end() ? itr->second.get() : nullptr; } void ObjectMgr::LoadGraveyardZones() @@ -10475,7 +10477,7 @@ void ObjectMgr::InitializeQueriesData(QueryDataGroup mask) // Initialize Query Data for quests if (mask & QUERY_DATA_QUESTS) for (auto& questTemplatePair : _questTemplates) - pool.PostWork([quest = &questTemplatePair.second]() { quest->InitializeQueryData(); }); + pool.PostWork([quest = questTemplatePair.second.get()]() { quest->InitializeQueryData(); }); // Initialize Quest POI data if (mask & QUERY_DATA_POIS) |