From 7ed6ad122ec210da0b911b8c0408e3c898d08fab Mon Sep 17 00:00:00 2001
From: Bob Da Ross <52760019+BobDaRoss@users.noreply.github.com>
Date: Mon, 10 May 2021 16:58:22 -0500
Subject: [PATCH] Fixed null values
---
SeamlessClient.cs | 1 +
SeamlessClientPlugin.csproj | 2 +-
SeamlessTransfer/PingServer.cs | 12 +++-------
{SeamlessTransfer => Utilities}/Patches.cs | 28 ++++++++++++++++++----
4 files changed, 29 insertions(+), 14 deletions(-)
rename {SeamlessTransfer => Utilities}/Patches.cs (93%)
diff --git a/SeamlessClient.cs b/SeamlessClient.cs
index b03818f..d416d18 100644
--- a/SeamlessClient.cs
+++ b/SeamlessClient.cs
@@ -122,6 +122,7 @@ namespace SeamlessClientPlugin
public void Init(object gameInstance)
{
+ Patches.GetPatches();
TryShow("Running Seamless Client Plugin v[" + Version + "]");
PingTimer.Elapsed += PingTimer_Elapsed;
PingTimer.Start();
diff --git a/SeamlessClientPlugin.csproj b/SeamlessClientPlugin.csproj
index b84a8a6..0f70936 100644
--- a/SeamlessClientPlugin.csproj
+++ b/SeamlessClientPlugin.csproj
@@ -164,7 +164,7 @@
-
+
diff --git a/SeamlessTransfer/PingServer.cs b/SeamlessTransfer/PingServer.cs
index d07f32f..2e2c224 100644
--- a/SeamlessTransfer/PingServer.cs
+++ b/SeamlessTransfer/PingServer.cs
@@ -20,6 +20,9 @@ namespace SeamlessClientPlugin.SeamlessTransfer
public static void StartServerPing(Transfer ClientTransfer)
{
// We need to first ping the server to make sure its running and so we can get a connection
+ Transfer = ClientTransfer;
+ Request = Transfer.WorldRequest;
+
if (Transfer.TargetServerID == 0)
{
@@ -27,18 +30,11 @@ namespace SeamlessClientPlugin.SeamlessTransfer
return;
}
- Transfer = ClientTransfer;
- Request = Transfer.WorldRequest;
-
-
SeamlessClient.TryShow("Beginning Redirect to server: " + Transfer.TargetServerID);
MyGameService.OnPingServerResponded += PingResponded;
MyGameService.OnPingServerFailedToRespond += FailedToRespond;
MyGameService.PingServer(Transfer.IPAdress);
-
-
-
}
private static void PingResponded(object sender, MyGameServerItem e)
@@ -56,9 +52,7 @@ namespace SeamlessClientPlugin.SeamlessTransfer
private static void FailedToRespond(object sender, EventArgs e)
{
// If the target server failed to respond, we need to exit/return to menu
-
UnRegisterEvents();
-
}
diff --git a/SeamlessTransfer/Patches.cs b/Utilities/Patches.cs
similarity index 93%
rename from SeamlessTransfer/Patches.cs
rename to Utilities/Patches.cs
index 5767e60..e1a88d4 100644
--- a/SeamlessTransfer/Patches.cs
+++ b/Utilities/Patches.cs
@@ -44,8 +44,8 @@ namespace SeamlessClientPlugin.SeamlessTransfer
- /* Static FieldInfos */
- public static FieldInfo MySessionLayer { get; private set; }
+ /* Static FieldInfos and PropertyInfos */
+ public static PropertyInfo MySessionLayer { get; private set; }
public static FieldInfo VirtualClients { get; private set; }
public static FieldInfo AdminSettings { get; private set; }
public static FieldInfo RemoteAdminSettings { get; private set; }
@@ -80,8 +80,8 @@ namespace SeamlessClientPlugin.SeamlessTransfer
MyMultiplayerClientBaseConstructor = GetConstructor(MyMultiplayerClientBase, BindingFlags.Instance | BindingFlags.NonPublic, new Type[] { typeof(MySyncLayer) });
- /* Get Fields */
- MySessionLayer = GetField(typeof(MySession), "SyncLayer", BindingFlags.Instance | BindingFlags.Public);
+ /* Get Fields and Properties */
+ MySessionLayer = GetProperty(typeof(MySession), "SyncLayer", BindingFlags.Instance | BindingFlags.Public);
VirtualClients = GetField(typeof(MySession), "VirtualClients", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
AdminSettings = GetField(typeof(MySession), "m_adminSettings", BindingFlags.Instance | BindingFlags.NonPublic);
RemoteAdminSettings = GetField(typeof(MySession), "m_remoteAdminSettings", BindingFlags.Instance | BindingFlags.NonPublic);
@@ -266,6 +266,26 @@ namespace SeamlessClientPlugin.SeamlessTransfer
}
+ private static PropertyInfo GetProperty(Type type, string PropertyName, BindingFlags Flags)
+ {
+ try
+ {
+ PropertyInfo FoundProperty = type.GetProperty(PropertyName, Flags);
+
+ if (FoundProperty == null)
+ throw new NullReferenceException($"Property for {PropertyName} is null!");
+
+
+ return FoundProperty;
+
+ }
+ catch (Exception Ex)
+ {
+ throw Ex;
+ }
+
+ }
+
private static ConstructorInfo GetConstructor(Type type, BindingFlags Flags, Type[] Types)
{