aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsilverice <none@none>2010-04-03 16:59:52 +0300
committersilverice <none@none>2010-04-03 16:59:52 +0300
commit1f477b49c325618245e856714cfb1f191f48a64f (patch)
tree0828a9b4410c8255c881a7e0faf2cd7522d5c8a2
parent6917c057dee1a4d899a15117b455533f29d3594f (diff)
handle CMSG_REQUEST_VEHICLE_SWITCH_SEAT opcode
thanks to havenard for packet structure, closes issue #1439 also added vehicle guid check --HG-- branch : trunk
-rw-r--r--src/game/MovementHandler.cpp25
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;
}
}