diff options
Diffstat (limited to 'src/game/MovementHandler.cpp')
-rw-r--r-- | src/game/MovementHandler.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index fd3c89ed721..03ad6bf6e63 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -575,7 +575,8 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recv_data) sLog.outDebug("WORLD: Recvd CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE"); recv_data.hexlike(); - if(!GetPlayer()->GetVehicle()) + Unit* vehicle_base = GetPlayer()->GetVehicleBase(); + if(!vehicle_base) return; switch (recv_data.GetOpcode()) @@ -589,10 +590,10 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recv_data) case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE: { uint64 guid; // current vehicle guid - if(!recv_data.readPackGUID(guid)) + if(!recv_data.readPackGUID(guid) || vehicle_base->GetGUID() != guid) return; - ReadMovementInfo(recv_data, &GetPlayer()->GetVehicleBase()->m_movementInfo); + ReadMovementInfo(recv_data, &vehicle_base->m_movementInfo); uint64 accessory; // accessory guid if(!recv_data.readPackGUID(accessory)) @@ -603,12 +604,28 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recv_data) if(!accessory) GetPlayer()->ChangeSeat(-1, seatId > 0); // prev/next - else if(Unit *vehUnit = ObjectAccessor::GetUnit(*GetPlayer(), accessory)) + else if(Unit *vehUnit = Unit::GetUnit(*GetPlayer(), accessory)) + { if(Vehicle *vehicle = vehUnit->GetVehicleKit()) if(vehicle->HasEmptySeat(seatId)) GetPlayer()->EnterVehicle(vehicle, seatId); + } + } + break; + case CMSG_REQUEST_VEHICLE_SWITCH_SEAT: + { + uint64 guid; // current vehicle guid + if(!recv_data.readPackGUID(guid) || vehicle_base->GetGUID() != guid) + return; + + int8 seatId; + recv_data >> seatId; + + GetPlayer()->ChangeSeat(-1, seatId > 0); // prev/next } break; + default: + break; } } |