public static WorldPlayer Load(ZPackage pkg) { var worldPlayer = new WorldPlayer(); int num = pkg.ReadInt(); if (!ValheimVersion.IsPlayerVersionCompatible(num)) { return(null); } if (num >= 28) { worldPlayer.PlayerStats_kills = pkg.ReadInt(); worldPlayer.PlayerStats_deaths = pkg.ReadInt(); worldPlayer.PlayerStats_crafts = pkg.ReadInt(); worldPlayer.PlayerStats_builds = pkg.ReadInt(); } worldPlayer.WorldPlayerData.Clear(); int num2 = pkg.ReadInt(); for (int i = 0; i < num2; i++) { long key = pkg.ReadLong(); var worldPlayerData = new WorldPlayerData(); worldPlayerData.m_haveCustomSpawnPoint = pkg.ReadBool(); worldPlayerData.m_spawnPoint = pkg.ReadVector3(); worldPlayerData.m_haveLogoutPoint = pkg.ReadBool(); worldPlayerData.m_logoutPoint = pkg.ReadVector3(); if (num >= 30) { worldPlayerData.m_haveDeathPoint = pkg.ReadBool(); worldPlayerData.m_deathPoint = pkg.ReadVector3(); } worldPlayerData.m_homePoint = pkg.ReadVector3(); if (num >= 29 && pkg.ReadBool()) { worldPlayerData.m_mapData = pkg.ReadByteArray(); } worldPlayer.WorldPlayerData.Add(key, worldPlayerData); } worldPlayer.PlayerName = pkg.ReadString(); worldPlayer.PlayerId = pkg.ReadLong(); worldPlayer.StartSeed = pkg.ReadString(); if (pkg.ReadBool()) { var byteArray = pkg.ReadByteArray(); var playerPkg = new ZPackage(byteArray); worldPlayer.Player = PlayerReaderWriter.Load(playerPkg); } else { worldPlayer.Player = null; } return(worldPlayer); }
public static byte[] ToBytes(WorldPlayer worldPlayer) { ZPackage zpackage = new ZPackage(); zpackage.Write(ValheimVersion.m_playerVersion); zpackage.Write(worldPlayer.PlayerStats_kills); zpackage.Write(worldPlayer.PlayerStats_deaths); zpackage.Write(worldPlayer.PlayerStats_crafts); zpackage.Write(worldPlayer.PlayerStats_builds); zpackage.Write(worldPlayer.WorldPlayerData.Count); foreach (var keyValuePair in worldPlayer.WorldPlayerData) { zpackage.Write(keyValuePair.Key); zpackage.Write(keyValuePair.Value.m_haveCustomSpawnPoint); zpackage.Write(keyValuePair.Value.m_spawnPoint); zpackage.Write(keyValuePair.Value.m_haveLogoutPoint); zpackage.Write(keyValuePair.Value.m_logoutPoint); zpackage.Write(keyValuePair.Value.m_haveDeathPoint); zpackage.Write(keyValuePair.Value.m_deathPoint); zpackage.Write(keyValuePair.Value.m_homePoint); zpackage.Write(keyValuePair.Value.m_mapData != null); if (keyValuePair.Value.m_mapData != null) { zpackage.Write(keyValuePair.Value.m_mapData); } } zpackage.Write(worldPlayer.PlayerName); zpackage.Write(worldPlayer.PlayerId); zpackage.Write(worldPlayer.StartSeed); if (worldPlayer.Player != null) { var playerPkg = new ZPackage(); PlayerReaderWriter.Save(playerPkg, worldPlayer.Player); var playerData = playerPkg.GetArray(); zpackage.Write(true); zpackage.Write(playerData); } else { zpackage.Write(false); } byte[] array = zpackage.GenerateHash(); byte[] array2 = zpackage.GetArray(); var memStream = new MemoryStream(); BinaryWriter binaryWriter = new BinaryWriter(memStream); binaryWriter.Write(array2.Length); binaryWriter.Write(array2); binaryWriter.Write(array.Length); binaryWriter.Write(array); binaryWriter.Flush(); memStream.Flush(); var bytes = memStream.ToArray(); return(bytes); }