From 1f477b49c325618245e856714cfb1f191f48a64f Mon Sep 17 00:00:00 2001 From: silverice Date: Sat, 3 Apr 2010 16:59:52 +0300 Subject: handle CMSG_REQUEST_VEHICLE_SWITCH_SEAT opcode thanks to havenard for packet structure, closes issue #1439 also added vehicle guid check --HG-- branch : trunk --- src/game/MovementHandler.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'src') 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; } } -- cgit v1.2.3