fixes for nexus v3
Some checks failed
Build / Compute Version (push) Successful in 6s
Build / Build Nuget package (push) Failing after 6s

This commit is contained in:
zznty
2025-07-28 03:58:25 +07:00
parent 32ae6569a8
commit aa323f1ff6
17 changed files with 1766 additions and 2392 deletions

View File

@@ -1,77 +1,67 @@
using ProtoBuf;
using Sandbox.Engine.Networking;
using Sandbox.Game.World;
using Sandbox.ModAPI;
using SeamlessClientPlugin.SeamlessTransfer;
using SeamlessClientPlugin.Utilities;
using System.Collections.Generic;
namespace SeamlessClientPlugin.Messages
namespace SeamlessClientPlugin.Messages;
public enum ClientMessageType
{
public enum ClientMessageType
{
FirstJoin,
TransferServer,
OnlinePlayers,
}
[ProtoContract]
public class ClientMessage
{
[ProtoMember(1)]
public ClientMessageType MessageType;
[ProtoMember(2)]
public byte[] MessageData;
[ProtoMember(3)]
public long IdentityID;
[ProtoMember(4)]
public ulong SteamID;
[ProtoMember(5)]
public string PluginVersion = "0";
public ClientMessage(ClientMessageType Type)
{
MessageType = Type;
if (MyAPIGateway.Multiplayer != null && !MyAPIGateway.Multiplayer.IsServer)
{
if (MyAPIGateway.Session.LocalHumanPlayer == null)
{
return;
}
IdentityID = MySession.Static?.LocalHumanPlayer?.Identity?.IdentityId ?? 0;
SteamID = MySession.Static?.LocalHumanPlayer?.Id.SteamId ?? 0;
PluginVersion = SeamlessClient.Version;
}
}
public ClientMessage() { }
public void SerializeData<T>(T Data)
{
MessageData = Utility.Serialize(Data);
}
public Transfer GetTransferData()
{
if (MessageData == null)
return default(Transfer);
return Utility.Deserialize<Transfer>(MessageData);
}
public OnlinePlayersMessage GetOnlinePlayers()
{
if (MessageData == null)
return default(OnlinePlayersMessage);
OnlinePlayersMessage msg = Utility.Deserialize<OnlinePlayersMessage>(MessageData);
return msg;
}
}
FirstJoin,
TransferServer,
OnlinePlayers
}
[ProtoContract]
public class ClientMessage
{
[ProtoMember(1)] public ClientMessageType MessageType;
[ProtoMember(2)] public byte[] MessageData;
[ProtoMember(3)] public long IdentityId;
[ProtoMember(4)] public ulong SteamId;
[ProtoMember(5)] public string PluginVersion = "0";
[ProtoMember(6)] public string NexusVersion;
public ClientMessage(ClientMessageType type)
{
MessageType = type;
IdentityId = MySession.Static?.LocalHumanPlayer?.Identity?.IdentityId ?? 0;
SteamId = MyGameService.UserId;
PluginVersion = SeamlessClient.Version;
}
public ClientMessage()
{
}
public void SerializeData<T>(T data)
{
MessageData = Utility.Serialize(data);
}
public Transfer GetTransferData()
{
if (MessageData == null)
return null;
return Utility.Deserialize<Transfer>(MessageData);
}
public OnlinePlayersMessage GetOnlinePlayers()
{
if (MessageData == null)
return null;
var msg = Utility.Deserialize<OnlinePlayersMessage>(MessageData);
return msg;
}
}

View File

@@ -1,73 +1,48 @@
using ProtoBuf;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SeamlessClientPlugin.Messages
namespace SeamlessClientPlugin.Messages;
[ProtoContract]
public class OnlinePlayersMessage
{
[ProtoMember(12)] public int CurrentServerId;
[ProtoContract]
public class OnlinePlayersMessage
{
[ProtoMember(10)]
public List<OnlineServer> OnlineServers = new List<OnlineServer>();
[ProtoMember(12)]
public int currentServerID;
}
[ProtoContract]
public class OnlineServer
{
[ProtoMember(2)]
public List<OnlinePlayer> Players = new List<OnlinePlayer>();
[ProtoMember(3)]
public bool ServerRunning = false;
[ProtoMember(10)]
public int ServerID;
[ProtoMember(11)]
public string ServerName;
public OnlineServer() { }
}
[ProtoContract]
public class OnlinePlayer
{
[ProtoMember(1)]
public string PlayerName;
[ProtoMember(2)]
public ulong SteamID;
[ProtoMember(3)]
public long IdentityID;
[ProtoMember(4)]
public int OnServer;
public OnlinePlayer(string PlayerName, ulong SteamID, long IdentityID, int OnServer)
{
this.PlayerName = PlayerName;
this.SteamID = SteamID;
this.IdentityID = IdentityID;
this.OnServer = OnServer;
}
public OnlinePlayer() { }
}
[ProtoMember(10)] public List<OnlineServer> OnlineServers = [];
}
[ProtoContract]
public class OnlineServer
{
[ProtoMember(2)] public List<OnlinePlayer> Players = [];
[ProtoMember(10)] public int ServerId;
[ProtoMember(11)] public string ServerName;
[ProtoMember(3)] public bool ServerRunning = false;
}
[ProtoContract]
public class OnlinePlayer
{
[ProtoMember(3)] public long IdentityId;
[ProtoMember(4)] public int OnServer;
[ProtoMember(1)] public string PlayerName;
[ProtoMember(2)] public ulong SteamId;
public OnlinePlayer(string playerName, ulong steamId, long identityId, int onServer)
{
this.PlayerName = playerName;
this.SteamId = steamId;
this.IdentityId = identityId;
this.OnServer = onServer;
}
public OnlinePlayer()
{
}
}

View File

@@ -1,63 +1,33 @@
using ProtoBuf;
using Sandbox;
using Sandbox.Engine.Multiplayer;
using Sandbox.Engine.Networking;
using Sandbox.Game.Entities;
using Sandbox.Game.Gui;
using Sandbox.Game.Multiplayer;
using Sandbox.Game.World;
using Sandbox.Graphics.GUI;
using Sandbox.ModAPI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using VRage;
using VRage.Game;
using VRage.GameServices;
using VRage.Network;
using VRage.Steam;
using VRage.Utils;
using VRageMath;
namespace SeamlessClientPlugin.Messages
namespace SeamlessClientPlugin.Messages;
[ProtoContract]
public class Transfer
{
[ProtoMember(2)] public string IpAdress;
[ProtoContract]
public class Transfer
[ProtoMember(7)] public string PlayerName;
[ProtoMember(9)] public MyObjectBuilder_Toolbar PlayerToolbar;
[ProtoMember(10)] public string ServerName;
[ProtoMember(1)] public ulong TargetServerId;
[ProtoMember(6)] public WorldRequest WorldRequest;
public Transfer(ulong serverId, string ipAdress)
{
[ProtoMember(1)]
public ulong TargetServerID;
[ProtoMember(2)]
public string IPAdress;
[ProtoMember(6)]
public WorldRequest WorldRequest;
[ProtoMember(7)]
public string PlayerName;
[ProtoMember(9)]
public MyObjectBuilder_Toolbar PlayerToolbar;
[ProtoMember(10)]
public string ServerName;
public Transfer(ulong ServerID, string IPAdress)
{
/* This is only called serverside
*/
this.IPAdress = IPAdress;
TargetServerID = ServerID;
}
public Transfer() { }
/* This is only called serverside
*/
this.IpAdress = ipAdress;
TargetServerId = serverId;
}
}
public Transfer()
{
}
}

View File

@@ -1,72 +1,55 @@
using NLog;
using System.Reflection;
using NLog;
using ProtoBuf;
using Sandbox.Engine.Multiplayer;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using VRage.Game;
using VRage.ObjectBuilders;
using VRage.ObjectBuilders.Private;
namespace SeamlessClientPlugin.Messages
namespace SeamlessClientPlugin.Messages;
[ProtoContract]
public class WorldRequest
{
[ProtoContract]
public class WorldRequest
private static readonly Logger Log = LogManager.GetCurrentClassLogger();
[ProtoMember(5)] public MyObjectBuilder_Gps GpsCollection;
[ProtoMember(2)] public long IdentityId;
[ProtoMember(1)] public ulong PlayerId;
[ProtoMember(3)] public string PlayerName;
[ProtoMember(4)] public byte[] WorldData;
public WorldRequest(ulong playerId, long playerIdentity, string name)
{
private static readonly Logger Log = LogManager.GetCurrentClassLogger();
[ProtoMember(1)]
public ulong PlayerID;
[ProtoMember(2)]
public long IdentityID;
[ProtoMember(3)]
public string PlayerName;
[ProtoMember(4)]
public byte[] WorldData;
[ProtoMember(5)]
public MyObjectBuilder_Gps gpsCollection;
public WorldRequest(ulong PlayerID,long PlayerIdentity, string Name)
{
this.PlayerID = PlayerID;
this.PlayerName = Name;
this.IdentityID = PlayerIdentity;
}
public WorldRequest() { }
public void SerializeWorldData(MyObjectBuilder_World WorldData)
{
MethodInfo CleanupData = typeof(MyMultiplayerServerBase).GetMethod("CleanUpData", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[3]
{
typeof(MyObjectBuilder_World),
typeof(ulong),
typeof(long),
}, null);
object[] Data = new object[] { WorldData, PlayerID, IdentityID };
CleanupData.Invoke(null, Data);
WorldData = (MyObjectBuilder_World)Data[0];
using (MemoryStream memoryStream = new MemoryStream())
{
MyObjectBuilderSerializer.SerializeXML(memoryStream, WorldData, MyObjectBuilderSerializer.XmlCompression.Gzip);
this.WorldData = memoryStream.ToArray();
Log.Warn("Successfully Converted World");
}
}
public MyObjectBuilder_World DeserializeWorldData()
{
MyObjectBuilderSerializer.DeserializeGZippedXML<MyObjectBuilder_World>(new MemoryStream(WorldData), out var objectBuilder);
objectBuilder.Checkpoint.Gps.Dictionary.Add(IdentityID, gpsCollection);
return objectBuilder;
}
this.PlayerId = playerId;
PlayerName = name;
IdentityId = playerIdentity;
}
}
public WorldRequest()
{
}
public void SerializeWorldData(MyObjectBuilder_World worldData)
{
MyMultiplayerServerBase.CleanUpData(worldData, PlayerId, IdentityId);
using var memoryStream = new MemoryStream();
MyObjectBuilderSerializerKeen.SerializeXML(memoryStream, worldData,
MyObjectBuilderSerializerKeen.XmlCompression.Gzip);
WorldData = memoryStream.ToArray();
Log.Warn("Successfully Converted World");
}
public MyObjectBuilder_World DeserializeWorldData()
{
MyObjectBuilderSerializerKeen.DeserializeGZippedXML<MyObjectBuilder_World>(new MemoryStream(WorldData),
out var objectBuilder);
objectBuilder.Checkpoint.Gps.Dictionary.Add(IdentityId, GpsCollection);
return objectBuilder;
}
}