aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp285
-rw-r--r--src/server/game/Entities/Player/Player.h4
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp634
-rw-r--r--src/server/game/Entities/Unit/Unit.h3
-rw-r--r--src/server/game/Movement/MovementStructures.cpp368
-rw-r--r--src/server/game/Movement/MovementStructures.h9
6 files changed, 647 insertions, 656 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 70e8be67837..ab8f9690b5e 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -27042,3 +27042,288 @@ bool Player::CanUseMastery() const
{
return HasSpell(MasterySpells[getClass()]);
}
+
+void Player::ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::ExtraMovementStatusElement* extras /*= NULL*/)
+{
+ MovementStatusElements const* sequence = GetMovementStatusElementsSequence(data.GetOpcode());
+ if (!sequence)
+ {
+ sLog->outError(LOG_FILTER_NETWORKIO, "Player::ReadMovementInfo: No movement sequence found for opcode %s", GetOpcodeNameForLogging(data.GetOpcode()).c_str());
+ return;
+ }
+
+ bool hasMovementFlags = false;
+ bool hasMovementFlags2 = false;
+ bool hasTimestamp = false;
+ bool hasOrientation = false;
+ bool hasTransportData = false;
+
+ ObjectGuid guid;
+ ObjectGuid tguid;
+
+ for (; *sequence != MSEEnd; ++sequence)
+ {
+ MovementStatusElements const& element = *sequence;
+
+ switch (element)
+ {
+ case MSEHasGuidByte0:
+ case MSEHasGuidByte1:
+ case MSEHasGuidByte2:
+ case MSEHasGuidByte3:
+ case MSEHasGuidByte4:
+ case MSEHasGuidByte5:
+ case MSEHasGuidByte6:
+ case MSEHasGuidByte7:
+ guid[element - MSEHasGuidByte0] = data.ReadBit();
+ break;
+ case MSEHasTransportGuidByte0:
+ case MSEHasTransportGuidByte1:
+ case MSEHasTransportGuidByte2:
+ case MSEHasTransportGuidByte3:
+ case MSEHasTransportGuidByte4:
+ case MSEHasTransportGuidByte5:
+ case MSEHasTransportGuidByte6:
+ case MSEHasTransportGuidByte7:
+ if (hasTransportData)
+ tguid[element - MSEHasTransportGuidByte0] = data.ReadBit();
+ break;
+ case MSEGuidByte0:
+ case MSEGuidByte1:
+ case MSEGuidByte2:
+ case MSEGuidByte3:
+ case MSEGuidByte4:
+ case MSEGuidByte5:
+ case MSEGuidByte6:
+ case MSEGuidByte7:
+ data.ReadByteSeq(guid[element - MSEGuidByte0]);
+ break;
+ case MSETransportGuidByte0:
+ case MSETransportGuidByte1:
+ case MSETransportGuidByte2:
+ case MSETransportGuidByte3:
+ case MSETransportGuidByte4:
+ case MSETransportGuidByte5:
+ case MSETransportGuidByte6:
+ case MSETransportGuidByte7:
+ if (hasTransportData)
+ data.ReadByteSeq(tguid[element - MSETransportGuidByte0]);
+ break;
+ case MSEHasMovementFlags:
+ hasMovementFlags = !data.ReadBit();
+ break;
+ case MSEHasMovementFlags2:
+ hasMovementFlags2 = !data.ReadBit();
+ break;
+ case MSEHasTimestamp:
+ hasTimestamp = !data.ReadBit();
+ break;
+ case MSEHasOrientation:
+ hasOrientation = !data.ReadBit();
+ break;
+ case MSEHasTransportData:
+ hasTransportData = data.ReadBit();
+ break;
+ case MSEHasTransportTime2:
+ if (hasTransportData)
+ mi->bits.hasTransportTime2 = data.ReadBit();
+ break;
+ case MSEHasTransportTime3:
+ if (hasTransportData)
+ mi->bits.hasTransportTime3 = data.ReadBit();
+ break;
+ case MSEHasPitch:
+ mi->bits.hasPitch = !data.ReadBit();
+ break;
+ case MSEHasFallData:
+ mi->bits.hasFallData = data.ReadBit();
+ break;
+ case MSEHasFallDirection:
+ if (mi->bits.hasFallData)
+ mi->bits.hasFallDirection = data.ReadBit();
+ break;
+ case MSEHasSplineElevation:
+ mi->bits.hasSplineElevation = !data.ReadBit();
+ break;
+ case MSEHasSpline:
+ data.ReadBit();
+ break;
+ case MSEMovementFlags:
+ if (hasMovementFlags)
+ mi->flags = data.ReadBits(30);
+ break;
+ case MSEMovementFlags2:
+ if (hasMovementFlags2)
+ mi->flags2 = data.ReadBits(12);
+ break;
+ case MSETimestamp:
+ if (hasTimestamp)
+ data >> mi->time;
+ break;
+ case MSEPositionX:
+ data >> mi->pos.m_positionX;
+ break;
+ case MSEPositionY:
+ data >> mi->pos.m_positionY;
+ break;
+ case MSEPositionZ:
+ data >> mi->pos.m_positionZ;
+ break;
+ case MSEOrientation:
+ if (hasOrientation)
+ mi->pos.SetOrientation(data.read<float>());
+ break;
+ case MSETransportPositionX:
+ if (hasTransportData)
+ data >> mi->t_pos.m_positionX;
+ break;
+ case MSETransportPositionY:
+ if (hasTransportData)
+ data >> mi->t_pos.m_positionY;
+ break;
+ case MSETransportPositionZ:
+ if (hasTransportData)
+ data >> mi->t_pos.m_positionZ;
+ break;
+ case MSETransportOrientation:
+ if (hasTransportData)
+ mi->t_pos.SetOrientation(data.read<float>());
+ break;
+ case MSETransportSeat:
+ if (hasTransportData)
+ data >> mi->t_seat;
+ break;
+ case MSETransportTime:
+ if (hasTransportData)
+ data >> mi->t_time;
+ break;
+ case MSETransportTime2:
+ if (hasTransportData && mi->bits.hasTransportTime2)
+ data >> mi->t_time2;
+ break;
+ case MSETransportTime3:
+ if (hasTransportData && mi->bits.hasTransportTime3)
+ data >> mi->t_time3;
+ break;
+ case MSEPitch:
+ if (mi->bits.hasPitch)
+ data >> mi->pitch;
+ break;
+ case MSEFallTime:
+ if (mi->bits.hasFallData)
+ data >> mi->fallTime;
+ break;
+ case MSEFallVerticalSpeed:
+ if (mi->bits.hasFallData)
+ data >> mi->j_zspeed;
+ break;
+ case MSEFallCosAngle:
+ if (mi->bits.hasFallData && mi->bits.hasFallDirection)
+ data >> mi->j_cosAngle;
+ break;
+ case MSEFallSinAngle:
+ if (mi->bits.hasFallData && mi->bits.hasFallDirection)
+ data >> mi->j_sinAngle;
+ break;
+ case MSEFallHorizontalSpeed:
+ if (mi->bits.hasFallData && mi->bits.hasFallDirection)
+ data >> mi->j_xyspeed;
+ break;
+ case MSESplineElevation:
+ if (mi->bits.hasSplineElevation)
+ data >> mi->splineElevation;
+ break;
+ case MSECounter:
+ data.read_skip<uint32>(); /// @TODO: Maybe compare it with m_movementCounter to verify that packets are sent & received in order?
+ break;
+ case MSEZeroBit:
+ case MSEOneBit:
+ data.ReadBit();
+ break;
+ case MSEExtraElement:
+ extras->ReadNextElement(data);
+ break;
+ default:
+ ASSERT(Movement::PrintInvalidSequenceElement(element, __FUNCTION__));
+ break;
+ }
+ }
+
+ mi->guid = guid;
+ mi->t_guid = tguid;
+
+ if (hasTransportData && mi->pos.m_positionX != mi->t_pos.m_positionX)
+ if (GetTransport())
+ GetTransport()->UpdatePosition(mi);
+
+ //! Anti-cheat checks. Please keep them in seperate if () blocks to maintain a clear overview.
+ //! Might be subject to latency, so just remove improper flags.
+ #ifdef TRINITY_DEBUG
+ #define REMOVE_VIOLATING_FLAGS(check, maskToRemove) \
+ { \
+ if (check) \
+ { \
+ sLog->outDebug(LOG_FILTER_UNITS, "Player::ReadMovementInfo: Violation of MovementFlags found (%s). " \
+ "MovementFlags: %u, MovementFlags2: %u for player GUID: %u. Mask %u will be removed.", \
+ STRINGIZE(check), mi->GetMovementFlags(), mi->GetExtraMovementFlags(), GetGUIDLow(), maskToRemove); \
+ mi->RemoveMovementFlag((maskToRemove)); \
+ } \
+ }
+ #else
+ #define REMOVE_VIOLATING_FLAGS(check, maskToRemove) \
+ if (check) \
+ mi->RemoveMovementFlag((maskToRemove));
+ #endif
+
+ /*! This must be a packet spoofing attempt. MOVEMENTFLAG_ROOT sent from the client is not valid
+ in conjunction with any of the moving movement flags such as MOVEMENTFLAG_FORWARD.
+ It will freeze clients that receive this player's movement info.
+ */
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT),
+ MOVEMENTFLAG_ROOT);
+
+ //! Cannot hover without SPELL_AURA_HOVER
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_HOVER) && !HasAuraType(SPELL_AURA_HOVER),
+ MOVEMENTFLAG_HOVER);
+
+ //! Cannot ascend and descend at the same time
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ASCENDING) && mi->HasMovementFlag(MOVEMENTFLAG_DESCENDING),
+ MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING);
+
+ //! Cannot move left and right at the same time
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_LEFT) && mi->HasMovementFlag(MOVEMENTFLAG_RIGHT),
+ MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT);
+
+ //! Cannot strafe left and right at the same time
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_STRAFE_LEFT) && mi->HasMovementFlag(MOVEMENTFLAG_STRAFE_RIGHT),
+ MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT);
+
+ //! Cannot pitch up and down at the same time
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_PITCH_UP) && mi->HasMovementFlag(MOVEMENTFLAG_PITCH_DOWN),
+ MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN);
+
+ //! Cannot move forwards and backwards at the same time
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FORWARD) && mi->HasMovementFlag(MOVEMENTFLAG_BACKWARD),
+ MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD);
+
+ //! Cannot walk on water without SPELL_AURA_WATER_WALK
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_WATERWALKING) && !HasAuraType(SPELL_AURA_WATER_WALK),
+ MOVEMENTFLAG_WATERWALKING);
+
+ //! Cannot feather fall without SPELL_AURA_FEATHER_FALL
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FALLING_SLOW) && !HasAuraType(SPELL_AURA_FEATHER_FALL),
+ MOVEMENTFLAG_FALLING_SLOW);
+
+ /*! Cannot fly if no fly auras present. Exception is being a GM.
+ Note that we check for account level instead of Player::IsGameMaster() because in some
+ situations it may be feasable to use .gm fly on as a GM without having .gm on,
+ e.g. aerial combat.
+ */
+
+ REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY) && ToPlayer()->GetSession()->GetSecurity() == SEC_PLAYER &&
+ !ToPlayer()->m_mover->HasAuraType(SPELL_AURA_FLY) &&
+ !ToPlayer()->m_mover->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED),
+ MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY);
+
+ #undef REMOVE_VIOLATING_FLAGS
+}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 05e03b6d215..1dba62f1f3b 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2136,7 +2136,7 @@ class Player : public Unit, public GridObject<Player>
void UpdateCorpseReclaimDelay();
void SendCorpseReclaimDelay(bool load = false);
- uint32 GetBlockPercent() { return GetUInt32Value(PLAYER_SHIELD_BLOCK); }
+ uint32 GetBlockPercent() const { return GetUInt32Value(PLAYER_SHIELD_BLOCK); }
bool CanParry() const { return m_canParry; }
void SetCanParry(bool value);
bool CanBlock() const { return m_canBlock; }
@@ -2490,6 +2490,8 @@ class Player : public Unit, public GridObject<Player>
bool IsInWhisperWhiteList(uint64 guid);
void RemoveFromWhisperWhiteList(uint64 guid) { WhisperList.remove(guid); }
+ void ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::ExtraMovementStatusElement* extras = NULL);
+
/*! These methods send different packets to the client in apply and unapply case.
These methods are only sent to the current unit.
*/
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 22c91aefc54..6fb43f44a3c 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -431,11 +431,11 @@ void Unit::UpdateSplinePosition()
loc.orientation = vehicle->GetOrientation();
}
else if (TransportBase* transport = GetDirectTransport())
- transport->CalculatePassengerPosition(loc.x, loc.y, loc.z, loc.orientation);
+ transport->CalculatePassengerPosition(loc.x, loc.y, loc.z, loc.orientation);
}
- if (HasUnitState(UNIT_STATE_CANNOT_TURN))
- loc.orientation = GetOrientation();
+ if (HasUnitState(UNIT_STATE_CANNOT_TURN))
+ loc.orientation = GetOrientation();
UpdatePosition(loc.x, loc.y, loc.z, loc.orientation);
}
@@ -16050,292 +16050,17 @@ void Unit::NearTeleportTo(float x, float y, float z, float orientation, bool cas
}
}
-void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::ExtraMovementStatusElement* extras /*= NULL*/)
-{
- if (GetTypeId() != TYPEID_PLAYER)
- return;
-
- bool hasMovementFlags = false;
- bool hasMovementFlags2 = false;
- bool hasTimestamp = false;
- bool hasOrientation = false;
- bool hasTransportData = false;
-
- MovementStatusElements* sequence = GetMovementStatusElementsSequence(data.GetOpcode());
- if (sequence == NULL)
- {
- sLog->outError(LOG_FILTER_NETWORKIO, "Unit::ReadMovementInfo: No movement sequence found for opcode %s", GetOpcodeNameForLogging(data.GetOpcode()).c_str());
- return;
- }
-
- ObjectGuid guid;
- ObjectGuid tguid;
-
- for (uint32 i = 0; i < MSE_COUNT; ++i)
- {
- MovementStatusElements element = sequence[i];
- if (element == MSEEnd)
- break;
-
- if (element >= MSEHasGuidByte0 && element <= MSEHasGuidByte7)
- {
- guid[element - MSEHasGuidByte0] = data.ReadBit();
- continue;
- }
-
- if (element >= MSEHasTransportGuidByte0 &&
- element <= MSEHasTransportGuidByte7)
- {
- if (hasTransportData)
- tguid[element - MSEHasTransportGuidByte0] = data.ReadBit();
- continue;
- }
-
- if (element >= MSEGuidByte0 && element <= MSEGuidByte7)
- {
- data.ReadByteSeq(guid[element - MSEGuidByte0]);
- continue;
- }
-
- if (element >= MSETransportGuidByte0 &&
- element <= MSETransportGuidByte7)
- {
- if (hasTransportData)
- data.ReadByteSeq(tguid[element - MSETransportGuidByte0]);
- continue;
- }
-
- switch (element)
- {
- case MSEHasMovementFlags:
- hasMovementFlags = !data.ReadBit();
- break;
- case MSEHasMovementFlags2:
- hasMovementFlags2 = !data.ReadBit();
- break;
- case MSEHasTimestamp:
- hasTimestamp = !data.ReadBit();
- break;
- case MSEHasOrientation:
- hasOrientation = !data.ReadBit();
- break;
- case MSEHasTransportData:
- hasTransportData = data.ReadBit();
- break;
- case MSEHasTransportTime2:
- if (hasTransportData)
- mi->bits.hasTransportTime2 = data.ReadBit();
- break;
- case MSEHasTransportTime3:
- if (hasTransportData)
- mi->bits.hasTransportTime3 = data.ReadBit();
- break;
- case MSEHasPitch:
- mi->bits.hasPitch = !data.ReadBit();
- break;
- case MSEHasFallData:
- mi->bits.hasFallData = data.ReadBit();
- break;
- case MSEHasFallDirection:
- if (mi->bits.hasFallData)
- mi->bits.hasFallDirection = data.ReadBit();
- break;
- case MSEHasSplineElevation:
- mi->bits.hasSplineElevation = !data.ReadBit();
- break;
- case MSEHasSpline:
- data.ReadBit();
- break;
- case MSEMovementFlags:
- if (hasMovementFlags)
- mi->flags = data.ReadBits(30);
- break;
- case MSEMovementFlags2:
- if (hasMovementFlags2)
- mi->flags2 = data.ReadBits(12);
- break;
- case MSETimestamp:
- if (hasTimestamp)
- data >> mi->time;
- break;
- case MSEPositionX:
- data >> mi->pos.m_positionX;
- break;
- case MSEPositionY:
- data >> mi->pos.m_positionY;
- break;
- case MSEPositionZ:
- data >> mi->pos.m_positionZ;
- break;
- case MSEOrientation:
- if (hasOrientation)
- mi->pos.SetOrientation(data.read<float>());
- break;
- case MSETransportPositionX:
- if (hasTransportData)
- data >> mi->t_pos.m_positionX;
- break;
- case MSETransportPositionY:
- if (hasTransportData)
- data >> mi->t_pos.m_positionY;
- break;
- case MSETransportPositionZ:
- if (hasTransportData)
- data >> mi->t_pos.m_positionZ;
- break;
- case MSETransportOrientation:
- if (hasTransportData)
- mi->t_pos.SetOrientation(data.read<float>());
- break;
- case MSETransportSeat:
- if (hasTransportData)
- data >> mi->t_seat;
- break;
- case MSETransportTime:
- if (hasTransportData)
- data >> mi->t_time;
- break;
- case MSETransportTime2:
- if (hasTransportData && mi->bits.hasTransportTime2)
- data >> mi->t_time2;
- break;
- case MSETransportTime3:
- if (hasTransportData && mi->bits.hasTransportTime3)
- data >> mi->t_time3;
- break;
- case MSEPitch:
- if (mi->bits.hasPitch)
- data >> mi->pitch;
- break;
- case MSEFallTime:
- if (mi->bits.hasFallData)
- data >> mi->fallTime;
- break;
- case MSEFallVerticalSpeed:
- if (mi->bits.hasFallData)
- data >> mi->j_zspeed;
- break;
- case MSEFallCosAngle:
- if (mi->bits.hasFallData && mi->bits.hasFallDirection)
- data >> mi->j_cosAngle;
- break;
- case MSEFallSinAngle:
- if (mi->bits.hasFallData && mi->bits.hasFallDirection)
- data >> mi->j_sinAngle;
- break;
- case MSEFallHorizontalSpeed:
- if (mi->bits.hasFallData && mi->bits.hasFallDirection)
- data >> mi->j_xyspeed;
- break;
- case MSESplineElevation:
- if (mi->bits.hasSplineElevation)
- data >> mi->splineElevation;
- break;
- case MSECounter:
- data.read_skip<uint32>(); /// @TODO: Maybe compare it with m_movementCounter to verify that packets are sent & received in order?
- break;
- case MSEZeroBit:
- case MSEOneBit:
- data.ReadBit();
- break;
- case MSEExtraElement:
- extras->ReadNextElement(data);
- break;
- default:
- ASSERT(Movement::PrintInvalidSequenceElement(element, __FUNCTION__));
- break;
- }
- }
-
- mi->guid = guid;
- mi->t_guid = tguid;
-
- if (hasTransportData && mi->pos.m_positionX != mi->t_pos.m_positionX)
- if (GetTransport())
- GetTransport()->UpdatePosition(mi);
-
- //! Anti-cheat checks. Please keep them in seperate if () blocks to maintain a clear overview.
- //! Might be subject to latency, so just remove improper flags.
- #ifdef TRINITY_DEBUG
- #define REMOVE_VIOLATING_FLAGS(check, maskToRemove) \
- { \
- if (check) \
- { \
- sLog->outDebug(LOG_FILTER_UNITS, "Unit::ReadMovementInfo: Violation of MovementFlags found (%s). " \
- "MovementFlags: %u, MovementFlags2: %u for player GUID: %u. Mask %u will be removed.", \
- STRINGIZE(check), mi->GetMovementFlags(), mi->GetExtraMovementFlags(), GetGUIDLow(), maskToRemove); \
- mi->RemoveMovementFlag((maskToRemove)); \
- } \
- }
- #else
- #define REMOVE_VIOLATING_FLAGS(check, maskToRemove) \
- if (check) \
- mi->RemoveMovementFlag((maskToRemove));
- #endif
-
-
- /*! This must be a packet spoofing attempt. MOVEMENTFLAG_ROOT sent from the client is not valid
- in conjunction with any of the moving movement flags such as MOVEMENTFLAG_FORWARD.
- It will freeze clients that receive this player's movement info.
- */
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT),
- MOVEMENTFLAG_ROOT);
-
- //! Cannot hover without SPELL_AURA_HOVER
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_HOVER) && !HasAuraType(SPELL_AURA_HOVER),
- MOVEMENTFLAG_HOVER);
-
- //! Cannot ascend and descend at the same time
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ASCENDING) && mi->HasMovementFlag(MOVEMENTFLAG_DESCENDING),
- MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING);
-
- //! Cannot move left and right at the same time
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_LEFT) && mi->HasMovementFlag(MOVEMENTFLAG_RIGHT),
- MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT);
-
- //! Cannot strafe left and right at the same time
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_STRAFE_LEFT) && mi->HasMovementFlag(MOVEMENTFLAG_STRAFE_RIGHT),
- MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT);
-
- //! Cannot pitch up and down at the same time
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_PITCH_UP) && mi->HasMovementFlag(MOVEMENTFLAG_PITCH_DOWN),
- MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN);
-
- //! Cannot move forwards and backwards at the same time
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FORWARD) && mi->HasMovementFlag(MOVEMENTFLAG_BACKWARD),
- MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD);
-
- //! Cannot walk on water without SPELL_AURA_WATER_WALK
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_WATERWALKING) && !HasAuraType(SPELL_AURA_WATER_WALK),
- MOVEMENTFLAG_WATERWALKING);
-
- //! Cannot feather fall without SPELL_AURA_FEATHER_FALL
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FALLING_SLOW) && !HasAuraType(SPELL_AURA_FEATHER_FALL),
- MOVEMENTFLAG_FALLING_SLOW);
-
- /*! Cannot fly if no fly auras present. Exception is being a GM.
- Note that we check for account level instead of Player::IsGameMaster() because in some
- situations it may be feasable to use .gm fly on as a GM without having .gm on,
- e.g. aerial combat.
- */
-
- REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY) && ToPlayer()->GetSession()->GetSecurity() == SEC_PLAYER &&
- !ToPlayer()->m_mover->HasAuraType(SPELL_AURA_FLY) &&
- !ToPlayer()->m_mover->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED),
- MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY);
-
- #undef REMOVE_VIOLATING_FLAGS
-}
-
void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusElement* extras /*= NULL*/)
{
Unit const* mover = GetCharmerGUID() ? GetCharmer() : this;
if (Player const* player = ToPlayer())
mover = player->m_mover;
+ MovementInfo const& mi = mover->m_movementInfo;
+
bool hasMovementFlags = mover->GetUnitMovementFlags() != 0;
bool hasMovementFlags2 = mover->GetExtraUnitMovementFlags() != 0;
- bool hasTimestamp = GetTypeId() == TYPEID_PLAYER ? (mover->m_movementInfo.time != 0) : true;
+ bool hasTimestamp = true;
bool hasOrientation = !G3D::fuzzyEq(mover->GetOrientation(), 0.0f);
bool hasTransportData = GetTransGUID() != 0;
bool hasSpline = mover->IsSplineEnabled();
@@ -16349,6 +16074,7 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
if (GetTypeId() == TYPEID_PLAYER)
{
+ hasTimestamp = mover->m_movementInfo.time != 0;
hasTransportTime2 = mover->m_movementInfo.bits.hasTransportTime2;
hasTransportTime3 = mover->m_movementInfo.bits.hasTransportTime3;
hasPitch = mover->m_movementInfo.bits.hasPitch;
@@ -16368,7 +16094,7 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
hasSplineElevation = mover->HasUnitMovementFlag(MOVEMENTFLAG_SPLINE_ELEVATION);
}
- MovementStatusElements* sequence = GetMovementStatusElementsSequence(data.GetOpcode());
+ MovementStatusElements const* sequence = GetMovementStatusElementsSequence(data.GetOpcode());
if (!sequence)
{
sLog->outError(LOG_FILTER_NETWORKIO, "Unit::WriteMovementInfo: No movement sequence found for opcode %s", GetOpcodeNameForLogging(data.GetOpcode()).c_str());
@@ -16378,181 +16104,193 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
ObjectGuid guid = mover->GetGUID();
ObjectGuid tguid = hasTransportData ? GetTransGUID() : 0;
- for (uint32 i = 0; i < MSE_COUNT; ++i)
+ for (; *sequence != MSEEnd; ++sequence)
{
- MovementStatusElements element = sequence[i];
- if (element == MSEEnd)
- break;
+ MovementStatusElements const& element = *sequence;
- if (element >= MSEHasGuidByte0 && element <= MSEHasGuidByte7)
+ switch (element)
{
+ case MSEHasGuidByte0:
+ case MSEHasGuidByte1:
+ case MSEHasGuidByte2:
+ case MSEHasGuidByte3:
+ case MSEHasGuidByte4:
+ case MSEHasGuidByte5:
+ case MSEHasGuidByte6:
+ case MSEHasGuidByte7:
data.WriteBit(guid[element - MSEHasGuidByte0]);
- continue;
- }
-
- if (element >= MSEHasTransportGuidByte0 &&
- element <= MSEHasTransportGuidByte7)
- {
+ break;
+ case MSEHasTransportGuidByte0:
+ case MSEHasTransportGuidByte1:
+ case MSEHasTransportGuidByte2:
+ case MSEHasTransportGuidByte3:
+ case MSEHasTransportGuidByte4:
+ case MSEHasTransportGuidByte5:
+ case MSEHasTransportGuidByte6:
+ case MSEHasTransportGuidByte7:
if (hasTransportData)
data.WriteBit(tguid[element - MSEHasTransportGuidByte0]);
- continue;
- }
-
- if (element >= MSEGuidByte0 && element <= MSEGuidByte7)
- {
+ break;
+ case MSEGuidByte0:
+ case MSEGuidByte1:
+ case MSEGuidByte2:
+ case MSEGuidByte3:
+ case MSEGuidByte4:
+ case MSEGuidByte5:
+ case MSEGuidByte6:
+ case MSEGuidByte7:
data.WriteByteSeq(guid[element - MSEGuidByte0]);
- continue;
- }
-
- if (element >= MSETransportGuidByte0 &&
- element <= MSETransportGuidByte7)
- {
+ break;
+ case MSETransportGuidByte0:
+ case MSETransportGuidByte1:
+ case MSETransportGuidByte2:
+ case MSETransportGuidByte3:
+ case MSETransportGuidByte4:
+ case MSETransportGuidByte5:
+ case MSETransportGuidByte6:
+ case MSETransportGuidByte7:
if (hasTransportData)
data.WriteByteSeq(tguid[element - MSETransportGuidByte0]);
- continue;
- }
-
- switch (element)
- {
- case MSEHasMovementFlags:
- data.WriteBit(!hasMovementFlags);
- break;
- case MSEHasMovementFlags2:
- data.WriteBit(!hasMovementFlags2);
- break;
- case MSEHasTimestamp:
- data.WriteBit(!hasTimestamp);
- break;
- case MSEHasOrientation:
- data.WriteBit(!hasOrientation);
- break;
- case MSEHasTransportData:
- data.WriteBit(hasTransportData);
- break;
- case MSEHasTransportTime2:
- if (hasTransportData)
- data.WriteBit(hasTransportTime2);
- break;
- case MSEHasTransportTime3:
- if (hasTransportData)
- data.WriteBit(hasTransportTime3);
- break;
- case MSEHasPitch:
- data.WriteBit(!hasPitch);
- break;
- case MSEHasFallData:
- data.WriteBit(hasFallData);
- break;
- case MSEHasFallDirection:
- if (hasFallData)
- data.WriteBit(hasFallDirection);
- break;
- case MSEHasSplineElevation:
- data.WriteBit(!hasSplineElevation);
- break;
- case MSEHasSpline:
- data.WriteBit(hasSpline);
- break;
- case MSEMovementFlags:
- if (hasMovementFlags)
- data.WriteBits(mover->GetUnitMovementFlags(), 30);
- break;
- case MSEMovementFlags2:
- if (hasMovementFlags2)
- data.WriteBits(mover->GetExtraUnitMovementFlags(), 12);
- break;
- case MSETimestamp:
- if (hasTimestamp)
- data << getMSTime();
- break;
- case MSEPositionX:
- data << mover->GetPositionX();
- break;
- case MSEPositionY:
- data << mover->GetPositionY();
- break;
- case MSEPositionZ:
- data << mover->GetPositionZ();
- break;
- case MSEOrientation:
- if (hasOrientation)
- data << mover->GetOrientation();
- break;
- case MSETransportPositionX:
- if (hasTransportData)
- data << mover->GetTransOffsetX();
- break;
- case MSETransportPositionY:
- if (hasTransportData)
- data << mover->GetTransOffsetY();
- break;
- case MSETransportPositionZ:
- if (hasTransportData)
- data << mover->GetTransOffsetZ();
- break;
- case MSETransportOrientation:
- if (hasTransportData)
- data << mover->GetTransOffsetO();
- break;
- case MSETransportSeat:
- if (hasTransportData)
- data << mover->GetTransSeat();
- break;
- case MSETransportTime:
- if (hasTransportData)
- data << mover->GetTransTime();
- break;
- case MSETransportTime2:
- if (hasTransportData && hasTransportTime2)
- data << mover->m_movementInfo.t_time2;
- break;
- case MSETransportTime3:
- if (hasTransportData && hasTransportTime3)
- data << mover->m_movementInfo.t_time3;
- break;
- case MSEPitch:
- if (hasPitch)
- data << mover->m_movementInfo.pitch;
- break;
- case MSEFallTime:
- if (hasFallData)
- data << mover->m_movementInfo.fallTime;
- break;
- case MSEFallVerticalSpeed:
- if (hasFallData)
- data << mover->m_movementInfo.j_zspeed;
- break;
- case MSEFallCosAngle:
- if (hasFallData && hasFallDirection)
- data << mover->m_movementInfo.j_cosAngle;
- break;
- case MSEFallSinAngle:
- if (hasFallData && hasFallDirection)
- data << mover->m_movementInfo.j_sinAngle;
- break;
- case MSEFallHorizontalSpeed:
- if (hasFallData && hasFallDirection)
- data << mover->m_movementInfo.j_xyspeed;
- break;
- case MSESplineElevation:
- if (hasSplineElevation)
- data << mover->m_movementInfo.splineElevation;
- break;
- case MSECounter:
- data << m_movementCounter++;
- break;
- case MSEZeroBit:
- data.WriteBit(0);
- break;
- case MSEOneBit:
- data.WriteBit(1);
- break;
- case MSEExtraElement:
- extras->WriteNextElement(data);
- break;
- default:
- ASSERT(Movement::PrintInvalidSequenceElement(element, __FUNCTION__));
- break;
+ break;
+ case MSEHasMovementFlags:
+ data.WriteBit(!hasMovementFlags);
+ break;
+ case MSEHasMovementFlags2:
+ data.WriteBit(!hasMovementFlags2);
+ break;
+ case MSEHasTimestamp:
+ data.WriteBit(!hasTimestamp);
+ break;
+ case MSEHasOrientation:
+ data.WriteBit(!hasOrientation);
+ break;
+ case MSEHasTransportData:
+ data.WriteBit(hasTransportData);
+ break;
+ case MSEHasTransportTime2:
+ if (hasTransportData)
+ data.WriteBit(hasTransportTime2);
+ break;
+ case MSEHasTransportTime3:
+ if (hasTransportData)
+ data.WriteBit(hasTransportTime3);
+ break;
+ case MSEHasPitch:
+ data.WriteBit(!hasPitch);
+ break;
+ case MSEHasFallData:
+ data.WriteBit(hasFallData);
+ break;
+ case MSEHasFallDirection:
+ if (hasFallData)
+ data.WriteBit(hasFallDirection);
+ break;
+ case MSEHasSplineElevation:
+ data.WriteBit(!hasSplineElevation);
+ break;
+ case MSEHasSpline:
+ data.WriteBit(hasSpline);
+ break;
+ case MSEMovementFlags:
+ if (hasMovementFlags)
+ data.WriteBits(mover->GetUnitMovementFlags(), 30);
+ break;
+ case MSEMovementFlags2:
+ if (hasMovementFlags2)
+ data.WriteBits(mover->GetExtraUnitMovementFlags(), 12);
+ break;
+ case MSETimestamp:
+ if (hasTimestamp)
+ data << getMSTime();
+ break;
+ case MSEPositionX:
+ data << mover->GetPositionX();
+ break;
+ case MSEPositionY:
+ data << mover->GetPositionY();
+ break;
+ case MSEPositionZ:
+ data << mover->GetPositionZ();
+ break;
+ case MSEOrientation:
+ if (hasOrientation)
+ data << mover->GetOrientation();
+ break;
+ case MSETransportPositionX:
+ if (hasTransportData)
+ data << mover->GetTransOffsetX();
+ break;
+ case MSETransportPositionY:
+ if (hasTransportData)
+ data << mover->GetTransOffsetY();
+ break;
+ case MSETransportPositionZ:
+ if (hasTransportData)
+ data << mover->GetTransOffsetZ();
+ break;
+ case MSETransportOrientation:
+ if (hasTransportData)
+ data << mover->GetTransOffsetO();
+ break;
+ case MSETransportSeat:
+ if (hasTransportData)
+ data << mover->GetTransSeat();
+ break;
+ case MSETransportTime:
+ if (hasTransportData)
+ data << mover->GetTransTime();
+ break;
+ case MSETransportTime2:
+ if (hasTransportData && hasTransportTime2)
+ data << mi.t_time2;
+ break;
+ case MSETransportTime3:
+ if (hasTransportData && hasTransportTime3)
+ data << mi.t_time3;
+ break;
+ case MSEPitch:
+ if (hasPitch)
+ data << mi.pitch;
+ break;
+ case MSEFallTime:
+ if (hasFallData)
+ data << mi.fallTime;
+ break;
+ case MSEFallVerticalSpeed:
+ if (hasFallData)
+ data << mi.j_zspeed;
+ break;
+ case MSEFallCosAngle:
+ if (hasFallData && hasFallDirection)
+ data << mi.j_cosAngle;
+ break;
+ case MSEFallSinAngle:
+ if (hasFallData && hasFallDirection)
+ data << mi.j_sinAngle;
+ break;
+ case MSEFallHorizontalSpeed:
+ if (hasFallData && hasFallDirection)
+ data << mi.j_xyspeed;
+ break;
+ case MSESplineElevation:
+ if (hasSplineElevation)
+ data << mi.splineElevation;
+ break;
+ case MSECounter:
+ data << m_movementCounter++;
+ break;
+ case MSEZeroBit:
+ data.WriteBit(0);
+ break;
+ case MSEOneBit:
+ data.WriteBit(1);
+ break;
+ case MSEExtraElement:
+ extras->WriteNextElement(data);
+ break;
+ default:
+ ASSERT(Movement::PrintInvalidSequenceElement(element, __FUNCTION__));
+ break;
}
}
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 53b3a9d76a9..8bedb7b231d 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1489,7 +1489,7 @@ class Unit : public WorldObject
int32 GetMechanicResistChance(const SpellInfo* spell);
bool CanUseAttackType(uint8 attacktype) const;
- virtual uint32 GetBlockPercent() { return 30; }
+ virtual uint32 GetBlockPercent() const { return 30; }
uint32 GetUnitMeleeSkill(Unit const* target = NULL) const;
@@ -2113,7 +2113,6 @@ class Unit : public WorldObject
void _ExitVehicle(Position const* exitPosition = NULL);
void _EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* aurApp = NULL);
- void ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::ExtraMovementStatusElement* extras = NULL);
void WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusElement* extras = NULL);
bool isMoving() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING); }
diff --git a/src/server/game/Movement/MovementStructures.cpp b/src/server/game/Movement/MovementStructures.cpp
index f886b5aa1f6..79bc6df8e03 100644
--- a/src/server/game/Movement/MovementStructures.cpp
+++ b/src/server/game/Movement/MovementStructures.cpp
@@ -19,8 +19,7 @@
#include "MovementStructures.h"
#include "Player.h"
-//4.3.4
-MovementStatusElements PlayerMoveSequence[] =
+MovementStatusElements const PlayerMove[] =
{
MSEHasFallData,
MSEHasGuidByte3,
@@ -92,8 +91,7 @@ MovementStatusElements PlayerMoveSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementFallLandSequence[] =
+MovementStatusElements const MovementFallLand[] =
{
MSEPositionX,
MSEPositionY,
@@ -165,8 +163,7 @@ MovementStatusElements MovementFallLandSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementHeartBeatSequence[] =
+MovementStatusElements const MovementHeartBeat[] =
{
MSEPositionZ,
MSEPositionX,
@@ -238,8 +235,7 @@ MovementStatusElements MovementHeartBeatSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementJumpSequence[] =
+MovementStatusElements const MovementJump[] =
{
MSEPositionY,
MSEPositionX,
@@ -311,8 +307,7 @@ MovementStatusElements MovementJumpSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementSetFacingSequence[] =
+MovementStatusElements const MovementSetFacing[] =
{
MSEPositionX,
MSEPositionY,
@@ -384,8 +379,7 @@ MovementStatusElements MovementSetFacingSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementSetPitchSequence[] =
+MovementStatusElements const MovementSetPitch[] =
{
MSEPositionX,
MSEPositionZ,
@@ -457,8 +451,7 @@ MovementStatusElements MovementSetPitchSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartBackwardSequence[] =
+MovementStatusElements const MovementStartBackward[] =
{
MSEPositionX,
MSEPositionZ,
@@ -530,8 +523,7 @@ MovementStatusElements MovementStartBackwardSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartForwardSequence[] =
+MovementStatusElements const MovementStartForward[] =
{
MSEPositionY,
MSEPositionZ,
@@ -604,8 +596,7 @@ MovementStatusElements MovementStartForwardSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartStrafeLeftSequence[] =
+MovementStatusElements const MovementStartStrafeLeft[] =
{
MSEPositionZ,
MSEPositionX,
@@ -677,8 +668,7 @@ MovementStatusElements MovementStartStrafeLeftSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartStrafeRightSequence[] =
+MovementStatusElements const MovementStartStrafeRight[] =
{
MSEPositionY,
MSEPositionX,
@@ -750,8 +740,7 @@ MovementStatusElements MovementStartStrafeRightSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartTurnLeftSequence[] =
+MovementStatusElements const MovementStartTurnLeft[] =
{
MSEPositionY,
MSEPositionX,
@@ -823,8 +812,7 @@ MovementStatusElements MovementStartTurnLeftSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartTurnRightSequence[] =
+MovementStatusElements const MovementStartTurnRight[] =
{
MSEPositionX,
MSEPositionZ,
@@ -896,8 +884,7 @@ MovementStatusElements MovementStartTurnRightSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStopSequence[] =
+MovementStatusElements const MovementStop[] =
{
MSEPositionX,
MSEPositionY,
@@ -969,8 +956,7 @@ MovementStatusElements MovementStopSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStopStrafeSequence[] =
+MovementStatusElements const MovementStopStrafe[] =
{
MSEPositionY,
MSEPositionZ,
@@ -1042,8 +1028,7 @@ MovementStatusElements MovementStopStrafeSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStopTurnSequence[] =
+MovementStatusElements const MovementStopTurn[] =
{
MSEPositionX,
MSEPositionZ,
@@ -1115,8 +1100,7 @@ MovementStatusElements MovementStopTurnSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartAscendSequence[] =
+MovementStatusElements const MovementStartAscend[] =
{
MSEPositionX,
MSEPositionY,
@@ -1188,8 +1172,7 @@ MovementStatusElements MovementStartAscendSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartDescendSequence[] =
+MovementStatusElements const MovementStartDescend[] =
{
MSEPositionY,
MSEPositionZ,
@@ -1261,8 +1244,7 @@ MovementStatusElements MovementStartDescendSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartSwimSequence[] =
+MovementStatusElements const MovementStartSwim[] =
{
MSEPositionZ,
MSEPositionX,
@@ -1334,8 +1316,7 @@ MovementStatusElements MovementStartSwimSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStopSwimSequence[] =
+MovementStatusElements const MovementStopSwim[] =
{
MSEPositionX,
MSEPositionY,
@@ -1407,8 +1388,7 @@ MovementStatusElements MovementStopSwimSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStopAscendSequence[] =
+MovementStatusElements const MovementStopAscend[] =
{
MSEPositionZ,
MSEPositionY,
@@ -1480,8 +1460,7 @@ MovementStatusElements MovementStopAscendSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStopPitchSequence[] =
+MovementStatusElements const MovementStopPitch[] =
{
MSEPositionY,
MSEPositionX,
@@ -1553,8 +1532,7 @@ MovementStatusElements MovementStopPitchSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartPitchDownSequence[] =
+MovementStatusElements const MovementStartPitchDown[] =
{
MSEPositionX,
MSEPositionZ,
@@ -1626,8 +1604,7 @@ MovementStatusElements MovementStartPitchDownSequence[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementStartPitchUpSequence[] =
+MovementStatusElements const MovementStartPitchUp[] =
{
MSEPositionZ,
MSEPositionY,
@@ -1699,7 +1676,7 @@ MovementStatusElements MovementStartPitchUpSequence[] =
MSEEnd,
};
-MovementStatusElements MoveChngTransport[]=
+MovementStatusElements const MoveChngTransport[]=
{
MSEPositionY,
MSEPositionX,
@@ -1777,8 +1754,7 @@ MovementStatusElements MoveChngTransport[]=
MSEEnd,
};
-// 4.3.4
-MovementStatusElements MoveSplineDone[] =
+MovementStatusElements const MoveSplineDone[] =
{
MSEPositionY,
MSEPositionX,
@@ -1857,8 +1833,7 @@ MovementStatusElements MoveSplineDone[] =
MSEEnd,
};
-// 4.3.4
-MovementStatusElements MoveNotActiveMover[] =
+MovementStatusElements const MoveNotActiveMover[] =
{
MSEPositionZ,
MSEPositionX,
@@ -1937,8 +1912,7 @@ MovementStatusElements MoveNotActiveMover[] =
MSEEnd,
};
-// 4.3.4
-MovementStatusElements DismissControlledVehicle[] =
+MovementStatusElements const DismissControlledVehicle[] =
{
MSEPositionY,
MSEPositionZ,
@@ -2017,8 +1991,7 @@ MovementStatusElements DismissControlledVehicle[] =
MSEEnd,
};
-// 4.3.4
-MovementStatusElements MoveUpdateTeleport[] =
+MovementStatusElements const MoveUpdateTeleport[] =
{
MSEPositionZ,
MSEPositionY,
@@ -2100,8 +2073,7 @@ MovementStatusElements MoveUpdateTeleport[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementSetRunMode[] =
+MovementStatusElements const MovementSetRunMode[] =
{
MSEPositionY,
MSEPositionX,
@@ -2173,8 +2145,7 @@ MovementStatusElements MovementSetRunMode[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementSetWalkMode[] =
+MovementStatusElements const MovementSetWalkMode[] =
{
MSEPositionY,
MSEPositionX,
@@ -2246,8 +2217,7 @@ MovementStatusElements MovementSetWalkMode[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementSetCanFly[] =
+MovementStatusElements const MovementSetCanFly[] =
{
MSEPositionZ,
MSEPositionX,
@@ -2319,8 +2289,7 @@ MovementStatusElements MovementSetCanFly[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementSetCanTransitionBetweenSwimAndFlyAck[] =
+MovementStatusElements const MovementSetCanTransitionBetweenSwimAndFlyAck[] =
{
MSEPositionZ,
MSEPositionY,
@@ -2393,8 +2362,7 @@ MovementStatusElements MovementSetCanTransitionBetweenSwimAndFlyAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementUpdateSwimSpeed[] =
+MovementStatusElements const MovementUpdateSwimSpeed[] =
{
MSEHasMovementFlags,
MSEHasGuidByte2,
@@ -2454,8 +2422,7 @@ MovementStatusElements MovementUpdateSwimSpeed[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementUpdateRunSpeed[] =
+MovementStatusElements const MovementUpdateRunSpeed[] =
{
MSEPositionZ,
MSEPositionX,
@@ -2528,8 +2495,7 @@ MovementStatusElements MovementUpdateRunSpeed[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementUpdateFlightSpeed[] =
+MovementStatusElements const MovementUpdateFlightSpeed[] =
{
MSEPositionY,
MSEExtraElement,
@@ -2589,8 +2555,7 @@ MovementStatusElements MovementUpdateFlightSpeed[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementUpdateCollisionHeight[] =
+MovementStatusElements const MovementUpdateCollisionHeight[] =
{
MSEPositionZ,
MSEExtraElement,
@@ -2650,8 +2615,7 @@ MovementStatusElements MovementUpdateCollisionHeight[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementForceRunSpeedChangeAck[] =
+MovementStatusElements const MovementForceRunSpeedChangeAck[] =
{
MSECounter,
MSEPositionX,
@@ -2725,8 +2689,7 @@ MovementStatusElements MovementForceRunSpeedChangeAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementSetCollisionHeightAck[] =
+MovementStatusElements const MovementSetCollisionHeightAck[] =
{
MSEExtraElement,
MSEPositionX,
@@ -2802,8 +2765,7 @@ MovementStatusElements MovementSetCollisionHeightAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementForceFlightSpeedChangeAck[] =
+MovementStatusElements const MovementForceFlightSpeedChangeAck[] =
{
MSECounter,
MSEPositionZ,
@@ -2877,8 +2839,7 @@ MovementStatusElements MovementForceFlightSpeedChangeAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementSetCanFlyAck[] =
+MovementStatusElements const MovementSetCanFlyAck[] =
{
MSEPositionY,
MSECounter,
@@ -2951,8 +2912,7 @@ MovementStatusElements MovementSetCanFlyAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementForceSwimSpeedChangeAck[] =
+MovementStatusElements const MovementForceSwimSpeedChangeAck[] =
{
MSEPositionX,
MSECounter,
@@ -3026,8 +2986,7 @@ MovementStatusElements MovementForceSwimSpeedChangeAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementForceWalkSpeedChangeAck[] =
+MovementStatusElements const MovementForceWalkSpeedChangeAck[] =
{
MSEPositionZ,
MSEPositionY,
@@ -3101,8 +3060,7 @@ MovementStatusElements MovementForceWalkSpeedChangeAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementForceRunBackSpeedChangeAck[] =
+MovementStatusElements const MovementForceRunBackSpeedChangeAck[] =
{
MSEExtraElement,
MSECounter,
@@ -3176,8 +3134,7 @@ MovementStatusElements MovementForceRunBackSpeedChangeAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementUpdateRunBackSpeed[] =
+MovementStatusElements const MovementUpdateRunBackSpeed[] =
{
MSEHasGuidByte1,
MSEHasGuidByte2,
@@ -3237,8 +3194,7 @@ MovementStatusElements MovementUpdateRunBackSpeed[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementUpdateWalkSpeed[] =
+MovementStatusElements const MovementUpdateWalkSpeed[] =
{
MSEHasOrientation,
MSEZeroBit,
@@ -3298,8 +3254,7 @@ MovementStatusElements MovementUpdateWalkSpeed[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements ForceMoveRootAck[] =
+MovementStatusElements const ForceMoveRootAck[] =
{
MSEPositionY,
MSEPositionZ,
@@ -3372,8 +3327,7 @@ MovementStatusElements ForceMoveRootAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements ForceMoveUnrootAck[] =
+MovementStatusElements const ForceMoveUnrootAck[] =
{
MSECounter,
MSEPositionZ,
@@ -3446,8 +3400,7 @@ MovementStatusElements ForceMoveUnrootAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementFallReset[] =
+MovementStatusElements const MovementFallReset[] =
{
MSEPositionZ,
MSEPositionX,
@@ -3519,8 +3472,7 @@ MovementStatusElements MovementFallReset[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementFeatherFallAck[] =
+MovementStatusElements const MovementFeatherFallAck[] =
{
MSEPositionZ,
MSECounter,
@@ -3593,8 +3545,7 @@ MovementStatusElements MovementFeatherFallAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementGravityDisableAck[] =
+MovementStatusElements const MovementGravityDisableAck[] =
{
MSEPositionZ,
MSEPositionY,
@@ -3667,8 +3618,7 @@ MovementStatusElements MovementGravityDisableAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementGravityEnableAck[] =
+MovementStatusElements const MovementGravityEnableAck[] =
{
MSEPositionZ,
MSEPositionX,
@@ -3741,8 +3691,7 @@ MovementStatusElements MovementGravityEnableAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementHoverAck[] =
+MovementStatusElements const MovementHoverAck[] =
{
MSECounter,
MSEPositionZ,
@@ -3815,8 +3764,7 @@ MovementStatusElements MovementHoverAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementKnockBackAck[] =
+MovementStatusElements const MovementKnockBackAck[] =
{
MSEPositionY,
MSEPositionZ,
@@ -3889,8 +3837,7 @@ MovementStatusElements MovementKnockBackAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementWaterWalkAck[] =
+MovementStatusElements const MovementWaterWalkAck[] =
{
MSEPositionY,
MSEPositionZ,
@@ -3963,8 +3910,7 @@ MovementStatusElements MovementWaterWalkAck[] =
MSEEnd,
};
-//4.3.4
-MovementStatusElements MovementUpdateKnockBack[] =
+MovementStatusElements const MovementUpdateKnockBack[] =
{
MSEZeroBit,
MSEHasGuidByte4,
@@ -4023,7 +3969,7 @@ MovementStatusElements MovementUpdateKnockBack[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetWalkSpeed[] =
+MovementStatusElements const SplineMoveSetWalkSpeed[] =
{
MSEHasGuidByte0,
MSEHasGuidByte6,
@@ -4045,7 +3991,7 @@ MovementStatusElements SplineMoveSetWalkSpeed[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetRunSpeed[] =
+MovementStatusElements const SplineMoveSetRunSpeed[] =
{
MSEHasGuidByte4,
MSEHasGuidByte0,
@@ -4067,7 +4013,7 @@ MovementStatusElements SplineMoveSetRunSpeed[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetRunBackSpeed[] =
+MovementStatusElements const SplineMoveSetRunBackSpeed[] =
{
MSEHasGuidByte1,
MSEHasGuidByte2,
@@ -4089,7 +4035,7 @@ MovementStatusElements SplineMoveSetRunBackSpeed[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetSwimSpeed[] =
+MovementStatusElements const SplineMoveSetSwimSpeed[] =
{
MSEHasGuidByte4,
MSEHasGuidByte2,
@@ -4111,7 +4057,7 @@ MovementStatusElements SplineMoveSetSwimSpeed[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetSwimBackSpeed[] =
+MovementStatusElements const SplineMoveSetSwimBackSpeed[] =
{
MSEHasGuidByte0,
MSEHasGuidByte1,
@@ -4133,7 +4079,7 @@ MovementStatusElements SplineMoveSetSwimBackSpeed[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetTurnRate[] =
+MovementStatusElements const SplineMoveSetTurnRate[] =
{
MSEHasGuidByte2,
MSEHasGuidByte4,
@@ -4155,7 +4101,7 @@ MovementStatusElements SplineMoveSetTurnRate[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetFlightSpeed[] =
+MovementStatusElements const SplineMoveSetFlightSpeed[] =
{
MSEHasGuidByte7,
MSEHasGuidByte4,
@@ -4177,7 +4123,7 @@ MovementStatusElements SplineMoveSetFlightSpeed[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetFlightBackSpeed[] =
+MovementStatusElements const SplineMoveSetFlightBackSpeed[] =
{
MSEHasGuidByte2,
MSEHasGuidByte1,
@@ -4199,7 +4145,7 @@ MovementStatusElements SplineMoveSetFlightBackSpeed[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetPitchRate[] =
+MovementStatusElements const SplineMoveSetPitchRate[] =
{
MSEHasGuidByte3,
MSEHasGuidByte5,
@@ -4221,7 +4167,7 @@ MovementStatusElements SplineMoveSetPitchRate[] =
MSEEnd,
};
-MovementStatusElements MoveSetWalkSpeed[] =
+MovementStatusElements const MoveSetWalkSpeed[] =
{
MSEHasGuidByte0,
MSEHasGuidByte4,
@@ -4244,7 +4190,7 @@ MovementStatusElements MoveSetWalkSpeed[] =
MSEEnd,
};
-MovementStatusElements MoveSetRunSpeed[] =
+MovementStatusElements const MoveSetRunSpeed[] =
{
MSEHasGuidByte6,
MSEHasGuidByte1,
@@ -4267,7 +4213,7 @@ MovementStatusElements MoveSetRunSpeed[] =
MSEEnd,
};
-MovementStatusElements MoveSetRunBackSpeed[] =
+MovementStatusElements const MoveSetRunBackSpeed[] =
{
MSEHasGuidByte0,
MSEHasGuidByte6,
@@ -4290,7 +4236,7 @@ MovementStatusElements MoveSetRunBackSpeed[] =
MSEEnd,
};
-MovementStatusElements MoveSetSwimSpeed[] =
+MovementStatusElements const MoveSetSwimSpeed[] =
{
MSEHasGuidByte5,
MSEHasGuidByte4,
@@ -4313,7 +4259,7 @@ MovementStatusElements MoveSetSwimSpeed[] =
MSEEnd,
};
-MovementStatusElements MoveSetSwimBackSpeed[] =
+MovementStatusElements const MoveSetSwimBackSpeed[] =
{
MSEHasGuidByte4,
MSEHasGuidByte2,
@@ -4336,7 +4282,7 @@ MovementStatusElements MoveSetSwimBackSpeed[] =
MSEEnd,
};
-MovementStatusElements MoveSetTurnRate[] =
+MovementStatusElements const MoveSetTurnRate[] =
{
MSEHasGuidByte7,
MSEHasGuidByte2,
@@ -4359,7 +4305,7 @@ MovementStatusElements MoveSetTurnRate[] =
MSEEnd,
};
-MovementStatusElements MoveSetFlightSpeed[] =
+MovementStatusElements const MoveSetFlightSpeed[] =
{
MSEHasGuidByte0,
MSEHasGuidByte5,
@@ -4382,7 +4328,7 @@ MovementStatusElements MoveSetFlightSpeed[] =
MSEEnd,
};
-MovementStatusElements MoveSetFlightBackSpeed[] =
+MovementStatusElements const MoveSetFlightBackSpeed[] =
{
MSEHasGuidByte1,
MSEHasGuidByte2,
@@ -4405,7 +4351,7 @@ MovementStatusElements MoveSetFlightBackSpeed[] =
MSEEnd,
};
-MovementStatusElements MoveSetPitchRate[] =
+MovementStatusElements const MoveSetPitchRate[] =
{
MSEHasGuidByte1,
MSEHasGuidByte2,
@@ -4428,7 +4374,7 @@ MovementStatusElements MoveSetPitchRate[] =
MSEEnd,
};
-MovementStatusElements MoveSetCollisionHeight[] =
+MovementStatusElements const MoveSetCollisionHeight[] =
{
MSEZeroBit,
MSEZeroBit,
@@ -4453,7 +4399,7 @@ MovementStatusElements MoveSetCollisionHeight[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetWalkMode[] =
+MovementStatusElements const SplineMoveSetWalkMode[] =
{
MSEHasGuidByte7,
MSEHasGuidByte6,
@@ -4474,7 +4420,7 @@ MovementStatusElements SplineMoveSetWalkMode[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetRunMode[] =
+MovementStatusElements const SplineMoveSetRunMode[] =
{
MSEHasGuidByte5,
MSEHasGuidByte6,
@@ -4495,7 +4441,7 @@ MovementStatusElements SplineMoveSetRunMode[] =
MSEEnd,
};
-MovementStatusElements SplineMoveGravityDisable[] =
+MovementStatusElements const SplineMoveGravityDisable[] =
{
MSEHasGuidByte7,
MSEHasGuidByte3,
@@ -4516,7 +4462,7 @@ MovementStatusElements SplineMoveGravityDisable[] =
MSEEnd,
};
-MovementStatusElements SplineMoveGravityEnable[] =
+MovementStatusElements const SplineMoveGravityEnable[] =
{
MSEHasGuidByte5,
MSEHasGuidByte4,
@@ -4537,7 +4483,7 @@ MovementStatusElements SplineMoveGravityEnable[] =
MSEEnd,
};
-MovementStatusElements SplineMoveSetHover[] =
+MovementStatusElements const SplineMoveSetHover[] =
{
MSEHasGuidByte3,
MSEHasGuidByte7,
@@ -4558,7 +4504,7 @@ MovementStatusElements SplineMoveSetHover[] =
MSEEnd,
};
-MovementStatusElements SplineMoveUnsetHover[] =
+MovementStatusElements const SplineMoveUnsetHover[] =
{
MSEHasGuidByte6,
MSEHasGuidByte7,
@@ -4579,7 +4525,7 @@ MovementStatusElements SplineMoveUnsetHover[] =
MSEEnd,
};
-MovementStatusElements MoveSetCanFly[] =
+MovementStatusElements const MoveSetCanFly[] =
{
MSEHasGuidByte1,
MSEHasGuidByte6,
@@ -4601,7 +4547,7 @@ MovementStatusElements MoveSetCanFly[] =
MSEEnd,
};
-MovementStatusElements MoveUnsetCanFly[] =
+MovementStatusElements const MoveUnsetCanFly[] =
{
MSEHasGuidByte1,
MSEHasGuidByte4,
@@ -4623,7 +4569,7 @@ MovementStatusElements MoveUnsetCanFly[] =
MSEEnd,
};
-MovementStatusElements MoveSetHover[] =
+MovementStatusElements const MoveSetHover[] =
{
MSEHasGuidByte1,
MSEHasGuidByte4,
@@ -4645,7 +4591,7 @@ MovementStatusElements MoveSetHover[] =
MSEEnd,
};
-MovementStatusElements MoveUnsetHover[] =
+MovementStatusElements const MoveUnsetHover[] =
{
MSEHasGuidByte4,
MSEHasGuidByte6,
@@ -4667,7 +4613,7 @@ MovementStatusElements MoveUnsetHover[] =
MSEEnd,
};
-MovementStatusElements MoveWaterWalk[] =
+MovementStatusElements const MoveWaterWalk[] =
{
MSEHasGuidByte4,
MSEHasGuidByte7,
@@ -4689,7 +4635,7 @@ MovementStatusElements MoveWaterWalk[] =
MSEEnd,
};
-MovementStatusElements MoveLandWalk[] =
+MovementStatusElements const MoveLandWalk[] =
{
MSEHasGuidByte5,
MSEHasGuidByte1,
@@ -4711,7 +4657,7 @@ MovementStatusElements MoveLandWalk[] =
MSEEnd,
};
-MovementStatusElements MoveFeatherFall[] =
+MovementStatusElements const MoveFeatherFall[] =
{
MSEHasGuidByte3,
MSEHasGuidByte1,
@@ -4733,7 +4679,7 @@ MovementStatusElements MoveFeatherFall[] =
MSEEnd,
};
-MovementStatusElements MoveNormalFall[] =
+MovementStatusElements const MoveNormalFall[] =
{
MSECounter,
MSEHasGuidByte3,
@@ -4755,7 +4701,7 @@ MovementStatusElements MoveNormalFall[] =
MSEEnd,
};
-MovementStatusElements ChangeSeatsOnControlledVehicle[] =
+MovementStatusElements const ChangeSeatsOnControlledVehicle[] =
{
MSEPositionY,
MSEPositionX,
@@ -4844,7 +4790,7 @@ MovementStatusElements ChangeSeatsOnControlledVehicle[] =
MSEEnd,
};
-MovementStatusElements CastSpellEmbeddedMovement[] =
+MovementStatusElements const CastSpellEmbeddedMovement[] =
{
MSEPositionZ,
MSEPositionY,
@@ -4918,22 +4864,30 @@ MovementStatusElements CastSpellEmbeddedMovement[] =
void Movement::ExtraMovementStatusElement::ReadNextElement(ByteBuffer& packet)
{
- MovementStatusElements element = _elements[_index++];
-
- if (element >= MSEHasGuidByte0 && element <= MSEHasGuidByte7)
- {
- Data.guid[element - MSEHasGuidByte0] = packet.ReadBit();
- return;
- }
-
- if (element >= MSEGuidByte0 && element <= MSEGuidByte7)
- {
- packet.ReadByteSeq(Data.guid[element - MSEGuidByte0]);
- return;
- }
+ MovementStatusElements const element = _elements[_index++];
switch (element)
{
+ case MSEHasGuidByte0:
+ case MSEHasGuidByte1:
+ case MSEHasGuidByte2:
+ case MSEHasGuidByte3:
+ case MSEHasGuidByte4:
+ case MSEHasGuidByte5:
+ case MSEHasGuidByte6:
+ case MSEHasGuidByte7:
+ Data.guid[element - MSEHasGuidByte0] = packet.ReadBit();
+ break;
+ case MSEGuidByte0:
+ case MSEGuidByte1:
+ case MSEGuidByte2:
+ case MSEGuidByte3:
+ case MSEGuidByte4:
+ case MSEGuidByte5:
+ case MSEGuidByte6:
+ case MSEGuidByte7:
+ packet.ReadByteSeq(Data.guid[element - MSEGuidByte0]);
+ break;
case MSEExtraFloat:
packet >> Data.floatData;
break;
@@ -4948,22 +4902,30 @@ void Movement::ExtraMovementStatusElement::ReadNextElement(ByteBuffer& packet)
void Movement::ExtraMovementStatusElement::WriteNextElement(ByteBuffer& packet)
{
- MovementStatusElements element = _elements[_index++];
-
- if (element >= MSEHasGuidByte0 && element <= MSEHasGuidByte7)
- {
- packet.WriteBit(Data.guid[element - MSEHasGuidByte0]);
- return;
- }
-
- if (element >= MSEGuidByte0 && element <= MSEGuidByte7)
- {
- packet.WriteByteSeq(Data.guid[element - MSEGuidByte0]);
- return;
- }
+ MovementStatusElements const element = _elements[_index++];
switch (element)
{
+ case MSEHasGuidByte0:
+ case MSEHasGuidByte1:
+ case MSEHasGuidByte2:
+ case MSEHasGuidByte3:
+ case MSEHasGuidByte4:
+ case MSEHasGuidByte5:
+ case MSEHasGuidByte6:
+ case MSEHasGuidByte7:
+ packet.WriteBit(Data.guid[element - MSEHasGuidByte0]);
+ break;
+ case MSEGuidByte0:
+ case MSEGuidByte1:
+ case MSEGuidByte2:
+ case MSEGuidByte3:
+ case MSEGuidByte4:
+ case MSEGuidByte5:
+ case MSEGuidByte6:
+ case MSEGuidByte7:
+ packet.WriteByteSeq(Data.guid[element - MSEGuidByte0]);
+ break;
case MSEExtraFloat:
packet << Data.floatData;
break;
@@ -4976,14 +4938,14 @@ void Movement::ExtraMovementStatusElement::WriteNextElement(ByteBuffer& packet)
}
}
-bool Movement::PrintInvalidSequenceElement(MovementStatusElements element, char const* function)
+bool Movement::PrintInvalidSequenceElement(MovementStatusElements const element, char const* function)
{
sLog->outError(LOG_FILTER_UNITS, "Incorrect sequence element %d detected at %s", element, function);
return false;
}
Movement::PacketSender::PacketSender(Unit* unit, Opcodes serverControl, Opcodes playerControl, Opcodes broadcast /*= SMSG_PLAYER_MOVE*/, ExtraMovementStatusElement* extras /*= NULL*/)
- : _unit(unit), _extraElements(extras)
+ : _extraElements(extras), _unit(unit)
{
if (unit->GetTypeId() == TYPEID_PLAYER && unit->ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER)
{
@@ -4999,12 +4961,16 @@ Movement::PacketSender::PacketSender(Unit* unit, Opcodes serverControl, Opcodes
void Movement::PacketSender::Send() const
{
- bool isPlayerMovement = _unit->GetTypeId() == TYPEID_PLAYER && _unit->ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER;
- if (isPlayerMovement && _selfOpcode != NULL_OPCODE)
+ bool isPlayerMovement = false;
+ if (Player* player = _unit->ToPlayer())
{
- WorldPacket data(_selfOpcode);
- _unit->WriteMovementInfo(data, _extraElements);
- _unit->ToPlayer()->SendDirectMessage(&data);
+ isPlayerMovement = player->m_mover->GetTypeId() == TYPEID_PLAYER;
+ if (isPlayerMovement && _selfOpcode != NULL_OPCODE)
+ {
+ WorldPacket data(_selfOpcode);
+ _unit->WriteMovementInfo(data, _extraElements);
+ player->SendDirectMessage(&data);
+ }
}
if (_broadcast != NULL_OPCODE)
@@ -5019,56 +4985,56 @@ void Movement::PacketSender::Send() const
}
}
-MovementStatusElements* GetMovementStatusElementsSequence(Opcodes opcode)
+MovementStatusElements const* GetMovementStatusElementsSequence(Opcodes opcode)
{
switch (opcode)
{
case MSG_MOVE_FALL_LAND:
- return MovementFallLandSequence;
+ return MovementFallLand;
case MSG_MOVE_HEARTBEAT:
- return MovementHeartBeatSequence;
+ return MovementHeartBeat;
case MSG_MOVE_JUMP:
- return MovementJumpSequence;
+ return MovementJump;
case MSG_MOVE_SET_FACING:
- return MovementSetFacingSequence;
+ return MovementSetFacing;
case MSG_MOVE_SET_PITCH:
- return MovementSetPitchSequence;
+ return MovementSetPitch;
case MSG_MOVE_START_ASCEND:
- return MovementStartAscendSequence;
+ return MovementStartAscend;
case MSG_MOVE_START_BACKWARD:
- return MovementStartBackwardSequence;
+ return MovementStartBackward;
case MSG_MOVE_START_DESCEND:
- return MovementStartDescendSequence;
+ return MovementStartDescend;
case MSG_MOVE_START_FORWARD:
- return MovementStartForwardSequence;
+ return MovementStartForward;
case MSG_MOVE_START_PITCH_DOWN:
- return MovementStartPitchDownSequence;
+ return MovementStartPitchDown;
case MSG_MOVE_START_PITCH_UP:
- return MovementStartPitchUpSequence;
+ return MovementStartPitchUp;
case MSG_MOVE_START_STRAFE_LEFT:
- return MovementStartStrafeLeftSequence;
+ return MovementStartStrafeLeft;
case MSG_MOVE_START_STRAFE_RIGHT:
- return MovementStartStrafeRightSequence;
+ return MovementStartStrafeRight;
case MSG_MOVE_START_SWIM:
- return MovementStartSwimSequence;
+ return MovementStartSwim;
case MSG_MOVE_START_TURN_LEFT:
- return MovementStartTurnLeftSequence;
+ return MovementStartTurnLeft;
case MSG_MOVE_START_TURN_RIGHT:
- return MovementStartTurnRightSequence;
+ return MovementStartTurnRight;
case MSG_MOVE_STOP:
- return MovementStopSequence;
+ return MovementStop;
case MSG_MOVE_STOP_ASCEND:
- return MovementStopAscendSequence;
+ return MovementStopAscend;
case MSG_MOVE_STOP_PITCH:
- return MovementStopPitchSequence;
+ return MovementStopPitch;
case MSG_MOVE_STOP_STRAFE:
- return MovementStopStrafeSequence;
+ return MovementStopStrafe;
case MSG_MOVE_STOP_SWIM:
- return MovementStopSwimSequence;
+ return MovementStopSwim;
case MSG_MOVE_STOP_TURN:
- return MovementStopTurnSequence;
+ return MovementStopTurn;
case SMSG_PLAYER_MOVE:
- return PlayerMoveSequence;
+ return PlayerMove;
case CMSG_MOVE_CHNG_TRANSPORT:
return MoveChngTransport;
case CMSG_MOVE_SPLINE_DONE:
diff --git a/src/server/game/Movement/MovementStructures.h b/src/server/game/Movement/MovementStructures.h
index c55f80a589b..97dc4e6f6b5 100644
--- a/src/server/game/Movement/MovementStructures.h
+++ b/src/server/game/Movement/MovementStructures.h
@@ -19,9 +19,11 @@
#ifndef _MOVEMENT_STRUCTURES_H
#define _MOVEMENT_STRUCTURES_H
-#include "ByteBuffer.h"
#include "Opcodes.h"
-#include "Unit.h"
+#include "Object.h"
+
+class ByteBuffer;
+class Unit;
enum MovementStatusElements
{
@@ -103,7 +105,6 @@ enum MovementStatusElements
// Allowed internal elements are: GUID markers (not transport), MSEExtraFloat, MSEExtraInt8
MSEExtraFloat,
MSEExtraInt8,
- MSE_COUNT
};
namespace Movement
@@ -152,6 +153,6 @@ namespace Movement
bool PrintInvalidSequenceElement(MovementStatusElements element, char const* function);
}
-MovementStatusElements* GetMovementStatusElementsSequence(Opcodes opcode);
+MovementStatusElements const* GetMovementStatusElementsSequence(Opcodes opcode);
#endif