From 8a43bd7293572a1cc93d84eee4badd60da762e6f Mon Sep 17 00:00:00 2001 From: Drake Fish Date: Sun, 22 Jan 2012 21:53:54 -0500 Subject: Core/Movement: Fixed forced speed changes. --- src/server/game/Entities/Unit/Unit.cpp | 171 +++++++++++++++++++++++++++++++-- 1 file changed, 163 insertions(+), 8 deletions(-) (limited to 'src') 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); -- cgit v1.2.3