mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 18:15:31 +01:00
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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user