55 lines
1.5 KiB
C#
55 lines
1.5 KiB
C#
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<MyObjectBuilder_World>(new MemoryStream(WorldData),
|
|
out var objectBuilder);
|
|
objectBuilder.Checkpoint.Gps.Dictionary.Add(IdentityId, GpsCollection);
|
|
|
|
|
|
return objectBuilder;
|
|
}
|
|
} |