diff options
author | megamage <none@none> | 2009-04-22 17:50:26 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-04-22 17:50:26 -0500 |
commit | 1cd8ea8c1abbb1b110a0af36b60ec9d17c608da3 (patch) | |
tree | 6c0f408e0d8e6e5d7a105cb2addc252c6b7a6c95 /src/game/MovementHandler.cpp | |
parent | 06667c40dd0eb6858247b7fdfbd6156a46acd8b6 (diff) |
*Fix some bugs about vehicle.
--HG--
branch : trunk
Diffstat (limited to 'src/game/MovementHandler.cpp')
-rw-r--r-- | src/game/MovementHandler.cpp | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index 9a2f119cb42..cf312ad3513 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -482,32 +482,33 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recv_data) { sLog.outDebug("WORLD: Recvd CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE"); recv_data.hexlike(); - uint32 a; - uint16 b; - uint16 c; - uint32 d,e,f,g,h,i,j,k; - int8 seat; - recv_data >> a >> b >> c; - recv_data >> d >> e >> f >> g >> h >> i >> j >> k; - recv_data >> seat; - //sLog.outError("change seat %u %u %u %u %u %u %u %u %u %u %u %u", a, b,c,d,e,f,g,h,i,j,k,seat); - - if(seat == GetPlayer()->GetTransSeat()) + + if(!GetPlayer()->m_Vehicle) return; - if(GetPlayer()->m_Vehicle) - { - if(Vehicle *vehicle = GetPlayer()->m_Vehicle->HasEmptySeat(seat)) - { - GetPlayer()->m_Vehicle->RemovePassenger(GetPlayer()); - //If the player is going to a turret, the vehicle should be changed - GetPlayer()->m_Vehicle = vehicle; - if(!vehicle->AddPassenger(GetPlayer(), seat)) - { - assert(false); - } - } - } + if(recv_data.GetOpcode() == CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE) + ReadMovementInfo(recv_data, &GetPlayer()->m_Vehicle->m_movementInfo); + + uint64 guid; + if(!recv_data.readPackGUID(guid)) + return; + + Vehicle *vehicle = ObjectAccessor::GetVehicle(guid); + if(!vehicle) + return; + + int8 seatNum; + recv_data >> seatNum; + if(vehicle == GetPlayer()->m_Vehicle && seatNum == GetPlayer()->GetTransSeat()) + return; + + if(!vehicle->HasEmptySeat(seatNum)) + return; + + GetPlayer()->m_Vehicle->RemovePassenger(GetPlayer()); + GetPlayer()->m_Vehicle = vehicle; + if(!vehicle->AddPassenger(GetPlayer(), seatNum)) + assert(false); } void WorldSession::HandleRequestVehicleExit(WorldPacket &recv_data) |