aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp6
-rw-r--r--src/server/game/Entities/Vehicle/VehicleDefines.h16
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp5
3 files changed, 21 insertions, 6 deletions
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index 6c435583b0e..d7537f878d1 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -533,7 +533,11 @@ Vehicle* Vehicle::RemovePassenger(WorldObject* passenger)
// only for flyable vehicles
if (unit->IsFlying())
- _me->CastSpell(unit, VEHICLE_SPELL_PARACHUTE, true);
+ {
+ VehicleTemplate const* vehicleTemplate = sObjectMgr->GetVehicleTemplate(this);
+ if (!vehicleTemplate || !vehicleTemplate->CustomFlags.HasFlag(VehicleCustomFlags::DontForceParachuteOnExit))
+ _me->CastSpell(unit, VEHICLE_SPELL_PARACHUTE, true);
+ }
if (_me->GetTypeId() == TYPEID_UNIT && _me->ToCreature()->IsAIEnabled())
_me->ToCreature()->AI()->PassengerBoarded(unit, seat->first, false);
diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h
index 764a039bbd0..fd012bdc53e 100644
--- a/src/server/game/Entities/Vehicle/VehicleDefines.h
+++ b/src/server/game/Entities/Vehicle/VehicleDefines.h
@@ -15,13 +15,14 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef __TRINITY_VEHICLEDEFINES_H
-#define __TRINITY_VEHICLEDEFINES_H
+#ifndef TRINITYCORE_VEHICLE_DEFINES_H
+#define TRINITYCORE_VEHICLE_DEFINES_H
#include "Define.h"
#include "Duration.h"
-#include <vector>
+#include "EnumFlag.h"
#include <map>
+#include <vector>
class Map;
class WorldObject;
@@ -86,6 +87,14 @@ enum class VehicleExitParameters
VehicleExitParamMax
};
+enum class VehicleCustomFlags : uint32
+{
+ None = 0x0,
+ DontForceParachuteOnExit = 0x1
+};
+
+DEFINE_ENUM_FLAG(VehicleCustomFlags);
+
struct PassengerInfo
{
ObjectGuid Guid;
@@ -145,6 +154,7 @@ struct VehicleTemplate
{
Milliseconds DespawnDelay = Milliseconds::zero();
Optional<float> Pitch;
+ EnumFlag<VehicleCustomFlags> CustomFlags = VehicleCustomFlags::None;
};
typedef std::vector<VehicleAccessory> VehicleAccessoryList;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index bb0e73e04e6..6d24e727a39 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -3512,8 +3512,8 @@ void ObjectMgr::LoadVehicleTemplate()
_vehicleTemplateStore.clear();
- // 0 1 2
- QueryResult result = WorldDatabase.Query("SELECT creatureId, despawnDelayMs, Pitch FROM vehicle_template");
+ // 0 1 2 3
+ QueryResult result = WorldDatabase.Query("SELECT creatureId, despawnDelayMs, Pitch, CustomFlags FROM vehicle_template");
if (!result)
{
@@ -3543,6 +3543,7 @@ void ObjectMgr::LoadVehicleTemplate()
VehicleTemplate& vehicleTemplate = _vehicleTemplateStore[creatureId];
vehicleTemplate.DespawnDelay = Milliseconds(fields[1].GetInt32());
vehicleTemplate.Pitch = fields[2].GetFloatOrNull();
+ vehicleTemplate.CustomFlags = VehicleCustomFlags(fields[3].GetInt32());
if (vehicleTemplate.Pitch)
{