mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 17:54:48 +01:00
Core/Vehicles: define and implement VEHICLE_SEAT_FLAG_DISABLE_GRAVITY (#22804)
This commit is contained in:
@@ -1009,7 +1009,7 @@ enum VehicleSeatFlags
|
||||
{
|
||||
VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_ENTER = 0x00000001,
|
||||
VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_RIDE = 0x00000002,
|
||||
VEHICLE_SEAT_FLAG_UNK3 = 0x00000004,
|
||||
VEHICLE_SEAT_FLAG_DISABLE_GRAVITY = 0x00000004, // Passenger will not be affected by gravity
|
||||
VEHICLE_SEAT_FLAG_SHOULD_USE_VEH_SEAT_EXIT_ANIM_ON_VOLUNTARY_EXIT = 0x00000008,
|
||||
VEHICLE_SEAT_FLAG_UNK5 = 0x00000010,
|
||||
VEHICLE_SEAT_FLAG_UNK6 = 0x00000020,
|
||||
|
||||
@@ -480,6 +480,10 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit)
|
||||
if (seat->second.SeatInfo->CanEnterOrExit() && ++UsableSeatNum)
|
||||
_me->SetFlag64(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
|
||||
|
||||
// Enable gravity for passenger when he did not have it active before entering the vehicle
|
||||
if (seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_DISABLE_GRAVITY && !seat->second.Passenger.IsGravityDisabled)
|
||||
unit->SetDisableGravity(false);
|
||||
|
||||
// Remove UNIT_FLAG_NOT_SELECTABLE if passenger did not have it before entering vehicle
|
||||
if (seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE && !seat->second.Passenger.IsUnselectable)
|
||||
unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
@@ -760,6 +764,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
|
||||
Passenger->SetVehicle(Target);
|
||||
Seat->second.Passenger.Guid = Passenger->GetGUID();
|
||||
Seat->second.Passenger.IsUnselectable = Passenger->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Seat->second.Passenger.IsGravityDisabled = Passenger->HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
|
||||
if (Seat->second.SeatInfo->CanEnterOrExit())
|
||||
{
|
||||
ASSERT(Target->UsableSeatNum);
|
||||
@@ -792,6 +797,9 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
|
||||
player->UnsummonPetTemporaryIfAny();
|
||||
}
|
||||
|
||||
if (veSeat->Flags & VEHICLE_SEAT_FLAG_DISABLE_GRAVITY)
|
||||
Passenger->SetDisableGravity(true);
|
||||
|
||||
if (Seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE)
|
||||
Passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
|
||||
|
||||
@@ -80,11 +80,13 @@ struct PassengerInfo
|
||||
{
|
||||
ObjectGuid Guid;
|
||||
bool IsUnselectable;
|
||||
bool IsGravityDisabled;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Guid.Clear();
|
||||
IsUnselectable = false;
|
||||
IsGravityDisabled = false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user