aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL/dllmain.cpp
diff options
context:
space:
mode:
authorBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2022-10-17 23:26:07 +0100
committerGitHub <noreply@github.com>2022-10-17 23:26:07 +0100
commit841881af9ea6ec73b1d505d5a8f7c1f766273724 (patch)
tree91feb40fe810984b59d2d2da440e289370b0a137 /NorthstarDLL/dllmain.cpp
parentdc0934d29caacc8da1e7df8b775d24b4e99c381c (diff)
downloadNorthstarLauncher-841881af9ea6ec73b1d505d5a8f7c1f766273724.tar.gz
NorthstarLauncher-841881af9ea6ec73b1d505d5a8f7c1f766273724.zip
big refactor (#171)v1.10.0-rc1
* use in-file macros rather than global funcs for registering dll load callbacks * move more things to macros * fix debug crashes * move sqvm funcs to sq managers * get rid of context file * refactor some squirrel stuff and ingame compilation error message * move tier0 and playlist funcs to namespaces * uiscript_reset concommand: don't loop forever if compilation fails * improve showing console for ui script compile errors * standardise concommand func naming in c++ * use lambdas for dll load callbacks so intellisense shits itself less * use cvar change callbacks for unescaping ns_server_name and ns_server_desc * add proper helpstrings to masterserver cvars * add cvar help and find * allow parsing of convar flags from string * normalise mod fs paths to be lowercase * move hoststate to its own file and add host_init hooks * better IsFlagSet def * replace files in ReadFromCache * rename g_ModManager to g_pModManager * formatting changes * make cvar print work on dedi, move demo fix stuff, add findflags * add proper map autocompletes and maps command * formatting changes * separate gameutils into multiple r2 headers * Update keyvalues.cpp * move sqvm funcs into wrappers in the manager class * remove unnecessary header files * lots of cleanup and starting moving to new hooking macros * update more stuff to new hook macros * rename project folder (:tf: commit log) * fix up postbuild commands to use relative dir * almost fully replaced hooking lib * completely remove old hooking * add nsprefix because i forgot to include it * move exploit prevention and limits code out of serverauthentication, and have actual defs for CBasePlayer * use modular ServerPresence system for registering servers * add new memory lib * accidentally pushed broke code oops * lots of stuff idk * implement some more prs * improve rpakfilesystem * fix line endings on vcxproj * Revert "fix line endings on vcxproj" This reverts commit 4ff7d022d2602c2dba37beba8b8df735cf5cd7d9. * add more prs * i swear i committed these how are they not there * Add ability to load Datatables from files (#238) * first version of kinda working custom datatables * Fix copy error * Finish custom datatables * Fix Merge * Fix line endings * Add fallback to rpak when ns_prefere_datatable_from_disk is true * fix typo * Bug fixess * Fix Function Registration hook * Set convar value * Fix Client and Ui VM * enable server auth with ms agian * Add Filters * FIx unused import * Merge remote-tracking branch 'upsteam/bobs-big-refactor-pr' into datatables Co-authored-by: RoyalBlue1 <realEmail@veryRealURL.com> * Add some changes from main to refactor (#243) * Add PR template * Update CI folder location * Delete startup args txt files * Fix line endings (hopefully) (#244) * Fix line endings (hopefully) * Fix more line endings * Update refactor (#250) * Add PR template * Update CI folder location * Delete startup args txt files * Add editorconfig file (#246) * Add editorconfig file It's a cross-editor compatible config file that defines certain editor behaviour (e.g. adding/removing newline at end of file) It is supported by major editors like Visual Studio (Code) and by version control providers like GitHub. Should end the constant adding/removing of final newline in PRs * More settings - unicode by default - trim newlines - use tabs for indentation (ugh) * Ignore folder rename (#245) * Hot reload banlist on player join (#233) * added banlist hotreload * fix formatting * didnt append, cleared whole file oopsie * unfuckedunban not rewriting file * fixed not checking for new line Co-authored-by: ScureX <47725553+ScureX@users.noreply.github.com> * Refactor cleanup (#256) * Fix indentation * Fix path in clang-format command in readme * Refactor cleanup (some formatting fixes) (#257) * Fix some formatting * More formatting fixes * add scriptdatatable.cpp rewrite * Some formatting fixes (#260) * More formatting stuff (#261) * various formatting changes and fixes * Fix changed icon (#264) * clang format, fix issues with server registration and rpak loading * fix more formatting * update postbuild step * set launcher directory and error on fail creating log files * change some stuff in exploitfixes * only unrestrict dev commands when commandline flag is present * fix issues with cvar flag commit * fixup command flags better and reformat * bring up to date with main * fixup formatting * improve cvar flag fixup and remove temp thing from findflags * set serverfilter better * avoid ptr decay when setting auth token * add more entity functions * Fix the MS server registration issues. (#285) * Port ms presence reporter to std::async * Fix crash due to std::optional being assigned nullptr. * Fix formatting. * Wait 20 seconds if MS returns DUPLICATE_SERVER. * Change PERSISTENCE_MAX_SIZE to fix player authentication (#287) The size check added in the refactor was incorrect: - 56306: expected pdata size based on the pdef - 512: allowance for trailing junk (r2 adds 137 bytes of trailing junk) - 100: for some wiggle room Co-Authored-By: pg9182 <96569817+pg9182@users.noreply.github.com> * change miscserverscript to use actual entity arguments rather than player index jank * Fix token clearing hook (#290) A certain someone forgot to put an `0x` in front of their hex number, meaning the offset is wrong. This would cause token to be leaked again Co-authored-by: Maya <malte.hoermeyer@web.de> Co-authored-by: RoyalBlue1 <realEmail@veryRealURL.com> Co-authored-by: GeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com> Co-authored-by: ScureX <47725553+ScureX@users.noreply.github.com> Co-authored-by: Erlite <ys.aameziane@gmail.com> Co-authored-by: Emma Miler <emma.pi@protonmail.com> Co-authored-by: pg9182 <96569817+pg9182@users.noreply.github.com>
Diffstat (limited to 'NorthstarDLL/dllmain.cpp')
-rw-r--r--NorthstarDLL/dllmain.cpp158
1 files changed, 9 insertions, 149 deletions
diff --git a/NorthstarDLL/dllmain.cpp b/NorthstarDLL/dllmain.cpp
index 020ab1cd..8d78ee2c 100644
--- a/NorthstarDLL/dllmain.cpp
+++ b/NorthstarDLL/dllmain.cpp
@@ -1,62 +1,23 @@
#include "pch.h"
-#include "hooks.h"
#include "main.h"
-#include "squirrel.h"
-#include "dedicated.h"
-#include "dedicatedmaterialsystem.h"
-#include "sourceconsole.h"
#include "logging.h"
-#include "concommand.h"
-#include "modmanager.h"
-#include "filesystem.h"
-#include "serverauthentication.h"
-#include "scriptmodmenu.h"
-#include "scriptserverbrowser.h"
-#include "keyvalues.h"
-#include "masterserver.h"
-#include "gameutils.h"
-#include "chatcommand.h"
-#include "modlocalisation.h"
-#include "playlist.h"
-#include "miscserverscript.h"
-#include "clientauthhooks.h"
-#include "latencyflex.h"
-#include "scriptbrowserhooks.h"
-#include "scriptmainmenupromos.h"
-#include "miscclientfixes.h"
-#include "miscserverfixes.h"
-#include "rpakfilesystem.h"
-#include "bansystem.h"
+#include "crashhandler.h"
#include "memalloc.h"
-#include "maxplayers.h"
-#include "languagehooks.h"
-#include "audio.h"
-#include "buildainfile.h"
#include "nsprefix.h"
-#include "serverchathooks.h"
-#include "clientchathooks.h"
-#include "localchatwriter.h"
-#include "scriptservertoclientstringcommand.h"
#include "plugin_abi.h"
#include "plugins.h"
-#include "debugoverlay.h"
-#include "clientvideooverrides.h"
-#include "clientruihooks.h"
-#include <string.h>
#include "version.h"
#include "pch.h"
-#include "scriptutility.h"
#include "rapidjson/document.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/writer.h"
#include "rapidjson/error/en.h"
-#include "exploitfixes.h"
-#include "scriptjson.h"
-typedef void (*initPluginFuncPtr)(void* (*getPluginObject)(PluginObject));
+#include <string.h>
+#include <filesystem>
-bool initialised = false;
+typedef void (*initPluginFuncPtr)(void* (*getPluginObject)(PluginObject));
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
@@ -72,18 +33,6 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserv
return TRUE;
}
-void WaitForDebugger(HMODULE baseAddress)
-{
- // earlier waitfordebugger call than is in vanilla, just so we can debug stuff a little easier
- if (CommandLine()->CheckParm("-waitfordebugger"))
- {
- spdlog::info("waiting for debugger...");
-
- while (!IsDebuggerPresent())
- Sleep(100);
- }
-}
-
void freeLibrary(HMODULE hLib)
{
if (!FreeLibrary(hLib))
@@ -190,15 +139,13 @@ bool LoadPlugins()
bool InitialiseNorthstar()
{
- if (initialised)
- {
- // spdlog::warn("Called InitialiseNorthstar more than once!"); // it's actually 100% fine for that to happen
+ static bool bInitialised = false;
+ if (bInitialised)
return false;
- }
- initialised = true;
+ bInitialised = true;
- parseConfigurables();
+ InitialiseNorthstarPrefix();
InitialiseVersion();
// Fix some users' failure to connect to respawn datacenters
@@ -206,6 +153,7 @@ bool InitialiseNorthstar()
curl_global_init_mem(CURL_GLOBAL_DEFAULT, _malloc_base, _free_base, _realloc_base, _strdup_base, _calloc_base);
+ InitialiseCrashHandler();
InitialiseLogging();
InstallInitialHooks();
CreateLogFiles();
@@ -213,94 +161,6 @@ bool InitialiseNorthstar()
// Write launcher version to log
spdlog::info("NorthstarLauncher version: {}", version);
- InitialiseInterfaceCreationHooks();
-
- AddDllLoadCallback("tier0.dll", InitialiseTier0GameUtilFunctions);
- AddDllLoadCallback("engine.dll", WaitForDebugger);
- AddDllLoadCallback("engine.dll", InitialiseEngineGameUtilFunctions);
- AddDllLoadCallback("server.dll", InitialiseServerGameUtilFunctions);
-
- // dedi patches
- {
- AddDllLoadCallbackForDedicatedServer("tier0.dll", InitialiseDedicatedOrigin);
- AddDllLoadCallbackForDedicatedServer("engine.dll", InitialiseDedicated);
- AddDllLoadCallbackForDedicatedServer("server.dll", InitialiseDedicatedServerGameDLL);
- AddDllLoadCallbackForDedicatedServer("materialsystem_dx11.dll", InitialiseDedicatedMaterialSystem);
- // this fucking sucks, but seemingly we somehow load after rtech_game???? unsure how, but because of this we have to apply patches
- // here, not on rtech_game load
- AddDllLoadCallbackForDedicatedServer("engine.dll", InitialiseDedicatedRtechGame);
- }
-
- AddDllLoadCallback("engine.dll", InitialiseConVars);
- AddDllLoadCallback("engine.dll", InitialiseConCommands);
-
- // client-exclusive patches
- {
-
- AddDllLoadCallbackForClient("tier0.dll", InitialiseTier0LanguageHooks);
- AddDllLoadCallbackForClient("client.dll", InitialiseClientSquirrel);
- AddDllLoadCallbackForClient("client.dll", InitialiseSourceConsole);
- AddDllLoadCallbackForClient("engine.dll", InitialiseChatCommands);
- AddDllLoadCallbackForClient("client.dll", InitialiseScriptModMenu);
- AddDllLoadCallbackForClient("client.dll", InitialiseScriptServerBrowser);
- AddDllLoadCallbackForClient("localize.dll", InitialiseModLocalisation);
- AddDllLoadCallbackForClient("engine.dll", InitialiseClientAuthHooks);
- AddDllLoadCallbackForClient("client.dll", InitialiseLatencyFleX);
- AddDllLoadCallbackForClient("engine.dll", InitialiseScriptExternalBrowserHooks);
- AddDllLoadCallbackForClient("client.dll", InitialiseScriptMainMenuPromos);
- AddDllLoadCallbackForClient("client.dll", InitialiseMiscClientFixes);
- AddDllLoadCallbackForClient("client.dll", InitialiseClientPrintHooks);
- AddDllLoadCallbackForClient("client.dll", InitialisePluginCommands);
- AddDllLoadCallbackForClient("client.dll", InitialiseClientChatHooks);
- AddDllLoadCallbackForClient("client.dll", InitialiseLocalChatWriter);
- AddDllLoadCallbackForClient("client.dll", InitialiseScriptServerToClientStringCommands);
- AddDllLoadCallbackForClient("engine.dll", InitialiseEngineClientVideoOverrides);
- AddDllLoadCallbackForClient("engine.dll", InitialiseEngineClientRUIHooks);
- AddDllLoadCallbackForClient("engine.dll", InitialiseDebugOverlay);
- AddDllLoadCallbackForClient("client.dll", InitialiseClientSquirrelJson);
- AddDllLoadCallbackForClient("client.dll", InitialiseClientSquirrelUtilityFunctions);
- // audio hooks
- AddDllLoadCallbackForClient("client.dll", InitialiseMilesAudioHooks);
- }
-
- AddDllLoadCallback("engine.dll", InitialiseEngineSpewFuncHooks);
- AddDllLoadCallback("server.dll", InitialiseServerSquirrel);
- AddDllLoadCallback("engine.dll", InitialiseBanSystem);
- AddDllLoadCallback("engine.dll", InitialiseServerAuthentication);
- AddDllLoadCallback("engine.dll", InitialiseSharedMasterServer);
- AddDllLoadCallback("server.dll", InitialiseMiscServerScriptCommand);
- AddDllLoadCallback("server.dll", InitialiseMiscServerFixes);
- AddDllLoadCallback("server.dll", InitialiseBuildAINFileHooks);
- AddDllLoadCallback("server.dll", InitialiseServerSquirrelUtilityFunctions);
- AddDllLoadCallback("server.dll", InitialiseServerSquirrelJson);
-
- AddDllLoadCallback("engine.dll", InitialisePlaylistHooks);
-
- AddDllLoadCallback("filesystem_stdio.dll", InitialiseFilesystem);
- AddDllLoadCallback("engine.dll", InitialiseEngineRpakFilesystem);
- AddDllLoadCallback("engine.dll", InitialiseKeyValues);
-
- AddDllLoadCallback("engine.dll", InitialiseServerChatHooks_Engine);
- AddDllLoadCallback("server.dll", InitialiseServerChatHooks_Server);
-
- // maxplayers increase
- AddDllLoadCallback("engine.dll", InitialiseMaxPlayersOverride_Engine);
- AddDllLoadCallback("client.dll", InitialiseMaxPlayersOverride_Client);
- AddDllLoadCallback("server.dll", InitialiseMaxPlayersOverride_Server);
-
- // mod manager after everything else
- AddDllLoadCallback("engine.dll", InitialiseModManager);
-
- {
- // activate multi-module exploitfixes callbacks
- constexpr const char* EXPLOITFIXES_MULTICALLBACK_MODS[] = {"client.dll", "engine.dll", "server.dll"};
- for (const char* mod : EXPLOITFIXES_MULTICALLBACK_MODS)
- AddDllLoadCallback(mod, ExploitFixes::LoadCallback_MultiModule);
-
- // activate exploit fixes later
- AddDllLoadCallback("server.dll", ExploitFixes::LoadCallback_Full);
- }
-
// run callbacks for any libraries that are already loaded by now
CallAllPendingDLLLoadCallbacks();