aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp36
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h20
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp6
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h6
5 files changed, 52 insertions, 28 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 290cab3d089..c811d1736ef 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10731,17 +10731,17 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
propagateSpeedChange();
// Spline packets are for creatures and move_update are for players
- static OpcodeServer const moveTypeToOpcode[MAX_MOVE_TYPE][2] =
- {
- {SMSG_SPLINE_MOVE_SET_WALK_SPEED, SMSG_MOVE_UPDATE_WALK_SPEED },
- {SMSG_SPLINE_MOVE_SET_RUN_SPEED, SMSG_MOVE_UPDATE_RUN_SPEED },
- {SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED, SMSG_MOVE_UPDATE_RUN_BACK_SPEED },
- {SMSG_SPLINE_MOVE_SET_SWIM_SPEED, SMSG_MOVE_UPDATE_SWIM_SPEED },
- {SMSG_SPLINE_MOVE_SET_SWIM_BACK_SPEED, SMSG_MOVE_UPDATE_SWIM_BACK_SPEED },
- {SMSG_SPLINE_MOVE_SET_TURN_RATE, SMSG_MOVE_UPDATE_TURN_RATE },
- {SMSG_SPLINE_MOVE_SET_FLIGHT_SPEED, SMSG_MOVE_UPDATE_FLIGHT_SPEED },
- {SMSG_SPLINE_MOVE_SET_FLIGHT_BACK_SPEED, SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED},
- {SMSG_SPLINE_MOVE_SET_PITCH_RATE, SMSG_MOVE_UPDATE_PITCH_RATE },
+ static OpcodeServer const moveTypeToOpcode[MAX_MOVE_TYPE][3] =
+ {
+ {SMSG_SPLINE_MOVE_SET_WALK_SPEED, SMSG_MOVE_SET_WALK_SPEED, SMSG_MOVE_UPDATE_WALK_SPEED },
+ {SMSG_SPLINE_MOVE_SET_RUN_SPEED, SMSG_MOVE_SET_RUN_SPEED, SMSG_MOVE_UPDATE_RUN_SPEED },
+ {SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED, SMSG_MOVE_SET_RUN_BACK_SPEED, SMSG_MOVE_UPDATE_RUN_BACK_SPEED },
+ {SMSG_SPLINE_MOVE_SET_SWIM_SPEED, SMSG_MOVE_SET_SWIM_SPEED, SMSG_MOVE_UPDATE_SWIM_SPEED },
+ {SMSG_SPLINE_MOVE_SET_SWIM_BACK_SPEED, SMSG_MOVE_SET_SWIM_BACK_SPEED, SMSG_MOVE_UPDATE_SWIM_BACK_SPEED },
+ {SMSG_SPLINE_MOVE_SET_TURN_RATE, SMSG_MOVE_SET_TURN_RATE, SMSG_MOVE_UPDATE_TURN_RATE },
+ {SMSG_SPLINE_MOVE_SET_FLIGHT_SPEED, SMSG_MOVE_SET_FLIGHT_SPEED, SMSG_MOVE_UPDATE_FLIGHT_SPEED },
+ {SMSG_SPLINE_MOVE_SET_FLIGHT_BACK_SPEED, SMSG_MOVE_SET_FLIGHT_BACK_SPEED, SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED},
+ {SMSG_SPLINE_MOVE_SET_PITCH_RATE, SMSG_MOVE_SET_PITCH_RATE, SMSG_MOVE_UPDATE_PITCH_RATE },
};
if (GetTypeId() == TYPEID_PLAYER)
@@ -10757,14 +10757,22 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER)
{
- WorldPackets::Movement::MoveUpdate packet(moveTypeToOpcode[mtype][1]);
+ // Send notification to self
+ WorldPackets::Movement::MoveSetSpeed selfpacket(moveTypeToOpcode[mtype][1]);
+ selfpacket.MoverGUID = GetGUID();
+ selfpacket.SequenceIndex = m_movementCounter++;
+ selfpacket.Speed = rate;
+ ToPlayer()->GetSession()->SendPacket(selfpacket.Write());
+
+ // Send notification to other players
+ WorldPackets::Movement::MoveUpdateSpeed packet(moveTypeToOpcode[mtype][2]);
packet.movementInfo = m_movementInfo;
packet.Speed = rate;
- SendMessageToSet(packet.Write(), true);
+ SendMessageToSet(packet.Write(), false);
}
else
{
- WorldPackets::Movement::MoveSplineSet packet(moveTypeToOpcode[mtype][0]);
+ WorldPackets::Movement::MoveSplineSetSpeed packet(moveTypeToOpcode[mtype][0]);
packet.MoverGUID = GetGUID();
packet.Speed = rate;
SendMessageToSet(packet.Write(), true);
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index 1e77fea528d..f1d69746e80 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -263,14 +263,22 @@ WorldPacket const* WorldPackets::Movement::MonsterMove::Write()
return &_worldPacket;
}
-WorldPacket const* WorldPackets::Movement::MoveSplineSet::Write()
+WorldPacket const* WorldPackets::Movement::MoveSplineSetSpeed::Write()
{
_worldPacket << MoverGUID;
_worldPacket << Speed;
return &_worldPacket;
}
-WorldPacket const* WorldPackets::Movement::MoveUpdate::Write()
+WorldPacket const* WorldPackets::Movement::MoveSetSpeed::Write()
+{
+ _worldPacket << MoverGUID;
+ _worldPacket << SequenceIndex;
+ _worldPacket << Speed;
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Movement::MoveUpdateSpeed::Write()
{
_worldPacket << movementInfo;
_worldPacket << Speed;
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index 494064a8a90..cdaa0c79845 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -104,10 +104,10 @@ namespace WorldPackets
G3D::Vector3 Pos;
};
- class MoveSplineSet : public ServerPacket
+ class MoveSplineSetSpeed : public ServerPacket
{
public:
- MoveSplineSet(OpcodeServer opcode) : ServerPacket(opcode, 12) { }
+ MoveSplineSetSpeed(OpcodeServer opcode) : ServerPacket(opcode, 12) { }
WorldPacket const* Write() override;
@@ -115,10 +115,22 @@ namespace WorldPackets
float Speed;
};
- class MoveUpdate : public ServerPacket
+ class MoveSetSpeed : public ServerPacket
{
public:
- MoveUpdate(OpcodeServer opcode) : ServerPacket(opcode) { }
+ MoveSetSpeed(OpcodeServer opcode) : ServerPacket(opcode) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid MoverGUID;
+ uint32 SequenceIndex = 0; ///< Unit movement packet index, incremented each time
+ float Speed;
+ };
+
+ class MoveUpdateSpeed : public ServerPacket
+ {
+ public:
+ MoveUpdateSpeed(OpcodeServer opcode) : ServerPacket(opcode) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index b5e6e5d663e..933d1439c9d 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1099,8 +1099,6 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_COLLISION_DISABLE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_COLLISION_ENABLE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_FEATHER_FALL, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_FORCE_RUN_SPEED_CHANGE, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_FORCE_SWIM_SPEED_CHANGE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_GRAVITY_DISABLE, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_GRAVITY_ENABLE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_KNOCK_BACK, STATUS_UNHANDLED);
@@ -1117,9 +1115,9 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_HOVER, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_PITCH_RATE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_BACK_SPEED, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_SPEED, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_SPEED, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_BACK_SPEED, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_SPEED, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_SPEED, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_TURN_RATE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_WALK_SPEED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_TELEPORT, STATUS_UNHANDLED);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 32362802b58..a4080371003 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -1114,8 +1114,6 @@ enum OpcodeServer : uint32
SMSG_MOVE_COLLISION_DISABLE = 0xBADD,
SMSG_MOVE_COLLISION_ENABLE = 0xBADD,
SMSG_MOVE_FEATHER_FALL = 0xBADD,
- SMSG_MOVE_FORCE_RUN_SPEED_CHANGE = 0x08F5,
- SMSG_MOVE_FORCE_SWIM_SPEED_CHANGE = 0x061A,
SMSG_MOVE_GRAVITY_DISABLE = 0x02C6,
SMSG_MOVE_GRAVITY_ENABLE = 0xBADD,
SMSG_MOVE_KNOCK_BACK = 0xBADD,
@@ -1132,9 +1130,9 @@ enum OpcodeServer : uint32
SMSG_MOVE_SET_HOVER = 0x0296,
SMSG_MOVE_SET_PITCH_RATE = 0xBADD,
SMSG_MOVE_SET_RUN_BACK_SPEED = 0xBADD,
- SMSG_MOVE_SET_RUN_SPEED = 0xBADD,
+ SMSG_MOVE_SET_RUN_SPEED = 0x08F5,
SMSG_MOVE_SET_SWIM_BACK_SPEED = 0xBADD,
- SMSG_MOVE_SET_SWIM_SPEED = 0xBADD,
+ SMSG_MOVE_SET_SWIM_SPEED = 0x061A,
SMSG_MOVE_SET_TURN_RATE = 0xBADD,
SMSG_MOVE_SET_VEHICLE_REC_ID = 0xBADD,
SMSG_MOVE_SET_WALK_IN_AIR = 0xBADD,