[0067] Set- canfly/forcemoveroot/waterwalk packets, SMSG_PLAY_SPELL_VISUAL

Signed-off-by: Yaki Khadafi <ElSolDolLo@gmail.com>
This commit is contained in:
Yaki Khadafi 2012-08-12 12:53:15 +03:00 committed by Antz
parent 6b1df231a5
commit e7d0275ae2
13 changed files with 237 additions and 104 deletions

View file

@ -5980,10 +5980,8 @@ bool ChatHandler::HandleGMFlyCommand(char* args)
if (!target) if (!target)
target = m_session->GetPlayer(); target = m_session->GetPlayer();
WorldPacket data(12); WorldPacket data;
data.SetOpcode(value ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY); target->BuildMoveSetCanFlyPacket(&data, value, 0);
data << target->GetPackGUID();
data << uint32(0); // unknown
target->SendMessageToSet(&data, true); target->SendMessageToSet(&data, true);
PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, GetNameLink(target).c_str(), args); PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, GetNameLink(target).c_str(), args);
return true; return true;

View file

@ -296,9 +296,8 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recv_data*/)
if ((GetPlayer()->GetPositionZ() < height + 0.1f) && !(GetPlayer()->IsInWater())) if ((GetPlayer()->GetPositionZ() < height + 0.1f) && !(GetPlayer()->IsInWater()))
GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT); GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT);
WorldPacket data(SMSG_FORCE_MOVE_ROOT, (8 + 4)); // guess size WorldPacket data;
data << GetPlayer()->GetPackGUID(); GetPlayer()->BuildForceMoveRootPacket(&data, true, 2);
data << (uint32)2;
SendPacket(&data); SendPacket(&data);
GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
} }
@ -327,10 +326,8 @@ void WorldSession::HandleLogoutCancelOpcode(WorldPacket& /*recv_data*/)
// not remove flags if can't free move - its not set in Logout request code. // not remove flags if can't free move - its not set in Logout request code.
if (GetPlayer()->CanFreeMove()) if (GetPlayer()->CanFreeMove())
{ {
//!we can move again //! we can move again
data.Initialize(SMSG_FORCE_MOVE_UNROOT, 8); // guess size GetPlayer()->BuildForceMoveRootPacket(&data, false, 0);
data << GetPlayer()->GetPackGUID();
data << uint32(0);
SendPacket(&data); SendPacket(&data);
//! Stand Up //! Stand Up
@ -1034,13 +1031,16 @@ void WorldSession::HandleFeatherFallAck(WorldPacket& recv_data)
DEBUG_LOG("WORLD: CMSG_MOVE_FEATHER_FALL_ACK"); DEBUG_LOG("WORLD: CMSG_MOVE_FEATHER_FALL_ACK");
// not used // not used
recv_data.rpos(recv_data.wpos()); // prevent warnings spam recv_data.rfinish(); // prevent warnings spam
/*
bitsream packet
*/
} }
void WorldSession::HandleMoveUnRootAck(WorldPacket& recv_data) void WorldSession::HandleMoveUnRootAck(WorldPacket& recv_data)
{ {
// not used // not used
recv_data.rpos(recv_data.wpos()); // prevent warnings spam recv_data.rfinish(); // prevent warnings spam
/* /*
bitsream packet bitsream packet
*/ */
@ -1048,8 +1048,8 @@ void WorldSession::HandleMoveUnRootAck(WorldPacket& recv_data)
void WorldSession::HandleMoveRootAck(WorldPacket& recv_data) void WorldSession::HandleMoveRootAck(WorldPacket& recv_data)
{ {
// no used // not used
recv_data.rpos(recv_data.wpos()); // prevent warnings spam recv_data.rfinish(); // prevent warnings spam
/* /*
bitsream packet bitsream packet
*/ */
@ -1490,20 +1490,14 @@ void WorldSession::HandleMoveSetCanFlyAckOpcode(WorldPacket& recv_data)
{ {
// fly mode on/off // fly mode on/off
DEBUG_LOG("WORLD: CMSG_MOVE_SET_CAN_FLY_ACK"); DEBUG_LOG("WORLD: CMSG_MOVE_SET_CAN_FLY_ACK");
// recv_data.hexlike();
ObjectGuid guid;
MovementInfo movementInfo; MovementInfo movementInfo;
recv_data >> guid.ReadAsPacked();
recv_data >> Unused<uint32>(); // unk
recv_data >> movementInfo; recv_data >> movementInfo;
recv_data >> Unused<float>(); // unk2
if (_player->GetMover()->GetObjectGuid() != guid) if (_player->GetMover()->GetObjectGuid() != movementInfo.GetGuid())
{ {
DEBUG_LOG("WorldSession::HandleMoveSetCanFlyAckOpcode: player %s, mover %s, received %s, ignored", DEBUG_LOG("WorldSession::HandleMoveSetCanFlyAckOpcode: player %s, mover %s, received %s, ignored",
_player->GetGuidStr().c_str(), _player->GetMover()->GetGuidStr().c_str(), guid.GetString().c_str()); _player->GetGuidStr().c_str(), _player->GetMover()->GetGuidStr().c_str(), movementInfo.GetGuid().GetString().c_str());
return; return;
} }

View file

@ -468,26 +468,23 @@ void WorldSession::HandleMoveHoverAck(WorldPacket& recv_data)
{ {
DEBUG_LOG("CMSG_MOVE_HOVER_ACK"); DEBUG_LOG("CMSG_MOVE_HOVER_ACK");
ObjectGuid guid; // guid - unused recv_data.rfinish();
/*
MovementInfo movementInfo; MovementInfo movementInfo;
recv_data >> guid.ReadAsPacked();
recv_data >> Unused<uint32>(); // unk1
recv_data >> movementInfo; recv_data >> movementInfo;
recv_data >> Unused<uint32>(); // unk2 */
} }
void WorldSession::HandleMoveWaterWalkAck(WorldPacket& recv_data) void WorldSession::HandleMoveWaterWalkAck(WorldPacket& recv_data)
{ {
DEBUG_LOG("CMSG_MOVE_WATER_WALK_ACK"); DEBUG_LOG("CMSG_MOVE_WATER_WALK_ACK");
ObjectGuid guid; // guid - unused recv_data.rfinish();
MovementInfo movementInfo;
recv_data >> guid.ReadAsPacked(); /*
recv_data >> Unused<uint32>(); // unk1 MovementInfo movementInfo;
recv_data >> movementInfo; recv_data >> movementInfo;
recv_data >> Unused<uint32>(); // unk2 */
} }
void WorldSession::HandleSummonResponseOpcode(WorldPacket& recv_data) void WorldSession::HandleSummonResponseOpcode(WorldPacket& recv_data)

View file

@ -88,6 +88,7 @@ enum MovementStatusElements
MSETransportTime, MSETransportTime,
MSETransportTime2, MSETransportTime2,
MSETransportTime3, MSETransportTime3,
MSEMovementCounter,
MSEEnd, MSEEnd,
MSE_COUNT MSE_COUNT
}; };
@ -2035,6 +2036,79 @@ MovementStatusElements MovementFallResetSequence[] =
MSEEnd, MSEEnd,
}; };
MovementStatusElements MovementSetCanFlyAckSequence[] =
{
MSEPositionY,
MSEMovementCounter,
MSEPositionX,
MSEPositionZ,
MSEGuidBit3,
MSEHasTimestamp,
MSEGuidBit4,
MSEGuidBit0,
MSEHasOrientation,
MSEHasFallData,
MSEGuidBit2,
MSEGuidBit5,
MSEHasSplineElevation,
MSEHasMovementFlags2,
MSEHasUnknownBit,
MSEGuidBit7,
MSEHasSpline,
MSEGuidBit6,
MSEGuidBit1,
MSEHasMovementFlags,
MSEHasTransportData,
MSEHasPitch,
MSETransportGuidBit3,
MSETransportGuidBit1,
MSETransportGuidBit2,
MSEHasTransportTime3,
MSEHasTransportTime2,
MSETransportGuidBit0,
MSETransportGuidBit5,
MSETransportGuidBit7,
MSETransportGuidBit4,
MSETransportGuidBit6,
MSEFlags2,
MSEFlags,
MSEHasFallDirection,
MSEGuidByte1,
MSEGuidByte0,
MSEGuidByte2,
MSEGuidByte3,
MSEGuidByte7,
MSEGuidByte6,
MSEGuidByte4,
MSEGuidByte5,
MSETransportTime2,
MSETransportGuidByte6,
MSETransportTime,
MSETransportTime3,
MSETransportGuidByte7,
MSETransportPositionZ,
MSETransportGuidByte3,
MSETransportPositionY,
MSETransportGuidByte5,
MSETransportPositionX,
MSETransportGuidByte2,
MSETransportPositionO,
MSETransportSeat,
MSETransportGuidByte1,
MSETransportGuidByte0,
MSETransportGuidByte4,
MSEFallTime,
MSEFallCosAngle,
MSEFallHorizontalSpeed,
MSEFallSinAngle,
MSEFallVerticalSpeed,
MSEPitch,
MSEPositionO,
MSETimestamp,
MSESplineElevation,
MSEEnd,
};
MovementStatusElements* GetMovementStatusElementsSequence(uint16 opcode) MovementStatusElements* GetMovementStatusElementsSequence(uint16 opcode)
{ {
switch(opcode) switch(opcode)
@ -2047,6 +2121,8 @@ MovementStatusElements* GetMovementStatusElementsSequence(uint16 opcode)
return MovementFallResetSequence; return MovementFallResetSequence;
case CMSG_MOVE_JUMP: case CMSG_MOVE_JUMP:
return MovementJumpSequence; return MovementJumpSequence;
case CMSG_MOVE_SET_CAN_FLY_ACK:
return MovementSetCanFlyAckSequence;
case CMSG_MOVE_SET_FACING: case CMSG_MOVE_SET_FACING:
return MovementSetFacingSequence; return MovementSetFacingSequence;
case CMSG_MOVE_SET_PITCH: case CMSG_MOVE_SET_PITCH:

View file

@ -292,14 +292,13 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recv_data)
_player->ModifyMoney(-int32(nSpellCost)); _player->ModifyMoney(-int32(nSpellCost));
WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 12); // visual effect on trainer // visual effect on trainer
data << ObjectGuid(guid); WorldPacket data;
data << uint32(0xB3); // index from SpellVisualKit.dbc unit->BuildSendPlayVisualPacket(&data, 0xB3, false);
SendPacket(&data); SendPacket(&data);
data.Initialize(SMSG_PLAY_SPELL_IMPACT, 12); // visual effect on player // visual effect on player
data << _player->GetObjectGuid(); _player->BuildSendPlayVisualPacket(&data, 0x016A, true);
data << uint32(0x016A); // index from SpellVisualKit.dbc
SendPacket(&data); SendPacket(&data);
// learn explicitly or cast explicitly // learn explicitly or cast explicitly

View file

@ -285,8 +285,8 @@ void InitializeOpcodes()
OPCODE(CMSG_MOVE_SET_PITCH, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); OPCODE(CMSG_MOVE_SET_PITCH, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
//OPCODE(MSG_MOVE_WORLDPORT_ACK, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode ); //OPCODE(MSG_MOVE_WORLDPORT_ACK, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode );
OPCODE(SMSG_MONSTER_MOVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_MONSTER_MOVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(SMSG_MOVE_WATER_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_MOVE_WATER_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(SMSG_MOVE_LAND_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_MOVE_LAND_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_MOVE_CHARM_PORT_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_MOVE_CHARM_PORT_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(CMSG_MOVE_SET_RAW_POSITION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_MOVE_SET_RAW_POSITION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(SMSG_FORCE_RUN_SPEED_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_FORCE_RUN_SPEED_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@ -295,10 +295,10 @@ void InitializeOpcodes()
//OPCODE(CMSG_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAckOpcodes); //OPCODE(CMSG_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAckOpcodes);
//OPCODE(SMSG_FORCE_SWIM_SPEED_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_FORCE_SWIM_SPEED_CHANGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_FORCE_SWIM_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAckOpcodes); //OPCODE(CMSG_FORCE_SWIM_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAckOpcodes);
//OPCODE(SMSG_FORCE_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_FORCE_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_FORCE_MOVE_ROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRootAck ); OPCODE(CMSG_FORCE_MOVE_ROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRootAck );
//OPCODE(SMSG_FORCE_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_FORCE_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_FORCE_MOVE_UNROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveUnRootAck ); OPCODE(CMSG_FORCE_MOVE_UNROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveUnRootAck );
//OPCODE(MSG_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
OPCODE(MSG_MOVE_HEARTBEAT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); OPCODE(MSG_MOVE_HEARTBEAT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
@ -568,11 +568,10 @@ void InitializeOpcodes()
//OPCODE(CMSG_PET_CAST_SPELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetCastSpellOpcode ); //OPCODE(CMSG_PET_CAST_SPELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetCastSpellOpcode );
//OPCODE(MSG_SAVE_GUILD_EMBLEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSaveGuildEmblemOpcode ); //OPCODE(MSG_SAVE_GUILD_EMBLEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSaveGuildEmblemOpcode );
//OPCODE(MSG_TABARDVENDOR_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTabardVendorActivateOpcode); //OPCODE(MSG_TABARDVENDOR_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTabardVendorActivateOpcode);
//OPCODE(SMSG_PLAY_SPELL_VISUAL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_PLAY_SPELL_VISUAL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_ZONEUPDATE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleZoneUpdateOpcode ); //OPCODE(CMSG_ZONEUPDATE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleZoneUpdateOpcode );
//OPCODE(SMSG_PARTYKILLLOG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_PARTYKILLLOG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(SMSG_COMPRESSED_UPDATE_OBJECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_COMPRESSED_UPDATE_OBJECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(SMSG_PLAY_SPELL_IMPACT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(SMSG_EXPLORATION_EXPERIENCE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_EXPLORATION_EXPERIENCE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_GM_SET_SECURITY_GROUP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_GM_SET_SECURITY_GROUP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(CMSG_GM_NUKE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_GM_NUKE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@ -789,7 +788,7 @@ void InitializeOpcodes()
//OPCODE(CMSG_REQUEST_RAID_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestRaidInfoOpcode ); //OPCODE(CMSG_REQUEST_RAID_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestRaidInfoOpcode );
//OPCODE(CMSG_MOVE_TIME_SKIPPED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleMoveTimeSkippedOpcode ); //OPCODE(CMSG_MOVE_TIME_SKIPPED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleMoveTimeSkippedOpcode );
//OPCODE(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleFeatherFallAck ); //OPCODE(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleFeatherFallAck );
//OPCODE(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveWaterWalkAck ); OPCODE(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveWaterWalkAck );
//OPCODE(CMSG_MOVE_NOT_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveNotActiveMoverOpcode ); //OPCODE(CMSG_MOVE_NOT_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveNotActiveMoverOpcode );
//OPCODE(SMSG_PLAY_SOUND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_PLAY_SOUND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldStatusOpcode ); //OPCODE(CMSG_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldStatusOpcode );
@ -904,9 +903,9 @@ void InitializeOpcodes()
//OPCODE(CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_START_SWIM_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_START_SWIM_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_MOVE_STOP_SWIM_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_STOP_SWIM_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(SMSG_MOVE_SET_CAN_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_MOVE_SET_CAN_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetCanFlyAckOpcode ); OPCODE(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetCanFlyAckOpcode );
//OPCODE(CMSG_MOVE_SET_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); //OPCODE(CMSG_MOVE_SET_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
//OPCODE(CMSG_SOCKET_GEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSocketOpcode ); //OPCODE(CMSG_SOCKET_GEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSocketOpcode );
//OPCODE(CMSG_ARENA_TEAM_CREATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_ARENA_TEAM_CREATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );

View file

@ -279,8 +279,8 @@ enum Opcodes
CMSG_MOVE_SET_PITCH = 0x7312, // 4.3.4 15595 CMSG_MOVE_SET_PITCH = 0x7312, // 4.3.4 15595
MSG_MOVE_WORLDPORT_ACK = 0x10DD, MSG_MOVE_WORLDPORT_ACK = 0x10DD,
SMSG_MONSTER_MOVE = 0x6E17, // 4.3.4 15595 SMSG_MONSTER_MOVE = 0x6E17, // 4.3.4 15595
SMSG_MOVE_WATER_WALK = 0x10DF, SMSG_MOVE_WATER_WALK = 0x75B1, // 4.3.4 15595
SMSG_MOVE_LAND_WALK = 0x10E0, SMSG_MOVE_LAND_WALK = 0x34B7, // 4.3.4 15595
CMSG_MOVE_CHARM_PORT_CHEAT = 0x10E1, CMSG_MOVE_CHARM_PORT_CHEAT = 0x10E1,
CMSG_MOVE_SET_RAW_POSITION = 0x10E2, CMSG_MOVE_SET_RAW_POSITION = 0x10E2,
SMSG_FORCE_RUN_SPEED_CHANGE = 0x10E3, SMSG_FORCE_RUN_SPEED_CHANGE = 0x10E3,
@ -289,10 +289,10 @@ enum Opcodes
CMSG_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x10E6, CMSG_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x10E6,
SMSG_FORCE_SWIM_SPEED_CHANGE = 0x10E7, SMSG_FORCE_SWIM_SPEED_CHANGE = 0x10E7,
CMSG_FORCE_SWIM_SPEED_CHANGE_ACK = 0x10E8, CMSG_FORCE_SWIM_SPEED_CHANGE_ACK = 0x10E8,
SMSG_FORCE_MOVE_ROOT = 0x10E9, SMSG_FORCE_MOVE_ROOT = 0x7DA0, // 4.3.4 15595
CMSG_FORCE_MOVE_ROOT_ACK = 0x10EA, CMSG_FORCE_MOVE_ROOT_ACK = 0x701E, // 4.3.4 15595
SMSG_FORCE_MOVE_UNROOT = 0x10EB, SMSG_FORCE_MOVE_UNROOT = 0x7DB4, // 4.3.4 15595
CMSG_FORCE_MOVE_UNROOT_ACK = 0x10EC, CMSG_FORCE_MOVE_UNROOT_ACK = 0x7808, // 4.3.4 15595
MSG_MOVE_ROOT = 0x10ED, MSG_MOVE_ROOT = 0x10ED,
MSG_MOVE_UNROOT = 0x10EE, MSG_MOVE_UNROOT = 0x10EE,
MSG_MOVE_HEARTBEAT = 0x3914, // 4.3.4 15595 MSG_MOVE_HEARTBEAT = 0x3914, // 4.3.4 15595
@ -553,11 +553,10 @@ enum Opcodes
CMSG_PET_CAST_SPELL = 0x11F1, CMSG_PET_CAST_SPELL = 0x11F1,
MSG_SAVE_GUILD_EMBLEM = 0x11F2, MSG_SAVE_GUILD_EMBLEM = 0x11F2,
MSG_TABARDVENDOR_ACTIVATE = 0x11F3, MSG_TABARDVENDOR_ACTIVATE = 0x11F3,
SMSG_PLAY_SPELL_VISUAL = 0x11F4, SMSG_PLAY_SPELL_VISUAL = 0x55A5, // 4.3.4 15595
CMSG_ZONEUPDATE = 0x11F5, CMSG_ZONEUPDATE = 0x11F5,
SMSG_PARTYKILLLOG = 0x11F6, SMSG_PARTYKILLLOG = 0x11F6,
SMSG_COMPRESSED_UPDATE_OBJECT = 0x11F7, SMSG_COMPRESSED_UPDATE_OBJECT = 0x11F7,
SMSG_PLAY_SPELL_IMPACT = 0x11F8,
SMSG_EXPLORATION_EXPERIENCE = 0x11F9, SMSG_EXPLORATION_EXPERIENCE = 0x11F9,
CMSG_GM_SET_SECURITY_GROUP = 0x11FA, CMSG_GM_SET_SECURITY_GROUP = 0x11FA,
CMSG_GM_NUKE = 0x11FB, CMSG_GM_NUKE = 0x11FB,
@ -774,7 +773,7 @@ enum Opcodes
CMSG_REQUEST_RAID_INFO = 0x12CE, CMSG_REQUEST_RAID_INFO = 0x12CE,
CMSG_MOVE_TIME_SKIPPED = 0x12CF, CMSG_MOVE_TIME_SKIPPED = 0x12CF,
CMSG_MOVE_FEATHER_FALL_ACK = 0x12D0, CMSG_MOVE_FEATHER_FALL_ACK = 0x12D0,
CMSG_MOVE_WATER_WALK_ACK = 0x12D1, CMSG_MOVE_WATER_WALK_ACK = 0x3B00, // 4.3.4 15595
CMSG_MOVE_NOT_ACTIVE_MOVER = 0x12D2, CMSG_MOVE_NOT_ACTIVE_MOVER = 0x12D2,
SMSG_PLAY_SOUND = 0x12D3, SMSG_PLAY_SOUND = 0x12D3,
CMSG_BATTLEFIELD_STATUS = 0x12D4, CMSG_BATTLEFIELD_STATUS = 0x12D4,
@ -891,7 +890,7 @@ enum Opcodes
MSG_MOVE_STOP_SWIM_CHEAT = 0x1343, MSG_MOVE_STOP_SWIM_CHEAT = 0x1343,
SMSG_MOVE_SET_CAN_FLY = 0x3DA1, // 4.3.4 15595 SMSG_MOVE_SET_CAN_FLY = 0x3DA1, // 4.3.4 15595
SMSG_MOVE_UNSET_CAN_FLY = 0x15A2, // 4.3.4 15595 SMSG_MOVE_UNSET_CAN_FLY = 0x15A2, // 4.3.4 15595
CMSG_MOVE_SET_CAN_FLY_ACK = 0x1346, CMSG_MOVE_SET_CAN_FLY_ACK = 0x790C, // 4.3.4 15595
CMSG_MOVE_SET_FLY = 0x1347, CMSG_MOVE_SET_FLY = 0x1347,
CMSG_SOCKET_GEMS = 0x1348, CMSG_SOCKET_GEMS = 0x1348,
CMSG_ARENA_TEAM_CREATE = 0x1349, CMSG_ARENA_TEAM_CREATE = 0x1349,

View file

@ -4418,16 +4418,23 @@ void Player::SetMovement(PlayerMovementType pType)
WorldPacket data; WorldPacket data;
switch (pType) switch (pType)
{ {
case MOVE_ROOT: data.Initialize(SMSG_FORCE_MOVE_ROOT, GetPackGUID().size() + 4); break; case MOVE_ROOT:
case MOVE_UNROOT: data.Initialize(SMSG_FORCE_MOVE_UNROOT, GetPackGUID().size() + 4); break; case MOVE_UNROOT:
case MOVE_WATER_WALK: data.Initialize(SMSG_MOVE_WATER_WALK, GetPackGUID().size() + 4); break; {
case MOVE_LAND_WALK: data.Initialize(SMSG_MOVE_LAND_WALK, GetPackGUID().size() + 4); break; BuildForceMoveRootPacket(&data, pType == MOVE_ROOT, 0);
break;
}
case MOVE_WATER_WALK:
case MOVE_LAND_WALK:
{
BuildMoveWaterWalkPacket(&data, pType == MOVE_WATER_WALK, 0);
break;
}
default: default:
sLog.outError("Player::SetMovement: Unsupported move type (%d), data not sent to client.", pType); sLog.outError("Player::SetMovement: Unsupported move type (%d), data not sent to client.", pType);
return; return;
} }
data << GetPackGUID();
data << uint32(0);
GetSession()->SendPacket(&data); GetSession()->SendPacket(&data);
} }
@ -20468,9 +20475,8 @@ void Player::SendInitialPacketsAfterAddToMap()
// manual send package (have code in ApplyModifier(true,true); that don't must be re-applied. // manual send package (have code in ApplyModifier(true,true); that don't must be re-applied.
if (HasAuraType(SPELL_AURA_MOD_ROOT)) if (HasAuraType(SPELL_AURA_MOD_ROOT))
{ {
WorldPacket data2(SMSG_FORCE_MOVE_ROOT, 10); WorldPacket data2;
data2 << GetPackGUID(); BuildForceMoveRootPacket(&data2, true, 2);
data2 << (uint32)2;
SendMessageToSet(&data2, true); SendMessageToSet(&data2, true);
} }

View file

@ -4544,9 +4544,9 @@ void Spell::SendPlaySpellVisual(uint32 SpellID)
if (m_caster->GetTypeId() != TYPEID_PLAYER) if (m_caster->GetTypeId() != TYPEID_PLAYER)
return; return;
WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 8 + 4); WorldPacket data;
data << m_caster->GetObjectGuid(); m_caster->BuildSendPlayVisualPacket(&data, SpellID, false);
data << uint32(SpellID); // spell visual id?
((Player*)m_caster)->GetSession()->SendPacket(&data); ((Player*)m_caster)->GetSession()->SendPacket(&data);
} }

View file

@ -3280,12 +3280,7 @@ void Aura::HandleAuraWaterWalk(bool apply, bool Real)
return; return;
WorldPacket data; WorldPacket data;
if (apply) GetTarget()->BuildMoveWaterWalkPacket(&data, apply, 0);
data.Initialize(SMSG_MOVE_WATER_WALK, 8 + 4);
else
data.Initialize(SMSG_MOVE_LAND_WALK, 8 + 4);
data << GetTarget()->GetPackGUID();
data << uint32(0);
GetTarget()->SendMessageToSet(&data, true); GetTarget()->SendMessageToSet(&data, true);
} }
@ -4450,9 +4445,8 @@ void Aura::HandleAuraModStun(bool apply, bool Real)
target->SetStandState(UNIT_STAND_STATE_STAND);// in 1.5 client target->SetStandState(UNIT_STAND_STATE_STAND);// in 1.5 client
} }
WorldPacket data(SMSG_FORCE_MOVE_ROOT, 8); WorldPacket data;
data << target->GetPackGUID(); target->BuildForceMoveRootPacket(&data, true, 0);
data << uint32(0);
target->SendMessageToSet(&data, true); target->SendMessageToSet(&data, true);
// Summon the Naj'entus Spine GameObject on target if spell is Impaling Spine // Summon the Naj'entus Spine GameObject on target if spell is Impaling Spine
@ -4508,9 +4502,8 @@ void Aura::HandleAuraModStun(bool apply, bool Real)
if (target->getVictim() && target->isAlive()) if (target->getVictim() && target->isAlive())
target->SetTargetGuid(target->getVictim()->GetObjectGuid()); target->SetTargetGuid(target->getVictim()->GetObjectGuid());
WorldPacket data(SMSG_FORCE_MOVE_UNROOT, 8 + 4); WorldPacket data;
data << target->GetPackGUID(); target->BuildForceMoveRootPacket(&data, false, 0);
data << uint32(0);
target->SendMessageToSet(&data, true); target->SendMessageToSet(&data, true);
} }
@ -4742,9 +4735,8 @@ void Aura::HandleAuraModRoot(bool apply, bool Real)
if (target->GetTypeId() == TYPEID_PLAYER) if (target->GetTypeId() == TYPEID_PLAYER)
{ {
WorldPacket data(SMSG_FORCE_MOVE_ROOT, 10); WorldPacket data;
data << target->GetPackGUID(); target->BuildForceMoveRootPacket(&data, true, 2);
data << (uint32)2;
target->SendMessageToSet(&data, true); target->SendMessageToSet(&data, true);
// Clear unit movement flags // Clear unit movement flags
@ -4791,9 +4783,8 @@ void Aura::HandleAuraModRoot(bool apply, bool Real)
if (target->GetTypeId() == TYPEID_PLAYER) if (target->GetTypeId() == TYPEID_PLAYER)
{ {
WorldPacket data(SMSG_FORCE_MOVE_UNROOT, 10); WorldPacket data;
data << target->GetPackGUID(); target->BuildForceMoveRootPacket(&data, false, 2);
data << (uint32)2;
target->SendMessageToSet(&data, true); target->SendMessageToSet(&data, true);
} }
} }
@ -4969,12 +4960,7 @@ void Aura::HandleAuraModIncreaseFlightSpeed(bool apply, bool Real)
if (m_modifier.m_auraname == SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED) if (m_modifier.m_auraname == SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED)
{ {
WorldPacket data; WorldPacket data;
if (apply) target->BuildMoveSetCanFlyPacket(&data, apply, 0);
data.Initialize(SMSG_MOVE_SET_CAN_FLY, 12);
else
data.Initialize(SMSG_MOVE_UNSET_CAN_FLY, 12);
data << target->GetPackGUID();
data << uint32(0); // unknown
target->SendMessageToSet(&data, true); target->SendMessageToSet(&data, true);
// Players on flying mounts must be immune to polymorph // Players on flying mounts must be immune to polymorph
@ -6886,12 +6872,7 @@ void Aura::HandleAuraAllowFlight(bool apply, bool Real)
// allow fly // allow fly
WorldPacket data; WorldPacket data;
if (apply) GetTarget()->BuildMoveSetCanFlyPacket(&data, apply, 0);
data.Initialize(SMSG_MOVE_SET_CAN_FLY, 12);
else
data.Initialize(SMSG_MOVE_UNSET_CAN_FLY, 12);
data << GetTarget()->GetPackGUID();
data << uint32(0); // unk
GetTarget()->SendMessageToSet(&data, true); GetTarget()->SendMessageToSet(&data, true);
} }

View file

@ -246,6 +246,9 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
if (hasTransportData && si.hasTransportTime3) if (hasTransportData && si.hasTransportTime3)
data >> fallTime; data >> fallTime;
break; break;
case MSEMovementCounter:
data.read_skip<uint32>();
break;
default: default:
MANGOS_ASSERT(false && "Wrong movement status element"); MANGOS_ASSERT(false && "Wrong movement status element");
break; break;
@ -427,6 +430,9 @@ void MovementInfo::Write(ByteBuffer& data, uint16 opcode) const
if (hasTransportData && si.hasTransportTime3) if (hasTransportData && si.hasTransportTime3)
data << uint32(fallTime); data << uint32(fallTime);
break; break;
case MSEMovementCounter:
data << uint32(0);
break;
default: default:
MANGOS_ASSERT(false && "Wrong movement status element"); MANGOS_ASSERT(false && "Wrong movement status element");
break; break;
@ -11569,3 +11575,75 @@ bool Unit::IsSplineEnabled() const
{ {
return movespline->Initialized(); return movespline->Initialized();
} }
void Unit::BuildForceMoveRootPacket(WorldPacket* data, bool apply, uint32 value)
{
if (apply)
{
data->Initialize(SMSG_FORCE_MOVE_ROOT, 13);
data->WriteGuidMask<2, 7, 6, 0, 5, 4, 1, 3>(GetObjectGuid());
data->WriteGuidBytes<1, 0, 2, 5>(GetObjectGuid());
*data << uint32(value);
data->WriteGuidBytes<3, 4, 7, 6>(GetObjectGuid());
}
else
{
data->Initialize(SMSG_FORCE_MOVE_UNROOT, 13);
data->WriteGuidMask<0, 1, 3, 7, 5, 2, 4, 6>(GetObjectGuid());
data->WriteGuidBytes<3, 6, 1>(GetObjectGuid());
*data << uint32(value);
data->WriteGuidBytes<2, 0, 7, 4, 5>(GetObjectGuid());
}
}
void Unit::BuildMoveSetCanFlyPacket(WorldPacket* data, bool apply, uint32 value)
{
if (apply)
{
data->Initialize(SMSG_MOVE_SET_CAN_FLY, 13);
data->WriteGuidMask<1, 6, 5, 0, 7, 4, 2, 3>(GetObjectGuid());
data->WriteGuidBytes<6, 3>(GetObjectGuid());
*data << uint32(value);
data->WriteGuidBytes<2, 1, 4, 7, 0, 5>(GetObjectGuid());
}
else
{
data->Initialize(SMSG_MOVE_UNSET_CAN_FLY, 13);
data->WriteGuidMask<1, 4, 2, 5, 0, 3, 6, 7>(GetObjectGuid());
data->WriteGuidBytes<4, 6>(GetObjectGuid());
*data << uint32(value);
data->WriteGuidBytes<1, 0, 2, 3, 5, 7>(GetObjectGuid());
}
}
void Unit::BuildSendPlayVisualPacket(WorldPacket* data, uint32 value, bool impact)
{
data->Initialize(SMSG_PLAY_SPELL_VISUAL, 21);
*data << uint32(0); // unk, seems always 0
*data << uint32(value);
*data << uint32(impact ? 1 : 0);
data->WriteGuidMask<4, 7, 5, 3, 1, 2, 0, 6>(GetObjectGuid());
data->WriteGuidBytes<0, 4, 1, 6, 7, 2, 3, 5>(GetObjectGuid());
}
void Unit::BuildMoveWaterWalkPacket(WorldPacket* data, bool apply, uint32 value)
{
if (apply)
{
data->Initialize(SMSG_MOVE_WATER_WALK, 13);
data->WriteGuidMask<4, 7, 6, 0, 1, 3, 5, 2>(GetObjectGuid());
data->WriteGuidBytes<0, 5, 2>(GetObjectGuid());
*data << uint32(value);
data->WriteGuidBytes<7, 3, 4, 1, 6>(GetObjectGuid());
}
else
{
data->Initialize(SMSG_MOVE_LAND_WALK, 13);
data->WriteGuidMask<5, 1, 6, 2, 3, 4, 0, 7>(GetObjectGuid());
data->WriteGuidBytes<6, 1, 7, 5, 4, 0, 3, 2>(GetObjectGuid());
*data << uint32(value);
}
}

View file

@ -1955,6 +1955,12 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
bool IsSplineEnabled() const; bool IsSplineEnabled() const;
// Packet builders
void BuildForceMoveRootPacket(WorldPacket* data, bool apply, uint32 value);
void BuildMoveWaterWalkPacket(WorldPacket* data, bool apply, uint32 value);
void BuildSendPlayVisualPacket(WorldPacket* data, uint32 value, bool impact);
void BuildMoveSetCanFlyPacket(WorldPacket* data, bool apply, uint32 value);
protected: protected:
explicit Unit(); explicit Unit();

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 "0066" #define REVISION_NR "0067"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__