689 Commits

Author SHA1 Message Date
Kawe Mazidjatari
85de096f98 Take into account television refresh rates
TV's tend to output @59.939999 FPS, set out frame limiter's to that if FPS happens to be 59 or 60.
2023-09-11 22:48:28 +02:00
Kawe Mazidjatari
07dade5d5d Implement high precision frame limiter
Limits frames at a much higher level of precision than 'fps_max' and 'fps_max_gfx', probably ideal to reduce input latency even more. Also changed the logic of the NVIDIA Reflex frame limiter, to which it would use the desktop's refresh rate if set to '-1'. The new render thread frame limiter has a similar behavior. Using desktop refresh rates on the render thread or NVIDIA Reflex frame limiter requires 'fps_max' to be set to 0 (unlimited), as it would otherwise result in a major performance drop due to a contest if fps_max_(gfx/rt) is set to a similar number as fps_max.
2023-09-11 22:20:24 +02:00
Kawe Mazidjatari
fdb4a4d429 Reverse CGame class
Class structure reversed.
2023-09-11 20:38:18 +02:00
Kawe Mazidjatari
0fe7b40506 Add inline DX device getters 2023-09-11 01:28:17 +02:00
Kawe Mazidjatari
bf01287129 Add cvar for NVAPI frame limiter
Might be useful for someone.
2023-09-10 01:44:04 +02:00
Kawe Mazidjatari
21093ca1a1 Implement NVIDIA Reflex Low Latency technology 2023-09-09 15:12:58 +02:00
Kawe Mazidjatari
bc59f1349d Use CUtlVector for map list 2023-09-05 17:34:22 +02:00
Kawe Mazidjatari
cb1a69e82a Ban system refactor
Use CUtlVector, and remove every copy caused by passing vectors by value. CUtlVector does not support copying. Also removed all extraneous std::string copies caused by calling itoa instead of std::to_string, or std::stoll, etc. All features have been tested and work as designed.
2023-08-31 00:16:25 +02:00
Kawe Mazidjatari
db6ccff8c2 Calculate processing time for each message 2023-08-28 02:45:37 +02:00
Kawe Mazidjatari
d7448be952 Improve CClientState fields 2023-08-27 00:20:35 +02:00
Kawe Mazidjatari
4e1d99bf9d CClientState adjustments
Mapped out and aligned slightly more.
2023-08-26 01:25:07 +02:00
Kawe Mazidjatari
03ee817ca1 More of CNetChan mapped out 2023-08-23 00:15:26 +02:00
Amos
ee3e2b8f2a Use CUtlString 2023-08-22 19:32:21 +02:00
Kawe Mazidjatari
e8bffae822 Fix compiler error
Small rename.
2023-08-22 01:12:22 +02:00
Kawe Mazidjatari
befd38bf51 Interface factory system rewrite
Removed all extraneous copies by adding the class 'InterfaceReg' which will construct a new interface, and link it to the engine's static register. The Source Engine macro 'EXPOSE_INTERFACE_FN' will help utilizing this. The game module from the plugin is not obtained through the process environment block, so the executable is no longer sensitive to names.
2023-08-22 01:11:49 +02:00
Kawe Mazidjatari
20cc4b1439 Rename CClientState field
Renamed to 'm_bUseLocalSendTableFile'. If set, the 'CClientState::ProcessSendTable()' method drops the SVC_SendTable message, and keeps using the local file instead.
2023-08-21 20:43:36 +02:00
Kawe Mazidjatari
c8752420a0 Use new Dev* logger functions
These get compiled in if IsCert() returns false.
2023-08-21 20:38:07 +02:00
Kawe Mazidjatari
71b0781715 Utilize 'DevMsg()' for uncertain builds only
Only uncertain builds will contain DevMsg()/DevWarning() prints. For retail, Msg() and Warning() should be used instead.
2023-08-21 19:12:29 +02:00
Kawe Mazidjatari
545ccac064 Improve CClient class
Added:
 - m_nDisconnectTick
 - m_nSendtableCRC
- m_nMmDev

Fixed incorrect placement for:
- m_LastMovementTick
2023-08-21 16:33:45 +02:00
Kawe Mazidjatari
de55d84795 Rebuild CNetChan::ProcessMessages()
Full rebuild for future 'proper' rate limit implementation.
2023-08-21 16:29:28 +02:00
Kawe Mazidjatari
d528ec69f1 Add wrapper for reading netmsg types 2023-08-21 16:28:04 +02:00
Kawe Mazidjatari
a5d1de8ead Rename local variable 2023-08-20 13:50:59 +02:00
Amos
320ff7fb0f Assert equal or above 0
Code bug because cannot go below.
2023-08-18 22:21:36 +02:00
Amos
fe1cc93cff CNetChan::FlowNewPacket(): Add a comment and also check the other loop
Added 2 comments that speaks for them self's, and 2 additional checks for the second loop as I had triggered several cases where it would loop indefinitely still, as we break out of the parallel loop and continue into the old school loop for the remainder of the outSeqNr - currentIndex frames. This should fix all problems related to this function. After numerous of tests with varying arbitrary outSeqNr values that were vastly larger than the current packet flow index, the bug was no longer triggered. A similar test had also be performed were multiple clients would do this at the same time, and even then; the server frame time(s) remained identical and the whole thing never hung.
2023-08-18 21:24:35 +02:00
Amos
26da5fd503 Increment by 4, since loop does 4 frames at a time
Compensate for compiler optimizations performed on CNetChan::FlowNewPacket().
2023-08-18 15:03:56 +02:00
Amos
2caccf6c91 Fix bug in CNetChan::FlowNewPacket()
Loop runs for 'CNetChan::m_nOutSequenceNr' frames, with no bounds. A corrupt or invalid packet will hang the engine for several seconds.
2023-08-18 13:06:00 +02:00
Amos
4f2a9601b4 Rebuild CNetChan::FlowNewPacket()
Rebuild for a future bug fix.
2023-08-18 12:47:16 +02:00
Amos
174f9b46f3 Fully map out net frame and flow structures
Mapped out 'netframe_header_s', 'netframe_s', and 'netflow_s' entirely.
2023-08-18 02:33:41 +02:00
Amos
3c36b606f0 Add function for checking if there's still pending data in reliable waiting buffers 2023-08-16 00:15:01 +02:00
Amos
2ff35a94cd Add inline for getting server time 2023-08-16 00:06:03 +02:00
Amos
00f7415380 Fixup CClient types 2023-08-14 00:30:20 +02:00
Amos
2768b925b0 Make assert better
Check if not below zero.
2023-08-13 20:26:52 +02:00
Kawe Mazidjatari
30031e3275 Don't allow stringcmd's if client isn't active
Potential exploit vector, executing stringcmd's during signon states where it shouldn't be used.
2023-08-08 19:25:12 +02:00
Kawe Mazidjatari
9a9d6b290a Fix typo 2023-08-08 19:05:12 +02:00
Kawe Mazidjatari
849372d68e Show server CPU, frame time and current tick as well 2023-08-08 12:55:17 +02:00
Kawe Mazidjatari
9d5eb5ba23 Remove redundant CEngine stuff
No longer required, the vftable has been reversed.
2023-08-08 09:28:11 +02:00
Kawe Mazidjatari
89431cc61f Fix crasher by clamping stringcmd length before tokenizing it
Possible crasher is to send a stringcmd >= 512 in size with funny UTF8 characters and have CUtlBuffer::ParseToken() read past it. Apparently seems to be mostly a problem on 32bit? I was unable to initiate a crash, though one string caused interesting behavior before, and there was one report of the dedicated server being 'crashed' with this. There is no reason to tokenize it up to 512 bytes if the game is only ever going to allow 128, so clamp it to 129 and if the user exceeds it then they still get the message and we just jettison it.
2023-08-07 16:52:35 +02:00
Kawe Mazidjatari
3ca092f598 Temporarily fix convar value assignment bug in 'CRConServer::Execute()'
Command string buffer contains "sv_cheats" and value buffer contains "sv_cheats 1". Ideally value buffer only contains "1", and we just concatenate to "sv_cheats 1" for 'Cmd_Dispatch()' to avoid confusion on the netconsole's programmer side. This will be refactored in the future.
2023-08-05 20:29:07 +02:00
Kawe Mazidjatari
759d8d6d2e Flip 'sv_rcon_sendlogs' if netcon is not input only 2023-08-05 01:11:32 +02:00
Kawe Mazidjatari
0a25f5e0fe Adjust 'CNetConBase' vftable order
Order has been adjusted to match the order of execution.
2023-08-04 17:45:30 +02:00
Kawe Mazidjatari
d7f92cbefd Adjust names
Adjust since previously they were pointers but now references.
2023-08-04 17:41:55 +02:00
Kawe Mazidjatari
bb5e92a563 Fix redundant socket closing bug
Cvar 'sv_rcon_maxsockets' is always higher than the actual allowed socket count. Should only check if its count is higher than the cvar.
2023-08-04 17:34:30 +02:00
Kawe Mazidjatari
f2783ae93f Make use of 'CConnectedNetConsoleData::m_bInputOnly' properly
This member was in the class when RCON was added to the r5sdk, but it was never utilized. Now, each netconsole can toggle whether they are input only or not, the server only sends logs to netconsoles that are not input only. This patch also contains a fix in which the listen server sends logs to the client of its own process, causing an infinite recursive call to DevMsg.
2023-08-04 17:28:01 +02:00
Kawe Mazidjatari
ce4b7b84a8 Promote RCON command execution authority
Allow RCON to execute any commands and set any cvar, regardless of their flags.
2023-08-04 11:53:46 +02:00
Kawe Mazidjatari
f6d2628937 Cleanup proto structure
Removed unused/extraneous enumerants.
2023-08-04 11:20:24 +02:00
Kawe Mazidjatari
10ee88ec10 Fix RCON disconnect bug
RCON occasionally did NOT disconnect, but only if the socket has been closed improperly. If the server/client crashes for example, the connection remained open in RCON; pendingLen on the initial peek recv < 0 while socket isn't blocking means socket has been closed unexpectedly.
2023-08-04 10:57:39 +02:00
Kawe Mazidjatari
309e297ae4 Add 'Cmd_Dispatch' to SDK
Signature is compatible with S1.
2023-08-04 10:49:39 +02:00
Kawe Mazidjatari
ddfe027677 Pass by reference
CConnectedNetConsoleData was allocated and deallocated manually, but std::vector is able to do it on its own. The vector type has been swapped out with CUtlVector as this removed the need of having to cast size types to a 32bit int to make it more compatible with the other sdk/engine types without throwing compiler warnings.
2023-08-04 10:48:22 +02:00
Kawe Mazidjatari
af81954b7f Force 'Cbuf_GetCurrentPlayer()' inline
FORCEINLINE will compile this down to an immediate.
2023-07-22 21:15:01 +02:00
Kawe Mazidjatari
21f64bc572 Adjust logging contexts
Adjust the context properly, some were wrong (e.g. 'ENGINE' in 'COMMON' code).
2023-07-22 21:14:04 +02:00