aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-09-07 16:58:58 +0200
committerShauren <shauren.trinity@gmail.com>2019-09-07 16:58:58 +0200
commit8e98ceb2936842ea0032cbfdc04a510d6b1e5de0 (patch)
treeabb48f72a728cc97af6e934de1310047b5725341 /src/server/game/Server/Packets
parente0a0dbe41c5ed0db078d0897d54f3cd8f75abc99 (diff)
Core/Movement: Implemented movement forces
Diffstat (limited to 'src/server/game/Server/Packets')
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp59
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h77
2 files changed, 108 insertions, 28 deletions
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index c14d96e0964..943d312dffb 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -579,7 +579,7 @@ WorldPacket const* WorldPackets::Movement::MoveTeleport::Write()
return &_worldPacket;
}
-ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MovementForce const& movementForce)
+ByteBuffer& operator<<(ByteBuffer& data, MovementForce const& movementForce)
{
data << movementForce.ID;
data << movementForce.Origin;
@@ -592,11 +592,23 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MovementForce c
return data;
}
+ByteBuffer& operator>>(ByteBuffer& data, MovementForce& movementForce)
+{
+ data >> movementForce.ID;
+ data >> movementForce.Origin;
+ data >> movementForce.Direction;
+ data >> movementForce.TransportID;
+ data >> movementForce.Magnitude;
+ movementForce.Type = data.ReadBits(2);
+
+ return data;
+}
+
WorldPacket const* WorldPackets::Movement::MoveUpdateTeleport::Write()
{
_worldPacket << *Status;
- _worldPacket << uint32(MovementForces.size());
+ _worldPacket << uint32(MovementForces ? MovementForces->size() : 0);
_worldPacket.WriteBit(WalkSpeed.is_initialized());
_worldPacket.WriteBit(RunSpeed.is_initialized());
_worldPacket.WriteBit(RunBackSpeed.is_initialized());
@@ -608,8 +620,9 @@ WorldPacket const* WorldPackets::Movement::MoveUpdateTeleport::Write()
_worldPacket.WriteBit(PitchRate.is_initialized());
_worldPacket.FlushBits();
- for (WorldPackets::Movement::MovementForce const& force : MovementForces)
- _worldPacket << force;
+ if (MovementForces)
+ for (MovementForce const& force : *MovementForces)
+ _worldPacket << force;
if (WalkSpeed)
_worldPacket << *WalkSpeed;
@@ -745,18 +758,48 @@ WorldPacket const* WorldPackets::Movement::MoveUpdateCollisionHeight::Write()
return &_worldPacket;
}
-WorldPacket const* WorldPackets::Movement::MoveUpdateRemoveMovementForce::Write()
+WorldPacket const* WorldPackets::Movement::MoveApplyMovementForce::Write()
{
- _worldPacket << *Status;
- _worldPacket << TriggerGUID;
+ _worldPacket << MoverGUID;
+ _worldPacket << SequenceIndex;
+ _worldPacket << *Force;
return &_worldPacket;
}
+void WorldPackets::Movement::MoveApplyMovementForceAck::Read()
+{
+ _worldPacket >> Ack;
+ _worldPacket >> Force;
+}
+
+WorldPacket const* WorldPackets::Movement::MoveRemoveMovementForce::Write()
+{
+ _worldPacket << MoverGUID;
+ _worldPacket << SequenceIndex;
+ _worldPacket << ID;
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Movement::MoveRemoveMovementForceAck::Read()
+{
+ _worldPacket >> Ack;
+ _worldPacket >> ID;
+}
+
WorldPacket const* WorldPackets::Movement::MoveUpdateApplyMovementForce::Write()
{
_worldPacket << *Status;
- _worldPacket << Force;
+ _worldPacket << *Force;
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Movement::MoveUpdateRemoveMovementForce::Write()
+{
+ _worldPacket << *Status;
+ _worldPacket << TriggerGUID;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index f806551c24c..47197949c55 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -33,6 +33,12 @@ namespace WorldPackets
{
namespace Movement
{
+ struct MovementAck
+ {
+ MovementInfo Status;
+ int32 AckIndex = 0;
+ };
+
class ClientPlayerMovement final : public ClientPacket
{
public:
@@ -269,16 +275,6 @@ namespace WorldPackets
uint8 PreloadWorld = 0;
};
- struct MovementForce
- {
- ObjectGuid ID;
- TaggedPosition<Position::XYZ> Origin;
- TaggedPosition<Position::XYZ> Direction;
- uint32 TransportID = 0;
- float Magnitude = 0;
- uint8 Type = 0;
- };
-
class MoveUpdateTeleport final : public ServerPacket
{
public:
@@ -287,7 +283,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
MovementInfo* Status = nullptr;
- std::vector<MovementForce> MovementForces;
+ ::MovementForces::Container const* MovementForces = nullptr;
Optional<float> SwimBackSpeed;
Optional<float> FlightSpeed;
Optional<float> SwimSpeed;
@@ -299,21 +295,67 @@ namespace WorldPackets
Optional<float> PitchRate;
};
+ class MoveApplyMovementForce final : public ServerPacket
+ {
+ public:
+ MoveApplyMovementForce() : ServerPacket(SMSG_MOVE_APPLY_MOVEMENT_FORCE, 16 + 4 + 16 + 12 + 12 + 4 + 4 + 1) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid MoverGUID;
+ int32 SequenceIndex = 0;
+ MovementForce const* Force = nullptr;
+ };
+
+ class MoveApplyMovementForceAck final : public ClientPacket
+ {
+ public:
+ MoveApplyMovementForceAck(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK, std::move(packet)) { }
+
+ void Read() override;
+
+ MovementAck Ack;
+ MovementForce Force;
+ };
+
+ class MoveRemoveMovementForce final : public ServerPacket
+ {
+ public:
+ MoveRemoveMovementForce() : ServerPacket(SMSG_MOVE_REMOVE_MOVEMENT_FORCE, 16 + 4 + 16) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid MoverGUID;
+ int32 SequenceIndex = 0;
+ ObjectGuid ID;
+ };
+
+ class MoveRemoveMovementForceAck final : public ClientPacket
+ {
+ public:
+ MoveRemoveMovementForceAck(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK, std::move(packet)) { }
+
+ void Read() override;
+
+ MovementAck Ack;
+ ObjectGuid ID;
+ };
+
class MoveUpdateApplyMovementForce final : public ServerPacket
{
public:
- MoveUpdateApplyMovementForce() : ServerPacket(SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE) { }
+ MoveUpdateApplyMovementForce() : ServerPacket(SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE, sizeof(MovementInfo) + 16 + 12 + 12 + 4 + 4 + 1) { }
WorldPacket const* Write() override;
MovementInfo* Status = nullptr;
- MovementForce Force;
+ MovementForce const* Force = nullptr;
};
class MoveUpdateRemoveMovementForce final : public ServerPacket
{
public:
- MoveUpdateRemoveMovementForce() : ServerPacket(SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE) { }
+ MoveUpdateRemoveMovementForce() : ServerPacket(SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE, sizeof(MovementInfo) + 16) { }
WorldPacket const* Write() override;
@@ -333,12 +375,6 @@ namespace WorldPackets
int32 MoveTime = 0;
};
- struct MovementAck
- {
- MovementInfo Status;
- int32 AckIndex = 0;
- };
-
class MovementAckMessage final : public ClientPacket
{
public:
@@ -616,5 +652,6 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo);
ByteBuffer& operator>>(ByteBuffer& data, MovementInfo::TransportInfo& transportInfo);
ByteBuffer& operator<<(ByteBuffer& data, MovementInfo::TransportInfo const& transportInfo);
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Movement::MovementAck& movementAck);
+ByteBuffer& operator<<(ByteBuffer& data, MovementForce const& movementForce);
#endif // MovementPackets_h__