diff options
author | Shauren <shauren.trinity@gmail.com> | 2017-08-20 14:11:51 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-08-20 14:12:25 +0200 |
commit | fb1fdf27b951fafbcb68c97675f75ef98aa5e3b7 (patch) | |
tree | 231abb9641515e0e75abdcf09b5f0ef7dfbc962b /src/server/game/Globals/ObjectMgr.cpp | |
parent | 6a296c7c91fe00144c858b8a611537da05d7e8ac (diff) |
Core/Creatures: Fixed trainers that don't use gossip but open trainer list directly from CMSG_TRAINER_LIST
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 1db80ed6001..2d489977e79 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -8633,6 +8633,39 @@ void ObjectMgr::LoadTrainers() TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " Trainers in %u ms", _trainers.size(), GetMSTimeDiffToNow(oldMSTime)); } +void ObjectMgr::LoadCreatureDefaultTrainers() +{ + uint32 oldMSTime = getMSTime(); + + _creatureDefaultTrainers.clear(); + + if (QueryResult result = WorldDatabase.Query("SELECT CreatureId, TrainerId FROM creature_default_trainer")) + { + do + { + Field* fields = result->Fetch(); + uint32 creatureId = fields[0].GetUInt32(); + uint32 trainerId = fields[1].GetUInt32(); + + if (!GetCreatureTemplate(creatureId)) + { + TC_LOG_ERROR("sql.sql", "Table `trainer_spell` references non-existing creature template (CreatureId: %u), ignoring", creatureId); + continue; + } + + if (!GetTrainer(trainerId)) + { + TC_LOG_ERROR("sql.sql", "Table `trainer_spell` references non-existing trainer (TrainerId: %u) for CreatureId %u, ignoring", trainerId, creatureId); + continue; + } + + _creatureDefaultTrainers[creatureId] = trainerId; + } while (result->NextRow()); + } + + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " default trainers in %u ms", _creatureDefaultTrainers.size(), GetMSTimeDiffToNow(oldMSTime)); +} + int ObjectMgr::LoadReferenceVendor(int32 vendor, int32 item, uint8 referenceType, std::set<uint32> *skip_vendors) { // find all items from the reference vendor @@ -8868,6 +8901,15 @@ Trainer::Trainer const* ObjectMgr::GetTrainer(uint32 trainerId) const return Trinity::Containers::MapGetValuePtr(_trainers, trainerId); } +uint32 ObjectMgr::GetCreatureDefaultTrainer(uint32 creatureId) const +{ + auto itr = _creatureDefaultTrainers.find(creatureId); + if (itr != _creatureDefaultTrainers.end()) + return itr->second; + + return 0; +} + void ObjectMgr::AddVendorItem(uint32 entry, uint32 item, int32 maxcount, uint32 incrtime, uint32 extendedCost, uint8 type, bool persist /*= true*/) { VendorItemData& vList = _cacheVendorItemStore[entry]; |