summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2018-02-02 23:34:09 +0100
committerSmallJoker <mk939@ymail.com>2018-06-03 17:32:00 +0200
commit9d3fa874be3509477243272cb23d892879348194 (patch)
tree2d095698ef25613c243becccb2dae43bf5ef48c5
parent842eccee19cdef2c870fc7ccc136b0d634982c3a (diff)
downloadminetest-9d3fa874be3509477243272cb23d892879348194.tar.gz
minetest-9d3fa874be3509477243272cb23d892879348194.tar.bz2
minetest-9d3fa874be3509477243272cb23d892879348194.zip
Refine movement anticheat again (#7004)
* Account for walking speed in vertical dir * Avoid undefined behaviour due to division-by-zero
-rw-r--r--src/content_sao.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp
index b5e43bf1b..1234e3915 100644
--- a/src/content_sao.cpp
+++ b/src/content_sao.cpp
@@ -1414,6 +1414,12 @@ bool PlayerSAO::checkMovementCheat()
// until this can be verified correctly, tolerate higher jumping speeds
player_max_jump *= 2.0;
+ // Don't divide by zero!
+ if (player_max_walk < 0.0001f)
+ player_max_walk = 0.0001f;
+ if (player_max_jump < 0.0001f)
+ player_max_jump = 0.0001f;
+
v3f diff = (m_base_position - m_last_good_position);
float d_vert = diff.Y;
diff.Y = 0;
@@ -1422,8 +1428,11 @@ bool PlayerSAO::checkMovementCheat()
// 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 (d_vert > 0) {
+ // In certain cases (water, ladders) walking speed is applied vertically
+ float s = MYMAX(player_max_jump, player_max_walk);
+ required_time = MYMAX(required_time, d_vert / s);
+ }
if (m_move_pool.grab(required_time)) {
m_last_good_position = m_base_position;