diff options
author | sfan5 <sfan5@live.de> | 2018-02-02 23:34:09 +0100 |
---|---|---|
committer | SmallJoker <mk939@ymail.com> | 2018-06-03 17:32:00 +0200 |
commit | 9d3fa874be3509477243272cb23d892879348194 (patch) | |
tree | 2d095698ef25613c243becccb2dae43bf5ef48c5 /src | |
parent | 842eccee19cdef2c870fc7ccc136b0d634982c3a (diff) | |
download | minetest-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
Diffstat (limited to 'src')
-rw-r--r-- | src/content_sao.cpp | 13 |
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; |