diff options
author | sfan5 <sfan5@live.de> | 2018-01-28 10:21:21 +0100 |
---|---|---|
committer | SmallJoker <mk939@ymail.com> | 2018-06-03 17:32:00 +0200 |
commit | 842eccee19cdef2c870fc7ccc136b0d634982c3a (patch) | |
tree | f85b976a8a3e5904569df78a60cf3b2f2b3a421d | |
parent | 127b1fa6f8c014172f0f8e11de19ace0a6882c24 (diff) | |
download | minetest-842eccee19cdef2c870fc7ccc136b0d634982c3a.tar.gz minetest-842eccee19cdef2c870fc7ccc136b0d634982c3a.tar.bz2 minetest-842eccee19cdef2c870fc7ccc136b0d634982c3a.zip |
Apply physics overrides correctly during anticheat calculations (#6970)
-rw-r--r-- | src/content_sao.cpp | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp index d60a30840..b5e43bf1b 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -1401,26 +1401,29 @@ bool PlayerSAO::checkMovementCheat() too, and much more lightweight. */ - float player_max_speed = 0; + float player_max_walk = 0; // horizontal movement + float player_max_jump = 0; // vertical upwards movement - if (m_privs.count("fast") != 0) { - // Fast speed - player_max_speed = m_player->movement_speed_fast * m_physics_override_speed; - } else { - // Normal speed - player_max_speed = m_player->movement_speed_walk * m_physics_override_speed; - } - // Tolerance. The lag pool does this a bit. - //player_max_speed *= 2.5; + if (m_privs.count("fast") != 0) + player_max_walk = m_player->movement_speed_fast; // Fast speed + else + player_max_walk = m_player->movement_speed_walk; // Normal speed + player_max_walk *= m_physics_override_speed; + player_max_jump = m_player->movement_speed_jump * m_physics_override_jump; + // FIXME: Bouncy nodes cause practically unbound increase in Y speed, + // until this can be verified correctly, tolerate higher jumping speeds + player_max_jump *= 2.0; v3f diff = (m_base_position - m_last_good_position); float d_vert = diff.Y; diff.Y = 0; float d_horiz = diff.getLength(); - float required_time = d_horiz / player_max_speed; + float required_time = d_horiz / player_max_walk; - if (d_vert > 0 && d_vert / player_max_speed > required_time) - required_time = d_vert / player_max_speed; // Moving upwards + // FIXME: Checking downwards movement is not easily possible currently, + // the server could calculate speed differences to examine the gravity + if (d_vert > 0) + required_time = MYMAX(required_time, d_vert / player_max_jump); if (m_move_pool.grab(required_time)) { m_last_good_position = m_base_position; |