diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index cbbd1b30704..33fb519e3d3 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -639,6 +639,37 @@ enum VehicleSeatFlagsB VEHICLE_SEAT_FLAG_B_VEHICLE_PLAYERFRAME_UI = 0x80000000 // Lua_UnitHasVehiclePlayerFrameUI - actually checked for flagsb &~ 0x80000000 }; +enum VehicleAttachmentIds +{ + VEHICLE_ATTACHMENT_ID_UNK0 = -1, + VEHICLE_ATTACHMENT_ID_UNK1 = 0, + VEHICLE_ATTACHMENT_ID_UNK2 = 1, + VEHICLE_ATTACHMENT_ID_INVERT_SEAT_ANGLE = 2, + VEHICLE_ATTACHMENT_ID_UNK3 = 3, + VEHICLE_ATTACHMENT_ID_UNK4 = 4, + VEHICLE_ATTACHMENT_ID_UNK5 = 5, + VEHICLE_ATTACHMENT_ID_UNK6 = 6, + VEHICLE_ATTACHMENT_ID_UNK7 = 7, + VEHICLE_ATTACHMENT_ID_UNK8 = 8, + VEHICLE_ATTACHMENT_ID_UNK9 = 9, + VEHICLE_ATTACHMENT_ID_UNK10 = 10, + VEHICLE_ATTACHMENT_ID_UNK11 = 11, + VEHICLE_ATTACHMENT_ID_UNK12 = 12, + VEHICLE_ATTACHMENT_ID_UNK13 = 13, + VEHICLE_ATTACHMENT_ID_UNK14 = 14, + VEHICLE_ATTACHMENT_ID_UNK15 = 15, + VEHICLE_ATTACHMENT_ID_UNK16 = 16, + VEHICLE_ATTACHMENT_ID_UNK17 = 17, + VEHICLE_ATTACHMENT_ID_UNK18 = 18, + VEHICLE_ATTACHMENT_ID_UNK19 = 19, + VEHICLE_ATTACHMENT_ID_UNK20 = 20, + VEHICLE_ATTACHMENT_ID_UNK21 = 21, + VEHICLE_ATTACHMENT_ID_UNK22 = 22, + VEHICLE_ATTACHMENT_ID_UNK23 = 23, + VEHICLE_ATTACHMENT_ID_UNK24 = 24, + VEHICLE_ATTACHMENT_ID_UNK25 = 25 +}; + // CurrencyTypes.dbc enum CurrencyTypes { diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 440c752d520..4786ce42d32 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -876,7 +876,15 @@ bool VehicleJoinEvent::Execute(uint64, uint32) if (veSeat->HasFlag(VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE)) Passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - Passenger->m_movementInfo.transport.pos.Relocate(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ); + float o = 0.0f; + if (veSeat->m_attachmentID == VEHICLE_ATTACHMENT_ID_INVERT_SEAT_ANGLE) + o += float(M_PI); + + float x = veSeat->m_attachmentOffsetX; + float y = veSeat->m_attachmentOffsetY; + float z = veSeat->m_attachmentOffsetZ; + + Passenger->m_movementInfo.transport.pos.Relocate(x, y, z, o); Passenger->m_movementInfo.transport.time = 0; Passenger->m_movementInfo.transport.seat = Seat->first; Passenger->m_movementInfo.transport.guid = Target->GetBase()->GetGUID(); @@ -898,8 +906,8 @@ bool VehicleJoinEvent::Execute(uint64, uint32) Movement::MoveSplineInit init(Passenger); init.DisableTransportPathTransformations(); - init.MoveTo(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ, false, true); - init.SetFacing(0.0f); + init.MoveTo(x, y, z, false, true); + init.SetFacing(o); init.SetTransportEnter(); init.Launch();