diff options
author | Warpten <vertozor@gmail.com> | 2016-06-03 00:13:13 +0200 |
---|---|---|
committer | Warpten <vertozor@gmail.com> | 2016-06-03 00:13:31 +0200 |
commit | c631656fb8c751e65cce6b880bee8f213e07ac98 (patch) | |
tree | 890ef2acc6b673f946745ede7cb6deb20496e743 /src | |
parent | 832944db24b917e55dd3fccfa44302031bdd6e2e (diff) |
Core/PacketIO: Update a few movement-related structures and enable some opcodes.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Server/Packets/MovementPackets.cpp | 48 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MovementPackets.h | 23 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 40 |
3 files changed, 78 insertions, 33 deletions
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index f0eecb3a16d..8795042bf86 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -89,7 +89,7 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo) data >> movementInfo.pitch; data >> movementInfo.splineElevation; - uint32 removeMovementForcesCount; + uint32 removeMovementForcesCount = 0; data >> removeMovementForcesCount; uint32 int168; @@ -228,8 +228,12 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline data.appendPackXYZ(pos.x, pos.y, pos.z); data.WriteBits(movementSpline.Face, 2); data.WriteBit(movementSpline.SplineFilter.is_initialized()); + data.WriteBit(0); // New Legion bit data.FlushBits(); + if (movementSpline.SplineFilter) + data << *movementSpline.SplineFilter; + switch (movementSpline.Face) { case ::Movement::MONSTER_MOVE_FACING_SPOT: @@ -244,8 +248,12 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline break; } - if (movementSpline.SplineFilter) - data << *movementSpline.SplineFilter; + // New legion block, controlled by new bit above + // if (false) + // { + // data << ObjectGuid::Empty; + // data << 0 << 0 << 0; + // } return data; } @@ -254,16 +262,12 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementMonster { data << movementMonsterSpline.ID; data << movementMonsterSpline.Destination; - data << movementMonsterSpline.Move; data.WriteBit(movementMonsterSpline.CrzTeleport); // Unk bits. 0 if monster is moving, 1 or 2 if stopped - if (movementMonsterSpline.Move.Flags) - data.WriteBits(0, 2); - else - data.WriteBits(2, 2); + data.WriteBits(movementMonsterSpline.Move.Flags ? 0 : 2, 2); - data.FlushBits(); + data << movementMonsterSpline.Move; return data; } @@ -521,14 +525,12 @@ WorldPacket const* WorldPackets::Movement::MoveTeleport::Write() _worldPacket << SequenceIndex; _worldPacket << Pos.PositionXYZStream(); _worldPacket << Facing; + _worldPacket << uint8(0); //! New in 7.x (gets written into movement queue node) - _worldPacket.WriteBit(TransportGUID.is_initialized()); _worldPacket.WriteBit(Vehicle.is_initialized()); + _worldPacket.WriteBit(TransportGUID.is_initialized()); _worldPacket.FlushBits(); - if (TransportGUID) - _worldPacket << *TransportGUID; - if (Vehicle) { _worldPacket << Vehicle->VehicleSeatIndex; @@ -537,6 +539,9 @@ WorldPacket const* WorldPackets::Movement::MoveTeleport::Write() _worldPacket.FlushBits(); } + if (TransportGUID) + _worldPacket << *TransportGUID; + return &_worldPacket; } @@ -548,6 +553,7 @@ WorldPacket const* WorldPackets::Movement::MoveUpdateTeleport::Write() for (WorldPackets::Movement::MovementForce const& force : MovementForces) { _worldPacket << force.ID; + _worldPacket << force.Origin; _worldPacket << force.Direction; _worldPacket << force.TransportPosition; _worldPacket << force.TransportID; @@ -675,6 +681,22 @@ WorldPacket const* WorldPackets::Movement::MoveUpdateCollisionHeight::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Movement::MoveUpdateRemoveMovementForce::Write() +{ + _worldPacket << *movementInfo; + _worldPacket << TriggerGUID; + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Movement::MoveUpdateApplyMovementForce::Write() +{ + _worldPacket << *movementInfo; + _worldPacket << Force; + + return &_worldPacket; +} + void WorldPackets::Movement::MoveSetCollisionHeightAck::Read() { _worldPacket >> Data; diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index 6d97161d9c9..6e1337e2912 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -248,6 +248,7 @@ namespace WorldPackets struct MovementForce { ObjectGuid ID; + G3D::Vector3 Origin; G3D::Vector3 Direction; G3D::Vector3 TransportPosition; uint32 TransportID = 0; @@ -275,6 +276,28 @@ namespace WorldPackets Optional<float> PitchRate; }; + class MoveUpdateApplyMovementForce final : public ServerPacket + { + public: + MoveUpdateApplyMovementForce() : ServerPacket(SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE) { } + + WorldPacket const* Write() override; + + MovementInfo* movementInfo = nullptr; + MovementForce Force; + }; + + class MoveUpdateRemoveMovementForce final : public ServerPacket + { + public: + MoveUpdateRemoveMovementForce() : ServerPacket(SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE) { } + + WorldPacket const* Write() override; + + MovementInfo* movementInfo = nullptr; + ObjectGuid TriggerGUID; + }; + class MoveTeleportAck final : public ClientPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index ca49b9c6def..f4cf3eb99bc 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1327,7 +1327,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_LAND_WALK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_NORMAL_FALL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_PITCH_RATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1364,27 +1364,27 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SPLINE_UNROOT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SPLINE_UNSET_FLYING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SPLINE_UNSET_HOVER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_TELEPORT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_TELEPORT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNROOT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVERING, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_COLLISION_HEIGHT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_KNOCK_BACK, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_PITCH_RATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_BACK_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_BACK_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TELEPORT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TURN_RATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_WALK_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVERING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_COLLISION_HEIGHT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_KNOCK_BACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_PITCH_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TELEPORT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TURN_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_WALK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTIPLE_PACKETS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NEW_TAXI_PATH, STATUS_NEVER, CONNECTION_TYPE_REALM); |