Core/Units: Started work on updating movement (main goal: remove SendMovementFlagUpdate())
This commit is contained in:
@@ -2539,12 +2539,6 @@ void WorldObject::BuildMonsterChat(WorldPacket* data, uint8 msgtype, char const*
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::BuildHeartBeatMsg(WorldPacket* data) const
|
||||
{
|
||||
data->Initialize(MSG_MOVE_HEARTBEAT, 32);
|
||||
WriteMovementInfo(*data);
|
||||
}
|
||||
|
||||
void WorldObject::SendMessageToSet(WorldPacket* data, bool self)
|
||||
{
|
||||
if (IsInWorld())
|
||||
|
||||
@@ -22925,7 +22925,7 @@ void Player::SendInitialPacketsAfterAddToMap()
|
||||
ResetTimeSync();
|
||||
SendTimeSync();
|
||||
|
||||
Player::GetSession()->SendLoadCUFProfiles();
|
||||
GetSession()->SendLoadCUFProfiles();
|
||||
|
||||
CastSpell(this, 836, true); // LOGINEFFECT
|
||||
|
||||
@@ -26313,8 +26313,10 @@ void Player::ResetTimeSync()
|
||||
|
||||
void Player::SendTimeSync()
|
||||
{
|
||||
m_timeSyncCounter = m_movementCounter;
|
||||
|
||||
WorldPacket data(SMSG_TIME_SYNC_REQ, 4);
|
||||
data << uint32(m_timeSyncCounter++);
|
||||
data << uint32(m_movementCounter++);
|
||||
GetSession()->SendPacket(&data);
|
||||
|
||||
// Schedule next sync in 10 sec
|
||||
@@ -27018,7 +27020,7 @@ void Player::SendMovementSetCollisionHeight(float height)
|
||||
data.WriteByteSeq(guid[4]);
|
||||
data.WriteByteSeq(guid[3]);
|
||||
data.WriteByteSeq(guid[5]);
|
||||
data << uint32(sWorld->GetGameTime()); // Packet counter
|
||||
data << uint32(m_movementCounter++);
|
||||
data.WriteByteSeq(guid[1]);
|
||||
data.WriteByteSeq(guid[2]);
|
||||
data.WriteByteSeq(guid[7]);
|
||||
|
||||
@@ -156,26 +156,26 @@ _hitMask(hitMask), _spell(spell), _damageInfo(damageInfo), _healInfo(healInfo)
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(disable:4355)
|
||||
#endif
|
||||
Unit::Unit(bool isWorldObject): WorldObject(isWorldObject)
|
||||
, m_movedPlayer(NULL)
|
||||
, m_lastSanctuaryTime(0)
|
||||
, m_TempSpeed(0.0f)
|
||||
, IsAIEnabled(false)
|
||||
, NeedChangeAI(false)
|
||||
, m_ControlledByPlayer(false)
|
||||
, movespline(new Movement::MoveSpline())
|
||||
, i_AI(NULL)
|
||||
, i_disabledAI(NULL)
|
||||
, m_AutoRepeatFirstCast(false)
|
||||
, m_procDeep(0)
|
||||
, m_removedAurasCount(0)
|
||||
, i_motionMaster(this)
|
||||
, m_ThreatManager(this)
|
||||
, m_vehicle(NULL)
|
||||
, m_vehicleKit(NULL)
|
||||
, m_unitTypeMask(UNIT_MASK_NONE)
|
||||
, m_HostileRefManager(this)
|
||||
, _lastDamagedTime(0)
|
||||
Unit::Unit(bool isWorldObject) : WorldObject(isWorldObject),
|
||||
m_movedPlayer(NULL),
|
||||
m_lastSanctuaryTime(0),
|
||||
m_TempSpeed(0.0f),
|
||||
IsAIEnabled(false),
|
||||
NeedChangeAI(false),
|
||||
m_ControlledByPlayer(false),
|
||||
movespline(new Movement::MoveSpline()),
|
||||
i_AI(NULL),
|
||||
i_disabledAI(NULL),
|
||||
m_AutoRepeatFirstCast(false),
|
||||
m_procDeep(0),
|
||||
m_removedAurasCount(0),
|
||||
i_motionMaster(this),
|
||||
m_ThreatManager(this),
|
||||
m_vehicle(NULL),
|
||||
m_vehicleKit(NULL),
|
||||
m_unitTypeMask(UNIT_MASK_NONE),
|
||||
m_HostileRefManager(this),
|
||||
_lastDamagedTime(0)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(default:4355)
|
||||
@@ -195,7 +195,7 @@ Unit::Unit(bool isWorldObject): WorldObject(isWorldObject)
|
||||
m_extraAttacks = 0;
|
||||
m_canDualWield = false;
|
||||
|
||||
m_rootTimes = 0;
|
||||
m_movementCounter = 0;
|
||||
|
||||
m_state = 0;
|
||||
m_deathState = ALIVE;
|
||||
@@ -11400,7 +11400,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
data.WriteByteSeq(guid[5]);
|
||||
data << float(GetSpeed(mtype));
|
||||
data.WriteByteSeq(guid[2]);
|
||||
data << uint32(0);
|
||||
data << uint32(m_movementCounter++);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data.WriteByteSeq(guid[7]);
|
||||
@@ -11420,7 +11420,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
data.WriteByteSeq(guid[3]);
|
||||
data.WriteByteSeq(guid[1]);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
data << uint32(0);
|
||||
data << uint32(m_movementCounter++);
|
||||
data << float(GetSpeed(mtype));
|
||||
data.WriteByteSeq(guid[6]);
|
||||
data.WriteByteSeq(guid[0]);
|
||||
@@ -11438,7 +11438,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
data.WriteBit(guid[5]);
|
||||
data.WriteBit(guid[7]);
|
||||
data.WriteByteSeq(guid[5]);
|
||||
data << uint32(0);
|
||||
data << uint32(m_movementCounter++);
|
||||
data << float(GetSpeed(mtype));
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
@@ -11459,7 +11459,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
data.WriteBit(guid[1]);
|
||||
data.WriteBit(guid[6]);
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data << uint32(0);
|
||||
data << uint32(m_movementCounter++);
|
||||
data.WriteByteSeq(guid[6]);
|
||||
data.WriteByteSeq(guid[3]);
|
||||
data.WriteByteSeq(guid[5]);
|
||||
@@ -11479,7 +11479,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
data.WriteBit(guid[1]);
|
||||
data.WriteBit(guid[0]);
|
||||
data.WriteBit(guid[7]);
|
||||
data << uint32(0);
|
||||
data << uint32(m_movementCounter++);
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data.WriteByteSeq(guid[3]);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
@@ -11507,7 +11507,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
data.WriteByteSeq(guid[3]);
|
||||
data.WriteByteSeq(guid[1]);
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data << uint32(0);
|
||||
data << uint32(m_movementCounter++);
|
||||
data.WriteByteSeq(guid[6]);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
break;
|
||||
@@ -11526,7 +11526,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
data.WriteByteSeq(guid[7]);
|
||||
data.WriteByteSeq(guid[5]);
|
||||
data << float(GetSpeed(mtype));
|
||||
data << uint32(0);
|
||||
data << uint32(m_movementCounter++);
|
||||
data.WriteByteSeq(guid[2]);
|
||||
data.WriteByteSeq(guid[6]);
|
||||
data.WriteByteSeq(guid[3]);
|
||||
@@ -11543,7 +11543,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
data.WriteBit(guid[0]);
|
||||
data.WriteBit(guid[5]);
|
||||
data.WriteByteSeq(guid[3]);
|
||||
data << uint32(0);
|
||||
data << uint32(m_movementCounter++);
|
||||
data.WriteByteSeq(guid[6]);
|
||||
data << float(GetSpeed(mtype));
|
||||
data.WriteByteSeq(guid[1]);
|
||||
@@ -11567,7 +11567,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
||||
data.WriteByteSeq(guid[6]);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data << uint32(0);
|
||||
data << uint32(m_movementCounter++);
|
||||
data.WriteByteSeq(guid[1]);
|
||||
data.WriteByteSeq(guid[2]);
|
||||
data.WriteByteSeq(guid[7]);
|
||||
@@ -14879,9 +14879,6 @@ void Unit::SetRooted(bool apply)
|
||||
{
|
||||
if (apply)
|
||||
{
|
||||
if (m_rootTimes > 0) // blizzard internal check?
|
||||
m_rootTimes++;
|
||||
|
||||
// MOVEMENTFLAG_ROOT cannot be used in conjunction with MOVEMENTFLAG_MASK_MOVING (tested 3.3.5a)
|
||||
// this will freeze clients. That's why we remove MOVEMENTFLAG_MASK_MOVING before
|
||||
// setting MOVEMENTFLAG_ROOT
|
||||
@@ -14889,7 +14886,7 @@ void Unit::SetRooted(bool apply)
|
||||
AddUnitMovementFlag(MOVEMENTFLAG_ROOT);
|
||||
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
SendMoveRoot(m_rootTimes);
|
||||
SendMoveRoot(m_movementCounter++);
|
||||
else
|
||||
{
|
||||
ObjectGuid guid = GetGUID();
|
||||
@@ -14920,7 +14917,7 @@ void Unit::SetRooted(bool apply)
|
||||
if (!HasUnitState(UNIT_STATE_STUNNED)) // prevent moving if it also has stun effect
|
||||
{
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
SendMoveUnroot(++m_rootTimes);
|
||||
SendMoveUnroot(m_movementCounter++);
|
||||
else
|
||||
{
|
||||
ObjectGuid guid = GetGUID();
|
||||
@@ -16443,6 +16440,12 @@ void Unit::NearTeleportTo(float x, float y, float z, float orientation, bool cas
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::BuildHeartBeatMsg(WorldPacket* data)
|
||||
{
|
||||
data->Initialize(MSG_MOVE_HEARTBEAT, 32);
|
||||
WriteMovementInfo(*data);
|
||||
}
|
||||
|
||||
void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi)
|
||||
{
|
||||
if (GetTypeId() != TYPEID_PLAYER)
|
||||
@@ -16498,6 +16501,15 @@ void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (element >= MSESpeedWalk &&
|
||||
element <= MSESpeedPitchRate)
|
||||
{
|
||||
/// @TODO: Possibly verify with current speed - but need to keep in mind that core
|
||||
/// might trigger multiple changes before client has a chance to reply so only check the last value
|
||||
data.read_skip<float>();
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (element)
|
||||
{
|
||||
case MSEHasMovementFlags:
|
||||
@@ -16624,6 +16636,9 @@ void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi)
|
||||
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();
|
||||
@@ -16714,7 +16729,7 @@ void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi)
|
||||
#undef REMOVE_VIOLATING_FLAGS
|
||||
}
|
||||
|
||||
void Unit::WriteMovementInfo(WorldPacket& data) const
|
||||
void Unit::WriteMovementInfo(WorldPacket& data)
|
||||
{
|
||||
Unit const* mover = GetCharmerGUID() ? GetCharmer() : this;
|
||||
if (Player const* player = ToPlayer())
|
||||
@@ -16799,141 +16814,151 @@ void Unit::WriteMovementInfo(WorldPacket& data) const
|
||||
continue;
|
||||
}
|
||||
|
||||
if (element >= MSESpeedWalk &&
|
||||
element <= MSESpeedPitchRate)
|
||||
{
|
||||
data << mover->GetSpeed(UnitMoveType(element - MSESpeedWalk));
|
||||
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 MSEZeroBit:
|
||||
data.WriteBit(0);
|
||||
break;
|
||||
case MSEOneBit:
|
||||
data.WriteBit(1);
|
||||
break;
|
||||
default:
|
||||
ASSERT(false && "Incorrect sequence element detected at ReadMovementInfo");
|
||||
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 << 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;
|
||||
default:
|
||||
ASSERT(false && "Incorrect sequence element detected at ReadMovementInfo");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1625,7 +1625,7 @@ class Unit : public WorldObject
|
||||
|
||||
void SendClearTarget();
|
||||
|
||||
void BuildHeartBeatMsg(WorldPacket* data) const;
|
||||
void BuildHeartBeatMsg(WorldPacket* data);
|
||||
|
||||
bool isAlive() const { return (m_deathState == ALIVE); }
|
||||
bool isDying() const { return (m_deathState == JUST_DIED); }
|
||||
@@ -2112,7 +2112,7 @@ class Unit : public WorldObject
|
||||
void _EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* aurApp = NULL);
|
||||
|
||||
void ReadMovementInfo(WorldPacket& data, MovementInfo* mi);
|
||||
void WriteMovementInfo(WorldPacket& data) const;
|
||||
void WriteMovementInfo(WorldPacket& data);
|
||||
|
||||
bool isMoving() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING); }
|
||||
bool isTurning() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_TURNING); }
|
||||
@@ -2249,8 +2249,9 @@ class Unit : public WorldObject
|
||||
void SetStunned(bool apply);
|
||||
void SetRooted(bool apply);
|
||||
|
||||
uint32 m_movementCounter; ///< Incrementing counter used in movement packets
|
||||
|
||||
private:
|
||||
uint32 m_rootTimes;
|
||||
|
||||
uint32 m_state; // Even derived shouldn't modify
|
||||
uint32 m_CombatTimer;
|
||||
|
||||
@@ -1486,10 +1486,10 @@ void WorldSession::HandleTimeSyncResp(WorldPacket& recvData)
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_TIME_SYNC_RESP");
|
||||
|
||||
uint32 counter, clientTicks;
|
||||
recvData >> clientTicks >> counter;
|
||||
recvData >> counter >> clientTicks;
|
||||
|
||||
if (counter != _player->m_timeSyncCounter - 1)
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Wrong time sync counter from player %s (cheater?)", _player->GetName().c_str());
|
||||
if (counter != _player->m_timeSyncCounter)
|
||||
sLog->outError(LOG_FILTER_NETWORKIO, "Wrong time sync counter from player %s (cheater?)", _player->GetName().c_str());
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "Time sync received: counter %u, client ticks %u, time since last sync %u", counter, clientTicks, clientTicks - _player->m_timeSyncClient);
|
||||
|
||||
|
||||
@@ -452,36 +452,42 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recvData)
|
||||
// client ACK send one packet for mounted/run case and need skip all except last from its
|
||||
// in other cases anti-cheat check can be fail in false case
|
||||
UnitMoveType move_type;
|
||||
UnitMoveType force_move_type;
|
||||
|
||||
static char const* move_type_name[MAX_MOVE_TYPE] = { "Walk", "Run", "RunBack", "Swim", "SwimBack", "TurnRate", "Flight", "FlightBack", "PitchRate" };
|
||||
static char const* const move_type_name[MAX_MOVE_TYPE] =
|
||||
{
|
||||
"Walk",
|
||||
"Run",
|
||||
"RunBack",
|
||||
"Swim",
|
||||
"SwimBack",
|
||||
"TurnRate",
|
||||
"Flight",
|
||||
"FlightBack",
|
||||
"PitchRate"
|
||||
};
|
||||
|
||||
/*
|
||||
switch (opcode)
|
||||
{
|
||||
//case CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK: move_type = MOVE_WALK; force_move_type = MOVE_WALK; break;
|
||||
//case CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK: move_type = MOVE_RUN; force_move_type = MOVE_RUN; break;
|
||||
//case CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK: move_type = MOVE_RUN_BACK; force_move_type = MOVE_RUN_BACK; break;
|
||||
//case CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK: move_type = MOVE_SWIM; force_move_type = MOVE_SWIM; break;
|
||||
//case CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK: move_type = MOVE_SWIM_BACK; force_move_type = MOVE_SWIM_BACK; break;
|
||||
//case CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK: move_type = MOVE_TURN_RATE; force_move_type = MOVE_TURN_RATE; break;
|
||||
//case CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK: move_type = MOVE_FLIGHT; force_move_type = MOVE_FLIGHT; break;
|
||||
//case CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK: move_type = MOVE_FLIGHT_BACK; force_move_type = MOVE_FLIGHT_BACK; break;
|
||||
//case CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK: move_type = MOVE_PITCH_RATE; force_move_type = MOVE_PITCH_RATE; break;
|
||||
case CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK: move_type = MOVE_WALK; break;
|
||||
case CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK: move_type = MOVE_RUN; break;
|
||||
case CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK: move_type = MOVE_RUN_BACK; break;
|
||||
case CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK: move_type = MOVE_SWIM; break;
|
||||
case CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK: move_type = MOVE_SWIM_BACK; break;
|
||||
case CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK: move_type = MOVE_TURN_RATE; break;
|
||||
case CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK: move_type = MOVE_FLIGHT; break;
|
||||
case CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK: move_type = MOVE_FLIGHT_BACK; break;
|
||||
case CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK: move_type = MOVE_PITCH_RATE; break;
|
||||
default:
|
||||
sLog->outError(LOG_FILTER_NETWORKIO, "WorldSession::HandleForceSpeedChangeAck: Unknown move type opcode: %u", opcode);
|
||||
return;
|
||||
}
|
||||
*/
|
||||
sLog->outError(LOG_FILTER_NETWORKIO, "WorldSession::HandleForceSpeedChangeAck: Unknown move type opcode: %u", opcode);
|
||||
return;
|
||||
|
||||
// skip all forced speed changes except last and unexpected
|
||||
// in run/mounted case used one ACK and it must be skipped.m_forced_speed_changes[MOVE_RUN} store both.
|
||||
if (_player->m_forced_speed_changes[force_move_type] > 0)
|
||||
// in run/mounted case used one ACK and it must be skipped. m_forced_speed_changes[MOVE_RUN] store both.
|
||||
if (_player->m_forced_speed_changes[move_type] > 0)
|
||||
{
|
||||
--_player->m_forced_speed_changes[force_move_type];
|
||||
if (_player->m_forced_speed_changes[force_move_type] > 0)
|
||||
--_player->m_forced_speed_changes[move_type];
|
||||
if (_player->m_forced_speed_changes[move_type] > 0)
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -89,6 +89,19 @@ enum MovementStatusElements
|
||||
MSEFallHorizontalSpeed,
|
||||
MSESplineElevation,
|
||||
|
||||
MSECounter,
|
||||
|
||||
// Speed
|
||||
MSESpeedWalk,
|
||||
MSESpeedRun,
|
||||
MSESpeedRunBack,
|
||||
MSESpeedSwim,
|
||||
MSESpeedSwimBack,
|
||||
MSESpeedTurnRate,
|
||||
MSESpeedFlight,
|
||||
MSESpeedFlightBack,
|
||||
MSESpeedPitchRate,
|
||||
|
||||
// Special
|
||||
MSEZeroBit, // writes bit value 1 or skips read bit
|
||||
MSEOneBit, // writes bit value 0 or skips read bit
|
||||
|
||||
@@ -122,7 +122,7 @@ namespace Movement
|
||||
STR(PendingStrafeStop ), // 0x00004000,
|
||||
STR(PendingForward ), // 0x00008000,
|
||||
STR(PendingBackward ), // 0x00010000,
|
||||
STR(PendingStrafeReft ), // 0x00020000,
|
||||
STR(PendingStrafeLeft ), // 0x00020000,
|
||||
STR(PendingStrafeRight ), // 0x00040000,
|
||||
STR(PendingRoot ), // 0x00080000,
|
||||
STR(Swimming ), // 0x00100000, // Appears With Fly Flag Also
|
||||
|
||||
@@ -439,9 +439,6 @@ public:
|
||||
me->Relocate(x, y, z + 0.94f);
|
||||
me->SetDisableGravity(true);
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_DANCE);
|
||||
WorldPacket data; //send update position to client
|
||||
me->BuildHeartBeatMsg(&data);
|
||||
me->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff)
|
||||
@@ -468,9 +465,6 @@ public:
|
||||
me->SetInFront(player);
|
||||
Active = false;
|
||||
|
||||
WorldPacket data;
|
||||
me->BuildHeartBeatMsg(&data);
|
||||
me->SendMessageToSet(&data, true);
|
||||
switch (emote)
|
||||
{
|
||||
case TEXT_EMOTE_KISS:
|
||||
|
||||
Reference in New Issue
Block a user