aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp11
-rw-r--r--src/server/game/Globals/ObjectMgr.h6
2 files changed, 12 insertions, 5 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index af3438aa3d0..a0559650ccf 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -9253,7 +9253,14 @@ void ObjectMgr::LoadCreatureDefaultTrainers()
continue;
}
- _creatureDefaultTrainers[creatureId] = trainerId;
+ Trainer::Trainer* trainer = Trinity::Containers::MapGetValuePtr(_trainers, trainerId);
+ if (!trainer)
+ {
+ TC_LOG_ERROR("sql.sql", "Table `creature_default_trainer` references non-existing trainer (TrainerId: %u) for CreatureId %u, ignoring", trainerId, creatureId);
+ continue;
+ }
+
+ _creatureDefaultTrainers[creatureId] = trainer;
} while (result->NextRow());
}
@@ -9467,7 +9474,7 @@ Trainer::Trainer const* ObjectMgr::GetTrainer(uint32 creatureId) const
{
auto itr = _creatureDefaultTrainers.find(creatureId);
if (itr != _creatureDefaultTrainers.end())
- return Trinity::Containers::MapGetValuePtr(_trainers, itr->second);
+ return itr->second;
return nullptr;
}
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index e17c70b3583..9ac00872e13 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -958,7 +958,7 @@ class TC_GAME_API ObjectMgr
typedef std::unordered_map<uint32, AreaTrigger> AreaTriggerContainer;
- typedef std::unordered_map<uint32, uint32> AreaTriggerScriptContainer;
+ typedef std::map<uint32, uint32> AreaTriggerScriptContainer;
typedef std::unordered_map<uint32, std::unique_ptr<AccessRequirement>> AccessRequirementContainer;
@@ -1591,7 +1591,7 @@ class TC_GAME_API ObjectMgr
QuestContainer _questTemplates;
typedef std::unordered_map<uint32, GossipText> GossipTextContainer;
- typedef std::unordered_map<uint32, uint32> QuestAreaTriggerContainer;
+ typedef std::map<uint32, uint32> QuestAreaTriggerContainer;
typedef std::set<uint32> TavernAreaTriggerContainer;
typedef std::set<uint32> GameObjectForQuestContainer;
@@ -1719,7 +1719,7 @@ class TC_GAME_API ObjectMgr
CacheVendorItemContainer _cacheVendorItemStore;
std::unordered_map<uint32, Trainer::Trainer> _trainers;
- std::unordered_map<uint32, uint32> _creatureDefaultTrainers;
+ std::unordered_map<uint32, Trainer::Trainer const*> _creatureDefaultTrainers;
std::set<uint32> _difficultyEntries[MAX_DIFFICULTY - 1]; // already loaded difficulty 1 value in creatures, used in CheckCreatureTemplate
std::set<uint32> _hasDifficultyEntries[MAX_DIFFICULTY - 1]; // already loaded creatures with difficulty 1 values, used in CheckCreatureTemplate