private bool SavePlayerToDisk() { Directory.CreateDirectory(Utils.GetSaveDataPath() + "/characters"); string str1 = Utils.GetSaveDataPath() + "/characters/" + this.m_filename + ".fch"; string str2 = Utils.GetSaveDataPath() + "/characters/" + this.m_filename + ".fch.old"; string str3 = Utils.GetSaveDataPath() + "/characters/" + this.m_filename + ".fch.new"; ZPackage zpackage = new ZPackage(); zpackage.Write(Version.m_playerVersion); zpackage.Write(this.m_playerStats.m_kills); zpackage.Write(this.m_playerStats.m_deaths); zpackage.Write(this.m_playerStats.m_crafts); zpackage.Write(this.m_playerStats.m_builds); zpackage.Write(this.m_worldData.Count); foreach (KeyValuePair <long, PlayerProfile.WorldPlayerData> keyValuePair in this.m_worldData) { 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(this.m_playerName); zpackage.Write(this.m_playerID); zpackage.Write(this.m_startSeed); if (this.m_playerData != null) { zpackage.Write(true); zpackage.Write(this.m_playerData); } else { zpackage.Write(false); } byte[] hash = zpackage.GenerateHash(); byte[] array = zpackage.GetArray(); FileStream fileStream = File.Create(str3); BinaryWriter binaryWriter = new BinaryWriter((Stream)fileStream); binaryWriter.Write(array.Length); binaryWriter.Write(array); binaryWriter.Write(hash.Length); binaryWriter.Write(hash); binaryWriter.Flush(); fileStream.Flush(true); fileStream.Close(); fileStream.Dispose(); if (File.Exists(str1)) { if (File.Exists(str2)) { File.Delete(str2); } File.Move(str1, str2); } File.Move(str3, str1); return(true); }
public static string PackageID(ZPackage package) => ByteArrayToString(package.GenerateHash()).Substring(0, 32).ToLower();
public bool SaveToDisk(long worldId, byte[] mergedMap) { try { ZPackage zPackage = new ZPackage(); zPackage.Write(m_version); zPackage.Write(m_playerStats.m_kills); zPackage.Write(m_playerStats.m_deaths); zPackage.Write(m_playerStats.m_crafts); zPackage.Write(m_playerStats.m_builds); zPackage.Write(m_worldData.Count); foreach (KeyValuePair <long, WorldPlayerData> current in m_worldData) { zPackage.Write(current.Key); zPackage.Write(current.Value.m_haveCustomSpawnPoint); zPackage.Write(current.Value.m_spawnPoint); zPackage.Write(current.Value.m_haveLogoutPoint); zPackage.Write(current.Value.m_logoutPoint); zPackage.Write(current.Value.m_haveDeathPoint); zPackage.Write(current.Value.m_deathPoint); zPackage.Write(current.Value.m_homePoint); zPackage.Write(current.Value.m_mapData != null); if (current.Value.m_mapData != null) { if (current.Key == worldId) { zPackage.Write(mergedMap); } else { zPackage.Write(current.Value.m_mapData); } } } zPackage.Write(m_playerName); zPackage.Write(m_playerID); zPackage.Write(m_startSeed); if (m_playerData != null) { zPackage.Write(true); zPackage.Write(m_playerData); } else { zPackage.Write(false); } byte[] array = zPackage.GenerateHash(); byte[] array2 = zPackage.GetArray(); Directory.CreateDirectory("merge"); FileStream expr_221 = File.Create($"merge/{m_filename}"); BinaryWriter expr_227 = new BinaryWriter(expr_221); expr_227.Write(array2.Length); expr_227.Write(array2); expr_227.Write(array.Length); expr_227.Write(array); expr_227.Flush(); expr_221.Flush(true); expr_221.Close(); expr_221.Dispose(); return(true); } catch (Exception ex) { return(false); } }
public bool MergeToDisk(long worldId, List <PlayerProfile> profiles) { try { ZPackage zPackage = new ZPackage(); zPackage.Write(m_version); zPackage.Write(m_playerStats.m_kills); zPackage.Write(m_playerStats.m_deaths); zPackage.Write(m_playerStats.m_crafts); zPackage.Write(m_playerStats.m_builds); zPackage.Write(m_worldData.Count); foreach (KeyValuePair <long, WorldPlayerData> current in m_worldData) { zPackage.Write(current.Key); zPackage.Write(current.Value.m_haveCustomSpawnPoint); zPackage.Write(current.Value.m_spawnPoint); zPackage.Write(current.Value.m_haveLogoutPoint); zPackage.Write(current.Value.m_logoutPoint); zPackage.Write(current.Value.m_haveDeathPoint); zPackage.Write(current.Value.m_deathPoint); zPackage.Write(current.Value.m_homePoint); zPackage.Write(current.Value.m_mapData != null); if (current.Value.m_mapData != null) { if (current.Key == worldId) { for (int i = 8; i < (2048 * 2048); i++) { bool bVal = Convert.ToBoolean(current.Value.m_mapData[i]); foreach (var p in profiles) { if (p == this) { continue; } bVal = bVal || Convert.ToBoolean(p.m_worldData[current.Key].m_mapData[i]); } current.Value.m_mapData[i] = Convert.ToByte(bVal); } } zPackage.Write(current.Value.m_mapData); } } zPackage.Write(m_playerName); zPackage.Write(m_playerID); zPackage.Write(m_startSeed); if (m_playerData != null) { zPackage.Write(true); zPackage.Write(m_playerData); } else { zPackage.Write(false); } byte[] array = zPackage.GenerateHash(); byte[] array2 = zPackage.GetArray(); Directory.CreateDirectory("merge"); FileStream expr_221 = File.Create($"merge/{m_filename}"); BinaryWriter expr_227 = new BinaryWriter(expr_221); expr_227.Write(array2.Length); expr_227.Write(array2); expr_227.Write(array.Length); expr_227.Write(array); expr_227.Flush(); expr_221.Flush(true); expr_221.Close(); expr_221.Dispose(); return(true); } catch (Exception ex) { return(false); } }
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); }