diff options
author | Emma Miler <emma.pi@protonmail.com> | 2022-12-19 19:32:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-19 19:32:16 +0100 |
commit | e04f3b36accccb590a2d51b4829256b9964ac3fd (patch) | |
tree | 20ee30c82e6f53e6e772be2e1b9613eebca12bf3 | |
parent | 33f18a735986dcd136bf8ba70ad8331306c28227 (diff) | |
download | NorthstarLauncher-e04f3b36accccb590a2d51b4829256b9964ac3fd.tar.gz NorthstarLauncher-e04f3b36accccb590a2d51b4829256b9964ac3fd.zip |
Restructuring (#365)
* Remove launcher proxy
* Restructuring
* More restructuring
* Fix include dirs
* Fix merge
* Remove clang thing
* Filters
* Oops
-rw-r--r-- | NorthstarDLL/NorthstarDLL.vcxproj | 262 | ||||
-rw-r--r-- | NorthstarDLL/NorthstarDLL.vcxproj.filters | 814 | ||||
-rw-r--r-- | NorthstarDLL/client/audio.cpp (renamed from NorthstarDLL/audio.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/client/audio.h (renamed from NorthstarDLL/audio.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/client/chatcommand.cpp (renamed from NorthstarDLL/chatcommand.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/client/clientauthhooks.cpp (renamed from NorthstarDLL/clientauthhooks.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/client/clientruihooks.cpp (renamed from NorthstarDLL/clientruihooks.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/client/clientvideooverrides.cpp (renamed from NorthstarDLL/clientvideooverrides.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/client/debugoverlay.cpp (renamed from NorthstarDLL/debugoverlay.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/client/demofixes.cpp (renamed from NorthstarDLL/demofixes.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/client/diskvmtfixes.cpp (renamed from NorthstarDLL/diskvmtfixes.cpp) | 32 | ||||
-rw-r--r-- | NorthstarDLL/client/languagehooks.cpp (renamed from NorthstarDLL/languagehooks.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/client/latencyflex.cpp (renamed from NorthstarDLL/latencyflex.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/client/localchatwriter.cpp (renamed from NorthstarDLL/localchatwriter.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/client/localchatwriter.h (renamed from NorthstarDLL/localchatwriter.h) | 2 | ||||
-rw-r--r-- | NorthstarDLL/client/modlocalisation.cpp (renamed from NorthstarDLL/modlocalisation.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/client/r2client.cpp (renamed from NorthstarDLL/r2client.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/client/r2client.h (renamed from NorthstarDLL/r2client.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/config/profile.cpp (renamed from NorthstarDLL/nsprefix.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/config/profile.h (renamed from NorthstarDLL/nsprefix.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/convar/concommand.cpp (renamed from NorthstarDLL/concommand.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/core/convar/concommand.h (renamed from NorthstarDLL/concommand.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/convar/convar.cpp (renamed from NorthstarDLL/convar.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/core/convar/convar.h (renamed from NorthstarDLL/convar.h) | 4 | ||||
-rw-r--r-- | NorthstarDLL/core/convar/cvar.cpp (renamed from NorthstarDLL/cvar.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/convar/cvar.h (renamed from NorthstarDLL/cvar.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/filesystem/filesystem.cpp (renamed from NorthstarDLL/filesystem.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/core/filesystem/filesystem.h (renamed from NorthstarDLL/filesystem.h) | 2 | ||||
-rw-r--r-- | NorthstarDLL/core/filesystem/rpakfilesystem.cpp (renamed from NorthstarDLL/rpakfilesystem.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/core/filesystem/rpakfilesystem.h (renamed from NorthstarDLL/rpakfilesystem.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/hooks.cpp (renamed from NorthstarDLL/hooks.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/core/hooks.h (renamed from NorthstarDLL/hooks.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/math/bitbuf.h (renamed from NorthstarDLL/bitbuf.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/math/bits.cpp (renamed from NorthstarDLL/bits.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/math/bits.h (renamed from NorthstarDLL/bits.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/math/color.cpp (renamed from NorthstarDLL/color.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/math/color.h (renamed from NorthstarDLL/color.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/math/vector.h (renamed from NorthstarDLL/vector.h) | 104 | ||||
-rw-r--r-- | NorthstarDLL/core/memalloc.cpp (renamed from NorthstarDLL/memalloc.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/core/memalloc.h (renamed from NorthstarDLL/memalloc.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/memory.cpp (renamed from NorthstarDLL/memory.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/core/memory.h (renamed from NorthstarDLL/memory.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/structs.h (renamed from NorthstarDLL/structs.h) | 5 | ||||
-rw-r--r-- | NorthstarDLL/core/tier0.cpp (renamed from NorthstarDLL/tier0.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/core/tier0.h (renamed from NorthstarDLL/tier0.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/dedicated/dedicated.cpp (renamed from NorthstarDLL/dedicated.cpp) | 12 | ||||
-rw-r--r-- | NorthstarDLL/dedicated/dedicated.h (renamed from NorthstarDLL/dedicated.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/dedicated/dedicatedmaterialsystem.cpp (renamed from NorthstarDLL/dedicatedmaterialsystem.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/dllmain.cpp | 19 | ||||
-rw-r--r-- | NorthstarDLL/dllmain.h (renamed from NorthstarDLL/main.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/engine/host.cpp (renamed from NorthstarDLL/host.cpp) | 18 | ||||
-rw-r--r-- | NorthstarDLL/engine/hoststate.cpp (renamed from NorthstarDLL/hoststate.cpp) | 18 | ||||
-rw-r--r-- | NorthstarDLL/engine/hoststate.h (renamed from NorthstarDLL/hoststate.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/engine/r2engine.cpp (renamed from NorthstarDLL/r2engine.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/engine/r2engine.h (renamed from NorthstarDLL/r2engine.h) | 2 | ||||
-rw-r--r-- | NorthstarDLL/engine/runframe.cpp (renamed from NorthstarDLL/runframe.cpp) | 8 | ||||
-rw-r--r-- | NorthstarDLL/logging/crashhandler.cpp (renamed from NorthstarDLL/crashhandler.cpp) | 8 | ||||
-rw-r--r-- | NorthstarDLL/logging/crashhandler.h (renamed from NorthstarDLL/crashhandler.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/logging/logging.cpp (renamed from NorthstarDLL/logging.cpp) | 8 | ||||
-rw-r--r-- | NorthstarDLL/logging/logging.h (renamed from NorthstarDLL/logging.h) | 2 | ||||
-rw-r--r-- | NorthstarDLL/logging/loghooks.cpp (renamed from NorthstarDLL/loghooks.cpp) | 13 | ||||
-rw-r--r-- | NorthstarDLL/logging/loghooks.h (renamed from NorthstarDLL/loghooks.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/logging/sourceconsole.cpp (renamed from NorthstarDLL/sourceconsole.cpp) | 8 | ||||
-rw-r--r-- | NorthstarDLL/logging/sourceconsole.h (renamed from NorthstarDLL/sourceconsole.h) | 2 | ||||
-rw-r--r-- | NorthstarDLL/masterserver/masterserver.cpp (renamed from NorthstarDLL/masterserver.cpp) | 16 | ||||
-rw-r--r-- | NorthstarDLL/masterserver/masterserver.h (renamed from NorthstarDLL/masterserver.h) | 4 | ||||
-rw-r--r-- | NorthstarDLL/mods/compiled/kb_act.cpp (renamed from NorthstarDLL/kb_act.cpp) | 90 | ||||
-rw-r--r-- | NorthstarDLL/mods/compiled/modkeyvalues.cpp (renamed from NorthstarDLL/modkeyvalues.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/mods/compiled/modpdef.cpp (renamed from NorthstarDLL/modpdef.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/mods/compiled/modscriptsrson.cpp (renamed from NorthstarDLL/modscriptsrson.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/mods/modmanager.cpp (renamed from NorthstarDLL/modmanager.cpp) | 24 | ||||
-rw-r--r-- | NorthstarDLL/mods/modmanager.h (renamed from NorthstarDLL/modmanager.h) | 6 | ||||
-rw-r--r-- | NorthstarDLL/pch.h | 14 | ||||
-rw-r--r-- | NorthstarDLL/plugins/plugin_abi.h (renamed from NorthstarDLL/plugin_abi.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/plugins/plugins.cpp (renamed from NorthstarDLL/plugins.cpp) | 8 | ||||
-rw-r--r-- | NorthstarDLL/plugins/plugins.h (renamed from NorthstarDLL/plugins.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/scripts/client/clientchathooks.cpp (renamed from NorthstarDLL/clientchathooks.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/scripts/client/scriptbrowserhooks.cpp (renamed from NorthstarDLL/scriptbrowserhooks.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/scripts/client/scriptmainmenupromos.cpp (renamed from NorthstarDLL/scriptmainmenupromos.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/scripts/client/scriptmodmenu.cpp (renamed from NorthstarDLL/scriptmodmenu.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/scripts/client/scriptserverbrowser.cpp (renamed from NorthstarDLL/scriptserverbrowser.cpp) | 10 | ||||
-rw-r--r-- | NorthstarDLL/scripts/client/scriptservertoclientstringcommand.cpp (renamed from NorthstarDLL/scriptservertoclientstringcommand.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/scripts/scriptdatatables.cpp (renamed from NorthstarDLL/scriptdatatables.cpp) | 16 | ||||
-rw-r--r-- | NorthstarDLL/scripts/scripthttprequesthandler.cpp (renamed from NorthstarDLL/httprequesthandler.cpp) | 8 | ||||
-rw-r--r-- | NorthstarDLL/scripts/scripthttprequesthandler.h (renamed from NorthstarDLL/httprequesthandler.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/scripts/scriptjson.cpp (renamed from NorthstarDLL/scriptjson.cpp) | 31 | ||||
-rw-r--r-- | NorthstarDLL/scripts/scriptutility.cpp (renamed from NorthstarDLL/scriptutility.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/scripts/server/miscserverfixes.cpp (renamed from NorthstarDLL/miscserverfixes.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/scripts/server/miscserverscript.cpp (renamed from NorthstarDLL/miscserverscript.cpp) | 12 | ||||
-rw-r--r-- | NorthstarDLL/scripts/server/scriptuserinfo.cpp (renamed from NorthstarDLL/scriptuserinfo.cpp) | 210 | ||||
-rw-r--r-- | NorthstarDLL/server/auth/bansystem.cpp (renamed from NorthstarDLL/bansystem.cpp) | 10 | ||||
-rw-r--r-- | NorthstarDLL/server/auth/bansystem.h (renamed from NorthstarDLL/bansystem.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/server/auth/serverauthentication.cpp (renamed from NorthstarDLL/serverauthentication.cpp) | 28 | ||||
-rw-r--r-- | NorthstarDLL/server/auth/serverauthentication.h (renamed from NorthstarDLL/serverauthentication.h) | 4 | ||||
-rw-r--r-- | NorthstarDLL/server/buildainfile.cpp (renamed from NorthstarDLL/buildainfile.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/server/r2server.cpp (renamed from NorthstarDLL/r2server.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/server/r2server.h (renamed from NorthstarDLL/r2server.h) | 2 | ||||
-rw-r--r-- | NorthstarDLL/server/serverchathooks.cpp (renamed from NorthstarDLL/serverchathooks.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/server/serverchathooks.h (renamed from NorthstarDLL/serverchathooks.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/server/serverpresence.cpp (renamed from NorthstarDLL/serverpresence.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/server/serverpresence.h (renamed from NorthstarDLL/serverpresence.h) | 2 | ||||
-rw-r--r-- | NorthstarDLL/shared/exploit_fixes/exploitfixes.cpp (renamed from NorthstarDLL/exploitfixes.cpp) | 14 | ||||
-rw-r--r-- | NorthstarDLL/shared/exploit_fixes/exploitfixes_lzss.cpp (renamed from NorthstarDLL/exploitfixes_lzss.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/shared/exploit_fixes/exploitfixes_utf8parser.cpp (renamed from NorthstarDLL/exploitfixes_utf8parser.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/shared/exploit_fixes/ns_limits.cpp (renamed from NorthstarDLL/limits.cpp) | 18 | ||||
-rw-r--r-- | NorthstarDLL/shared/exploit_fixes/ns_limits.h (renamed from NorthstarDLL/limits.h) | 4 | ||||
-rw-r--r-- | NorthstarDLL/shared/keyvalues.cpp (renamed from NorthstarDLL/keyvalues.cpp) | 2632 | ||||
-rw-r--r-- | NorthstarDLL/shared/keyvalues.h (renamed from NorthstarDLL/keyvalues.h) | 268 | ||||
-rw-r--r-- | NorthstarDLL/shared/maxplayers.cpp (renamed from NorthstarDLL/maxplayers.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/shared/maxplayers.h (renamed from NorthstarDLL/maxplayers.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/shared/misccommands.cpp (renamed from NorthstarDLL/misccommands.cpp) | 21 | ||||
-rw-r--r-- | NorthstarDLL/shared/misccommands.h (renamed from NorthstarDLL/misccommands.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/shared/playlist.cpp (renamed from NorthstarDLL/playlist.cpp) | 10 | ||||
-rw-r--r-- | NorthstarDLL/shared/playlist.h (renamed from NorthstarDLL/playlist.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/shared/sourceinterface.cpp (renamed from NorthstarDLL/sourceinterface.cpp) | 2 | ||||
-rw-r--r-- | NorthstarDLL/shared/sourceinterface.h (renamed from NorthstarDLL/sourceinterface.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/squirrel/squirrel.cpp (renamed from NorthstarDLL/squirrel.cpp) | 18 | ||||
-rw-r--r-- | NorthstarDLL/squirrel/squirrel.h (renamed from NorthstarDLL/squirrel.h) | 6 | ||||
-rw-r--r-- | NorthstarDLL/squirrel/squirrelautobind.cpp (renamed from NorthstarDLL/squirrelautobind.cpp) | 0 | ||||
-rw-r--r-- | NorthstarDLL/squirrel/squirrelautobind.h (renamed from NorthstarDLL/squirrelautobind.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/squirrel/squirrelclasstypes.h (renamed from NorthstarDLL/squirrelclasstypes.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/squirrel/squirreldatatypes.h (renamed from NorthstarDLL/squirreldatatypes.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/util/printcommands.cpp (renamed from NorthstarDLL/printcommands.cpp) | 6 | ||||
-rw-r--r-- | NorthstarDLL/util/printcommands.h (renamed from NorthstarDLL/printcommand.h) | 2 | ||||
-rw-r--r-- | NorthstarDLL/util/printmaps.cpp (renamed from NorthstarDLL/printmaps.cpp) | 10 | ||||
-rw-r--r-- | NorthstarDLL/util/printmaps.h (renamed from NorthstarDLL/printmaps.h) | 0 | ||||
-rw-r--r-- | NorthstarDLL/util/version.cpp (renamed from NorthstarDLL/version.cpp) | 4 | ||||
-rw-r--r-- | NorthstarDLL/util/version.h (renamed from NorthstarDLL/version.h) | 0 |
128 files changed, 2483 insertions, 2492 deletions
diff --git a/NorthstarDLL/NorthstarDLL.vcxproj b/NorthstarDLL/NorthstarDLL.vcxproj index e0dae8a2..7a57fce9 100644 --- a/NorthstarDLL/NorthstarDLL.vcxproj +++ b/NorthstarDLL/NorthstarDLL.vcxproj @@ -62,7 +62,7 @@ <PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<LanguageStandard>stdcpp20</LanguageStandard>
- <AdditionalIncludeDirectories>$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -92,7 +92,7 @@ <PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<LanguageStandard>stdcpp20</LanguageStandard>
- <AdditionalIncludeDirectories>$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(ProjectDir);$(SolutionDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<Optimization>Disabled</Optimization>
</ClCompile>
@@ -390,146 +390,148 @@ <ClInclude Include="..\include\spdlog\stopwatch.h" />
<ClInclude Include="..\include\spdlog\tweakme.h" />
<ClInclude Include="..\include\spdlog\version.h" />
- <ClInclude Include="audio.h" />
- <ClInclude Include="bansystem.h" />
- <ClInclude Include="bitbuf.h" />
- <ClInclude Include="bits.h" />
- <ClInclude Include="crashhandler.h" />
- <ClInclude Include="httprequesthandler.h" />
- <ClInclude Include="keyvalues.h" />
- <ClInclude Include="loghooks.h" />
- <ClInclude Include="squirrelclasstypes.h" />
- <ClInclude Include="squirreldatatypes.h" />
- <ClInclude Include="limits.h" />
- <ClInclude Include="maxplayers.h" />
- <ClInclude Include="memory.h" />
- <ClInclude Include="printcommand.h" />
- <ClInclude Include="hoststate.h" />
- <ClInclude Include="localchatwriter.h" />
- <ClInclude Include="printmaps.h" />
+ <ClInclude Include="client\audio.h" />
+ <ClInclude Include="client\localchatwriter.h" />
+ <ClInclude Include="client\r2client.h" />
+ <ClInclude Include="config\profile.h" />
+ <ClInclude Include="core\convar\concommand.h" />
+ <ClInclude Include="core\convar\convar.h" />
+ <ClInclude Include="core\convar\cvar.h" />
+ <ClInclude Include="core\filesystem\filesystem.h" />
+ <ClInclude Include="core\filesystem\rpakfilesystem.h" />
+ <ClInclude Include="core\hooks.h" />
+ <ClInclude Include="core\math\bitbuf.h" />
+ <ClInclude Include="core\math\bits.h" />
+ <ClInclude Include="core\math\color.h" />
+ <ClInclude Include="core\math\vector.h" />
+ <ClInclude Include="core\memalloc.h" />
+ <ClInclude Include="core\memory.h" />
+ <ClInclude Include="core\structs.h" />
+ <ClInclude Include="core\tier0.h" />
+ <ClInclude Include="dedicated\dedicated.h" />
+ <ClInclude Include="dllmain.h" />
+ <ClInclude Include="engine\hoststate.h" />
+ <ClInclude Include="engine\r2engine.h" />
+ <ClInclude Include="exploit_fixes\ns_limits.h" />
+ <ClInclude Include="hooks\hooks.h" />
+ <ClInclude Include="hooks\maxplayers.h" />
+ <ClInclude Include="hooks\memalloc.h" />
+ <ClInclude Include="hooks\memory.h" />
+ <ClInclude Include="hooks\sourceinterface.h" />
+ <ClInclude Include="hooks\tier0.h" />
+ <ClInclude Include="logging\crashhandler.h" />
+ <ClInclude Include="logging\logging.h" />
+ <ClInclude Include="logging\loghooks.h" />
+ <ClInclude Include="logging\sourceconsole.h" />
+ <ClInclude Include="masterserver\masterserver.h" />
+ <ClInclude Include="mods\modmanager.h" />
<ClInclude Include="ns_version.h" />
- <ClInclude Include="plugins.h" />
- <ClInclude Include="plugin_abi.h" />
- <ClInclude Include="r2client.h" />
- <ClInclude Include="r2engine.h" />
- <ClInclude Include="r2server.h" />
- <ClInclude Include="serverchathooks.h" />
- <ClInclude Include="color.h" />
- <ClInclude Include="concommand.h" />
- <ClInclude Include="nsprefix.h" />
- <ClInclude Include="convar.h" />
- <ClInclude Include="cvar.h" />
- <ClInclude Include="dedicated.h" />
- <ClInclude Include="filesystem.h" />
- <ClInclude Include="hooks.h" />
- <ClInclude Include="logging.h" />
- <ClInclude Include="main.h" />
- <ClInclude Include="masterserver.h" />
- <ClInclude Include="memalloc.h" />
- <ClInclude Include="misccommands.h" />
- <ClInclude Include="modmanager.h" />
<ClInclude Include="pch.h" />
- <ClInclude Include="playlist.h" />
- <ClInclude Include="rpakfilesystem.h" />
- <ClInclude Include="serverauthentication.h" />
- <ClInclude Include="serverpresence.h" />
- <ClInclude Include="sourceconsole.h" />
- <ClInclude Include="sourceinterface.h" />
- <ClInclude Include="squirrel.h" />
- <ClInclude Include="exploitfixes_utf8parser.cpp" />
- <ClInclude Include="structs.h" />
- <ClInclude Include="squirrelautobind.h" />
- <ClInclude Include="tier0.h" />
- <ClInclude Include="vector.h" />
- <ClInclude Include="version.h" />
+ <ClInclude Include="plugins\plugins.h" />
+ <ClInclude Include="plugins\plugin_abi.h" />
+ <ClInclude Include="scripts\scripthttprequesthandler.h" />
+ <ClInclude Include="server\auth\bansystem.h" />
+ <ClInclude Include="server\auth\serverauthentication.h" />
+ <ClInclude Include="server\r2server.h" />
+ <ClInclude Include="server\serverchathooks.h" />
+ <ClInclude Include="server\serverpresence.h" />
+ <ClInclude Include="shared\keyvalues.h" />
+ <ClInclude Include="shared\playlist.h" />
+ <ClInclude Include="squirrel\squirrel.h" />
+ <ClInclude Include="squirrel\squirrelautobind.h" />
+ <ClInclude Include="squirrel\squirrelclasstypes.h" />
+ <ClInclude Include="squirrel\squirreldatatypes.h" />
+ <ClInclude Include="util\version.h" />
</ItemGroup>
<ItemGroup>
- <ClCompile Include="audio.cpp" />
- <ClCompile Include="bansystem.cpp" />
- <ClCompile Include="bits.cpp" />
- <ClCompile Include="buildainfile.cpp" />
- <ClCompile Include="chatcommand.cpp" />
- <ClCompile Include="clientauthhooks.cpp" />
- <ClCompile Include="clientchathooks.cpp" />
- <ClCompile Include="clientruihooks.cpp" />
- <ClCompile Include="clientvideooverrides.cpp" />
- <ClCompile Include="concommand.cpp" />
- <ClCompile Include="diskvmtfixes.cpp" />
- <ClCompile Include="exploitfixes_lzss.cpp" />
- <ClCompile Include="httprequesthandler.cpp" />
- <ClCompile Include="kb_act.cpp" />
- <ClCompile Include="keyvalues.cpp" />
- <ClCompile Include="limits.cpp" />
- <ClCompile Include="color.cpp" />
- <ClCompile Include="loghooks.cpp" />
- <ClCompile Include="memory.cpp" />
- <ClCompile Include="nsprefix.cpp" />
- <ClCompile Include="convar.cpp" />
- <ClCompile Include="crashhandler.cpp" />
- <ClCompile Include="cvar.cpp" />
- <ClCompile Include="debugoverlay.cpp" />
- <ClCompile Include="dedicated.cpp" />
- <ClCompile Include="dedicatedmaterialsystem.cpp" />
- <ClCompile Include="demofixes.cpp" />
- <ClCompile Include="dllmain.cpp" />
- <ClCompile Include="filesystem.cpp" />
- <ClCompile Include="hooks.cpp" />
- <ClCompile Include="host.cpp" />
- <ClCompile Include="hoststate.cpp" />
- <ClCompile Include="modkeyvalues.cpp" />
- <ClCompile Include="latencyflex.cpp" />
- <ClCompile Include="localchatwriter.cpp" />
- <ClCompile Include="printmaps.cpp" />
- <ClCompile Include="maxplayers.cpp" />
- <ClCompile Include="languagehooks.cpp" />
- <ClCompile Include="memalloc.cpp" />
- <ClCompile Include="misccommands.cpp" />
- <ClCompile Include="miscserverfixes.cpp" />
- <ClCompile Include="modlocalisation.cpp" />
- <ClCompile Include="logging.cpp" />
- <ClCompile Include="masterserver.cpp" />
- <ClCompile Include="modmanager.cpp" />
+ <None Include="..\include\spdlog\fmt\bundled\LICENSE.rst" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="client\audio.cpp" />
+ <ClCompile Include="client\chatcommand.cpp" />
+ <ClCompile Include="client\clientauthhooks.cpp" />
+ <ClCompile Include="client\clientruihooks.cpp" />
+ <ClCompile Include="client\clientvideooverrides.cpp" />
+ <ClCompile Include="client\debugoverlay.cpp" />
+ <ClCompile Include="client\demofixes.cpp" />
+ <ClCompile Include="client\diskvmtfixes.cpp" />
+ <ClCompile Include="client\languagehooks.cpp" />
+ <ClCompile Include="client\latencyflex.cpp" />
+ <ClCompile Include="client\localchatwriter.cpp" />
+ <ClCompile Include="client\modlocalisation.cpp" />
+ <ClCompile Include="client\r2client.cpp" />
+ <ClCompile Include="config\profile.cpp" />
+ <ClCompile Include="core\convar\concommand.cpp" />
+ <ClCompile Include="core\convar\convar.cpp" />
+ <ClCompile Include="core\convar\cvar.cpp" />
+ <ClCompile Include="core\filesystem\filesystem.cpp" />
+ <ClCompile Include="core\filesystem\rpakfilesystem.cpp" />
+ <ClCompile Include="core\hooks.cpp" />
+ <ClCompile Include="core\math\bits.cpp" />
+ <ClCompile Include="core\math\color.cpp" />
+ <ClCompile Include="core\memalloc.cpp" />
+ <ClCompile Include="core\memory.cpp" />
+ <ClCompile Include="core\tier0.cpp" />
+ <ClCompile Include="dedicated\dedicated.cpp" />
+ <ClCompile Include="dedicated\dedicatedmaterialsystem.cpp" />
+ <ClCompile Include="dllmain.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Use</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="engine\host.cpp" />
+ <ClCompile Include="engine\hoststate.cpp" />
+ <ClCompile Include="engine\r2engine.cpp" />
+ <ClCompile Include="engine\runframe.cpp" />
+ <ClCompile Include="logging\crashhandler.cpp" />
+ <ClCompile Include="logging\logging.cpp" />
+ <ClCompile Include="logging\loghooks.cpp" />
+ <ClCompile Include="logging\sourceconsole.cpp" />
+ <ClCompile Include="masterserver\masterserver.cpp" />
+ <ClCompile Include="mods\compiled\kb_act.cpp" />
+ <ClCompile Include="mods\compiled\modkeyvalues.cpp" />
+ <ClCompile Include="mods\compiled\modpdef.cpp" />
+ <ClCompile Include="mods\compiled\modscriptsrson.cpp" />
+ <ClCompile Include="mods\modmanager.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
- <ClCompile Include="modpdef.cpp" />
- <ClCompile Include="playlist.cpp" />
- <ClCompile Include="plugins.cpp" />
- <ClCompile Include="printcommands.cpp" />
- <ClCompile Include="r2client.cpp" />
- <ClCompile Include="r2engine.cpp" />
- <ClCompile Include="r2server.cpp" />
- <ClCompile Include="rpakfilesystem.cpp" />
- <ClCompile Include="runframe.cpp" />
- <ClCompile Include="scriptbrowserhooks.cpp" />
- <ClCompile Include="scriptjson.cpp" />
- <ClCompile Include="scriptdatatables.cpp" />
- <ClCompile Include="scriptmainmenupromos.cpp" />
- <ClCompile Include="scriptmodmenu.cpp" />
- <ClCompile Include="scriptserverbrowser.cpp" />
- <ClCompile Include="modscriptsrson.cpp" />
- <ClCompile Include="scriptuserinfo.cpp" />
- <ClCompile Include="scriptutility.cpp" />
- <ClCompile Include="serverauthentication.cpp" />
- <ClCompile Include="miscserverscript.cpp" />
- <ClCompile Include="serverchathooks.cpp" />
- <ClCompile Include="scriptservertoclientstringcommand.cpp" />
- <ClCompile Include="serverpresence.cpp" />
- <ClCompile Include="sourceconsole.cpp" />
- <ClCompile Include="sourceinterface.cpp" />
- <ClCompile Include="squirrel.cpp" />
- <ClCompile Include="exploitfixes.cpp" />
- <ClCompile Include="squirrelautobind.cpp" />
- <ClCompile Include="tier0.cpp" />
- <ClCompile Include="version.cpp" />
+ <ClCompile Include="plugins\plugins.cpp" />
+ <ClCompile Include="scripts\client\clientchathooks.cpp" />
+ <ClCompile Include="scripts\client\scriptbrowserhooks.cpp" />
+ <ClCompile Include="scripts\client\scriptmainmenupromos.cpp" />
+ <ClCompile Include="scripts\client\scriptmodmenu.cpp" />
+ <ClCompile Include="scripts\client\scriptserverbrowser.cpp" />
+ <ClCompile Include="scripts\client\scriptservertoclientstringcommand.cpp" />
+ <ClCompile Include="scripts\scriptdatatables.cpp" />
+ <ClCompile Include="scripts\scripthttprequesthandler.cpp" />
+ <ClCompile Include="scripts\scriptjson.cpp" />
+ <ClCompile Include="scripts\scriptutility.cpp" />
+ <ClCompile Include="scripts\server\miscserverfixes.cpp" />
+ <ClCompile Include="scripts\server\miscserverscript.cpp" />
+ <ClCompile Include="scripts\server\scriptuserinfo.cpp" />
+ <ClCompile Include="server\auth\bansystem.cpp" />
+ <ClCompile Include="server\auth\serverauthentication.cpp" />
+ <ClCompile Include="server\buildainfile.cpp" />
+ <ClCompile Include="server\r2server.cpp" />
+ <ClCompile Include="server\serverchathooks.cpp" />
+ <ClCompile Include="server\serverpresence.cpp" />
+ <ClCompile Include="shared\exploit_fixes\exploitfixes.cpp" />
+ <ClCompile Include="shared\exploit_fixes\exploitfixes_lzss.cpp" />
+ <ClCompile Include="shared\exploit_fixes\exploitfixes_utf8parser.cpp" />
+ <ClCompile Include="shared\exploit_fixes\ns_limits.cpp" />
+ <ClCompile Include="shared\keyvalues.cpp" />
+ <ClCompile Include="shared\maxplayers.cpp" />
+ <ClCompile Include="shared\misccommands.cpp" />
+ <ClCompile Include="shared\playlist.cpp" />
+ <ClCompile Include="squirrel\squirrel.cpp" />
+ <ClCompile Include="squirrel\squirrelautobind.cpp" />
+ <ClCompile Include="util\printcommands.cpp" />
+ <ClCompile Include="util\printmaps.cpp" />
+ <ClCompile Include="util\version.cpp" />
</ItemGroup>
<ItemGroup>
<MASM Include="audio_asm.asm" />
</ItemGroup>
- <ItemGroup>
- <None Include="..\include\spdlog\fmt\bundled\LICENSE.rst" />
- </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
diff --git a/NorthstarDLL/NorthstarDLL.vcxproj.filters b/NorthstarDLL/NorthstarDLL.vcxproj.filters index a100b2b0..5eb2d429 100644 --- a/NorthstarDLL/NorthstarDLL.vcxproj.filters +++ b/NorthstarDLL/NorthstarDLL.vcxproj.filters @@ -16,12 +16,6 @@ <Filter Include="Header Files\include">
<UniqueIdentifier>{d4199e4b-10d2-43ce-af9c-e1fa79e1e64e}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Client">
- <UniqueIdentifier>{b6f79919-9735-476d-8798-067a75cbeca0}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Client">
- <UniqueIdentifier>{ca657be5-c2d8-4322-a689-1154aaafe57b}</UniqueIdentifier>
- </Filter>
<Filter Include="Header Files\include\spdlog">
<UniqueIdentifier>{8596cc1c-0492-4467-91e3-1f03b7e19f77}</UniqueIdentifier>
</Filter>
@@ -52,257 +46,143 @@ <Filter Include="Header Files\include\rapidjson\msinttypes">
<UniqueIdentifier>{85aacdee-0f92-4ec4-b20c-0739c1175055}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Server">
- <UniqueIdentifier>{3d41d3fc-8a3b-4358-b3e8-4f06dc96abfe}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Server\Authentication">
- <UniqueIdentifier>{d69760a9-d5ec-4f3e-8f43-f74041654d44}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Server">
- <UniqueIdentifier>{365e5c1f-4b2f-4d8b-a1d8-cdef401ca689}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Server\Authentication">
- <UniqueIdentifier>{24fd0855-9288-4129-93ba-c6cafdc98d1b}</UniqueIdentifier>
- </Filter>
<Filter Include="Header Files\include\openssl">
<UniqueIdentifier>{4cb0dd89-5f16-4549-a864-34ca3075352a}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\include\libcurl">
<UniqueIdentifier>{ea1e17a6-40b7-4e1b-8edb-e9ae704ce604}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Client\Scripted">
- <UniqueIdentifier>{51910ba0-2ff8-461d-9f67-8d7907b57d22}</UniqueIdentifier>
+ <Filter Include="Source Files\client">
+ <UniqueIdentifier>{757f33f0-f17b-4ecd-8b95-2157b2d2f03c}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\config">
+ <UniqueIdentifier>{7f9657c5-d4c7-464f-b2f6-d9afbbe0bb42}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\dedicated">
+ <UniqueIdentifier>{e45d18f7-8992-47ac-837c-4cb99f5a0487}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\masterserver">
+ <UniqueIdentifier>{62167757-13c1-4f57-a8f5-15a3c800997b}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\mods">
+ <UniqueIdentifier>{25e33568-4125-406d-8661-01ae2abf61a5}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\mods\compiled">
+ <UniqueIdentifier>{008e67ce-bf6a-4792-9ded-69a434edea00}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\plugins">
+ <UniqueIdentifier>{dbf03bda-dd0a-44ce-a6b1-361f7f21a10e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\server">
+ <UniqueIdentifier>{d83e1c5c-c9c7-47a2-b406-9b5a93e3cc29}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\scripts">
+ <UniqueIdentifier>{57fb0fa6-7665-4d37-bb2b-6f5570023d83}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\server\auth">
+ <UniqueIdentifier>{08436037-e86f-4410-8db6-37c8b10ca5a1}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\squirrel">
+ <UniqueIdentifier>{e8fb33f4-47b5-4fd9-b6c0-2ca1bd8cac81}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\util">
+ <UniqueIdentifier>{d60e54d0-b4e4-4210-af6b-59bdd84bed0f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\client">
+ <UniqueIdentifier>{06c7928e-bf66-446e-9cde-c8135c79d14b}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\config">
+ <UniqueIdentifier>{0b8b4a41-6131-4388-85d2-f5754a304610}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\dedicated">
+ <UniqueIdentifier>{9ccd8616-d961-4c37-96e0-3219bd293afb}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\exploit_fixes">
+ <UniqueIdentifier>{a9390f6a-5031-4c65-a636-82cf90899435}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\hooks">
+ <UniqueIdentifier>{acf049ba-358a-4520-8813-2f802ce7167e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\masterserver">
+ <UniqueIdentifier>{0075910c-80c9-490f-a0d4-f9e410e4a918}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Server\Scripted">
- <UniqueIdentifier>{325e0d7d-6832-496d-8d8e-968fdfa5dd40}</UniqueIdentifier>
+ <Filter Include="Header Files\mods">
+ <UniqueIdentifier>{31143dec-abe6-477a-9cae-045c5b57380b}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Server\Scripted">
- <UniqueIdentifier>{802d0771-62f1-4733-89f9-57a4d8864b8d}</UniqueIdentifier>
+ <Filter Include="Header Files\plugins">
+ <UniqueIdentifier>{c6c4746d-d6e1-4dba-a3fc-e645b28ac83f}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Console">
- <UniqueIdentifier>{04fd662a-6e70-494c-b720-c694a5cc2fb1}</UniqueIdentifier>
+ <Filter Include="Header Files\scripts">
+ <UniqueIdentifier>{3fba68ef-d715-4e18-b4a2-05d3fee00e2d}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Convar">
- <UniqueIdentifier>{a18afb37-5fdd-4340-a6b4-a6541593e398}</UniqueIdentifier>
+ <Filter Include="Header Files\server">
+ <UniqueIdentifier>{ae9c5353-a3ab-44a9-a328-91df6aa8c80e}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Exploit Fixes">
- <UniqueIdentifier>{4a8a695a-a103-4b1f-b314-0ec19a253119}</UniqueIdentifier>
+ <Filter Include="Header Files\server\auth">
+ <UniqueIdentifier>{87869634-fa0f-48f8-a306-94d5a8157e1e}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Filesystem">
- <UniqueIdentifier>{d8a83b5e-9a23-4124-824f-eab37880cb08}</UniqueIdentifier>
+ <Filter Include="Header Files\squirrel">
+ <UniqueIdentifier>{0ad64562-eb98-4015-a4fc-6fdc63ac9322}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Game Functions">
- <UniqueIdentifier>{2cbddb28-0b17-4881-847d-8773da52b268}</UniqueIdentifier>
+ <Filter Include="Header Files\util">
+ <UniqueIdentifier>{13d0affc-1b4d-4090-8ad6-e9ae8fc56599}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Hooks">
- <UniqueIdentifier>{4db0d1e9-9035-457f-87f1-5dc3f13b6b9e}</UniqueIdentifier>
+ <Filter Include="Source Files\engine">
+ <UniqueIdentifier>{b264a27d-619b-49b3-acbb-4e138ba29daf}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Math">
- <UniqueIdentifier>{59b0f68f-daa7-4641-b6fa-8464b56da2bb}</UniqueIdentifier>
+ <Filter Include="Header Files\engine">
+ <UniqueIdentifier>{35658430-465d-433c-aa2d-b8266edb205a}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Mods">
- <UniqueIdentifier>{3e892d07-2239-44da-9cf3-c288a34cf9a2}</UniqueIdentifier>
+ <Filter Include="Source Files\shared">
+ <UniqueIdentifier>{0517ea0b-2eca-4b1c-a0d1-766d4d1d19d2}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Mods\Compiled Assets">
- <UniqueIdentifier>{14fc0931-acad-46ec-a55e-94f4469d4235}</UniqueIdentifier>
+ <Filter Include="Header Files\shared">
+ <UniqueIdentifier>{6d3f7657-6e58-4007-acd3-0b787f35406a}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Dedicated Server">
- <UniqueIdentifier>{947835db-67d6-42c0-870d-62743f85231f}</UniqueIdentifier>
+ <Filter Include="Source Files\logging">
+ <UniqueIdentifier>{b9c0cfad-46d4-41ea-806e-daef3d66c381}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Console">
- <UniqueIdentifier>{bf0769d8-40fd-4701-85e9-7ed94aab2283}</UniqueIdentifier>
+ <Filter Include="Header Files\logging">
+ <UniqueIdentifier>{a4f7d529-0b21-48af-82ef-9fb971b802f7}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Convar">
- <UniqueIdentifier>{9751b551-5886-45d4-a039-cbd10445263d}</UniqueIdentifier>
+ <Filter Include="Header Files\core">
+ <UniqueIdentifier>{7ee4b436-a5d3-4680-bf99-bc6d7640ded3}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Exploit Fixes">
- <UniqueIdentifier>{96101d42-72af-4fd1-8559-8d1d1ff66240}</UniqueIdentifier>
+ <Filter Include="Header Files\core\convar">
+ <UniqueIdentifier>{53a84980-9a1c-46b0-9b6d-06ec35781297}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Filesystem">
- <UniqueIdentifier>{ee3ba13a-3061-41d7-981d-328ac2596fd2}</UniqueIdentifier>
+ <Filter Include="Header Files\core\filesystem">
+ <UniqueIdentifier>{01e215c3-9fa2-4de1-a3e0-b6a27396c68c}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Game Functions">
- <UniqueIdentifier>{0c93d909-e0d6-4c35-a8a4-a13f681a1012}</UniqueIdentifier>
+ <Filter Include="Header Files\core\math">
+ <UniqueIdentifier>{0fa069c9-302b-4be5-ba47-37e13e181d78}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Hooks">
- <UniqueIdentifier>{94259c8c-5411-48bf-af4f-46ca32b7d0bb}</UniqueIdentifier>
+ <Filter Include="Source Files\scripts\client">
+ <UniqueIdentifier>{08a9ca37-8a6e-458c-9da8-6f3dc917ddf7}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Math">
- <UniqueIdentifier>{44a83740-9d70-480d-9a7a-43b81f8eab9e}</UniqueIdentifier>
+ <Filter Include="Source Files\scripts\server">
+ <UniqueIdentifier>{2c0b196e-3a11-4655-a158-8a1c84be4471}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Mods">
- <UniqueIdentifier>{6bbce8a5-38b4-4763-a7cb-4e98012ec245}</UniqueIdentifier>
+ <Filter Include="Source Files\core">
+ <UniqueIdentifier>{122e2230-0605-40ef-8963-6e339d2c725e}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Mods\Compiled Assets">
- <UniqueIdentifier>{826d5193-3ad0-434b-ba7c-dd24ed4bbd0c}</UniqueIdentifier>
+ <Filter Include="Source Files\core\convar">
+ <UniqueIdentifier>{4e0d0f0e-c8f2-4fe1-a787-57060c610553}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Dedicated Server">
- <UniqueIdentifier>{0f1ba4c4-78ee-4b05-afa5-6f598063f5c1}</UniqueIdentifier>
+ <Filter Include="Source Files\core\math">
+ <UniqueIdentifier>{9e67fc99-0e20-4155-a167-5d251ea36581}</UniqueIdentifier>
</Filter>
- <Filter Include="Header Files\Squirrel">
- <UniqueIdentifier>{ca669b16-b8bb-4654-993f-fffa44c914f1}</UniqueIdentifier>
+ <Filter Include="Source Files\core\filesystem">
+ <UniqueIdentifier>{62b3cff9-b2d8-4c1c-a2a6-1e2138c0ff88}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Squirrel">
- <UniqueIdentifier>{26365f16-ff52-4e80-a01b-2ca020376c93}</UniqueIdentifier>
+ <Filter Include="Source Files\shared\exploit_fixes">
+ <UniqueIdentifier>{9a819cdd-ebca-4cba-b231-76b6f98ed6ac}</UniqueIdentifier>
</Filter>
- <Filter Include="Source Files\Scripted">
- <UniqueIdentifier>{7263403a-7550-4aa2-a724-f622ab200eed}</UniqueIdentifier>
+ <Filter Include="Header Files\shared\exploit_fixes">
+ <UniqueIdentifier>{1a377c09-bd3d-4757-b3bc-9cd0a1e6ac0d}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="pch.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="main.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="sourceconsole.h">
- <Filter>Header Files\Client</Filter>
- </ClInclude>
- <ClInclude Include="serverauthentication.h">
- <Filter>Header Files\Server\Authentication</Filter>
- </ClInclude>
- <ClInclude Include="bansystem.h">
- <Filter>Header Files\Server\Authentication</Filter>
- </ClInclude>
- <ClInclude Include="audio.h">
- <Filter>Header Files\Client</Filter>
- </ClInclude>
- <ClInclude Include="localchatwriter.h">
- <Filter>Header Files\Client</Filter>
- </ClInclude>
- <ClInclude Include="plugins.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="plugin_abi.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="version.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="ns_version.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="serverchathooks.h">
- <Filter>Header Files\Server\Scripted</Filter>
- </ClInclude>
- <ClInclude Include="dedicated.h">
- <Filter>Header Files\Dedicated Server</Filter>
- </ClInclude>
- <ClInclude Include="nsprefix.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="exploitfixes_utf8parser.cpp">
- <Filter>Source Files\Exploit Fixes</Filter>
- </ClInclude>
- <ClInclude Include="crashhandler.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="hoststate.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="masterserver.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="memalloc.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="playlist.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="sourceinterface.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="bits.h">
- <Filter>Header Files\Math</Filter>
- </ClInclude>
- <ClInclude Include="bitbuf.h">
- <Filter>Header Files\Math</Filter>
- </ClInclude>
- <ClInclude Include="convar.h">
- <Filter>Header Files\Convar</Filter>
- </ClInclude>
- <ClInclude Include="concommand.h">
- <Filter>Header Files\Convar</Filter>
- </ClInclude>
- <ClInclude Include="cvar.h">
- <Filter>Header Files\Convar</Filter>
- </ClInclude>
- <ClInclude Include="filesystem.h">
- <Filter>Header Files\Filesystem</Filter>
- </ClInclude>
- <ClInclude Include="hooks.h">
- <Filter>Header Files\Hooks</Filter>
- </ClInclude>
- <ClInclude Include="limits.h">
- <Filter>Header Files\Exploit Fixes</Filter>
- </ClInclude>
- <ClInclude Include="logging.h">
- <Filter>Header Files\Console</Filter>
- </ClInclude>
- <ClInclude Include="misccommands.h">
- <Filter>Header Files\Convar</Filter>
- </ClInclude>
- <ClInclude Include="modmanager.h">
- <Filter>Header Files\Mods</Filter>
- </ClInclude>
- <ClInclude Include="printcommand.h">
- <Filter>Header Files\Console</Filter>
- </ClInclude>
- <ClInclude Include="printmaps.h">
- <Filter>Header Files\Console</Filter>
- </ClInclude>
- <ClInclude Include="r2client.h">
- <Filter>Header Files\Game Functions</Filter>
- </ClInclude>
- <ClInclude Include="r2engine.h">
- <Filter>Header Files\Game Functions</Filter>
- </ClInclude>
- <ClInclude Include="r2server.h">
- <Filter>Header Files\Game Functions</Filter>
- </ClInclude>
- <ClInclude Include="tier0.h">
- <Filter>Header Files\Game Functions</Filter>
- </ClInclude>
- <ClInclude Include="rpakfilesystem.h">
- <Filter>Header Files\Filesystem</Filter>
- </ClInclude>
- <ClInclude Include="color.h">
- <Filter>Header Files\Math</Filter>
- </ClInclude>
- <ClInclude Include="serverpresence.h">
- <Filter>Header Files\Server</Filter>
- </ClInclude>
- <ClInclude Include="memory.h">
- <Filter>Header Files\Hooks</Filter>
- </ClInclude>
- <ClInclude Include="maxplayers.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="squirrel.h">
- <Filter>Header Files\Squirrel</Filter>
- </ClInclude>
- <ClInclude Include="squirreldatatypes.h">
- <Filter>Header Files\Squirrel</Filter>
- </ClInclude>
- <ClInclude Include="vector.h">
- <Filter>Header Files\Math</Filter>
- </ClInclude>
- <ClInclude Include="squirrelautobind.h">
- <Filter>Header Files\Squirrel</Filter>
- </ClInclude>
- <ClInclude Include="keyvalues.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="structs.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="loghooks.h">
- <Filter>Header Files\Console</Filter>
- </ClInclude>
- <ClInclude Include="squirrelclasstypes.h">
- <Filter>Header Files\Squirrel</Filter>
- </ClInclude>
<ClInclude Include="..\include\httplib.h">
<Filter>Header Files\include</Filter>
</ClInclude>
@@ -1116,274 +996,410 @@ <ClInclude Include="..\include\spdlog\sinks\tcp_sink.h">
<Filter>Header Files\include\spdlog\sinks</Filter>
</ClInclude>
-
- <ClInclude Include="squirrelautobind.h">
- <Filter>Header Files\Squirrel</Filter>
- </ClInclude>
- <ClInclude Include="keyvalues.h">
- <Filter>Header Files</Filter>
- </ClInclude>
-
<ClInclude Include="..\include\spdlog\sinks\win_eventlog_sink.h">
<Filter>Header Files\include\spdlog\sinks</Filter>
-
</ClInclude>
<ClInclude Include="..\include\spdlog\sinks\wincolor_sink.h">
<Filter>Header Files\include\spdlog\sinks</Filter>
</ClInclude>
-
- <ClInclude Include="loghooks.h">
- <Filter>Header Files\Console</Filter>
- </ClInclude>
- <ClInclude Include="squirrelclasstypes.h">
- <Filter>Header Files\Squirrel</Filter>
- </ClInclude>
<ClInclude Include="..\include\spdlog\sinks\wincolor_sink-inl.h">
<Filter>Header Files\include\spdlog\sinks</Filter>
-
</ClInclude>
- <ClInclude Include="httprequesthandler.h">
+ <ClInclude Include="client\audio.h">
+ <Filter>Header Files\client</Filter>
+ </ClInclude>
+ <ClInclude Include="client\localchatwriter.h">
+ <Filter>Header Files\client</Filter>
+ </ClInclude>
+ <ClInclude Include="dedicated\dedicated.h">
+ <Filter>Header Files\dedicated</Filter>
+ </ClInclude>
+ <ClInclude Include="exploit_fixes\ns_limits.h">
+ <Filter>Header Files\exploit_fixes</Filter>
+ </ClInclude>
+ <ClInclude Include="hooks\hooks.h">
+ <Filter>Header Files\hooks</Filter>
+ </ClInclude>
+ <ClInclude Include="hooks\memory.h">
+ <Filter>Header Files\hooks</Filter>
+ </ClInclude>
+ <ClInclude Include="hooks\sourceinterface.h">
+ <Filter>Header Files\hooks</Filter>
+ </ClInclude>
+ <ClInclude Include="masterserver\masterserver.h">
+ <Filter>Header Files\masterserver</Filter>
+ </ClInclude>
+ <ClInclude Include="mods\modmanager.h">
+ <Filter>Header Files\mods</Filter>
+ </ClInclude>
+ <ClInclude Include="plugins\plugin_abi.h">
+ <Filter>Header Files\plugins</Filter>
+ </ClInclude>
+ <ClInclude Include="plugins\plugins.h">
+ <Filter>Header Files\plugins</Filter>
+ </ClInclude>
+ <ClInclude Include="server\serverpresence.h">
+ <Filter>Header Files\server</Filter>
+ </ClInclude>
+ <ClInclude Include="server\auth\bansystem.h">
+ <Filter>Header Files\server\auth</Filter>
+ </ClInclude>
+ <ClInclude Include="server\auth\serverauthentication.h">
+ <Filter>Header Files\server\auth</Filter>
+ </ClInclude>
+ <ClInclude Include="squirrel\squirrel.h">
+ <Filter>Header Files\squirrel</Filter>
+ </ClInclude>
+ <ClInclude Include="squirrel\squirrelautobind.h">
+ <Filter>Header Files\squirrel</Filter>
+ </ClInclude>
+ <ClInclude Include="squirrel\squirrelclasstypes.h">
+ <Filter>Header Files\squirrel</Filter>
+ </ClInclude>
+ <ClInclude Include="squirrel\squirreldatatypes.h">
+ <Filter>Header Files\squirrel</Filter>
+ </ClInclude>
+ <ClInclude Include="util\version.h">
+ <Filter>Header Files\util</Filter>
+ </ClInclude>
+ <ClInclude Include="dllmain.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="ns_version.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="pch.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="config\profile.h">
+ <Filter>Header Files\config</Filter>
+ </ClInclude>
+ <ClInclude Include="engine\hoststate.h">
+ <Filter>Header Files\engine</Filter>
+ </ClInclude>
+ <ClInclude Include="hooks\maxplayers.h">
+ <Filter>Header Files\hooks</Filter>
+ </ClInclude>
+ <ClInclude Include="shared\keyvalues.h">
+ <Filter>Header Files\shared</Filter>
+ </ClInclude>
+ <ClInclude Include="shared\playlist.h">
+ <Filter>Header Files\shared</Filter>
+ </ClInclude>
+ <ClInclude Include="client\r2client.h">
+ <Filter>Header Files\client</Filter>
+ </ClInclude>
+ <ClInclude Include="engine\r2engine.h">
+ <Filter>Header Files\engine</Filter>
+ </ClInclude>
+ <ClInclude Include="server\r2server.h">
+ <Filter>Header Files\server</Filter>
+ </ClInclude>
+ <ClInclude Include="hooks\tier0.h">
+ <Filter>Header Files\hooks</Filter>
+ </ClInclude>
+ <ClInclude Include="hooks\memalloc.h">
+ <Filter>Header Files\hooks</Filter>
+ </ClInclude>
+ <ClInclude Include="core\convar\concommand.h">
+ <Filter>Header Files\core\convar</Filter>
+ </ClInclude>
+ <ClInclude Include="core\convar\convar.h">
+ <Filter>Header Files\core\convar</Filter>
+ </ClInclude>
+ <ClInclude Include="core\convar\cvar.h">
+ <Filter>Header Files\core\convar</Filter>
+ </ClInclude>
+ <ClInclude Include="core\filesystem\filesystem.h">
+ <Filter>Header Files\core\filesystem</Filter>
+ </ClInclude>
+ <ClInclude Include="core\filesystem\rpakfilesystem.h">
+ <Filter>Header Files\core\filesystem</Filter>
+ </ClInclude>
+ <ClInclude Include="core\math\bitbuf.h">
+ <Filter>Header Files\core\math</Filter>
+ </ClInclude>
+ <ClInclude Include="core\math\bits.h">
+ <Filter>Header Files\core\math</Filter>
+ </ClInclude>
+ <ClInclude Include="core\math\color.h">
+ <Filter>Header Files\core\math</Filter>
+ </ClInclude>
+ <ClInclude Include="core\math\vector.h">
+ <Filter>Header Files\core\math</Filter>
+ </ClInclude>
+ <ClInclude Include="core\hooks.h">
+ <Filter>Header Files\core</Filter>
+ </ClInclude>
+ <ClInclude Include="core\memalloc.h">
+ <Filter>Header Files\core</Filter>
+ </ClInclude>
+ <ClInclude Include="core\memory.h">
+ <Filter>Header Files\core</Filter>
+ </ClInclude>
+ <ClInclude Include="core\structs.h">
+ <Filter>Header Files\core</Filter>
+ </ClInclude>
+ <ClInclude Include="core\tier0.h">
+ <Filter>Header Files\core</Filter>
+ </ClInclude>
+ <ClInclude Include="logging\crashhandler.h">
+ <Filter>Header Files\logging</Filter>
+ </ClInclude>
+ <ClInclude Include="logging\logging.h">
+ <Filter>Header Files\logging</Filter>
+ </ClInclude>
+ <ClInclude Include="logging\loghooks.h">
+ <Filter>Header Files\logging</Filter>
+ </ClInclude>
+ <ClInclude Include="logging\sourceconsole.h">
+ <Filter>Header Files\logging</Filter>
+ </ClInclude>
+ <ClInclude Include="server\serverchathooks.h">
+ <Filter>Header Files\server</Filter>
+ </ClInclude>
+ <ClInclude Include="scripts\scripthttprequesthandler.h">
+ <Filter>Header Files\scripts</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
- <ClCompile Include="pch.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="dedicated.cpp">
- <Filter>Source Files\Dedicated Server</Filter>
- </ClCompile>
- <ClCompile Include="sourceconsole.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="modmanager.cpp">
- <Filter>Source Files\Mods</Filter>
+ <None Include="..\include\spdlog\fmt\bundled\LICENSE.rst">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="client\audio.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="modscriptsrson.cpp">
- <Filter>Source Files\Mods\Compiled Assets</Filter>
+ <ClCompile Include="client\chatcommand.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="serverauthentication.cpp">
- <Filter>Source Files\Server\Authentication</Filter>
+ <ClCompile Include="client\clientauthhooks.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="modkeyvalues.cpp">
- <Filter>Source Files\Mods\Compiled Assets</Filter>
+ <ClCompile Include="client\clientruihooks.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="chatcommand.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="client\clientvideooverrides.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="modlocalisation.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="client\debugoverlay.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="dedicatedmaterialsystem.cpp">
- <Filter>Source Files\Dedicated Server</Filter>
+ <ClCompile Include="client\demofixes.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="modpdef.cpp">
- <Filter>Source Files\Mods\Compiled Assets</Filter>
+ <ClCompile Include="client\diskvmtfixes.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="clientauthhooks.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="client\languagehooks.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="miscserverfixes.cpp">
- <Filter>Source Files\Server</Filter>
+ <ClCompile Include="client\latencyflex.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="bansystem.cpp">
- <Filter>Source Files\Server\Authentication</Filter>
+ <ClCompile Include="client\localchatwriter.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="languagehooks.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="client\modlocalisation.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="latencyflex.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="dedicated\dedicated.cpp">
+ <Filter>Source Files\dedicated</Filter>
</ClCompile>
- <ClCompile Include="audio.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="dedicated\dedicatedmaterialsystem.cpp">
+ <Filter>Source Files\dedicated</Filter>
</ClCompile>
- <ClCompile Include="buildainfile.cpp">
- <Filter>Source Files\Server</Filter>
+ <ClCompile Include="masterserver\masterserver.cpp">
+ <Filter>Source Files\masterserver</Filter>
</ClCompile>
- <ClCompile Include="localchatwriter.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="mods\modmanager.cpp">
+ <Filter>Source Files\mods</Filter>
</ClCompile>
- <ClCompile Include="plugins.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="mods\compiled\kb_act.cpp">
+ <Filter>Source Files\mods\compiled</Filter>
</ClCompile>
- <ClCompile Include="debugoverlay.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="mods\compiled\modkeyvalues.cpp">
+ <Filter>Source Files\mods\compiled</Filter>
</ClCompile>
- <ClCompile Include="clientvideooverrides.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="mods\compiled\modpdef.cpp">
+ <Filter>Source Files\mods\compiled</Filter>
</ClCompile>
- <ClCompile Include="version.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="mods\compiled\modscriptsrson.cpp">
+ <Filter>Source Files\mods\compiled</Filter>
</ClCompile>
- <ClCompile Include="clientruihooks.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="plugins\plugins.cpp">
+ <Filter>Source Files\plugins</Filter>
</ClCompile>
- <ClCompile Include="scriptmainmenupromos.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
+ <ClCompile Include="scripts\scriptdatatables.cpp">
+ <Filter>Source Files\scripts</Filter>
</ClCompile>
- <ClCompile Include="clientchathooks.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
+ <ClCompile Include="scripts\scriptjson.cpp">
+ <Filter>Source Files\scripts</Filter>
</ClCompile>
- <ClCompile Include="scriptmodmenu.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
+ <ClCompile Include="scripts\scriptutility.cpp">
+ <Filter>Source Files\scripts</Filter>
</ClCompile>
- <ClCompile Include="scriptservertoclientstringcommand.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
+ <ClCompile Include="server\buildainfile.cpp">
+ <Filter>Source Files\server</Filter>
</ClCompile>
- <ClCompile Include="scriptserverbrowser.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
+ <ClCompile Include="server\serverpresence.cpp">
+ <Filter>Source Files\server</Filter>
</ClCompile>
- <ClCompile Include="scriptbrowserhooks.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
+ <ClCompile Include="server\auth\bansystem.cpp">
+ <Filter>Source Files\server\auth</Filter>
</ClCompile>
- <ClCompile Include="serverchathooks.cpp">
- <Filter>Source Files\Server\Scripted</Filter>
+ <ClCompile Include="server\auth\serverauthentication.cpp">
+ <Filter>Source Files\server\auth</Filter>
</ClCompile>
- <ClCompile Include="miscserverscript.cpp">
- <Filter>Source Files\Server\Scripted</Filter>
+ <ClCompile Include="squirrel\squirrel.cpp">
+ <Filter>Source Files\squirrel</Filter>
</ClCompile>
- <ClCompile Include="demofixes.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="squirrel\squirrelautobind.cpp">
+ <Filter>Source Files\squirrel</Filter>
</ClCompile>
- <ClCompile Include="nsprefix.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="util\version.cpp">
+ <Filter>Source Files\util</Filter>
</ClCompile>
<ClCompile Include="dllmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="crashhandler.cpp">
+ <ClCompile Include="pch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="host.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="config\profile.cpp">
+ <Filter>Source Files\config</Filter>
</ClCompile>
- <ClCompile Include="hoststate.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="engine\host.cpp">
+ <Filter>Source Files\engine</Filter>
</ClCompile>
- <ClCompile Include="masterserver.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="engine\hoststate.cpp">
+ <Filter>Source Files\engine</Filter>
</ClCompile>
- <ClCompile Include="maxplayers.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="engine\runframe.cpp">
+ <Filter>Source Files\engine</Filter>
</ClCompile>
- <ClCompile Include="memalloc.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="shared\keyvalues.cpp">
+ <Filter>Source Files\shared</Filter>
</ClCompile>
- <ClCompile Include="playlist.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="shared\playlist.cpp">
+ <Filter>Source Files\shared</Filter>
</ClCompile>
- <ClCompile Include="sourceinterface.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="client\r2client.cpp">
+ <Filter>Source Files\client</Filter>
</ClCompile>
- <ClCompile Include="r2server.cpp">
- <Filter>Source Files\Game Functions</Filter>
+ <ClCompile Include="server\r2server.cpp">
+ <Filter>Source Files\server</Filter>
</ClCompile>
- <ClCompile Include="r2client.cpp">
- <Filter>Source Files\Game Functions</Filter>
+ <ClCompile Include="engine\r2engine.cpp">
+ <Filter>Source Files\engine</Filter>
</ClCompile>
- <ClCompile Include="r2engine.cpp">
- <Filter>Source Files\Game Functions</Filter>
+ <ClCompile Include="logging\crashhandler.cpp">
+ <Filter>Source Files\logging</Filter>
</ClCompile>
- <ClCompile Include="rpakfilesystem.cpp">
- <Filter>Source Files\Filesystem</Filter>
+ <ClCompile Include="logging\logging.cpp">
+ <Filter>Source Files\logging</Filter>
</ClCompile>
- <ClCompile Include="filesystem.cpp">
- <Filter>Source Files\Filesystem</Filter>
+ <ClCompile Include="logging\loghooks.cpp">
+ <Filter>Source Files\logging</Filter>
</ClCompile>
- <ClCompile Include="exploitfixes.cpp">
- <Filter>Source Files\Exploit Fixes</Filter>
+ <ClCompile Include="logging\sourceconsole.cpp">
+ <Filter>Source Files\logging</Filter>
</ClCompile>
- <ClCompile Include="limits.cpp">
- <Filter>Source Files\Exploit Fixes</Filter>
+ <ClCompile Include="scripts\client\clientchathooks.cpp">
+ <Filter>Source Files\scripts\client</Filter>
</ClCompile>
- <ClCompile Include="hooks.cpp">
- <Filter>Source Files\Hooks</Filter>
+ <ClCompile Include="scripts\client\scriptbrowserhooks.cpp">
+ <Filter>Source Files\scripts\client</Filter>
</ClCompile>
- <ClCompile Include="bits.cpp">
- <Filter>Source Files\Math</Filter>
+ <ClCompile Include="scripts\client\scriptmainmenupromos.cpp">
+ <Filter>Source Files\scripts\client</Filter>
</ClCompile>
- <ClCompile Include="convar.cpp">
- <Filter>Source Files\Convar</Filter>
+ <ClCompile Include="scripts\client\scriptmodmenu.cpp">
+ <Filter>Source Files\scripts\client</Filter>
</ClCompile>
- <ClCompile Include="concommand.cpp">
- <Filter>Source Files\Convar</Filter>
+ <ClCompile Include="scripts\client\scriptserverbrowser.cpp">
+ <Filter>Source Files\scripts\client</Filter>
</ClCompile>
- <ClCompile Include="printcommands.cpp">
- <Filter>Source Files\Console</Filter>
+ <ClCompile Include="scripts\client\scriptservertoclientstringcommand.cpp">
+ <Filter>Source Files\scripts\client</Filter>
</ClCompile>
- <ClCompile Include="printmaps.cpp">
- <Filter>Source Files\Console</Filter>
+ <ClCompile Include="scripts\server\miscserverfixes.cpp">
+ <Filter>Source Files\scripts\server</Filter>
</ClCompile>
- <ClCompile Include="cvar.cpp">
- <Filter>Source Files\Convar</Filter>
+ <ClCompile Include="scripts\server\miscserverscript.cpp">
+ <Filter>Source Files\scripts\server</Filter>
</ClCompile>
- <ClCompile Include="misccommands.cpp">
- <Filter>Source Files\Convar</Filter>
+ <ClCompile Include="scripts\server\scriptuserinfo.cpp">
+ <Filter>Source Files\scripts\server</Filter>
</ClCompile>
- <ClCompile Include="tier0.cpp">
- <Filter>Source Files\Game Functions</Filter>
+ <ClCompile Include="server\serverchathooks.cpp">
+ <Filter>Source Files\server</Filter>
</ClCompile>
- <ClCompile Include="logging.cpp">
- <Filter>Source Files\Console</Filter>
+ <ClCompile Include="core\convar\concommand.cpp">
+ <Filter>Source Files\core\convar</Filter>
</ClCompile>
- <ClCompile Include="serverpresence.cpp">
- <Filter>Source Files\Server</Filter>
+ <ClCompile Include="core\convar\convar.cpp">
+ <Filter>Source Files\core\convar</Filter>
</ClCompile>
- <ClCompile Include="runframe.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="core\convar\cvar.cpp">
+ <Filter>Source Files\core\convar</Filter>
</ClCompile>
- <ClCompile Include="memory.cpp">
- <Filter>Source Files\Hooks</Filter>
+ <ClCompile Include="core\filesystem\filesystem.cpp">
+ <Filter>Source Files\core\filesystem</Filter>
</ClCompile>
- <ClCompile Include="exploitfixes_lzss.cpp">
- <Filter>Source Files\Exploit Fixes</Filter>
+ <ClCompile Include="core\filesystem\rpakfilesystem.cpp">
+ <Filter>Source Files\core\filesystem</Filter>
</ClCompile>
- <ClCompile Include="scriptutility.cpp">
- <Filter>Source Files\Scripted</Filter>
+ <ClCompile Include="core\math\bits.cpp">
+ <Filter>Source Files\core\math</Filter>
</ClCompile>
- <ClCompile Include="scriptjson.cpp">
- <Filter>Source Files\Scripted</Filter>
+ <ClCompile Include="core\math\color.cpp">
+ <Filter>Source Files\core\math</Filter>
</ClCompile>
- <ClCompile Include="squirrel.cpp">
- <Filter>Source Files\Squirrel</Filter>
+ <ClCompile Include="core\hooks.cpp">
+ <Filter>Source Files\core</Filter>
</ClCompile>
- <ClCompile Include="scriptdatatables.cpp">
- <Filter>Source Files\Scripted</Filter>
+ <ClCompile Include="core\memalloc.cpp">
+ <Filter>Source Files\core</Filter>
</ClCompile>
- <ClCompile Include="squirrelautobind.cpp">
- <Filter>Source Files\Squirrel</Filter>
+ <ClCompile Include="core\memory.cpp">
+ <Filter>Source Files\core</Filter>
</ClCompile>
- <ClCompile Include="kb_act.cpp">
- <Filter>Source Files\Mods\Compiled Assets</Filter>
+ <ClCompile Include="core\tier0.cpp">
+ <Filter>Source Files\core</Filter>
</ClCompile>
- <ClCompile Include="diskvmtfixes.cpp">
- <Filter>Source Files\Client</Filter>
+ <ClCompile Include="shared\exploit_fixes\exploitfixes.cpp">
+ <Filter>Source Files\shared\exploit_fixes</Filter>
</ClCompile>
- <ClCompile Include="keyvalues.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="shared\exploit_fixes\exploitfixes_lzss.cpp">
+ <Filter>Source Files\shared\exploit_fixes</Filter>
</ClCompile>
- <ClCompile Include="scriptuserinfo.cpp">
- <Filter>Source Files\Server\Scripted</Filter>
+ <ClCompile Include="shared\exploit_fixes\exploitfixes_utf8parser.cpp">
+ <Filter>Source Files\shared\exploit_fixes</Filter>
</ClCompile>
- <ClCompile Include="color.cpp">
- <Filter>Source Files\Math</Filter>
+ <ClCompile Include="shared\exploit_fixes\ns_limits.cpp">
+ <Filter>Source Files\shared\exploit_fixes</Filter>
</ClCompile>
- <ClCompile Include="loghooks.cpp">
- <Filter>Source Files\Console</Filter>
+ <ClCompile Include="shared\maxplayers.cpp">
+ <Filter>Source Files\shared</Filter>
</ClCompile>
- <ClCompile Include="httprequesthandler.cpp">
- <Filter>Source Files</Filter>
+ <ClCompile Include="shared\misccommands.cpp">
+ <Filter>Source Files\shared</Filter>
+ </ClCompile>
+ <ClCompile Include="util\printcommands.cpp">
+ <Filter>Source Files\util</Filter>
+ </ClCompile>
+ <ClCompile Include="util\printmaps.cpp">
+ <Filter>Source Files\util</Filter>
+ </ClCompile>
+ <ClCompile Include="scripts\scripthttprequesthandler.cpp">
+ <Filter>Source Files\scripts</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<MASM Include="audio_asm.asm">
- <Filter>Source Files\Client</Filter>
+ <Filter>Source Files</Filter>
</MASM>
</ItemGroup>
- <ItemGroup>
- <None Include="..\include\spdlog\fmt\bundled\LICENSE.rst">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </None>
- </ItemGroup>
</Project>
\ No newline at end of file diff --git a/NorthstarDLL/audio.cpp b/NorthstarDLL/client/audio.cpp index b1592b6f..f0bc385b 100644 --- a/NorthstarDLL/audio.cpp +++ b/NorthstarDLL/client/audio.cpp @@ -1,7 +1,7 @@ #include "pch.h" #include "audio.h" -#include "dedicated.h" -#include "convar.h" +#include "dedicated/dedicated.h" +#include "core/convar/convar.h" #include "rapidjson/error/en.h" #include <fstream> diff --git a/NorthstarDLL/audio.h b/NorthstarDLL/client/audio.h index 26cda205..26cda205 100644 --- a/NorthstarDLL/audio.h +++ b/NorthstarDLL/client/audio.h diff --git a/NorthstarDLL/chatcommand.cpp b/NorthstarDLL/client/chatcommand.cpp index 37c438f3..76ed9784 100644 --- a/NorthstarDLL/chatcommand.cpp +++ b/NorthstarDLL/client/chatcommand.cpp @@ -1,6 +1,6 @@ #include "pch.h" -#include "convar.h" -#include "concommand.h" +#include "core/convar/convar.h" +#include "core/convar/concommand.h" #include "localchatwriter.h" // note: isIngameChat is an int64 because the whole register the arg is stored in needs to be 0'd out to work diff --git a/NorthstarDLL/clientauthhooks.cpp b/NorthstarDLL/client/clientauthhooks.cpp index cd01ad91..904ecb2f 100644 --- a/NorthstarDLL/clientauthhooks.cpp +++ b/NorthstarDLL/client/clientauthhooks.cpp @@ -1,7 +1,7 @@ #include "pch.h" -#include "masterserver.h" -#include "convar.h" -#include "r2client.h" +#include "masterserver/masterserver.h" +#include "core/convar/convar.h" +#include "client/r2client.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/clientruihooks.cpp b/NorthstarDLL/client/clientruihooks.cpp index 3cb08368..7896daa8 100644 --- a/NorthstarDLL/clientruihooks.cpp +++ b/NorthstarDLL/client/clientruihooks.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "convar.h" +#include "core/convar/convar.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/clientvideooverrides.cpp b/NorthstarDLL/client/clientvideooverrides.cpp index e4d96ff5..1a5924c7 100644 --- a/NorthstarDLL/clientvideooverrides.cpp +++ b/NorthstarDLL/client/clientvideooverrides.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "modmanager.h" +#include "mods/modmanager.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/debugoverlay.cpp b/NorthstarDLL/client/debugoverlay.cpp index ef456867..dd273227 100644 --- a/NorthstarDLL/debugoverlay.cpp +++ b/NorthstarDLL/client/debugoverlay.cpp @@ -1,7 +1,7 @@ #include "pch.h" -#include "dedicated.h" -#include "cvar.h" -#include "vector.h" +#include "dedicated/dedicated.h" +#include "core/convar/cvar.h" +#include "core/math/vector.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/demofixes.cpp b/NorthstarDLL/client/demofixes.cpp index ab092484..5fb49918 100644 --- a/NorthstarDLL/demofixes.cpp +++ b/NorthstarDLL/client/demofixes.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "convar.h" +#include "core/convar/convar.h" ON_DLL_LOAD_CLIENT("engine.dll", EngineDemoFixes, (CModule module)) { diff --git a/NorthstarDLL/diskvmtfixes.cpp b/NorthstarDLL/client/diskvmtfixes.cpp index f5f3e2cd..cd762c8a 100644 --- a/NorthstarDLL/diskvmtfixes.cpp +++ b/NorthstarDLL/client/diskvmtfixes.cpp @@ -1,16 +1,16 @@ -#include "pch.h"
-
-ON_DLL_LOAD_CLIENT("materialsystem_dx11.dll", DiskVMTFixes, (CModule module))
-{
- // in retail VMTs will never load if cache read is invalid due to a special case for them in KeyValues::LoadFromFile
- // this effectively makes it impossible to load them from mods because we invalidate cache for doing this
- // so uhh, stop that from happening
-
- // tbh idk why they even changed any of this what's the point it looks like it works fine who cares my god
-
- // matsystem KeyValues::LoadFromFile: patch special case on cache read failure for vmts
- module.Offset(0x1281B9).Patch("EB");
-
- // CMaterialSystem::FindMaterial: don't call function that crashes if previous patch is applied
- module.Offset(0x5F55A).NOP(5);
-}
+#include "pch.h" + +ON_DLL_LOAD_CLIENT("materialsystem_dx11.dll", DiskVMTFixes, (CModule module)) +{ + // in retail VMTs will never load if cache read is invalid due to a special case for them in KeyValues::LoadFromFile + // this effectively makes it impossible to load them from mods because we invalidate cache for doing this + // so uhh, stop that from happening + + // tbh idk why they even changed any of this what's the point it looks like it works fine who cares my god + + // matsystem KeyValues::LoadFromFile: patch special case on cache read failure for vmts + module.Offset(0x1281B9).Patch("EB"); + + // CMaterialSystem::FindMaterial: don't call function that crashes if previous patch is applied + module.Offset(0x5F55A).NOP(5); +} diff --git a/NorthstarDLL/languagehooks.cpp b/NorthstarDLL/client/languagehooks.cpp index d00beb68..1a46633c 100644 --- a/NorthstarDLL/languagehooks.cpp +++ b/NorthstarDLL/client/languagehooks.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "tier0.h" +#include "core/tier0.h" #include <filesystem> #include <regex> diff --git a/NorthstarDLL/latencyflex.cpp b/NorthstarDLL/client/latencyflex.cpp index 620e031a..a1ef72ca 100644 --- a/NorthstarDLL/latencyflex.cpp +++ b/NorthstarDLL/client/latencyflex.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "convar.h" +#include "core/convar/convar.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/localchatwriter.cpp b/NorthstarDLL/client/localchatwriter.cpp index efa7eeee..efa7eeee 100644 --- a/NorthstarDLL/localchatwriter.cpp +++ b/NorthstarDLL/client/localchatwriter.cpp diff --git a/NorthstarDLL/localchatwriter.h b/NorthstarDLL/client/localchatwriter.h index 0df0cac8..8bb1fb2f 100644 --- a/NorthstarDLL/localchatwriter.h +++ b/NorthstarDLL/client/localchatwriter.h @@ -1,6 +1,6 @@ #pragma once #include "pch.h" -#include "color.h" +#include "core/math/color.h" class vgui_BaseRichText; diff --git a/NorthstarDLL/modlocalisation.cpp b/NorthstarDLL/client/modlocalisation.cpp index b12f0a40..430e3a5f 100644 --- a/NorthstarDLL/modlocalisation.cpp +++ b/NorthstarDLL/client/modlocalisation.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "modmanager.h" +#include "mods/modmanager.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/r2client.cpp b/NorthstarDLL/client/r2client.cpp index 2e7bd564..2e7bd564 100644 --- a/NorthstarDLL/r2client.cpp +++ b/NorthstarDLL/client/r2client.cpp diff --git a/NorthstarDLL/r2client.h b/NorthstarDLL/client/r2client.h index 64ed6c61..64ed6c61 100644 --- a/NorthstarDLL/r2client.h +++ b/NorthstarDLL/client/r2client.h diff --git a/NorthstarDLL/nsprefix.cpp b/NorthstarDLL/config/profile.cpp index 8057865e..7518a2b3 100644 --- a/NorthstarDLL/nsprefix.cpp +++ b/NorthstarDLL/config/profile.cpp @@ -1,6 +1,6 @@ #include "pch.h" -#include "nsprefix.h" -#include "dedicated.h" +#include "config/profile.h" +#include "dedicated/dedicated.h" #include <string> std::string GetNorthstarPrefix() diff --git a/NorthstarDLL/nsprefix.h b/NorthstarDLL/config/profile.h index 9f3087fb..9f3087fb 100644 --- a/NorthstarDLL/nsprefix.h +++ b/NorthstarDLL/config/profile.h diff --git a/NorthstarDLL/concommand.cpp b/NorthstarDLL/core/convar/concommand.cpp index 6d77e137..02c9e50f 100644 --- a/NorthstarDLL/concommand.cpp +++ b/NorthstarDLL/core/convar/concommand.cpp @@ -1,6 +1,6 @@ #include "pch.h" #include "concommand.h" -#include "misccommands.h" +#include "shared/misccommands.h" #include <iostream> diff --git a/NorthstarDLL/concommand.h b/NorthstarDLL/core/convar/concommand.h index 89363bc7..89363bc7 100644 --- a/NorthstarDLL/concommand.h +++ b/NorthstarDLL/core/convar/concommand.h diff --git a/NorthstarDLL/convar.cpp b/NorthstarDLL/core/convar/convar.cpp index 80f93c64..eaa988dc 100644 --- a/NorthstarDLL/convar.cpp +++ b/NorthstarDLL/core/convar/convar.cpp @@ -2,7 +2,7 @@ #include "bits.h" #include "cvar.h" #include "convar.h" -#include "sourceinterface.h" +#include "shared/sourceinterface.h" #include <float.h> @@ -315,7 +315,7 @@ void ConVar::SetValue(const char* pszValue) { // Not a color, do the standard thing float flNewValue = (float)atof(pszValue); - if (!IsFinite(flNewValue)) + if (!isfinite(flNewValue)) { spdlog::warn("Warning: ConVar '{}' = '{}' is infinite, clamping value.\n", GetBaseName(), pszValue); flNewValue = FLT_MAX; diff --git a/NorthstarDLL/convar.h b/NorthstarDLL/core/convar/convar.h index 176d0d72..86ec64e6 100644 --- a/NorthstarDLL/convar.h +++ b/NorthstarDLL/core/convar/convar.h @@ -1,6 +1,6 @@ #pragma once -#include "sourceinterface.h" -#include "color.h" +#include "shared/sourceinterface.h" +#include "core/math/color.h" #include "cvar.h" #include "concommand.h" diff --git a/NorthstarDLL/cvar.cpp b/NorthstarDLL/core/convar/cvar.cpp index 787790be..787790be 100644 --- a/NorthstarDLL/cvar.cpp +++ b/NorthstarDLL/core/convar/cvar.cpp diff --git a/NorthstarDLL/cvar.h b/NorthstarDLL/core/convar/cvar.h index e65e5145..e65e5145 100644 --- a/NorthstarDLL/cvar.h +++ b/NorthstarDLL/core/convar/cvar.h diff --git a/NorthstarDLL/filesystem.cpp b/NorthstarDLL/core/filesystem/filesystem.cpp index 6ac6cc43..230c9161 100644 --- a/NorthstarDLL/filesystem.cpp +++ b/NorthstarDLL/core/filesystem/filesystem.cpp @@ -1,7 +1,7 @@ #include "pch.h" #include "filesystem.h" -#include "sourceinterface.h" -#include "modmanager.h" +#include "shared/sourceinterface.h" +#include "mods/modmanager.h" #include <iostream> #include <sstream> diff --git a/NorthstarDLL/filesystem.h b/NorthstarDLL/core/filesystem/filesystem.h index 9a22893a..8739d342 100644 --- a/NorthstarDLL/filesystem.h +++ b/NorthstarDLL/core/filesystem/filesystem.h @@ -1,5 +1,5 @@ #pragma once -#include "sourceinterface.h" +#include "shared/sourceinterface.h" // taken from ttf2sdk typedef void* FileHandle_t; diff --git a/NorthstarDLL/rpakfilesystem.cpp b/NorthstarDLL/core/filesystem/rpakfilesystem.cpp index f6de514b..b46218e0 100644 --- a/NorthstarDLL/rpakfilesystem.cpp +++ b/NorthstarDLL/core/filesystem/rpakfilesystem.cpp @@ -1,8 +1,8 @@ #include "pch.h" #include "rpakfilesystem.h" -#include "modmanager.h" -#include "dedicated.h" -#include "tier0.h" +#include "mods/modmanager.h" +#include "dedicated/dedicated.h" +#include "core/tier0.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/rpakfilesystem.h b/NorthstarDLL/core/filesystem/rpakfilesystem.h index 3f608dba..3f608dba 100644 --- a/NorthstarDLL/rpakfilesystem.h +++ b/NorthstarDLL/core/filesystem/rpakfilesystem.h diff --git a/NorthstarDLL/hooks.cpp b/NorthstarDLL/core/hooks.cpp index cc1c284d..79bcbb92 100644 --- a/NorthstarDLL/hooks.cpp +++ b/NorthstarDLL/core/hooks.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "dedicated.h" +#include "dedicated/dedicated.h" #include <iostream> #include <wchar.h> diff --git a/NorthstarDLL/hooks.h b/NorthstarDLL/core/hooks.h index f47791fb..f47791fb 100644 --- a/NorthstarDLL/hooks.h +++ b/NorthstarDLL/core/hooks.h diff --git a/NorthstarDLL/bitbuf.h b/NorthstarDLL/core/math/bitbuf.h index 8e8e216f..8e8e216f 100644 --- a/NorthstarDLL/bitbuf.h +++ b/NorthstarDLL/core/math/bitbuf.h diff --git a/NorthstarDLL/bits.cpp b/NorthstarDLL/core/math/bits.cpp index 014899f2..014899f2 100644 --- a/NorthstarDLL/bits.cpp +++ b/NorthstarDLL/core/math/bits.cpp diff --git a/NorthstarDLL/bits.h b/NorthstarDLL/core/math/bits.h index 0532a9bd..0532a9bd 100644 --- a/NorthstarDLL/bits.h +++ b/NorthstarDLL/core/math/bits.h diff --git a/NorthstarDLL/color.cpp b/NorthstarDLL/core/math/color.cpp index 05cf645f..05cf645f 100644 --- a/NorthstarDLL/color.cpp +++ b/NorthstarDLL/core/math/color.cpp diff --git a/NorthstarDLL/color.h b/NorthstarDLL/core/math/color.h index 4dc9b36e..4dc9b36e 100644 --- a/NorthstarDLL/color.h +++ b/NorthstarDLL/core/math/color.h diff --git a/NorthstarDLL/vector.h b/NorthstarDLL/core/math/vector.h index c06e0bba..95eae7ca 100644 --- a/NorthstarDLL/vector.h +++ b/NorthstarDLL/core/math/vector.h @@ -1,52 +1,52 @@ -#pragma once
-
-union Vector3
-{
- struct
- {
- float x;
- float y;
- float z;
- };
-
- float raw[3];
-
- Vector3() : x(0), y(0), z(0) {}
- Vector3(float x, float y, float z) : x(x), y(y), z(z) {}
- Vector3(float* pRawFloats) // assumes float[3] => vector
- {
- memcpy(raw, pRawFloats, sizeof(this));
- }
-
- void MakeValid()
- {
- for (auto& fl : raw)
- if (isnan(fl))
- fl = 0;
- }
-
- // todo: more operators maybe
- bool operator==(const Vector3& other)
- {
- return x == other.x && y == other.y && z == other.z;
- }
-};
-
-union QAngle
-{
- struct
- {
- float x;
- float y;
- float z;
- float w;
- };
-
- float raw[4];
-
- // todo: more operators maybe
- bool operator==(const QAngle& other)
- {
- return x == other.x && y == other.y && z == other.z && w == other.w;
- }
-};
+#pragma once + +union Vector3 +{ + struct + { + float x; + float y; + float z; + }; + + float raw[3]; + + Vector3() : x(0), y(0), z(0) {} + Vector3(float x, float y, float z) : x(x), y(y), z(z) {} + Vector3(float* pRawFloats) // assumes float[3] => vector + { + memcpy(raw, pRawFloats, sizeof(this)); + } + + void MakeValid() + { + for (auto& fl : raw) + if (isnan(fl)) + fl = 0; + } + + // todo: more operators maybe + bool operator==(const Vector3& other) + { + return x == other.x && y == other.y && z == other.z; + } +}; + +union QAngle +{ + struct + { + float x; + float y; + float z; + float w; + }; + + float raw[4]; + + // todo: more operators maybe + bool operator==(const QAngle& other) + { + return x == other.x && y == other.y && z == other.z && w == other.w; + } +}; diff --git a/NorthstarDLL/memalloc.cpp b/NorthstarDLL/core/memalloc.cpp index 8c0fafc8..122ab444 100644 --- a/NorthstarDLL/memalloc.cpp +++ b/NorthstarDLL/core/memalloc.cpp @@ -1,6 +1,6 @@ #include "pch.h" -#include "memalloc.h" -#include "tier0.h" +#include "core/memalloc.h" +#include "core/tier0.h" using namespace Tier0; diff --git a/NorthstarDLL/memalloc.h b/NorthstarDLL/core/memalloc.h index 7df68429..7df68429 100644 --- a/NorthstarDLL/memalloc.h +++ b/NorthstarDLL/core/memalloc.h diff --git a/NorthstarDLL/memory.cpp b/NorthstarDLL/core/memory.cpp index 2e994fb2..5e7c3e78 100644 --- a/NorthstarDLL/memory.cpp +++ b/NorthstarDLL/core/memory.cpp @@ -132,7 +132,7 @@ inline std::vector<uint8_t> HexBytesToString(const char* pHexString) } else { - assert(false, "Failed to parse invalid hex string."); + assert_msg(false, "Failed to parse invalid hex string."); val = -1; } @@ -324,7 +324,7 @@ inline std::pair<std::vector<uint8_t>, std::string> MaskedBytesFromPattern(const } else { - assert(false, "Failed to parse invalid pattern string."); + assert_msg(false, "Failed to parse invalid pattern string."); val = -1; } diff --git a/NorthstarDLL/memory.h b/NorthstarDLL/core/memory.h index 38c76cb3..38c76cb3 100644 --- a/NorthstarDLL/memory.h +++ b/NorthstarDLL/core/memory.h diff --git a/NorthstarDLL/structs.h b/NorthstarDLL/core/structs.h index 939fd302..ac29f711 100644 --- a/NorthstarDLL/structs.h +++ b/NorthstarDLL/core/structs.h @@ -45,16 +45,15 @@ OFFSET_STRUCT(Name) #define IIF_1(t, ...) t #define PROBE(x) x, 1 - #define MSVC_VA_ARGS_WORKAROUND(define, args) define args #define CHECK(...) MSVC_VA_ARGS_WORKAROUND(CHECK_N, (__VA_ARGS__, 0)) -#define CHECK_N(x, n, ...) n - #define DO_PROBE(offset) PROBE_PROXY(OFFSET_##offset) // concatenate prefix with offset #define PROBE_PROXY(...) PROBE_PRIMITIVE(__VA_ARGS__) // expand arguments #define PROBE_PRIMITIVE(x) PROBE_COMBINE_##x // merge #define PROBE_COMBINE_(...) PROBE(~) // if merge successful, expand to probe +#define CHECK_N(x, n, ...) n + #define IS_0(offset) CHECK(DO_PROBE(offset)) #define FIELD(offset, signature) IIF(IS_0(offset))(STRUCT_FIELD_NOOFFSET, STRUCT_FIELD_OFFSET)(offset, signature) diff --git a/NorthstarDLL/tier0.cpp b/NorthstarDLL/core/tier0.cpp index 61ad7783..61ad7783 100644 --- a/NorthstarDLL/tier0.cpp +++ b/NorthstarDLL/core/tier0.cpp diff --git a/NorthstarDLL/tier0.h b/NorthstarDLL/core/tier0.h index 92a63027..92a63027 100644 --- a/NorthstarDLL/tier0.h +++ b/NorthstarDLL/core/tier0.h diff --git a/NorthstarDLL/dedicated.cpp b/NorthstarDLL/dedicated/dedicated.cpp index 7ba62d24..33a3f034 100644 --- a/NorthstarDLL/dedicated.cpp +++ b/NorthstarDLL/dedicated/dedicated.cpp @@ -1,12 +1,12 @@ #include "pch.h" #include "dedicated.h" -#include "tier0.h" +#include "core/tier0.h" #include "playlist.h" -#include "r2engine.h" -#include "hoststate.h" -#include "serverauthentication.h" -#include "masterserver.h" -#include "printcommand.h" +#include "engine/r2engine.h" +#include "engine/hoststate.h" +#include "server/auth/serverauthentication.h" +#include "masterserver/masterserver.h" +#include "util/printcommands.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/dedicated.h b/NorthstarDLL/dedicated/dedicated.h index 82806763..82806763 100644 --- a/NorthstarDLL/dedicated.h +++ b/NorthstarDLL/dedicated/dedicated.h diff --git a/NorthstarDLL/dedicatedmaterialsystem.cpp b/NorthstarDLL/dedicated/dedicatedmaterialsystem.cpp index 28ee9b76..37b74576 100644 --- a/NorthstarDLL/dedicatedmaterialsystem.cpp +++ b/NorthstarDLL/dedicated/dedicatedmaterialsystem.cpp @@ -1,6 +1,6 @@ #include "pch.h" #include "dedicated.h" -#include "tier0.h" +#include "core/tier0.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/dllmain.cpp b/NorthstarDLL/dllmain.cpp index 4a9da4af..cd52940d 100644 --- a/NorthstarDLL/dllmain.cpp +++ b/NorthstarDLL/dllmain.cpp @@ -1,14 +1,13 @@ #include "pch.h" -#include "main.h" -#include "logging.h" -#include "crashhandler.h" -#include "memalloc.h" -#include "nsprefix.h" -#include "plugin_abi.h" -#include "plugins.h" -#include "version.h" -#include "pch.h" -#include "squirrel.h" +#include "dllmain.h" +#include "logging/logging.h" +#include "logging/crashhandler.h" +#include "core/memalloc.h" +#include "config/profile.h" +#include "plugins/plugin_abi.h" +#include "plugins/plugins.h" +#include "util/version.h" +#include "squirrel/squirrel.h" #include "rapidjson/document.h" #include "rapidjson/stringbuffer.h" diff --git a/NorthstarDLL/main.h b/NorthstarDLL/dllmain.h index 412f1e25..412f1e25 100644 --- a/NorthstarDLL/main.h +++ b/NorthstarDLL/dllmain.h diff --git a/NorthstarDLL/host.cpp b/NorthstarDLL/engine/host.cpp index 87b1ce4e..a55c8dfd 100644 --- a/NorthstarDLL/host.cpp +++ b/NorthstarDLL/engine/host.cpp @@ -1,14 +1,12 @@ #include "pch.h" -#include "convar.h" -#include "modmanager.h" -#include "printcommand.h" -#include "printmaps.h" -#include "misccommands.h" +#include "core/convar/convar.h" +#include "mods/modmanager.h" +#include "util/printcommands.h" +#include "util/printmaps.h" +#include "shared/misccommands.h" #include "r2engine.h" -#include "tier0.h" - +#include "core/tier0.h" AUTOHOOK_INIT() - // clang-format off AUTOHOOK(Host_Init, engine.dll + 0x155EA0, void, __fastcall, (bool bDedicated)) @@ -16,13 +14,10 @@ void, __fastcall, (bool bDedicated)) { spdlog::info("Host_Init()"); Host_Init(bDedicated); - FixupCvarFlags(); - // need to initialise these after host_init since they do stuff to preexisting concommands/convars without being client/server specific InitialiseCommandPrint(); InitialiseMapsPrint(); - // client/server autoexecs on necessary platforms // dedi needs autoexec_ns_server on boot, while non-dedi will run it on on listen server start if (bDedicated) @@ -30,7 +25,6 @@ void, __fastcall, (bool bDedicated)) else R2::Cbuf_AddText(R2::Cbuf_GetCurrentPlayer(), "exec autoexec_ns_client", R2::cmd_source_t::kCommandSrcCode); } - ON_DLL_LOAD("engine.dll", Host_Init, (CModule module)) { AUTOHOOK_DISPATCH() diff --git a/NorthstarDLL/hoststate.cpp b/NorthstarDLL/engine/hoststate.cpp index 24e4bf63..f2318c78 100644 --- a/NorthstarDLL/hoststate.cpp +++ b/NorthstarDLL/engine/hoststate.cpp @@ -1,13 +1,13 @@ #include "pch.h" -#include "hoststate.h" -#include "masterserver.h" -#include "serverauthentication.h" -#include "serverpresence.h" -#include "playlist.h" -#include "tier0.h" -#include "r2engine.h" -#include "limits.h" -#include "squirrel.h" +#include "engine/hoststate.h" +#include "masterserver/masterserver.h" +#include "server/auth/serverauthentication.h" +#include "server/serverpresence.h" +#include "shared/playlist.h" +#include "core/tier0.h" +#include "engine/r2engine.h" +#include "shared/exploit_fixes/ns_limits.h" +#include "squirrel/squirrel.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/hoststate.h b/NorthstarDLL/engine/hoststate.h index a77385ef..a77385ef 100644 --- a/NorthstarDLL/hoststate.h +++ b/NorthstarDLL/engine/hoststate.h diff --git a/NorthstarDLL/r2engine.cpp b/NorthstarDLL/engine/r2engine.cpp index 11233a2d..11233a2d 100644 --- a/NorthstarDLL/r2engine.cpp +++ b/NorthstarDLL/engine/r2engine.cpp diff --git a/NorthstarDLL/r2engine.h b/NorthstarDLL/engine/r2engine.h index 2614b4cc..68b762e1 100644 --- a/NorthstarDLL/r2engine.h +++ b/NorthstarDLL/engine/r2engine.h @@ -1,5 +1,5 @@ #pragma once -#include "keyvalues.h" +#include "shared/keyvalues.h" // use the R2 namespace for game funcs namespace R2 diff --git a/NorthstarDLL/runframe.cpp b/NorthstarDLL/engine/runframe.cpp index eb401f51..d81356f2 100644 --- a/NorthstarDLL/runframe.cpp +++ b/NorthstarDLL/engine/runframe.cpp @@ -1,11 +1,10 @@ #include "pch.h" -#include "r2engine.h" -#include "r2server.h" +#include "engine/r2engine.h" +#include "server/r2server.h" #include "hoststate.h" -#include "serverpresence.h" +#include "server/serverpresence.h" AUTOHOOK_INIT() - // clang-format off AUTOHOOK(CEngine__Frame, engine.dll + 0x1C8650, void, __fastcall, (R2::CEngine* self)) @@ -13,7 +12,6 @@ void, __fastcall, (R2::CEngine* self)) { CEngine__Frame(self); } - ON_DLL_LOAD("engine.dll", RunFrame, (CModule module)) { AUTOHOOK_DISPATCH() diff --git a/NorthstarDLL/crashhandler.cpp b/NorthstarDLL/logging/crashhandler.cpp index be09f870..d4a54169 100644 --- a/NorthstarDLL/crashhandler.cpp +++ b/NorthstarDLL/logging/crashhandler.cpp @@ -1,9 +1,9 @@ #include "pch.h" #include "crashhandler.h" -#include "dedicated.h" -#include "nsprefix.h" -#include "version.h" -#include "modmanager.h" +#include "dedicated/dedicated.h" +#include "config/profile.h" +#include "util/version.h" +#include "mods/modmanager.h" #include <minidumpapiset.h> diff --git a/NorthstarDLL/crashhandler.h b/NorthstarDLL/logging/crashhandler.h index 4d8a59ce..4d8a59ce 100644 --- a/NorthstarDLL/crashhandler.h +++ b/NorthstarDLL/logging/crashhandler.h diff --git a/NorthstarDLL/logging.cpp b/NorthstarDLL/logging/logging.cpp index 2184bd3f..6bb57170 100644 --- a/NorthstarDLL/logging.cpp +++ b/NorthstarDLL/logging/logging.cpp @@ -1,9 +1,9 @@ #include "pch.h" #include "logging.h" -#include "convar.h" -#include "concommand.h" -#include "nsprefix.h" -#include "tier0.h" +#include "core/convar/convar.h" +#include "core/convar/concommand.h" +#include "config/profile.h" +#include "core/tier0.h" #include "spdlog/sinks/basic_file_sink.h" #include <iomanip> diff --git a/NorthstarDLL/logging.h b/NorthstarDLL/logging/logging.h index 78f65e18..af20c3e8 100644 --- a/NorthstarDLL/logging.h +++ b/NorthstarDLL/logging/logging.h @@ -2,7 +2,7 @@ #include "pch.h" #include "spdlog/sinks/base_sink.h" #include "spdlog/logger.h" -#include "color.h" +#include "core/math/color.h" void CreateLogFiles(); void InitialiseLogging(); diff --git a/NorthstarDLL/loghooks.cpp b/NorthstarDLL/logging/loghooks.cpp index a352f4c1..d09f23cc 100644 --- a/NorthstarDLL/loghooks.cpp +++ b/NorthstarDLL/logging/loghooks.cpp @@ -1,13 +1,12 @@ #include "pch.h" #include "logging.h" #include "loghooks.h" -#include "convar.h" -#include "concommand.h" -#include "bitbuf.h" -#include "nsprefix.h" -#include "tier0.h" -#include "squirrel.h" - +#include "core/convar/convar.h" +#include "core/convar/concommand.h" +#include "core/math/bitbuf.h" +#include "config/profile.h" +#include "core/tier0.h" +#include "squirrel/squirrel.h" #include <iomanip> #include <sstream> diff --git a/NorthstarDLL/loghooks.h b/NorthstarDLL/logging/loghooks.h index 6f70f09b..6f70f09b 100644 --- a/NorthstarDLL/loghooks.h +++ b/NorthstarDLL/logging/loghooks.h diff --git a/NorthstarDLL/sourceconsole.cpp b/NorthstarDLL/logging/sourceconsole.cpp index 0048ac4c..62b41e1a 100644 --- a/NorthstarDLL/sourceconsole.cpp +++ b/NorthstarDLL/logging/sourceconsole.cpp @@ -1,9 +1,9 @@ #include "pch.h" -#include "convar.h" +#include "core/convar/convar.h" #include "sourceconsole.h" -#include "sourceinterface.h" -#include "concommand.h" -#include "printcommand.h" +#include "shared/sourceinterface.h" +#include "core/convar/concommand.h" +#include "util/printcommands.h" SourceInterface<CGameConsole>* g_pSourceGameConsole; diff --git a/NorthstarDLL/sourceconsole.h b/NorthstarDLL/logging/sourceconsole.h index b22ef2d3..00498054 100644 --- a/NorthstarDLL/sourceconsole.h +++ b/NorthstarDLL/logging/sourceconsole.h @@ -1,6 +1,6 @@ #pragma once #include "pch.h" -#include "sourceinterface.h" +#include "shared/sourceinterface.h" #include "spdlog/sinks/base_sink.h" #include <map> diff --git a/NorthstarDLL/masterserver.cpp b/NorthstarDLL/masterserver/masterserver.cpp index 2e1c5321..5679939b 100644 --- a/NorthstarDLL/masterserver.cpp +++ b/NorthstarDLL/masterserver/masterserver.cpp @@ -1,13 +1,13 @@ #include "pch.h" -#include "masterserver.h" -#include "concommand.h" +#include "masterserver/masterserver.h" +#include "core/convar/concommand.h" #include "playlist.h" -#include "serverauthentication.h" -#include "tier0.h" -#include "r2engine.h" -#include "modmanager.h" -#include "misccommands.h" -#include "version.h" +#include "server/auth/serverauthentication.h" +#include "core/tier0.h" +#include "engine/r2engine.h" +#include "mods/modmanager.h" +#include "shared/misccommands.h" +#include "util/version.h" #include "rapidjson/document.h" #include "rapidjson/stringbuffer.h" diff --git a/NorthstarDLL/masterserver.h b/NorthstarDLL/masterserver/masterserver.h index 4e649fae..bded9952 100644 --- a/NorthstarDLL/masterserver.h +++ b/NorthstarDLL/masterserver/masterserver.h @@ -1,7 +1,7 @@ #pragma once -#include "convar.h" -#include "serverpresence.h" +#include "core/convar/convar.h" +#include "server/serverpresence.h" #include <winsock2.h> #include <string> #include <cstring> diff --git a/NorthstarDLL/kb_act.cpp b/NorthstarDLL/mods/compiled/kb_act.cpp index 5fe71cdb..4a011dc7 100644 --- a/NorthstarDLL/kb_act.cpp +++ b/NorthstarDLL/mods/compiled/kb_act.cpp @@ -1,45 +1,45 @@ -#include "pch.h"
-#include "modmanager.h"
-#include "filesystem.h"
-
-#include <fstream>
-
-const char* KB_ACT_PATH = "scripts\\kb_act.lst";
-
-// compiles the file kb_act.lst, that defines entries for keybindings in the options menu
-void ModManager::BuildKBActionsList()
-{
- spdlog::info("Building kb_act.lst");
-
- fs::create_directories(GetCompiledAssetsPath() / "scripts");
- std::ofstream soCompiledKeys(GetCompiledAssetsPath() / KB_ACT_PATH, std::ios::binary);
-
- // write vanilla file's content to compiled file
- soCompiledKeys << R2::ReadVPKOriginalFile(KB_ACT_PATH);
-
- for (Mod& mod : m_LoadedMods)
- {
- if (!mod.m_bEnabled)
- continue;
-
- // write content of each modded file to compiled file
- std::ifstream siModKeys(mod.m_ModDirectory / "kb_act.lst");
-
- if (siModKeys.good())
- soCompiledKeys << siModKeys.rdbuf() << std::endl;
-
- siModKeys.close();
- }
-
- soCompiledKeys.close();
-
- // push to overrides
- ModOverrideFile overrideFile;
- overrideFile.m_pOwningMod = nullptr;
- overrideFile.m_Path = KB_ACT_PATH;
-
- if (m_ModFiles.find(KB_ACT_PATH) == m_ModFiles.end())
- m_ModFiles.insert(std::make_pair(KB_ACT_PATH, overrideFile));
- else
- m_ModFiles[KB_ACT_PATH] = overrideFile;
-}
+#include "pch.h" +#include "mods/modmanager.h" +#include "core/filesystem/filesystem.h" + +#include <fstream> + +const char* KB_ACT_PATH = "scripts\\kb_act.lst"; + +// compiles the file kb_act.lst, that defines entries for keybindings in the options menu +void ModManager::BuildKBActionsList() +{ + spdlog::info("Building kb_act.lst"); + + fs::create_directories(GetCompiledAssetsPath() / "scripts"); + std::ofstream soCompiledKeys(GetCompiledAssetsPath() / KB_ACT_PATH, std::ios::binary); + + // write vanilla file's content to compiled file + soCompiledKeys << R2::ReadVPKOriginalFile(KB_ACT_PATH); + + for (Mod& mod : m_LoadedMods) + { + if (!mod.m_bEnabled) + continue; + + // write content of each modded file to compiled file + std::ifstream siModKeys(mod.m_ModDirectory / "kb_act.lst"); + + if (siModKeys.good()) + soCompiledKeys << siModKeys.rdbuf() << std::endl; + + siModKeys.close(); + } + + soCompiledKeys.close(); + + // push to overrides + ModOverrideFile overrideFile; + overrideFile.m_pOwningMod = nullptr; + overrideFile.m_Path = KB_ACT_PATH; + + if (m_ModFiles.find(KB_ACT_PATH) == m_ModFiles.end()) + m_ModFiles.insert(std::make_pair(KB_ACT_PATH, overrideFile)); + else + m_ModFiles[KB_ACT_PATH] = overrideFile; +} diff --git a/NorthstarDLL/modkeyvalues.cpp b/NorthstarDLL/mods/compiled/modkeyvalues.cpp index 75188329..774be0eb 100644 --- a/NorthstarDLL/modkeyvalues.cpp +++ b/NorthstarDLL/mods/compiled/modkeyvalues.cpp @@ -1,6 +1,6 @@ #include "pch.h" -#include "modmanager.h" -#include "filesystem.h" +#include "mods/modmanager.h" +#include "core/filesystem/filesystem.h" #include <fstream> diff --git a/NorthstarDLL/modpdef.cpp b/NorthstarDLL/mods/compiled/modpdef.cpp index d33ba8a6..219c744b 100644 --- a/NorthstarDLL/modpdef.cpp +++ b/NorthstarDLL/mods/compiled/modpdef.cpp @@ -1,6 +1,6 @@ #include "pch.h" -#include "modmanager.h" -#include "filesystem.h" +#include "mods/modmanager.h" +#include "core/filesystem/filesystem.h" #include <map> #include <sstream> diff --git a/NorthstarDLL/modscriptsrson.cpp b/NorthstarDLL/mods/compiled/modscriptsrson.cpp index 3615dd80..15fcdd13 100644 --- a/NorthstarDLL/modscriptsrson.cpp +++ b/NorthstarDLL/mods/compiled/modscriptsrson.cpp @@ -1,7 +1,7 @@ #include "pch.h" -#include "modmanager.h" -#include "filesystem.h" -#include "squirrel.h" +#include "mods/modmanager.h" +#include "core/filesystem/filesystem.h" +#include "squirrel/squirrel.h" #include <fstream> diff --git a/NorthstarDLL/modmanager.cpp b/NorthstarDLL/mods/modmanager.cpp index d95bcbce..2196b118 100644 --- a/NorthstarDLL/modmanager.cpp +++ b/NorthstarDLL/mods/modmanager.cpp @@ -1,12 +1,12 @@ #include "pch.h" #include "modmanager.h" -#include "convar.h" -#include "concommand.h" -#include "audio.h" -#include "masterserver.h" -#include "filesystem.h" -#include "rpakfilesystem.h" -#include "nsprefix.h" +#include "core/convar/convar.h" +#include "core/convar/concommand.h" +#include "client/audio.h" +#include "masterserver/masterserver.h" +#include "core/filesystem/filesystem.h" +#include "core/filesystem/rpakfilesystem.h" +#include "config/profile.h" #include "rapidjson/error/en.h" #include "rapidjson/document.h" @@ -598,8 +598,9 @@ void ModManager::LoadMods() // build modinfo obj for masterserver rapidjson_document modinfoDoc; + auto& alloc = modinfoDoc.GetAllocator(); modinfoDoc.SetObject(); - modinfoDoc.AddMember("Mods", rapidjson_document::GenericValue(rapidjson::kArrayType), modinfoDoc.GetAllocator()); + modinfoDoc.AddMember("Mods", rapidjson::kArrayType, alloc); int currentModIndex = 0; for (Mod& mod : m_LoadedMods) @@ -607,7 +608,7 @@ void ModManager::LoadMods() if (!mod.m_bEnabled || (!mod.RequiredOnClient && !mod.Pdiff.size())) continue; - modinfoDoc["Mods"].PushBack(rapidjson_document::GenericValue(rapidjson::kObjectType), modinfoDoc.GetAllocator()); + modinfoDoc["Mods"].PushBack(rapidjson::kObjectType, modinfoDoc.GetAllocator()); modinfoDoc["Mods"][currentModIndex].AddMember("Name", rapidjson::StringRef(&mod.Name[0]), modinfoDoc.GetAllocator()); modinfoDoc["Mods"][currentModIndex].AddMember("Version", rapidjson::StringRef(&mod.Version[0]), modinfoDoc.GetAllocator()); modinfoDoc["Mods"][currentModIndex].AddMember("RequiredOnClient", mod.RequiredOnClient, modinfoDoc.GetAllocator()); @@ -649,10 +650,7 @@ void ModManager::UnloadMods() // main issue with doing this here is when we reload mods for connecting to a server, we write enabled mods, which isn't necessarily // what we wanna do if (!m_EnabledModsCfg.HasMember(mod.Name.c_str())) - m_EnabledModsCfg.AddMember( - rapidjson_document::StringRefType(mod.Name.c_str()), - rapidjson_document::GenericValue(false), - m_EnabledModsCfg.GetAllocator()); + m_EnabledModsCfg.AddMember(rapidjson_document::StringRefType(mod.Name.c_str()), false, m_EnabledModsCfg.GetAllocator()); m_EnabledModsCfg[mod.Name.c_str()].SetBool(mod.m_bEnabled); } diff --git a/NorthstarDLL/modmanager.h b/NorthstarDLL/mods/modmanager.h index 6540a3de..a77d85bd 100644 --- a/NorthstarDLL/modmanager.h +++ b/NorthstarDLL/mods/modmanager.h @@ -1,7 +1,7 @@ #pragma once -#include "convar.h" -#include "memalloc.h" -#include "squirrel.h" +#include "core/convar/convar.h" +#include "core/memalloc.h" +#include "squirrel/squirrel.h" #include "rapidjson/document.h" #include <string> diff --git a/NorthstarDLL/pch.h b/NorthstarDLL/pch.h index 824aaee8..a6a3f06d 100644 --- a/NorthstarDLL/pch.h +++ b/NorthstarDLL/pch.h @@ -9,7 +9,7 @@ #define RAPIDJSON_HAS_STDSTRING 1 // add headers that you want to pre-compile here -#include "memalloc.h" +#include "core/memalloc.h" #include <windows.h> #include <psapi.h> @@ -20,13 +20,17 @@ namespace fs = std::filesystem; -#include "structs.h" -#include "color.h" +// clang-format off +#define assert_msg(exp, msg) assert((exp, msg)) +//clang-format on + +#include "core/structs.h" +#include "core/math/color.h" #include "spdlog/spdlog.h" -#include "logging.h" +#include "logging/logging.h" #include "MinHook.h" #include "libcurl/include/curl/curl.h" -#include "hooks.h" +#include "core/hooks.h" #include "memory.h" template <typename ReturnType, typename... Args> ReturnType CallVFunc(int index, void* thisPtr, Args... args) diff --git a/NorthstarDLL/plugin_abi.h b/NorthstarDLL/plugins/plugin_abi.h index 4b176a32..4b176a32 100644 --- a/NorthstarDLL/plugin_abi.h +++ b/NorthstarDLL/plugins/plugin_abi.h diff --git a/NorthstarDLL/plugins.cpp b/NorthstarDLL/plugins/plugins.cpp index 790439d1..97ac0b9f 100644 --- a/NorthstarDLL/plugins.cpp +++ b/NorthstarDLL/plugins/plugins.cpp @@ -1,9 +1,9 @@ #include "pch.h" -#include "squirrel.h" +#include "squirrel/squirrel.h" #include "plugins.h" -#include "masterserver.h" -#include "convar.h" -#include "serverpresence.h" +#include "masterserver/masterserver.h" +#include "core/convar/convar.h" +#include "server/serverpresence.h" #include <chrono> #include <windows.h> diff --git a/NorthstarDLL/plugins.h b/NorthstarDLL/plugins/plugins.h index 953801a2..953801a2 100644 --- a/NorthstarDLL/plugins.h +++ b/NorthstarDLL/plugins/plugins.h diff --git a/NorthstarDLL/clientchathooks.cpp b/NorthstarDLL/scripts/client/clientchathooks.cpp index 847b5eb1..0fc68302 100644 --- a/NorthstarDLL/clientchathooks.cpp +++ b/NorthstarDLL/scripts/client/clientchathooks.cpp @@ -1,8 +1,8 @@ #include "pch.h" -#include "squirrel.h" +#include "squirrel/squirrel.h" -#include "serverchathooks.h" -#include "localchatwriter.h" +#include "server/serverchathooks.h" +#include "client/localchatwriter.h" #include <rapidjson/document.h> diff --git a/NorthstarDLL/scriptbrowserhooks.cpp b/NorthstarDLL/scripts/client/scriptbrowserhooks.cpp index df4014de..df4014de 100644 --- a/NorthstarDLL/scriptbrowserhooks.cpp +++ b/NorthstarDLL/scripts/client/scriptbrowserhooks.cpp diff --git a/NorthstarDLL/scriptmainmenupromos.cpp b/NorthstarDLL/scripts/client/scriptmainmenupromos.cpp index 5f7a09c1..0ea167f8 100644 --- a/NorthstarDLL/scriptmainmenupromos.cpp +++ b/NorthstarDLL/scripts/client/scriptmainmenupromos.cpp @@ -1,6 +1,6 @@ #include "pch.h" -#include "squirrel.h" -#include "masterserver.h" +#include "squirrel/squirrel.h" +#include "masterserver/masterserver.h" // mirror this in script enum eMainMenuPromoDataProperty @@ -121,4 +121,4 @@ ADD_SQFUNC("var", NSGetCustomMainMenuPromoData, "int promoDataKey", "", ScriptCo } return SQRESULT_NOTNULL; -}
\ No newline at end of file +} diff --git a/NorthstarDLL/scriptmodmenu.cpp b/NorthstarDLL/scripts/client/scriptmodmenu.cpp index 1dd80261..75d05acc 100644 --- a/NorthstarDLL/scriptmodmenu.cpp +++ b/NorthstarDLL/scripts/client/scriptmodmenu.cpp @@ -1,6 +1,6 @@ #include "pch.h" -#include "modmanager.h" -#include "squirrel.h" +#include "mods/modmanager.h" +#include "squirrel/squirrel.h" ADD_SQFUNC("array<string>", NSGetModNames, "", "", ScriptContext::SERVER | ScriptContext::CLIENT | ScriptContext::UI) { diff --git a/NorthstarDLL/scriptserverbrowser.cpp b/NorthstarDLL/scripts/client/scriptserverbrowser.cpp index 05f83269..5f1287ad 100644 --- a/NorthstarDLL/scriptserverbrowser.cpp +++ b/NorthstarDLL/scripts/client/scriptserverbrowser.cpp @@ -1,9 +1,9 @@ #include "pch.h" -#include "squirrel.h" -#include "masterserver.h" -#include "serverauthentication.h" -#include "r2engine.h" -#include "r2client.h" +#include "squirrel/squirrel.h" +#include "masterserver/masterserver.h" +#include "server/auth/serverauthentication.h" +#include "engine/r2engine.h" +#include "client/r2client.h" // functions for viewing server browser diff --git a/NorthstarDLL/scriptservertoclientstringcommand.cpp b/NorthstarDLL/scripts/client/scriptservertoclientstringcommand.cpp index ac19c3af..f3cb2f18 100644 --- a/NorthstarDLL/scriptservertoclientstringcommand.cpp +++ b/NorthstarDLL/scripts/client/scriptservertoclientstringcommand.cpp @@ -1,7 +1,7 @@ #include "pch.h" -#include "squirrel.h" -#include "convar.h" -#include "concommand.h" +#include "squirrel/squirrel.h" +#include "core/convar/convar.h" +#include "core/convar/concommand.h" void ConCommand_ns_script_servertoclientstringcommand(const CCommand& arg) { diff --git a/NorthstarDLL/scriptdatatables.cpp b/NorthstarDLL/scripts/scriptdatatables.cpp index dfa45737..915d4df0 100644 --- a/NorthstarDLL/scriptdatatables.cpp +++ b/NorthstarDLL/scripts/scriptdatatables.cpp @@ -1,12 +1,12 @@ #include "pch.h" -#include "squirrel.h" -#include "rpakfilesystem.h" -#include "convar.h" -#include "dedicated.h" -#include "filesystem.h" -#include "vector.h" -#include "tier0.h" -#include "r2engine.h" +#include "squirrel/squirrel.h" +#include "core/filesystem/rpakfilesystem.h" +#include "core/convar/convar.h" +#include "dedicated/dedicated.h" +#include "core/filesystem/filesystem.h" +#include "core/math/vector.h" +#include "core/tier0.h" +#include "engine/r2engine.h" #include <iostream> #include <sstream> #include <map> diff --git a/NorthstarDLL/httprequesthandler.cpp b/NorthstarDLL/scripts/scripthttprequesthandler.cpp index 2681b4a3..17ccc888 100644 --- a/NorthstarDLL/httprequesthandler.cpp +++ b/NorthstarDLL/scripts/scripthttprequesthandler.cpp @@ -1,8 +1,8 @@ #include "pch.h" -#include "httprequesthandler.h" -#include "version.h" -#include "squirrel.h" -#include "tier0.h" +#include "scripthttprequesthandler.h" +#include "util/version.h" +#include "squirrel/squirrel.h" +#include "core/tier0.h" HttpRequestHandler* g_httpRequestHandler; diff --git a/NorthstarDLL/httprequesthandler.h b/NorthstarDLL/scripts/scripthttprequesthandler.h index 0f888b6e..0f888b6e 100644 --- a/NorthstarDLL/httprequesthandler.h +++ b/NorthstarDLL/scripts/scripthttprequesthandler.h diff --git a/NorthstarDLL/scriptjson.cpp b/NorthstarDLL/scripts/scriptjson.cpp index 049a7b20..f41b0457 100644 --- a/NorthstarDLL/scriptjson.cpp +++ b/NorthstarDLL/scripts/scriptjson.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "squirrel.h" +#include "squirrel/squirrel.h" #include "rapidjson/error/en.h" #include "rapidjson/document.h" @@ -117,32 +117,19 @@ template <ScriptContext context> void EncodeJSONTable( rapidjson::StringRef(node->key._VAL.asString->_val), rapidjson::StringRef(node->val._VAL.asString->_val), allocator); break; case OT_INTEGER: - obj->AddMember( - rapidjson::StringRef(node->key._VAL.asString->_val), - rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<SourceAllocator>>( - (int)node->val._VAL.asInteger), - allocator); + obj->AddMember(rapidjson::StringRef(node->key._VAL.asString->_val), node->val._VAL.asInteger, allocator); break; case OT_FLOAT: - obj->AddMember( - rapidjson::StringRef(node->key._VAL.asString->_val), - rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<SourceAllocator>>(node->val._VAL.asFloat), - allocator); + obj->AddMember(rapidjson::StringRef(node->key._VAL.asString->_val), node->val._VAL.asFloat, allocator); break; case OT_BOOL: if (node->val._VAL.asInteger) { - obj->AddMember( - rapidjson::StringRef(node->key._VAL.asString->_val), - rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<SourceAllocator>>(true), - allocator); + obj->AddMember(rapidjson::StringRef(node->key._VAL.asString->_val), true, allocator); } else { - obj->AddMember( - rapidjson::StringRef(node->key._VAL.asString->_val), - rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<SourceAllocator>>(false), - allocator); + obj->AddMember(rapidjson::StringRef(node->key._VAL.asString->_val), false, allocator); } break; case OT_TABLE: @@ -179,14 +166,10 @@ template <ScriptContext context> void EncodeJSONArray( obj->PushBack(rapidjson::StringRef(node->_VAL.asString->_val), allocator); break; case OT_INTEGER: - obj->PushBack( - rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<SourceAllocator>>((int)node->_VAL.asInteger), - allocator); + obj->PushBack(node->_VAL.asInteger, allocator); break; case OT_FLOAT: - obj->PushBack( - rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<SourceAllocator>>(node->_VAL.asFloat), - allocator); + obj->PushBack(node->_VAL.asFloat, allocator); break; case OT_BOOL: if (node->_VAL.asInteger) diff --git a/NorthstarDLL/scriptutility.cpp b/NorthstarDLL/scripts/scriptutility.cpp index 1ff8e4bb..8dae49cf 100644 --- a/NorthstarDLL/scriptutility.cpp +++ b/NorthstarDLL/scripts/scriptutility.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "squirrel.h" +#include "squirrel/squirrel.h" // asset function StringToAsset( string assetName ) ADD_SQFUNC( diff --git a/NorthstarDLL/miscserverfixes.cpp b/NorthstarDLL/scripts/server/miscserverfixes.cpp index 4feca505..4feca505 100644 --- a/NorthstarDLL/miscserverfixes.cpp +++ b/NorthstarDLL/scripts/server/miscserverfixes.cpp diff --git a/NorthstarDLL/miscserverscript.cpp b/NorthstarDLL/scripts/server/miscserverscript.cpp index a8e7264b..0d865388 100644 --- a/NorthstarDLL/miscserverscript.cpp +++ b/NorthstarDLL/scripts/server/miscserverscript.cpp @@ -1,10 +1,10 @@ #include "pch.h" -#include "squirrel.h" -#include "masterserver.h" -#include "serverauthentication.h" -#include "dedicated.h" -#include "r2client.h" -#include "r2server.h" +#include "squirrel/squirrel.h" +#include "masterserver/masterserver.h" +#include "server/auth/serverauthentication.h" +#include "dedicated/dedicated.h" +#include "client/r2client.h" +#include "server/r2server.h" #include <filesystem> diff --git a/NorthstarDLL/scriptuserinfo.cpp b/NorthstarDLL/scripts/server/scriptuserinfo.cpp index 415ae3ea..68baac0e 100644 --- a/NorthstarDLL/scriptuserinfo.cpp +++ b/NorthstarDLL/scripts/server/scriptuserinfo.cpp @@ -1,105 +1,105 @@ -#include "pch.h"
-#include "squirrel.h"
-#include "r2engine.h"
-#include "r2server.h"
-
-// clang-format off
-ADD_SQFUNC("string", GetUserInfoKVString_Internal, "entity player, string key, string defaultValue = \"\"",
- "Gets the string value of a given player's userinfo convar by name", ScriptContext::SERVER)
-// clang-format on
-{
- const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1);
- if (!pPlayer)
- {
- g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null");
- return SQRESULT_ERROR;
- }
-
- const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2);
- const char* pDefaultValue = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 3);
-
- const char* pResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetString(pKey, pDefaultValue);
- g_pSquirrel<ScriptContext::SERVER>->pushstring(sqvm, pResult);
- return SQRESULT_NOTNULL;
-}
-
-// clang-format off
-ADD_SQFUNC("asset", GetUserInfoKVAsset_Internal, "entity player, string key, asset defaultValue = $\"\"",
- "Gets the asset value of a given player's userinfo convar by name", ScriptContext::SERVER)
-// clang-format on
-{
- const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1);
- if (!pPlayer)
- {
- g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null");
- return SQRESULT_ERROR;
- }
-
- const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2);
- const char* pDefaultValue;
- g_pSquirrel<ScriptContext::SERVER>->getasset(sqvm, 3, &pDefaultValue);
-
- const char* pResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetString(pKey, pDefaultValue);
- g_pSquirrel<ScriptContext::SERVER>->pushasset(sqvm, pResult);
- return SQRESULT_NOTNULL;
-}
-
-// clang-format off
-ADD_SQFUNC("int", GetUserInfoKVInt_Internal, "entity player, string key, int defaultValue = 0",
- "Gets the int value of a given player's userinfo convar by name", ScriptContext::SERVER)
-// clang-format on
-{
- const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1);
- if (!pPlayer)
- {
- g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null");
- return SQRESULT_ERROR;
- }
-
- const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2);
- const int iDefaultValue = g_pSquirrel<ScriptContext::SERVER>->getinteger(sqvm, 3);
-
- const int iResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetInt(pKey, iDefaultValue);
- g_pSquirrel<ScriptContext::SERVER>->pushinteger(sqvm, iResult);
- return SQRESULT_NOTNULL;
-}
-
-// clang-format off
-ADD_SQFUNC("float", GetUserInfoKVFloat_Internal, "entity player, string key, float defaultValue = 0",
- "Gets the float value of a given player's userinfo convar by name", ScriptContext::SERVER)
-// clang-format on
-{
- const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1);
- if (!pPlayer)
- {
- g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null");
- return SQRESULT_ERROR;
- }
-
- const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2);
- const float flDefaultValue = g_pSquirrel<ScriptContext::SERVER>->getfloat(sqvm, 3);
-
- const float flResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetFloat(pKey, flDefaultValue);
- g_pSquirrel<ScriptContext::SERVER>->pushfloat(sqvm, flResult);
- return SQRESULT_NOTNULL;
-}
-
-// clang-format off
-ADD_SQFUNC("bool", GetUserInfoKVBool_Internal, "entity player, string key, bool defaultValue = false",
- "Gets the bool value of a given player's userinfo convar by name", ScriptContext::SERVER)
-// clang-format on
-{
- const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1);
- if (!pPlayer)
- {
- g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null");
- return SQRESULT_ERROR;
- }
-
- const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2);
- const bool bDefaultValue = g_pSquirrel<ScriptContext::SERVER>->getbool(sqvm, 3);
-
- const bool bResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetInt(pKey, bDefaultValue);
- g_pSquirrel<ScriptContext::SERVER>->pushbool(sqvm, bResult);
- return SQRESULT_NOTNULL;
-}
+#include "pch.h" +#include "squirrel/squirrel.h" +#include "engine/r2engine.h" +#include "server/r2server.h" + +// clang-format off +ADD_SQFUNC("string", GetUserInfoKVString_Internal, "entity player, string key, string defaultValue = \"\"", + "Gets the string value of a given player's userinfo convar by name", ScriptContext::SERVER) +// clang-format on +{ + const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1); + if (!pPlayer) + { + g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null"); + return SQRESULT_ERROR; + } + + const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2); + const char* pDefaultValue = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 3); + + const char* pResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetString(pKey, pDefaultValue); + g_pSquirrel<ScriptContext::SERVER>->pushstring(sqvm, pResult); + return SQRESULT_NOTNULL; +} + +// clang-format off +ADD_SQFUNC("asset", GetUserInfoKVAsset_Internal, "entity player, string key, asset defaultValue = $\"\"", + "Gets the asset value of a given player's userinfo convar by name", ScriptContext::SERVER) +// clang-format on +{ + const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1); + if (!pPlayer) + { + g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null"); + return SQRESULT_ERROR; + } + + const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2); + const char* pDefaultValue; + g_pSquirrel<ScriptContext::SERVER>->getasset(sqvm, 3, &pDefaultValue); + + const char* pResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetString(pKey, pDefaultValue); + g_pSquirrel<ScriptContext::SERVER>->pushasset(sqvm, pResult); + return SQRESULT_NOTNULL; +} + +// clang-format off +ADD_SQFUNC("int", GetUserInfoKVInt_Internal, "entity player, string key, int defaultValue = 0", + "Gets the int value of a given player's userinfo convar by name", ScriptContext::SERVER) +// clang-format on +{ + const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1); + if (!pPlayer) + { + g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null"); + return SQRESULT_ERROR; + } + + const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2); + const int iDefaultValue = g_pSquirrel<ScriptContext::SERVER>->getinteger(sqvm, 3); + + const int iResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetInt(pKey, iDefaultValue); + g_pSquirrel<ScriptContext::SERVER>->pushinteger(sqvm, iResult); + return SQRESULT_NOTNULL; +} + +// clang-format off +ADD_SQFUNC("float", GetUserInfoKVFloat_Internal, "entity player, string key, float defaultValue = 0", + "Gets the float value of a given player's userinfo convar by name", ScriptContext::SERVER) +// clang-format on +{ + const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1); + if (!pPlayer) + { + g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null"); + return SQRESULT_ERROR; + } + + const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2); + const float flDefaultValue = g_pSquirrel<ScriptContext::SERVER>->getfloat(sqvm, 3); + + const float flResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetFloat(pKey, flDefaultValue); + g_pSquirrel<ScriptContext::SERVER>->pushfloat(sqvm, flResult); + return SQRESULT_NOTNULL; +} + +// clang-format off +ADD_SQFUNC("bool", GetUserInfoKVBool_Internal, "entity player, string key, bool defaultValue = false", + "Gets the bool value of a given player's userinfo convar by name", ScriptContext::SERVER) +// clang-format on +{ + const R2::CBasePlayer* pPlayer = g_pSquirrel<ScriptContext::SERVER>->getentity<R2::CBasePlayer>(sqvm, 1); + if (!pPlayer) + { + g_pSquirrel<ScriptContext::SERVER>->raiseerror(sqvm, "player is null"); + return SQRESULT_ERROR; + } + + const char* pKey = g_pSquirrel<ScriptContext::SERVER>->getstring(sqvm, 2); + const bool bDefaultValue = g_pSquirrel<ScriptContext::SERVER>->getbool(sqvm, 3); + + const bool bResult = R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1].m_ConVars->GetInt(pKey, bDefaultValue); + g_pSquirrel<ScriptContext::SERVER>->pushbool(sqvm, bResult); + return SQRESULT_NOTNULL; +} diff --git a/NorthstarDLL/bansystem.cpp b/NorthstarDLL/server/auth/bansystem.cpp index 25c0e6bf..56719ed9 100644 --- a/NorthstarDLL/bansystem.cpp +++ b/NorthstarDLL/server/auth/bansystem.cpp @@ -2,11 +2,11 @@ #include "pch.h" #include "bansystem.h" #include "serverauthentication.h" -#include "maxplayers.h" -#include "concommand.h" -#include "r2server.h" -#include "r2engine.h" -#include "nsprefix.h" +#include "shared/maxplayers.h" +#include "core/convar/concommand.h" +#include "server/r2server.h" +#include "engine/r2engine.h" +#include "config/profile.h" #include <filesystem> diff --git a/NorthstarDLL/bansystem.h b/NorthstarDLL/server/auth/bansystem.h index 6f180126..6f180126 100644 --- a/NorthstarDLL/bansystem.h +++ b/NorthstarDLL/server/auth/bansystem.h diff --git a/NorthstarDLL/serverauthentication.cpp b/NorthstarDLL/server/auth/serverauthentication.cpp index 350d8521..ac1d5f17 100644 --- a/NorthstarDLL/serverauthentication.cpp +++ b/NorthstarDLL/server/auth/serverauthentication.cpp @@ -1,20 +1,20 @@ #include "pch.h" #include "serverauthentication.h" -#include "limits.h" -#include "cvar.h" -#include "convar.h" -#include "masterserver.h" -#include "serverpresence.h" -#include "hoststate.h" -#include "maxplayers.h" +#include "shared/exploit_fixes/ns_limits.h" +#include "core/convar/cvar.h" +#include "core/convar/convar.h" +#include "masterserver/masterserver.h" +#include "server/serverpresence.h" +#include "engine/hoststate.h" +#include "shared/maxplayers.h" #include "bansystem.h" -#include "concommand.h" -#include "dedicated.h" -#include "nsprefix.h" -#include "tier0.h" -#include "r2engine.h" -#include "r2client.h" -#include "r2server.h" +#include "core/convar/concommand.h" +#include "dedicated/dedicated.h" +#include "config/profile.h" +#include "core/tier0.h" +#include "engine/r2engine.h" +#include "client/r2client.h" +#include "server/r2server.h" #include "httplib.h" diff --git a/NorthstarDLL/serverauthentication.h b/NorthstarDLL/server/auth/serverauthentication.h index 65050d56..4ffbbfd6 100644 --- a/NorthstarDLL/serverauthentication.h +++ b/NorthstarDLL/server/auth/serverauthentication.h @@ -1,7 +1,7 @@ #pragma once -#include "convar.h" +#include "core/convar/convar.h" #include "httplib.h" -#include "r2engine.h" +#include "engine/r2engine.h" #include <unordered_map> #include <string> diff --git a/NorthstarDLL/buildainfile.cpp b/NorthstarDLL/server/buildainfile.cpp index 8190adba..f6dc4717 100644 --- a/NorthstarDLL/buildainfile.cpp +++ b/NorthstarDLL/server/buildainfile.cpp @@ -1,7 +1,7 @@ #include "pch.h" -#include "convar.h" -#include "hoststate.h" -#include "r2engine.h" +#include "core/convar/convar.h" +#include "engine/hoststate.h" +#include "engine/r2engine.h" #include <fstream> #include <filesystem> diff --git a/NorthstarDLL/r2server.cpp b/NorthstarDLL/server/r2server.cpp index 50cfa239..50cfa239 100644 --- a/NorthstarDLL/r2server.cpp +++ b/NorthstarDLL/server/r2server.cpp diff --git a/NorthstarDLL/r2server.h b/NorthstarDLL/server/r2server.h index aadfdefe..313284be 100644 --- a/NorthstarDLL/r2server.h +++ b/NorthstarDLL/server/r2server.h @@ -1,6 +1,6 @@ #pragma once -#include "vector.h" +#include "core/math/vector.h" // use the R2 namespace for game funcs namespace R2 diff --git a/NorthstarDLL/serverchathooks.cpp b/NorthstarDLL/server/serverchathooks.cpp index e4e67e05..57c2c31a 100644 --- a/NorthstarDLL/serverchathooks.cpp +++ b/NorthstarDLL/server/serverchathooks.cpp @@ -1,8 +1,8 @@ #include "pch.h" #include "serverchathooks.h" -#include "limits.h" -#include "squirrel.h" -#include "r2server.h" +#include "shared/exploit_fixes/ns_limits.h" +#include "squirrel/squirrel.h" +#include "server/r2server.h" #include <rapidjson/document.h> #include <rapidjson/stringbuffer.h> diff --git a/NorthstarDLL/serverchathooks.h b/NorthstarDLL/server/serverchathooks.h index 1d8a806a..1d8a806a 100644 --- a/NorthstarDLL/serverchathooks.h +++ b/NorthstarDLL/server/serverchathooks.h diff --git a/NorthstarDLL/serverpresence.cpp b/NorthstarDLL/server/serverpresence.cpp index fb8cf624..bda5e7fe 100644 --- a/NorthstarDLL/serverpresence.cpp +++ b/NorthstarDLL/server/serverpresence.cpp @@ -1,8 +1,8 @@ #include "pch.h" #include "serverpresence.h" -#include "playlist.h" -#include "tier0.h" -#include "convar.h" +#include "shared/playlist.h" +#include "core/tier0.h" +#include "core/convar/convar.h" #include <regex> diff --git a/NorthstarDLL/serverpresence.h b/NorthstarDLL/server/serverpresence.h index 97b4654c..125b2e68 100644 --- a/NorthstarDLL/serverpresence.h +++ b/NorthstarDLL/server/serverpresence.h @@ -1,5 +1,5 @@ #pragma once -#include "convar.h" +#include "core/convar/convar.h" struct ServerPresence { diff --git a/NorthstarDLL/exploitfixes.cpp b/NorthstarDLL/shared/exploit_fixes/exploitfixes.cpp index 240c352c..e4430fd4 100644 --- a/NorthstarDLL/exploitfixes.cpp +++ b/NorthstarDLL/shared/exploit_fixes/exploitfixes.cpp @@ -1,11 +1,11 @@ #include "pch.h" -#include "cvar.h" -#include "limits.h" -#include "dedicated.h" -#include "tier0.h" -#include "r2engine.h" -#include "r2client.h" -#include "vector.h" +#include "core/convar/cvar.h" +#include "ns_limits.h" +#include "dedicated/dedicated.h" +#include "core/tier0.h" +#include "engine/r2engine.h" +#include "client/r2client.h" +#include "core/math/vector.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/exploitfixes_lzss.cpp b/NorthstarDLL/shared/exploit_fixes/exploitfixes_lzss.cpp index 4205133a..4205133a 100644 --- a/NorthstarDLL/exploitfixes_lzss.cpp +++ b/NorthstarDLL/shared/exploit_fixes/exploitfixes_lzss.cpp diff --git a/NorthstarDLL/exploitfixes_utf8parser.cpp b/NorthstarDLL/shared/exploit_fixes/exploitfixes_utf8parser.cpp index e2510765..e2510765 100644 --- a/NorthstarDLL/exploitfixes_utf8parser.cpp +++ b/NorthstarDLL/shared/exploit_fixes/exploitfixes_utf8parser.cpp diff --git a/NorthstarDLL/limits.cpp b/NorthstarDLL/shared/exploit_fixes/ns_limits.cpp index c254de52..49f80bab 100644 --- a/NorthstarDLL/limits.cpp +++ b/NorthstarDLL/shared/exploit_fixes/ns_limits.cpp @@ -1,13 +1,13 @@ #include "pch.h" -#include "limits.h" -#include "hoststate.h" -#include "r2client.h" -#include "r2engine.h" -#include "r2server.h" -#include "maxplayers.h" -#include "tier0.h" -#include "vector.h" -#include "serverauthentication.h" +#include "ns_limits.h" +#include "engine/hoststate.h" +#include "client/r2client.h" +#include "engine/r2engine.h" +#include "server/r2server.h" +#include "shared/maxplayers.h" +#include "core/tier0.h" +#include "core/math/vector.h" +#include "server/auth/serverauthentication.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/limits.h b/NorthstarDLL/shared/exploit_fixes/ns_limits.h index 068f91c9..bbc0a85f 100644 --- a/NorthstarDLL/limits.h +++ b/NorthstarDLL/shared/exploit_fixes/ns_limits.h @@ -1,6 +1,6 @@ #pragma once -#include "r2engine.h" -#include "convar.h" +#include "engine/r2engine.h" +#include "core/convar/convar.h" #include <unordered_map> struct PlayerLimitData diff --git a/NorthstarDLL/keyvalues.cpp b/NorthstarDLL/shared/keyvalues.cpp index afb7ae30..fe7d6299 100644 --- a/NorthstarDLL/keyvalues.cpp +++ b/NorthstarDLL/shared/keyvalues.cpp @@ -1,1316 +1,1316 @@ -#include "pch.h"
-#include "keyvalues.h"
-#include <winnt.h>
-
-// implementation of the ConVar class
-// heavily based on https://github.com/Mauler125/r5sdk/blob/master/r5dev/vpc/keyvalues.cpp
-
-typedef int HKeySymbol;
-#define INVALID_KEY_SYMBOL (-1)
-
-#define MAKE_3_BYTES_FROM_1_AND_2(x1, x2) ((((uint16_t)x2) << 8) | (uint8_t)(x1))
-#define SPLIT_3_BYTES_INTO_1_AND_2(x1, x2, x3) \
- do \
- { \
- x1 = (uint8_t)(x3); \
- x2 = (uint16_t)((x3) >> 8); \
- } while (0)
-
-struct CKeyValuesSystem
-{
- public:
- struct __VTable
- {
- char pad0[8 * 3]; // 2 methods
- HKeySymbol (*GetSymbolForString)(CKeyValuesSystem* self, const char* name, bool bCreate);
- const char* (*GetStringForSymbol)(CKeyValuesSystem* self, HKeySymbol symbol);
- char pad1[8 * 5];
- HKeySymbol (*GetSymbolForStringCaseSensitive)(
- CKeyValuesSystem* self, HKeySymbol& hCaseInsensitiveSymbol, const char* name, bool bCreate);
- };
-
- const __VTable* m_pVtable;
-};
-
-int (*V_UTF8ToUnicode)(const char* pUTF8, wchar_t* pwchDest, int cubDestSizeInBytes);
-int (*V_UnicodeToUTF8)(const wchar_t* pUnicode, char* pUTF8, int cubDestSizeInBytes);
-CKeyValuesSystem* (*KeyValuesSystem)();
-
-KeyValues::KeyValues() {} // default constructor for copying and such
-
-//-----------------------------------------------------------------------------
-// Purpose: Constructor
-// Input : *pszSetName -
-//-----------------------------------------------------------------------------
-KeyValues::KeyValues(const char* pszSetName)
-{
- Init();
- SetName(pszSetName);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Constructor
-// Input : *pszSetName -
-// *pszFirstKey -
-// *pszFirstValue -
-//-----------------------------------------------------------------------------
-KeyValues::KeyValues(const char* pszSsetName, const char* pszFirstKey, const char* pszFirstValue)
-{
- Init();
- SetName(pszSsetName);
- SetString(pszFirstKey, pszFirstValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Constructor
-// Input : *pszSetName -
-// *pszFirstKey -
-// *pwszFirstValue -
-//-----------------------------------------------------------------------------
-KeyValues::KeyValues(const char* pszSetName, const char* pszFirstKey, const wchar_t* pwszFirstValue)
-{
- Init();
- SetName(pszSetName);
- SetWString(pszFirstKey, pwszFirstValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Constructor
-// Input : *pszSetName -
-// *pszFirstKey -
-// iFirstValue -
-//-----------------------------------------------------------------------------
-KeyValues::KeyValues(const char* pszSetName, const char* pszFirstKey, int iFirstValue)
-{
- Init();
- SetName(pszSetName);
- SetInt(pszFirstKey, iFirstValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Constructor
-// Input : *pszSetName -
-// *pszFirstKey -
-// *pszFirstValue -
-// *pszSecondKey -
-// *pszSecondValue -
-//-----------------------------------------------------------------------------
-KeyValues::KeyValues(
- const char* pszSetName, const char* pszFirstKey, const char* pszFirstValue, const char* pszSecondKey, const char* pszSecondValue)
-{
- Init();
- SetName(pszSetName);
- SetString(pszFirstKey, pszFirstValue);
- SetString(pszSecondKey, pszSecondValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Constructor
-// Input : *pszSetName -
-// *pszFirstKey -
-// iFirstValue -
-// *pszSecondKey -
-// iSecondValue -
-//-----------------------------------------------------------------------------
-KeyValues::KeyValues(const char* pszSetName, const char* pszFirstKey, int iFirstValue, const char* pszSecondKey, int iSecondValue)
-{
- Init();
- SetName(pszSetName);
- SetInt(pszFirstKey, iFirstValue);
- SetInt(pszSecondKey, iSecondValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Destructor
-//-----------------------------------------------------------------------------
-KeyValues::~KeyValues(void)
-{
- RemoveEverything();
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Initialize member variables
-//-----------------------------------------------------------------------------
-void KeyValues::Init(void)
-{
- m_iKeyName = 0;
- m_iKeyNameCaseSensitive1 = 0;
- m_iKeyNameCaseSensitive2 = 0;
- m_iDataType = TYPE_NONE;
-
- m_pSub = nullptr;
- m_pPeer = nullptr;
- m_pChain = nullptr;
-
- m_sValue = nullptr;
- m_wsValue = nullptr;
- m_pValue = nullptr;
-
- m_bHasEscapeSequences = 0;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Clear out all subkeys, and the current value
-//-----------------------------------------------------------------------------
-void KeyValues::Clear(void)
-{
- delete m_pSub;
- m_pSub = nullptr;
- m_iDataType = TYPE_NONE;
-}
-
-//-----------------------------------------------------------------------------
-// for backwards compat - we used to need this to force the free to run from the same DLL
-// as the alloc
-//-----------------------------------------------------------------------------
-void KeyValues::DeleteThis(void)
-{
- delete this;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: remove everything
-//-----------------------------------------------------------------------------
-void KeyValues::RemoveEverything(void)
-{
- KeyValues* dat;
- KeyValues* datNext = nullptr;
- for (dat = m_pSub; dat != nullptr; dat = datNext)
- {
- datNext = dat->m_pPeer;
- dat->m_pPeer = nullptr;
- delete dat;
- }
-
- for (dat = m_pPeer; dat && dat != this; dat = datNext)
- {
- datNext = dat->m_pPeer;
- dat->m_pPeer = nullptr;
- delete dat;
- }
-
- delete[] m_sValue;
- m_sValue = nullptr;
- delete[] m_wsValue;
- m_wsValue = nullptr;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Find a keyValue, create it if it is not found.
-// Set bCreate to true to create the key if it doesn't already exist
-// (which ensures a valid pointer will be returned)
-// Input : *pszKeyName -
-// bCreate -
-// Output : *KeyValues
-//-----------------------------------------------------------------------------
-KeyValues* KeyValues::FindKey(const char* pszKeyName, bool bCreate)
-{
- assert(this, "Member function called on NULL KeyValues");
-
- if (!pszKeyName || !*pszKeyName)
- return this;
-
- const char* pSubStr = strchr(pszKeyName, '/');
-
- HKeySymbol iSearchStr = KeyValuesSystem()->m_pVtable->GetSymbolForString(KeyValuesSystem(), pszKeyName, bCreate);
- if (iSearchStr == INVALID_KEY_SYMBOL)
- {
- // not found, couldn't possibly be in key value list
- return nullptr;
- }
-
- KeyValues* pLastKVs = nullptr;
- KeyValues* pCurrentKVs;
- // find the searchStr in the current peer list
- for (pCurrentKVs = m_pSub; pCurrentKVs != NULL; pCurrentKVs = pCurrentKVs->m_pPeer)
- {
- pLastKVs = pCurrentKVs; // record the last item looked at (for if we need to append to the end of the list)
-
- // symbol compare
- if (pLastKVs->m_iKeyName == (uint32_t)iSearchStr)
- break;
- }
-
- if (!pCurrentKVs && m_pChain)
- pCurrentKVs = m_pChain->FindKey(pszKeyName, false);
-
- // make sure a key was found
- if (!pCurrentKVs)
- {
- if (bCreate)
- {
- // we need to create a new key
- pCurrentKVs = new KeyValues(pszKeyName);
- // Assert(dat != NULL);
-
- // insert new key at end of list
- if (pLastKVs)
- pLastKVs->m_pPeer = pCurrentKVs;
- else
- m_pSub = pCurrentKVs;
-
- pCurrentKVs->m_pPeer = NULL;
-
- // a key graduates to be a submsg as soon as it's m_pSub is set
- // this should be the only place m_pSub is set
- m_iDataType = TYPE_NONE;
- }
- else
- {
- return NULL;
- }
- }
-
- // if we've still got a subStr we need to keep looking deeper in the tree
- if (pSubStr)
- {
- // recursively chain down through the paths in the string
- return pCurrentKVs->FindKey(pSubStr + 1, bCreate);
- }
-
- return pCurrentKVs;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Locate last child. Returns NULL if we have no children
-// Output : *KeyValues
-//-----------------------------------------------------------------------------
-KeyValues* KeyValues::FindLastSubKey(void) const
-{
- // No children?
- if (m_pSub == nullptr)
- return nullptr;
-
- // Scan for the last one
- KeyValues* pLastChild = m_pSub;
- while (pLastChild->m_pPeer)
- pLastChild = pLastChild->m_pPeer;
- return pLastChild;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Adds a subkey. Make sure the subkey isn't a child of some other keyvalues
-// Input : *pSubKey -
-//-----------------------------------------------------------------------------
-void KeyValues::AddSubKey(KeyValues* pSubkey)
-{
- // Make sure the subkey isn't a child of some other keyvalues
- assert(pSubkey != nullptr);
- assert(pSubkey->m_pPeer == nullptr);
-
- // add into subkey list
- if (m_pSub == nullptr)
- {
- m_pSub = pSubkey;
- }
- else
- {
- KeyValues* pTempDat = m_pSub;
- while (pTempDat->GetNextKey() != nullptr)
- {
- pTempDat = pTempDat->GetNextKey();
- }
-
- pTempDat->SetNextKey(pSubkey);
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Remove a subkey from the list
-// Input : *pSubKey -
-//-----------------------------------------------------------------------------
-void KeyValues::RemoveSubKey(KeyValues* pSubKey)
-{
- if (!pSubKey)
- return;
-
- // check the list pointer
- if (m_pSub == pSubKey)
- {
- m_pSub = pSubKey->m_pPeer;
- }
- else
- {
- // look through the list
- KeyValues* kv = m_pSub;
- while (kv->m_pPeer)
- {
- if (kv->m_pPeer == pSubKey)
- {
- kv->m_pPeer = pSubKey->m_pPeer;
- break;
- }
-
- kv = kv->m_pPeer;
- }
- }
-
- pSubKey->m_pPeer = nullptr;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Insert a subkey at index
-// Input : nIndex -
-// *pSubKey -
-//-----------------------------------------------------------------------------
-void KeyValues::InsertSubKey(int nIndex, KeyValues* pSubKey)
-{
- // Sub key must be valid and not part of another chain
- assert(pSubKey && pSubKey->m_pPeer == nullptr);
-
- if (nIndex == 0)
- {
- pSubKey->m_pPeer = m_pSub;
- m_pSub = pSubKey;
- return;
- }
- else
- {
- int nCurrentIndex = 0;
- for (KeyValues* pIter = GetFirstSubKey(); pIter != nullptr; pIter = pIter->GetNextKey())
- {
- ++nCurrentIndex;
- if (nCurrentIndex == nIndex)
- {
- pSubKey->m_pPeer = pIter->m_pPeer;
- pIter->m_pPeer = pSubKey;
- return;
- }
- }
- // Index is out of range if we get here
- assert(0);
- return;
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Checks if key contains a subkey
-// Input : *pSubKey -
-// Output : true if contains, false otherwise
-//-----------------------------------------------------------------------------
-bool KeyValues::ContainsSubKey(KeyValues* pSubKey)
-{
- for (KeyValues* pIter = GetFirstSubKey(); pIter != nullptr; pIter = pIter->GetNextKey())
- {
- if (pSubKey == pIter)
- {
- return true;
- }
- }
- return false;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Swaps existing subkey with another
-// Input : *pExistingSubkey -
-// *pNewSubKey -
-//-----------------------------------------------------------------------------
-void KeyValues::SwapSubKey(KeyValues* pExistingSubkey, KeyValues* pNewSubKey)
-{
- assert(pExistingSubkey != nullptr && pNewSubKey != nullptr);
-
- // Make sure the new sub key isn't a child of some other keyvalues
- assert(pNewSubKey->m_pPeer == nullptr);
-
- // Check the list pointer
- if (m_pSub == pExistingSubkey)
- {
- pNewSubKey->m_pPeer = pExistingSubkey->m_pPeer;
- pExistingSubkey->m_pPeer = nullptr;
- m_pSub = pNewSubKey;
- }
- else
- {
- // Look through the list
- KeyValues* kv = m_pSub;
- while (kv->m_pPeer)
- {
- if (kv->m_pPeer == pExistingSubkey)
- {
- pNewSubKey->m_pPeer = pExistingSubkey->m_pPeer;
- pExistingSubkey->m_pPeer = nullptr;
- kv->m_pPeer = pNewSubKey;
- break;
- }
-
- kv = kv->m_pPeer;
- }
- // Existing sub key should always be found, otherwise it's a bug in the calling code.
- assert(kv->m_pPeer != nullptr);
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Elides subkey
-// Input : *pSubKey -
-//-----------------------------------------------------------------------------
-void KeyValues::ElideSubKey(KeyValues* pSubKey)
-{
- // This pointer's "next" pointer needs to be fixed up when we elide the key
- KeyValues** ppPointerToFix = &m_pSub;
- for (KeyValues* pKeyIter = m_pSub; pKeyIter != nullptr; ppPointerToFix = &pKeyIter->m_pPeer, pKeyIter = pKeyIter->GetNextKey())
- {
- if (pKeyIter == pSubKey)
- {
- if (pSubKey->m_pSub == nullptr)
- {
- // No children, simply remove the key
- *ppPointerToFix = pSubKey->m_pPeer;
- delete pSubKey;
- }
- else
- {
- *ppPointerToFix = pSubKey->m_pSub;
- // Attach the remainder of this chain to the last child of pSubKey
- KeyValues* pChildIter = pSubKey->m_pSub;
- while (pChildIter->m_pPeer != nullptr)
- {
- pChildIter = pChildIter->m_pPeer;
- }
- // Now points to the last child of pSubKey
- pChildIter->m_pPeer = pSubKey->m_pPeer;
- // Detach the node to be elided
- pSubKey->m_pSub = nullptr;
- pSubKey->m_pPeer = nullptr;
- delete pSubKey;
- }
- return;
- }
- }
- // Key not found; that's caller error.
- assert(0);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Check if a keyName has no value assigned to it.
-// Input : *pszKeyName -
-// Output : true on success, false otherwise
-//-----------------------------------------------------------------------------
-bool KeyValues::IsEmpty(const char* pszKeyName)
-{
- KeyValues* pKey = FindKey(pszKeyName, false);
- if (!pKey)
- return true;
-
- if (pKey->m_iDataType == TYPE_NONE && pKey->m_pSub == nullptr)
- return true;
-
- return false;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: gets the first true sub key
-// Output : *KeyValues
-//-----------------------------------------------------------------------------
-KeyValues* KeyValues::GetFirstTrueSubKey(void) const
-{
- assert(this, "Member function called on NULL KeyValues");
- KeyValues* pRet = this ? m_pSub : nullptr;
- while (pRet && pRet->m_iDataType != TYPE_NONE)
- pRet = pRet->m_pPeer;
-
- return pRet;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: gets the next true sub key
-// Output : *KeyValues
-//-----------------------------------------------------------------------------
-KeyValues* KeyValues::GetNextTrueSubKey(void) const
-{
- assert(this, "Member function called on NULL KeyValues");
- KeyValues* pRet = this ? m_pPeer : nullptr;
- while (pRet && pRet->m_iDataType != TYPE_NONE)
- pRet = pRet->m_pPeer;
-
- return pRet;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: gets the first value
-// Output : *KeyValues
-//-----------------------------------------------------------------------------
-KeyValues* KeyValues::GetFirstValue(void) const
-{
- assert(this, "Member function called on NULL KeyValues");
- KeyValues* pRet = this ? m_pSub : nullptr;
- while (pRet && pRet->m_iDataType == TYPE_NONE)
- pRet = pRet->m_pPeer;
-
- return pRet;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: gets the next value
-// Output : *KeyValues
-//-----------------------------------------------------------------------------
-KeyValues* KeyValues::GetNextValue(void) const
-{
- assert(this, "Member function called on NULL KeyValues");
- KeyValues* pRet = this ? m_pPeer : nullptr;
- while (pRet && pRet->m_iDataType == TYPE_NONE)
- pRet = pRet->m_pPeer;
-
- return pRet;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return the first subkey in the list
-//-----------------------------------------------------------------------------
-KeyValues* KeyValues::GetFirstSubKey() const
-{
- assert(this, "Member function called on NULL KeyValues");
- return this ? m_pSub : nullptr;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return the next subkey
-//-----------------------------------------------------------------------------
-KeyValues* KeyValues::GetNextKey() const
-{
- assert(this, "Member function called on NULL KeyValues");
- return this ? m_pPeer : nullptr;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get the name of the current key section
-// Output : const char*
-//-----------------------------------------------------------------------------
-const char* KeyValues::GetName(void) const
-{
- return KeyValuesSystem()->m_pVtable->GetStringForSymbol(
- KeyValuesSystem(), MAKE_3_BYTES_FROM_1_AND_2(m_iKeyNameCaseSensitive1, m_iKeyNameCaseSensitive2));
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get the integer value of a keyName. Default value is returned
-// if the keyName can't be found.
-// Input : *pszKeyName -
-// nDefaultValue -
-// Output : int
-//-----------------------------------------------------------------------------
-int KeyValues::GetInt(const char* pszKeyName, int iDefaultValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, false);
- if (pKey)
- {
- switch (pKey->m_iDataType)
- {
- case TYPE_STRING:
- return atoi(pKey->m_sValue);
- case TYPE_WSTRING:
- return _wtoi(pKey->m_wsValue);
- case TYPE_FLOAT:
- return static_cast<int>(pKey->m_flValue);
- case TYPE_UINT64:
- // can't convert, since it would lose data
- assert(0);
- return 0;
- case TYPE_INT:
- case TYPE_PTR:
- default:
- return pKey->m_iValue;
- };
- }
- return iDefaultValue;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get the integer value of a keyName. Default value is returned
-// if the keyName can't be found.
-// Input : *pszKeyName -
-// nDefaultValue -
-// Output : uint64_t
-//-----------------------------------------------------------------------------
-uint64_t KeyValues::GetUint64(const char* pszKeyName, uint64_t nDefaultValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, false);
- if (pKey)
- {
- switch (pKey->m_iDataType)
- {
- case TYPE_STRING:
- {
- uint64_t uiResult = 0ull;
- sscanf(pKey->m_sValue, "%lld", &uiResult);
- return uiResult;
- }
- case TYPE_WSTRING:
- {
- uint64_t uiResult = 0ull;
- swscanf(pKey->m_wsValue, L"%lld", &uiResult);
- return uiResult;
- }
- case TYPE_FLOAT:
- return static_cast<int>(pKey->m_flValue);
- case TYPE_UINT64:
- return *reinterpret_cast<uint64_t*>(pKey->m_sValue);
- case TYPE_PTR:
- return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(pKey->m_pValue));
- case TYPE_INT:
- default:
- return pKey->m_iValue;
- };
- }
- return nDefaultValue;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get the pointer value of a keyName. Default value is returned
-// if the keyName can't be found.
-// Input : *pszKeyName -
-// pDefaultValue -
-// Output : void*
-//-----------------------------------------------------------------------------
-void* KeyValues::GetPtr(const char* pszKeyName, void* pDefaultValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, false);
- if (pKey)
- {
- switch (pKey->m_iDataType)
- {
- case TYPE_PTR:
- return pKey->m_pValue;
-
- case TYPE_WSTRING:
- case TYPE_STRING:
- case TYPE_FLOAT:
- case TYPE_INT:
- case TYPE_UINT64:
- default:
- return nullptr;
- };
- }
- return pDefaultValue;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get the float value of a keyName. Default value is returned
-// if the keyName can't be found.
-// Input : *pszKeyName -
-// flDefaultValue -
-// Output : float
-//-----------------------------------------------------------------------------
-float KeyValues::GetFloat(const char* pszKeyName, float flDefaultValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, false);
- if (pKey)
- {
- switch (pKey->m_iDataType)
- {
- case TYPE_STRING:
- return static_cast<float>(atof(pKey->m_sValue));
- case TYPE_WSTRING:
- return static_cast<float>(_wtof(pKey->m_wsValue)); // no wtof
- case TYPE_FLOAT:
- return pKey->m_flValue;
- case TYPE_INT:
- return static_cast<float>(pKey->m_iValue);
- case TYPE_UINT64:
- return static_cast<float>((*(reinterpret_cast<uint64_t*>(pKey->m_sValue))));
- case TYPE_PTR:
- default:
- return 0.0f;
- };
- }
- return flDefaultValue;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get the string pointer of a keyName. Default value is returned
-// if the keyName can't be found.
-// // Input : *pszKeyName -
-// pszDefaultValue -
-// Output : const char*
-//-----------------------------------------------------------------------------
-const char* KeyValues::GetString(const char* pszKeyName, const char* pszDefaultValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, false);
- if (pKey)
- {
- // convert the data to string form then return it
- char buf[64];
- switch (pKey->m_iDataType)
- {
- case TYPE_FLOAT:
- snprintf(buf, sizeof(buf), "%f", pKey->m_flValue);
- SetString(pszKeyName, buf);
- break;
- case TYPE_PTR:
- snprintf(buf, sizeof(buf), "%lld", reinterpret_cast<uint64_t>(pKey->m_pValue));
- SetString(pszKeyName, buf);
- break;
- case TYPE_INT:
- snprintf(buf, sizeof(buf), "%d", pKey->m_iValue);
- SetString(pszKeyName, buf);
- break;
- case TYPE_UINT64:
- snprintf(buf, sizeof(buf), "%lld", *(reinterpret_cast<uint64_t*>(pKey->m_sValue)));
- SetString(pszKeyName, buf);
- break;
- case TYPE_COLOR:
- snprintf(buf, sizeof(buf), "%d %d %d %d", pKey->m_Color[0], pKey->m_Color[1], pKey->m_Color[2], pKey->m_Color[3]);
- SetString(pszKeyName, buf);
- break;
-
- case TYPE_WSTRING:
- {
- // convert the string to char *, set it for future use, and return it
- char wideBuf[512];
- int result = V_UnicodeToUTF8(pKey->m_wsValue, wideBuf, 512);
- if (result)
- {
- // note: this will copy wideBuf
- SetString(pszKeyName, wideBuf);
- }
- else
- {
- return pszDefaultValue;
- }
- break;
- }
- case TYPE_STRING:
- break;
- default:
- return pszDefaultValue;
- };
-
- return pKey->m_sValue;
- }
- return pszDefaultValue;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get the wide string pointer of a keyName. Default value is returned
-// if the keyName can't be found.
-// // Input : *pszKeyName -
-// pwszDefaultValue -
-// Output : const wchar_t*
-//-----------------------------------------------------------------------------
-const wchar_t* KeyValues::GetWString(const char* pszKeyName, const wchar_t* pwszDefaultValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, false);
- if (pKey)
- {
- wchar_t wbuf[64];
- switch (pKey->m_iDataType)
- {
- case TYPE_FLOAT:
- swprintf(wbuf, ARRAYSIZE(wbuf), L"%f", pKey->m_flValue);
- SetWString(pszKeyName, wbuf);
- break;
- case TYPE_PTR:
- swprintf(wbuf, ARRAYSIZE(wbuf), L"%lld", static_cast<int64_t>(reinterpret_cast<size_t>(pKey->m_pValue)));
- SetWString(pszKeyName, wbuf);
- break;
- case TYPE_INT:
- swprintf(wbuf, ARRAYSIZE(wbuf), L"%d", pKey->m_iValue);
- SetWString(pszKeyName, wbuf);
- break;
- case TYPE_UINT64:
- {
- swprintf(wbuf, ARRAYSIZE(wbuf), L"%lld", *(reinterpret_cast<uint64_t*>(pKey->m_sValue)));
- SetWString(pszKeyName, wbuf);
- }
- break;
- case TYPE_COLOR:
- swprintf(wbuf, ARRAYSIZE(wbuf), L"%d %d %d %d", pKey->m_Color[0], pKey->m_Color[1], pKey->m_Color[2], pKey->m_Color[3]);
- SetWString(pszKeyName, wbuf);
- break;
-
- case TYPE_WSTRING:
- break;
- case TYPE_STRING:
- {
- size_t bufSize = strlen(pKey->m_sValue) + 1;
- wchar_t* pWBuf = new wchar_t[bufSize];
- int result = V_UTF8ToUnicode(pKey->m_sValue, pWBuf, static_cast<int>(bufSize * sizeof(wchar_t)));
- if (result >= 0) // may be a zero length string
- {
- SetWString(pszKeyName, pWBuf);
- delete[] pWBuf;
- }
- else
- {
- delete[] pWBuf;
- return pwszDefaultValue;
- }
-
- break;
- }
- default:
- return pwszDefaultValue;
- };
-
- return reinterpret_cast<const wchar_t*>(pKey->m_wsValue);
- }
- return pwszDefaultValue;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Gets a color
-// Input : *pszKeyName -
-// &defaultColor -
-// Output : Color
-//-----------------------------------------------------------------------------
-Color KeyValues::GetColor(const char* pszKeyName, const Color& defaultColor)
-{
- Color color = defaultColor;
- KeyValues* pKey = FindKey(pszKeyName, false);
- if (pKey)
- {
- if (pKey->m_iDataType == TYPE_COLOR)
- {
- color[0] = pKey->m_Color[0];
- color[1] = pKey->m_Color[1];
- color[2] = pKey->m_Color[2];
- color[3] = pKey->m_Color[3];
- }
- else if (pKey->m_iDataType == TYPE_FLOAT)
- {
- color[0] = static_cast<unsigned char>(pKey->m_flValue);
- }
- else if (pKey->m_iDataType == TYPE_INT)
- {
- color[0] = static_cast<unsigned char>(pKey->m_iValue);
- }
- else if (pKey->m_iDataType == TYPE_STRING)
- {
- // parse the colors out of the string
- float a = 0, b = 0, c = 0, d = 0;
- sscanf(pKey->m_sValue, "%f %f %f %f", &a, &b, &c, &d);
- color[0] = static_cast<unsigned char>(a);
- color[1] = static_cast<unsigned char>(b);
- color[2] = static_cast<unsigned char>(c);
- color[3] = static_cast<unsigned char>(d);
- }
- }
- return color;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get the data type of the value stored in a keyName
-// Input : *pszKeyName -
-//-----------------------------------------------------------------------------
-KeyValuesTypes_t KeyValues::GetDataType(const char* pszKeyName)
-{
- KeyValues* pKey = FindKey(pszKeyName, false);
- if (pKey)
- return static_cast<KeyValuesTypes_t>(pKey->m_iDataType);
-
- return TYPE_NONE;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get the data type of the value stored in this keyName
-//-----------------------------------------------------------------------------
-KeyValuesTypes_t KeyValues::GetDataType(void) const
-{
- return static_cast<KeyValuesTypes_t>(m_iDataType);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Set the integer value of a keyName.
-// Input : *pszKeyName -
-// iValue -
-//-----------------------------------------------------------------------------
-void KeyValues::SetInt(const char* pszKeyName, int iValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, true);
- if (pKey)
- {
- pKey->m_iValue = iValue;
- pKey->m_iDataType = TYPE_INT;
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Set the integer value of a keyName.
-//-----------------------------------------------------------------------------
-void KeyValues::SetUint64(const char* pszKeyName, uint64_t nValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, true);
-
- if (pKey)
- {
- // delete the old value
- delete[] pKey->m_sValue;
- // make sure we're not storing the WSTRING - as we're converting over to STRING
- delete[] pKey->m_wsValue;
- pKey->m_wsValue = nullptr;
-
- pKey->m_sValue = new char[sizeof(uint64_t)];
- *(reinterpret_cast<uint64_t*>(pKey->m_sValue)) = nValue;
- pKey->m_iDataType = TYPE_UINT64;
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Set the float value of a keyName.
-// Input : *pszKeyName -
-// flValue -
-//-----------------------------------------------------------------------------
-void KeyValues::SetFloat(const char* pszKeyName, float flValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, true);
- if (pKey)
- {
- pKey->m_flValue = flValue;
- pKey->m_iDataType = TYPE_FLOAT;
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Set the name value of a keyName.
-// Input : *pszSetName -
-//-----------------------------------------------------------------------------
-void KeyValues::SetName(const char* pszSetName)
-{
- HKeySymbol hCaseSensitiveKeyName = INVALID_KEY_SYMBOL, hCaseInsensitiveKeyName = INVALID_KEY_SYMBOL;
- hCaseSensitiveKeyName =
- KeyValuesSystem()->m_pVtable->GetSymbolForStringCaseSensitive(KeyValuesSystem(), hCaseInsensitiveKeyName, pszSetName, false);
-
- m_iKeyName = hCaseInsensitiveKeyName;
- SPLIT_3_BYTES_INTO_1_AND_2(m_iKeyNameCaseSensitive1, m_iKeyNameCaseSensitive2, hCaseSensitiveKeyName);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Set the pointer value of a keyName.
-// Input : *pszKeyName -
-// *pValue -
-//-----------------------------------------------------------------------------
-void KeyValues::SetPtr(const char* pszKeyName, void* pValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, true);
-
- if (pKey)
- {
- pKey->m_pValue = pValue;
- pKey->m_iDataType = TYPE_PTR;
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Set the string value (internal)
-// Input : *pszValue -
-//-----------------------------------------------------------------------------
-void KeyValues::SetStringValue(char const* pszValue)
-{
- // delete the old value
- delete[] m_sValue;
- // make sure we're not storing the WSTRING - as we're converting over to STRING
- delete[] m_wsValue;
- m_wsValue = nullptr;
-
- if (!pszValue)
- {
- // ensure a valid value
- pszValue = "";
- }
-
- // allocate memory for the new value and copy it in
- size_t len = strlen(pszValue);
- m_sValue = new char[len + 1];
- memcpy(m_sValue, pszValue, len + 1);
-
- m_iDataType = TYPE_STRING;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Sets this key's peer to the KeyValues passed in
-// Input : *pDat -
-//-----------------------------------------------------------------------------
-void KeyValues::SetNextKey(KeyValues* pDat)
-{
- m_pPeer = pDat;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Set the string value of a keyName.
-// Input : *pszKeyName -
-// *pszValue -
-//-----------------------------------------------------------------------------
-void KeyValues::SetString(const char* pszKeyName, const char* pszValue)
-{
- if (KeyValues* pKey = FindKey(pszKeyName, true))
- {
- pKey->SetStringValue(pszValue);
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Set the string value of a keyName.
-// Input : *pszKeyName -
-// *pwszValue -
-//-----------------------------------------------------------------------------
-void KeyValues::SetWString(const char* pszKeyName, const wchar_t* pwszValue)
-{
- KeyValues* pKey = FindKey(pszKeyName, true);
- if (pKey)
- {
- // delete the old value
- delete[] pKey->m_wsValue;
- // make sure we're not storing the STRING - as we're converting over to WSTRING
- delete[] pKey->m_sValue;
- pKey->m_sValue = nullptr;
-
- if (!pwszValue)
- {
- // ensure a valid value
- pwszValue = L"";
- }
-
- // allocate memory for the new value and copy it in
- size_t len = wcslen(pwszValue);
- pKey->m_wsValue = new wchar_t[len + 1];
- memcpy(pKey->m_wsValue, pwszValue, (len + 1) * sizeof(wchar_t));
-
- pKey->m_iDataType = TYPE_WSTRING;
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Sets a color
-// Input : *pszKeyName -
-// color -
-//-----------------------------------------------------------------------------
-void KeyValues::SetColor(const char* pszKeyName, Color color)
-{
- KeyValues* pKey = FindKey(pszKeyName, true);
-
- if (pKey)
- {
- pKey->m_iDataType = TYPE_COLOR;
- pKey->m_Color[0] = color[0];
- pKey->m_Color[1] = color[1];
- pKey->m_Color[2] = color[2];
- pKey->m_Color[3] = color[3];
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Input : &src -
-//-----------------------------------------------------------------------------
-void KeyValues::RecursiveCopyKeyValues(KeyValues& src)
-{
- // garymcthack - need to check this code for possible buffer overruns.
-
- m_iKeyName = src.m_iKeyName;
- m_iKeyNameCaseSensitive1 = src.m_iKeyNameCaseSensitive1;
- m_iKeyNameCaseSensitive2 = src.m_iKeyNameCaseSensitive2;
-
- if (!src.m_pSub)
- {
- m_iDataType = src.m_iDataType;
- char buf[256];
- switch (src.m_iDataType)
- {
- case TYPE_NONE:
- break;
- case TYPE_STRING:
- if (src.m_sValue)
- {
- size_t len = strlen(src.m_sValue) + 1;
- m_sValue = new char[len];
- strncpy(m_sValue, src.m_sValue, len);
- }
- break;
- case TYPE_INT:
- {
- m_iValue = src.m_iValue;
- snprintf(buf, sizeof(buf), "%d", m_iValue);
- size_t len = strlen(buf) + 1;
- m_sValue = new char[len];
- strncpy(m_sValue, buf, len);
- }
- break;
- case TYPE_FLOAT:
- {
- m_flValue = src.m_flValue;
- snprintf(buf, sizeof(buf), "%f", m_flValue);
- size_t len = strlen(buf) + 1;
- m_sValue = new char[len];
- strncpy(m_sValue, buf, len);
- }
- break;
- case TYPE_PTR:
- {
- m_pValue = src.m_pValue;
- }
- break;
- case TYPE_UINT64:
- {
- m_sValue = new char[sizeof(uint64_t)];
- memcpy(m_sValue, src.m_sValue, sizeof(uint64_t));
- }
- break;
- case TYPE_COLOR:
- {
- m_Color[0] = src.m_Color[0];
- m_Color[1] = src.m_Color[1];
- m_Color[2] = src.m_Color[2];
- m_Color[3] = src.m_Color[3];
- }
- break;
-
- default:
- {
- // do nothing . .what the heck is this?
- assert(0);
- }
- break;
- }
- }
-
- // Handle the immediate child
- if (src.m_pSub)
- {
- m_pSub = new KeyValues;
-
- m_pSub->Init();
- m_pSub->SetName(nullptr);
-
- m_pSub->RecursiveCopyKeyValues(*src.m_pSub);
- }
-
- // Handle the immediate peer
- if (src.m_pPeer)
- {
- m_pPeer = new KeyValues;
-
- m_pPeer->Init();
- m_pPeer->SetName(nullptr);
-
- m_pPeer->RecursiveCopyKeyValues(*src.m_pPeer);
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Make a new copy of all subkeys, add them all to the passed-in keyvalues
-// Input : *pParent -
-//-----------------------------------------------------------------------------
-void KeyValues::CopySubkeys(KeyValues* pParent) const
-{
- // recursively copy subkeys
- // Also maintain ordering....
- KeyValues* pPrev = nullptr;
- for (KeyValues* pSub = m_pSub; pSub != nullptr; pSub = pSub->m_pPeer)
- {
- // take a copy of the subkey
- KeyValues* pKey = pSub->MakeCopy();
-
- // add into subkey list
- if (pPrev)
- {
- pPrev->m_pPeer = pKey;
- }
- else
- {
- pParent->m_pSub = pKey;
- }
- pKey->m_pPeer = nullptr;
- pPrev = pKey;
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Makes a copy of the whole key-value pair set
-// Output : KeyValues*
-//-----------------------------------------------------------------------------
-KeyValues* KeyValues::MakeCopy(void) const
-{
- KeyValues* pNewKeyValue = new KeyValues;
-
- pNewKeyValue->Init();
- pNewKeyValue->SetName(GetName());
-
- // copy data
- pNewKeyValue->m_iDataType = m_iDataType;
- switch (m_iDataType)
- {
- case TYPE_STRING:
- {
- if (m_sValue)
- {
- size_t len = strlen(m_sValue);
- assert(!pNewKeyValue->m_sValue);
- pNewKeyValue->m_sValue = new char[len + 1];
- memcpy(pNewKeyValue->m_sValue, m_sValue, len + 1);
- }
- }
- break;
- case TYPE_WSTRING:
- {
- if (m_wsValue)
- {
- size_t len = wcslen(m_wsValue);
- pNewKeyValue->m_wsValue = new wchar_t[len + 1];
- memcpy(pNewKeyValue->m_wsValue, m_wsValue, len + 1 * sizeof(wchar_t));
- }
- }
- break;
-
- case TYPE_INT:
- pNewKeyValue->m_iValue = m_iValue;
- break;
-
- case TYPE_FLOAT:
- pNewKeyValue->m_flValue = m_flValue;
- break;
-
- case TYPE_PTR:
- pNewKeyValue->m_pValue = m_pValue;
- break;
-
- case TYPE_COLOR:
- pNewKeyValue->m_Color[0] = m_Color[0];
- pNewKeyValue->m_Color[1] = m_Color[1];
- pNewKeyValue->m_Color[2] = m_Color[2];
- pNewKeyValue->m_Color[3] = m_Color[3];
- break;
-
- case TYPE_UINT64:
- pNewKeyValue->m_sValue = new char[sizeof(uint64_t)];
- memcpy(pNewKeyValue->m_sValue, m_sValue, sizeof(uint64_t));
- break;
- };
-
- // recursively copy subkeys
- CopySubkeys(pNewKeyValue);
- return pNewKeyValue;
-}
-
-ON_DLL_LOAD("vstdlib.dll", KeyValues, (CModule module))
-{
- V_UTF8ToUnicode = module.GetExport("V_UTF8ToUnicode").As<int (*)(const char*, wchar_t*, int)>();
- V_UnicodeToUTF8 = module.GetExport("V_UnicodeToUTF8").As<int (*)(const wchar_t*, char*, int)>();
- KeyValuesSystem = module.GetExport("KeyValuesSystem").As<CKeyValuesSystem* (*)()>();
-}
-
-AUTOHOOK_INIT()
-
-// clang-format off
-AUTOHOOK(KeyValues__LoadFromBuffer, engine.dll + 0x426C30,
-char, __fastcall, (KeyValues* self, const char* pResourceName, const char* pBuffer, void* pFileSystem, void* a5, void* a6, int a7))
-// clang-format on
-{
- static void* pSavedFilesystemPtr = nullptr;
-
- // this is just to allow playlists to get a valid pFileSystem ptr for kv building, other functions that call this particular overload of
- // LoadFromBuffer seem to get called on network stuff exclusively not exactly sure what the address wanted here is, so just taking it
- // from a function call that always happens before playlists is loaded
-
- // note: would be better if we could serialize this to disk for playlists, as this method breaks saving playlists in demos
- if (pFileSystem != nullptr)
- pSavedFilesystemPtr = pFileSystem;
- if (!pFileSystem && !strcmp(pResourceName, "playlists"))
- pFileSystem = pSavedFilesystemPtr;
-
- return KeyValues__LoadFromBuffer(self, pResourceName, pBuffer, pFileSystem, a5, a6, a7);
-}
-
-ON_DLL_LOAD("engine.dll", EngineKeyValues, (CModule module))
-{
- AUTOHOOK_DISPATCH()
-}
+#include "pch.h" +#include "keyvalues.h" +#include <winnt.h> + +// implementation of the ConVar class +// heavily based on https://github.com/Mauler125/r5sdk/blob/master/r5dev/vpc/keyvalues.cpp + +typedef int HKeySymbol; +#define INVALID_KEY_SYMBOL (-1) + +#define MAKE_3_BYTES_FROM_1_AND_2(x1, x2) ((((uint16_t)x2) << 8) | (uint8_t)(x1)) +#define SPLIT_3_BYTES_INTO_1_AND_2(x1, x2, x3) \ + do \ + { \ + x1 = (uint8_t)(x3); \ + x2 = (uint16_t)((x3) >> 8); \ + } while (0) + +struct CKeyValuesSystem +{ + public: + struct __VTable + { + char pad0[8 * 3]; // 2 methods + HKeySymbol (*GetSymbolForString)(CKeyValuesSystem* self, const char* name, bool bCreate); + const char* (*GetStringForSymbol)(CKeyValuesSystem* self, HKeySymbol symbol); + char pad1[8 * 5]; + HKeySymbol (*GetSymbolForStringCaseSensitive)( + CKeyValuesSystem* self, HKeySymbol& hCaseInsensitiveSymbol, const char* name, bool bCreate); + }; + + const __VTable* m_pVtable; +}; + +int (*V_UTF8ToUnicode)(const char* pUTF8, wchar_t* pwchDest, int cubDestSizeInBytes); +int (*V_UnicodeToUTF8)(const wchar_t* pUnicode, char* pUTF8, int cubDestSizeInBytes); +CKeyValuesSystem* (*KeyValuesSystem)(); + +KeyValues::KeyValues() {} // default constructor for copying and such + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : *pszSetName - +//----------------------------------------------------------------------------- +KeyValues::KeyValues(const char* pszSetName) +{ + Init(); + SetName(pszSetName); +} + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : *pszSetName - +// *pszFirstKey - +// *pszFirstValue - +//----------------------------------------------------------------------------- +KeyValues::KeyValues(const char* pszSsetName, const char* pszFirstKey, const char* pszFirstValue) +{ + Init(); + SetName(pszSsetName); + SetString(pszFirstKey, pszFirstValue); +} + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : *pszSetName - +// *pszFirstKey - +// *pwszFirstValue - +//----------------------------------------------------------------------------- +KeyValues::KeyValues(const char* pszSetName, const char* pszFirstKey, const wchar_t* pwszFirstValue) +{ + Init(); + SetName(pszSetName); + SetWString(pszFirstKey, pwszFirstValue); +} + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : *pszSetName - +// *pszFirstKey - +// iFirstValue - +//----------------------------------------------------------------------------- +KeyValues::KeyValues(const char* pszSetName, const char* pszFirstKey, int iFirstValue) +{ + Init(); + SetName(pszSetName); + SetInt(pszFirstKey, iFirstValue); +} + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : *pszSetName - +// *pszFirstKey - +// *pszFirstValue - +// *pszSecondKey - +// *pszSecondValue - +//----------------------------------------------------------------------------- +KeyValues::KeyValues( + const char* pszSetName, const char* pszFirstKey, const char* pszFirstValue, const char* pszSecondKey, const char* pszSecondValue) +{ + Init(); + SetName(pszSetName); + SetString(pszFirstKey, pszFirstValue); + SetString(pszSecondKey, pszSecondValue); +} + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : *pszSetName - +// *pszFirstKey - +// iFirstValue - +// *pszSecondKey - +// iSecondValue - +//----------------------------------------------------------------------------- +KeyValues::KeyValues(const char* pszSetName, const char* pszFirstKey, int iFirstValue, const char* pszSecondKey, int iSecondValue) +{ + Init(); + SetName(pszSetName); + SetInt(pszFirstKey, iFirstValue); + SetInt(pszSecondKey, iSecondValue); +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +KeyValues::~KeyValues(void) +{ + RemoveEverything(); +} + +//----------------------------------------------------------------------------- +// Purpose: Initialize member variables +//----------------------------------------------------------------------------- +void KeyValues::Init(void) +{ + m_iKeyName = 0; + m_iKeyNameCaseSensitive1 = 0; + m_iKeyNameCaseSensitive2 = 0; + m_iDataType = TYPE_NONE; + + m_pSub = nullptr; + m_pPeer = nullptr; + m_pChain = nullptr; + + m_sValue = nullptr; + m_wsValue = nullptr; + m_pValue = nullptr; + + m_bHasEscapeSequences = 0; +} + +//----------------------------------------------------------------------------- +// Purpose: Clear out all subkeys, and the current value +//----------------------------------------------------------------------------- +void KeyValues::Clear(void) +{ + delete m_pSub; + m_pSub = nullptr; + m_iDataType = TYPE_NONE; +} + +//----------------------------------------------------------------------------- +// for backwards compat - we used to need this to force the free to run from the same DLL +// as the alloc +//----------------------------------------------------------------------------- +void KeyValues::DeleteThis(void) +{ + delete this; +} + +//----------------------------------------------------------------------------- +// Purpose: remove everything +//----------------------------------------------------------------------------- +void KeyValues::RemoveEverything(void) +{ + KeyValues* dat; + KeyValues* datNext = nullptr; + for (dat = m_pSub; dat != nullptr; dat = datNext) + { + datNext = dat->m_pPeer; + dat->m_pPeer = nullptr; + delete dat; + } + + for (dat = m_pPeer; dat && dat != this; dat = datNext) + { + datNext = dat->m_pPeer; + dat->m_pPeer = nullptr; + delete dat; + } + + delete[] m_sValue; + m_sValue = nullptr; + delete[] m_wsValue; + m_wsValue = nullptr; +} + +//----------------------------------------------------------------------------- +// Purpose: Find a keyValue, create it if it is not found. +// Set bCreate to true to create the key if it doesn't already exist +// (which ensures a valid pointer will be returned) +// Input : *pszKeyName - +// bCreate - +// Output : *KeyValues +//----------------------------------------------------------------------------- +KeyValues* KeyValues::FindKey(const char* pszKeyName, bool bCreate) +{ + assert_msg(this, "Member function called on NULL KeyValues"); + + if (!pszKeyName || !*pszKeyName) + return this; + + const char* pSubStr = strchr(pszKeyName, '/'); + + HKeySymbol iSearchStr = KeyValuesSystem()->m_pVtable->GetSymbolForString(KeyValuesSystem(), pszKeyName, bCreate); + if (iSearchStr == INVALID_KEY_SYMBOL) + { + // not found, couldn't possibly be in key value list + return nullptr; + } + + KeyValues* pLastKVs = nullptr; + KeyValues* pCurrentKVs; + // find the searchStr in the current peer list + for (pCurrentKVs = m_pSub; pCurrentKVs != NULL; pCurrentKVs = pCurrentKVs->m_pPeer) + { + pLastKVs = pCurrentKVs; // record the last item looked at (for if we need to append to the end of the list) + + // symbol compare + if (pLastKVs->m_iKeyName == (uint32_t)iSearchStr) + break; + } + + if (!pCurrentKVs && m_pChain) + pCurrentKVs = m_pChain->FindKey(pszKeyName, false); + + // make sure a key was found + if (!pCurrentKVs) + { + if (bCreate) + { + // we need to create a new key + pCurrentKVs = new KeyValues(pszKeyName); + // Assert(dat != NULL); + + // insert new key at end of list + if (pLastKVs) + pLastKVs->m_pPeer = pCurrentKVs; + else + m_pSub = pCurrentKVs; + + pCurrentKVs->m_pPeer = NULL; + + // a key graduates to be a submsg as soon as it's m_pSub is set + // this should be the only place m_pSub is set + m_iDataType = TYPE_NONE; + } + else + { + return NULL; + } + } + + // if we've still got a subStr we need to keep looking deeper in the tree + if (pSubStr) + { + // recursively chain down through the paths in the string + return pCurrentKVs->FindKey(pSubStr + 1, bCreate); + } + + return pCurrentKVs; +} + +//----------------------------------------------------------------------------- +// Purpose: Locate last child. Returns NULL if we have no children +// Output : *KeyValues +//----------------------------------------------------------------------------- +KeyValues* KeyValues::FindLastSubKey(void) const +{ + // No children? + if (m_pSub == nullptr) + return nullptr; + + // Scan for the last one + KeyValues* pLastChild = m_pSub; + while (pLastChild->m_pPeer) + pLastChild = pLastChild->m_pPeer; + return pLastChild; +} + +//----------------------------------------------------------------------------- +// Purpose: Adds a subkey. Make sure the subkey isn't a child of some other keyvalues +// Input : *pSubKey - +//----------------------------------------------------------------------------- +void KeyValues::AddSubKey(KeyValues* pSubkey) +{ + // Make sure the subkey isn't a child of some other keyvalues + assert(pSubkey != nullptr); + assert(pSubkey->m_pPeer == nullptr); + + // add into subkey list + if (m_pSub == nullptr) + { + m_pSub = pSubkey; + } + else + { + KeyValues* pTempDat = m_pSub; + while (pTempDat->GetNextKey() != nullptr) + { + pTempDat = pTempDat->GetNextKey(); + } + + pTempDat->SetNextKey(pSubkey); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Remove a subkey from the list +// Input : *pSubKey - +//----------------------------------------------------------------------------- +void KeyValues::RemoveSubKey(KeyValues* pSubKey) +{ + if (!pSubKey) + return; + + // check the list pointer + if (m_pSub == pSubKey) + { + m_pSub = pSubKey->m_pPeer; + } + else + { + // look through the list + KeyValues* kv = m_pSub; + while (kv->m_pPeer) + { + if (kv->m_pPeer == pSubKey) + { + kv->m_pPeer = pSubKey->m_pPeer; + break; + } + + kv = kv->m_pPeer; + } + } + + pSubKey->m_pPeer = nullptr; +} + +//----------------------------------------------------------------------------- +// Purpose: Insert a subkey at index +// Input : nIndex - +// *pSubKey - +//----------------------------------------------------------------------------- +void KeyValues::InsertSubKey(int nIndex, KeyValues* pSubKey) +{ + // Sub key must be valid and not part of another chain + assert(pSubKey && pSubKey->m_pPeer == nullptr); + + if (nIndex == 0) + { + pSubKey->m_pPeer = m_pSub; + m_pSub = pSubKey; + return; + } + else + { + int nCurrentIndex = 0; + for (KeyValues* pIter = GetFirstSubKey(); pIter != nullptr; pIter = pIter->GetNextKey()) + { + ++nCurrentIndex; + if (nCurrentIndex == nIndex) + { + pSubKey->m_pPeer = pIter->m_pPeer; + pIter->m_pPeer = pSubKey; + return; + } + } + // Index is out of range if we get here + assert(0); + return; + } +} + +//----------------------------------------------------------------------------- +// Purpose: Checks if key contains a subkey +// Input : *pSubKey - +// Output : true if contains, false otherwise +//----------------------------------------------------------------------------- +bool KeyValues::ContainsSubKey(KeyValues* pSubKey) +{ + for (KeyValues* pIter = GetFirstSubKey(); pIter != nullptr; pIter = pIter->GetNextKey()) + { + if (pSubKey == pIter) + { + return true; + } + } + return false; +} + +//----------------------------------------------------------------------------- +// Purpose: Swaps existing subkey with another +// Input : *pExistingSubkey - +// *pNewSubKey - +//----------------------------------------------------------------------------- +void KeyValues::SwapSubKey(KeyValues* pExistingSubkey, KeyValues* pNewSubKey) +{ + assert(pExistingSubkey != nullptr && pNewSubKey != nullptr); + + // Make sure the new sub key isn't a child of some other keyvalues + assert(pNewSubKey->m_pPeer == nullptr); + + // Check the list pointer + if (m_pSub == pExistingSubkey) + { + pNewSubKey->m_pPeer = pExistingSubkey->m_pPeer; + pExistingSubkey->m_pPeer = nullptr; + m_pSub = pNewSubKey; + } + else + { + // Look through the list + KeyValues* kv = m_pSub; + while (kv->m_pPeer) + { + if (kv->m_pPeer == pExistingSubkey) + { + pNewSubKey->m_pPeer = pExistingSubkey->m_pPeer; + pExistingSubkey->m_pPeer = nullptr; + kv->m_pPeer = pNewSubKey; + break; + } + + kv = kv->m_pPeer; + } + // Existing sub key should always be found, otherwise it's a bug in the calling code. + assert(kv->m_pPeer != nullptr); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Elides subkey +// Input : *pSubKey - +//----------------------------------------------------------------------------- +void KeyValues::ElideSubKey(KeyValues* pSubKey) +{ + // This pointer's "next" pointer needs to be fixed up when we elide the key + KeyValues** ppPointerToFix = &m_pSub; + for (KeyValues* pKeyIter = m_pSub; pKeyIter != nullptr; ppPointerToFix = &pKeyIter->m_pPeer, pKeyIter = pKeyIter->GetNextKey()) + { + if (pKeyIter == pSubKey) + { + if (pSubKey->m_pSub == nullptr) + { + // No children, simply remove the key + *ppPointerToFix = pSubKey->m_pPeer; + delete pSubKey; + } + else + { + *ppPointerToFix = pSubKey->m_pSub; + // Attach the remainder of this chain to the last child of pSubKey + KeyValues* pChildIter = pSubKey->m_pSub; + while (pChildIter->m_pPeer != nullptr) + { + pChildIter = pChildIter->m_pPeer; + } + // Now points to the last child of pSubKey + pChildIter->m_pPeer = pSubKey->m_pPeer; + // Detach the node to be elided + pSubKey->m_pSub = nullptr; + pSubKey->m_pPeer = nullptr; + delete pSubKey; + } + return; + } + } + // Key not found; that's caller error. + assert(0); +} + +//----------------------------------------------------------------------------- +// Purpose: Check if a keyName has no value assigned to it. +// Input : *pszKeyName - +// Output : true on success, false otherwise +//----------------------------------------------------------------------------- +bool KeyValues::IsEmpty(const char* pszKeyName) +{ + KeyValues* pKey = FindKey(pszKeyName, false); + if (!pKey) + return true; + + if (pKey->m_iDataType == TYPE_NONE && pKey->m_pSub == nullptr) + return true; + + return false; +} + +//----------------------------------------------------------------------------- +// Purpose: gets the first true sub key +// Output : *KeyValues +//----------------------------------------------------------------------------- +KeyValues* KeyValues::GetFirstTrueSubKey(void) const +{ + assert_msg(this, "Member function called on NULL KeyValues"); + KeyValues* pRet = this ? m_pSub : nullptr; + while (pRet && pRet->m_iDataType != TYPE_NONE) + pRet = pRet->m_pPeer; + + return pRet; +} + +//----------------------------------------------------------------------------- +// Purpose: gets the next true sub key +// Output : *KeyValues +//----------------------------------------------------------------------------- +KeyValues* KeyValues::GetNextTrueSubKey(void) const +{ + assert_msg(this, "Member function called on NULL KeyValues"); + KeyValues* pRet = this ? m_pPeer : nullptr; + while (pRet && pRet->m_iDataType != TYPE_NONE) + pRet = pRet->m_pPeer; + + return pRet; +} + +//----------------------------------------------------------------------------- +// Purpose: gets the first value +// Output : *KeyValues +//----------------------------------------------------------------------------- +KeyValues* KeyValues::GetFirstValue(void) const +{ + assert_msg(this, "Member function called on NULL KeyValues"); + KeyValues* pRet = this ? m_pSub : nullptr; + while (pRet && pRet->m_iDataType == TYPE_NONE) + pRet = pRet->m_pPeer; + + return pRet; +} + +//----------------------------------------------------------------------------- +// Purpose: gets the next value +// Output : *KeyValues +//----------------------------------------------------------------------------- +KeyValues* KeyValues::GetNextValue(void) const +{ + assert_msg(this, "Member function called on NULL KeyValues"); + KeyValues* pRet = this ? m_pPeer : nullptr; + while (pRet && pRet->m_iDataType == TYPE_NONE) + pRet = pRet->m_pPeer; + + return pRet; +} + +//----------------------------------------------------------------------------- +// Purpose: Return the first subkey in the list +//----------------------------------------------------------------------------- +KeyValues* KeyValues::GetFirstSubKey() const +{ + assert_msg(this, "Member function called on NULL KeyValues"); + return this ? m_pSub : nullptr; +} + +//----------------------------------------------------------------------------- +// Purpose: Return the next subkey +//----------------------------------------------------------------------------- +KeyValues* KeyValues::GetNextKey() const +{ + assert_msg(this, "Member function called on NULL KeyValues"); + return this ? m_pPeer : nullptr; +} + +//----------------------------------------------------------------------------- +// Purpose: Get the name of the current key section +// Output : const char* +//----------------------------------------------------------------------------- +const char* KeyValues::GetName(void) const +{ + return KeyValuesSystem()->m_pVtable->GetStringForSymbol( + KeyValuesSystem(), MAKE_3_BYTES_FROM_1_AND_2(m_iKeyNameCaseSensitive1, m_iKeyNameCaseSensitive2)); +} + +//----------------------------------------------------------------------------- +// Purpose: Get the integer value of a keyName. Default value is returned +// if the keyName can't be found. +// Input : *pszKeyName - +// nDefaultValue - +// Output : int +//----------------------------------------------------------------------------- +int KeyValues::GetInt(const char* pszKeyName, int iDefaultValue) +{ + KeyValues* pKey = FindKey(pszKeyName, false); + if (pKey) + { + switch (pKey->m_iDataType) + { + case TYPE_STRING: + return atoi(pKey->m_sValue); + case TYPE_WSTRING: + return _wtoi(pKey->m_wsValue); + case TYPE_FLOAT: + return static_cast<int>(pKey->m_flValue); + case TYPE_UINT64: + // can't convert, since it would lose data + assert(0); + return 0; + case TYPE_INT: + case TYPE_PTR: + default: + return pKey->m_iValue; + }; + } + return iDefaultValue; +} + +//----------------------------------------------------------------------------- +// Purpose: Get the integer value of a keyName. Default value is returned +// if the keyName can't be found. +// Input : *pszKeyName - +// nDefaultValue - +// Output : uint64_t +//----------------------------------------------------------------------------- +uint64_t KeyValues::GetUint64(const char* pszKeyName, uint64_t nDefaultValue) +{ + KeyValues* pKey = FindKey(pszKeyName, false); + if (pKey) + { + switch (pKey->m_iDataType) + { + case TYPE_STRING: + { + uint64_t uiResult = 0ull; + sscanf(pKey->m_sValue, "%lld", &uiResult); + return uiResult; + } + case TYPE_WSTRING: + { + uint64_t uiResult = 0ull; + swscanf(pKey->m_wsValue, L"%lld", &uiResult); + return uiResult; + } + case TYPE_FLOAT: + return static_cast<int>(pKey->m_flValue); + case TYPE_UINT64: + return *reinterpret_cast<uint64_t*>(pKey->m_sValue); + case TYPE_PTR: + return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(pKey->m_pValue)); + case TYPE_INT: + default: + return pKey->m_iValue; + }; + } + return nDefaultValue; +} + +//----------------------------------------------------------------------------- +// Purpose: Get the pointer value of a keyName. Default value is returned +// if the keyName can't be found. +// Input : *pszKeyName - +// pDefaultValue - +// Output : void* +//----------------------------------------------------------------------------- +void* KeyValues::GetPtr(const char* pszKeyName, void* pDefaultValue) +{ + KeyValues* pKey = FindKey(pszKeyName, false); + if (pKey) + { + switch (pKey->m_iDataType) + { + case TYPE_PTR: + return pKey->m_pValue; + + case TYPE_WSTRING: + case TYPE_STRING: + case TYPE_FLOAT: + case TYPE_INT: + case TYPE_UINT64: + default: + return nullptr; + }; + } + return pDefaultValue; +} + +//----------------------------------------------------------------------------- +// Purpose: Get the float value of a keyName. Default value is returned +// if the keyName can't be found. +// Input : *pszKeyName - +// flDefaultValue - +// Output : float +//----------------------------------------------------------------------------- +float KeyValues::GetFloat(const char* pszKeyName, float flDefaultValue) +{ + KeyValues* pKey = FindKey(pszKeyName, false); + if (pKey) + { + switch (pKey->m_iDataType) + { + case TYPE_STRING: + return static_cast<float>(atof(pKey->m_sValue)); + case TYPE_WSTRING: + return static_cast<float>(_wtof(pKey->m_wsValue)); // no wtof + case TYPE_FLOAT: + return pKey->m_flValue; + case TYPE_INT: + return static_cast<float>(pKey->m_iValue); + case TYPE_UINT64: + return static_cast<float>((*(reinterpret_cast<uint64_t*>(pKey->m_sValue)))); + case TYPE_PTR: + default: + return 0.0f; + }; + } + return flDefaultValue; +} + +//----------------------------------------------------------------------------- +// Purpose: Get the string pointer of a keyName. Default value is returned +// if the keyName can't be found. +// // Input : *pszKeyName - +// pszDefaultValue - +// Output : const char* +//----------------------------------------------------------------------------- +const char* KeyValues::GetString(const char* pszKeyName, const char* pszDefaultValue) +{ + KeyValues* pKey = FindKey(pszKeyName, false); + if (pKey) + { + // convert the data to string form then return it + char buf[64]; + switch (pKey->m_iDataType) + { + case TYPE_FLOAT: + snprintf(buf, sizeof(buf), "%f", pKey->m_flValue); + SetString(pszKeyName, buf); + break; + case TYPE_PTR: + snprintf(buf, sizeof(buf), "%lld", reinterpret_cast<uint64_t>(pKey->m_pValue)); + SetString(pszKeyName, buf); + break; + case TYPE_INT: + snprintf(buf, sizeof(buf), "%d", pKey->m_iValue); + SetString(pszKeyName, buf); + break; + case TYPE_UINT64: + snprintf(buf, sizeof(buf), "%lld", *(reinterpret_cast<uint64_t*>(pKey->m_sValue))); + SetString(pszKeyName, buf); + break; + case TYPE_COLOR: + snprintf(buf, sizeof(buf), "%d %d %d %d", pKey->m_Color[0], pKey->m_Color[1], pKey->m_Color[2], pKey->m_Color[3]); + SetString(pszKeyName, buf); + break; + + case TYPE_WSTRING: + { + // convert the string to char *, set it for future use, and return it + char wideBuf[512]; + int result = V_UnicodeToUTF8(pKey->m_wsValue, wideBuf, 512); + if (result) + { + // note: this will copy wideBuf + SetString(pszKeyName, wideBuf); + } + else + { + return pszDefaultValue; + } + break; + } + case TYPE_STRING: + break; + default: + return pszDefaultValue; + }; + + return pKey->m_sValue; + } + return pszDefaultValue; +} + +//----------------------------------------------------------------------------- +// Purpose: Get the wide string pointer of a keyName. Default value is returned +// if the keyName can't be found. +// // Input : *pszKeyName - +// pwszDefaultValue - +// Output : const wchar_t* +//----------------------------------------------------------------------------- +const wchar_t* KeyValues::GetWString(const char* pszKeyName, const wchar_t* pwszDefaultValue) +{ + KeyValues* pKey = FindKey(pszKeyName, false); + if (pKey) + { + wchar_t wbuf[64]; + switch (pKey->m_iDataType) + { + case TYPE_FLOAT: + swprintf(wbuf, ARRAYSIZE(wbuf), L"%f", pKey->m_flValue); + SetWString(pszKeyName, wbuf); + break; + case TYPE_PTR: + swprintf(wbuf, ARRAYSIZE(wbuf), L"%lld", static_cast<int64_t>(reinterpret_cast<size_t>(pKey->m_pValue))); + SetWString(pszKeyName, wbuf); + break; + case TYPE_INT: + swprintf(wbuf, ARRAYSIZE(wbuf), L"%d", pKey->m_iValue); + SetWString(pszKeyName, wbuf); + break; + case TYPE_UINT64: + { + swprintf(wbuf, ARRAYSIZE(wbuf), L"%lld", *(reinterpret_cast<uint64_t*>(pKey->m_sValue))); + SetWString(pszKeyName, wbuf); + } + break; + case TYPE_COLOR: + swprintf(wbuf, ARRAYSIZE(wbuf), L"%d %d %d %d", pKey->m_Color[0], pKey->m_Color[1], pKey->m_Color[2], pKey->m_Color[3]); + SetWString(pszKeyName, wbuf); + break; + + case TYPE_WSTRING: + break; + case TYPE_STRING: + { + size_t bufSize = strlen(pKey->m_sValue) + 1; + wchar_t* pWBuf = new wchar_t[bufSize]; + int result = V_UTF8ToUnicode(pKey->m_sValue, pWBuf, static_cast<int>(bufSize * sizeof(wchar_t))); + if (result >= 0) // may be a zero length string + { + SetWString(pszKeyName, pWBuf); + delete[] pWBuf; + } + else + { + delete[] pWBuf; + return pwszDefaultValue; + } + + break; + } + default: + return pwszDefaultValue; + }; + + return reinterpret_cast<const wchar_t*>(pKey->m_wsValue); + } + return pwszDefaultValue; +} + +//----------------------------------------------------------------------------- +// Purpose: Gets a color +// Input : *pszKeyName - +// &defaultColor - +// Output : Color +//----------------------------------------------------------------------------- +Color KeyValues::GetColor(const char* pszKeyName, const Color& defaultColor) +{ + Color color = defaultColor; + KeyValues* pKey = FindKey(pszKeyName, false); + if (pKey) + { + if (pKey->m_iDataType == TYPE_COLOR) + { + color[0] = pKey->m_Color[0]; + color[1] = pKey->m_Color[1]; + color[2] = pKey->m_Color[2]; + color[3] = pKey->m_Color[3]; + } + else if (pKey->m_iDataType == TYPE_FLOAT) + { + color[0] = static_cast<unsigned char>(pKey->m_flValue); + } + else if (pKey->m_iDataType == TYPE_INT) + { + color[0] = static_cast<unsigned char>(pKey->m_iValue); + } + else if (pKey->m_iDataType == TYPE_STRING) + { + // parse the colors out of the string + float a = 0, b = 0, c = 0, d = 0; + sscanf(pKey->m_sValue, "%f %f %f %f", &a, &b, &c, &d); + color[0] = static_cast<unsigned char>(a); + color[1] = static_cast<unsigned char>(b); + color[2] = static_cast<unsigned char>(c); + color[3] = static_cast<unsigned char>(d); + } + } + return color; +} + +//----------------------------------------------------------------------------- +// Purpose: Get the data type of the value stored in a keyName +// Input : *pszKeyName - +//----------------------------------------------------------------------------- +KeyValuesTypes_t KeyValues::GetDataType(const char* pszKeyName) +{ + KeyValues* pKey = FindKey(pszKeyName, false); + if (pKey) + return static_cast<KeyValuesTypes_t>(pKey->m_iDataType); + + return TYPE_NONE; +} + +//----------------------------------------------------------------------------- +// Purpose: Get the data type of the value stored in this keyName +//----------------------------------------------------------------------------- +KeyValuesTypes_t KeyValues::GetDataType(void) const +{ + return static_cast<KeyValuesTypes_t>(m_iDataType); +} + +//----------------------------------------------------------------------------- +// Purpose: Set the integer value of a keyName. +// Input : *pszKeyName - +// iValue - +//----------------------------------------------------------------------------- +void KeyValues::SetInt(const char* pszKeyName, int iValue) +{ + KeyValues* pKey = FindKey(pszKeyName, true); + if (pKey) + { + pKey->m_iValue = iValue; + pKey->m_iDataType = TYPE_INT; + } +} + +//----------------------------------------------------------------------------- +// Purpose: Set the integer value of a keyName. +//----------------------------------------------------------------------------- +void KeyValues::SetUint64(const char* pszKeyName, uint64_t nValue) +{ + KeyValues* pKey = FindKey(pszKeyName, true); + + if (pKey) + { + // delete the old value + delete[] pKey->m_sValue; + // make sure we're not storing the WSTRING - as we're converting over to STRING + delete[] pKey->m_wsValue; + pKey->m_wsValue = nullptr; + + pKey->m_sValue = new char[sizeof(uint64_t)]; + *(reinterpret_cast<uint64_t*>(pKey->m_sValue)) = nValue; + pKey->m_iDataType = TYPE_UINT64; + } +} + +//----------------------------------------------------------------------------- +// Purpose: Set the float value of a keyName. +// Input : *pszKeyName - +// flValue - +//----------------------------------------------------------------------------- +void KeyValues::SetFloat(const char* pszKeyName, float flValue) +{ + KeyValues* pKey = FindKey(pszKeyName, true); + if (pKey) + { + pKey->m_flValue = flValue; + pKey->m_iDataType = TYPE_FLOAT; + } +} + +//----------------------------------------------------------------------------- +// Purpose: Set the name value of a keyName. +// Input : *pszSetName - +//----------------------------------------------------------------------------- +void KeyValues::SetName(const char* pszSetName) +{ + HKeySymbol hCaseSensitiveKeyName = INVALID_KEY_SYMBOL, hCaseInsensitiveKeyName = INVALID_KEY_SYMBOL; + hCaseSensitiveKeyName = + KeyValuesSystem()->m_pVtable->GetSymbolForStringCaseSensitive(KeyValuesSystem(), hCaseInsensitiveKeyName, pszSetName, false); + + m_iKeyName = hCaseInsensitiveKeyName; + SPLIT_3_BYTES_INTO_1_AND_2(m_iKeyNameCaseSensitive1, m_iKeyNameCaseSensitive2, hCaseSensitiveKeyName); +} + +//----------------------------------------------------------------------------- +// Purpose: Set the pointer value of a keyName. +// Input : *pszKeyName - +// *pValue - +//----------------------------------------------------------------------------- +void KeyValues::SetPtr(const char* pszKeyName, void* pValue) +{ + KeyValues* pKey = FindKey(pszKeyName, true); + + if (pKey) + { + pKey->m_pValue = pValue; + pKey->m_iDataType = TYPE_PTR; + } +} + +//----------------------------------------------------------------------------- +// Purpose: Set the string value (internal) +// Input : *pszValue - +//----------------------------------------------------------------------------- +void KeyValues::SetStringValue(char const* pszValue) +{ + // delete the old value + delete[] m_sValue; + // make sure we're not storing the WSTRING - as we're converting over to STRING + delete[] m_wsValue; + m_wsValue = nullptr; + + if (!pszValue) + { + // ensure a valid value + pszValue = ""; + } + + // allocate memory for the new value and copy it in + size_t len = strlen(pszValue); + m_sValue = new char[len + 1]; + memcpy(m_sValue, pszValue, len + 1); + + m_iDataType = TYPE_STRING; +} + +//----------------------------------------------------------------------------- +// Purpose: Sets this key's peer to the KeyValues passed in +// Input : *pDat - +//----------------------------------------------------------------------------- +void KeyValues::SetNextKey(KeyValues* pDat) +{ + m_pPeer = pDat; +} + +//----------------------------------------------------------------------------- +// Purpose: Set the string value of a keyName. +// Input : *pszKeyName - +// *pszValue - +//----------------------------------------------------------------------------- +void KeyValues::SetString(const char* pszKeyName, const char* pszValue) +{ + if (KeyValues* pKey = FindKey(pszKeyName, true)) + { + pKey->SetStringValue(pszValue); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Set the string value of a keyName. +// Input : *pszKeyName - +// *pwszValue - +//----------------------------------------------------------------------------- +void KeyValues::SetWString(const char* pszKeyName, const wchar_t* pwszValue) +{ + KeyValues* pKey = FindKey(pszKeyName, true); + if (pKey) + { + // delete the old value + delete[] pKey->m_wsValue; + // make sure we're not storing the STRING - as we're converting over to WSTRING + delete[] pKey->m_sValue; + pKey->m_sValue = nullptr; + + if (!pwszValue) + { + // ensure a valid value + pwszValue = L""; + } + + // allocate memory for the new value and copy it in + size_t len = wcslen(pwszValue); + pKey->m_wsValue = new wchar_t[len + 1]; + memcpy(pKey->m_wsValue, pwszValue, (len + 1) * sizeof(wchar_t)); + + pKey->m_iDataType = TYPE_WSTRING; + } +} + +//----------------------------------------------------------------------------- +// Purpose: Sets a color +// Input : *pszKeyName - +// color - +//----------------------------------------------------------------------------- +void KeyValues::SetColor(const char* pszKeyName, Color color) +{ + KeyValues* pKey = FindKey(pszKeyName, true); + + if (pKey) + { + pKey->m_iDataType = TYPE_COLOR; + pKey->m_Color[0] = color[0]; + pKey->m_Color[1] = color[1]; + pKey->m_Color[2] = color[2]; + pKey->m_Color[3] = color[3]; + } +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : &src - +//----------------------------------------------------------------------------- +void KeyValues::RecursiveCopyKeyValues(KeyValues& src) +{ + // garymcthack - need to check this code for possible buffer overruns. + + m_iKeyName = src.m_iKeyName; + m_iKeyNameCaseSensitive1 = src.m_iKeyNameCaseSensitive1; + m_iKeyNameCaseSensitive2 = src.m_iKeyNameCaseSensitive2; + + if (!src.m_pSub) + { + m_iDataType = src.m_iDataType; + char buf[256]; + switch (src.m_iDataType) + { + case TYPE_NONE: + break; + case TYPE_STRING: + if (src.m_sValue) + { + size_t len = strlen(src.m_sValue) + 1; + m_sValue = new char[len]; + strncpy(m_sValue, src.m_sValue, len); + } + break; + case TYPE_INT: + { + m_iValue = src.m_iValue; + snprintf(buf, sizeof(buf), "%d", m_iValue); + size_t len = strlen(buf) + 1; + m_sValue = new char[len]; + strncpy(m_sValue, buf, len); + } + break; + case TYPE_FLOAT: + { + m_flValue = src.m_flValue; + snprintf(buf, sizeof(buf), "%f", m_flValue); + size_t len = strlen(buf) + 1; + m_sValue = new char[len]; + strncpy(m_sValue, buf, len); + } + break; + case TYPE_PTR: + { + m_pValue = src.m_pValue; + } + break; + case TYPE_UINT64: + { + m_sValue = new char[sizeof(uint64_t)]; + memcpy(m_sValue, src.m_sValue, sizeof(uint64_t)); + } + break; + case TYPE_COLOR: + { + m_Color[0] = src.m_Color[0]; + m_Color[1] = src.m_Color[1]; + m_Color[2] = src.m_Color[2]; + m_Color[3] = src.m_Color[3]; + } + break; + + default: + { + // do nothing . .what the heck is this? + assert(0); + } + break; + } + } + + // Handle the immediate child + if (src.m_pSub) + { + m_pSub = new KeyValues; + + m_pSub->Init(); + m_pSub->SetName(nullptr); + + m_pSub->RecursiveCopyKeyValues(*src.m_pSub); + } + + // Handle the immediate peer + if (src.m_pPeer) + { + m_pPeer = new KeyValues; + + m_pPeer->Init(); + m_pPeer->SetName(nullptr); + + m_pPeer->RecursiveCopyKeyValues(*src.m_pPeer); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Make a new copy of all subkeys, add them all to the passed-in keyvalues +// Input : *pParent - +//----------------------------------------------------------------------------- +void KeyValues::CopySubkeys(KeyValues* pParent) const +{ + // recursively copy subkeys + // Also maintain ordering.... + KeyValues* pPrev = nullptr; + for (KeyValues* pSub = m_pSub; pSub != nullptr; pSub = pSub->m_pPeer) + { + // take a copy of the subkey + KeyValues* pKey = pSub->MakeCopy(); + + // add into subkey list + if (pPrev) + { + pPrev->m_pPeer = pKey; + } + else + { + pParent->m_pSub = pKey; + } + pKey->m_pPeer = nullptr; + pPrev = pKey; + } +} + +//----------------------------------------------------------------------------- +// Purpose: Makes a copy of the whole key-value pair set +// Output : KeyValues* +//----------------------------------------------------------------------------- +KeyValues* KeyValues::MakeCopy(void) const +{ + KeyValues* pNewKeyValue = new KeyValues; + + pNewKeyValue->Init(); + pNewKeyValue->SetName(GetName()); + + // copy data + pNewKeyValue->m_iDataType = m_iDataType; + switch (m_iDataType) + { + case TYPE_STRING: + { + if (m_sValue) + { + size_t len = strlen(m_sValue); + assert(!pNewKeyValue->m_sValue); + pNewKeyValue->m_sValue = new char[len + 1]; + memcpy(pNewKeyValue->m_sValue, m_sValue, len + 1); + } + } + break; + case TYPE_WSTRING: + { + if (m_wsValue) + { + size_t len = wcslen(m_wsValue); + pNewKeyValue->m_wsValue = new wchar_t[len + 1]; + memcpy(pNewKeyValue->m_wsValue, m_wsValue, len + 1 * sizeof(wchar_t)); + } + } + break; + + case TYPE_INT: + pNewKeyValue->m_iValue = m_iValue; + break; + + case TYPE_FLOAT: + pNewKeyValue->m_flValue = m_flValue; + break; + + case TYPE_PTR: + pNewKeyValue->m_pValue = m_pValue; + break; + + case TYPE_COLOR: + pNewKeyValue->m_Color[0] = m_Color[0]; + pNewKeyValue->m_Color[1] = m_Color[1]; + pNewKeyValue->m_Color[2] = m_Color[2]; + pNewKeyValue->m_Color[3] = m_Color[3]; + break; + + case TYPE_UINT64: + pNewKeyValue->m_sValue = new char[sizeof(uint64_t)]; + memcpy(pNewKeyValue->m_sValue, m_sValue, sizeof(uint64_t)); + break; + }; + + // recursively copy subkeys + CopySubkeys(pNewKeyValue); + return pNewKeyValue; +} + +ON_DLL_LOAD("vstdlib.dll", KeyValues, (CModule module)) +{ + V_UTF8ToUnicode = module.GetExport("V_UTF8ToUnicode").As<int (*)(const char*, wchar_t*, int)>(); + V_UnicodeToUTF8 = module.GetExport("V_UnicodeToUTF8").As<int (*)(const wchar_t*, char*, int)>(); + KeyValuesSystem = module.GetExport("KeyValuesSystem").As<CKeyValuesSystem* (*)()>(); +} + +AUTOHOOK_INIT() + +// clang-format off +AUTOHOOK(KeyValues__LoadFromBuffer, engine.dll + 0x426C30, +char, __fastcall, (KeyValues* self, const char* pResourceName, const char* pBuffer, void* pFileSystem, void* a5, void* a6, int a7)) +// clang-format on +{ + static void* pSavedFilesystemPtr = nullptr; + + // this is just to allow playlists to get a valid pFileSystem ptr for kv building, other functions that call this particular overload of + // LoadFromBuffer seem to get called on network stuff exclusively not exactly sure what the address wanted here is, so just taking it + // from a function call that always happens before playlists is loaded + + // note: would be better if we could serialize this to disk for playlists, as this method breaks saving playlists in demos + if (pFileSystem != nullptr) + pSavedFilesystemPtr = pFileSystem; + if (!pFileSystem && !strcmp(pResourceName, "playlists")) + pFileSystem = pSavedFilesystemPtr; + + return KeyValues__LoadFromBuffer(self, pResourceName, pBuffer, pFileSystem, a5, a6, a7); +} + +ON_DLL_LOAD("engine.dll", EngineKeyValues, (CModule module)) +{ + AUTOHOOK_DISPATCH() +} diff --git a/NorthstarDLL/keyvalues.h b/NorthstarDLL/shared/keyvalues.h index 3ea682d6..64ca0cc7 100644 --- a/NorthstarDLL/keyvalues.h +++ b/NorthstarDLL/shared/keyvalues.h @@ -1,134 +1,134 @@ -#pragma once
-#include "color.h"
-
-enum KeyValuesTypes_t : char
-{
- TYPE_NONE = 0x0,
- TYPE_STRING = 0x1,
- TYPE_INT = 0x2,
- TYPE_FLOAT = 0x3,
- TYPE_PTR = 0x4,
- TYPE_WSTRING = 0x5,
- TYPE_COLOR = 0x6,
- TYPE_UINT64 = 0x7,
- TYPE_COMPILED_INT_BYTE = 0x8,
- TYPE_COMPILED_INT_0 = 0x9,
- TYPE_COMPILED_INT_1 = 0xA,
- TYPE_NUMTYPES = 0xB,
-};
-
-enum MergeKeyValuesOp_t
-{
- MERGE_KV_ALL,
- MERGE_KV_UPDATE, // update values are copied into storage, adding new keys to storage or updating existing ones
- MERGE_KV_DELETE, // update values specify keys that get deleted from storage
- MERGE_KV_BORROW, // update values only update existing keys in storage, keys in update that do not exist in storage are discarded
-};
-
-//-----------------------------------------------------------------------------
-// Purpose: Simple recursive data access class
-// Used in vgui for message parameters and resource files
-// Destructor deletes all child KeyValues nodes
-// Data is stored in key (string names) - (string/int/float)value pairs called nodes.
-//
-// About KeyValues Text File Format:
-
-// It has 3 control characters '{', '}' and '"'. Names and values may be quoted or
-// not. The quote '"' character must not be used within name or values, only for
-// quoting whole tokens. You may use escape sequences wile parsing and add within a
-// quoted token a \" to add quotes within your name or token. When using Escape
-// Sequence the parser must now that by setting KeyValues::UsesEscapeSequences( true ),
-// which it's off by default. Non-quoted tokens ends with a whitespace, '{', '}' and '"'.
-// So you may use '{' and '}' within quoted tokens, but not for non-quoted tokens.
-// An open bracket '{' after a key name indicates a list of subkeys which is finished
-// with a closing bracket '}'. Subkeys use the same definitions recursively.
-// Whitespaces are space, return, newline and tabulator. Allowed Escape sequences
-// are \n, \t, \\, \n and \". The number character '#' is used for macro purposes
-// (eg #include), don't use it as first character in key names.
-//-----------------------------------------------------------------------------
-class KeyValues
-{
- private:
- KeyValues(); // for internal use only
-
- public:
- // Constructors/destructors
- KeyValues(const char* pszSetName);
- KeyValues(const char* pszSetName, const char* pszFirstKey, const char* pszFirstValue);
- KeyValues(const char* pszSetName, const char* pszFirstKey, const wchar_t* pwszFirstValue);
- KeyValues(const char* pszSetName, const char* pszFirstKey, int iFirstValue);
- KeyValues(
- const char* pszSetName, const char* pszFirstKey, const char* pszFirstValue, const char* pszSecondKey, const char* pszSecondValue);
- KeyValues(const char* pszSetName, const char* pszFirstKey, int iFirstValue, const char* pszSecondKey, int iSecondValue);
- ~KeyValues(void);
-
- void Init(void);
- void Clear(void);
- void DeleteThis(void);
- void RemoveEverything();
-
- KeyValues* FindKey(const char* pKeyName, bool bCreate = false);
- KeyValues* FindLastSubKey(void) const;
-
- void AddSubKey(KeyValues* pSubkey);
- void RemoveSubKey(KeyValues* pSubKey);
- void InsertSubKey(int nIndex, KeyValues* pSubKey);
- bool ContainsSubKey(KeyValues* pSubKey);
- void SwapSubKey(KeyValues* pExistingSubkey, KeyValues* pNewSubKey);
- void ElideSubKey(KeyValues* pSubKey);
-
- // Data access
- bool IsEmpty(const char* pszKeyName);
- KeyValues* GetFirstTrueSubKey(void) const;
- KeyValues* GetNextTrueSubKey(void) const;
- KeyValues* GetFirstValue(void) const;
- KeyValues* GetNextValue(void) const;
- KeyValues* GetFirstSubKey() const;
- KeyValues* GetNextKey() const;
- const char* GetName(void) const;
- int GetInt(const char* pszKeyName, int iDefaultValue);
- uint64_t GetUint64(const char* pszKeyName, uint64_t nDefaultValue);
- void* GetPtr(const char* pszKeyName, void* pDefaultValue);
- float GetFloat(const char* pszKeyName, float flDefaultValue);
- const char* GetString(const char* pszKeyName = nullptr, const char* pszDefaultValue = "");
- const wchar_t* GetWString(const char* pszKeyName = nullptr, const wchar_t* pwszDefaultValue = L"");
- Color GetColor(const char* pszKeyName, const Color& defaultColor);
- KeyValuesTypes_t GetDataType(const char* pszKeyName);
- KeyValuesTypes_t GetDataType(void) const;
-
- // Key writing
- void SetInt(const char* pszKeyName, int iValue);
- void SetUint64(const char* pszKeyName, uint64_t nValue);
- void SetPtr(const char* pszKeyName, void* pValue);
- void SetNextKey(KeyValues* pDat);
- void SetName(const char* pszName);
- void SetString(const char* pszKeyName, const char* pszValue);
- void SetWString(const char* pszKeyName, const wchar_t* pwszValue);
- void SetStringValue(char const* pszValue);
- void SetColor(const char* pszKeyName, Color color);
- void SetFloat(const char* pszKeyName, float flValue);
-
- void RecursiveCopyKeyValues(KeyValues& src);
- void CopySubkeys(KeyValues* pParent) const;
- KeyValues* MakeCopy(void) const;
-
- public:
- uint32_t m_iKeyName : 24; // 0x0000
- uint32_t m_iKeyNameCaseSensitive1 : 8; // 0x0003
- char* m_sValue; // 0x0008
- wchar_t* m_wsValue; // 0x0010
- union // 0x0018
- {
- int m_iValue;
- float m_flValue;
- void* m_pValue;
- unsigned char m_Color[4];
- };
- char m_szShortName[8]; // 0x0020
- char m_iDataType; // 0x0028
- char m_bHasEscapeSequences; // 0x0029
- uint16_t m_iKeyNameCaseSensitive2; // 0x002A
- KeyValues* m_pPeer; // 0x0030
- KeyValues* m_pSub; // 0x0038
- KeyValues* m_pChain; // 0x0040
-};
+#pragma once +#include "core/math/color.h" + +enum KeyValuesTypes_t : char +{ + TYPE_NONE = 0x0, + TYPE_STRING = 0x1, + TYPE_INT = 0x2, + TYPE_FLOAT = 0x3, + TYPE_PTR = 0x4, + TYPE_WSTRING = 0x5, + TYPE_COLOR = 0x6, + TYPE_UINT64 = 0x7, + TYPE_COMPILED_INT_BYTE = 0x8, + TYPE_COMPILED_INT_0 = 0x9, + TYPE_COMPILED_INT_1 = 0xA, + TYPE_NUMTYPES = 0xB, +}; + +enum MergeKeyValuesOp_t +{ + MERGE_KV_ALL, + MERGE_KV_UPDATE, // update values are copied into storage, adding new keys to storage or updating existing ones + MERGE_KV_DELETE, // update values specify keys that get deleted from storage + MERGE_KV_BORROW, // update values only update existing keys in storage, keys in update that do not exist in storage are discarded +}; + +//----------------------------------------------------------------------------- +// Purpose: Simple recursive data access class +// Used in vgui for message parameters and resource files +// Destructor deletes all child KeyValues nodes +// Data is stored in key (string names) - (string/int/float)value pairs called nodes. +// +// About KeyValues Text File Format: + +// It has 3 control characters '{', '}' and '"'. Names and values may be quoted or +// not. The quote '"' character must not be used within name or values, only for +// quoting whole tokens. You may use escape sequences wile parsing and add within a +// quoted token a \" to add quotes within your name or token. When using Escape +// Sequence the parser must now that by setting KeyValues::UsesEscapeSequences( true ), +// which it's off by default. Non-quoted tokens ends with a whitespace, '{', '}' and '"'. +// So you may use '{' and '}' within quoted tokens, but not for non-quoted tokens. +// An open bracket '{' after a key name indicates a list of subkeys which is finished +// with a closing bracket '}'. Subkeys use the same definitions recursively. +// Whitespaces are space, return, newline and tabulator. Allowed Escape sequences +// are \n, \t, \\, \n and \". The number character '#' is used for macro purposes +// (eg #include), don't use it as first character in key names. +//----------------------------------------------------------------------------- +class KeyValues +{ + private: + KeyValues(); // for internal use only + + public: + // Constructors/destructors + KeyValues(const char* pszSetName); + KeyValues(const char* pszSetName, const char* pszFirstKey, const char* pszFirstValue); + KeyValues(const char* pszSetName, const char* pszFirstKey, const wchar_t* pwszFirstValue); + KeyValues(const char* pszSetName, const char* pszFirstKey, int iFirstValue); + KeyValues( + const char* pszSetName, const char* pszFirstKey, const char* pszFirstValue, const char* pszSecondKey, const char* pszSecondValue); + KeyValues(const char* pszSetName, const char* pszFirstKey, int iFirstValue, const char* pszSecondKey, int iSecondValue); + ~KeyValues(void); + + void Init(void); + void Clear(void); + void DeleteThis(void); + void RemoveEverything(); + + KeyValues* FindKey(const char* pKeyName, bool bCreate = false); + KeyValues* FindLastSubKey(void) const; + + void AddSubKey(KeyValues* pSubkey); + void RemoveSubKey(KeyValues* pSubKey); + void InsertSubKey(int nIndex, KeyValues* pSubKey); + bool ContainsSubKey(KeyValues* pSubKey); + void SwapSubKey(KeyValues* pExistingSubkey, KeyValues* pNewSubKey); + void ElideSubKey(KeyValues* pSubKey); + + // Data access + bool IsEmpty(const char* pszKeyName); + KeyValues* GetFirstTrueSubKey(void) const; + KeyValues* GetNextTrueSubKey(void) const; + KeyValues* GetFirstValue(void) const; + KeyValues* GetNextValue(void) const; + KeyValues* GetFirstSubKey() const; + KeyValues* GetNextKey() const; + const char* GetName(void) const; + int GetInt(const char* pszKeyName, int iDefaultValue); + uint64_t GetUint64(const char* pszKeyName, uint64_t nDefaultValue); + void* GetPtr(const char* pszKeyName, void* pDefaultValue); + float GetFloat(const char* pszKeyName, float flDefaultValue); + const char* GetString(const char* pszKeyName = nullptr, const char* pszDefaultValue = ""); + const wchar_t* GetWString(const char* pszKeyName = nullptr, const wchar_t* pwszDefaultValue = L""); + Color GetColor(const char* pszKeyName, const Color& defaultColor); + KeyValuesTypes_t GetDataType(const char* pszKeyName); + KeyValuesTypes_t GetDataType(void) const; + + // Key writing + void SetInt(const char* pszKeyName, int iValue); + void SetUint64(const char* pszKeyName, uint64_t nValue); + void SetPtr(const char* pszKeyName, void* pValue); + void SetNextKey(KeyValues* pDat); + void SetName(const char* pszName); + void SetString(const char* pszKeyName, const char* pszValue); + void SetWString(const char* pszKeyName, const wchar_t* pwszValue); + void SetStringValue(char const* pszValue); + void SetColor(const char* pszKeyName, Color color); + void SetFloat(const char* pszKeyName, float flValue); + + void RecursiveCopyKeyValues(KeyValues& src); + void CopySubkeys(KeyValues* pParent) const; + KeyValues* MakeCopy(void) const; + + public: + uint32_t m_iKeyName : 24; // 0x0000 + uint32_t m_iKeyNameCaseSensitive1 : 8; // 0x0003 + char* m_sValue; // 0x0008 + wchar_t* m_wsValue; // 0x0010 + union // 0x0018 + { + int m_iValue; + float m_flValue; + void* m_pValue; + unsigned char m_Color[4]; + }; + char m_szShortName[8]; // 0x0020 + char m_iDataType; // 0x0028 + char m_bHasEscapeSequences; // 0x0029 + uint16_t m_iKeyNameCaseSensitive2; // 0x002A + KeyValues* m_pPeer; // 0x0030 + KeyValues* m_pSub; // 0x0038 + KeyValues* m_pChain; // 0x0040 +}; diff --git a/NorthstarDLL/maxplayers.cpp b/NorthstarDLL/shared/maxplayers.cpp index ece8d14b..ebb44341 100644 --- a/NorthstarDLL/maxplayers.cpp +++ b/NorthstarDLL/shared/maxplayers.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "tier0.h" +#include "core/tier0.h" #include "maxplayers.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/maxplayers.h b/NorthstarDLL/shared/maxplayers.h index b251f6a6..b251f6a6 100644 --- a/NorthstarDLL/maxplayers.h +++ b/NorthstarDLL/shared/maxplayers.h diff --git a/NorthstarDLL/misccommands.cpp b/NorthstarDLL/shared/misccommands.cpp index f877dcc0..ad8b2a32 100644 --- a/NorthstarDLL/misccommands.cpp +++ b/NorthstarDLL/shared/misccommands.cpp @@ -1,15 +1,15 @@ #include "pch.h" #include "misccommands.h" -#include "concommand.h" -#include "playlist.h" -#include "r2engine.h" -#include "r2client.h" -#include "tier0.h" -#include "hoststate.h" -#include "masterserver.h" -#include "modmanager.h" -#include "serverauthentication.h" -#include "squirrel.h" +#include "core/convar/concommand.h" +#include "shared/playlist.h" +#include "engine/r2engine.h" +#include "client/r2client.h" +#include "core/tier0.h" +#include "engine/hoststate.h" +#include "masterserver/masterserver.h" +#include "mods/modmanager.h" +#include "server/auth/serverauthentication.h" +#include "squirrel/squirrel.h" void ConCommand_force_newgame(const CCommand& arg) { @@ -202,7 +202,6 @@ void FixupCvarFlags() {"cam_collision", FCVAR_DEVELOPMENTONLY}, {"cam_idealdelta", FCVAR_DEVELOPMENTONLY}, {"cam_ideallag", FCVAR_DEVELOPMENTONLY}, - {"r_drawviewmodel", FCVAR_CHEAT}, // this is a cheat command, but shouldn't be as you can achieve similar effects through mods // graphics/visual settings {"mat_colorcorrection", FCVAR_DEVELOPMENTONLY}, diff --git a/NorthstarDLL/misccommands.h b/NorthstarDLL/shared/misccommands.h index 07a07fb3..07a07fb3 100644 --- a/NorthstarDLL/misccommands.h +++ b/NorthstarDLL/shared/misccommands.h diff --git a/NorthstarDLL/playlist.cpp b/NorthstarDLL/shared/playlist.cpp index 4f34dbb1..2fb856b3 100644 --- a/NorthstarDLL/playlist.cpp +++ b/NorthstarDLL/shared/playlist.cpp @@ -1,10 +1,10 @@ #include "pch.h" #include "playlist.h" -#include "concommand.h" -#include "convar.h" -#include "squirrel.h" -#include "hoststate.h" -#include "serverpresence.h" +#include "core/convar/concommand.h" +#include "core/convar/convar.h" +#include "squirrel/squirrel.h" +#include "engine/hoststate.h" +#include "server/serverpresence.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/playlist.h b/NorthstarDLL/shared/playlist.h index c77b37d9..c77b37d9 100644 --- a/NorthstarDLL/playlist.h +++ b/NorthstarDLL/shared/playlist.h diff --git a/NorthstarDLL/sourceinterface.cpp b/NorthstarDLL/shared/sourceinterface.cpp index d5f7b7cd..ed95de50 100644 --- a/NorthstarDLL/sourceinterface.cpp +++ b/NorthstarDLL/shared/sourceinterface.cpp @@ -1,6 +1,6 @@ #include "pch.h" #include "sourceinterface.h" -#include "sourceconsole.h" +#include "console/sourceconsole.h" AUTOHOOK_INIT() diff --git a/NorthstarDLL/sourceinterface.h b/NorthstarDLL/shared/sourceinterface.h index 474e961b..474e961b 100644 --- a/NorthstarDLL/sourceinterface.h +++ b/NorthstarDLL/shared/sourceinterface.h diff --git a/NorthstarDLL/squirrel.cpp b/NorthstarDLL/squirrel/squirrel.cpp index 3d62ac62..eb4b6bed 100644 --- a/NorthstarDLL/squirrel.cpp +++ b/NorthstarDLL/squirrel/squirrel.cpp @@ -1,10 +1,10 @@ #include "pch.h" #include "squirrel.h" -#include "concommand.h" -#include "modmanager.h" -#include "dedicated.h" -#include "r2engine.h" -#include "tier0.h" +#include "core/convar/concommand.h" +#include "mods/modmanager.h" +#include "dedicated/dedicated.h" +#include "engine/r2engine.h" +#include "core/tier0.h" #include <any> @@ -317,11 +317,11 @@ template <ScriptContext context> CSquirrelVM* __fastcall CreateNewVMHook(void* a return sqvm; } -template <ScriptContext context> void (*__fastcall DestroyVM)(void* a1, CSquirrelVM* sqvm); -template <ScriptContext context> void __fastcall DestroyVMHook(void* a1, CSquirrelVM* sqvm) +template <ScriptContext context> void (*__fastcall DestroyVM)(void* a1, HSquirrelVM* sqvm); +template <ScriptContext context> void __fastcall DestroyVMHook(void* a1, HSquirrelVM* sqvm) { ScriptContext realContext = context; // ui and client use the same function so we use this for prints - if (IsUIVM(context, sqvm->sqvm)) + if (IsUIVM(context, sqvm)) { realContext = ScriptContext::UI; g_pSquirrel<ScriptContext::UI>->VMDestroyed(); @@ -329,7 +329,7 @@ template <ScriptContext context> void __fastcall DestroyVMHook(void* a1, CSquirr } else { - g_pSquirrel<context>->VMDestroyed(); + g_pSquirrel<context>->m_pSQVM = nullptr; // Fixes a race-like bug DestroyVM<context>(a1, sqvm); } diff --git a/NorthstarDLL/squirrel.h b/NorthstarDLL/squirrel/squirrel.h index a1f1dd5f..3e3d08c9 100644 --- a/NorthstarDLL/squirrel.h +++ b/NorthstarDLL/squirrel/squirrel.h @@ -1,9 +1,9 @@ #pragma once +#include "logging/logging.h" #include "squirrelclasstypes.h" #include "squirrelautobind.h" -#include "vector.h" -#include "logging.h" +#include "core/math/vector.h" // stolen from ttf2sdk: sqvm types typedef float SQFloat; @@ -122,7 +122,7 @@ class SquirrelManagerBase return __sq_call(sqvm, args + 1, false, false); } - inline SQInteger raiseerror(HSquirrelVM* sqvm, const const SQChar* sError) + inline SQInteger raiseerror(HSquirrelVM* sqvm, const SQChar* sError) { return __sq_raiseerror(sqvm, sError); } diff --git a/NorthstarDLL/squirrelautobind.cpp b/NorthstarDLL/squirrel/squirrelautobind.cpp index d5f42477..d5f42477 100644 --- a/NorthstarDLL/squirrelautobind.cpp +++ b/NorthstarDLL/squirrel/squirrelautobind.cpp diff --git a/NorthstarDLL/squirrelautobind.h b/NorthstarDLL/squirrel/squirrelautobind.h index 865479a1..865479a1 100644 --- a/NorthstarDLL/squirrelautobind.h +++ b/NorthstarDLL/squirrel/squirrelautobind.h diff --git a/NorthstarDLL/squirrelclasstypes.h b/NorthstarDLL/squirrel/squirrelclasstypes.h index e26bc8d0..e26bc8d0 100644 --- a/NorthstarDLL/squirrelclasstypes.h +++ b/NorthstarDLL/squirrel/squirrelclasstypes.h diff --git a/NorthstarDLL/squirreldatatypes.h b/NorthstarDLL/squirrel/squirreldatatypes.h index e9f88d08..e9f88d08 100644 --- a/NorthstarDLL/squirreldatatypes.h +++ b/NorthstarDLL/squirrel/squirreldatatypes.h diff --git a/NorthstarDLL/printcommands.cpp b/NorthstarDLL/util/printcommands.cpp index 90af1575..5552c50c 100644 --- a/NorthstarDLL/printcommands.cpp +++ b/NorthstarDLL/util/printcommands.cpp @@ -1,7 +1,7 @@ #include "pch.h" -#include "printcommand.h" -#include "convar.h" -#include "concommand.h" +#include "printcommands.h" +#include "core/convar/convar.h" +#include "core/convar/concommand.h" void PrintCommandHelpDialogue(const ConCommandBase* command, const char* name) { diff --git a/NorthstarDLL/printcommand.h b/NorthstarDLL/util/printcommands.h index 6c3ef850..cb72e5cc 100644 --- a/NorthstarDLL/printcommand.h +++ b/NorthstarDLL/util/printcommands.h @@ -1,5 +1,5 @@ #pragma once -#include "concommand.h" +#include "core/convar/concommand.h" void PrintCommandHelpDialogue(const ConCommandBase* command, const char* name); void TryPrintCvarHelpForCommand(const char* pCommand); diff --git a/NorthstarDLL/printmaps.cpp b/NorthstarDLL/util/printmaps.cpp index c378daad..e0192d69 100644 --- a/NorthstarDLL/printmaps.cpp +++ b/NorthstarDLL/util/printmaps.cpp @@ -1,10 +1,10 @@ #include "pch.h" #include "printmaps.h" -#include "convar.h" -#include "concommand.h" -#include "modmanager.h" -#include "tier0.h" -#include "r2engine.h" +#include "core/convar/convar.h" +#include "core/convar/concommand.h" +#include "mods/modmanager.h" +#include "core/tier0.h" +#include "engine/r2engine.h" #include <filesystem> #include <regex> diff --git a/NorthstarDLL/printmaps.h b/NorthstarDLL/util/printmaps.h index b01761c0..b01761c0 100644 --- a/NorthstarDLL/printmaps.h +++ b/NorthstarDLL/util/printmaps.h diff --git a/NorthstarDLL/version.cpp b/NorthstarDLL/util/version.cpp index 088fb491..8697b61f 100644 --- a/NorthstarDLL/version.cpp +++ b/NorthstarDLL/util/version.cpp @@ -1,7 +1,7 @@ -#include "version.h" +#include "util/version.h" #include "pch.h" #include "ns_version.h" -#include "dedicated.h" +#include "dedicated/dedicated.h" char version[16]; char NSUserAgent[256]; diff --git a/NorthstarDLL/version.h b/NorthstarDLL/util/version.h index 261a4cf1..261a4cf1 100644 --- a/NorthstarDLL/version.h +++ b/NorthstarDLL/util/version.h |