diff --git a/Torch.Server/Managers/MultiplayerManagerDedicated.cs b/Torch.Server/Managers/MultiplayerManagerDedicated.cs index f336f36..8a380c5 100644 --- a/Torch.Server/Managers/MultiplayerManagerDedicated.cs +++ b/Torch.Server/Managers/MultiplayerManagerDedicated.cs @@ -210,9 +210,8 @@ namespace Torch.Server.Managers private void ValidateAuthTicketResponse(ulong steamId, JoinResult response, ulong steamOwner) { var state = new MyP2PSessionState(); - //MySteamService.Static.Peer2Peer.GetSessionState(steamId, ref state); - //var ip = new IPAddress(BitConverter.GetBytes(state.RemoteIP).Reverse().ToArray()); - string ip = "Can't acquire IP because Keen did a stupid"; + MySteamServiceWrapper.Static.Peer2Peer.GetSessionState(steamId, ref state); + var ip = new IPAddress(BitConverter.GetBytes(state.RemoteIP).Reverse().ToArray()); Torch.CurrentSession.KeenSession.PromotedUsers.TryGetValue(steamId, out MyPromoteLevel promoteLevel); diff --git a/Torch/Commands/TorchCommands.cs b/Torch/Commands/TorchCommands.cs index 63c259d..52d52ed 100644 --- a/Torch/Commands/TorchCommands.cs +++ b/Torch/Commands/TorchCommands.cs @@ -37,14 +37,13 @@ namespace Torch.Commands [Permission(MyPromoteLevel.None)] public void GetIP(ulong steamId = 0) { - Context.Respond("Keen broke this command. Fix coming Soon(tm)"); - //if (steamId == 0) - // steamId = Context.Player.SteamUserId; - - //VRage.GameServices.MyP2PSessionState statehack = new VRage.GameServices.MyP2PSessionState(); - //VRage.Steam.MySteamService.Static.Peer2Peer.GetSessionState(steamId, ref statehack); - //var ip = new IPAddress(BitConverter.GetBytes(statehack.RemoteIP).Reverse().ToArray()); - //Context.Respond($"Your IP is {ip}"); + if (steamId == 0) + steamId = Context.Player.SteamUserId; + + VRage.GameServices.MyP2PSessionState statehack = new VRage.GameServices.MyP2PSessionState(); + MySteamServiceWrapper.Static.Peer2Peer.GetSessionState(steamId, ref statehack); + var ip = new IPAddress(BitConverter.GetBytes(statehack.RemoteIP).Reverse().ToArray()); + Context.Respond($"Your IP is {ip}"); } [Command("help", "Displays help for a command")] diff --git a/Torch/Managers/ChatManager/ChatManagerServer.cs b/Torch/Managers/ChatManager/ChatManagerServer.cs index 452e9e0..253d928 100644 --- a/Torch/Managers/ChatManager/ChatManagerServer.cs +++ b/Torch/Managers/ChatManager/ChatManagerServer.cs @@ -22,7 +22,7 @@ using VRage.Network; namespace Torch.Managers.ChatManager { - //[PatchShim] + [PatchShim] internal static class ChatInterceptPatch { private static ChatManagerServer _chatManager; @@ -30,7 +30,7 @@ namespace Torch.Managers.ChatManager internal static void Patch(PatchContext context) { - var target = typeof(MyMultiplayerBase).GetMethod("OnChatMessageRecieved_Server", BindingFlags.Static | BindingFlags.NonPublic); + var target = typeof(MyMultiplayerBase).GetMethod("OnChatMessageReceived_Server", BindingFlags.Static | BindingFlags.NonPublic); var patchMethod = typeof(ChatInterceptPatch).GetMethod(nameof(PrefixMessageProcessing), BindingFlags.Static | BindingFlags.NonPublic); context.GetPattern(target).Prefixes.Add(patchMethod); } diff --git a/Torch/MySteamServiceWrapper.cs b/Torch/MySteamServiceWrapper.cs new file mode 100644 index 0000000..c1ba92f --- /dev/null +++ b/Torch/MySteamServiceWrapper.cs @@ -0,0 +1,24 @@ +using System; +using System.Reflection; +using System.Windows.Data; +using VRage.GameServices; + +namespace Torch +{ + /// + /// Provides static accessor for MySteamService because Keen made it internal + /// + public class MySteamServiceWrapper + { + private static readonly MethodInfo _getGameService; + + public static IMyGameService Static => (IMyGameService)_getGameService.Invoke(null, null); + + static MySteamServiceWrapper() + { + var type = Type.GetType("VRage.Steam.MySteamService, VRage.Steam"); + var prop = type.GetProperty("Static", BindingFlags.Static | BindingFlags.Public); + _getGameService = prop.GetGetMethod(); + } + } +} \ No newline at end of file diff --git a/Torch/Torch.csproj b/Torch/Torch.csproj index 54ca7d7..c25afce 100644 --- a/Torch/Torch.csproj +++ b/Torch/Torch.csproj @@ -241,6 +241,7 @@ + diff --git a/Torch/VRageGame.cs b/Torch/VRageGame.cs index e5c06a3..7d45453 100644 --- a/Torch/VRageGame.cs +++ b/Torch/VRageGame.cs @@ -25,6 +25,7 @@ using SpaceEngineers.Game.GUI; using Torch.Utils; using VRage; using VRage.Audio; +using VRage.Dedicated; using VRage.FileSystem; using VRage.Game; using VRage.Game.ObjectBuilder; @@ -137,8 +138,11 @@ namespace Torch bool dedicated = Sandbox.Engine.Platform.Game.IsDedicated; Environment.SetEnvironmentVariable("SteamAppId", _appSteamId.ToString()); //KEEN WHY - var service = Activator.CreateInstance(Type.GetType("VRage.Steam.MySteamService, VRage.Steam"), new object[] {dedicated, _appSteamId}); - MyServiceManager.Instance.AddService((IMyGameService)service); + Activator.CreateInstance(Type.GetType("VRage.Steam.MySteamService, VRage.Steam"), new object[] {dedicated, _appSteamId}); + var service = MySteamServiceWrapper.Static; + MyServiceManager.Instance.AddService(service); + var serviceInstance = MySteamUgcService.Create(MyPerServerSettings.AppId, service); + MyServiceManager.Instance.AddService(serviceInstance); if (dedicated && !MyGameService.HasGameServer) { _log.Warn("Steam service is not running! Please reinstall dedicated server.");