15 Commits

Author SHA1 Message Date
Kawe Mazidjatari
c8752420a0 Use new Dev* logger functions
These get compiled in if IsCert() returns false.
2023-08-21 20:38:07 +02:00
Amos
bacfff184c Fix clock correction subtraction bug
Must be converted to actual msecs in floats since 'sv_clockcorrection_msecs' uses msec as base to store the cvar value.
2023-08-18 00:43:44 +02:00
Amos
4601c65bc6 Fix bots stuck in air
Make sure we set a frame time and command time.
2023-08-17 02:00:50 +02:00
Amos
5e47e45d83 Take clock drift into account during lag compensation clamp
Client's clock could be behind or ahead of the server's, take this into account. Note that this code has been tested over night and only had a few hits when new baseline snapshots were applied on the server, or when there was a clock drift. It still requires an actual playtest with several players on low and high latency to determine if this is even needed.
2023-08-17 01:59:54 +02:00
Amos
c7f1cfbaaa Improve unlag exploit fix
- Check and clamp if commandTime is above serverTime (too far in future).
- Check commandTime delta before checking if above serverTime or below lastCommandTime.
2023-08-15 22:53:42 +02:00
Amos
3ff85c174a Finish unlag exploit fix
- Make sure cmdTime is never lower than last.
- Make sure delta doesn't exceed maxUnlag.
- Make sure latency gets clamped to maxUnlag (clamp appears to be missing in the engine).
- Only check for cmdTime if we are not discarding the cmd; previously, already processed queued cmd's got checked before being discarded.
2023-08-15 00:45:58 +02:00
Amos
631e6d9e17 Work in progress unlag exploit fix
Temporary lag compensation exploit fix by clamping the difference. Exploiter could carefully control the detonation time of a grenade, or alter the ability cool downs by altering the 'CUserCmd::command_time' field before sending it up.
2023-08-14 20:47:02 +02:00
Kawe Mazidjatari
32d28d4285 *::ProcessUserCmds rebuild
Rebuild of the 'CServerGameClients::ProcessUserCmds' and 'CPlayer::ProcessUserCmds' methods. The rebuild is pretty much identical to the original implementation, but with additional checks for the number of commands, and total commands in 'CServerGameClients::ProcessUserCmds'. In the future, additional clamps and checks between CPlayer and the recv'd UserCMD should be incorporated in these functions.
2023-07-02 21:49:35 +02:00
Kawe Mazidjatari
4357c9dbf3 Fix many compiler warnings
Fix many compiler warnings indicating potentially unwanted implicit conversions/truncations.
2023-04-02 00:59:24 +02:00
Kawe Mazidjatari
b1f2f47058 Update names across codebase 2023-02-12 15:06:08 +01:00
Kawe Mazidjatari
9720d8b0f1 Fix 'g_pGlobals' and 'UTIL_PlayerByIndex()'
'UTIL_PlayerByIndex' now returns the player from the edict array properly, 'g_pGlobals' had to be dereferenced twice.
2023-01-20 14:07:25 +01:00
Kawe Mazidjatari
934d18809a Finish 'CPlayer::RunNullCommand' 2023-01-19 21:45:15 +01:00
Kawe Mazidjatari
1853f3d643 CPlayer: Finish user command executor
Command executor finished. Also improved the structure slightly to use CUserCmd instead of padded characters for 'm_LastCmd'.
2023-01-19 20:48:41 +01:00
Kawe Mazidjatari
b2ffab07c3 Fix mistake
Should be 'm_lastUCmdSimulationRemainderTime' instead of 'm_totalExtraClientCmdTimeAttempted'.
2023-01-19 15:29:53 +01:00
Kawe Mazidjatari
54f08bd887 Work-in-progress user command executor
* Added some getters in 'CBaseEntity' and 'CServerNetworkProperty'.
* Implemented 'CPlayer::SetTimeBase'.
* WIP implementation of 'CPlayer::RunNullCommand'.
2023-01-19 15:25:45 +01:00