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) {