From 682a00eaac30139929b1bb179ae7f4aa1a038572 Mon Sep 17 00:00:00 2001
From: BobTheBob <32057864+BobTheBob9@users.noreply.github.com>
Date: Sat, 18 Dec 2021 17:00:31 +0000
Subject: attempting to fix a client crash
---
.../NorthstarDedicatedTest.vcxproj | 2 ++
.../NorthstarDedicatedTest.vcxproj.filters | 6 ++++
NorthstarDedicatedTest/dllmain.cpp | 2 ++
NorthstarDedicatedTest/miscclientfixes.cpp | 40 ++++++++++++++++++++++
NorthstarDedicatedTest/miscclientfixes.h | 2 ++
5 files changed, 52 insertions(+)
create mode 100644 NorthstarDedicatedTest/miscclientfixes.cpp
create mode 100644 NorthstarDedicatedTest/miscclientfixes.h
diff --git a/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj b/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj
index 2e7053ea..be96b515 100644
--- a/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj
+++ b/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj
@@ -317,6 +317,7 @@
+
@@ -351,6 +352,7 @@
+
diff --git a/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj.filters b/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj.filters
index f1856a7c..76a7f754 100644
--- a/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj.filters
+++ b/NorthstarDedicatedTest/NorthstarDedicatedTest.vcxproj.filters
@@ -591,6 +591,9 @@
Header Files\Client
+
+ Header Files\Client
+
@@ -695,6 +698,9 @@
Source Files\Client
+
+ Source Files\Client
+
diff --git a/NorthstarDedicatedTest/dllmain.cpp b/NorthstarDedicatedTest/dllmain.cpp
index f0265f67..212b5711 100644
--- a/NorthstarDedicatedTest/dllmain.cpp
+++ b/NorthstarDedicatedTest/dllmain.cpp
@@ -23,6 +23,7 @@
#include "clientauthhooks.h"
#include "scriptbrowserhooks.h"
#include "scriptmainmenupromos.h"
+#include "miscclientfixes.h"
#include "memalloc.h"
bool initialised = false;
@@ -102,6 +103,7 @@ void InitialiseNorthstar()
AddDllLoadCallback("engine.dll", InitialiseClientAuthHooks);
AddDllLoadCallback("engine.dll", InitialiseScriptExternalBrowserHooks);
AddDllLoadCallback("client.dll", InitialiseScriptMainMenuPromos);
+ AddDllLoadCallback("client.dll", InitialiseMiscClientFixes);
}
AddDllLoadCallback("server.dll", InitialiseServerSquirrel);
diff --git a/NorthstarDedicatedTest/miscclientfixes.cpp b/NorthstarDedicatedTest/miscclientfixes.cpp
new file mode 100644
index 00000000..d9fab647
--- /dev/null
+++ b/NorthstarDedicatedTest/miscclientfixes.cpp
@@ -0,0 +1,40 @@
+#include "pch.h"
+#include "miscclientfixes.h"
+#include "hookutils.h"
+#include "dedicated.h"
+
+typedef void*(*CrashingWeaponActivityFuncType)(void* a1);
+CrashingWeaponActivityFuncType CrashingWeaponActivityFunc0;
+CrashingWeaponActivityFuncType CrashingWeaponActivityFunc1;
+
+void* CrashingWeaponActivityFunc0Hook(void* a1)
+{
+ // this return is safe, other functions that use this value seemingly dont care about it being null
+ if (!a1)
+ return 0;
+
+ return CrashingWeaponActivityFunc0(a1);
+}
+
+void* CrashingWeaponActivityFunc1Hook(void* a1)
+{
+ // this return is safe, other functions that use this value seemingly dont care about it being null
+ if (!a1)
+ return 0;
+
+ return CrashingWeaponActivityFunc1(a1);
+}
+
+void InitialiseMiscClientFixes(HMODULE baseAddress)
+{
+ if (IsDedicated())
+ return;
+
+ HookEnabler hook;
+
+ // these functions will occasionally pass a null pointer on respawn, unsure what causes this but seems easiest just to return null if null, which seems to work fine
+ // fucking sucks this has to be fixed like this but unsure what exactly causes this serverside, breaks vanilla compatibility to a degree tho
+ // will say i have about 0 clue what exactly these functions do, testing this it doesn't even seem like they do much of anything i can see tbh
+ ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x5A92D0, &CrashingWeaponActivityFunc0Hook, reinterpret_cast(&CrashingWeaponActivityFunc0));
+ ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x5A9310, &CrashingWeaponActivityFunc1Hook, reinterpret_cast(&CrashingWeaponActivityFunc1));
+}
\ No newline at end of file
diff --git a/NorthstarDedicatedTest/miscclientfixes.h b/NorthstarDedicatedTest/miscclientfixes.h
new file mode 100644
index 00000000..1f0ad807
--- /dev/null
+++ b/NorthstarDedicatedTest/miscclientfixes.h
@@ -0,0 +1,2 @@
+#pragma once
+void InitialiseMiscClientFixes(HMODULE baseAddress);
\ No newline at end of file
--
cgit v1.2.3