handle CMSG_REQUEST_VEHICLE_SWITCH_SEAT opcode

thanks to havenard for packet structure, closes issue #1439
also added vehicle guid check

--HG--
branch : trunk
This commit is contained in:
silverice
2010-04-03 16:59:52 +03:00
parent 6917c057de
commit 1f477b49c3

View File

@@ -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;
}
}