X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=sv_user.c;h=1e3d581f0c186bd501531e93af826af6a60fcdf0;hb=ecfab2093025515ba0dd1fb38723a1812970a554;hp=9e17dbfee03d0da0d8e65e19122b4cbb7b667667;hpb=abfdafcf23981b3de44fcb031d462a568368111f;p=xonotic%2Fdarkplaces.git diff --git a/sv_user.c b/sv_user.c index 9e17dbfe..1e3d581f 100644 --- a/sv_user.c +++ b/sv_user.c @@ -738,7 +738,8 @@ static void SV_ReadClientMove (void) sv_readmoves[sv_numreadmoves++] = *move; // movement packet loss tracking - if(move->sequence) + // bones_was_here: checking begun prevents heavy loss detection right after a map change + if(move->sequence && host_client->begun) { if(move->sequence > host_client->movement_highestsequence_seen) { @@ -775,7 +776,7 @@ static void SV_ExecuteClientMoves(void) { prvm_prog_t *prog = SVVM_prog; int moveindex; - float moveframetime; + double moveframetime; double oldframetime; double oldframetime2; #ifdef NUM_PING_TIMES @@ -811,7 +812,8 @@ static void SV_ExecuteClientMoves(void) // this is a new move move->time = bound(sv.time - 1, move->time, sv.time); // prevent slowhack/speedhack combos move->time = max(move->time, host_client->cmd.time); // prevent backstepping of time - moveframetime = bound(0, move->time - host_client->cmd.time, min(0.1, sv_clmovement_inputtimeout.value)); + // bones_was_here: limit moveframetime to a multiple of sv.frametime to match inputtimeout behaviour + moveframetime = min(move->time - host_client->cmd.time, min(0.1, sys_ticrate.value > 0.0 ? sv.frametime * ceil(sv_clmovement_inputtimeout.value / sv.frametime) : sv_clmovement_inputtimeout.value)); // discard (treat like lost) moves with too low distance from // the previous one to prevent hacks using float inaccuracy @@ -840,8 +842,6 @@ static void SV_ExecuteClientMoves(void) // with this approach, and if they don't send input for a while they // start moving anyway, so the longest 'lagaport' possible is // determined by the sv_clmovement_inputtimeout cvar) - if (moveframetime <= 0) - continue; oldframetime = PRVM_serverglobalfloat(frametime); oldframetime2 = sv.frametime; // update ping time for qc to see while executing this move @@ -857,7 +857,7 @@ static void SV_ExecuteClientMoves(void) SV_Physics_ClientMove(); sv.frametime = oldframetime2; PRVM_serverglobalfloat(frametime) = oldframetime; - host_client->clmovement_inputtimeout = sv_clmovement_inputtimeout.value; + host_client->clmovement_inputtimeout = min(0.1, sv_clmovement_inputtimeout.value); } } }