aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrake Fish <drakefish@hotmail.com>2012-01-22 21:53:54 -0500
committerDrake Fish <drakefish@hotmail.com>2012-01-22 21:53:54 -0500
commit8a43bd7293572a1cc93d84eee4badd60da762e6f (patch)
tree5ea8101003c3d7fd9ebca4a229be5a140d1e9bc4
parent2940c169e0ee7f50d74ac0d5172d7fd76afb5673 (diff)
Core/Movement: Fixed forced speed changes.
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp171
1 files changed, 163 insertions, 8 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index c25e4bf455b..b11772e7b20 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12715,7 +12715,26 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
switch (mtype)
{
case MOVE_WALK:
- data.Initialize(SMSG_MOVE_SET_WALK_SPEED, 16);
+ data.Initialize(SMSG_MOVE_SET_WALK_SPEED, 1 + 8 + 4 + 4 );
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[3]);
+
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[1]);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[5]);
+ data << uint32(0);
+ data.WriteByteSeq(bytes[0]);
break;
case MOVE_RUN:
data.Initialize(SMSG_MOVE_SET_RUN_SPEED, 1 + 8 + 4 + 4 );
@@ -12742,25 +12761,161 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
data << uint32(0);
break;
case MOVE_RUN_BACK:
- data.Initialize(SMSG_MOVE_SET_RUN_BACK_SPEED, 16);
+ data.Initialize(SMSG_MOVE_SET_RUN_BACK_SPEED, 1 + 8 + 4 + 4 );
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[5]);
+
+ data << float(GetSpeed(mtype));
+
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[1]);
+ data << uint32(0);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[0]);
break;
case MOVE_SWIM:
- data.Initialize(SMSG_MOVE_SET_SWIM_SPEED, 16);
+ data.Initialize(SMSG_MOVE_SET_SWIM_SPEED, 1 + 8 + 4 + 4 );
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[0]);
+
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[0]);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[2]);
+ data << uint32(0);
break;
case MOVE_SWIM_BACK:
- data.Initialize(SMSG_MOVE_SET_SWIM_BACK_SPEED, 16);
+ data.Initialize(SMSG_MOVE_SET_SWIM_BACK_SPEED, 1 + 8 + 4 + 4 );
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[0]);
+
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[0]);
+ data << uint32(0);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[2]);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[5]);
break;
case MOVE_TURN_RATE:
- data.Initialize(SMSG_MOVE_SET_TURN_RATE, 16);
+ data.Initialize(SMSG_MOVE_SET_TURN_RATE, 1 + 8 + 4 + 4 );
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[4]);
+
+ data << float(GetSpeed(mtype));
+
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[5]);
+ data << uint32(0);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[7]);
break;
case MOVE_FLIGHT:
- data.Initialize(SMSG_MOVE_SET_FLIGHT_SPEED, 16);
+ data.Initialize(SMSG_MOVE_SET_FLIGHT_SPEED, 1 + 8 + 4 + 4 );
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[3]);
+
+ data << float(GetSpeed(mtype));
+
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[0]);
+ data.WriteByteSeq(bytes[2]);
+ data << uint32(0);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[4]);
break;
case MOVE_FLIGHT_BACK:
- data.Initialize(SMSG_MOVE_SET_FLIGHT_BACK_SPEED, 16);
+ data.Initialize(SMSG_MOVE_SET_FLIGHT_BACK_SPEED, 1 + 8 + 4 + 4 );
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[1]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[7]);
+
+ data.WriteByteSeq(bytes[0]);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[7]);
+ data << uint32(0);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[3]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[4]);
+ data.WriteByteSeq(bytes[5]);
break;
case MOVE_PITCH_RATE:
- data.Initialize(SMSG_MOVE_SET_PITCH_RATE, 16);
+ data.Initialize(SMSG_MOVE_SET_PITCH_RATE, 1 + 8 + 4 + 4 );
+ data.WriteByteMask(bytes[7]);
+ data.WriteByteMask(bytes[5]);
+ data.WriteByteMask(bytes[6]);
+ data.WriteByteMask(bytes[2]);
+ data.WriteByteMask(bytes[4]);
+ data.WriteByteMask(bytes[0]);
+ data.WriteByteMask(bytes[3]);
+ data.WriteByteMask(bytes[1]);
+
+ data.WriteByteSeq(bytes[0]);
+ data << uint32(0);
+ data.WriteByteSeq(bytes[3]);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[6]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[2]);
+ data.WriteByteSeq(bytes[4]);
break;
default:
sLog->outError("Unit::SetSpeed: Unsupported move type (%d), data not sent to client.", mtype);