aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL
diff options
context:
space:
mode:
authorBobTheBob9 <for.oliver.kirkham@gmail.com>2022-09-01 23:08:58 +0100
committerBobTheBob9 <for.oliver.kirkham@gmail.com>2022-09-01 23:08:58 +0100
commit2f2b497aca23239406ce3f8d94f29f10d205a68b (patch)
tree36e630a82422e97520e4c9f9bc60578cc9f0002d /NorthstarDLL
parentf2e670bd32fc291dbb6a4b45c08cb8f2d94a6bc8 (diff)
downloadNorthstarLauncher-2f2b497aca23239406ce3f8d94f29f10d205a68b.tar.gz
NorthstarLauncher-2f2b497aca23239406ce3f8d94f29f10d205a68b.zip
add scriptdatatable.cpp rewrite
Diffstat (limited to 'NorthstarDLL')
-rw-r--r--NorthstarDLL/NorthstarDLL.vcxproj1
-rw-r--r--NorthstarDLL/NorthstarDLL.vcxproj.filters3597
-rw-r--r--NorthstarDLL/audio.h2
-rw-r--r--NorthstarDLL/buildainfile.cpp2
-rw-r--r--NorthstarDLL/clientchathooks.cpp12
-rw-r--r--NorthstarDLL/debugoverlay.cpp11
-rw-r--r--NorthstarDLL/dllmain.cpp1
-rw-r--r--NorthstarDLL/exploitfixes.cpp14
-rw-r--r--NorthstarDLL/hooks.cpp2
-rw-r--r--NorthstarDLL/languagehooks.cpp2
-rw-r--r--NorthstarDLL/masterserver.cpp4
-rw-r--r--NorthstarDLL/misccommands.cpp2
-rw-r--r--NorthstarDLL/modmanager.h2
-rw-r--r--NorthstarDLL/pch.h2
-rw-r--r--NorthstarDLL/scriptdatatables.cpp1177
-rw-r--r--NorthstarDLL/scriptservertoclientstringcommand.cpp6
-rw-r--r--NorthstarDLL/serverchathooks.cpp8
-rw-r--r--NorthstarDLL/squirrel.cpp250
-rw-r--r--NorthstarDLL/squirrel.h37
-rw-r--r--NorthstarDLL/squirreldatatypes.h18
-rw-r--r--NorthstarDLL/vector.h44
21 files changed, 2618 insertions, 2576 deletions
diff --git a/NorthstarDLL/NorthstarDLL.vcxproj b/NorthstarDLL/NorthstarDLL.vcxproj
index e4cce334..ac1b3991 100644
--- a/NorthstarDLL/NorthstarDLL.vcxproj
+++ b/NorthstarDLL/NorthstarDLL.vcxproj
@@ -559,6 +559,7 @@
<ClInclude Include="squirrel.h" />
<ClInclude Include="exploitfixes_utf8parser.cpp" />
<ClInclude Include="tier0.h" />
+ <ClInclude Include="vector.h" />
<ClInclude Include="version.h" />
</ItemGroup>
<ItemGroup>
diff --git a/NorthstarDLL/NorthstarDLL.vcxproj.filters b/NorthstarDLL/NorthstarDLL.vcxproj.filters
index ab788fff..293543f7 100644
--- a/NorthstarDLL/NorthstarDLL.vcxproj.filters
+++ b/NorthstarDLL/NorthstarDLL.vcxproj.filters
@@ -1,1798 +1,1801 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
- <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
- <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
- </Filter>
- <Filter Include="Resource Files">
- <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
- </Filter>
- <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>
- <Filter Include="Header Files\include\spdlog\cfg">
- <UniqueIdentifier>{11eaa578-6336-456e-9c7c-8bd202470945}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\include\spdlog\fmt">
- <UniqueIdentifier>{7ecd75d2-7eee-41c4-87b6-3b7c2213f34e}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\include\spdlog\fmt\bundled">
- <UniqueIdentifier>{8afc70f1-639c-49ef-9348-ef6dcece114e}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\include\spdlog\sinks">
- <UniqueIdentifier>{398efed5-0a92-4d32-b5ba-b4a725b2a70a}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\include\spdlog\details">
- <UniqueIdentifier>{74567974-c66b-45ef-ab28-97b7154ca224}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\include\rapidjson">
- <UniqueIdentifier>{4ca5392e-7d3d-4066-833f-f534cd5787c3}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\include\rapidjson\error">
- <UniqueIdentifier>{94b15898-ef33-41c7-995a-31791fccb7e2}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\include\rapidjson\internal">
- <UniqueIdentifier>{6495657f-ea55-4552-8aa7-b54eb8e86a99}</UniqueIdentifier>
- </Filter>
- <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\openssl\openssl">
- <UniqueIdentifier>{914d8b8f-6b19-4f23-b746-f40062d72906}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\include\openssl\internal">
- <UniqueIdentifier>{09516029-fac7-4235-ad61-402977534a0b}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\include\openssl\crypto">
- <UniqueIdentifier>{8cc1ae44-9dbf-4719-91a2-82e00b8d78e2}</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>
- <Filter Include="Source Files\Server\Scripted">
- <UniqueIdentifier>{325e0d7d-6832-496d-8d8e-968fdfa5dd40}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Server\Scripted">
- <UniqueIdentifier>{802d0771-62f1-4733-89f9-57a4d8864b8d}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Console">
- <UniqueIdentifier>{04fd662a-6e70-494c-b720-c694a5cc2fb1}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Convar">
- <UniqueIdentifier>{a18afb37-5fdd-4340-a6b4-a6541593e398}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Exploit Fixes">
- <UniqueIdentifier>{4a8a695a-a103-4b1f-b314-0ec19a253119}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Filesystem">
- <UniqueIdentifier>{d8a83b5e-9a23-4124-824f-eab37880cb08}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Game Functions">
- <UniqueIdentifier>{2cbddb28-0b17-4881-847d-8773da52b268}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Hooks">
- <UniqueIdentifier>{4db0d1e9-9035-457f-87f1-5dc3f13b6b9e}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Math">
- <UniqueIdentifier>{59b0f68f-daa7-4641-b6fa-8464b56da2bb}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Mods">
- <UniqueIdentifier>{3e892d07-2239-44da-9cf3-c288a34cf9a2}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Mods\Compiled Assets">
- <UniqueIdentifier>{14fc0931-acad-46ec-a55e-94f4469d4235}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Dedicated Server">
- <UniqueIdentifier>{947835db-67d6-42c0-870d-62743f85231f}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Console">
- <UniqueIdentifier>{bf0769d8-40fd-4701-85e9-7ed94aab2283}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Convar">
- <UniqueIdentifier>{9751b551-5886-45d4-a039-cbd10445263d}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Exploit Fixes">
- <UniqueIdentifier>{96101d42-72af-4fd1-8559-8d1d1ff66240}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Filesystem">
- <UniqueIdentifier>{ee3ba13a-3061-41d7-981d-328ac2596fd2}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Game Functions">
- <UniqueIdentifier>{0c93d909-e0d6-4c35-a8a4-a13f681a1012}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Hooks">
- <UniqueIdentifier>{94259c8c-5411-48bf-af4f-46ca32b7d0bb}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Math">
- <UniqueIdentifier>{44a83740-9d70-480d-9a7a-43b81f8eab9e}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Mods">
- <UniqueIdentifier>{6bbce8a5-38b4-4763-a7cb-4e98012ec245}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Mods\Compiled Assets">
- <UniqueIdentifier>{826d5193-3ad0-434b-ba7c-dd24ed4bbd0c}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Dedicated Server">
- <UniqueIdentifier>{0f1ba4c4-78ee-4b05-afa5-6f598063f5c1}</UniqueIdentifier>
- </Filter>
- <Filter Include="Header Files\Squirrel">
- <UniqueIdentifier>{ca669b16-b8bb-4654-993f-fffa44c914f1}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Squirrel">
- <UniqueIdentifier>{26365f16-ff52-4e80-a01b-2ca020376c93}</UniqueIdentifier>
- </Filter>
- <Filter Include="Source Files\Scripted">
- <UniqueIdentifier>{7263403a-7550-4aa2-a724-f622ab200eed}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="pch.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="include\MinHook.h">
- <Filter>Header Files\include</Filter>
- </ClInclude>
- <ClInclude Include="main.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="sourceconsole.h">
- <Filter>Header Files\Client</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\async.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\async_logger.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\async_logger-inl.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\common.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\common-inl.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\formatter.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fwd.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\logger.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\logger-inl.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\pattern_formatter.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\pattern_formatter-inl.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\spdlog.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\spdlog-inl.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\stopwatch.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\tweakme.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\version.h">
- <Filter>Header Files\include\spdlog</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\cfg\argv.h">
- <Filter>Header Files\include\spdlog\cfg</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\cfg\env.h">
- <Filter>Header Files\include\spdlog\cfg</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\cfg\helpers.h">
- <Filter>Header Files\include\spdlog\cfg</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\cfg\helpers-inl.h">
- <Filter>Header Files\include\spdlog\cfg</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bin_to_hex.h">
- <Filter>Header Files\include\spdlog\fmt</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\chrono.h">
- <Filter>Header Files\include\spdlog\fmt</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\fmt.h">
- <Filter>Header Files\include\spdlog\fmt</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\ostr.h">
- <Filter>Header Files\include\spdlog\fmt</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\chrono.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\color.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\compile.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\core.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\format.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\format-inl.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\locale.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\os.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\ostream.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\posix.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\printf.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\fmt\bundled\ranges.h">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\android_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\ansicolor_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\ansicolor_sink-inl.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\base_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\base_sink-inl.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\basic_file_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\basic_file_sink-inl.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\daily_file_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\dist_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\dup_filter_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\hourly_file_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\msvc_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\null_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\ostream_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\ringbuffer_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\rotating_file_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\rotating_file_sink-inl.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\sink-inl.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\stdout_color_sinks.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\stdout_color_sinks-inl.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\stdout_sinks.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\stdout_sinks-inl.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\syslog_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\systemd_sink.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\sinks\tcp_sink.h">
- <Filter>Header Files\include\spdlog\sinks</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="include\spdlog\sinks\wincolor_sink-inl.h">
- <Filter>Header Files\include\spdlog\sinks</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\backtracer.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\backtracer-inl.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\circular_q.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\console_globals.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\file_helper.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\file_helper-inl.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\fmt_helper.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\log_msg.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\log_msg_buffer.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\log_msg_buffer-inl.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\log_msg-inl.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\mpmc_blocking_q.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\null_mutex.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\os.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\os-inl.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\periodic_worker.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\periodic_worker-inl.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\registry.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\registry-inl.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\synchronous_factory.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\tcp_client.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\tcp_client-windows.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\thread_pool.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\thread_pool-inl.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\spdlog\details\windows_include.h">
- <Filter>Header Files\include\spdlog\details</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\allocators.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\document.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\encodedstream.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\encodings.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\filereadstream.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\filewritestream.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\fwd.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\istreamwrapper.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\memorybuffer.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\memorystream.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\ostreamwrapper.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\pointer.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\prettywriter.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\rapidjson.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\reader.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\schema.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\stream.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\stringbuffer.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\writer.h">
- <Filter>Header Files\include\rapidjson</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\error\en.h">
- <Filter>Header Files\include\rapidjson\error</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\error\error.h">
- <Filter>Header Files\include\rapidjson\error</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\biginteger.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\diyfp.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\dtoa.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\ieee754.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\itoa.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\meta.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\pow10.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\regex.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\stack.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\strfunc.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\strtod.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\internal\swap.h">
- <Filter>Header Files\include\rapidjson\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\msinttypes\inttypes.h">
- <Filter>Header Files\include\rapidjson\msinttypes</Filter>
- </ClInclude>
- <ClInclude Include="include\rapidjson\msinttypes\stdint.h">
- <Filter>Header Files\include\rapidjson\msinttypes</Filter>
- </ClInclude>
- <ClInclude Include="serverauthentication.h">
- <Filter>Header Files\Server\Authentication</Filter>
- </ClInclude>
- <ClInclude Include="include\httplib.h">
- <Filter>Header Files\include</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\__DECC_INCLUDE_EPILOGUE.H">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\__DECC_INCLUDE_PROLOGUE.H">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\aes.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\asn1.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\asn1_mac.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\asn1err.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\asn1t.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\async.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\asyncerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\bio.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\bioerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\blowfish.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\bn.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\bnerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\buffer.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\buffererr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\camellia.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cast.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cmac.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cmp.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cmp_util.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cmperr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cms.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cmserr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\comp.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\comperr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\conf.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\conf_api.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\conferr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\configuration.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\conftypes.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\core.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\core_dispatch.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\core_names.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\core_object.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\crmf.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\crmferr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\crypto.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cryptoerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cryptoerr_legacy.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ct.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\cterr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\decoder.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\decodererr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\des.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\dh.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\dherr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\dsa.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\dsaerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\dtls1.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\e_os2.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ebcdic.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ec.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ecdh.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ecdsa.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ecerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\encoder.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\encodererr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\engine.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\engineerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\err.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ess.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\esserr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\evp.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\evperr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\fips_names.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\fipskey.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\hmac.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\http.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\httperr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\idea.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\kdf.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\kdferr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\lhash.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\macros.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\md2.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\md4.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\md5.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\mdc2.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\modes.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\obj_mac.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\objects.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\objectserr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ocsp.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ocsperr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\opensslconf.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\opensslv.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ossl_typ.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\param_build.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\params.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\pem.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\pem2.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\pemerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\pkcs7.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\pkcs7err.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\pkcs12.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\pkcs12err.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\prov_ssl.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\proverr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\provider.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\rand.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\randerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\rc2.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\rc4.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\rc5.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ripemd.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\rsa.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\rsaerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\safestack.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\seed.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\self_test.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\sha.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\srp.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\srtp.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ssl.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ssl2.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ssl3.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\sslerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\sslerr_legacy.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\stack.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\store.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\storeerr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\symhacks.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\tls1.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\trace.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ts.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\tserr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\txt_db.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\types.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\ui.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\uierr.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\whrlpool.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\x509.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\x509_vfy.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\x509err.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\x509v3.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\openssl\x509v3err.h">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\__DECC_INCLUDE_EPILOGUE.H">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\__DECC_INCLUDE_PROLOGUE.H">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\aes_platform.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\aria.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\asn1.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\asn1_dsa.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\asn1err.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\async.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\asyncerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\bioerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\bn.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\bn_conf.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\bn_dh.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\bn_srp.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\bnerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\buffererr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\chacha.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\cmll_platform.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\cmperr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\cmserr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\comperr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\conferr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\crmferr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\cryptlib.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\cryptoerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\cterr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\ctype.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\decoder.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\decodererr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\des_platform.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\dh.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\dherr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\dsa.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\dsaerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\dso_conf.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\ec.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\ecerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\ecx.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\encoder.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\encodererr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\engine.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\engineerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\err.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\ess.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\esserr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\evp.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\evperr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\httperr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\lhash.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\md32_common.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\modes.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\objects.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\objectserr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\ocsperr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\pem.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\pemerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\pkcs7.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\pkcs7err.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\pkcs12err.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\poly1305.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\ppc_arch.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\punycode.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\rand.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\rand_pool.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\randerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\rsa.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\rsaerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\security_bits.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\sha.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\siphash.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\siv.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\sm2.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\sm2err.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\sm4.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\sparc_arch.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\sparse_array.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\store.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\storeerr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\tserr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\types.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\uierr.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\x509.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\x509err.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\crypto\x509v3err.h">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\__DECC_INCLUDE_EPILOGUE.H">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\__DECC_INCLUDE_PROLOGUE.H">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\asn1.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\bio.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\comp.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\conf.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\constant_time.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\core.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\cryptlib.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\dane.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\deprecated.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\der.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\dso.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\dsoerr.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\endian.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\err.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\ffc.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\ktls.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\namemap.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\nelem.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\numbers.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\o_dir.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\packet.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\param_build_set.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\passphrase.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\property.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\propertyerr.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\provider.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\refcount.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\sha3.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\sizes.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\sm3.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\sockets.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\sslconf.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\symhacks.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\thread_once.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\tlsgroups.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\tsan_assist.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\internal\unicode.h">
- <Filter>Header Files\include\openssl\internal</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\curl.h">
- <Filter>Header Files\include\libcurl</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\curlver.h">
- <Filter>Header Files\include\libcurl</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\easy.h">
- <Filter>Header Files\include\libcurl</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\mprintf.h">
- <Filter>Header Files\include\libcurl</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\multi.h">
- <Filter>Header Files\include\libcurl</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\options.h">
- <Filter>Header Files\include\libcurl</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\stdcheaders.h">
- <Filter>Header Files\include\libcurl</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\system.h">
- <Filter>Header Files\include\libcurl</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\typecheck-gcc.h">
- <Filter>Header Files\include\libcurl</Filter>
- </ClInclude>
- <ClInclude Include="include\libcurl\include\curl\urlapi.h">
- <Filter>Header Files\include\libcurl</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="pdef.h">
- <Filter>Header Files\Mods\Compiled Assets</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="scriptsrson.h">
- <Filter>Header Files\Mods\Compiled Assets</Filter>
- </ClInclude>
- <ClInclude Include="tier0.h">
- <Filter>Header Files\Game Functions</Filter>
- </ClInclude>
- <ClInclude Include="sigscanning.h">
- <Filter>Header Files\Hooks</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>
- </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>
- </ClCompile>
- <ClCompile Include="scriptsrson.cpp">
- <Filter>Source Files\Mods\Compiled Assets</Filter>
- </ClCompile>
- <ClCompile Include="serverauthentication.cpp">
- <Filter>Source Files\Server\Authentication</Filter>
- </ClCompile>
- <ClCompile Include="keyvalues.cpp">
- <Filter>Source Files\Mods\Compiled Assets</Filter>
- </ClCompile>
- <ClCompile Include="chatcommand.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="modlocalisation.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="dedicatedmaterialsystem.cpp">
- <Filter>Source Files\Dedicated Server</Filter>
- </ClCompile>
- <ClCompile Include="pdef.cpp">
- <Filter>Source Files\Mods\Compiled Assets</Filter>
- </ClCompile>
- <ClCompile Include="clientauthhooks.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="miscserverfixes.cpp">
- <Filter>Source Files\Server</Filter>
- </ClCompile>
- <ClCompile Include="bansystem.cpp">
- <Filter>Source Files\Server\Authentication</Filter>
- </ClCompile>
- <ClCompile Include="languagehooks.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="latencyflex.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="audio.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="buildainfile.cpp">
- <Filter>Source Files\Server</Filter>
- </ClCompile>
- <ClCompile Include="localchatwriter.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="plugins.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="debugoverlay.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="clientvideooverrides.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="version.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="clientruihooks.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="scriptmainmenupromos.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="clientchathooks.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="scriptmodmenu.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="scriptservertoclientstringcommand.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="scriptserverbrowser.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="scriptbrowserhooks.cpp">
- <Filter>Source Files\Client\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="serverchathooks.cpp">
- <Filter>Source Files\Server\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="miscserverscript.cpp">
- <Filter>Source Files\Server\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="demofixes.cpp">
- <Filter>Source Files\Client</Filter>
- </ClCompile>
- <ClCompile Include="nsprefix.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="dllmain.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="crashhandler.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="host.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="hoststate.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="masterserver.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="maxplayers.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="memalloc.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="playlist.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="sourceinterface.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="r2server.cpp">
- <Filter>Source Files\Game Functions</Filter>
- </ClCompile>
- <ClCompile Include="r2client.cpp">
- <Filter>Source Files\Game Functions</Filter>
- </ClCompile>
- <ClCompile Include="r2engine.cpp">
- <Filter>Source Files\Game Functions</Filter>
- </ClCompile>
- <ClCompile Include="rpakfilesystem.cpp">
- <Filter>Source Files\Filesystem</Filter>
- </ClCompile>
- <ClCompile Include="filesystem.cpp">
- <Filter>Source Files\Filesystem</Filter>
- </ClCompile>
- <ClCompile Include="exploitfixes.cpp">
- <Filter>Source Files\Exploit Fixes</Filter>
- </ClCompile>
- <ClCompile Include="limits.cpp">
- <Filter>Source Files\Exploit Fixes</Filter>
- </ClCompile>
- <ClCompile Include="hooks.cpp">
- <Filter>Source Files\Hooks</Filter>
- </ClCompile>
- <ClCompile Include="sigscanning.cpp">
- <Filter>Source Files\Hooks</Filter>
- </ClCompile>
- <ClCompile Include="bits.cpp">
- <Filter>Source Files\Math</Filter>
- </ClCompile>
- <ClCompile Include="convar.cpp">
- <Filter>Source Files\Convar</Filter>
- </ClCompile>
- <ClCompile Include="concommand.cpp">
- <Filter>Source Files\Convar</Filter>
- </ClCompile>
- <ClCompile Include="printcommands.cpp">
- <Filter>Source Files\Console</Filter>
- </ClCompile>
- <ClCompile Include="printmaps.cpp">
- <Filter>Source Files\Console</Filter>
- </ClCompile>
- <ClCompile Include="cvar.cpp">
- <Filter>Source Files\Convar</Filter>
- </ClCompile>
- <ClCompile Include="misccommands.cpp">
- <Filter>Source Files\Convar</Filter>
- </ClCompile>
- <ClCompile Include="tier0.cpp">
- <Filter>Source Files\Game Functions</Filter>
- </ClCompile>
- <ClCompile Include="logging.cpp">
- <Filter>Source Files\Console</Filter>
- </ClCompile>
- <ClCompile Include="serverpresence.cpp">
- <Filter>Source Files\Server</Filter>
- </ClCompile>
- <ClCompile Include="runframe.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="memory.cpp">
- <Filter>Source Files\Hooks</Filter>
- </ClCompile>
- <ClCompile Include="exploitfixes_lzss.cpp">
- <Filter>Source Files\Exploit Fixes</Filter>
- </ClCompile>
- <ClCompile Include="scriptutility.cpp">
- <Filter>Source Files\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="scriptjson.cpp">
- <Filter>Source Files\Scripted</Filter>
- </ClCompile>
- <ClCompile Include="squirrel.cpp">
- <Filter>Source Files\Squirrel</Filter>
- </ClCompile>
- <ClCompile Include="scriptdatatables.cpp">
- <Filter>Source Files\Scripted</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <MASM Include="audio_asm.asm">
- <Filter>Source Files\Client</Filter>
- </MASM>
- </ItemGroup>
- <ItemGroup>
- <None Include="include\spdlog\fmt\bundled\LICENSE.rst">
- <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
- </None>
- <None Include="include\openssl\asn1.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\asn1t.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\bio.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\cmp.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\cms.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\conf.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\configuration.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\crmf.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\crypto.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\ct.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\err.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\ess.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\fipskey.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\lhash.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\ocsp.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\opensslv.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\pkcs7.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\pkcs12.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\safestack.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\srp.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\ssl.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\ui.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\x509.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\x509_vfy.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\openssl\x509v3.h.in">
- <Filter>Header Files\include\openssl\openssl</Filter>
- </None>
- <None Include="include\crypto\bn_conf.h.in">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </None>
- <None Include="include\crypto\dso_conf.h.in">
- <Filter>Header Files\include\openssl\crypto</Filter>
- </None>
- </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ <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>
+ <Filter Include="Header Files\include\spdlog\cfg">
+ <UniqueIdentifier>{11eaa578-6336-456e-9c7c-8bd202470945}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\include\spdlog\fmt">
+ <UniqueIdentifier>{7ecd75d2-7eee-41c4-87b6-3b7c2213f34e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\include\spdlog\fmt\bundled">
+ <UniqueIdentifier>{8afc70f1-639c-49ef-9348-ef6dcece114e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\include\spdlog\sinks">
+ <UniqueIdentifier>{398efed5-0a92-4d32-b5ba-b4a725b2a70a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\include\spdlog\details">
+ <UniqueIdentifier>{74567974-c66b-45ef-ab28-97b7154ca224}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\include\rapidjson">
+ <UniqueIdentifier>{4ca5392e-7d3d-4066-833f-f534cd5787c3}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\include\rapidjson\error">
+ <UniqueIdentifier>{94b15898-ef33-41c7-995a-31791fccb7e2}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\include\rapidjson\internal">
+ <UniqueIdentifier>{6495657f-ea55-4552-8aa7-b54eb8e86a99}</UniqueIdentifier>
+ </Filter>
+ <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\openssl\openssl">
+ <UniqueIdentifier>{914d8b8f-6b19-4f23-b746-f40062d72906}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\include\openssl\internal">
+ <UniqueIdentifier>{09516029-fac7-4235-ad61-402977534a0b}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\include\openssl\crypto">
+ <UniqueIdentifier>{8cc1ae44-9dbf-4719-91a2-82e00b8d78e2}</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>
+ <Filter Include="Source Files\Server\Scripted">
+ <UniqueIdentifier>{325e0d7d-6832-496d-8d8e-968fdfa5dd40}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Server\Scripted">
+ <UniqueIdentifier>{802d0771-62f1-4733-89f9-57a4d8864b8d}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Console">
+ <UniqueIdentifier>{04fd662a-6e70-494c-b720-c694a5cc2fb1}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Convar">
+ <UniqueIdentifier>{a18afb37-5fdd-4340-a6b4-a6541593e398}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Exploit Fixes">
+ <UniqueIdentifier>{4a8a695a-a103-4b1f-b314-0ec19a253119}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Filesystem">
+ <UniqueIdentifier>{d8a83b5e-9a23-4124-824f-eab37880cb08}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Game Functions">
+ <UniqueIdentifier>{2cbddb28-0b17-4881-847d-8773da52b268}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Hooks">
+ <UniqueIdentifier>{4db0d1e9-9035-457f-87f1-5dc3f13b6b9e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Math">
+ <UniqueIdentifier>{59b0f68f-daa7-4641-b6fa-8464b56da2bb}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Mods">
+ <UniqueIdentifier>{3e892d07-2239-44da-9cf3-c288a34cf9a2}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Mods\Compiled Assets">
+ <UniqueIdentifier>{14fc0931-acad-46ec-a55e-94f4469d4235}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Dedicated Server">
+ <UniqueIdentifier>{947835db-67d6-42c0-870d-62743f85231f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Console">
+ <UniqueIdentifier>{bf0769d8-40fd-4701-85e9-7ed94aab2283}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Convar">
+ <UniqueIdentifier>{9751b551-5886-45d4-a039-cbd10445263d}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Exploit Fixes">
+ <UniqueIdentifier>{96101d42-72af-4fd1-8559-8d1d1ff66240}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Filesystem">
+ <UniqueIdentifier>{ee3ba13a-3061-41d7-981d-328ac2596fd2}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Game Functions">
+ <UniqueIdentifier>{0c93d909-e0d6-4c35-a8a4-a13f681a1012}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Hooks">
+ <UniqueIdentifier>{94259c8c-5411-48bf-af4f-46ca32b7d0bb}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Math">
+ <UniqueIdentifier>{44a83740-9d70-480d-9a7a-43b81f8eab9e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Mods">
+ <UniqueIdentifier>{6bbce8a5-38b4-4763-a7cb-4e98012ec245}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Mods\Compiled Assets">
+ <UniqueIdentifier>{826d5193-3ad0-434b-ba7c-dd24ed4bbd0c}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Dedicated Server">
+ <UniqueIdentifier>{0f1ba4c4-78ee-4b05-afa5-6f598063f5c1}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files\Squirrel">
+ <UniqueIdentifier>{ca669b16-b8bb-4654-993f-fffa44c914f1}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Squirrel">
+ <UniqueIdentifier>{26365f16-ff52-4e80-a01b-2ca020376c93}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Scripted">
+ <UniqueIdentifier>{7263403a-7550-4aa2-a724-f622ab200eed}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="pch.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="include\MinHook.h">
+ <Filter>Header Files\include</Filter>
+ </ClInclude>
+ <ClInclude Include="main.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="sourceconsole.h">
+ <Filter>Header Files\Client</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\async.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\async_logger.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\async_logger-inl.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\common.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\common-inl.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\formatter.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fwd.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\logger.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\logger-inl.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\pattern_formatter.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\pattern_formatter-inl.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\spdlog.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\spdlog-inl.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\stopwatch.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\tweakme.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\version.h">
+ <Filter>Header Files\include\spdlog</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\cfg\argv.h">
+ <Filter>Header Files\include\spdlog\cfg</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\cfg\env.h">
+ <Filter>Header Files\include\spdlog\cfg</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\cfg\helpers.h">
+ <Filter>Header Files\include\spdlog\cfg</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\cfg\helpers-inl.h">
+ <Filter>Header Files\include\spdlog\cfg</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bin_to_hex.h">
+ <Filter>Header Files\include\spdlog\fmt</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\chrono.h">
+ <Filter>Header Files\include\spdlog\fmt</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\fmt.h">
+ <Filter>Header Files\include\spdlog\fmt</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\ostr.h">
+ <Filter>Header Files\include\spdlog\fmt</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\chrono.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\color.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\compile.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\core.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\format.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\format-inl.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\locale.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\os.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\ostream.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\posix.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\printf.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\fmt\bundled\ranges.h">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\android_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\ansicolor_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\ansicolor_sink-inl.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\base_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\base_sink-inl.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\basic_file_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\basic_file_sink-inl.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\daily_file_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\dist_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\dup_filter_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\hourly_file_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\msvc_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\null_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\ostream_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\ringbuffer_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\rotating_file_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\rotating_file_sink-inl.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\sink-inl.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\stdout_color_sinks.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\stdout_color_sinks-inl.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\stdout_sinks.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\stdout_sinks-inl.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\syslog_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\systemd_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\sinks\tcp_sink.h">
+ <Filter>Header Files\include\spdlog\sinks</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="include\spdlog\sinks\wincolor_sink-inl.h">
+ <Filter>Header Files\include\spdlog\sinks</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\backtracer.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\backtracer-inl.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\circular_q.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\console_globals.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\file_helper.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\file_helper-inl.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\fmt_helper.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\log_msg.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\log_msg_buffer.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\log_msg_buffer-inl.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\log_msg-inl.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\mpmc_blocking_q.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\null_mutex.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\os.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\os-inl.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\periodic_worker.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\periodic_worker-inl.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\registry.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\registry-inl.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\synchronous_factory.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\tcp_client.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\tcp_client-windows.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\thread_pool.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\thread_pool-inl.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\spdlog\details\windows_include.h">
+ <Filter>Header Files\include\spdlog\details</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\allocators.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\document.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\encodedstream.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\encodings.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\filereadstream.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\filewritestream.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\fwd.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\istreamwrapper.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\memorybuffer.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\memorystream.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\ostreamwrapper.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\pointer.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\prettywriter.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\rapidjson.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\reader.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\schema.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\stream.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\stringbuffer.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\writer.h">
+ <Filter>Header Files\include\rapidjson</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\error\en.h">
+ <Filter>Header Files\include\rapidjson\error</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\error\error.h">
+ <Filter>Header Files\include\rapidjson\error</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\biginteger.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\diyfp.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\dtoa.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\ieee754.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\itoa.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\meta.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\pow10.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\regex.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\stack.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\strfunc.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\strtod.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\internal\swap.h">
+ <Filter>Header Files\include\rapidjson\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\msinttypes\inttypes.h">
+ <Filter>Header Files\include\rapidjson\msinttypes</Filter>
+ </ClInclude>
+ <ClInclude Include="include\rapidjson\msinttypes\stdint.h">
+ <Filter>Header Files\include\rapidjson\msinttypes</Filter>
+ </ClInclude>
+ <ClInclude Include="serverauthentication.h">
+ <Filter>Header Files\Server\Authentication</Filter>
+ </ClInclude>
+ <ClInclude Include="include\httplib.h">
+ <Filter>Header Files\include</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\__DECC_INCLUDE_EPILOGUE.H">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\__DECC_INCLUDE_PROLOGUE.H">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\aes.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\asn1.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\asn1_mac.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\asn1err.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\asn1t.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\async.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\asyncerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\bio.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\bioerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\blowfish.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\bn.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\bnerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\buffer.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\buffererr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\camellia.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cast.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cmac.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cmp.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cmp_util.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cmperr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cms.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cmserr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\comp.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\comperr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\conf.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\conf_api.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\conferr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\configuration.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\conftypes.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\core.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\core_dispatch.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\core_names.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\core_object.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\crmf.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\crmferr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\crypto.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cryptoerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cryptoerr_legacy.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ct.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\cterr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\decoder.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\decodererr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\des.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\dh.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\dherr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\dsa.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\dsaerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\dtls1.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\e_os2.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ebcdic.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ec.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ecdh.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ecdsa.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ecerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\encoder.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\encodererr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\engine.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\engineerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\err.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ess.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\esserr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\evp.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\evperr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\fips_names.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\fipskey.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\hmac.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\http.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\httperr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\idea.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\kdf.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\kdferr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\lhash.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\macros.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\md2.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\md4.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\md5.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\mdc2.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\modes.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\obj_mac.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\objects.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\objectserr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ocsp.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ocsperr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\opensslconf.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\opensslv.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ossl_typ.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\param_build.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\params.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\pem.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\pem2.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\pemerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\pkcs7.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\pkcs7err.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\pkcs12.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\pkcs12err.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\prov_ssl.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\proverr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\provider.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\rand.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\randerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\rc2.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\rc4.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\rc5.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ripemd.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\rsa.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\rsaerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\safestack.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\seed.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\self_test.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\sha.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\srp.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\srtp.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ssl.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ssl2.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ssl3.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\sslerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\sslerr_legacy.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\stack.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\store.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\storeerr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\symhacks.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\tls1.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\trace.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ts.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\tserr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\txt_db.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\types.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\ui.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\uierr.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\whrlpool.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\x509.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\x509_vfy.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\x509err.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\x509v3.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\openssl\x509v3err.h">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\__DECC_INCLUDE_EPILOGUE.H">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\__DECC_INCLUDE_PROLOGUE.H">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\aes_platform.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\aria.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\asn1.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\asn1_dsa.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\asn1err.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\async.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\asyncerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\bioerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\bn.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\bn_conf.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\bn_dh.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\bn_srp.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\bnerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\buffererr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\chacha.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\cmll_platform.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\cmperr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\cmserr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\comperr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\conferr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\crmferr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\cryptlib.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\cryptoerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\cterr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\ctype.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\decoder.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\decodererr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\des_platform.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\dh.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\dherr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\dsa.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\dsaerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\dso_conf.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\ec.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\ecerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\ecx.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\encoder.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\encodererr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\engine.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\engineerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\err.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\ess.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\esserr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\evp.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\evperr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\httperr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\lhash.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\md32_common.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\modes.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\objects.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\objectserr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\ocsperr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\pem.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\pemerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\pkcs7.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\pkcs7err.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\pkcs12err.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\poly1305.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\ppc_arch.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\punycode.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\rand.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\rand_pool.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\randerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\rsa.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\rsaerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\security_bits.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\sha.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\siphash.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\siv.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\sm2.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\sm2err.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\sm4.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\sparc_arch.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\sparse_array.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\store.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\storeerr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\tserr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\types.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\uierr.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\x509.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\x509err.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\crypto\x509v3err.h">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\__DECC_INCLUDE_EPILOGUE.H">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\__DECC_INCLUDE_PROLOGUE.H">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\asn1.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\bio.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\comp.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\conf.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\constant_time.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\core.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\cryptlib.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\dane.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\deprecated.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\der.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\dso.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\dsoerr.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\endian.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\err.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\ffc.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\ktls.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\namemap.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\nelem.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\numbers.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\o_dir.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\packet.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\param_build_set.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\passphrase.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\property.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\propertyerr.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\provider.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\refcount.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\sha3.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\sizes.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\sm3.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\sockets.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\sslconf.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\symhacks.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\thread_once.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\tlsgroups.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\tsan_assist.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\internal\unicode.h">
+ <Filter>Header Files\include\openssl\internal</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\curl.h">
+ <Filter>Header Files\include\libcurl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\curlver.h">
+ <Filter>Header Files\include\libcurl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\easy.h">
+ <Filter>Header Files\include\libcurl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\mprintf.h">
+ <Filter>Header Files\include\libcurl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\multi.h">
+ <Filter>Header Files\include\libcurl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\options.h">
+ <Filter>Header Files\include\libcurl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\stdcheaders.h">
+ <Filter>Header Files\include\libcurl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\system.h">
+ <Filter>Header Files\include\libcurl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\typecheck-gcc.h">
+ <Filter>Header Files\include\libcurl</Filter>
+ </ClInclude>
+ <ClInclude Include="include\libcurl\include\curl\urlapi.h">
+ <Filter>Header Files\include\libcurl</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="pdef.h">
+ <Filter>Header Files\Mods\Compiled Assets</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="scriptsrson.h">
+ <Filter>Header Files\Mods\Compiled Assets</Filter>
+ </ClInclude>
+ <ClInclude Include="tier0.h">
+ <Filter>Header Files\Game Functions</Filter>
+ </ClInclude>
+ <ClInclude Include="sigscanning.h">
+ <Filter>Header Files\Hooks</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>
+ </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>
+ </ClCompile>
+ <ClCompile Include="scriptsrson.cpp">
+ <Filter>Source Files\Mods\Compiled Assets</Filter>
+ </ClCompile>
+ <ClCompile Include="serverauthentication.cpp">
+ <Filter>Source Files\Server\Authentication</Filter>
+ </ClCompile>
+ <ClCompile Include="keyvalues.cpp">
+ <Filter>Source Files\Mods\Compiled Assets</Filter>
+ </ClCompile>
+ <ClCompile Include="chatcommand.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="modlocalisation.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="dedicatedmaterialsystem.cpp">
+ <Filter>Source Files\Dedicated Server</Filter>
+ </ClCompile>
+ <ClCompile Include="pdef.cpp">
+ <Filter>Source Files\Mods\Compiled Assets</Filter>
+ </ClCompile>
+ <ClCompile Include="clientauthhooks.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="miscserverfixes.cpp">
+ <Filter>Source Files\Server</Filter>
+ </ClCompile>
+ <ClCompile Include="bansystem.cpp">
+ <Filter>Source Files\Server\Authentication</Filter>
+ </ClCompile>
+ <ClCompile Include="languagehooks.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="latencyflex.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="audio.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="buildainfile.cpp">
+ <Filter>Source Files\Server</Filter>
+ </ClCompile>
+ <ClCompile Include="localchatwriter.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="plugins.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="debugoverlay.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="clientvideooverrides.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="version.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="clientruihooks.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="scriptmainmenupromos.cpp">
+ <Filter>Source Files\Client\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="clientchathooks.cpp">
+ <Filter>Source Files\Client\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="scriptmodmenu.cpp">
+ <Filter>Source Files\Client\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="scriptservertoclientstringcommand.cpp">
+ <Filter>Source Files\Client\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="scriptserverbrowser.cpp">
+ <Filter>Source Files\Client\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="scriptbrowserhooks.cpp">
+ <Filter>Source Files\Client\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="serverchathooks.cpp">
+ <Filter>Source Files\Server\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="miscserverscript.cpp">
+ <Filter>Source Files\Server\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="demofixes.cpp">
+ <Filter>Source Files\Client</Filter>
+ </ClCompile>
+ <ClCompile Include="nsprefix.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="dllmain.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="crashhandler.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="host.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="hoststate.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="masterserver.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="maxplayers.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="memalloc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="playlist.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="sourceinterface.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="r2server.cpp">
+ <Filter>Source Files\Game Functions</Filter>
+ </ClCompile>
+ <ClCompile Include="r2client.cpp">
+ <Filter>Source Files\Game Functions</Filter>
+ </ClCompile>
+ <ClCompile Include="r2engine.cpp">
+ <Filter>Source Files\Game Functions</Filter>
+ </ClCompile>
+ <ClCompile Include="rpakfilesystem.cpp">
+ <Filter>Source Files\Filesystem</Filter>
+ </ClCompile>
+ <ClCompile Include="filesystem.cpp">
+ <Filter>Source Files\Filesystem</Filter>
+ </ClCompile>
+ <ClCompile Include="exploitfixes.cpp">
+ <Filter>Source Files\Exploit Fixes</Filter>
+ </ClCompile>
+ <ClCompile Include="limits.cpp">
+ <Filter>Source Files\Exploit Fixes</Filter>
+ </ClCompile>
+ <ClCompile Include="hooks.cpp">
+ <Filter>Source Files\Hooks</Filter>
+ </ClCompile>
+ <ClCompile Include="sigscanning.cpp">
+ <Filter>Source Files\Hooks</Filter>
+ </ClCompile>
+ <ClCompile Include="bits.cpp">
+ <Filter>Source Files\Math</Filter>
+ </ClCompile>
+ <ClCompile Include="convar.cpp">
+ <Filter>Source Files\Convar</Filter>
+ </ClCompile>
+ <ClCompile Include="concommand.cpp">
+ <Filter>Source Files\Convar</Filter>
+ </ClCompile>
+ <ClCompile Include="printcommands.cpp">
+ <Filter>Source Files\Console</Filter>
+ </ClCompile>
+ <ClCompile Include="printmaps.cpp">
+ <Filter>Source Files\Console</Filter>
+ </ClCompile>
+ <ClCompile Include="cvar.cpp">
+ <Filter>Source Files\Convar</Filter>
+ </ClCompile>
+ <ClCompile Include="misccommands.cpp">
+ <Filter>Source Files\Convar</Filter>
+ </ClCompile>
+ <ClCompile Include="tier0.cpp">
+ <Filter>Source Files\Game Functions</Filter>
+ </ClCompile>
+ <ClCompile Include="logging.cpp">
+ <Filter>Source Files\Console</Filter>
+ </ClCompile>
+ <ClCompile Include="serverpresence.cpp">
+ <Filter>Source Files\Server</Filter>
+ </ClCompile>
+ <ClCompile Include="runframe.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="memory.cpp">
+ <Filter>Source Files\Hooks</Filter>
+ </ClCompile>
+ <ClCompile Include="exploitfixes_lzss.cpp">
+ <Filter>Source Files\Exploit Fixes</Filter>
+ </ClCompile>
+ <ClCompile Include="scriptutility.cpp">
+ <Filter>Source Files\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="scriptjson.cpp">
+ <Filter>Source Files\Scripted</Filter>
+ </ClCompile>
+ <ClCompile Include="squirrel.cpp">
+ <Filter>Source Files\Squirrel</Filter>
+ </ClCompile>
+ <ClCompile Include="scriptdatatables.cpp">
+ <Filter>Source Files\Scripted</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <MASM Include="audio_asm.asm">
+ <Filter>Source Files\Client</Filter>
+ </MASM>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="include\spdlog\fmt\bundled\LICENSE.rst">
+ <Filter>Header Files\include\spdlog\fmt\bundled</Filter>
+ </None>
+ <None Include="include\openssl\asn1.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\asn1t.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\bio.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\cmp.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\cms.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\conf.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\configuration.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\crmf.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\crypto.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\ct.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\err.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\ess.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\fipskey.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\lhash.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\ocsp.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\opensslv.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\pkcs7.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\pkcs12.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\safestack.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\srp.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\ssl.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\ui.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\x509.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\x509_vfy.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\openssl\x509v3.h.in">
+ <Filter>Header Files\include\openssl\openssl</Filter>
+ </None>
+ <None Include="include\crypto\bn_conf.h.in">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </None>
+ <None Include="include\crypto\dso_conf.h.in">
+ <Filter>Header Files\include\openssl\crypto</Filter>
+ </None>
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/NorthstarDLL/audio.h b/NorthstarDLL/audio.h
index 04bc00b5..26cda205 100644
--- a/NorthstarDLL/audio.h
+++ b/NorthstarDLL/audio.h
@@ -5,8 +5,6 @@
#include <regex>
#include <shared_mutex>
-namespace fs = std::filesystem;
-
enum class AudioSelectionStrategy
{
INVALID = -1,
diff --git a/NorthstarDLL/buildainfile.cpp b/NorthstarDLL/buildainfile.cpp
index d0397fce..c61484c7 100644
--- a/NorthstarDLL/buildainfile.cpp
+++ b/NorthstarDLL/buildainfile.cpp
@@ -8,8 +8,6 @@
AUTOHOOK_INIT()
-namespace fs = std::filesystem;
-
const int AINET_VERSION_NUMBER = 57;
const int AINET_SCRIPT_VERSION_NUMBER = 21;
const int PLACEHOLDER_CRC = 0;
diff --git a/NorthstarDLL/clientchathooks.cpp b/NorthstarDLL/clientchathooks.cpp
index fc7c1f19..647e67f1 100644
--- a/NorthstarDLL/clientchathooks.cpp
+++ b/NorthstarDLL/clientchathooks.cpp
@@ -29,12 +29,12 @@ void,, (void* self, const char* message, int inboxId, bool isTeam, bool isDead))
payload = message + 1;
}
- g_pSquirrel<ScriptContext::CLIENT>->pushinteger(g_pSquirrel<ScriptContext::CLIENT>->sqvm, (int)senderId - 1);
- g_pSquirrel<ScriptContext::CLIENT>->pushstring(g_pSquirrel<ScriptContext::CLIENT>->sqvm, payload);
- g_pSquirrel<ScriptContext::CLIENT>->pushbool(g_pSquirrel<ScriptContext::CLIENT>->sqvm, isTeam);
- g_pSquirrel<ScriptContext::CLIENT>->pushbool(g_pSquirrel<ScriptContext::CLIENT>->sqvm, isDead);
- g_pSquirrel<ScriptContext::CLIENT>->pushinteger(g_pSquirrel<ScriptContext::CLIENT>->sqvm, type);
- g_pSquirrel<ScriptContext::CLIENT>->call(g_pSquirrel<ScriptContext::CLIENT>->sqvm, 5);
+ g_pSquirrel<ScriptContext::CLIENT>->pushinteger(g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM->sqvm, (int)senderId - 1);
+ g_pSquirrel<ScriptContext::CLIENT>->pushstring(g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM->sqvm, payload);
+ g_pSquirrel<ScriptContext::CLIENT>->pushbool(g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM->sqvm, isTeam);
+ g_pSquirrel<ScriptContext::CLIENT>->pushbool(g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM->sqvm, isDead);
+ g_pSquirrel<ScriptContext::CLIENT>->pushinteger(g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM->sqvm, type);
+ g_pSquirrel<ScriptContext::CLIENT>->call(g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM->sqvm, 5);
}
else
for (CHudChat* hud = *CHudChat::allHuds; hud != NULL; hud = hud->next)
diff --git a/NorthstarDLL/debugoverlay.cpp b/NorthstarDLL/debugoverlay.cpp
index 18975830..2d2d03e0 100644
--- a/NorthstarDLL/debugoverlay.cpp
+++ b/NorthstarDLL/debugoverlay.cpp
@@ -1,19 +1,10 @@
#include "pch.h"
#include "dedicated.h"
#include "cvar.h"
+#include "vector.h"
AUTOHOOK_INIT()
-struct Vector3
-{
- float x, y, z;
-};
-
-struct QAngle
-{
- float x, y, z, w;
-};
-
enum OverlayType_t
{
OVERLAY_BOX = 0,
diff --git a/NorthstarDLL/dllmain.cpp b/NorthstarDLL/dllmain.cpp
index 600fb339..8d78ee2c 100644
--- a/NorthstarDLL/dllmain.cpp
+++ b/NorthstarDLL/dllmain.cpp
@@ -16,7 +16,6 @@
#include <string.h>
#include <filesystem>
-namespace fs = std::filesystem;
typedef void (*initPluginFuncPtr)(void* (*getPluginObject)(PluginObject));
diff --git a/NorthstarDLL/exploitfixes.cpp b/NorthstarDLL/exploitfixes.cpp
index 3a9a504f..dbe065cc 100644
--- a/NorthstarDLL/exploitfixes.cpp
+++ b/NorthstarDLL/exploitfixes.cpp
@@ -13,12 +13,11 @@ ConVar* Cvar_ns_should_log_all_clientcommands;
ConVar* Cvar_sv_cheats;
-#define SHOULD_LOG (Cvar_ns_exploitfixes_log->m_Value.m_nValue > 0)
#define BLOCKED_INFO(s) \
( \
[=]() -> bool \
{ \
- if (SHOULD_LOG) \
+ if (Cvar_ns_exploitfixes_log->GetBool()) \
{ \
std::stringstream stream; \
stream << "ExploitFixes.cpp: " << BLOCK_PREFIX << s; \
@@ -109,7 +108,6 @@ bool, __fastcall, (void* pMsg)) // 48 8B D1 48 8B 49 18 48 8B 01 48 FF 60 10
// Safety check for memory access
if (MemoryAddress(entry).IsMemoryReadable(sizeof(*entry)))
{
-
// Find null terminators
bool nameValid = false, valValid = false;
for (int i = 0; i < ENTRY_STR_LEN; i++)
@@ -193,14 +191,6 @@ bool, __fastcall, (void* thisptr, void* pMsg)) // 40 55 56 48 83 EC 58
return BLOCKED_INFO("Invalid m_nNewCommands (" << msg->m_nNewCommands << ")");
}
- // removing, as vanilla already limits num usercmds per frame
- /*constexpr int NUMCMD_SANITY_LIMIT = 16;
- if ((msg->m_nNewCommands + msg->m_nBackupCommands) > NUMCMD_SANITY_LIMIT)
- {
- return BLOCKED_INFO("Command count is too high (new: " << msg->m_nNewCommands << ", backup: " << msg->m_nBackupCommands << ")");
-
- }*/
-
if (msg->m_nLength <= 0)
return BLOCKED_INFO("Invalid message length (" << msg->m_nLength << ")");
@@ -285,7 +275,7 @@ INVALID_CMD:
AUTOHOOK(IsRespawnMod, engine.dll + 0x1C6360,
bool, __fastcall, (const char* pModName)) // 48 83 EC 28 48 8B 0D ? ? ? ? 48 8D 15 ? ? ? ? E8 ? ? ? ? 85 C0 74 63
{
- // somewhat temp, store the modname here, since we don't have a proper ptr to it rn
+ // somewhat temp, store the modname here, since we don't have a proper ptr in engine to it rn
int iSize = strlen(pModName);
R2::g_pModName = new char[iSize + 1];
strcpy(R2::g_pModName, pModName);
diff --git a/NorthstarDLL/hooks.cpp b/NorthstarDLL/hooks.cpp
index 08050be6..f0ea74e9 100644
--- a/NorthstarDLL/hooks.cpp
+++ b/NorthstarDLL/hooks.cpp
@@ -10,8 +10,6 @@
#include <filesystem>
#include <Psapi.h>
-namespace fs = std::filesystem;
-
AUTOHOOK_INIT()
// called from the ON_DLL_LOAD macros
diff --git a/NorthstarDLL/languagehooks.cpp b/NorthstarDLL/languagehooks.cpp
index 8a6b3dc1..9e5dda86 100644
--- a/NorthstarDLL/languagehooks.cpp
+++ b/NorthstarDLL/languagehooks.cpp
@@ -6,8 +6,6 @@
AUTOHOOK_INIT()
-namespace fs = std::filesystem;
-
typedef LANGID (*Tier0_DetectDefaultLanguageType)();
bool CheckLangAudioExists(char* lang)
diff --git a/NorthstarDLL/masterserver.cpp b/NorthstarDLL/masterserver.cpp
index ef23c919..a1fb839a 100644
--- a/NorthstarDLL/masterserver.cpp
+++ b/NorthstarDLL/masterserver.cpp
@@ -859,9 +859,11 @@ class MasterServerPresenceReporter : public ServerPresenceReporter
{
if (++m_nNumRegistrationAttempts == MAX_REGISTRATION_ATTEMPTS)
m_bShouldTryRegisterServer = false;
+
+ goto REQUEST_END_CLEANUP_RETRY;
}
- goto REQUEST_END_CLEANUP_RETRY;
+ goto REQUEST_END_CLEANUP;
}
if (!serverAddedJson["success"].IsTrue())
diff --git a/NorthstarDLL/misccommands.cpp b/NorthstarDLL/misccommands.cpp
index e745752f..572d5620 100644
--- a/NorthstarDLL/misccommands.cpp
+++ b/NorthstarDLL/misccommands.cpp
@@ -34,7 +34,7 @@ void ConCommand_ns_end_reauth_and_leave_to_lobby(const CCommand& arg)
R2::Cbuf_Execute();
// weird way of checking, but check if client script vm is initialised, mainly just to allow players to cancel this
- if (g_pSquirrel<ScriptContext::CLIENT>->SquirrelVM)
+ if (g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM)
{
g_pServerAuthentication->m_bNeedLocalAuthForNewgame = true;
diff --git a/NorthstarDLL/modmanager.h b/NorthstarDLL/modmanager.h
index 621df76f..f622c675 100644
--- a/NorthstarDLL/modmanager.h
+++ b/NorthstarDLL/modmanager.h
@@ -8,8 +8,6 @@
#include <vector>
#include <filesystem>
-namespace fs = std::filesystem;
-
const std::string MOD_FOLDER_SUFFIX = "/mods";
const std::string REMOTE_MOD_FOLDER_SUFFIX = "/runtime/remote/mods";
const fs::path MOD_OVERRIDE_DIR = "mod";
diff --git a/NorthstarDLL/pch.h b/NorthstarDLL/pch.h
index 66543859..e23d6a9b 100644
--- a/NorthstarDLL/pch.h
+++ b/NorthstarDLL/pch.h
@@ -18,6 +18,8 @@
#include <filesystem>
#include <sstream>
+namespace fs = std::filesystem;
+
#include "logging.h"
#include "MinHook.h"
#include "spdlog/spdlog.h"
diff --git a/NorthstarDLL/scriptdatatables.cpp b/NorthstarDLL/scriptdatatables.cpp
index 40bb6a39..cd8a6b2a 100644
--- a/NorthstarDLL/scriptdatatables.cpp
+++ b/NorthstarDLL/scriptdatatables.cpp
@@ -2,914 +2,921 @@
#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 <iostream>
#include <sstream>
#include <map>
#include <fstream>
-#include "tier0.h"
+#include <filesystem>
+
+const uint64_t USERDATA_TYPE_DATATABLE = 0xFFF7FFF700000004;
+const uint64_t USERDATA_TYPE_DATATABLE_CUSTOM = 0xFFFCFFFC12345678;
+
+enum class DatatableType : int
+{
+ BOOL = 0,
+ INT,
+ FLOAT,
+ VECTOR,
+ STRING,
+ ASSET,
+ UNK_STRING // unknown but deffo a string type
+};
struct ColumnInfo
{
char* name;
- int type;
+ DatatableType type;
int offset;
};
-struct DataTable
+struct Datatable
{
- int columnAmount;
- int rowAmount;
+ int numColumns;
+ int numRows;
ColumnInfo* columnInfo;
- long long data; // actually data pointer
+ char* data; // actually data pointer
int rowInfo;
};
ConVar* Cvar_ns_prefer_datatable_from_disk;
-void datatableReleaseHook(void*, int size);
-const long long customDatatableTypeId = 0xFFFCFFFC12345678;
-const long long vanillaDatatableTypeId = 0xFFF7FFF700000004;
-void* (*getDataTableStructure)(HSquirrelVM* sqvm);
-std::string DataTableToString(DataTable* datatable);
-struct csvData
+template <ScriptContext context> Datatable* (*SQ_GetDatatableInternal)(HSquirrelVM* sqvm);
+std::string DataTableToString(Datatable* datatable);
+
+struct CSVData
{
- char* name;
+ std::string m_sAssetName;
+ std::string m_sCSVString;
+ char* m_pDataBuf;
+ size_t m_nDataBufSize;
+
+ std::vector<char*> columns;
std::vector<std::vector<char*>> dataPointers;
- char* fullData = 0;
- std::vector<char*> columnNames;
};
-std::unordered_map<std::string, csvData*> cacheMap;
+std::unordered_map<std::string, CSVData> CSVCache;
-void StringToVector(char* string, float* vector)
+Vector3 StringToVector(char* pString)
{
+ Vector3 vRet;
+
int length = 0;
- while (string[length])
+ while (pString[length])
{
- if ((string[length] == '<') || (string[length] == '>'))
- string[length] = '\0';
+ if ((pString[length] == '<') || (pString[length] == '>'))
+ pString[length] = '\0';
length++;
}
int startOfFloat = 1;
int currentIndex = 1;
- while (string[currentIndex] && (string[currentIndex] != ','))
+
+ while (pString[currentIndex] && (pString[currentIndex] != ','))
currentIndex++;
- string[currentIndex] = '\0';
- vector[0] = std::stof(&string[startOfFloat]);
+ pString[currentIndex] = '\0';
+ vRet.x = std::stof(&pString[startOfFloat]);
startOfFloat = ++currentIndex;
- while (string[currentIndex] && (string[currentIndex] != ','))
+
+ while (pString[currentIndex] && (pString[currentIndex] != ','))
currentIndex++;
- string[currentIndex] = '\0';
- vector[1] = std::stof(&string[startOfFloat]);
+ pString[currentIndex] = '\0';
+ vRet.y = std::stof(&pString[startOfFloat]);
startOfFloat = ++currentIndex;
- while (string[currentIndex] && (string[currentIndex] != ','))
+
+ while (pString[currentIndex] && (pString[currentIndex] != ','))
currentIndex++;
- string[currentIndex] = '\0';
- vector[2] = std::stof(&string[startOfFloat]);
+ pString[currentIndex] = '\0';
+ vRet.z = std::stof(&pString[startOfFloat]);
startOfFloat = ++currentIndex;
+
+ return vRet;
}
-template <ScriptContext context> SQRESULT GetDatatable(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDatatable(HSquirrelVM* sqvm)
{
- const char* assetName;
- g_pSquirrel<context>->getasset(sqvm, 2, &assetName);
- SQRESULT result = SQRESULT_ERROR;
- if (strncmp(assetName, "datatable/", 10) != 0)
- {
- spdlog::error("Asset \"{}\" doesn't start with \"datatable/\"", assetName);
- }
- else if ((!Cvar_ns_prefer_datatable_from_disk->GetBool()) && g_pPakLoadManager->LoadFile(assetName))
+ const char* pAssetName;
+ g_pSquirrel<context>->getasset(sqvm, 2, &pAssetName);
+
+ if (strncmp(pAssetName, "datatable/", 10))
{
- // spdlog::info("Load Datatable {} from rpak", assetName);
- result = g_pSquirrel<context>->m_funcOriginals["GetDataTable"](sqvm);
+ g_pSquirrel<context>->raiseerror(sqvm, fmt::format("Asset \"{}\" doesn't start with \"datatable/\"", pAssetName).c_str());
+ return SQRESULT_ERROR;
}
+ else if (!Cvar_ns_prefer_datatable_from_disk->GetBool() && g_pPakLoadManager->LoadFile(pAssetName))
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTable"](sqvm);
+ // either we prefer disk datatables, or we're loading a datatable that wasn't found in rpak
else
{
- char assetPath[250];
- snprintf(assetPath, 250, "scripts/%s", assetName);
- if (cacheMap.count(assetName))
+ std::string sAssetPath(fmt::format("scripts/{}", pAssetName));
+
+ // first, check the cache
+ if (CSVCache.find(pAssetName) != CSVCache.end())
{
- // spdlog::info("Loaded custom Datatable {} from cache", assetName);
- csvData** dataPointer = (csvData**)g_pSquirrel<context>->createuserdata(sqvm, sizeof(csvData*));
- *dataPointer = cacheMap[assetName];
- g_pSquirrel<context>->setuserdatatypeid(sqvm, -1, customDatatableTypeId);
- // sqvm->_stack[sqvm->_top -1]._VAL.asUserdata->releaseHook = datatableReleaseHook;
- result = SQRESULT_NOTNULL;
+ CSVData** pUserdata = g_pSquirrel<context>->createuserdata<CSVData*>(sqvm, sizeof(CSVData*));
+ g_pSquirrel<context>->setuserdatatypeid(sqvm, -1, USERDATA_TYPE_DATATABLE_CUSTOM);
+ *pUserdata = &CSVCache[pAssetName];
+
+ return SQRESULT_NOTNULL;
}
- else if ((*R2::g_pFilesystem)->m_vtable2->FileExists(&(*R2::g_pFilesystem)->m_vtable2, assetPath, "GAME"))
- {
+
+ // check files on disk
+ // we don't use .rpak as the extension for on-disk datatables, so we need to replace .rpak with .csv in the filename we're reading
+ fs::path diskAssetPath("scripts");
+ if (fs::path(pAssetName).extension() == ".rpak")
+ diskAssetPath /= fs::path(pAssetName).remove_filename() / (fs::path(pAssetName).stem().string() + ".csv");
+ else
+ diskAssetPath /= fs::path(pAssetName);
- std::string dataFile = R2::ReadVPKFile(assetPath);
- if (dataFile.size() == 0)
+ std::string sDiskAssetPath(diskAssetPath.string());
+ if ((*R2::g_pFilesystem)->m_vtable2->FileExists(&(*R2::g_pFilesystem)->m_vtable2, sDiskAssetPath.c_str(), "GAME"))
+ {
+ std::string sTableCSV = R2::ReadVPKFile(sDiskAssetPath.c_str());
+ if (!sTableCSV.size())
+ {
+ g_pSquirrel<context>->raiseerror(sqvm, fmt::format("Datatable \"{}\" is empty", pAssetName).c_str());
return SQRESULT_ERROR;
- char* csvFullData = (char*)malloc(dataFile.size());
- memcpy(csvFullData, dataFile.c_str(), dataFile.size());
+ }
- csvData* data = new csvData();
- data->fullData = csvFullData;
+ // somewhat shit, but ensure we end with a newline to make parsing easier
+ if (sTableCSV[sTableCSV.length() - 1] != '\n')
+ sTableCSV += '\n';
- std::vector<char*> currentLine;
- int startIndex = 0;
- if (csvFullData[0] == '\"')
- {
- currentLine.push_back(&csvFullData[1]);
- startIndex = 1;
- int i = 1;
- while (csvFullData[i] != '\"')
- i++;
- csvFullData[i] = '\0';
- }
- else
- {
- currentLine.push_back(csvFullData);
- }
+ CSVData csv;
+ csv.m_sAssetName = pAssetName;
+ csv.m_sCSVString = sTableCSV;
+ csv.m_nDataBufSize = sTableCSV.size();
+ csv.m_pDataBuf = new char[csv.m_nDataBufSize];
+ memcpy(csv.m_pDataBuf, &sTableCSV[0], csv.m_nDataBufSize);
+
+ // parse the csv
+ // csvs are essentially comma and newline-deliniated sets of strings for parsing, only thing we need to worry about is quoted entries
+ // when we parse an element of the csv, rather than allocating an entry for it, we just convert that element to a null-terminated string
+ // i.e., store the ptr to the first char of it, then make the comma that delinates it a nullchar
+
+ bool bHasColumns = false;
+ bool bInQuotes = false;
- bool firstLine = true;
- for (int i = startIndex; i < dataFile.size(); i++)
+ std::vector<char*> vCurrentRow;
+ char* pElemStart = csv.m_pDataBuf;
+ char* pElemEnd = nullptr;
+
+ for (int i = 0; i < csv.m_nDataBufSize; i++)
{
- if (csvFullData[i] == ',')
+ if (csv.m_pDataBuf[i] == '\r' && csv.m_pDataBuf[i + 1] == '\n')
{
- if (csvFullData[i + 1] == '\"')
- {
+ if (!pElemEnd)
+ pElemEnd = csv.m_pDataBuf + i;
- currentLine.push_back(&csvFullData[i + 2]);
- csvFullData[i] = '\0';
- csvFullData[i + 1] = '\0';
- while (true)
- {
- if ((csvFullData[i] == '\n') || (csvFullData[i] == '\r'))
- return SQRESULT_ERROR;
- if (csvFullData[i] == '\"')
- break;
- i++;
- }
- csvFullData[i] = '\0';
- }
- else
- {
- currentLine.push_back(&csvFullData[i + 1]);
- csvFullData[i] = '\0';
- }
+ continue; // next iteration can handle the \n
}
- if ((csvFullData[i] == '\n') || (csvFullData[i] == '\r'))
+
+ // newline, end of a row
+ if (csv.m_pDataBuf[i] == '\n')
{
- csvFullData[i] = '\0';
- if ((csvFullData[i + 1] == '\n') || (csvFullData[i + 1] == '\r'))
- {
- i++;
- csvFullData[i] = '\0';
- }
- if (firstLine)
+ // shouldn't have newline in string
+ if (bInQuotes)
{
- data->columnNames = currentLine;
- firstLine = false;
+ g_pSquirrel<context>->raiseerror(sqvm, "Unexpected \\n in string");
+ return SQRESULT_ERROR;
}
+
+ // push last entry to current row
+ if (pElemEnd)
+ *pElemEnd = '\0';
else
+ csv.m_pDataBuf[i] = '\0';
+
+ vCurrentRow.push_back(pElemStart);
+
+ // newline, push last line to csv data and go from there
+ if (!bHasColumns)
{
- data->dataPointers.push_back(currentLine);
+ bHasColumns = true;
+ csv.columns = vCurrentRow;
}
+ else
+ csv.dataPointers.push_back(vCurrentRow);
- currentLine.clear();
- if (i + 1 >= dataFile.size())
- break;
- if (csvFullData[i + 1] == '\"')
+ vCurrentRow.clear();
+ // put start of current element at char after newline
+ pElemStart = csv.m_pDataBuf + i + 1;
+ pElemEnd = nullptr;
+ }
+ // we're starting or ending a quoted string
+ else if (csv.m_pDataBuf[i] == '"')
+ {
+ // start quoted string
+ if (!bInQuotes)
{
-
- currentLine.push_back(&csvFullData[i + 2]);
- csvFullData[i] = '\0';
- csvFullData[i + 1] = '\0';
- while (true)
+ // shouldn't have quoted strings in column names
+ if (!bHasColumns)
{
- if ((csvFullData[i] == '\n') || (csvFullData[i] == '\r'))
- return SQRESULT_ERROR;
- if (csvFullData[i] == '\"')
- break;
- i++;
+ g_pSquirrel<context>->raiseerror(sqvm, "Unexpected \" in column name");
+ return SQRESULT_ERROR;
}
- csvFullData[i] = '\0';
+
+ bInQuotes = true;
+ // put start of current element at char after string begin
+ pElemStart = csv.m_pDataBuf + i + 1;
}
+ // end quoted string
else
{
- currentLine.push_back(&csvFullData[i + 1]);
- csvFullData[i] = '\0';
+ pElemEnd = csv.m_pDataBuf + i;
+ bInQuotes = false;
}
}
- }
- if (currentLine.size() != 0)
- {
- if (firstLine)
+ // don't parse commas in quotes
+ else if (bInQuotes)
{
- data->columnNames = currentLine;
+ continue;
}
- else
+ // comma, push new entry to current row
+ else if (csv.m_pDataBuf[i] == ',')
{
- data->dataPointers.push_back(currentLine);
+ if (pElemEnd)
+ *pElemEnd = '\0';
+ else
+ csv.m_pDataBuf[i] = '\0';
+
+ vCurrentRow.push_back(pElemStart);
+ // put start of next element at char after comma
+ pElemStart = csv.m_pDataBuf + i + 1;
+ pElemEnd = nullptr;
}
}
- data->name = (char*)malloc(256);
- strncpy(data->name, assetName, 256);
- csvData** dataPointer = (csvData**)g_pSquirrel<context>->createuserdata(sqvm, sizeof(csvData*));
- g_pSquirrel<context>->setuserdatatypeid(sqvm, -1, customDatatableTypeId);
+ // add to cache and return
+ CSVData** pUserdata = g_pSquirrel<context>->createuserdata<CSVData*>(sqvm, sizeof(CSVData*));
+ g_pSquirrel<context>->setuserdatatypeid(sqvm, -1, USERDATA_TYPE_DATATABLE_CUSTOM);
+ CSVCache[pAssetName] = csv;
+ *pUserdata = &CSVCache[pAssetName];
- *dataPointer = data;
- // vm->_stack[vm->_top -1]._VAL.asUserdata->releaseHook = datatableReleaseHook;
- cacheMap[assetName] = data;
- // spdlog::info("Loaded custom Datatable from file at {} with pointer {}", assetPath, (void*)data);
-
- result = SQRESULT_NOTNULL;
- }
- else if (Cvar_ns_prefer_datatable_from_disk->GetBool() && g_pPakLoadManager->LoadFile(assetName))
- {
- result = g_pSquirrel<context>->m_funcOriginals["GetDataTable"](sqvm);
+ return SQRESULT_NOTNULL;
}
+ // the file doesn't exist on disk, check rpak if we haven't already
+ else if (Cvar_ns_prefer_datatable_from_disk->GetBool() && g_pPakLoadManager->LoadFile(pAssetName))
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTable"](sqvm);
+ // the file doesn't exist at all, error
else
{
- spdlog::error("Datatable {} not found", assetPath);
+ g_pSquirrel<context>->raiseerror(sqvm, fmt::format("Datatable {} not found", pAssetName).c_str());
+ return SQRESULT_ERROR;
}
}
- return result;
}
-template <ScriptContext context> SQRESULT GetDatatabeColumnByName(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableColumnByName(HSquirrelVM* sqvm)
{
- // spdlog::info("start getDatatableColumnByName");
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
+
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
return g_pSquirrel<context>->m_funcOriginals["GetDataTableColumnByName"](sqvm);
- }
- if (typeId != customDatatableTypeId)
+ CSVData* csv = *pData;
+ const char* pColumnName = g_pSquirrel<context>->getstring(sqvm, 2);
+
+ for (int i = 0; i < csv->columns.size(); i++)
{
- return SQRESULT_ERROR;
+ if (!strcmp(csv->columns[i], pColumnName))
+ {
+ g_pSquirrel<context>->pushinteger(sqvm, i);
+ return SQRESULT_NOTNULL;
+ }
}
- // spdlog::info("GetColumnByName form datatable with pointer {}",(void*)data);
- const char* searchName = g_pSquirrel<context>->getstring(sqvm, 2);
- int col = 0;
- for (auto colName : data->columnNames)
- {
- if (!strcmp(colName, searchName))
- break;
- col++;
- }
- if (col == data->columnNames.size())
- col = -1;
- // spdlog::info("Datatable CoulumnName {} in column {}", std::string(searchName), col);
- g_pSquirrel<context>->pushinteger(sqvm, col);
+ // column not found
+ g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDatatabeRowCount(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowCount(HSquirrelVM* sqvm)
{
- // spdlog::info("start getDatatableRowCount");
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
return g_pSquirrel<context>->m_funcOriginals["GetDatatableRowCount"](sqvm);
- }
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
- g_pSquirrel<context>->pushinteger(sqvm, data->dataPointers.size());
+ CSVData* csv = *pData;
+ const char* pColumnName = g_pSquirrel<context>->getstring(sqvm, 2);
+
+ g_pSquirrel<context>->pushinteger(sqvm, csv->dataPointers.size());
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableString(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableString(HSquirrelVM* sqvm)
{
- // spdlog::info("start getDatatableString");
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
+
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
return g_pSquirrel<context>->m_funcOriginals["GetDataTableString"](sqvm);
- }
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
- int row = g_pSquirrel<context>->getinteger(sqvm, 2);
- int col = g_pSquirrel<context>->getinteger(sqvm, 3);
- if (row >= data->dataPointers.size() || col >= data->dataPointers[row].size())
+ CSVData* csv = *pData;
+ const int nRow = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const int nCol = g_pSquirrel<context>->getinteger(sqvm, 3);
+ if (nRow >= csv->dataPointers.size() || nCol >= csv->dataPointers[nRow].size())
{
- spdlog::info("row {} and col {} are outside of range row {} and col {}", row, col, data->dataPointers.size(), data->columnNames.size());
+ g_pSquirrel<context>->raiseerror(
+ sqvm,
+ fmt::format(
+ "row {} and col {} are outside of range row {} and col {}", nRow, nCol, csv->dataPointers.size(), csv->columns.size())
+ .c_str());
return SQRESULT_ERROR;
}
- g_pSquirrel<context>->pushstring(sqvm, data->dataPointers[row][col], -1);
+ g_pSquirrel<context>->pushstring(sqvm, csv->dataPointers[nRow][nCol], -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableAsset(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableAsset(HSquirrelVM* sqvm)
{
- // spdlog::info("start getDatatableAsset");
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
+
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
return g_pSquirrel<context>->m_funcOriginals["GetDataTableAsset"](sqvm);
- }
- if (typeId != customDatatableTypeId)
+ CSVData* csv = *pData;
+ const int nRow = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const int nCol = g_pSquirrel<context>->getinteger(sqvm, 3);
+ if (nRow >= csv->dataPointers.size() || nCol >= csv->dataPointers[nRow].size())
{
+ g_pSquirrel<context>->raiseerror(
+ sqvm,
+ fmt::format(
+ "row {} and col {} are outside of range row {} and col {}", nRow, nCol, csv->dataPointers.size(), csv->columns.size())
+ .c_str());
return SQRESULT_ERROR;
}
- int row = g_pSquirrel<context>->getinteger(sqvm, 2);
- int col = g_pSquirrel<context>->getinteger(sqvm, 3);
- if (row >= data->dataPointers.size() || col >= data->dataPointers[row].size())
- {
- spdlog::info("row {} and col {} are outside of range row {} and col {}", row, col, data->dataPointers.size(), data->columnNames.size());
- return SQRESULT_ERROR;
- }
- char* asset = data->dataPointers[row][col];
- g_pSquirrel<context>->pushasset(sqvm, asset, -1);
+
+ g_pSquirrel<context>->pushasset(sqvm, csv->dataPointers[nRow][nCol], -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableInt(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableInt(HSquirrelVM* sqvm)
{
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
+
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
return g_pSquirrel<context>->m_funcOriginals["GetDataTableInt"](sqvm);
- }
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
- int row = g_pSquirrel<context>->getinteger(sqvm, 2);
- int col = g_pSquirrel<context>->getinteger(sqvm, 3);
- if (row >= data->dataPointers.size() || col >= data->dataPointers[row].size())
+ CSVData* csv = *pData;
+ const int nRow = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const int nCol = g_pSquirrel<context>->getinteger(sqvm, 3);
+ if (nRow >= csv->dataPointers.size() || nCol >= csv->dataPointers[nRow].size())
{
- spdlog::info("row {} and col {} are outside of range row {} and col {}", row, col, data->dataPointers.size(), data->columnNames.size());
+ g_pSquirrel<context>->raiseerror(
+ sqvm,
+ fmt::format(
+ "row {} and col {} are outside of range row {} and col {}", nRow, nCol, csv->dataPointers.size(), csv->columns.size())
+ .c_str());
return SQRESULT_ERROR;
}
- g_pSquirrel<context>->pushinteger(sqvm, std::stoi(data->dataPointers[row][col]));
+
+ g_pSquirrel<context>->pushinteger(sqvm, std::stoi(csv->dataPointers[nRow][nCol]));
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableFloat(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableFloat(HSquirrelVM* sqvm)
{
- // spdlog::info("start getDatatableFloat");
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
+
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
return g_pSquirrel<context>->m_funcOriginals["GetDataTableFloat"](sqvm);
- }
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
- int row = g_pSquirrel<context>->getinteger(sqvm, 2);
- int col = g_pSquirrel<context>->getinteger(sqvm, 3);
- if (row >= data->dataPointers.size() || col >= data->dataPointers[row].size())
+ CSVData* csv = *pData;
+ const int nRow = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const int nCol = g_pSquirrel<context>->getinteger(sqvm, 3);
+ if (nRow >= csv->dataPointers.size() || nCol >= csv->dataPointers[nRow].size())
{
- spdlog::info("row {} and col {} are outside of range row {} and col {}", row, col, data->dataPointers.size(), data->columnNames.size());
+ g_pSquirrel<context>->raiseerror(
+ sqvm,
+ fmt::format(
+ "row {} and col {} are outside of range row {} and col {}", nRow, nCol, csv->dataPointers.size(), csv->columns.size())
+ .c_str());
return SQRESULT_ERROR;
}
- g_pSquirrel<context>->pushfloat(sqvm, std::stof(data->dataPointers[row][col]));
+
+ g_pSquirrel<context>->pushfloat(sqvm, std::stof(csv->dataPointers[nRow][nCol]));
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableBool(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableBool(HSquirrelVM* sqvm)
{
- // spdlog::info("start getDatatableBool");
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
+
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
return g_pSquirrel<context>->m_funcOriginals["GetDataTableBool"](sqvm);
- }
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
- int row = g_pSquirrel<context>->getinteger(sqvm, 2);
- int col = g_pSquirrel<context>->getinteger(sqvm, 3);
- if (row >= data->dataPointers.size() || col >= data->dataPointers[row].size())
+ CSVData* csv = *pData;
+ const int nRow = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const int nCol = g_pSquirrel<context>->getinteger(sqvm, 3);
+ if (nRow >= csv->dataPointers.size() || nCol >= csv->dataPointers[nRow].size())
{
- spdlog::info("row {} and col {} are outside of range row {} and col {}", row, col, data->dataPointers.size(), data->columnNames.size());
+ g_pSquirrel<context>->raiseerror(
+ sqvm,
+ fmt::format(
+ "row {} and col {} are outside of range row {} and col {}", nRow, nCol, csv->dataPointers.size(), csv->columns.size())
+ .c_str());
return SQRESULT_ERROR;
}
- g_pSquirrel<context>->pushbool(sqvm, std::stoi(data->dataPointers[row][col]));
+
+ g_pSquirrel<context>->pushbool(sqvm, std::stoi(csv->dataPointers[nRow][nCol]));
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableVector(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableVector(HSquirrelVM* sqvm)
{
- // spdlog::info("start getDatatableVector");
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableVector"](sqvm);
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
- float vector[3];
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableVector"](sqvm);
- int row = g_pSquirrel<context>->getinteger(sqvm, 2);
- int col = g_pSquirrel<context>->getinteger(sqvm, 3);
- if (row >= data->dataPointers.size() || col >= data->dataPointers[row].size())
+ CSVData* csv = *pData;
+ const int nRow = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const int nCol = g_pSquirrel<context>->getinteger(sqvm, 3);
+ if (nRow >= csv->dataPointers.size() || nCol >= csv->dataPointers[nRow].size())
{
- spdlog::info(
- "row {} and col {} are outside of range row {} and col {}", row, col, data->dataPointers.size(), data->columnNames.size());
+ g_pSquirrel<context>->raiseerror(
+ sqvm, fmt::format("row {} and col {} are outside of range row {} and col {}", nRow, nCol, csv->dataPointers.size(), csv->columns.size()).c_str());
return SQRESULT_ERROR;
}
- StringToVector(data->dataPointers[row][col], vector);
- g_pSquirrel<context>->pushvector(sqvm, vector);
-
+ g_pSquirrel<context>->pushvector(sqvm, StringToVector(csv->dataPointers[nRow][nCol]));
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableRowMatchingStringValue(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowMatchingStringValue(HSquirrelVM* sqvm)
{
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingStringValue"](sqvm);
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
-
- int col = g_pSquirrel<context>->getinteger(sqvm, 2);
- const char* stringValue = g_pSquirrel<context>->getstring(sqvm, 3);
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingStringValue"](sqvm);
- for (int i = 0; i < data->dataPointers.size(); i++)
+ CSVData* csv = *pData;
+ int nCol = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const char* pStringVal = g_pSquirrel<context>->getstring(sqvm, 3);
+ for (int i = 0; i < csv->dataPointers.size(); i++)
{
- if (!strcmp(data->dataPointers[i][col], stringValue))
+ if (!strcmp(csv->dataPointers[i][nCol], pStringVal))
{
g_pSquirrel<context>->pushinteger(sqvm, i);
return SQRESULT_NOTNULL;
}
}
+
g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableRowMatchingAssetValue(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowMatchingAssetValue(HSquirrelVM* sqvm)
{
- // spdlog::info("start getDatatableRowMatchingAsset");
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingAssetValue"](sqvm);
- }
-
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- int col = g_pSquirrel<context>->getinteger(sqvm, 2);
- const char* stringValue;
- g_pSquirrel<context>->getasset(sqvm, 3, &stringValue);
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingAssetValue"](sqvm);
- for (int i = 0; i < data->dataPointers.size(); i++)
+ CSVData* csv = *pData;
+ int nCol = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const char* pStringVal;
+ g_pSquirrel<context>->getasset(sqvm, 3, &pStringVal);
+ for (int i = 0; i < csv->dataPointers.size(); i++)
{
- if (!strcmp(data->dataPointers[i][col], stringValue))
+ if (!strcmp(csv->dataPointers[i][nCol], pStringVal))
{
g_pSquirrel<context>->pushinteger(sqvm, i);
return SQRESULT_NOTNULL;
}
}
+
g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableRowMatchingFloatValue(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowMatchingFloatValue(HSquirrelVM* sqvm)
{
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingFloatValue"](sqvm);
- }
-
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- int col = g_pSquirrel<context>->getinteger(sqvm, 2);
- float compareValue = g_pSquirrel<context>->getfloat(sqvm, 3);
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingFloatValue"](sqvm);
- for (int i = 0; i < data->dataPointers.size(); i++)
+ CSVData* csv = *pData;
+ int nCol = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const float flFloatVal = g_pSquirrel<context>->getfloat(sqvm, 3);
+ for (int i = 0; i < csv->dataPointers.size(); i++)
{
-
- if (compareValue == std::stof(data->dataPointers[i][col]))
+ if (flFloatVal == std::stof(csv->dataPointers[i][nCol]))
{
g_pSquirrel<context>->pushinteger(sqvm, i);
return SQRESULT_NOTNULL;
}
}
+
g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableRowMatchingIntValue(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowMatchingIntValue(HSquirrelVM* sqvm)
{
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingIntValue"](sqvm);
- }
-
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- int col = g_pSquirrel<context>->getinteger(sqvm, 2);
- int compareValue = g_pSquirrel<context>->getinteger(sqvm, 3);
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingIntValue"](sqvm);
- for (int i = 0; i < data->dataPointers.size(); i++)
+ CSVData* csv = *pData;
+ int nCol = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const int nIntVal = g_pSquirrel<context>->getinteger(sqvm, 3);
+ for (int i = 0; i < csv->dataPointers.size(); i++)
{
-
- if (compareValue == std::stoi(data->dataPointers[i][col]))
+ if (nIntVal == std::stoi(csv->dataPointers[i][nCol]))
{
g_pSquirrel<context>->pushinteger(sqvm, i);
return SQRESULT_NOTNULL;
}
}
+
g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableRowGreaterThanOrEqualToIntValue(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowMatchingVectorValue(HSquirrelVM* sqvm)
{
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowGreaterThanOrEqualToIntValue"](sqvm);
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingVectorValue"](sqvm);
- int col = g_pSquirrel<context>->getinteger(sqvm, 2);
- int compareValue = g_pSquirrel<context>->getinteger(sqvm, 3);
+ CSVData* csv = *pData;
+ int nCol = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const Vector3 vVectorVal = g_pSquirrel<context>->getvector(sqvm, 3);
- for (int i = 0; i < data->dataPointers.size(); i++)
+ for (int i = 0; i < csv->dataPointers.size(); i++)
{
-
- if (compareValue >= std::stoi(data->dataPointers[i][col]))
+ if (vVectorVal == StringToVector(csv->dataPointers[i][nCol]))
{
g_pSquirrel<context>->pushinteger(sqvm, i);
return SQRESULT_NOTNULL;
}
}
+
g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableRowLessThanOrEqualToIntValue(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowGreaterThanOrEqualToIntValue(HSquirrelVM* sqvm)
{
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowLessThanOrEqualToIntValue"](sqvm);
- }
-
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- int col = g_pSquirrel<context>->getinteger(sqvm, 2);
- int compareValue = g_pSquirrel<context>->getinteger(sqvm, 3);
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowGreaterThanOrEqualToIntValue"](sqvm);
- for (int i = 0; i < data->dataPointers.size(); i++)
+ CSVData* csv = *pData;
+ int nCol = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const int nIntVal = g_pSquirrel<context>->getinteger(sqvm, 3);
+ for (int i = 0; i < csv->dataPointers.size(); i++)
{
-
- if (compareValue <= std::stoi(data->dataPointers[i][col]))
+ if (nIntVal >= std::stoi(csv->dataPointers[i][nCol]))
{
- g_pSquirrel<context>->pushinteger(sqvm, i);
- return SQRESULT_NOTNULL;
- }
+ spdlog::info("datatable not loaded");
+ g_pSquirrel<context>->pushinteger(sqvm, 1);
+ return SQRESULT_NOTNULL;
}
+ }
+
g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableRowGreaterThanOrEqualToFloatValue(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowLessThanOrEqualToIntValue(HSquirrelVM* sqvm)
{
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowGreaterThanOrEqualToFloatValue"](sqvm);
- }
-
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- int col = g_pSquirrel<context>->getinteger(sqvm, 2);
- float compareValue = g_pSquirrel<context>->getfloat(sqvm, 3);
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowLessThanOrEqualToIntValue"](sqvm);
- for (int i = 0; i < data->dataPointers.size(); i++)
+ CSVData* csv = *pData;
+ int nCol = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const int nIntVal = g_pSquirrel<context>->getinteger(sqvm, 3);
+ for (int i = 0; i < csv->dataPointers.size(); i++)
{
-
- if (compareValue >= std::stof(data->dataPointers[i][col]))
+ if (nIntVal <= std::stoi(csv->dataPointers[i][nCol]))
{
g_pSquirrel<context>->pushinteger(sqvm, i);
return SQRESULT_NOTNULL;
}
}
+
g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableRowLessThanOrEqualToFloatValue(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowGreaterThanOrEqualToFloatValue(HSquirrelVM* sqvm)
{
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowLessThanOrEqualToFloatValue"](sqvm);
- }
-
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- int col = g_pSquirrel<context>->getinteger(sqvm, 2);
- int compareValue = g_pSquirrel<context>->getfloat(sqvm, 3);
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowGreaterThanOrEqualToFloatValue"](sqvm);
- for (int i = 0; i < data->dataPointers.size(); i++)
+ CSVData* csv = *pData;
+ int nCol = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const float flFloatVal = g_pSquirrel<context>->getfloat(sqvm, 3);
+ for (int i = 0; i < csv->dataPointers.size(); i++)
{
-
- if (compareValue <= std::stof(data->dataPointers[i][col]))
+ if (flFloatVal >= std::stof(csv->dataPointers[i][nCol]))
{
g_pSquirrel<context>->pushinteger(sqvm, i);
return SQRESULT_NOTNULL;
}
}
+
g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT GetDataTableRowMatchingVectorValue(HSquirrelVM* sqvm)
+template <ScriptContext context> SQRESULT SQ_GetDataTableRowLessThanOrEqualToFloatValue(HSquirrelVM* sqvm)
{
- csvData** dataPointer;
- long long typeId;
- g_pSquirrel<context>->getuserdata(sqvm, 2, (void**)&dataPointer, &typeId);
- csvData* data = *dataPointer;
- if (typeId == vanillaDatatableTypeId)
- {
- return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowMatchingVectorValue"](sqvm);
- }
-
- if (typeId != customDatatableTypeId)
- {
- return SQRESULT_ERROR;
- }
+ CSVData** pData;
+ uint64_t typeId;
+ g_pSquirrel<context>->getuserdata(sqvm, 2, &pData, &typeId);
- int col = g_pSquirrel<context>->getinteger(sqvm, 2);
- float* compareValue = g_pSquirrel<context>->getvector(sqvm, 3);
+ if (typeId != USERDATA_TYPE_DATATABLE_CUSTOM)
+ return g_pSquirrel<context>->m_funcOriginals["GetDataTableRowLessThanOrEqualToFloatValue"](sqvm);
- for (int i = 0; i < data->dataPointers.size(); i++)
+ CSVData* csv = *pData;
+ int nCol = g_pSquirrel<context>->getinteger(sqvm, 2);
+ const float flFloatVal = g_pSquirrel<context>->getfloat(sqvm, 3);
+ for (int i = 0; i < csv->dataPointers.size(); i++)
{
- float dataTableVector[3];
- StringToVector(data->dataPointers[i][col], dataTableVector);
- if ((dataTableVector[0] == compareValue[0]) && (dataTableVector[1] == compareValue[1]) && (dataTableVector[2] == compareValue[2]))
+ if (flFloatVal <= std::stof(csv->dataPointers[i][nCol]))
{
g_pSquirrel<context>->pushinteger(sqvm, i);
return SQRESULT_NOTNULL;
}
}
+
g_pSquirrel<context>->pushinteger(sqvm, -1);
return SQRESULT_NOTNULL;
}
-template <ScriptContext context> SQRESULT DumpDataTable(HSquirrelVM* sqvm)
+std::string DataTableToString(Datatable* datatable)
{
+ std::string sCSVString;
- DataTable* datatable = (DataTable*)getDataTableStructure(sqvm);
- if (datatable == 0)
+ // write columns
+ bool bShouldComma = false;
+ for (int i = 0; i < datatable->numColumns; i++)
{
- spdlog::info("datatable not loaded");
- g_pSquirrel<context>->pushinteger(sqvm, 1);
- return SQRESULT_NOTNULL;
- }
- // spdlog::info("Datatable size row = {} col = {}", datatable->rowAmount, datatable->columnAmount);
- // std::string header = std::string(datatable->columnInfo[0].name);
-
- spdlog::info(DataTableToString(datatable));
-
- return SQRESULT_NULL;
-}
+ if (bShouldComma)
+ sCSVString += ',';
+ else
+ bShouldComma = true;
-template <ScriptContext context> SQRESULT DumpDataTableToFile(HSquirrelVM* sqvm)
-{
- DataTable* datatable = (DataTable*)getDataTableStructure(sqvm);
- if (datatable == 0)
- {
- spdlog::info("datatable not loaded");
- g_pSquirrel<context>->pushinteger(sqvm, 1);
- return SQRESULT_NOTNULL;
+ sCSVString += datatable->columnInfo[i].name;
}
- // spdlog::info("Datatable size row = {} col = {}", datatable->rowAmount, datatable->columnAmount);
- // std::string header = std::string(datatable->columnInfo[0].name);
- const char* pathName = g_pSquirrel<context>->getstring(sqvm, 2);
- std::ofstream ofs(pathName);
- std::string data = DataTableToString(datatable);
- ofs.write(data.c_str(), data.size());
- ofs.close();
- return SQRESULT_NULL;
-}
-std::string DataTableToString(DataTable* datatable)
-{
- std::string line = std::string(datatable->columnInfo[0].name);
- for (int col = 1; col < datatable->columnAmount; col++)
- {
- ColumnInfo* colInfo = &datatable->columnInfo[col];
- line += "," + std::string(colInfo->name);
- }
- line += std::string("\n");
- for (int row = 0; row < datatable->rowAmount; row++)
+ // write rows
+ for (int row = 0; row < datatable->numRows; row++)
{
+ sCSVString += '\n';
- bool seperator = false;
- for (int col = 0; col < datatable->columnAmount; col++)
+ bool bShouldComma = false;
+ for (int col = 0; col < datatable->numColumns; col++)
{
- if (seperator)
- {
- line += std::string(",");
- }
- seperator = true;
- ColumnInfo* colInfo = &datatable->columnInfo[col];
- switch (colInfo->type)
+ if (bShouldComma)
+ sCSVString += ',';
+ else
+ bShouldComma = true;
+
+ // output typed data
+ ColumnInfo column = datatable->columnInfo[col];
+ const void* pUntypedVal = datatable->data + column.offset + row * datatable->rowInfo;
+ switch (column.type)
{
- case 0:
+ case DatatableType::BOOL:
{
- bool input = *((bool*)(datatable->data + colInfo->offset + row * datatable->rowInfo));
- if (input)
- {
- line += std::string("1");
- }
- else
- {
- line += std::string("0");
- }
+ sCSVString += *(bool*)pUntypedVal ? '1' : '0';
break;
}
- case 1:
+
+ case DatatableType::INT:
{
- int input = *((int*)(datatable->data + colInfo->offset + row * datatable->rowInfo));
- line += std::to_string(input);
+ sCSVString += std::to_string(*(int*)pUntypedVal);
break;
}
- case 2:
+
+ case DatatableType::FLOAT:
{
- float input = *((float*)(datatable->data + colInfo->offset + row * datatable->rowInfo));
- line += std::to_string(input);
+ sCSVString += std::to_string(*(float*)pUntypedVal);
break;
}
- case 3:
+
+ case DatatableType::VECTOR:
{
- float* input = ((float*)(datatable->data + colInfo->offset + row * datatable->rowInfo));
- char string[256];
- snprintf(string, 256, "\"<%f,%f,%f>\"", input[0], input[1], input[2]);
- line += std::string(string);
+ Vector3 pVector((float*)pUntypedVal);
+ sCSVString += fmt::format("<{},{},{}>", pVector.x, pVector.y, pVector.z);
break;
}
- case 4:
- case 5:
- case 6:
+ case DatatableType::STRING:
+ case DatatableType::ASSET:
+ case DatatableType::UNK_STRING:
{
- char* string = *((char**)(datatable->data + colInfo->offset + row * datatable->rowInfo));
- line += "\"" + std::string(string) + "\"";
+ sCSVString += fmt::format("\"{}\"", *(char**)pUntypedVal);
break;
}
}
}
- line += std::string("\n");
}
- return line;
+
+ return sCSVString;
+}
+
+void DumpDatatable(const char* pDatatablePath)
+{
+ Datatable* pDatatable = (Datatable*)g_pPakLoadManager->LoadFile(pDatatablePath);
+ if (!pDatatable)
+ {
+ spdlog::error("couldn't load datatable {} (rpak containing it may not be loaded?)", pDatatablePath);
+ return;
+ }
+
+ std::string sOutputPath(fmt::format("{}/scripts/datatable/{}.csv", R2::g_pModName, fs::path(pDatatablePath).stem().string()));
+ std::string sDatatableContents(DataTableToString(pDatatable));
+
+ fs::create_directories(fs::path(sOutputPath).remove_filename());
+ std::ofstream outputStream(sOutputPath);
+ outputStream.write(sDatatableContents.c_str(), sDatatableContents.size());
+ outputStream.close();
+
+ spdlog::info("dumped datatable {} {} to {}", pDatatablePath, (void*)pDatatable, sOutputPath);
+}
+
+void ConCommand_dump_datatable(const CCommand& args)
+{
+ if (args.ArgC() < 2)
+ {
+ spdlog::info("usage: dump_datatable datatable/tablename.rpak");
+ return;
+ }
+
+ DumpDatatable(args.Arg(1));
}
-void datatableReleaseHook(void* d, int size)
+void ConCommand_dump_datatables(const CCommand& args)
{
- csvData* data = *(csvData**)d;
- free(data->fullData);
- delete data;
+ // likely not a comprehensive list, might be missing a couple?
+ static const std::vector<const char*> VANILLA_DATATABLE_PATHS = {
+ "datatable/burn_meter_rewards.rpak",
+ "datatable/burn_meter_store.rpak",
+ "datatable/calling_cards.rpak",
+ "datatable/callsign_icons.rpak",
+ "datatable/camo_skins.rpak",
+ "datatable/default_pilot_loadouts.rpak",
+ "datatable/default_titan_loadouts.rpak",
+ "datatable/faction_leaders.rpak",
+ "datatable/fd_awards.rpak",
+ "datatable/features_mp.rpak",
+ "datatable/non_loadout_weapons.rpak",
+ "datatable/pilot_abilities.rpak",
+ "datatable/pilot_executions.rpak",
+ "datatable/pilot_passives.rpak",
+ "datatable/pilot_properties.rpak",
+ "datatable/pilot_weapons.rpak",
+ "datatable/pilot_weapon_features.rpak",
+ "datatable/pilot_weapon_mods.rpak",
+ "datatable/pilot_weapon_mods_common.rpak",
+ "datatable/playlist_items.rpak",
+ "datatable/titans_mp.rpak",
+ "datatable/titan_abilities.rpak",
+ "datatable/titan_executions.rpak",
+ "datatable/titan_fd_upgrades.rpak",
+ "datatable/titan_nose_art.rpak",
+ "datatable/titan_passives.rpak",
+ "datatable/titan_primary_mods.rpak",
+ "datatable/titan_primary_mods_common.rpak",
+ "datatable/titan_primary_weapons.rpak",
+ "datatable/titan_properties.rpak",
+ "datatable/titan_skins.rpak",
+ "datatable/titan_voices.rpak",
+ "datatable/unlocks_faction_level.rpak",
+ "datatable/unlocks_fd_titan_level.rpak",
+ "datatable/unlocks_player_level.rpak",
+ "datatable/unlocks_random.rpak",
+ "datatable/unlocks_titan_level.rpak",
+ "datatable/unlocks_weapon_level_pilot.rpak",
+ "datatable/weapon_skins.rpak",
+ "datatable/xp_per_faction_level.rpak",
+ "datatable/xp_per_fd_titan_level.rpak",
+ "datatable/xp_per_player_level.rpak",
+ "datatable/xp_per_titan_level.rpak",
+ "datatable/xp_per_weapon_level.rpak",
+ "datatable/faction_leaders_dropship_anims.rpak",
+ "datatable/score_events.rpak",
+ "datatable/startpoints.rpak",
+ "datatable/sp_levels.rpak",
+ "datatable/community_entries.rpak",
+ "datatable/spotlight_images.rpak",
+ "datatable/death_hints_mp.rpak",
+ "datatable/flightpath_assets.rpak",
+ "datatable/earn_meter_mp.rpak",
+ "datatable/battle_chatter_voices.rpak",
+ "datatable/battle_chatter.rpak",
+ "datatable/titan_os_conversations.rpak",
+ "datatable/faction_dialogue.rpak",
+ "datatable/grunt_chatter_mp.rpak",
+ "datatable/spectre_chatter_mp.rpak",
+ "datatable/pain_death_sounds.rpak",
+ "datatable/caller_ids_mp.rpak"};
+
+ for (const char* datatable : VANILLA_DATATABLE_PATHS)
+ DumpDatatable(datatable);
}
-template <ScriptContext context> void RegisterDataTableFunctions()
+template <ScriptContext context> void RegisterDataTableFunctions()
{
- g_pSquirrel<context>->AddFuncOverride("GetDataTable", GetDatatable<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableColumnByName", GetDatatabeColumnByName<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDatatableRowCount", GetDatatabeRowCount<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableString", GetDataTableString<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableInt", GetDataTableInt<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableFloat", GetDataTableFloat<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableBool", GetDataTableBool<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableAsset", GetDataTableAsset<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableVector", GetDataTableVector<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingStringValue", GetDataTableRowMatchingStringValue<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingAssetValue", GetDataTableRowMatchingAssetValue<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingFloatValue", GetDataTableRowMatchingFloatValue<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingIntValue", GetDataTableRowMatchingIntValue<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingVectorValue", GetDataTableRowMatchingVectorValue<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTable", SQ_GetDatatable<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableColumnByName", SQ_GetDataTableColumnByName<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDatatableRowCount", SQ_GetDataTableRowCount<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableString", SQ_GetDataTableString<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableInt", SQ_GetDataTableInt<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableFloat", SQ_GetDataTableFloat<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableBool", SQ_GetDataTableBool<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableAsset", SQ_GetDataTableAsset<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableVector", SQ_GetDataTableVector<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingStringValue", SQ_GetDataTableRowMatchingStringValue<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingAssetValue", SQ_GetDataTableRowMatchingAssetValue<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingFloatValue", SQ_GetDataTableRowMatchingFloatValue<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingIntValue", SQ_GetDataTableRowMatchingIntValue<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableRowMatchingVectorValue", SQ_GetDataTableRowMatchingVectorValue<context>);
g_pSquirrel<context>->AddFuncOverride(
- "GetDataTableRowLessThanOrEqualToFloatValue", GetDataTableRowLessThanOrEqualToFloatValue<context>);
+ "GetDataTableRowLessThanOrEqualToFloatValue", SQ_GetDataTableRowLessThanOrEqualToFloatValue<context>);
g_pSquirrel<context>->AddFuncOverride(
- "GetDataTableRowGreaterThanOrEqualToFloatValue", GetDataTableRowGreaterThanOrEqualToFloatValue<context>);
- g_pSquirrel<context>->AddFuncOverride("GetDataTableRowLessThanOrEqualToIntValue", GetDataTableRowLessThanOrEqualToIntValue<context>);
+ "GetDataTableRowGreaterThanOrEqualToFloatValue", SQ_GetDataTableRowGreaterThanOrEqualToFloatValue<context>);
+ g_pSquirrel<context>->AddFuncOverride("GetDataTableRowLessThanOrEqualToIntValue", SQ_GetDataTableRowLessThanOrEqualToIntValue<context>);
g_pSquirrel<context>->AddFuncOverride(
- "GetDataTableRowGreaterThanOrEqualToFloatValue", GetDataTableRowGreaterThanOrEqualToIntValue<context>);
+ "GetDataTableRowGreaterThanOrEqualToFloatValue", SQ_GetDataTableRowGreaterThanOrEqualToIntValue<context>);
}
ON_DLL_LOAD_RELIESON("server.dll", ServerScriptDatatables, ServerSquirrel, (CModule module))
{
RegisterDataTableFunctions<ScriptContext::SERVER>();
- g_pSquirrel<ScriptContext::SERVER>->AddFuncRegistration(
- "void", "DumpDataTable", "var", "Dumps rpak datatable contents to console", DumpDataTable<ScriptContext::SERVER>);
- // g_pSquirrel<ScriptContext::SERVER>->AddFuncRegistration( "void", "DumpDataTableToFile", "var,string", "Dumps datatable contents to
- // console", DumpDataTableToFile<ScriptContext::SERVER>);
- getDataTableStructure = module.Offset(0x1250f0).As<void* (*)(HSquirrelVM*)>();
+ SQ_GetDatatableInternal<ScriptContext::SERVER> = module.Offset(0x1250f0).As<Datatable* (*)(HSquirrelVM*)>();
}
ON_DLL_LOAD_RELIESON("client.dll", ClientScriptDatatables, ClientSquirrel, (CModule module))
{
-
RegisterDataTableFunctions<ScriptContext::CLIENT>();
RegisterDataTableFunctions<ScriptContext::UI>();
+
+ SQ_GetDatatableInternal<ScriptContext::CLIENT> = module.Offset(0x1C9070).As<Datatable*(*)(HSquirrelVM*)>();
+ SQ_GetDatatableInternal<ScriptContext::UI> = SQ_GetDatatableInternal<ScriptContext::CLIENT>;
}
-ON_DLL_LOAD_RELIESON("engine.dll", GeneralScriptDataTables, ConCommand, (CModule module))
+ON_DLL_LOAD_RELIESON("engine.dll", SharedScriptDataTables, ConVar, (CModule module))
{
- Cvar_ns_prefer_datatable_from_disk =
- new ConVar("ns_prefer_datatable_from_disk", "0", FCVAR_NONE, "whether datatables from disk overwrite rpak datatables");
- if (Tier0::CommandLine()->CheckParm("-nopakdedi"))
- {
- Cvar_ns_prefer_datatable_from_disk->SetValue(true);
- }
+ Cvar_ns_prefer_datatable_from_disk = new ConVar(
+ "ns_prefer_datatable_from_disk",
+ IsDedicatedServer() && Tier0::CommandLine()->CheckParm("-nopakdedi") ? "1" : "0",
+ FCVAR_NONE,
+ "whether to prefer loading datatables from disk, rather than rpak");
+
+ RegisterConCommand("dump_datatables", ConCommand_dump_datatables, "dumps all datatables from a hardcoded list", FCVAR_NONE);
+ RegisterConCommand("dump_datatable", ConCommand_dump_datatable, "dump a datatable", FCVAR_NONE);
} \ No newline at end of file
diff --git a/NorthstarDLL/scriptservertoclientstringcommand.cpp b/NorthstarDLL/scriptservertoclientstringcommand.cpp
index 555ea7cf..b3a405fc 100644
--- a/NorthstarDLL/scriptservertoclientstringcommand.cpp
+++ b/NorthstarDLL/scriptservertoclientstringcommand.cpp
@@ -5,11 +5,11 @@
void ConCommand_ns_script_servertoclientstringcommand(const CCommand& arg)
{
- if (g_pSquirrel<ScriptContext::CLIENT>->SquirrelVM &&
+ if (g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM &&
g_pSquirrel<ScriptContext::CLIENT>->setupfunc("NSClientCodeCallback_RecievedServerToClientStringCommand") != SQRESULT_ERROR)
{
- g_pSquirrel<ScriptContext::CLIENT>->pushstring(g_pSquirrel<ScriptContext::CLIENT>->sqvm, arg.ArgS());
- g_pSquirrel<ScriptContext::CLIENT>->call(g_pSquirrel<ScriptContext::CLIENT>->sqvm, 1); // todo: doesn't throw or log errors from within this, probably not great behaviour
+ g_pSquirrel<ScriptContext::CLIENT>->pushstring(g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM->sqvm, arg.ArgS());
+ g_pSquirrel<ScriptContext::CLIENT>->call(g_pSquirrel<ScriptContext::CLIENT>->m_pSQVM->sqvm, 1); // todo: doesn't throw or log errors from within this, probably not great behaviour
}
}
diff --git a/NorthstarDLL/serverchathooks.cpp b/NorthstarDLL/serverchathooks.cpp
index a87a0034..bc9098dc 100644
--- a/NorthstarDLL/serverchathooks.cpp
+++ b/NorthstarDLL/serverchathooks.cpp
@@ -54,10 +54,10 @@ void,, (CServerGameDLL* self, unsigned int senderPlayerId, const char* text, boo
if (g_pSquirrel<ScriptContext::SERVER>->setupfunc("CServerGameDLL_ProcessMessageStartThread") != SQRESULT_ERROR)
{
- g_pSquirrel<ScriptContext::SERVER>->pushinteger(g_pSquirrel<ScriptContext::SERVER>->sqvm, (int)senderPlayerId - 1);
- g_pSquirrel<ScriptContext::SERVER>->pushstring(g_pSquirrel<ScriptContext::SERVER>->sqvm, text);
- g_pSquirrel<ScriptContext::SERVER>->pushbool(g_pSquirrel<ScriptContext::SERVER>->sqvm, isTeam);
- g_pSquirrel<ScriptContext::SERVER>->call(g_pSquirrel<ScriptContext::SERVER>->sqvm, 3);
+ g_pSquirrel<ScriptContext::SERVER>->pushinteger(g_pSquirrel<ScriptContext::SERVER>->m_pSQVM->sqvm, (int)senderPlayerId - 1);
+ g_pSquirrel<ScriptContext::SERVER>->pushstring(g_pSquirrel<ScriptContext::SERVER>->m_pSQVM->sqvm, text);
+ g_pSquirrel<ScriptContext::SERVER>->pushbool(g_pSquirrel<ScriptContext::SERVER>->m_pSQVM->sqvm, isTeam);
+ g_pSquirrel<ScriptContext::SERVER>->call(g_pSquirrel<ScriptContext::SERVER>->m_pSQVM->sqvm, 3);
}
else
_CServerGameDLL__OnReceivedSayTextMessage(self, senderPlayerId, text, isTeam);
diff --git a/NorthstarDLL/squirrel.cpp b/NorthstarDLL/squirrel.cpp
index 056fe401..4bd4bca8 100644
--- a/NorthstarDLL/squirrel.cpp
+++ b/NorthstarDLL/squirrel.cpp
@@ -4,6 +4,7 @@
#include "modmanager.h"
#include "dedicated.h"
#include "r2engine.h"
+#include "tier0.h"
AUTOHOOK_INIT()
@@ -41,6 +42,58 @@ eSQReturnType SQReturnTypeFromString(const char* pReturnType)
return eSQReturnType::Default; // previous default value
}
+const char* SQTypeNameFromID(int type)
+{
+ switch (type)
+ {
+ case OT_ASSET:
+ return "asset";
+ case OT_INTEGER:
+ return "int";
+ case OT_BOOL:
+ return "bool";
+ case SQOBJECT_NUMERIC:
+ return "float or int";
+ case OT_NULL:
+ return "null";
+ case OT_VECTOR:
+ return "vector";
+ case 0:
+ return "var";
+ case OT_USERDATA:
+ return "userdata";
+ case OT_FLOAT:
+ return "float";
+ case OT_STRING:
+ return "string";
+ case OT_ARRAY:
+ return "array";
+ case 0x8000200:
+ return "function";
+ case 0x8100000:
+ return "structdef";
+ case OT_THREAD:
+ return "thread";
+ case OT_FUNCPROTO:
+ return "function";
+ case OT_CLAAS:
+ return "class";
+ case OT_WEAKREF:
+ return "weakref";
+ case 0x8080000:
+ return "unimplemented function";
+ case 0x8200000:
+ return "struct instance";
+ case OT_TABLE:
+ return "table";
+ case 0xA008000:
+ return "instance";
+ case OT_ENTITY:
+ return "entity";
+ }
+ return "";
+}
+
// needed to define implementations for squirrelmanager outside of squirrel.h without compiler errors
template class SquirrelManager<ScriptContext::SERVER>;
template class SquirrelManager<ScriptContext::CLIENT>;
@@ -48,13 +101,12 @@ template class SquirrelManager<ScriptContext::UI>;
template <ScriptContext context> void SquirrelManager<context>::VMCreated(CSquirrelVM* newSqvm)
{
- SquirrelVM = newSqvm;
- sqvm = SquirrelVM->sqvm; // honestly not 100% sure on what this is, but alot of functions take it
+ m_pSQVM = newSqvm;
for (SQFuncRegistration* funcReg : m_funcRegistrations)
{
spdlog::info("Registering {} function {}", GetContextName(context), funcReg->squirrelFuncName);
- RegisterSquirrelFunc(SquirrelVM, funcReg, 1);
+ RegisterSquirrelFunc(m_pSQVM, funcReg, 1);
}
for (auto& pair : g_pModManager->m_DependencyConstants)
@@ -72,18 +124,18 @@ template <ScriptContext context> void SquirrelManager<context>::VMCreated(CSquir
}
}
- defconst(SquirrelVM, pair.first.c_str(), bWasFound);
+ defconst(m_pSQVM, pair.first.c_str(), bWasFound);
}
}
template <ScriptContext context> void SquirrelManager<context>::VMDestroyed()
{
- SquirrelVM = nullptr;
+ m_pSQVM = nullptr;
}
template <ScriptContext context> void SquirrelManager<context>::ExecuteCode(const char* pCode)
{
- if (!SquirrelVM)
+ if (!m_pSQVM)
{
spdlog::error("Cannot execute code, {} squirrel vm is not initialised", GetContextName(context));
return;
@@ -99,8 +151,8 @@ template <ScriptContext context> void SquirrelManager<context>::ExecuteCode(cons
if (compileResult != SQRESULT_ERROR)
{
- pushroottable(sqvm);
- SQRESULT callResult = call(sqvm, 0);
+ pushroottable(m_pSQVM->sqvm);
+ SQRESULT callResult = call(m_pSQVM->sqvm, 0);
spdlog::info("sq_call returned {}", PrintSQRESULT.at(callResult));
}
}
@@ -131,29 +183,36 @@ template <ScriptContext context> void SquirrelManager<context>::AddFuncRegistrat
template <ScriptContext context> SQRESULT SquirrelManager<context>::setupfunc(const SQChar* funcname)
{
- pushroottable(sqvm);
- pushstring(sqvm, funcname, -1);
+ pushroottable(m_pSQVM->sqvm);
+ pushstring(m_pSQVM->sqvm, funcname, -1);
- SQRESULT result = get(sqvm, -2);
+ SQRESULT result = get(m_pSQVM->sqvm, -2);
if (result != SQRESULT_ERROR)
- pushroottable(sqvm);
+ pushroottable(m_pSQVM->sqvm);
return result;
}
+
template <ScriptContext context> void SquirrelManager<context>::AddFuncOverride(std::string name, SQFunction func)
{
m_funcOverrides[name] = func;
}
// hooks
+bool IsUIVM(ScriptContext context, HSquirrelVM* pSqvm)
+{
+ return context != ScriptContext::SERVER && g_pSquirrel<ScriptContext::UI>->m_pSQVM &&
+ g_pSquirrel<ScriptContext::UI>->m_pSQVM->sqvm == pSqvm;
+}
+
template <ScriptContext context> void* (*sq_compiler_create)(HSquirrelVM* sqvm, void* a2, void* a3, SQBool bShouldThrowError);
template <ScriptContext context> void* sq_compiler_createHook(HSquirrelVM* sqvm, void* a2, void* a3, SQBool bShouldThrowError)
{
// store whether errors generated from this compile should be fatal
- if (context == ScriptContext::CLIENT && sqvm == g_pSquirrel<ScriptContext::UI>->sqvm)
- g_pSquirrel<ScriptContext::UI>->m_bCompilationErrorsFatal = bShouldThrowError;
+ if (IsUIVM(context, sqvm))
+ g_pSquirrel<ScriptContext::UI>->m_bFatalCompilationErrors = bShouldThrowError;
else
- g_pSquirrel<context>->m_bCompilationErrorsFatal = bShouldThrowError;
+ g_pSquirrel<context>->m_bFatalCompilationErrors = bShouldThrowError;
return sq_compiler_create<context>(sqvm, a2, a3, bShouldThrowError);
}
@@ -179,7 +238,7 @@ template <ScriptContext context> SQInteger SQPrintHook(HSquirrelVM* sqvm, const
return 0;
}
-template <ScriptContext context> CSquirrelVM* (*CreateNewVM)(void* a1, ScriptContext contextArg);
+template <ScriptContext context> CSquirrelVM* (*CreateNewVM)(void* a1, ScriptContext realContext);
template <ScriptContext context> CSquirrelVM* CreateNewVMHook(void* a1, ScriptContext realContext)
{
CSquirrelVM* sqvm = CreateNewVM<context>(a1, realContext);
@@ -192,11 +251,11 @@ template <ScriptContext context> CSquirrelVM* CreateNewVMHook(void* a1, ScriptCo
return sqvm;
}
-template <ScriptContext context> void (*DestroyVM)(void* a1, void* sqvm);
-template <ScriptContext context> void DestroyVMHook(void* a1, void* sqvm)
+template <ScriptContext context> void (*DestroyVM)(void* a1, HSquirrelVM* sqvm);
+template <ScriptContext context> void DestroyVMHook(void* a1, HSquirrelVM* sqvm)
{
ScriptContext realContext = context; // ui and client use the same function so we use this for prints
- if (context == ScriptContext::CLIENT && sqvm == g_pSquirrel<ScriptContext::UI>->sqvm)
+ if (IsUIVM(context, sqvm))
{
realContext = ScriptContext::UI;
g_pSquirrel<ScriptContext::UI>->VMDestroyed();
@@ -204,18 +263,18 @@ template <ScriptContext context> void DestroyVMHook(void* a1, void* sqvm)
else
DestroyVM<context>(a1, sqvm);
- spdlog::info("DestroyVM {} {}", GetContextName(realContext), sqvm);
+ spdlog::info("DestroyVM {} {}", GetContextName(realContext), (void*)sqvm);
}
-template <ScriptContext context> void (*SQCompileError)(void* sqvm, const char* error, const char* file, int line, int column);
-template <ScriptContext context> void ScriptCompileErrorHook(void* sqvm, const char* error, const char* file, int line, int column)
+template <ScriptContext context> void (*SQCompileError)(HSquirrelVM* sqvm, const char* error, const char* file, int line, int column);
+template <ScriptContext context> void ScriptCompileErrorHook(HSquirrelVM* sqvm, const char* error, const char* file, int line, int column)
{
- bool bIsFatalError = g_pSquirrel<context>->m_bCompilationErrorsFatal;
+ bool bIsFatalError = g_pSquirrel<context>->m_bFatalCompilationErrors;
ScriptContext realContext = context; // ui and client use the same function so we use this for prints
- if (context == ScriptContext::CLIENT && sqvm == g_pSquirrel<ScriptContext::UI>->sqvm)
+ if (IsUIVM(context, sqvm))
{
realContext = ScriptContext::UI;
- bIsFatalError = g_pSquirrel<ScriptContext::UI>->m_bCompilationErrorsFatal;
+ bIsFatalError = g_pSquirrel<ScriptContext::UI>->m_bFatalCompilationErrors;
}
spdlog::error("{} SCRIPT COMPILE ERROR {}", GetContextName(realContext), error);
@@ -247,11 +306,10 @@ template <ScriptContext context> void ScriptCompileErrorHook(void* sqvm, const c
// dont call the original function since it kills game lol
}
-template <ScriptContext context> int64_t (*RegisterSquirrelFunction)(CSquirrelVM* sqvm, SQFuncRegistration* funcReg, char unknown);
+template <ScriptContext context> int64_t(*RegisterSquirrelFunction)(CSquirrelVM* sqvm, SQFuncRegistration* funcReg, char unknown);
template <ScriptContext context> int64_t RegisterSquirrelFunctionHook(CSquirrelVM* sqvm, SQFuncRegistration* funcReg, char unknown)
{
-
- if (context == ScriptContext::CLIENT && sqvm == g_pSquirrel<ScriptContext::UI>->SquirrelVM)
+ if (IsUIVM(context, sqvm->sqvm))
{
if (g_pSquirrel<ScriptContext::UI>->m_funcOverrides.count(funcReg->squirrelFuncName))
{
@@ -263,7 +321,7 @@ template <ScriptContext context> int64_t RegisterSquirrelFunctionHook(CSquirrelV
return g_pSquirrel<ScriptContext::UI>->RegisterSquirrelFunc(sqvm, funcReg, unknown);
}
- if (g_pSquirrel<context>->m_funcOverrides.count(funcReg->squirrelFuncName))
+ if (g_pSquirrel<context>->m_funcOverrides.find(funcReg->squirrelFuncName) != g_pSquirrel<context>->m_funcOverrides.end())
{
g_pSquirrel<context>->m_funcOriginals[funcReg->squirrelFuncName] = funcReg->funcPtr;
funcReg->funcPtr = g_pSquirrel<context>->m_funcOverrides[funcReg->squirrelFuncName];
@@ -276,7 +334,6 @@ template <ScriptContext context> int64_t RegisterSquirrelFunctionHook(CSquirrelV
template <ScriptContext context> bool (*CallScriptInitCallback)(void* sqvm, const char* callback);
template <ScriptContext context> bool CallScriptInitCallbackHook(void* sqvm, const char* callback)
{
-
ScriptContext realContext = context;
bool bShouldCallCustomCallbacks = true;
@@ -346,21 +403,43 @@ template <ScriptContext context> void ConCommand_script(const CCommand& args)
g_pSquirrel<context>->ExecuteCode(args.ArgS());
}
-SQRESULT SQ_Stub(HSquirrelVM* sqvm)
+// literal class type that wraps a constant expression string
+template <size_t N> struct TemplateStringLiteral
+{
+ constexpr TemplateStringLiteral(const char (&str)[N])
+ {
+ std::copy_n(str, N, value);
+ }
+
+ char value[N];
+};
+
+template <ScriptContext context, TemplateStringLiteral funcName> SQRESULT SQ_StubbedFunc(HSquirrelVM* sqvm)
{
- spdlog::info("Stubbed Function called");
+ spdlog::info("Blocking call to stubbed function {} in {}", funcName.value, GetContextName(context));
return SQRESULT_NULL;
}
+template <ScriptContext context> void StubUnsafeSQFuncs()
+{
+ if (!Tier0::CommandLine()->CheckParm("-allowunsafesqfuncs"))
+ {
+ g_pSquirrel<context>->AddFuncOverride("DevTextBufferWrite", SQ_StubbedFunc<context, "DevTextBufferWrite">);
+ g_pSquirrel<context>->AddFuncOverride("DevTextBufferClear", SQ_StubbedFunc<context, "DevTextBufferClear">);
+ g_pSquirrel<context>->AddFuncOverride("DevTextBufferDumpToFile", SQ_StubbedFunc<context, "DevTextBufferDumpToFile">);
+ g_pSquirrel<context>->AddFuncOverride("Dev_CommandLineAddParam", SQ_StubbedFunc<context, "Dev_CommandLineAddParam">);
+ g_pSquirrel<context>->AddFuncOverride("DevP4Checkout", SQ_StubbedFunc<context, "DevP4Checkout">);
+ g_pSquirrel<context>->AddFuncOverride("DevP4Add", SQ_StubbedFunc<context, "DevP4Add">);
+ }
+}
+
ON_DLL_LOAD_RELIESON("client.dll", ClientSquirrel, ConCommand, (CModule module))
{
AUTOHOOK_DISPATCH_MODULE(client.dll)
g_pSquirrel<ScriptContext::CLIENT> = new SquirrelManager<ScriptContext::CLIENT>;
g_pSquirrel<ScriptContext::UI> = new SquirrelManager<ScriptContext::UI>;
-
- // g_pSquirrel<ScriptContext::CLIENT>->RegisterSquirrelFunc = module.Offset(0x108E0).As<RegisterSquirrelFuncType>();
- // g_pSquirrel<ScriptContext::UI>->RegisterSquirrelFunc = g_pSquirrel<ScriptContext::CLIENT>->RegisterSquirrelFunc;
+
g_pSquirrel<ScriptContext::CLIENT>->__sq_defconst = module.Offset(0x12120).As<sq_defconstType>();
g_pSquirrel<ScriptContext::UI>->__sq_defconst = g_pSquirrel<ScriptContext::CLIENT>->__sq_defconst;
@@ -419,6 +498,12 @@ ON_DLL_LOAD_RELIESON("client.dll", ClientSquirrel, ConCommand, (CModule module))
g_pSquirrel<ScriptContext::UI>->__sq_createuserdata = g_pSquirrel<ScriptContext::CLIENT>->__sq_createuserdata;
g_pSquirrel<ScriptContext::UI>->__sq_setuserdatatypeid = g_pSquirrel<ScriptContext::CLIENT>->__sq_setuserdatatypeid;
+ MAKEHOOK(
+ module.Offset(0x108E0),
+ &RegisterSquirrelFunctionHook<ScriptContext::CLIENT>,
+ &g_pSquirrel<ScriptContext::CLIENT>->RegisterSquirrelFunc);
+ g_pSquirrel<ScriptContext::UI>->RegisterSquirrelFunc = g_pSquirrel<ScriptContext::CLIENT>->RegisterSquirrelFunc;
+
// uiscript_reset concommand: don't loop forever if compilation fails
module.Offset(0x3C6E4C).NOP(6);
@@ -431,31 +516,16 @@ ON_DLL_LOAD_RELIESON("client.dll", ClientSquirrel, ConCommand, (CModule module))
MAKEHOOK(module.Offset(0x26E70), &DestroyVMHook<ScriptContext::CLIENT>, &DestroyVM<ScriptContext::CLIENT>);
MAKEHOOK(module.Offset(0x79A50), &ScriptCompileErrorHook<ScriptContext::CLIENT>, &SQCompileError<ScriptContext::CLIENT>);
- MAKEHOOK(module.Offset(0x10190), &CallScriptInitCallbackHook<ScriptContext::CLIENT>, &CallScriptInitCallback<ScriptContext::CLIENT>);
-
MAKEHOOK(
- module.Offset(0x108E0),
- &RegisterSquirrelFunctionHook<ScriptContext::CLIENT>,
- &g_pSquirrel<ScriptContext::CLIENT>->RegisterSquirrelFunc);
-
- g_pSquirrel<ScriptContext::UI>->RegisterSquirrelFunc = g_pSquirrel<ScriptContext::CLIENT>->RegisterSquirrelFunc;
+ module.Offset(0x10190),
+ &CallScriptInitCallbackHook<ScriptContext::CLIENT>,
+ &CallScriptInitCallback<ScriptContext::CLIENT>);
RegisterConCommand("script_client", ConCommand_script<ScriptContext::CLIENT>, "Executes script code on the client vm", FCVAR_CLIENTDLL);
RegisterConCommand("script_ui", ConCommand_script<ScriptContext::UI>, "Executes script code on the ui vm", FCVAR_CLIENTDLL);
- g_pSquirrel<ScriptContext::CLIENT>->AddFuncOverride("DevTextBufferWrite", SQ_Stub);
- g_pSquirrel<ScriptContext::CLIENT>->AddFuncOverride("DevTextBufferClear", SQ_Stub);
- g_pSquirrel<ScriptContext::CLIENT>->AddFuncOverride("DevTextBufferDumpToFile", SQ_Stub);
- g_pSquirrel<ScriptContext::CLIENT>->AddFuncOverride("Dev_CommandLineAddParam", SQ_Stub);
- g_pSquirrel<ScriptContext::CLIENT>->AddFuncOverride("DevP4Checkout", SQ_Stub);
- g_pSquirrel<ScriptContext::CLIENT>->AddFuncOverride("DevP4Add", SQ_Stub);
-
- g_pSquirrel<ScriptContext::UI>->AddFuncOverride("DevTextBufferWrite", SQ_Stub);
- g_pSquirrel<ScriptContext::UI>->AddFuncOverride("DevTextBufferClear", SQ_Stub);
- g_pSquirrel<ScriptContext::UI>->AddFuncOverride("DevTextBufferDumpToFile", SQ_Stub);
- g_pSquirrel<ScriptContext::UI>->AddFuncOverride("Dev_CommandLineAddParam", SQ_Stub);
- g_pSquirrel<ScriptContext::UI>->AddFuncOverride("DevP4Checkout", SQ_Stub);
- g_pSquirrel<ScriptContext::UI>->AddFuncOverride("DevP4Add", SQ_Stub);
+ StubUnsafeSQFuncs<ScriptContext::CLIENT>();
+ StubUnsafeSQFuncs<ScriptContext::UI>();
}
ON_DLL_LOAD_RELIESON("server.dll", ServerSquirrel, ConCommand, (CModule module))
@@ -464,7 +534,6 @@ ON_DLL_LOAD_RELIESON("server.dll", ServerSquirrel, ConCommand, (CModule module))
g_pSquirrel<ScriptContext::SERVER> = new SquirrelManager<ScriptContext::SERVER>;
- // g_pSquirrel<ScriptContext::SERVER>->RegisterSquirrelFunc = module.Offset(0x1DD10).As<RegisterSquirrelFuncType>();
g_pSquirrel<ScriptContext::SERVER>->__sq_defconst = module.Offset(0x1F550).As<sq_defconstType>();
g_pSquirrel<ScriptContext::SERVER>->__sq_compilebuffer = module.Offset(0x3110).As<sq_compilebufferType>();
@@ -497,6 +566,11 @@ ON_DLL_LOAD_RELIESON("server.dll", ServerSquirrel, ConCommand, (CModule module))
g_pSquirrel<ScriptContext::SERVER>->__sq_createuserdata = module.Offset(0x38D0).As<sq_createuserdataType>();
g_pSquirrel<ScriptContext::SERVER>->__sq_setuserdatatypeid = module.Offset(0x6470).As<sq_setuserdatatypeidType>();
+ MAKEHOOK(
+ module.Offset(0x1DD10),
+ &RegisterSquirrelFunctionHook<ScriptContext::SERVER>,
+ &g_pSquirrel<ScriptContext::SERVER>->RegisterSquirrelFunc);
+
MAKEHOOK(module.Offset(0x8AA0), &sq_compiler_createHook<ScriptContext::SERVER>, &sq_compiler_create<ScriptContext::SERVER>);
MAKEHOOK(module.Offset(0x1FE90), &SQPrintHook<ScriptContext::SERVER>, &SQPrint<ScriptContext::SERVER>);
@@ -505,11 +579,6 @@ ON_DLL_LOAD_RELIESON("server.dll", ServerSquirrel, ConCommand, (CModule module))
MAKEHOOK(module.Offset(0x799E0), &ScriptCompileErrorHook<ScriptContext::SERVER>, &SQCompileError<ScriptContext::SERVER>);
MAKEHOOK(module.Offset(0x1D5C0), &CallScriptInitCallbackHook<ScriptContext::SERVER>, &CallScriptInitCallback<ScriptContext::SERVER>);
- MAKEHOOK(
- module.Offset(0x1DD10),
- &RegisterSquirrelFunctionHook<ScriptContext::SERVER>,
- &g_pSquirrel<ScriptContext::SERVER>->RegisterSquirrelFunc);
-
// FCVAR_CHEAT and FCVAR_GAMEDLL_FOR_REMOTE_CLIENTS allows clients to execute this, but since it's unsafe we only allow it when cheats
// are enabled for script_client and script_ui, we don't use cheats, so clients can execute them on themselves all they want
RegisterConCommand(
@@ -518,62 +587,5 @@ ON_DLL_LOAD_RELIESON("server.dll", ServerSquirrel, ConCommand, (CModule module))
"Executes script code on the server vm",
FCVAR_GAMEDLL | FCVAR_GAMEDLL_FOR_REMOTE_CLIENTS | FCVAR_CHEAT);
- g_pSquirrel<ScriptContext::SERVER>->AddFuncOverride("DevTextBufferWrite", SQ_Stub);
- g_pSquirrel<ScriptContext::SERVER>->AddFuncOverride("DevTextBufferClear", SQ_Stub);
- g_pSquirrel<ScriptContext::SERVER>->AddFuncOverride("DevTextBufferDumpToFile", SQ_Stub);
- g_pSquirrel<ScriptContext::SERVER>->AddFuncOverride("Dev_CommandLineAddParam", SQ_Stub);
- g_pSquirrel<ScriptContext::SERVER>->AddFuncOverride("DevP4Checkout", SQ_Stub);
- g_pSquirrel<ScriptContext::SERVER>->AddFuncOverride("DevP4Add", SQ_Stub);
+ StubUnsafeSQFuncs<ScriptContext::SERVER>();
}
-
-const char* SQTypeNameFromID(int type)
-{
- switch (type)
- {
- case OT_ASSET:
- return "asset";
- case OT_INTEGER:
- return "int";
- case OT_BOOL:
- return "bool";
- case SQOBJECT_NUMERIC:
- return "float or int";
- case OT_NULL:
- return "null";
- case OT_VECTOR:
- return "vector";
- case 0:
- return "var";
- case OT_USERDATA:
- return "userdata";
- case OT_FLOAT:
- return "float";
- case OT_STRING:
- return "string";
- case OT_ARRAY:
- return "array";
- case 0x8000200:
- return "function";
- case 0x8100000:
- return "structdef";
- case OT_THREAD:
- return "thread";
- case OT_FUNCPROTO:
- return "function";
- case OT_CLAAS:
- return "class";
- case OT_WEAKREF:
- return "weakref";
- case 0x8080000:
- return "unimplemented function";
- case 0x8200000:
- return "struct instance";
- case OT_TABLE:
- return "table";
- case 0xA008000:
- return "instance";
- case OT_ENTITY:
- return "entity";
- }
- return "";
-} \ No newline at end of file
diff --git a/NorthstarDLL/squirrel.h b/NorthstarDLL/squirrel.h
index fc727357..2fa50ba6 100644
--- a/NorthstarDLL/squirrel.h
+++ b/NorthstarDLL/squirrel.h
@@ -1,6 +1,8 @@
#pragma once
#include "squirreldatatypes.h"
+#include "vector.h"
+
// stolen from ttf2sdk: sqvm types
typedef float SQFloat;
typedef long SQInteger;
@@ -37,8 +39,6 @@ const std::map<SQRESULT, const char*> PrintSQRESULT = {
{SQRESULT_NOTNULL, "SQRESULT_NOTNULL"}
};
-
-
struct CompileBufferState
{
const SQChar* buffer;
@@ -123,12 +123,12 @@ typedef SQFloat (*sq_getfloatType)(HSquirrelVM*, SQInteger iStackpos);
typedef SQBool (*sq_getboolType)(HSquirrelVM*, SQInteger iStackpos);
typedef SQRESULT (*sq_getType)(HSquirrelVM* sqvm, SQInteger iStackpos);
typedef SQRESULT (*sq_getassetType)(HSquirrelVM* sqvm, SQInteger iStackpos, const char** pResult);
-typedef SQRESULT (*sq_getuserdataType)(HSquirrelVM* sqvm, SQInteger iStackpos, void** pData, long long* pTypeId);
+typedef SQRESULT (*sq_getuserdataType)(HSquirrelVM* sqvm, SQInteger iStackpos, void** pData, uint64_t* pTypeId);
typedef SQFloat* (*sq_getvectorType)(HSquirrelVM* sqvm, SQInteger iStackpos);
// sq stack userpointer funcs
typedef void* (*sq_createuserdataType)(HSquirrelVM* sqvm, SQInteger iSize);
-typedef SQRESULT (*sq_setuserdatatypeidType)(HSquirrelVM* sqvm, SQInteger iStackpos, long long iTypeId);
+typedef SQRESULT (*sq_setuserdatatypeidType)(HSquirrelVM* sqvm, SQInteger iStackpos, uint64_t iTypeId);
template <ScriptContext context> class SquirrelManager
{
@@ -136,12 +136,11 @@ template <ScriptContext context> class SquirrelManager
std::vector<SQFuncRegistration*> m_funcRegistrations;
public:
- CSquirrelVM* SquirrelVM;
- HSquirrelVM* sqvm;
+ CSquirrelVM* m_pSQVM;
std::map<std::string, SQFunction> m_funcOverrides = {};
std::map<std::string, SQFunction> m_funcOriginals = {};
- bool m_bCompilationErrorsFatal = false;
+ bool m_bFatalCompilationErrors = false;
#pragma region SQVM funcs
RegisterSquirrelFuncType RegisterSquirrelFunc;
@@ -179,7 +178,7 @@ template <ScriptContext context> class SquirrelManager
#pragma endregion
public:
- SquirrelManager() : SquirrelVM(nullptr) {}
+ SquirrelManager() : m_pSQVM(nullptr) {}
void VMCreated(CSquirrelVM* newSqvm);
void VMDestroyed();
@@ -197,7 +196,7 @@ template <ScriptContext context> class SquirrelManager
inline SQRESULT
compilebuffer(CompileBufferState* bufferState, const SQChar* bufferName = "unnamedbuffer", const SQBool bShouldThrowError = false)
{
- return __sq_compilebuffer(sqvm, bufferState, bufferName, -1, bShouldThrowError);
+ return __sq_compilebuffer(m_pSQVM->sqvm, bufferState, bufferName, -1, bShouldThrowError);
}
inline SQRESULT call(HSquirrelVM* sqvm, const SQInteger args)
@@ -259,9 +258,10 @@ template <ScriptContext context> class SquirrelManager
{
__sq_pushasset(sqvm, sVal, length);
}
- inline void pushvector(HSquirrelVM* sqvm, const SQFloat* pVal)
+
+ inline void pushvector(HSquirrelVM* sqvm, const Vector3 pVal)
{
- __sq_pushvector(sqvm, pVal);
+ __sq_pushvector(sqvm, *(float**)&pVal);
}
inline const SQChar* getstring(HSquirrelVM* sqvm, const SQInteger stackpos)
@@ -289,9 +289,10 @@ template <ScriptContext context> class SquirrelManager
return __sq_get(sqvm, stackpos);
}
- inline SQFloat* getvector(HSquirrelVM* sqvm, const SQInteger stackpos)
+ inline Vector3 getvector(HSquirrelVM* sqvm, const SQInteger stackpos)
{
- return __sq_getvector(sqvm, stackpos);
+ float* pRet = __sq_getvector(sqvm, stackpos);
+ return *(Vector3*)&pRet;
}
inline SQRESULT getasset(HSquirrelVM* sqvm, const SQInteger stackpos, const char** result)
@@ -299,19 +300,19 @@ template <ScriptContext context> class SquirrelManager
return __sq_getasset(sqvm, stackpos, result);
}
- inline SQRESULT getuserdata(HSquirrelVM* sqvm, const SQInteger stackpos, void** data, long long* typeId)
+ template <typename T> inline SQRESULT getuserdata(HSquirrelVM* sqvm, const SQInteger stackpos, T* data, uint64_t* typeId)
{
- return __sq_getuserdata(sqvm, stackpos, data, typeId); // this sometimes crashes idk
+ return __sq_getuserdata(sqvm, stackpos, (void**)data, typeId); // this sometimes crashes idk
}
- inline void* createuserdata(HSquirrelVM* sqvm, SQInteger size)
+ template <typename T> inline T* createuserdata(HSquirrelVM* sqvm, SQInteger size)
{
void* ret = __sq_createuserdata(sqvm, size);
memset(ret, 0, size);
- return ret;
+ return (T*)ret;
}
- SQRESULT setuserdatatypeid(HSquirrelVM* sqvm, const SQInteger stackpos, long long typeId)
+ inline SQRESULT setuserdatatypeid(HSquirrelVM* sqvm, const SQInteger stackpos, uint64_t typeId)
{
return __sq_setuserdatatypeid(sqvm, stackpos, typeId);
}
diff --git a/NorthstarDLL/squirreldatatypes.h b/NorthstarDLL/squirreldatatypes.h
index 95d079bf..818ce2a4 100644
--- a/NorthstarDLL/squirreldatatypes.h
+++ b/NorthstarDLL/squirreldatatypes.h
@@ -103,7 +103,7 @@ struct SQObject
};
/* 138 */
-struct __declspec(align(8)) SQString
+struct alignas(8) SQString
{
void* vftable;
int uiRef;
@@ -117,7 +117,7 @@ struct __declspec(align(8)) SQString
};
/* 137 */
-struct __declspec(align(8)) SQTable
+struct alignas(8) SQTable
{
void* vftable;
unsigned char gap_08[4];
@@ -138,7 +138,7 @@ struct __declspec(align(8)) SQTable
};
/* 140 */
-struct __declspec(align(8)) SQClosure
+struct alignas(8) SQClosure
{
void* vftable;
unsigned char gap_08[4];
@@ -157,7 +157,7 @@ struct __declspec(align(8)) SQClosure
};
/* 139 */
-struct __declspec(align(8)) SQFunctionProto
+struct alignas(8) SQFunctionProto
{
void* vftable;
unsigned char gap_08[4];
@@ -198,7 +198,7 @@ struct SQStructDef
};
/* 157 */
-struct __declspec(align(8)) SQNativeClosure
+struct alignas(8) SQNativeClosure
{
void* vftable;
int uiRef;
@@ -233,7 +233,7 @@ struct SQArray
};
/* 129 */
-struct __declspec(align(8)) HSquirrelVM
+struct alignas(8) HSquirrelVM
{
void* vftable;
int uiRef;
@@ -398,7 +398,7 @@ struct tableNode
};
/* 136 */
-struct __declspec(align(8)) CallInfo
+struct alignas(8) CallInfo
{
long long ip;
SQObject* _literals;
@@ -420,7 +420,7 @@ struct StringTable
};
/* 141 */
-struct __declspec(align(8)) SQStackInfos
+struct alignas(8) SQStackInfos
{
char* _name;
char* _sourceName;
@@ -428,7 +428,7 @@ struct __declspec(align(8)) SQStackInfos
};
/* 151 */
-struct __declspec(align(4)) SQInstruction
+struct alignas(4) SQInstruction
{
int op;
int arg1;
diff --git a/NorthstarDLL/vector.h b/NorthstarDLL/vector.h
new file mode 100644
index 00000000..a5d68003
--- /dev/null
+++ b/NorthstarDLL/vector.h
@@ -0,0 +1,44 @@
+#pragma once
+
+union Vector3
+{
+ struct
+ {
+ float x;
+ float y;
+ float z;
+ };
+
+ float raw[3];
+
+ Vector3() : x(0), y(0), z(0) {}
+ Vector3(float* pRawFloats) // assumes float[3] => vector
+ {
+ memcpy(raw, pRawFloats, sizeof(this));
+ }
+
+ // 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;
+ }
+}; \ No newline at end of file