示例#1
0
    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);
    }
示例#2
0
 public static string PackageID(ZPackage package) => ByteArrayToString(package.GenerateHash()).Substring(0, 32).ToLower();
示例#3
0
        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);
        }