diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 78dd3fd12..15de2daff 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -2543,8 +2543,19 @@ void Creature::SetWalk(bool enable) m_movementInfo.AddMovementFlag(MOVEFLAG_WALK_MODE); else m_movementInfo.RemoveMovementFlag(MOVEFLAG_WALK_MODE); + WorldPacket data(enable ? SMSG_SPLINE_MOVE_SET_WALK_MODE : SMSG_SPLINE_MOVE_SET_RUN_MODE, 9); - data << GetPackGUID(); + if (enable) + { + data.WriteGuidMask<7, 6, 5, 1, 3, 4, 2, 0>(GetObjectGuid()); + data.WriteGuidBytes<4, 2, 1, 6, 5, 0, 7, 3>(GetObjectGuid()); + } + else + { + data.WriteGuidMask<5, 6, 3, 7, 2, 0, 4, 1>(GetObjectGuid()); + data.WriteGuidBytes<7, 0, 4, 6, 5, 1, 2, 3>(GetObjectGuid()); + } + SendMessageToSet(&data, true); } @@ -2556,7 +2567,17 @@ void Creature::SetLevitate(bool enable) m_movementInfo.RemoveMovementFlag(MOVEFLAG_LEVITATING); WorldPacket data(enable ? SMSG_SPLINE_MOVE_GRAVITY_DISABLE : SMSG_SPLINE_MOVE_GRAVITY_ENABLE, 9); - data << GetPackGUID(); + if (enable) + { + data.WriteGuidMask<7, 3, 4, 2, 5, 1, 0, 6>(GetObjectGuid()); + data.WriteGuidBytes<7, 1, 3, 4, 6, 2, 5, 0>(GetObjectGuid()); + } + else + { + data.WriteGuidMask<5, 4, 7, 1, 3, 6, 2, 0>(GetObjectGuid()); + data.WriteGuidBytes<7, 3, 4, 2, 1, 6, 0, 5>(GetObjectGuid()); + } + SendMessageToSet(&data, true); } @@ -2568,7 +2589,17 @@ void Creature::SetRoot(bool enable) m_movementInfo.RemoveMovementFlag(MOVEFLAG_ROOT); WorldPacket data(enable ? SMSG_SPLINE_MOVE_ROOT : SMSG_SPLINE_MOVE_UNROOT, 9); - data << GetPackGUID(); + if (enable) + { + data.WriteGuidMask<5, 4, 6, 1, 3, 7, 2, 0>(GetObjectGuid()); + data.WriteGuidBytes<2, 1, 7, 3, 5, 0, 6, 4>(GetObjectGuid()); + } + else + { + data.WriteGuidMask<0, 1, 6, 5, 3, 2, 7, 4>(GetObjectGuid()); + data.WriteGuidBytes<6, 3, 1, 5, 2, 0, 7, 4>(GetObjectGuid()); + } + SendMessageToSet(&data, true); } @@ -2580,6 +2611,17 @@ void Creature::SetWaterWalk(bool enable) m_movementInfo.RemoveMovementFlag(MOVEFLAG_WATERWALKING); WorldPacket data(enable ? SMSG_SPLINE_MOVE_WATER_WALK : SMSG_SPLINE_MOVE_LAND_WALK, 9); - data << GetPackGUID(); + if (enable) + { + data.WriteGuidMask<6, 1, 4, 2, 3, 7, 5, 0>(GetObjectGuid()); + data.WriteGuidBytes<0, 6, 3, 7, 4, 2, 5, 1>(GetObjectGuid()); + } + else + { + data.WriteGuidMask<5, 0, 4, 6, 7, 2, 3, 1>(GetObjectGuid()); + data.WriteGuidBytes<5, 7, 3, 4, 1, 2, 0, 6>(GetObjectGuid()); + } + SendMessageToSet(&data, true); } + diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index f3962ebcd..a24ef8dce 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -833,17 +833,17 @@ void InitializeOpcodes() //OPCODE(SMSG_SPLINE_SET_WALK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_SPLINE_SET_SWIM_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_SPLINE_SET_TURN_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(SMSG_SPLINE_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(SMSG_SPLINE_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_SPLINE_MOVE_FEATHER_FALL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_SPLINE_MOVE_NORMAL_FALL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_SPLINE_MOVE_SET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_SPLINE_MOVE_UNSET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(SMSG_SPLINE_MOVE_WATER_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(SMSG_SPLINE_MOVE_LAND_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(SMSG_SPLINE_MOVE_WATER_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(SMSG_SPLINE_MOVE_LAND_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_SPLINE_MOVE_START_SWIM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_SPLINE_MOVE_STOP_SWIM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(SMSG_SPLINE_MOVE_SET_RUN_MODE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(SMSG_SPLINE_MOVE_SET_WALK_MODE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(SMSG_SPLINE_MOVE_SET_RUN_MODE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(SMSG_SPLINE_MOVE_SET_WALK_MODE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_GM_NUKE_ACCOUNT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_GM_DESTROY_CORPSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_GM_DESTROY_ONLINE_CORPSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -855,7 +855,7 @@ void InitializeOpcodes() OPCODE(CMSG_SET_FACTION_INACTIVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionInactiveOpcode ); OPCODE(CMSG_SET_WATCHED_FACTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetWatchedFactionOpcode ); //OPCODE(MSG_MOVE_TIME_SKIPPED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - //OPCODE(SMSG_SPLINE_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(SMSG_SPLINE_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_SET_EXPLORATION_ALL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(SMSG_INVALIDATE_PLAYER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_RESET_INSTANCES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleResetInstancesOpcode ); @@ -1296,8 +1296,8 @@ void InitializeOpcodes() //OPCODE(SMSG_MOVE_GRAVITY_ENABLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_MOVE_GRAVITY_CHNG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(SMSG_SPLINE_MOVE_GRAVITY_DISABLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(SMSG_SPLINE_MOVE_GRAVITY_ENABLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(SMSG_SPLINE_MOVE_GRAVITY_DISABLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(SMSG_SPLINE_MOVE_GRAVITY_ENABLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_USE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEquipmentSetUseOpcode ); //OPCODE(SMSG_USE_EQUIPMENT_SET_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_FORCE_ANIM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index 7a9124673..f3cb81add 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -818,17 +818,17 @@ enum Opcodes SMSG_SPLINE_SET_WALK_SPEED = 0x1302, SMSG_SPLINE_SET_SWIM_BACK_SPEED = 0x1303, SMSG_SPLINE_SET_TURN_RATE = 0x1304, - SMSG_SPLINE_MOVE_UNROOT = 0x1305, + SMSG_SPLINE_MOVE_UNROOT = 0x75B6, // 4.3.4 15595 SMSG_SPLINE_MOVE_FEATHER_FALL = 0x1306, SMSG_SPLINE_MOVE_NORMAL_FALL = 0x1307, SMSG_SPLINE_MOVE_SET_HOVER = 0x1308, SMSG_SPLINE_MOVE_UNSET_HOVER = 0x1309, - SMSG_SPLINE_MOVE_WATER_WALK = 0x130A, - SMSG_SPLINE_MOVE_LAND_WALK = 0x130B, + SMSG_SPLINE_MOVE_WATER_WALK = 0x50A2, // 4.3.4 15595 + SMSG_SPLINE_MOVE_LAND_WALK = 0x3DA7, // 4.3.4 15595 SMSG_SPLINE_MOVE_START_SWIM = 0x130C, SMSG_SPLINE_MOVE_STOP_SWIM = 0x130D, - SMSG_SPLINE_MOVE_SET_RUN_MODE = 0x130E, - SMSG_SPLINE_MOVE_SET_WALK_MODE = 0x130F, + SMSG_SPLINE_MOVE_SET_RUN_MODE = 0x75A7, // 4.3.4 15595 + SMSG_SPLINE_MOVE_SET_WALK_MODE = 0x54B6, // 4.3.4 15595 CMSG_GM_NUKE_ACCOUNT = 0x1310, MSG_GM_DESTROY_CORPSE = 0x1311, CMSG_GM_DESTROY_ONLINE_CORPSE = 0x1312, @@ -840,7 +840,7 @@ enum Opcodes CMSG_SET_FACTION_INACTIVE = 0x0E37, // 4.3.4 15595 CMSG_SET_WATCHED_FACTION = 0x2434, // 4.3.4 15595 MSG_MOVE_TIME_SKIPPED = 0x131A, - SMSG_SPLINE_MOVE_ROOT = 0x131B, + SMSG_SPLINE_MOVE_ROOT = 0x51B4, // 4.3.4 15595 CMSG_SET_EXPLORATION_ALL = 0x131C, SMSG_INVALIDATE_PLAYER = 0x131D, CMSG_RESET_INSTANCES = 0x131E, @@ -1281,8 +1281,8 @@ enum Opcodes SMSG_MOVE_GRAVITY_ENABLE = 0x14D1, CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x14D2, MSG_MOVE_GRAVITY_CHNG = 0x14D3, - SMSG_SPLINE_MOVE_GRAVITY_DISABLE = 0x14D4, - SMSG_SPLINE_MOVE_GRAVITY_ENABLE = 0x14D5, + SMSG_SPLINE_MOVE_GRAVITY_DISABLE = 0x5DB5, // 4.3.4 15595 + SMSG_SPLINE_MOVE_GRAVITY_ENABLE = 0x3CA6, // 4.3.4 15595 CMSG_USE_EQUIPMENT_SET = 0x14D6, SMSG_USE_EQUIPMENT_SET_RESULT = 0x14D7, CMSG_FORCE_ANIM = 0x14D8, diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 30d799295..541f2d60b 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -4447,28 +4447,17 @@ void Player::DeleteOldCharacters(uint32 keepDays) } } -void Player::SetMovement(PlayerMovementType pType) +void Player::SetRoot(bool enable) { WorldPacket data; - switch (pType) - { - 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; - } + BuildForceMoveRootPacket(&data, enable, 0); + GetSession()->SendPacket(&data); +} +void Player::SetWaterWalk(bool enable) +{ + WorldPacket data; + BuildMoveWaterWalkPacket(&data, enable, 0); GetSession()->SendPacket(&data); } @@ -4509,9 +4498,9 @@ void Player::BuildPlayerRepop() // convert player body to ghost SetHealth(1); - SetMovement(MOVE_WATER_WALK); + SetWaterWalk(true); if (!GetSession()->isLogingOut()) - SetMovement(MOVE_UNROOT); + SetRoot(false); // BG - remove insignia related RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); @@ -4547,8 +4536,8 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) RemoveAurasDueToSpell(20584); // speed bonuses RemoveAurasDueToSpell(8326); // SPELL_AURA_GHOST - SetMovement(MOVE_LAND_WALK); - SetMovement(MOVE_UNROOT); + SetWaterWalk(false); + SetRoot(false); m_deathTimer = 0; @@ -4601,7 +4590,7 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) void Player::KillPlayer() { - SetMovement(MOVE_ROOT); + SetRoot(true); StopMirrorTimers(); // disable timers(bars) @@ -20483,7 +20472,7 @@ void Player::SendInitialPacketsAfterAddToMap() } if (HasAuraType(SPELL_AURA_MOD_STUN)) - SetMovement(MOVE_ROOT); + SetRoot(true); // manual send package (have code in ApplyModifier(true,true); that don't must be re-applied. if (HasAuraType(SPELL_AURA_MOD_ROOT)) diff --git a/src/game/Unit.h b/src/game/Unit.h index 0a92dcc6e..9ed10b393 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1459,9 +1459,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject // recommend use MonsterMove/MonsterMoveWithSpeed for most case that correctly work with movegens // if used additional args in ... part then floats must explicitly casted to double void SendHeartBeat(); - - bool IsLevitating() const { return m_movementInfo.HasMovementFlag(MOVEFLAG_LEVITATING); } - bool IsWalking() const { return m_movementInfo.HasMovementFlag(MOVEFLAG_WALK_MODE); } + bool IsLevitating() const { return m_movementInfo.HasMovementFlag(MOVEFLAG_LEVITATING);} + bool IsWalking() const { return m_movementInfo.HasMovementFlag(MOVEFLAG_WALK_MODE);} bool IsRooted() const { return m_movementInfo.HasMovementFlag(MOVEFLAG_ROOT); } virtual void SetRoot(bool enabled) {} virtual void SetWaterWalk(bool enabled) {} @@ -1892,7 +1891,6 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void SetSpeedRate(UnitMoveType mtype, float rate, bool forced = false); void KnockBackFrom(Unit* target, float horizontalSpeed, float verticalSpeed); - void KnockBackWithAngle(float angle, float horizontalSpeed, float verticalSpeed); void _RemoveAllAuraMods(); void _ApplyAllAuraMods(); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 4691ed209..a87254bfb 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "12111" +#define REVISION_NR "0161" #endif // __REVISION_NR_H__