diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-04-04 23:49:14 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-04-04 23:49:14 +0200 |
| commit | 14b475e865058c1804cd6fb4dcaf307a4d895745 (patch) | |
| tree | e7ec36a39adeaa62f5019d165fe19df59acdaee7 /src/server/game/Entities | |
| parent | 38b326d27ba211b80a5028a3ce3e4381fd019b73 (diff) | |
Core/PacketIO: Enabled CMSG_MOVE_KNOCK_BACK_ACK, SMSG_MOVE_UPDATE_KNOCK_BACK and SMSG_MOVE_UPDATE
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 230 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 |
2 files changed, 8 insertions, 224 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5968c7453c3..8186e51db89 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -26270,221 +26270,8 @@ bool Player::CanUseMastery() const return HasSpell(MasterySpells[getClass()]); } -void Player::ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::ExtraMovementStatusElement* extras /*= NULL*/) +void Player::ValidateMovementInfo(MovementInfo* mi) { - MovementStatusElements const* sequence = GetMovementStatusElementsSequence(data.GetOpcode()); - if (!sequence) - { - TC_LOG_ERROR("network", "Player::ReadMovementInfo: No movement sequence found for opcode %s", GetOpcodeNameForLogging(static_cast<OpcodeClient>(data.GetOpcode())).c_str()); - return; - } - - bool hasMovementFlags = false; - bool hasMovementFlags2 = false; - bool hasTimestamp = false; - bool hasOrientation = false; - bool hasTransportData = false; - bool hasTransportPrevTime = false; - bool hasTransportVehicleId = false; - bool hasPitch = false; - bool hasFallData = false; - bool hasFallDirection = false; - bool hasSplineElevation = 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 MSEHasTransportPrevTime: - if (hasTransportData) - hasTransportPrevTime = data.ReadBit(); - break; - case MSEHasTransportVehicleId: - if (hasTransportData) - hasTransportVehicleId = data.ReadBit(); - break; - case MSEHasPitch: - hasPitch = !data.ReadBit(); - break; - case MSEHasFallData: - hasFallData = data.ReadBit(); - break; - case MSEHasFallDirection: - if (hasFallData) - hasFallDirection = data.ReadBit(); - break; - case MSEHasSplineElevation: - 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->transport.pos.m_positionX; - break; - case MSETransportPositionY: - if (hasTransportData) - data >> mi->transport.pos.m_positionY; - break; - case MSETransportPositionZ: - if (hasTransportData) - data >> mi->transport.pos.m_positionZ; - break; - case MSETransportOrientation: - if (hasTransportData) - mi->transport.pos.SetOrientation(data.read<float>()); - break; - case MSETransportSeat: - if (hasTransportData) - data >> mi->transport.seat; - break; - case MSETransportTime: - if (hasTransportData) - data >> mi->transport.time; - break; - case MSETransportPrevTime: - if (hasTransportData && hasTransportPrevTime) - data >> mi->transport.prevTime; - break; - case MSETransportVehicleId: - if (hasTransportData && hasTransportVehicleId) - data >> mi->transport.vehicleId; - break; - case MSEPitch: - if (hasPitch) - mi->pitch = G3D::wrap(data.read<float>(), float(-M_PI), float(M_PI)); - break; - case MSEFallTime: - if (hasFallData) - data >> mi->jump.fallTime; - break; - case MSEFallVerticalSpeed: - if (hasFallData) - data >> mi->jump.zspeed; - break; - case MSEFallCosAngle: - if (hasFallData && hasFallDirection) - data >> mi->jump.cosAngle; - break; - case MSEFallSinAngle: - if (hasFallData && hasFallDirection) - data >> mi->jump.sinAngle; - break; - case MSEFallHorizontalSpeed: - if (hasFallData && hasFallDirection) - data >> mi->jump.xyspeed; - break; - case MSESplineElevation: - if (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->transport.guid = tguid; - //! 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 @@ -26492,7 +26279,7 @@ void Player::ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::Ext { \ if (check) \ { \ - TC_LOG_DEBUG("entities.unit", "Player::ReadMovementInfo: Violation of MovementFlags found (%s). " \ + TC_LOG_DEBUG("entities.unit", "Player::ValidateMovementInfo: Violation of MovementFlags found (%s). " \ "MovementFlags: %u, MovementFlags2: %u for player %s. Mask %u will be removed.", \ STRINGIZE(check), mi->GetMovementFlags(), mi->GetExtraMovementFlags(), GetGUID().ToString().c_str(), maskToRemove); \ mi->RemoveMovementFlag((maskToRemove)); \ @@ -26549,21 +26336,18 @@ void Player::ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::Ext 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), + REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY) && GetSession()->GetSecurity() == SEC_PLAYER && + !m_mover->HasAuraType(SPELL_AURA_FLY) && + !m_mover->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED), MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY); REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_CAN_FLY) && mi->HasMovementFlag(MOVEMENTFLAG_FALLING), MOVEMENTFLAG_FALLING); - REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FALLING) && (!hasFallData || !hasFallDirection), MOVEMENTFLAG_FALLING); - - REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_SPLINE_ELEVATION) && - (!hasSplineElevation || G3D::fuzzyEq(mi->splineElevation, 0.0f)), MOVEMENTFLAG_SPLINE_ELEVATION); + REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_SPLINE_ELEVATION) && G3D::fuzzyEq(mi->splineElevation, 0.0f), MOVEMENTFLAG_SPLINE_ELEVATION); // Client first checks if spline elevation != 0, then verifies flag presence - if (hasSplineElevation) + if (G3D::fuzzyNe(mi->splineElevation, 0.0f)) mi->AddMovementFlag(MOVEMENTFLAG_SPLINE_ELEVATION); #undef REMOVE_VIOLATING_FLAGS diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e263dd70bee..e74353f31a4 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2593,7 +2593,7 @@ class Player : public Unit, public GridObject<Player> bool IsInWhisperWhiteList(ObjectGuid guid); void RemoveFromWhisperWhiteList(ObjectGuid guid) { WhisperList.remove(guid); } - void ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::ExtraMovementStatusElement* extras = NULL); + void ValidateMovementInfo(MovementInfo* mi); /*! These methods send different packets to the client in apply and unapply case. These methods are only sent to the current unit. |
