summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2018-01-28 10:21:21 +0100
committerSmallJoker <mk939@ymail.com>2018-06-03 17:32:00 +0200
commit842eccee19cdef2c870fc7ccc136b0d634982c3a (patch)
treef85b976a8a3e5904569df78a60cf3b2f2b3a421d
parent127b1fa6f8c014172f0f8e11de19ace0a6882c24 (diff)
downloadminetest-842eccee19cdef2c870fc7ccc136b0d634982c3a.tar.gz
minetest-842eccee19cdef2c870fc7ccc136b0d634982c3a.tar.bz2
minetest-842eccee19cdef2c870fc7ccc136b0d634982c3a.zip
Apply physics overrides correctly during anticheat calculations (#6970)
-rw-r--r--src/content_sao.cpp29
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;