393 Commits

Author SHA1 Message Date
Kawe Mazidjatari
69396d5f42 Fix edge case bug where client doesn't load pak files when connected to a remote server
We used the hoststate levelname string, but this only applies to the host. Keep the levelname that was passed to 'Mod_LoadPakForMap()', and set the init bool after we ran 'Mod_GetLevelSettings()'.
2022-11-25 02:34:34 +01:00
Kawe Mazidjatari
c62620ec6b Fix bug where the playlists file doesn't reload when disconnecting from a server
When you connect to a server, the server sends its playlists down to the client. When we disconnect from the server, we reload the playlists so that our panels, and the game itself, presents the playlists that are on the clients disk. The reload never really happened as we checked if the call was not from the main thread, but since the large refactor several months ago, the call will always be issued from the main thread. I removed the dispatching code and made it only run on the client.
2022-11-24 16:29:53 +01:00
Kawe Mazidjatari
734e24b355 Fix edge case bug where level hasn't changed while it did
Fix bug where  'Mod_LevelHasChanged(...)' returns false even though it had changed. The static var was set in a different function which worked with the old system. The static var is now set within 'Mod_GetLevelSettings()', if 'Mod_LevelHasChanged()' returns true.
2022-11-24 15:47:14 +01:00
Kawe Mazidjatari
1f10bb1643 Check ptr for 's_pLevelSetKV' before deleting
Only delete if the pointer is valid to prevent segmentation fault.
2022-11-24 13:41:18 +01:00
Kawe Mazidjatari
27d00215ac Use memalloc pool pointer directly 2022-11-24 12:10:11 +01:00
Kawe Mazidjatari
c24e8a9f21 Rename 'MOD_' to 'Mod_'
The engine names these functions as 'Mod_'.
2022-11-24 11:58:32 +01:00
Kawe Mazidjatari
a7c33d4df3 Use KeyValues system for level settings file instead
Previously we used Json, however the rest of the game features KeyValues. I changed the system to feature KeyValues instead, to maintain consistency. Also improved the logic behind loading/parsing so we don't reparse the same level settings file if the pointer is still valid and we are on the same level.
2022-11-24 11:10:46 +01:00
Kawe Mazidjatari
a82674bbc8 Add 'KeyValues::RecursiveSaveToFile' to the SDK
Relies on the engine's implementation of 'KeyValues::RecursiveSaveToFile'. The IFileSystem methods have been fixed up with the CUtlBuffer class rebuild in which we could call these to write a KV memory structure as a file to the disk.
2022-11-22 09:04:28 +01:00
Kawe Mazidjatari
9c1efe20ad Remove ConVar and ConCommand singletons
Extraneous singletons.
2022-11-18 22:10:20 +01:00
Kawe Mazidjatari
4b1c5dd5a3 RCON system light refactor
* Used 'htonl'/'ntohl' for constructing the length prefix.
* Used static socket/address members instead of pointers.
* Used const qualifier where possible.
* Changed length prefix field type to 'u_long'.
* Removed extraneous include.
* Properly escaped percentage characters on the RCON game client for the ImGui console.
2022-11-14 21:00:41 +01:00
Kawe Mazidjatari
3511aff224 Execute "bind.cfg" on startup
Users could put custom binds in here.
I also unbound all dev-only binds by default to suppress warnings or prevent issues.
2022-11-10 15:42:27 +01:00
Kawe Mazidjatari
5c92fde569 Rename no map title to 'menu_main' 2022-11-10 11:59:29 +01:00
Kawe Mazidjatari
0c13ca4e3f Only run threaded bone setup when we don't run the listen server
The Season 3 versions of the executable deadlock when threaded bone setup has been enabled on the client while the listen server has ran at least once during the process lifetime.
2022-11-10 11:47:02 +01:00
Kawe Mazidjatari
95a544cdb9 Fix progressively increasing CPU time in PurgeServerOverlays() when enable_debug_overlays is unset
The default engine implementation of DrawAllOverlays will return early when cvar 'enable_debug_overlays' is false. The problem with this is that overlays are still added, which fills memory unnecessarily and also increases CPU time as they never decay, which overloads the function 'PurgeServerOverlays'. This became evident after profiling the application. Numerous people reported the bug.
2022-11-10 02:40:34 +01:00
Kawe Mazidjatari
44abceb78a CEngineAPI: Split VPK initialization code into separate function 2022-11-07 23:49:05 +01:00
Kawe Mazidjatari
f341919aad Properly initialize VPK and cache system for the dedicated server
server loads "vpk/server_mp_lobby.bsp" instead of "vpk/client_mp_common.bsp" and "vpk/client_frontend.bsp". Also removed the old hack we used to patch string constants to format VPK string paths as we have a proper implementation now using CEngineAPI::SetStartupInfo.
2022-11-07 23:11:12 +01:00
Kawe Mazidjatari
39ee5ddd6d Add '-novpk' command lien option
When '-novpk' is passed, the engine won't use the filesystem cache, and won't mount any VPK's (all files could be loaded from the disk essentially, the VPK files will be ignored).
2022-11-07 22:28:59 +01:00
Kawe Mazidjatari
6266549cd7 CEngineAPI::SetStartupInfo rebuild
Full rebuild of assembled function "CEngineAPI::SetStartupInfo". The assembly seems to match original function after rebuild. Does NOT support S1 yet, because TRACEINIT is inline in S1.
2022-11-07 22:25:20 +01:00
Kawe Mazidjatari
7be85c03a7 Implement '-nodfs'
Allow skipping DFS initialization.
2022-11-07 19:29:55 +01:00
Kawe Mazidjatari
7a065ccd12 Parse/reparse map list on playlists file initialization.
Map list will now initialize with the playlist. User could also reparse the map list by reparsing the playlists file.
2022-11-06 14:21:27 +01:00
Kawe Mazidjatari
811ecade86 Replace CServer::Think with CServer::FrameJob
Actual hook where we could also run anything in the server frame thread (the earliest function where equality to server thread id could be performed).
2022-11-05 00:12:45 +01:00
Marvin D
2fc0bea3a2 increase NET_PrintFunc buf.
Game expects 2048 characters.
2022-11-03 10:46:01 +01:00
Kawe Mazidjatari
4ebdc5c513 CServer::AuthClient: cache pChallenge->m_nNucleusID 2022-11-03 02:38:49 +01:00
Kawe Mazidjatari
40566235e0 Server authentication code improvements
* Added validity checks for player names, they must be UTF-8 encoded, else game clients will crash attempting to set non-UTF-8 player names in RUI.
* CServer::RejectConnection now takes a 'v_netadr_t*', previously it was 'user_creds_s*', which worked as 'v_netadr_t' is the first member in 'user_creds_s'.
* Programmer must now manually pass a character buffer to 'v_net_adr::GetAddress(...)'.
2022-11-03 02:30:57 +01:00
Amos
70ad249762 Initialize OverlayBase_t::m_nFlags 2022-11-02 14:30:04 +01:00
Kawe Mazidjatari
2a86970f12 Fix Smart Pistol's trajectory trace (laser line)
The smart pistol's laser line overlay did not draw after the debug overlay rebuild. After some small debugging, I found out that there was a function that creates the curved trace, and creates an overlay with index 4 (originally swept_box), however, the structure is different to that of swept_box. This is laser_line. Implemented logic for drawing out laser line, which essentially just calls DrawLine (as is the case in the engine).
2022-10-30 23:38:19 +01:00
Kawe Mazidjatari
3eadb1ed93 Make const
No modification is performed.
2022-10-29 00:01:10 +02:00
Kawe Mazidjatari
9c440e1e68 Overlay log system cleanup
* Use single static buffer instead of each overlay having its own (its only used in the material system thread).
* Improved readability by using ternary operators and c++ style casts.
2022-10-26 01:55:36 +02:00
Marvin D
b689a2f618 CEngineTrace adjustments @r-ex 2022-10-23 23:47:27 +02:00
Marvin D
136ac06b7c ClipTransform, ScreenTransform (W2S) 2022-10-23 01:20:49 +02:00
Marvin D
2059e23738 TraceRay with filter 2022-10-13 17:03:51 +02:00
Marvin D
82c60c466a CEngineTrace init 2022-10-13 16:48:56 +02:00
Kawe Mazidjatari
c1ca5d0878 Fix spelling mistakes in Recast & Detour library 2022-10-07 22:32:08 +02:00
Kawe Mazidjatari
703caebe6b Unload SDK pak files before Engine pak files
This is required, as we use assets within the engine pak files. Unloading the engine pak files first will result in a seg fault during shutdown.
2022-10-07 22:22:32 +02:00
Kawe Mazidjatari
69491acb49 Additional NavMesh draw optimizations using SIMD
* Construct min/max for AI Script Network boxes using SIMD (significantly reduced instruction count!).
* Move NavMesh debug draw to dedicated class for future changes.
2022-09-30 01:16:26 +02:00
Kawe Mazidjatari
bef7f352d6 Implement '-novid' param check
the parameter check for '-novid' has been removed from S2 onwards, but later added back in. Our S3 build doesn't have it as well. This commit adds it back in and allows user to launch the game without the startup video's by adding '-novid' to the launch arguments. ('-dev' also works, but this enables developer and sv_cheats..).
2022-09-25 13:36:55 +02:00
Kawe Mazidjatari
484f3251d1 Variable rename for readability 2022-09-22 21:20:37 +02:00
Kawe Mazidjatari
3af0c7c0b0 Fix dedicated.dll compile errors 2022-09-22 00:22:43 +02:00
Kawe Mazidjatari
42c6be9e08 Fix client.dll compile errors 2022-09-22 00:08:49 +02:00
Kawe Mazidjatari
df986f7d3b ConVar renames
Renamed:
- sv_pylonRefreshInterval => sv_pylonRefreshRate.
- sv_banlistRefreshInterval  => sv_banlistRefreshRate.
- sv_statusRefreshInterval => sv_statusRefreshRate.
2022-09-21 21:23:09 +02:00
Kawe Mazidjatari
8e75c57f0d Use retail/dev naming convention
Renamed 'debug' cfg's to 'dev', refered anything in code as retail/dev/prod.
2022-09-21 20:40:34 +02:00
Kawe Mazidjatari
693516ceb3 CL_CopyExistingEntity: remove Host_Error call
Calling Host_Error at this stage will cause a dead lock. Removed the call after performing several test (i think the reason all error calls are removed as of Titanfall 2 and Apex Legends (compared to Titanfall 1) is for this reason). Returning false does the job and allows the client to recover as soon as a valid packet comes in.
2022-09-21 20:13:51 +02:00
Kawe Mazidjatari
7912b79fa2 CL_CopyExistingEntity: implement missing bounds check
Implement bounds check for non-sanitized value of u.m_nNewEntity.
Debug builds of the engine have an assertion, however in release these are stripped.
This fixes a full chain client RCE exploit, for more information, see: https://ctf.re/source-engine/exploitation/2021/05/01/source-engine-2/
2022-09-21 02:38:58 +02:00
Kawe Mazidjatari
7a48c5ab6e Use shifted pointer 2022-09-21 00:38:46 +02:00
Kawe Mazidjatari
7804241376 CClient: add rate limit logic for 'ProcessStringCmd'
Client's can run string commands on the server with no rate limit. This means when you run 50k+ commands that are unknown, or spam 30k 'status' commands, you will be able to hang the server for 800/1200ms (15k/30kms if script printing to console is enabled!). Although the netchan processing budget system will kick you, the damage has already been done at this point. This change effectively breaks the ability to DOS the server from the client using networked string commands.
In easier words; binding 'status' to your mousewheel will get you kicked from the server, without hitching the server.
2022-09-20 22:48:55 +02:00
Kawe Mazidjatari
793c2e8e50 Rename 'Reputation_t' enumerant 2022-09-20 02:04:25 +02:00
Kawe Mazidjatari
dcc2c6224b Improve NetChan process time limit
* Check if m_MessageHandler is removed before running limit test.
* Add warning DevMsg if client exceeds value.
* Default 'net_processTimeBudget' value to '200'.
2022-09-20 02:00:52 +02:00
Kawe Mazidjatari
58cadb529b 'Bad behaving player' systems improvement
* Use 'CClient::Disconnect(..)' for all kicks and bans (this automatically clears the entire CClient slot, and removes the net channel).
* Only force disconnect when 'CNetChan::m_nSignonState' has a value that is not NULL.
* Clear the ServerPlayer slot on 'CClient::Disconnect(..)' and 'CClient::Connect(..)'.
* Only kick player for NetChannel overflow when value exceeds processing budget (not equals).
2022-09-19 01:28:43 +02:00
Kawe Mazidjatari
fdd74aa622 Implement net message processing budget
Implement net message process budget (channel gets removed if value is exceeded).
Use 'net_processLimit' to enable the implementation on the server. It will get enabled by default after testing and some cleanup. This helps against people trying to slow the server down by spamming net messages with a higher rate, e.g. using 'bind "mousewheel_up" "status"'.
2022-09-18 23:19:50 +02:00
Marvin D
514a407e4c RPakHeader_t/RPakLoadedInfo_t additions 2022-09-18 13:55:44 +02:00