aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp56
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h4
2 files changed, 49 insertions, 11 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 582b2e79596..39e9e077e3e 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12629,6 +12629,8 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
propagateSpeedChange();
WorldPacket data;
+ uint64 guid = GetGUID();
+ uint8* bytes = (uint8*)&guid;
if (!forced)
{
switch (mtype)
@@ -12637,7 +12639,26 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
data.Initialize(MSG_MOVE_SET_WALK_SPEED, 8+4+2+4+4+4+4+4+4+4);
break;
case MOVE_RUN:
- data.Initialize(MSG_MOVE_SET_RUN_SPEED, 8+4+2+4+4+4+4+4+4+4);
+ data.Initialize(SMSG_MOVE_SPLINE_SET_RUN_SPEED, 1 + 8 + 4);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[0]);
+
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[1]);
+
+ data << float(GetSpeed(mtype));
break;
case MOVE_RUN_BACK:
data.Initialize(MSG_MOVE_SET_RUN_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
@@ -12665,7 +12686,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
return;
}
- data.append(GetPackGUID());
+ /*data.append(GetPackGUID());
data << uint32(0); // movement flags
data << uint16(0); // unk flags
data << uint32(getMSTime());
@@ -12674,7 +12695,8 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
data << float(GetPositionZ());
data << float(GetOrientation());
data << uint32(0); // fall time
- data << float(GetSpeed(mtype));
+ data << float(GetSpeed(mtype));*/
+
SendMessageToSet(&data, true);
}
else
@@ -12696,7 +12718,28 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
data.Initialize(SMSG_FORCE_WALK_SPEED_CHANGE, 16);
break;
case MOVE_RUN:
- data.Initialize(SMSG_FORCE_RUN_SPEED_CHANGE, 17);
+ data.Initialize(SMSG_FORCE_RUN_SPEED_CHANGE, 1 + 8 + 4 + 4 );
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[6]);
+
+ data.WriteByteSeq(bytes[1]);
+
+ data << float(GetSpeed(mtype));
+
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[5]);
+ data << uint32(0);
break;
case MOVE_RUN_BACK:
data.Initialize(SMSG_FORCE_RUN_BACK_SPEED_CHANGE, 16);
@@ -12723,11 +12766,6 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
sLog->outError("Unit::SetSpeed: Unsupported move type (%d), data not sent to client.", mtype);
return;
}
- data.append(GetPackGUID());
- data << (uint32)0; // moveEvent, NUM_PMOVE_EVTS = 0x39
- if (mtype == MOVE_RUN)
- data << uint8(0); // new 2.1.0
- data << float(GetSpeed(mtype));
SendMessageToSet(&data, true);
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 0bdfd6cc76e..ed657814d18 100755
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -485,7 +485,8 @@ enum Opcodes
MSG_MOVE_SET_RUN_BACK_SPEED = 0x00,
MSG_MOVE_SET_RUN_BACK_SPEED_CHEAT = 0x00,
MSG_MOVE_SET_RUN_MODE = 0x21A4,
- MSG_MOVE_SET_RUN_SPEED = 0x00,
+ SMSG_FORCE_RUN_SPEED_CHANGE = 0xE24E, // for self
+ SMSG_MOVE_SPLINE_SET_RUN_SPEED = 0xB2CE, // for others
MSG_MOVE_SET_RUN_SPEED_CHEAT = 0x00,
MSG_MOVE_SET_SWIM_BACK_SPEED = 0x00,
MSG_MOVE_SET_SWIM_BACK_SPEED_CHEAT = 0x00,
@@ -694,7 +695,6 @@ enum Opcodes
SMSG_FORCE_MOVE_UNROOT = 0x00,
SMSG_FORCE_PITCH_RATE_CHANGE = 0x00,
SMSG_FORCE_RUN_BACK_SPEED_CHANGE = 0x00,
- SMSG_FORCE_RUN_SPEED_CHANGE = 0x00,
SMSG_FORCE_SEND_QUEUED_PACKETS = 0x1380,
SMSG_FORCE_SWIM_BACK_SPEED_CHANGE = 0x00,
SMSG_FORCE_SWIM_SPEED_CHANGE = 0x00,