mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
Movement packets cleanup.
This commit is contained in:
parent
60f8b3874d
commit
b85417df73
16 changed files with 436 additions and 485 deletions
|
|
@ -239,30 +239,28 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
|
||||
MovementInfo movementInfo;
|
||||
movementInfo.guid = guid;
|
||||
ReadMovementInfo(recv_data, &movementInfo);
|
||||
MovementInfo movementInfo(recv_data);
|
||||
/*----------------*/
|
||||
|
||||
if (!MaNGOS::IsValidMapCoord(movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o))
|
||||
if (!MaNGOS::IsValidMapCoord(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o))
|
||||
{
|
||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||
return;
|
||||
}
|
||||
|
||||
/* handle special cases */
|
||||
if (movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT))
|
||||
if (movementInfo.HasMovementFlag(MOVEFLAG_ONTRANSPORT))
|
||||
{
|
||||
// transports size limited
|
||||
// (also received at zeppelin/lift leave by some reason with t_* as absolute in continent coordinates, can be safely skipped)
|
||||
if( movementInfo.t_x > 50 || movementInfo.t_y > 50 || movementInfo.t_z > 100 )
|
||||
if( movementInfo.GetTransportPos()->x > 50 || movementInfo.GetTransportPos()->y > 50 || movementInfo.GetTransportPos()->z > 100 )
|
||||
{
|
||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||
return;
|
||||
}
|
||||
|
||||
if( !MaNGOS::IsValidMapCoord(movementInfo.x+movementInfo.t_x, movementInfo.y + movementInfo.t_y,
|
||||
movementInfo.z + movementInfo.t_z, movementInfo.o + movementInfo.t_o) )
|
||||
if( !MaNGOS::IsValidMapCoord(movementInfo.GetPos()->x + movementInfo.GetTransportPos()->x, movementInfo.GetPos()->y + movementInfo.GetTransportPos()->y,
|
||||
movementInfo.GetPos()->z + movementInfo.GetTransportPos()->z, movementInfo.GetPos()->o + movementInfo.GetTransportPos()->o) )
|
||||
{
|
||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||
return;
|
||||
|
|
@ -271,10 +269,10 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
// if we boarded a transport, add us to it
|
||||
if (plMover && !plMover->m_transport)
|
||||
{
|
||||
// elevators also cause the client to send MOVEMENTFLAG_ONTRANSPORT - just unmount if the guid can be found in the transport list
|
||||
// elevators also cause the client to send MOVEFLAG_ONTRANSPORT - just unmount if the guid can be found in the transport list
|
||||
for (MapManager::TransportSet::const_iterator iter = sMapMgr.m_Transports.begin(); iter != sMapMgr.m_Transports.end(); ++iter)
|
||||
{
|
||||
if ((*iter)->GetGUID() == movementInfo.t_guid)
|
||||
if ((*iter)->GetGUID() == movementInfo.GetTransportGuid())
|
||||
{
|
||||
plMover->m_transport = (*iter);
|
||||
(*iter)->AddPassenger(plMover);
|
||||
|
|
@ -287,47 +285,43 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
{
|
||||
plMover->m_transport->RemovePassenger(plMover);
|
||||
plMover->m_transport = NULL;
|
||||
movementInfo.t_x = 0.0f;
|
||||
movementInfo.t_y = 0.0f;
|
||||
movementInfo.t_z = 0.0f;
|
||||
movementInfo.t_o = 0.0f;
|
||||
movementInfo.t_time = 0;
|
||||
movementInfo.t_seat = -1;
|
||||
movementInfo.SetTransportData(0, 0.0f, 0.0f, 0.0f, 0.0f, 0, -1);
|
||||
}
|
||||
|
||||
// fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map).
|
||||
if (opcode == MSG_MOVE_FALL_LAND && plMover && !plMover->isInFlight())
|
||||
plMover->HandleFall(movementInfo);
|
||||
|
||||
if (plMover && (movementInfo.HasMovementFlag(MOVEMENTFLAG_SWIMMING) != plMover->IsInWater()))
|
||||
if (plMover && (movementInfo.HasMovementFlag(MOVEFLAG_SWIMMING) != plMover->IsInWater()))
|
||||
{
|
||||
// now client not include swimming flag in case jumping under water
|
||||
plMover->SetInWater( !plMover->IsInWater() || plMover->GetBaseMap()->IsUnderWater(movementInfo.x, movementInfo.y, movementInfo.z) );
|
||||
plMover->SetInWater( !plMover->IsInWater() || plMover->GetBaseMap()->IsUnderWater(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z) );
|
||||
}
|
||||
|
||||
/*----------------------*/
|
||||
|
||||
/* process position-change */
|
||||
movementInfo.UpdateTime(getMSTime());
|
||||
|
||||
WorldPacket data(opcode, recv_data.size());
|
||||
movementInfo.time = getMSTime();
|
||||
movementInfo.guid = mover->GetGUID();
|
||||
WriteMovementInfo(&data, &movementInfo);
|
||||
data.appendPackGUID(mover->GetGUID()); // write guid
|
||||
movementInfo.Write(data); // write data
|
||||
GetPlayer()->SendMessageToSet(&data, false);
|
||||
|
||||
if(plMover) // nothing is charmed, or player charmed
|
||||
{
|
||||
plMover->SetPosition(movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o);
|
||||
plMover->SetPosition(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o);
|
||||
plMover->m_movementInfo = movementInfo;
|
||||
plMover->UpdateFallInformationIfNeed(movementInfo, opcode);
|
||||
|
||||
// after move info set
|
||||
if ((opcode == MSG_MOVE_SET_WALK_MODE || opcode == MSG_MOVE_SET_RUN_MODE))
|
||||
plMover->UpdateWalkMode(plMover,false);
|
||||
plMover->UpdateWalkMode(plMover, false);
|
||||
|
||||
if(plMover->isMovingOrTurning())
|
||||
plMover->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);
|
||||
|
||||
if(movementInfo.z < -500.0f)
|
||||
if(movementInfo.GetPos()->z < -500.0f)
|
||||
{
|
||||
if(plMover->InBattleGround()
|
||||
&& plMover->GetBattleGround()
|
||||
|
|
@ -361,7 +355,7 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
else // creature charmed
|
||||
{
|
||||
if(mover->IsInWorld())
|
||||
mover->GetMap()->CreatureRelocation((Creature*)mover, movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o);
|
||||
mover->GetMap()->CreatureRelocation((Creature*)mover, movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -387,9 +381,7 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recv_data)
|
|||
// continue parse packet
|
||||
recv_data >> unk1; // counter or moveEvent
|
||||
|
||||
MovementInfo movementInfo;
|
||||
movementInfo.guid = guid;
|
||||
ReadMovementInfo(recv_data, &movementInfo);
|
||||
MovementInfo movementInfo(recv_data);
|
||||
|
||||
recv_data >> newspeed;
|
||||
/*----------------*/
|
||||
|
|
@ -475,9 +467,7 @@ void WorldSession::HandleMoveNotActiveMover(WorldPacket &recv_data)
|
|||
return;
|
||||
}
|
||||
|
||||
MovementInfo mi;
|
||||
mi.guid = old_mover_guid;
|
||||
ReadMovementInfo(recv_data, &mi);
|
||||
MovementInfo mi(recv_data);
|
||||
|
||||
_player->m_movementInfo = mi;
|
||||
}
|
||||
|
|
@ -500,9 +490,7 @@ void WorldSession::HandleDismissControlledVehicle(WorldPacket &recv_data)
|
|||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
|
||||
MovementInfo mi;
|
||||
mi.guid = guid;
|
||||
ReadMovementInfo(recv_data, &mi);
|
||||
MovementInfo mi(recv_data);
|
||||
|
||||
_player->m_movementInfo = mi;
|
||||
|
||||
|
|
@ -534,8 +522,7 @@ void WorldSession::HandleMoveKnockBackAck( WorldPacket & recv_data )
|
|||
|
||||
recv_data.read_skip<uint32>(); // unk
|
||||
|
||||
MovementInfo movementInfo;
|
||||
ReadMovementInfo(recv_data, &movementInfo);
|
||||
MovementInfo movementInfo(recv_data);
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveHoverAck( WorldPacket& recv_data )
|
||||
|
|
@ -548,8 +535,7 @@ void WorldSession::HandleMoveHoverAck( WorldPacket& recv_data )
|
|||
|
||||
recv_data.read_skip<uint32>(); // unk
|
||||
|
||||
MovementInfo movementInfo;
|
||||
ReadMovementInfo(recv_data, &movementInfo);
|
||||
MovementInfo movementInfo(recv_data);
|
||||
|
||||
recv_data.read_skip<uint32>(); // unk2
|
||||
}
|
||||
|
|
@ -564,8 +550,7 @@ void WorldSession::HandleMoveWaterWalkAck(WorldPacket& recv_data)
|
|||
|
||||
recv_data.read_skip<uint32>(); // unk
|
||||
|
||||
MovementInfo movementInfo;
|
||||
ReadMovementInfo(recv_data, &movementInfo);
|
||||
MovementInfo movementInfo(recv_data);
|
||||
|
||||
recv_data.read_skip<uint32>(); // unk2
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue