@@ -1401,26 +1401,29 @@ bool PlayerSAO::checkMovementCheat()
1401
1401
too, and much more lightweight.
1402
1402
*/
1403
1403
1404
- float player_max_speed = 0 ;
1404
+ float player_max_walk = 0 ; // horizontal movement
1405
+ float player_max_jump = 0 ; // vertical upwards movement
1405
1406
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 ;
1415
1416
1416
1417
v3f diff = (m_base_position - m_last_good_position);
1417
1418
float d_vert = diff.Y ;
1418
1419
diff.Y = 0 ;
1419
1420
float d_horiz = diff.getLength ();
1420
- float required_time = d_horiz / player_max_speed ;
1421
+ float required_time = d_horiz / player_max_walk ;
1421
1422
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);
1424
1427
1425
1428
if (m_move_pool.grab (required_time)) {
1426
1429
m_last_good_position = m_base_position;
0 commit comments