diff options
author | Meji <alvaro.megias@outlook.com> | 2025-07-23 14:14:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-23 14:14:03 +0200 |
commit | 00eed485156963cab5caa75b8e36dd7a332a423e (patch) | |
tree | 4148cf780cfc85168a1bfce7e11347b487babbd0 /src/server/game | |
parent | 4bf74d9d04262d4f82fb90a511fd6cc6eb0609ed (diff) |
Core/Vehicles: Added new field CustomFlags to vehicle_template (#31115)
Diffstat (limited to 'src/server/game')
-rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Vehicle/VehicleDefines.h | 16 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 5 |
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) { |