aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Globals
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Globals')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp18
-rw-r--r--src/server/game/Globals/ObjectMgr.h3
2 files changed, 12 insertions, 9 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)
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 6eb39767842..cdd1981ada0 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -34,6 +34,7 @@
#include "SharedDefines.h"
#include "Trainer.h"
#include "VehicleDefines.h"
+#include "UniqueTrackablePtr.h"
#include <iterator>
#include <map>
#include <unordered_map>
@@ -945,7 +946,7 @@ class TC_GAME_API ObjectMgr
static ObjectMgr* instance();
- typedef std::unordered_map<uint32, Quest> QuestContainer;
+ typedef std::unordered_map<uint32, Trinity::unique_trackable_ptr<Quest>> QuestContainer;
typedef std::unordered_map<uint32, AreaTrigger> AreaTriggerContainer;