using System.Reflection; using NLog; using ProtoBuf; using Sandbox.Engine.Multiplayer; using VRage.Game; using VRage.ObjectBuilders.Private; namespace SeamlessClientPlugin.Messages; [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) { 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(new MemoryStream(WorldData), out var objectBuilder); objectBuilder.Checkpoint.Gps.Dictionary.Add(IdentityId, GpsCollection); return objectBuilder; } }