diff options
author | BobTheBob9 <for.oliver.kirkham@gmail.com> | 2022-09-01 23:08:58 +0100 |
---|---|---|
committer | BobTheBob9 <for.oliver.kirkham@gmail.com> | 2022-09-01 23:08:58 +0100 |
commit | 2f2b497aca23239406ce3f8d94f29f10d205a68b (patch) | |
tree | 36e630a82422e97520e4c9f9bc60578cc9f0002d | |
parent | f2e670bd32fc291dbb6a4b45c08cb8f2d94a6bc8 (diff) | |
download | NorthstarLauncher-2f2b497aca23239406ce3f8d94f29f10d205a68b.tar.gz NorthstarLauncher-2f2b497aca23239406ce3f8d94f29f10d205a68b.zip |
add scriptdatatable.cpp rewrite
-rw-r--r-- | NorthstarDLL/NorthstarDLL.vcxproj | 1 | ||||
-rw-r--r-- | NorthstarDLL/NorthstarDLL.vcxproj.filters | 3597 | ||||
-rw-r--r-- | NorthstarDLL/audio.h | 2 | ||||
-rw-r--r-- | NorthstarDLL/buildainfile.cpp | 2 | ||||
-rw-r--r-- | NorthstarDLL/clientchathooks.cpp | 12 | ||||
-rw-r--r-- | NorthstarDLL/debugoverlay.cpp | 11 | ||||
-rw-r--r-- | NorthstarDLL/dllmain.cpp | 1 | ||||
-rw-r--r-- | NorthstarDLL/exploitfixes.cpp | 14 | ||||
-rw-r--r-- | NorthstarDLL/hooks.cpp | 2 | ||||
-rw-r--r-- | NorthstarDLL/languagehooks.cpp | 2 | ||||
-rw-r--r-- | NorthstarDLL/masterserver.cpp | 4 | ||||
-rw-r--r-- | NorthstarDLL/misccommands.cpp | 2 | ||||
-rw-r--r-- | NorthstarDLL/modmanager.h | 2 | ||||
-rw-r--r-- | NorthstarDLL/pch.h | 2 | ||||
-rw-r--r-- | NorthstarDLL/scriptdatatables.cpp | 1177 | ||||
-rw-r--r-- | NorthstarDLL/scriptservertoclientstringcommand.cpp | 6 | ||||
-rw-r--r-- | NorthstarDLL/serverchathooks.cpp | 8 | ||||
-rw-r--r-- | NorthstarDLL/squirrel.cpp | 250 | ||||
-rw-r--r-- | NorthstarDLL/squirrel.h | 37 | ||||
-rw-r--r-- | NorthstarDLL/squirreldatatypes.h | 18 | ||||
-rw-r--r-- | NorthstarDLL/vector.h | 44 |
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 |