Skip to content

Commit de2c40c

Browse files
sfan5nerzhul
authored andcommittedJan 28, 2018
Apply physics overrides correctly during anticheat calculations (#6970)
1 parent 7d3295e commit de2c40c

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed
 

‎src/content_sao.cpp

+16-13
Original file line numberDiff line numberDiff line change
@@ -1401,26 +1401,29 @@ bool PlayerSAO::checkMovementCheat()
14011401
too, and much more lightweight.
14021402
*/
14031403

1404-
float player_max_speed = 0;
1404+
float player_max_walk = 0; // horizontal movement
1405+
float player_max_jump = 0; // vertical upwards movement
14051406

1406-
if (m_privs.count("fast") != 0) {
1407-
// Fast speed
1408-
player_max_speed = m_player->movement_speed_fast * m_physics_override_speed;
1409-
} else {
1410-
// Normal speed
1411-
player_max_speed = m_player->movement_speed_walk * m_physics_override_speed;
1412-
}
1413-
// Tolerance. The lag pool does this a bit.
1414-
//player_max_speed *= 2.5;
1407+
if (m_privs.count("fast") != 0)
1408+
player_max_walk = m_player->movement_speed_fast; // Fast speed
1409+
else
1410+
player_max_walk = m_player->movement_speed_walk; // Normal speed
1411+
player_max_walk *= m_physics_override_speed;
1412+
player_max_jump = m_player->movement_speed_jump * m_physics_override_jump;
1413+
// FIXME: Bouncy nodes cause practically unbound increase in Y speed,
1414+
// until this can be verified correctly, tolerate higher jumping speeds
1415+
player_max_jump *= 2.0;
14151416

14161417
v3f diff = (m_base_position - m_last_good_position);
14171418
float d_vert = diff.Y;
14181419
diff.Y = 0;
14191420
float d_horiz = diff.getLength();
1420-
float required_time = d_horiz / player_max_speed;
1421+
float required_time = d_horiz / player_max_walk;
14211422

1422-
if (d_vert > 0 && d_vert / player_max_speed > required_time)
1423-
required_time = d_vert / player_max_speed; // Moving upwards
1423+
// FIXME: Checking downwards movement is not easily possible currently,
1424+
// the server could calculate speed differences to examine the gravity
1425+
if (d_vert > 0)
1426+
required_time = MYMAX(required_time, d_vert / player_max_jump);
14241427

14251428
if (m_move_pool.grab(required_time)) {
14261429
m_last_good_position = m_base_position;

0 commit comments

Comments
 (0)
Please sign in to comment.