diff options
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 5 | ||||
-rw-r--r-- | src/server/game/Handlers/NPCHandler.cpp | 2 |
3 files changed, 19 insertions, 1 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 5196192ded6..72683379742 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -3522,3 +3522,16 @@ void Creature::ExitVehicle(Position const* /*exitPosition*/) // exited position so it won't run away (home) and evade if it's hostile SetHomePosition(GetPosition()); } + +uint32 Creature::GetTrainerId() const +{ + if (_trainerId) + return *_trainerId; + + return sObjectMgr->GetCreatureDefaultTrainer(GetEntry()); +} + +void Creature::SetTrainerId(Optional<uint32> trainerId) +{ + _trainerId = trainerId; +} diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 4236c2da95f..06c09a36ef1 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -390,6 +390,9 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma void ExitVehicle(Position const* exitPosition = nullptr) override; + uint32 GetTrainerId() const; + void SetTrainerId(Optional<uint32> trainerId); + protected: bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0); bool InitEntry(uint32 entry, CreatureData const* data = nullptr); @@ -475,6 +478,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma bool _regenerateHealthLock; // Dynamically set bool _isMissingCanSwimFlagOutOfCombat; + + Optional<uint32> _trainerId; }; class TC_GAME_API AssistDelayEvent : public BasicEvent diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 2c4d189db56..50fc643e7b6 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -94,7 +94,7 @@ void WorldSession::HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet) return; } - if (uint32 trainerId = sObjectMgr->GetCreatureDefaultTrainer(npc->GetEntry())) + if (uint32 trainerId = npc->GetTrainerId()) SendTrainerList(npc, trainerId); else TC_LOG_DEBUG("network", "WorldSession::SendTrainerList - Creature id {} has no trainer data.", npc->GetEntry()); |