diff options
-rw-r--r-- | sql/updates/world/master/2025_07_23_00_world.sql | 2 | ||||
-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 |
4 files changed, 23 insertions, 6 deletions
diff --git a/sql/updates/world/master/2025_07_23_00_world.sql b/sql/updates/world/master/2025_07_23_00_world.sql new file mode 100644 index 00000000000..2b3bc3c5a37 --- /dev/null +++ b/sql/updates/world/master/2025_07_23_00_world.sql @@ -0,0 +1,2 @@ +ALTER TABLE `vehicle_template` + ADD `CustomFlags` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `Pitch`; 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) { |