mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 10:37:03 +00:00
[0067] Set- canfly/forcemoveroot/waterwalk packets, SMSG_PLAY_SPELL_VISUAL
Signed-off-by: Yaki Khadafi <ElSolDolLo@gmail.com>
This commit is contained in:
parent
6b1df231a5
commit
e7d0275ae2
13 changed files with 237 additions and 104 deletions
|
|
@ -5980,10 +5980,8 @@ bool ChatHandler::HandleGMFlyCommand(char* args)
|
|||
if (!target)
|
||||
target = m_session->GetPlayer();
|
||||
|
||||
WorldPacket data(12);
|
||||
data.SetOpcode(value ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY);
|
||||
data << target->GetPackGUID();
|
||||
data << uint32(0); // unknown
|
||||
WorldPacket data;
|
||||
target->BuildMoveSetCanFlyPacket(&data, value, 0);
|
||||
target->SendMessageToSet(&data, true);
|
||||
PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, GetNameLink(target).c_str(), args);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -296,9 +296,8 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recv_data*/)
|
|||
if ((GetPlayer()->GetPositionZ() < height + 0.1f) && !(GetPlayer()->IsInWater()))
|
||||
GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT);
|
||||
|
||||
WorldPacket data(SMSG_FORCE_MOVE_ROOT, (8 + 4)); // guess size
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
data << (uint32)2;
|
||||
WorldPacket data;
|
||||
GetPlayer()->BuildForceMoveRootPacket(&data, true, 2);
|
||||
SendPacket(&data);
|
||||
GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
|
||||
}
|
||||
|
|
@ -328,9 +327,7 @@ void WorldSession::HandleLogoutCancelOpcode(WorldPacket& /*recv_data*/)
|
|||
if (GetPlayer()->CanFreeMove())
|
||||
{
|
||||
//! we can move again
|
||||
data.Initialize(SMSG_FORCE_MOVE_UNROOT, 8); // guess size
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
data << uint32(0);
|
||||
GetPlayer()->BuildForceMoveRootPacket(&data, false, 0);
|
||||
SendPacket(&data);
|
||||
|
||||
//! Stand Up
|
||||
|
|
@ -1034,13 +1031,16 @@ void WorldSession::HandleFeatherFallAck(WorldPacket& recv_data)
|
|||
DEBUG_LOG("WORLD: CMSG_MOVE_FEATHER_FALL_ACK");
|
||||
|
||||
// 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)
|
||||
{
|
||||
// not used
|
||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||
recv_data.rfinish(); // prevent warnings spam
|
||||
/*
|
||||
bitsream packet
|
||||
*/
|
||||
|
|
@ -1048,8 +1048,8 @@ void WorldSession::HandleMoveUnRootAck(WorldPacket& recv_data)
|
|||
|
||||
void WorldSession::HandleMoveRootAck(WorldPacket& recv_data)
|
||||
{
|
||||
// no used
|
||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||
// not used
|
||||
recv_data.rfinish(); // prevent warnings spam
|
||||
/*
|
||||
bitsream packet
|
||||
*/
|
||||
|
|
@ -1490,20 +1490,14 @@ void WorldSession::HandleMoveSetCanFlyAckOpcode(WorldPacket& recv_data)
|
|||
{
|
||||
// fly mode on/off
|
||||
DEBUG_LOG("WORLD: CMSG_MOVE_SET_CAN_FLY_ACK");
|
||||
// recv_data.hexlike();
|
||||
|
||||
ObjectGuid guid;
|
||||
MovementInfo movementInfo;
|
||||
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> Unused<uint32>(); // unk
|
||||
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",
|
||||
_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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -468,26 +468,23 @@ void WorldSession::HandleMoveHoverAck(WorldPacket& recv_data)
|
|||
{
|
||||
DEBUG_LOG("CMSG_MOVE_HOVER_ACK");
|
||||
|
||||
ObjectGuid guid; // guid - unused
|
||||
recv_data.rfinish();
|
||||
/*
|
||||
MovementInfo movementInfo;
|
||||
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> Unused<uint32>(); // unk1
|
||||
recv_data >> movementInfo;
|
||||
recv_data >> Unused<uint32>(); // unk2
|
||||
*/
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveWaterWalkAck(WorldPacket& recv_data)
|
||||
{
|
||||
DEBUG_LOG("CMSG_MOVE_WATER_WALK_ACK");
|
||||
|
||||
ObjectGuid guid; // guid - unused
|
||||
MovementInfo movementInfo;
|
||||
recv_data.rfinish();
|
||||
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> Unused<uint32>(); // unk1
|
||||
/*
|
||||
MovementInfo movementInfo;
|
||||
recv_data >> movementInfo;
|
||||
recv_data >> Unused<uint32>(); // unk2
|
||||
*/
|
||||
}
|
||||
|
||||
void WorldSession::HandleSummonResponseOpcode(WorldPacket& recv_data)
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ enum MovementStatusElements
|
|||
MSETransportTime,
|
||||
MSETransportTime2,
|
||||
MSETransportTime3,
|
||||
MSEMovementCounter,
|
||||
MSEEnd,
|
||||
MSE_COUNT
|
||||
};
|
||||
|
|
@ -2035,6 +2036,79 @@ MovementStatusElements MovementFallResetSequence[] =
|
|||
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)
|
||||
{
|
||||
switch(opcode)
|
||||
|
|
@ -2047,6 +2121,8 @@ MovementStatusElements* GetMovementStatusElementsSequence(uint16 opcode)
|
|||
return MovementFallResetSequence;
|
||||
case CMSG_MOVE_JUMP:
|
||||
return MovementJumpSequence;
|
||||
case CMSG_MOVE_SET_CAN_FLY_ACK:
|
||||
return MovementSetCanFlyAckSequence;
|
||||
case CMSG_MOVE_SET_FACING:
|
||||
return MovementSetFacingSequence;
|
||||
case CMSG_MOVE_SET_PITCH:
|
||||
|
|
|
|||
|
|
@ -292,14 +292,13 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recv_data)
|
|||
|
||||
_player->ModifyMoney(-int32(nSpellCost));
|
||||
|
||||
WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 12); // visual effect on trainer
|
||||
data << ObjectGuid(guid);
|
||||
data << uint32(0xB3); // index from SpellVisualKit.dbc
|
||||
// visual effect on trainer
|
||||
WorldPacket data;
|
||||
unit->BuildSendPlayVisualPacket(&data, 0xB3, false);
|
||||
SendPacket(&data);
|
||||
|
||||
data.Initialize(SMSG_PLAY_SPELL_IMPACT, 12); // visual effect on player
|
||||
data << _player->GetObjectGuid();
|
||||
data << uint32(0x016A); // index from SpellVisualKit.dbc
|
||||
// visual effect on player
|
||||
_player->BuildSendPlayVisualPacket(&data, 0x016A, true);
|
||||
SendPacket(&data);
|
||||
|
||||
// learn explicitly or cast explicitly
|
||||
|
|
|
|||
|
|
@ -285,8 +285,8 @@ void InitializeOpcodes()
|
|||
OPCODE(CMSG_MOVE_SET_PITCH, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes );
|
||||
//OPCODE(MSG_MOVE_WORLDPORT_ACK, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode );
|
||||
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_LAND_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(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(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(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(SMSG_FORCE_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//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(CMSG_FORCE_MOVE_UNROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveUnRootAck );
|
||||
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(SMSG_FORCE_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
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_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
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(MSG_SAVE_GUILD_EMBLEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSaveGuildEmblemOpcode );
|
||||
//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(SMSG_PARTYKILLLOG, 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(CMSG_GM_SET_SECURITY_GROUP, 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_MOVE_TIME_SKIPPED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleMoveTimeSkippedOpcode );
|
||||
//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(SMSG_PLAY_SOUND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//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(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(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(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetCanFlyAckOpcode );
|
||||
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(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_SOCKET_GEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSocketOpcode );
|
||||
//OPCODE(CMSG_ARENA_TEAM_CREATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
|
|
|
|||
|
|
@ -279,8 +279,8 @@ enum Opcodes
|
|||
CMSG_MOVE_SET_PITCH = 0x7312, // 4.3.4 15595
|
||||
MSG_MOVE_WORLDPORT_ACK = 0x10DD,
|
||||
SMSG_MONSTER_MOVE = 0x6E17, // 4.3.4 15595
|
||||
SMSG_MOVE_WATER_WALK = 0x10DF,
|
||||
SMSG_MOVE_LAND_WALK = 0x10E0,
|
||||
SMSG_MOVE_WATER_WALK = 0x75B1, // 4.3.4 15595
|
||||
SMSG_MOVE_LAND_WALK = 0x34B7, // 4.3.4 15595
|
||||
CMSG_MOVE_CHARM_PORT_CHEAT = 0x10E1,
|
||||
CMSG_MOVE_SET_RAW_POSITION = 0x10E2,
|
||||
SMSG_FORCE_RUN_SPEED_CHANGE = 0x10E3,
|
||||
|
|
@ -289,10 +289,10 @@ enum Opcodes
|
|||
CMSG_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x10E6,
|
||||
SMSG_FORCE_SWIM_SPEED_CHANGE = 0x10E7,
|
||||
CMSG_FORCE_SWIM_SPEED_CHANGE_ACK = 0x10E8,
|
||||
SMSG_FORCE_MOVE_ROOT = 0x10E9,
|
||||
CMSG_FORCE_MOVE_ROOT_ACK = 0x10EA,
|
||||
SMSG_FORCE_MOVE_UNROOT = 0x10EB,
|
||||
CMSG_FORCE_MOVE_UNROOT_ACK = 0x10EC,
|
||||
SMSG_FORCE_MOVE_ROOT = 0x7DA0, // 4.3.4 15595
|
||||
CMSG_FORCE_MOVE_ROOT_ACK = 0x701E, // 4.3.4 15595
|
||||
SMSG_FORCE_MOVE_UNROOT = 0x7DB4, // 4.3.4 15595
|
||||
CMSG_FORCE_MOVE_UNROOT_ACK = 0x7808, // 4.3.4 15595
|
||||
MSG_MOVE_ROOT = 0x10ED,
|
||||
MSG_MOVE_UNROOT = 0x10EE,
|
||||
MSG_MOVE_HEARTBEAT = 0x3914, // 4.3.4 15595
|
||||
|
|
@ -553,11 +553,10 @@ enum Opcodes
|
|||
CMSG_PET_CAST_SPELL = 0x11F1,
|
||||
MSG_SAVE_GUILD_EMBLEM = 0x11F2,
|
||||
MSG_TABARDVENDOR_ACTIVATE = 0x11F3,
|
||||
SMSG_PLAY_SPELL_VISUAL = 0x11F4,
|
||||
SMSG_PLAY_SPELL_VISUAL = 0x55A5, // 4.3.4 15595
|
||||
CMSG_ZONEUPDATE = 0x11F5,
|
||||
SMSG_PARTYKILLLOG = 0x11F6,
|
||||
SMSG_COMPRESSED_UPDATE_OBJECT = 0x11F7,
|
||||
SMSG_PLAY_SPELL_IMPACT = 0x11F8,
|
||||
SMSG_EXPLORATION_EXPERIENCE = 0x11F9,
|
||||
CMSG_GM_SET_SECURITY_GROUP = 0x11FA,
|
||||
CMSG_GM_NUKE = 0x11FB,
|
||||
|
|
@ -774,7 +773,7 @@ enum Opcodes
|
|||
CMSG_REQUEST_RAID_INFO = 0x12CE,
|
||||
CMSG_MOVE_TIME_SKIPPED = 0x12CF,
|
||||
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,
|
||||
SMSG_PLAY_SOUND = 0x12D3,
|
||||
CMSG_BATTLEFIELD_STATUS = 0x12D4,
|
||||
|
|
@ -891,7 +890,7 @@ enum Opcodes
|
|||
MSG_MOVE_STOP_SWIM_CHEAT = 0x1343,
|
||||
SMSG_MOVE_SET_CAN_FLY = 0x3DA1, // 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_SOCKET_GEMS = 0x1348,
|
||||
CMSG_ARENA_TEAM_CREATE = 0x1349,
|
||||
|
|
|
|||
|
|
@ -4418,16 +4418,23 @@ void Player::SetMovement(PlayerMovementType pType)
|
|||
WorldPacket data;
|
||||
switch (pType)
|
||||
{
|
||||
case MOVE_ROOT: data.Initialize(SMSG_FORCE_MOVE_ROOT, GetPackGUID().size() + 4); break;
|
||||
case MOVE_UNROOT: data.Initialize(SMSG_FORCE_MOVE_UNROOT, GetPackGUID().size() + 4); break;
|
||||
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;
|
||||
case MOVE_ROOT:
|
||||
case MOVE_UNROOT:
|
||||
{
|
||||
BuildForceMoveRootPacket(&data, pType == MOVE_ROOT, 0);
|
||||
break;
|
||||
}
|
||||
case MOVE_WATER_WALK:
|
||||
case MOVE_LAND_WALK:
|
||||
{
|
||||
BuildMoveWaterWalkPacket(&data, pType == MOVE_WATER_WALK, 0);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
sLog.outError("Player::SetMovement: Unsupported move type (%d), data not sent to client.", pType);
|
||||
return;
|
||||
}
|
||||
data << GetPackGUID();
|
||||
data << uint32(0);
|
||||
|
||||
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.
|
||||
if (HasAuraType(SPELL_AURA_MOD_ROOT))
|
||||
{
|
||||
WorldPacket data2(SMSG_FORCE_MOVE_ROOT, 10);
|
||||
data2 << GetPackGUID();
|
||||
data2 << (uint32)2;
|
||||
WorldPacket data2;
|
||||
BuildForceMoveRootPacket(&data2, true, 2);
|
||||
SendMessageToSet(&data2, true);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4544,9 +4544,9 @@ void Spell::SendPlaySpellVisual(uint32 SpellID)
|
|||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 8 + 4);
|
||||
data << m_caster->GetObjectGuid();
|
||||
data << uint32(SpellID); // spell visual id?
|
||||
WorldPacket data;
|
||||
m_caster->BuildSendPlayVisualPacket(&data, SpellID, false);
|
||||
|
||||
((Player*)m_caster)->GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3280,12 +3280,7 @@ void Aura::HandleAuraWaterWalk(bool apply, bool Real)
|
|||
return;
|
||||
|
||||
WorldPacket data;
|
||||
if (apply)
|
||||
data.Initialize(SMSG_MOVE_WATER_WALK, 8 + 4);
|
||||
else
|
||||
data.Initialize(SMSG_MOVE_LAND_WALK, 8 + 4);
|
||||
data << GetTarget()->GetPackGUID();
|
||||
data << uint32(0);
|
||||
GetTarget()->BuildMoveWaterWalkPacket(&data, apply, 0);
|
||||
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
|
||||
}
|
||||
|
||||
WorldPacket data(SMSG_FORCE_MOVE_ROOT, 8);
|
||||
data << target->GetPackGUID();
|
||||
data << uint32(0);
|
||||
WorldPacket data;
|
||||
target->BuildForceMoveRootPacket(&data, true, 0);
|
||||
target->SendMessageToSet(&data, true);
|
||||
|
||||
// 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())
|
||||
target->SetTargetGuid(target->getVictim()->GetObjectGuid());
|
||||
|
||||
WorldPacket data(SMSG_FORCE_MOVE_UNROOT, 8 + 4);
|
||||
data << target->GetPackGUID();
|
||||
data << uint32(0);
|
||||
WorldPacket data;
|
||||
target->BuildForceMoveRootPacket(&data, false, 0);
|
||||
target->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
||||
|
|
@ -4742,9 +4735,8 @@ void Aura::HandleAuraModRoot(bool apply, bool Real)
|
|||
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
WorldPacket data(SMSG_FORCE_MOVE_ROOT, 10);
|
||||
data << target->GetPackGUID();
|
||||
data << (uint32)2;
|
||||
WorldPacket data;
|
||||
target->BuildForceMoveRootPacket(&data, true, 2);
|
||||
target->SendMessageToSet(&data, true);
|
||||
|
||||
// Clear unit movement flags
|
||||
|
|
@ -4791,9 +4783,8 @@ void Aura::HandleAuraModRoot(bool apply, bool Real)
|
|||
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
WorldPacket data(SMSG_FORCE_MOVE_UNROOT, 10);
|
||||
data << target->GetPackGUID();
|
||||
data << (uint32)2;
|
||||
WorldPacket data;
|
||||
target->BuildForceMoveRootPacket(&data, false, 2);
|
||||
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)
|
||||
{
|
||||
WorldPacket data;
|
||||
if (apply)
|
||||
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->BuildMoveSetCanFlyPacket(&data, apply, 0);
|
||||
target->SendMessageToSet(&data, true);
|
||||
|
||||
// Players on flying mounts must be immune to polymorph
|
||||
|
|
@ -6886,12 +6872,7 @@ void Aura::HandleAuraAllowFlight(bool apply, bool Real)
|
|||
|
||||
// allow fly
|
||||
WorldPacket data;
|
||||
if (apply)
|
||||
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()->BuildMoveSetCanFlyPacket(&data, apply, 0);
|
||||
GetTarget()->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -246,6 +246,9 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
|
|||
if (hasTransportData && si.hasTransportTime3)
|
||||
data >> fallTime;
|
||||
break;
|
||||
case MSEMovementCounter:
|
||||
data.read_skip<uint32>();
|
||||
break;
|
||||
default:
|
||||
MANGOS_ASSERT(false && "Wrong movement status element");
|
||||
break;
|
||||
|
|
@ -427,6 +430,9 @@ void MovementInfo::Write(ByteBuffer& data, uint16 opcode) const
|
|||
if (hasTransportData && si.hasTransportTime3)
|
||||
data << uint32(fallTime);
|
||||
break;
|
||||
case MSEMovementCounter:
|
||||
data << uint32(0);
|
||||
break;
|
||||
default:
|
||||
MANGOS_ASSERT(false && "Wrong movement status element");
|
||||
break;
|
||||
|
|
@ -11569,3 +11575,75 @@ bool Unit::IsSplineEnabled() const
|
|||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1955,6 +1955,12 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
|||
|
||||
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:
|
||||
explicit Unit();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "0066"
|
||||
#define REVISION_NR "0067"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue