diff options
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Vehicle/VehicleDefines.h | 2 |
3 files changed, 11 insertions, 1 deletions
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 80d109a51a1..6b269dbe406 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -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, diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 4b66e148fe5..92b93255018 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -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); diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h index 95c244423c5..a4bdf647e27 100644 --- a/src/server/game/Entities/Vehicle/VehicleDefines.h +++ b/src/server/game/Entities/Vehicle/VehicleDefines.h @@ -80,11 +80,13 @@ struct PassengerInfo { ObjectGuid Guid; bool IsUnselectable; + bool IsGravityDisabled; void Reset() { Guid.Clear(); IsUnselectable = false; + IsGravityDisabled = false; } }; |