aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarpten <vertozor@gmail.com>2016-06-03 00:13:13 +0200
committerWarpten <vertozor@gmail.com>2016-06-03 00:13:31 +0200
commitc631656fb8c751e65cce6b880bee8f213e07ac98 (patch)
tree890ef2acc6b673f946745ede7cb6deb20496e743
parent832944db24b917e55dd3fccfa44302031bdd6e2e (diff)
Core/PacketIO: Update a few movement-related structures and enable some opcodes.
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp48
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h23
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp40
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);