diff options
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 5987f183214..d460826685f 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4547,9 +4547,10 @@ void ObjectMgr::LoadQuests() Field* fields = result->Fetch(); uint32 questId = fields[0].GetUInt32(); - auto itr = _questTemplates.emplace(std::piecewise_construct, std::forward_as_tuple(questId), std::forward_as_tuple(fields)).first; - if (itr->second.IsAutoPush()) - _questTemplatesAutoPush.push_back(&itr->second); + 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; + if (itr->second->IsAutoPush()) + _questTemplatesAutoPush.push_back(itr->second.get()); } while (result->NextRow()); struct QuestLoaderHelper @@ -4624,7 +4625,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()); @@ -4665,7 +4666,7 @@ void ObjectMgr::LoadQuests() // Do not throw error here because error for non existing quest is thrown while loading quest objectives. we do not need duplication auto itr = _questTemplates.find(questId); if (itr != _questTemplates.end()) - itr->second.LoadQuestObjectiveVisualEffect(fields); + itr->second->LoadQuestObjectiveVisualEffect(fields); } while (result->NextRow()); } @@ -4678,7 +4679,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 items must be loaded already) @@ -5258,7 +5259,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->GetPrevQuestId()); - 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); @@ -5270,7 +5271,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)) @@ -5295,7 +5296,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; @@ -6747,7 +6748,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() @@ -10823,7 +10825,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) |