aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp16
-rw-r--r--src/server/game/Entities/Unit/Unit.h7
2 files changed, 20 insertions, 3 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 07c3b35de1a..7fae69d54f0 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -11657,6 +11657,22 @@ Unit* Unit::GetVehicleBase() const
return m_vehicle ? m_vehicle->GetBase() : nullptr;
}
+Unit* Unit::GetVehicleRoot() const
+{
+ Unit* vehicleRoot = GetVehicleBase();
+
+ if (!vehicleRoot)
+ return nullptr;
+
+ for (;;)
+ {
+ if (!vehicleRoot->GetVehicleBase())
+ return vehicleRoot;
+
+ vehicleRoot = vehicleRoot->GetVehicleBase();
+ }
+}
+
Creature* Unit::GetVehicleCreatureBase() const
{
if (Unit* veh = GetVehicleBase())
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index f92c80c9b55..1de18af19b7 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1593,11 +1593,12 @@ class TC_GAME_API Unit : public WorldObject
ObjectGuid LastCharmerGUID;
bool CreateVehicleKit(uint32 id, uint32 creatureEntry);
void RemoveVehicleKit();
- Vehicle* GetVehicleKit()const { return m_vehicleKit; }
- Vehicle* GetVehicle() const { return m_vehicle; }
+ Vehicle* GetVehicleKit() const { return m_vehicleKit; }
+ Vehicle* GetVehicle() const { return m_vehicle; }
void SetVehicle(Vehicle* vehicle) { m_vehicle = vehicle; }
bool IsOnVehicle(Unit const* vehicle) const;
- Unit* GetVehicleBase() const;
+ Unit* GetVehicleBase() const;
+ Unit* GetVehicleRoot() const;
Creature* GetVehicleCreatureBase() const;
ObjectGuid GetTransGUID() const override;
/// Returns the transport this unit is on directly (if on vehicle and transport, return vehicle)