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:
1 parent
8f2bcf3716
commit
7f62463f36
2 files changed
+12
-7
No files matched your search
@@ -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()
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in new issue
Block a user