aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp13
-rw-r--r--src/server/game/Entities/Creature/Creature.h5
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp2
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());