Core/Movement: no longer blindy rely on ack messages to change movementstatus values as the client can and will sometimes ignore packets such as when receiving movement packets while not being sent out via update object (changing maps via teleport)

This commit is contained in:
Ovahlord committed 2022-01-04 15:04:49 +01:00
1 parent 8f2bcf3716
commit 7f62463f36
2 files changed
+12 -7

No files matched your search

+8 -7
View File
@@ -25987,8 +25987,8 @@ bool Player::SetDisableGravity(bool disable, bool /*packetOnly = false*/, bool /
if (IsMovedByClient() && IsInWorld())
MovementPacketSender::SendMovementFlagChangeToMover(this, MOVEMENTFLAG_DISABLE_GRAVITY, disable);
else
Unit::SetDisableGravity(disable, false, false);
Unit::SetDisableGravity(disable, false, false);
return true;
}
@@ -26000,8 +26000,8 @@ bool Player::SetCanFly(bool enable, bool /*packetOnly = false*/)
if (IsMovedByClient() && IsInWorld())
MovementPacketSender::SendMovementFlagChangeToMover(this, MOVEMENTFLAG_CAN_FLY, enable);
else
Unit::SetCanFly(enable);
Unit::SetCanFly(enable);
return true;
}
@@ -26013,15 +26013,16 @@ bool Player::SetCanTransitionBetweenSwimAndFly(bool enable)
if (IsMovedByClient() && IsInWorld())
MovementPacketSender::SendMovementFlagChangeToMover(this, MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS, enable);
else
Unit::SetCanTransitionBetweenSwimAndFly(enable);
Unit::SetCanTransitionBetweenSwimAndFly(enable);
return true;
}
void Player::SendMovementSetCollisionHeight(float height, UpdateCollisionHeightReason reason)
{
MovementPacketSender::SendHeightChangeToMover(this, height, reason);
if (IsMovedByClient() && IsInWorld())
MovementPacketSender::SendHeightChangeToMover(this, height, reason);
}
void Player::ResetAchievements()
+4
View File
@@ -9075,9 +9075,13 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate)
if (m_speed_rate[mtype] == rate)
return;
float newSpeedFlat = rate * (IsControlledByPlayer() ? playerBaseMoveSpeed[mtype] : baseMoveSpeed[mtype]);
if (IsMovedByClient() && IsInWorld())
{
MovementPacketSender::SendSpeedChangeToMover(this, mtype, newSpeedFlat);
SetSpeedRateReal(mtype, rate);
}
else if (IsMovedByClient() && !IsInWorld()) // (1)
SetSpeedRateReal(mtype, rate);
else // <=> if(!IsMovedByPlayer())