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.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 76d05614af6..a40f31552f0 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -4565,9 +4565,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
@@ -4642,7 +4643,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());
@@ -4683,7 +4684,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());
}
@@ -4696,7 +4697,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)
@@ -5276,7 +5277,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);
@@ -5288,7 +5289,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))
@@ -5313,7 +5314,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;
@@ -6762,7 +6763,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()
@@ -10851,7 +10853,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)