Add MySteamService wrapper, add UGC service to init, fix chat intercept

This commit is contained in:
John Gross
2019-10-24 14:35:06 -07:00
parent ef2be78102
commit 52ef0b4d6d
6 changed files with 42 additions and 15 deletions

View File

@@ -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);

View File

@@ -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")]

View File

@@ -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);
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Reflection;
using System.Windows.Data;
using VRage.GameServices;
namespace Torch
{
/// <summary>
/// Provides static accessor for MySteamService because Keen made it internal
/// </summary>
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();
}
}
}

View File

@@ -241,6 +241,7 @@
<Compile Include="Managers\PatchManager\Transpile\LoggingILGenerator.cs" />
<Compile Include="Managers\PatchManager\Transpile\MethodContext.cs" />
<Compile Include="Managers\PatchManager\Transpile\MethodTranspiler.cs" />
<Compile Include="MySteamServiceWrapper.cs" />
<Compile Include="Patches\GameAnalyticsPatch.cs" />
<Compile Include="Patches\GameStatePatchShim.cs" />
<Compile Include="Patches\ObjectFactoryInitPatch.cs" />

View File

@@ -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>((IMyGameService)service);
Activator.CreateInstance(Type.GetType("VRage.Steam.MySteamService, VRage.Steam"), new object[] {dedicated, _appSteamId});
var service = MySteamServiceWrapper.Static;
MyServiceManager.Instance.AddService<IMyGameService>(service);
var serviceInstance = MySteamUgcService.Create(MyPerServerSettings.AppId, service);
MyServiceManager.Instance.AddService<IMyUGCService>(serviceInstance);
if (dedicated && !MyGameService.HasGameServer)
{
_log.Warn("Steam service is not running! Please reinstall dedicated server.");