Skip to content

Commit

Permalink
Movement packets cleanup.
Browse files Browse the repository at this point in the history
  • Loading branch information
tomrus88 committed Feb 1, 2010
1 parent 513f474 commit 5b0f7a8
Show file tree
Hide file tree
Showing 16 changed files with 437 additions and 486 deletions.
10 changes: 5 additions & 5 deletions src/game/Map.cpp
Expand Up @@ -900,16 +900,16 @@ Map::CreatureRelocation(Creature *creature, float x, float y, float z, float ang
if( old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell) )
{
#ifdef MANGOS_DEBUG
if((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES)==0)
if((sLog.getLogFilter() & LOG_FILTER_CREATURE_MOVES) == 0)
sLog.outDebug("Creature (GUID: %u Entry: %u) added to moving list from grid[%u,%u]cell[%u,%u] to grid[%u,%u]cell[%u,%u].", creature->GetGUIDLow(), creature->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY());
#endif
AddCreatureToMoveList(creature,x,y,z,ang);
AddCreatureToMoveList(creature, x, y, z, ang);
// in diffcell/diffgrid case notifiers called at finishing move creature in Map::MoveAllCreaturesInMoveList
}
else
{
creature->Relocate(x, y, z, ang);
CreatureRelocationNotify(creature,new_cell,new_val);
CreatureRelocationNotify(creature, new_cell, new_val);
}
assert(CheckGridIntegrity(creature,true));
}
Expand All @@ -919,7 +919,7 @@ void Map::AddCreatureToMoveList(Creature *c, float x, float y, float z, float an
if(!c)
return;

i_creaturesToMove[c] = CreatureMover(x,y,z,ang);
i_creaturesToMove[c] = CreatureMover(x, y, z, ang);
}

void Map::MoveAllCreaturesInMoveList()
Expand All @@ -941,7 +941,7 @@ void Map::MoveAllCreaturesInMoveList()
{
// update pos
c->Relocate(cm.x, cm.y, cm.z, cm.ang);
CreatureRelocationNotify(c,new_cell,new_cell.cellPair());
CreatureRelocationNotify(c, new_cell, new_cell.cellPair());
}
else
{
Expand Down
6 changes: 2 additions & 4 deletions src/game/MiscHandler.cpp
Expand Up @@ -267,7 +267,7 @@ void WorldSession::HandleLogoutRequestOpcode( WorldPacket & /*recv_data*/ )
if( GetPlayer()->isInCombat() || //...is in combat
GetPlayer()->duel || //...is in Duel
//...is jumping ...is falling
GetPlayer()->m_movementInfo.HasMovementFlag(MovementFlags(MOVEMENTFLAG_JUMPING | MOVEMENTFLAG_FALLING)))
GetPlayer()->m_movementInfo.HasMovementFlag(MovementFlags(MOVEFLAG_JUMPING | MOVEFLAG_FALLING)))
{
WorldPacket data( SMSG_LOGOUT_RESPONSE, (2+4) ) ;
data << (uint8)0xC;
Expand Down Expand Up @@ -1523,9 +1523,7 @@ void WorldSession::HandleMoveSetCanFlyAckOpcode( WorldPacket & recv_data )

recv_data.read_skip<uint32>(); // unk

MovementInfo movementInfo;
movementInfo.guid = guid;
ReadMovementInfo(recv_data, &movementInfo);
MovementInfo movementInfo(recv_data);

recv_data.read_skip<float>(); // unk2

Expand Down
65 changes: 25 additions & 40 deletions src/game/MovementHandler.cpp
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -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()
Expand Down Expand Up @@ -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);
}
}

Expand All @@ -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;
/*----------------*/
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;

Expand Down Expand Up @@ -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 )
Expand All @@ -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
}
Expand All @@ -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
}
Expand Down

0 comments on commit 5b0f7a8

Please sign in to comment.