[0039] Implement speed change opcodes.

Signed-off-by: Yaki Khadafi <elsoldollo@gmail.com>
This commit is contained in:
Yaki Khadafi 2012-08-09 18:51:38 +03:00 committed by Antz
parent 70b5a1109e
commit a290f4ab43
5 changed files with 243 additions and 50 deletions

View file

@ -1477,17 +1477,23 @@ bool ChatHandler::HandleModifyMountCommand(char* args)
chr->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP); chr->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP);
chr->Mount(mId); chr->Mount(mId);
WorldPacket data(SMSG_FORCE_RUN_SPEED_CHANGE, (8 + 4 + 1 + 4)); ObjectGuid guid = chr->GetObjectGuid();
data << chr->GetPackGUID();
data << (uint32)0; WorldPacket data(SMSG_MOVE_SET_RUN_SPEED, 8 + 4 + 4);
data << (uint8)0; // new 2.1.0 data.WriteGuidMask<6, 1, 5, 2, 7, 0, 3, 4>(guid);
data.WriteGuidBytes<5, 3, 1, 4>(guid);
data << uint32(0);
data << float(speed); data << float(speed);
data.WriteGuidBytes<6, 0, 7, 2>(guid);
chr->SendMessageToSet(&data, true); chr->SendMessageToSet(&data, true);
data.Initialize(SMSG_FORCE_SWIM_SPEED_CHANGE, (8 + 4 + 4)); data.Initialize(SMSG_MOVE_SET_SWIM_SPEED, 8 + 4 + 4);
data << chr->GetPackGUID(); data.WriteGuidMask<5, 4, 7, 3, 2, 0, 1, 6>(guid);
data << (uint32)0; data.WriteGuidBytes<0>(guid);
data << uint32(0);
data.WriteGuidBytes<6, 3, 5, 2>(guid);
data << float(speed); data << float(speed);
data.WriteGuidBytes<1, 7, 4>(guid);
chr->SendMessageToSet(&data, true); chr->SendMessageToSet(&data, true);
return true; return true;

View file

@ -268,18 +268,18 @@ void InitializeOpcodes()
OPCODE(CMSG_MOVE_START_SWIM, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); OPCODE(CMSG_MOVE_START_SWIM, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
OPCODE(CMSG_MOVE_STOP_SWIM, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); OPCODE(CMSG_MOVE_STOP_SWIM, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
//OPCODE(MSG_MOVE_SET_RUN_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_RUN_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_RUN_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(SMSG_MOVE_SET_RUN_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_RUN_BACK_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_RUN_BACK_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_RUN_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(SMSG_MOVE_SET_RUN_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_WALK_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_WALK_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_WALK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(SMSG_MOVE_SET_WALK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_SWIM_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_SWIM_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_SWIM_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(SMSG_MOVE_SET_SWIM_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_SWIM_BACK_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_SWIM_BACK_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_SWIM_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(SMSG_MOVE_SET_SWIM_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_ALL_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_ALL_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_TURN_RATE_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_TURN_RATE_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_TURN_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(SMSG_MOVE_SET_TURN_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_TOGGLE_COLLISION_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_TOGGLE_COLLISION_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
OPCODE(CMSG_MOVE_SET_FACING, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); OPCODE(CMSG_MOVE_SET_FACING, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
OPCODE(CMSG_MOVE_SET_PITCH, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); OPCODE(CMSG_MOVE_SET_PITCH, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
@ -311,6 +311,15 @@ void InitializeOpcodes()
//OPCODE(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveHoverAck ); //OPCODE(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveHoverAck );
//OPCODE(MSG_MOVE_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
OPCODE(SMSG_SPLINE_MOVE_SET_WALK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_SPLINE_MOVE_SET_RUN_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_SPLINE_MOVE_SET_SWIM_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_SPLINE_MOVE_SET_SWIM_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_SPLINE_MOVE_SET_TURN_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_SPLINE_MOVE_SET_FLIGHT_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_SPLINE_MOVE_SET_FLIGHT_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_SPLINE_MOVE_SET_PITCH_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_TRIGGER_CINEMATIC_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_TRIGGER_CINEMATIC_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(CMSG_OPENING_CINEMATIC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_OPENING_CINEMATIC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
OPCODE(SMSG_TRIGGER_CINEMATIC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_TRIGGER_CINEMATIC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@ -954,9 +963,9 @@ void InitializeOpcodes()
//OPCODE(CMSG_CHEAT_SET_HONOR_CURRENCY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_CHEAT_SET_HONOR_CURRENCY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(CMSG_CHEAT_SET_ARENA_CURRENCY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_CHEAT_SET_ARENA_CURRENCY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_FLIGHT_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_FLIGHT_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_FLIGHT_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(SMSG_MOVE_SET_FLIGHT_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_FLIGHT_BACK_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_FLIGHT_BACK_SPEED_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_FLIGHT_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(SMSG_MOVE_SET_FLIGHT_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(SMSG_FORCE_FLIGHT_SPEED_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_FORCE_FLIGHT_SPEED_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAckOpcodes); //OPCODE(CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAckOpcodes);
//OPCODE(SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@ -1175,7 +1184,7 @@ void InitializeOpcodes()
//OPCODE(CMSG_SET_RUNE_COUNT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_SET_RUNE_COUNT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(CMSG_SET_RUNE_COOLDOWN, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_SET_RUNE_COOLDOWN, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_PITCH_RATE_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_SET_PITCH_RATE_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(SMSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(SMSG_FORCE_PITCH_RATE_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_FORCE_PITCH_RATE_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(SMSG_SPLINE_SET_PITCH_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_SPLINE_SET_PITCH_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );

View file

@ -262,18 +262,18 @@ enum Opcodes
CMSG_MOVE_START_SWIM = 0x3206, // 4.3.4 15595 CMSG_MOVE_START_SWIM = 0x3206, // 4.3.4 15595
CMSG_MOVE_STOP_SWIM = 0x3802, // 4.3.4 15595 CMSG_MOVE_STOP_SWIM = 0x3802, // 4.3.4 15595
MSG_MOVE_SET_RUN_SPEED_CHEAT = 0x10CD, MSG_MOVE_SET_RUN_SPEED_CHEAT = 0x10CD,
MSG_MOVE_SET_RUN_SPEED = 0x10CE, SMSG_MOVE_SET_RUN_SPEED = 0x3DB5, // 4.3.4 15595
MSG_MOVE_SET_RUN_BACK_SPEED_CHEAT = 0x10CF, MSG_MOVE_SET_RUN_BACK_SPEED_CHEAT = 0x10CF,
MSG_MOVE_SET_RUN_BACK_SPEED = 0x10D0, SMSG_MOVE_SET_RUN_BACK_SPEED = 0x71B1, // 4.3.4 15595
MSG_MOVE_SET_WALK_SPEED_CHEAT = 0x10D1, MSG_MOVE_SET_WALK_SPEED_CHEAT = 0x10D1,
MSG_MOVE_SET_WALK_SPEED = 0x10D2, SMSG_MOVE_SET_WALK_SPEED = 0x1DA4, // 4.3.4 15595
MSG_MOVE_SET_SWIM_SPEED_CHEAT = 0x10D3, MSG_MOVE_SET_SWIM_SPEED_CHEAT = 0x10D3,
MSG_MOVE_SET_SWIM_SPEED = 0x10D4, SMSG_MOVE_SET_SWIM_SPEED = 0x15A7, // 4.3.4 15595
MSG_MOVE_SET_SWIM_BACK_SPEED_CHEAT = 0x10D5, MSG_MOVE_SET_SWIM_BACK_SPEED_CHEAT = 0x10D5,
MSG_MOVE_SET_SWIM_BACK_SPEED = 0x10D6, SMSG_MOVE_SET_SWIM_BACK_SPEED = 0x5CA6, // 4.3.4 15595
MSG_MOVE_SET_ALL_SPEED_CHEAT = 0x10D7, MSG_MOVE_SET_ALL_SPEED_CHEAT = 0x10D7,
MSG_MOVE_SET_TURN_RATE_CHEAT = 0x10D8, MSG_MOVE_SET_TURN_RATE_CHEAT = 0x10D8,
MSG_MOVE_SET_TURN_RATE = 0x10D9, SMSG_MOVE_SET_TURN_RATE = 0x30A5, // 4.3.4 15595
MSG_MOVE_TOGGLE_COLLISION_CHEAT = 0x10DA, MSG_MOVE_TOGGLE_COLLISION_CHEAT = 0x10DA,
CMSG_MOVE_SET_FACING = 0x7914, // 4.3.4 15595 CMSG_MOVE_SET_FACING = 0x7914, // 4.3.4 15595
CMSG_MOVE_SET_PITCH = 0x7312, // 4.3.4 15595 CMSG_MOVE_SET_PITCH = 0x7312, // 4.3.4 15595
@ -889,8 +889,8 @@ enum Opcodes
CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK = 0x1341, CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK = 0x1341,
MSG_MOVE_START_SWIM_CHEAT = 0x1342, MSG_MOVE_START_SWIM_CHEAT = 0x1342,
MSG_MOVE_STOP_SWIM_CHEAT = 0x1343, MSG_MOVE_STOP_SWIM_CHEAT = 0x1343,
SMSG_MOVE_SET_CAN_FLY = 0x1344, SMSG_MOVE_SET_CAN_FLY = 0x3DA1, // 4.3.4 15595
SMSG_MOVE_UNSET_CAN_FLY = 0x1345, SMSG_MOVE_UNSET_CAN_FLY = 0x15A2, // 4.3.4 15595
CMSG_MOVE_SET_CAN_FLY_ACK = 0x1346, CMSG_MOVE_SET_CAN_FLY_ACK = 0x1346,
CMSG_MOVE_SET_FLY = 0x1347, CMSG_MOVE_SET_FLY = 0x1347,
CMSG_SOCKET_GEMS = 0x1348, CMSG_SOCKET_GEMS = 0x1348,
@ -948,9 +948,9 @@ enum Opcodes
CMSG_CHEAT_SET_HONOR_CURRENCY = 0x137C, CMSG_CHEAT_SET_HONOR_CURRENCY = 0x137C,
CMSG_CHEAT_SET_ARENA_CURRENCY = 0x137D, CMSG_CHEAT_SET_ARENA_CURRENCY = 0x137D,
MSG_MOVE_SET_FLIGHT_SPEED_CHEAT = 0x137E, MSG_MOVE_SET_FLIGHT_SPEED_CHEAT = 0x137E,
MSG_MOVE_SET_FLIGHT_SPEED = 0x137F, SMSG_MOVE_SET_FLIGHT_SPEED = 0x71A6, // 4.3.4 15595
MSG_MOVE_SET_FLIGHT_BACK_SPEED_CHEAT = 0x1380, MSG_MOVE_SET_FLIGHT_BACK_SPEED_CHEAT = 0x1380,
MSG_MOVE_SET_FLIGHT_BACK_SPEED = 0x1381, SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0x30A2, // 4.3.4 15595
SMSG_FORCE_FLIGHT_SPEED_CHANGE = 0x1382, SMSG_FORCE_FLIGHT_SPEED_CHANGE = 0x1382,
CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x1383, CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x1383,
SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE = 0x1384, SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE = 0x1384,
@ -1169,7 +1169,7 @@ enum Opcodes
CMSG_SET_RUNE_COUNT = 0x1459, CMSG_SET_RUNE_COUNT = 0x1459,
CMSG_SET_RUNE_COOLDOWN = 0x145A, CMSG_SET_RUNE_COOLDOWN = 0x145A,
MSG_MOVE_SET_PITCH_RATE_CHEAT = 0x145B, MSG_MOVE_SET_PITCH_RATE_CHEAT = 0x145B,
MSG_MOVE_SET_PITCH_RATE = 0x145C, SMSG_MOVE_SET_PITCH_RATE = 0x75B0, // 4.3.4 15595
SMSG_FORCE_PITCH_RATE_CHANGE = 0x145D, SMSG_FORCE_PITCH_RATE_CHANGE = 0x145D,
CMSG_FORCE_PITCH_RATE_CHANGE_ACK = 0x145E, CMSG_FORCE_PITCH_RATE_CHANGE_ACK = 0x145E,
SMSG_SPLINE_SET_PITCH_RATE = 0x145F, SMSG_SPLINE_SET_PITCH_RATE = 0x145F,
@ -1390,6 +1390,15 @@ enum Opcodes
UMSG_UNKNOWN_1333 = 0x1536, UMSG_UNKNOWN_1333 = 0x1536,
UMSG_UNKNOWN_1334 = 0x1537, UMSG_UNKNOWN_1334 = 0x1537,
SMSG_PLAYER_MOVE = 0x79A2, // 4.3.4 15595 SMSG_PLAYER_MOVE = 0x79A2, // 4.3.4 15595
SMSG_SPLINE_MOVE_SET_FLIGHT_BACK_SPEED = 0x38B3, // 4.3.4 15595
SMSG_SPLINE_MOVE_SET_FLIGHT_SPEED = 0x39A0, // 4.3.4 15595
SMSG_SPLINE_MOVE_SET_PITCH_RATE = 0x14B0, // 4.3.4 15595
SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED = 0x3DB3, // 4.3.4 15595
SMSG_SPLINE_MOVE_SET_RUN_SPEED = 0x51B7, // 4.3.4 15595
SMSG_SPLINE_MOVE_SET_SWIM_SPEED = 0x39A4, // 4.3.4 15595
SMSG_SPLINE_MOVE_SET_SWIM_BACK_SPEED = 0x59A1, // 4.3.4 15595
SMSG_SPLINE_MOVE_SET_TURN_RATE = 0x78B5, // 4.3.4 15595
SMSG_SPLINE_MOVE_SET_WALK_SPEED = 0x34A5, // 4.3.4 15595
}; };
#define MAX_OPCODE_TABLE_SIZE 0xFFFF #define MAX_OPCODE_TABLE_SIZE 0xFFFF

View file

@ -8731,18 +8731,8 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate, bool forced)
m_speed_rate[mtype] = rate; m_speed_rate[mtype] = rate;
propagateSpeedChange(); propagateSpeedChange();
const uint16 SetSpeed2Opc_table[MAX_MOVE_TYPE][2] = WorldPacket data;
{ ObjectGuid guid = GetObjectGuid();
{MSG_MOVE_SET_WALK_SPEED, SMSG_FORCE_WALK_SPEED_CHANGE},
{MSG_MOVE_SET_RUN_SPEED, SMSG_FORCE_RUN_SPEED_CHANGE},
{MSG_MOVE_SET_RUN_BACK_SPEED, SMSG_FORCE_RUN_BACK_SPEED_CHANGE},
{MSG_MOVE_SET_SWIM_SPEED, SMSG_FORCE_SWIM_SPEED_CHANGE},
{MSG_MOVE_SET_SWIM_BACK_SPEED, SMSG_FORCE_SWIM_BACK_SPEED_CHANGE},
{MSG_MOVE_SET_TURN_RATE, SMSG_FORCE_TURN_RATE_CHANGE},
{MSG_MOVE_SET_FLIGHT_SPEED, SMSG_FORCE_FLIGHT_SPEED_CHANGE},
{MSG_MOVE_SET_FLIGHT_BACK_SPEED, SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE},
{MSG_MOVE_SET_PITCH_RATE, SMSG_FORCE_PITCH_RATE_CHANGE},
};
if (forced) if (forced)
{ {
@ -8753,22 +8743,201 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate, bool forced)
++((Player*)this)->m_forced_speed_changes[mtype]; ++((Player*)this)->m_forced_speed_changes[mtype];
} }
WorldPacket data(SetSpeed2Opc_table[mtype][1], 18); switch (mtype)
data << GetPackGUID(); {
data << (uint32)0; // moveEvent, NUM_PMOVE_EVTS = 0x39 case MOVE_WALK:
if (mtype == MOVE_RUN) {
data << uint8(0); // new 2.1.0 data.Initialize(SMSG_MOVE_SET_WALK_SPEED, 1 + 8 + 4 + 4);
data << float(GetSpeed(mtype)); data.WriteGuidMask<0, 4, 5, 2, 3, 1, 6, 7>(guid);
data.WriteGuidBytes<6, 1, 5>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<2>(guid);
data << uint32(0);
data.WriteGuidBytes<4, 0, 7, 3>(guid);
break;
}
case MOVE_RUN:
{
data.Initialize(SMSG_MOVE_SET_RUN_SPEED, 1 + 8 + 4 + 4 );
data.WriteGuidMask<6, 1, 5, 2, 7, 0, 3, 4>(guid);
data.WriteGuidBytes<5, 3, 1, 4>(guid);
data << uint32(0);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<6, 0, 7, 2>(guid);
break;
}
case MOVE_RUN_BACK:
{
data.Initialize(SMSG_MOVE_SET_RUN_BACK_SPEED, 1 + 8 + 4 + 4 );
data.WriteGuidMask<0, 6, 2, 1, 3, 5, 4, 7>(guid);
data.WriteGuidBytes<5>(guid);
data << uint32(0);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<0, 4, 7, 3, 1, 2, 6>(guid);
break;
}
case MOVE_SWIM:
{
data.Initialize(SMSG_MOVE_SET_SWIM_SPEED, 1 + 8 + 4 + 4 );
data.WriteGuidMask<5, 4, 7, 3, 2, 0, 1, 6>(guid);
data.WriteGuidBytes<0>(guid);
data << uint32(0);
data.WriteGuidBytes<6, 3, 5, 2>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<1, 7, 4>(guid);
break;
}
case MOVE_SWIM_BACK:
{
data.Initialize(SMSG_MOVE_SET_SWIM_BACK_SPEED, 1 + 8 + 4 + 4 );
data.WriteGuidMask<4, 2, 3, 6, 5, 1, 0, 7>(guid);
data << uint32(0);
data.WriteGuidBytes<0, 3, 4, 6, 5, 1>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<0, 7>(guid);
break;
}
case MOVE_TURN_RATE:
{
data.Initialize(SMSG_MOVE_SET_TURN_RATE, 1 + 8 + 4 + 4 );
data.WriteGuidMask<7, 2, 1, 0, 4, 5, 6, 3>(guid);
data.WriteGuidBytes<5, 7, 2>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<3, 1, 0>(guid);
data << uint32(0);
data.WriteGuidBytes<6, 4>(guid);
break;
}
case MOVE_FLIGHT:
{
data.Initialize(SMSG_MOVE_SET_FLIGHT_SPEED, 1 + 8 + 4 + 4 );
data.WriteGuidMask<0, 5, 1, 6, 3, 2, 7, 4>(guid);
data.WriteGuidBytes<0, 1, 7, 5>(guid);
data << float(GetSpeed(mtype));
data << uint32(0);
data.WriteGuidBytes<2, 6, 3, 4>(guid);
break;
}
case MOVE_FLIGHT_BACK:
{
data.Initialize(SMSG_MOVE_SET_FLIGHT_BACK_SPEED, 1 + 8 + 4 + 4 );
data.WriteGuidMask<1, 2, 6, 4, 7, 3, 0, 5>(guid);
data.WriteGuidBytes<3>(guid);
data << uint32(0);
data.WriteGuidBytes<6>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<1, 2, 4, 0, 5, 7>(guid);
break;
}
case MOVE_PITCH_RATE:
{
data.Initialize(SMSG_MOVE_SET_PITCH_RATE, 1 + 8 + 4 + 4 );
data.WriteGuidMask<1, 2, 6, 7, 0, 3, 5, 4>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<6, 4, 0>(guid);
data << uint32(0);
data.WriteGuidBytes<1, 2, 7, 3, 5>(guid);
break;
}
default:
sLog.outError("Unit::SetSpeed: Unsupported move type (%d), data not sent to client.", mtype);
return;
}
SendMessageToSet(&data, true); SendMessageToSet(&data, true);
} }
else else
{ {
m_movementInfo.UpdateTime(WorldTimer::getMSTime()); m_movementInfo.UpdateTime(WorldTimer::getMSTime());
WorldPacket data(SetSpeed2Opc_table[mtype][0], 64); switch (mtype)
data << GetPackGUID(); {
data << m_movementInfo; case MOVE_WALK:
data << float(GetSpeed(mtype)); {
data.Initialize(SMSG_SPLINE_MOVE_SET_WALK_SPEED, 1 + 8 + 4);
data.WriteGuidMask<0, 6, 7, 3, 5, 1, 2, 4>(guid);
data.WriteGuidBytes<0, 4, 7, 1, 5, 3>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<6, 2>(guid);
break;
}
case MOVE_RUN:
{
data.Initialize(SMSG_SPLINE_MOVE_SET_RUN_SPEED, 1 + 8 + 4);
data.WriteGuidMask<4, 0, 5, 7, 6, 3, 1, 2>(guid);
data.WriteGuidBytes<0, 7, 6, 5, 3, 4>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<2, 1>(guid);
break;
}
case MOVE_RUN_BACK:
{
data.Initialize(SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED, 1 + 8 + 4);
data.WriteGuidMask<1, 2, 6, 0, 3, 7, 5, 4>(guid);
data.WriteGuidBytes<1>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<2, 4, 0, 3, 6, 5, 7>(guid);
break;
}
case MOVE_SWIM:
{
data.Initialize(SMSG_SPLINE_MOVE_SET_SWIM_SPEED, 1 + 8 + 4);
data.WriteGuidMask<4, 2, 5, 0, 7, 6, 3, 1>(guid);
data.WriteGuidBytes<5, 6, 1, 0, 2, 4>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<7, 3>(guid);
break;
}
case MOVE_SWIM_BACK:
{
data.Initialize(SMSG_SPLINE_MOVE_SET_SWIM_BACK_SPEED, 1 + 8 + 4);
data.WriteGuidMask<0, 1, 3, 6, 4, 5, 7, 2>(guid);
data.WriteGuidBytes<5, 3, 1, 0, 7, 6>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<4, 2>(guid);
break;
}
case MOVE_TURN_RATE:
{
data.Initialize(SMSG_SPLINE_MOVE_SET_TURN_RATE, 1 + 8 + 4);
data.WriteGuidMask<2, 4, 6, 1, 3, 5, 7, 0>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<1, 5, 3, 2, 7, 4, 6, 0>(guid);
break;
}
case MOVE_FLIGHT:
{
data.Initialize(SMSG_SPLINE_MOVE_SET_FLIGHT_SPEED, 1 + 8 + 4);
data.WriteGuidMask<7, 4, 0, 1, 3, 6, 5, 2>(guid);
data.WriteGuidBytes<0, 5, 4, 7, 3, 2, 1, 6>(guid);
data << float(GetSpeed(mtype));
break;
}
case MOVE_FLIGHT_BACK:
{
data.Initialize(SMSG_SPLINE_MOVE_SET_FLIGHT_BACK_SPEED, 1 + 8 + 4);
data.WriteGuidMask<2, 1, 6, 5, 0, 3, 4, 7>(guid);
data.WriteGuidBytes<5>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<6, 1, 0, 2, 3, 7, 4>(guid);
break;
}
case MOVE_PITCH_RATE:
{
data.Initialize(SMSG_SPLINE_MOVE_SET_PITCH_RATE, 1 + 8 + 4);
data.WriteGuidMask<3, 5, 6, 1, 0, 4, 7, 2>(guid);
data.WriteGuidBytes<1, 5, 7, 0, 6, 3, 2>(guid);
data << float(GetSpeed(mtype));
data.WriteGuidBytes<4>(guid);
break;
}
default:
sLog.outError("Unit::SetSpeed: Unsupported move type (%d), data not sent to client.", mtype);
return;
}
SendMessageToSet(&data, true); SendMessageToSet(&data, true);
} }
} }

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "0038" #define REVISION_NR "0039"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__