Removed the need to ping the target server first. May reduce load times for high latency people

This commit is contained in:
Bob Da Ross
2021-06-16 23:45:12 -05:00
parent e9cac15a3a
commit 1a1a47d07a
5 changed files with 50 additions and 38 deletions

View File

@@ -30,6 +30,7 @@ namespace SeamlessClientPlugin.SeamlessTransfer
public static readonly Type VirtualClientsType = Type.GetType("Sandbox.Engine.Multiplayer.MyVirtualClients, Sandbox.Game");
public static readonly Type GUIScreenChat = Type.GetType("Sandbox.Game.Gui.MyGuiScreenChat, Sandbox.Game");
public static readonly Type MyMultiplayerClientBase = Type.GetType("Sandbox.Engine.Multiplayer.MyMultiplayerClientBase, Sandbox.Game");
public static readonly Type MySteamServerDiscovery = Type.GetType("VRage.Steam.MySteamServerDiscovery, Vrage.Steam");
/* Harmony Patcher */
private static Harmony Patcher = new Harmony("SeamlessClientPatcher");
@@ -58,6 +59,8 @@ namespace SeamlessClientPlugin.SeamlessTransfer
public static MethodInfo LoadMembersFromWorld { get; private set; }
public static MethodInfo LoadMultiplayer { get; private set; }
public static MethodInfo SendPlayerData;
public static event EventHandler<JoinResultMsg> OnJoinEvent;
@@ -97,9 +100,9 @@ namespace SeamlessClientPlugin.SeamlessTransfer
LoadPlayerInternal = GetMethod(typeof(MyPlayerCollection), "LoadPlayerInternal", BindingFlags.Instance | BindingFlags.NonPublic);
LoadMembersFromWorld = GetMethod(typeof(MySession), "LoadMembersFromWorld", BindingFlags.NonPublic | BindingFlags.Instance);
LoadMultiplayer = GetMethod(typeof(MySession), "LoadMultiplayer", BindingFlags.Static | BindingFlags.NonPublic);
SendPlayerData = GetMethod(ClientType, "SendPlayerData", BindingFlags.Instance | BindingFlags.NonPublic);
MethodInfo ConnectToServer = GetMethod(typeof(MyGameService), "ConnectToServer", BindingFlags.Static | BindingFlags.Public);
@@ -108,6 +111,7 @@ namespace SeamlessClientPlugin.SeamlessTransfer
Patcher.Patch(OnJoin, postfix: new HarmonyMethod(GetPatchMethod(nameof(OnUserJoined))));
Patcher.Patch(LoadingAction, prefix: new HarmonyMethod(GetPatchMethod(nameof(LoadMultiplayerSession))));
//Patcher.Patch(ConnectToServer, prefix: new HarmonyMethod(GetPatchMethod(nameof(OnConnectToServer))));
}
private static MethodInfo GetPatchMethod(string v)
@@ -222,6 +226,15 @@ namespace SeamlessClientPlugin.SeamlessTransfer
}
}
private static bool OnConnectToServer(MyGameServerItem server, Action<JoinResult> onDone)
{
if (SeamlessClient.IsSwitching)
return false;
return true;
}