aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorSevi <gonzo1247@yahoo.de>2020-12-28 16:27:44 +0100
committerShauren <shauren.trinity@gmail.com>2020-12-31 14:13:29 +0100
commitc7b10d3c5fd082faf6c2835239e340babc3dfc76 (patch)
tree498fd11394f450a91b9d2b9e81f1e42a423917b1 /src/server/game/Entities
parentd94f0d23b3cbf0944576cfd77fb199453234817b (diff)
Core/Vehicles: add a way to delay the Vehicle despawn Time if its needed.
* New database table `vehicle_template` holds info for despawn delay with option to extend it in the future
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp2
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp8
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.h2
-rw-r--r--src/server/game/Entities/Vehicle/VehicleDefines.h6
4 files changed, 17 insertions, 1 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index a09f5bb6032..ea937c76e79 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12956,7 +12956,7 @@ void Unit::_ExitVehicle(Position const* exitPosition)
if (vehicle->GetBase()->HasUnitTypeMask(UNIT_MASK_MINION) && vehicle->GetBase()->GetTypeId() == TYPEID_UNIT)
if (((Minion*)vehicle->GetBase())->GetOwner() == this)
- vehicle->GetBase()->ToCreature()->DespawnOrUnsummon(1);
+ vehicle->GetBase()->ToCreature()->DespawnOrUnsummon(vehicle->GetDespawnDelay());
if (HasUnitTypeMask(UNIT_MASK_ACCESSORY))
{
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index 7e37b5212ae..1dec34be1f3 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -885,3 +885,11 @@ void VehicleJoinEvent::Abort(uint64)
if (Passenger->IsInWorld() && Passenger->HasUnitTypeMask(UNIT_MASK_ACCESSORY))
Passenger->ToCreature()->DespawnOrUnsummon();
}
+
+Milliseconds Vehicle::GetDespawnDelay()
+{
+ if (VehicleTemplate const* vehicleTemplate = sObjectMgr->GetVehicleTemplate(this))
+ return vehicleTemplate->DespawnDelay;
+
+ return 1ms;
+}
diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h
index 07f1715b5fe..081daf53250 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.h
+++ b/src/server/game/Entities/Vehicle/Vehicle.h
@@ -71,6 +71,8 @@ class TC_GAME_API Vehicle : public TransportBase
void RemovePendingEventsForPassenger(Unit* passenger);
+ Milliseconds GetDespawnDelay();
+
protected:
friend class VehicleJoinEvent;
uint32 UsableSeatNum; ///< Number of seats that match VehicleSeatEntry::UsableByPlayer, used for proper display flags
diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h
index 6ed5e0338fa..a428de24ff4 100644
--- a/src/server/game/Entities/Vehicle/VehicleDefines.h
+++ b/src/server/game/Entities/Vehicle/VehicleDefines.h
@@ -19,6 +19,7 @@
#define __TRINITY_VEHICLEDEFINES_H
#include "Define.h"
+#include "Duration.h"
#include <vector>
#include <map>
@@ -113,6 +114,11 @@ struct VehicleAccessory
uint8 SummonedType;
};
+struct VehicleTemplate
+{
+ Milliseconds DespawnDelay = Milliseconds::zero();
+};
+
typedef std::vector<VehicleAccessory> VehicleAccessoryList;
typedef std::map<ObjectGuid::LowType, VehicleAccessoryList> VehicleAccessoryContainer;
typedef std::map<uint32, VehicleAccessoryList> VehicleAccessoryTemplateContainer;