Core/Vehicles: Added new field CustomFlags to vehicle_template (#31115)

This commit is contained in:
Meji
2025-07-23 14:14:03 +02:00
committed by GitHub
parent 4bf74d9d04
commit 00eed48515
4 changed files with 23 additions and 6 deletions
@@ -0,0 +1,2 @@
ALTER TABLE `vehicle_template`
ADD `CustomFlags` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `Pitch`;
+5 -1
View File
@@ -533,7 +533,11 @@ Vehicle* Vehicle::RemovePassenger(WorldObject* passenger)
// only for flyable vehicles // only for flyable vehicles
if (unit->IsFlying()) 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()) if (_me->GetTypeId() == TYPEID_UNIT && _me->ToCreature()->IsAIEnabled())
_me->ToCreature()->AI()->PassengerBoarded(unit, seat->first, false); _me->ToCreature()->AI()->PassengerBoarded(unit, seat->first, false);
@@ -15,13 +15,14 @@
* with this program. If not, see <http://www.gnu.org/licenses/>. * with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef __TRINITY_VEHICLEDEFINES_H #ifndef TRINITYCORE_VEHICLE_DEFINES_H
#define __TRINITY_VEHICLEDEFINES_H #define TRINITYCORE_VEHICLE_DEFINES_H
#include "Define.h" #include "Define.h"
#include "Duration.h" #include "Duration.h"
#include <vector> #include "EnumFlag.h"
#include <map> #include <map>
#include <vector>
class Map; class Map;
class WorldObject; class WorldObject;
@@ -86,6 +87,14 @@ enum class VehicleExitParameters
VehicleExitParamMax VehicleExitParamMax
}; };
enum class VehicleCustomFlags : uint32
{
None = 0x0,
DontForceParachuteOnExit = 0x1
};
DEFINE_ENUM_FLAG(VehicleCustomFlags);
struct PassengerInfo struct PassengerInfo
{ {
ObjectGuid Guid; ObjectGuid Guid;
@@ -145,6 +154,7 @@ struct VehicleTemplate
{ {
Milliseconds DespawnDelay = Milliseconds::zero(); Milliseconds DespawnDelay = Milliseconds::zero();
Optional<float> Pitch; Optional<float> Pitch;
EnumFlag<VehicleCustomFlags> CustomFlags = VehicleCustomFlags::None;
}; };
typedef std::vector<VehicleAccessory> VehicleAccessoryList; typedef std::vector<VehicleAccessory> VehicleAccessoryList;
+3 -2
View File
@@ -3512,8 +3512,8 @@ void ObjectMgr::LoadVehicleTemplate()
_vehicleTemplateStore.clear(); _vehicleTemplateStore.clear();
// 0 1 2 // 0 1 2 3
QueryResult result = WorldDatabase.Query("SELECT creatureId, despawnDelayMs, Pitch FROM vehicle_template"); QueryResult result = WorldDatabase.Query("SELECT creatureId, despawnDelayMs, Pitch, CustomFlags FROM vehicle_template");
if (!result) if (!result)
{ {
@@ -3543,6 +3543,7 @@ void ObjectMgr::LoadVehicleTemplate()
VehicleTemplate& vehicleTemplate = _vehicleTemplateStore[creatureId]; VehicleTemplate& vehicleTemplate = _vehicleTemplateStore[creatureId];
vehicleTemplate.DespawnDelay = Milliseconds(fields[1].GetInt32()); vehicleTemplate.DespawnDelay = Milliseconds(fields[1].GetInt32());
vehicleTemplate.Pitch = fields[2].GetFloatOrNull(); vehicleTemplate.Pitch = fields[2].GetFloatOrNull();
vehicleTemplate.CustomFlags = VehicleCustomFlags(fields[3].GetInt32());
if (vehicleTemplate.Pitch) if (vehicleTemplate.Pitch)
{ {