Skip to content

Commit

Permalink
Core/PacketIO: Corrected structure of CMSG_CHANGE_SEATS_ON_CONTROLLED…
Browse files Browse the repository at this point in the history
…_VEHICLE and SMSG_MOVE_UPDATE_RUN_SPEED
  • Loading branch information
Shauren committed Apr 11, 2013
1 parent f370c4e commit 46201ac
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 8 deletions.
4 changes: 2 additions & 2 deletions src/server/game/Entities/Unit/Unit.cpp
Expand Up @@ -16242,7 +16242,7 @@ void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::Extra
extras->ReadNextElement(data);
break;
default:
ASSERT(false && "Incorrect sequence element detected at ReadMovementInfo");
ASSERT(Movement::PrintInvalidSequenceElement(element, __FUNCTION__));
break;
}
}
Expand Down Expand Up @@ -16551,7 +16551,7 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
extras->WriteNextElement(data);
break;
default:
ASSERT(false && "Incorrect sequence element detected at ReadMovementInfo");
ASSERT(Movement::PrintInvalidSequenceElement(element, __FUNCTION__));
break;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/server/game/Handlers/VehicleHandler.cpp
Expand Up @@ -77,8 +77,8 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket& recvData)
static MovementStatusElements const accessoryGuid[] =
{
MSEExtraInt8,
MSEHasGuidByte4,
MSEHasGuidByte2,
MSEHasGuidByte4,
MSEHasGuidByte7,
MSEHasGuidByte6,
MSEHasGuidByte5,
Expand Down
27 changes: 26 additions & 1 deletion src/server/game/Movement/MovementStructures.cpp
Expand Up @@ -2462,23 +2462,33 @@ MovementStatusElements MovementUpdateRunSpeed[] =
MSEPositionY,
MSEExtraElement,
MSEHasGuidByte6,
MSEHasMovementFlags2,
MSEHasPitch,
MSEHasGuidByte2,
MSEHasGuidByte5,
MSEHasSplineElevation,
MSEHasSpline,
MSEHasMovementFlags,
MSEHasTimestamp,
MSEHasGuidByte1,
MSEMovementFlags2,
MSEHasGuidByte3,
MSEMovementFlags,
MSEHasGuidByte7,
MSEHasGuidByte0,
MSEHasOrientation,
MSEHasTransportData,
MSEHasTransportGuidByte5,
MSEHasTransportTime2,
MSEHasTransportTime3,
MSEHasTransportGuidByte7,
MSEHasTransportGuidByte4,
MSEHasTransportGuidByte2,
MSEHasTransportGuidByte3,
MSEHasTransportGuidByte6,
MSEHasTransportGuidByte1,
MSEHasTransportGuidByte0,
MSEHasFallData,
MSEHasFallDirection,
MSEHasGuidByte4,
MSEZeroBit,
Expand All @@ -2492,9 +2502,11 @@ MovementStatusElements MovementUpdateRunSpeed[] =
MSETransportTime,
MSETransportGuidByte7,
MSETransportSeat,
MSETransportTime2,
MSETransportPositionY,
MSETransportGuidByte3,
MSETransportGuidByte2,
MSETransportTime3,
MSETransportPositionZ,
MSETimestamp,
MSEFallSinAngle,
Expand All @@ -2504,6 +2516,7 @@ MovementStatusElements MovementUpdateRunSpeed[] =
MSEFallTime,
MSEPitch,
MSEGuidByte6,
MSESplineElevation,
MSEGuidByte5,
MSEGuidByte7,
MSEGuidByte4,
Expand Down Expand Up @@ -4928,11 +4941,11 @@ void Movement::ExtraMovementStatusElement::ReadNextElement(ByteBuffer& packet)
packet >> Data.byteData;
break;
default:
ASSERT(PrintInvalidSequenceElement(element, __FUNCTION__));
break;
}
}


void Movement::ExtraMovementStatusElement::WriteNextElement(ByteBuffer& packet)
{
MovementStatusElements element = _elements[_index++];
Expand All @@ -4958,10 +4971,17 @@ void Movement::ExtraMovementStatusElement::WriteNextElement(ByteBuffer& packet)
packet << Data.byteData;
break;
default:
ASSERT(PrintInvalidSequenceElement(element, __FUNCTION__));
break;
}
}

bool Movement::PrintInvalidSequenceElement(MovementStatusElements element, char const* function)
{
sLog->outError(LOG_FILTER_UNITS, "Incorrect sequence element %d detected at %s", element, function);
return false;
}

Movement::PacketSender::PacketSender(Unit* unit, Opcodes serverControl, Opcodes playerControl, Opcodes broadcast /*= SMSG_PLAYER_MOVE*/, ExtraMovementStatusElement* extras /*= NULL*/)
: _unit(unit), _extraElements(extras)
{
Expand Down Expand Up @@ -4989,6 +5009,10 @@ void Movement::PacketSender::Send() const

if (_broadcast != NULL_OPCODE)
{
///! Need to reset current extra element index before writing another packet
if (_extraElements)
_extraElements->ResetIndex();

WorldPacket data(_broadcast);
_unit->WriteMovementInfo(data, _extraElements);
_unit->SendMessageToSet(&data, !isPlayerMovement);
Expand Down Expand Up @@ -5179,6 +5203,7 @@ MovementStatusElements* GetMovementStatusElementsSequence(Opcodes opcode)
return ChangeSeatsOnControlledVehicle;
case CMSG_CAST_SPELL:
case CMSG_PET_CAST_SPELL:
case CMSG_USE_ITEM:
return CastSpellEmbeddedMovement;
default:
break;
Expand Down
11 changes: 10 additions & 1 deletion src/server/game/Movement/MovementStructures.h
Expand Up @@ -95,7 +95,7 @@ enum MovementStatusElements
MSEZeroBit, // writes bit value 1 or skips read bit
MSEOneBit, // writes bit value 0 or skips read bit
MSEEnd, // marks end of parsing
MSEExtraElement, // Used to sinalize reading into ExtraMovementStatusElement, element sequence inside it is declared as separate array
MSEExtraElement, // Used to signalize reading into ExtraMovementStatusElement, element sequence inside it is declared as separate array
// Allowed internal elements are: GUID markers (not transport), MSEExtraFloat, MSEExtraInt8
MSEExtraFloat,
MSEExtraInt8,
Expand All @@ -104,8 +104,12 @@ enum MovementStatusElements

namespace Movement
{
class PacketSender;

class ExtraMovementStatusElement
{
friend class PacketSender;

public:
ExtraMovementStatusElement(MovementStatusElements const* elements) : _elements(elements), _index(0) { }

Expand All @@ -119,6 +123,9 @@ namespace Movement
int8 byteData;
} Data;

protected:
void ResetIndex() { _index = 0; }

private:
MovementStatusElements const* _elements;
uint32 _index;
Expand All @@ -137,6 +144,8 @@ namespace Movement
Opcodes _selfOpcode;
Opcodes _broadcast;
};

bool PrintInvalidSequenceElement(MovementStatusElements element, char const* function);
}

MovementStatusElements* GetMovementStatusElementsSequence(Opcodes opcode);
Expand Down
6 changes: 3 additions & 3 deletions src/server/game/Server/Protocol/Opcodes.cpp
Expand Up @@ -1012,14 +1012,14 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_COLLISION_HEIGHT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_KNOCK_BACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_PITCH_RATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_BACK_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_BACK_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TURN_RATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_WALK_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_WATER_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
Expand Down

2 comments on commit 46201ac

@vlad852
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great )

@VincentVanclef
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good job :)

Shauren is this issue: #9622 known?

Please sign in to comment.