Ejemplo n.º 1
0
        /// <summary>
        /// Writes a save to a folder. The save name is generated based on the save number stored by
        /// this save.
        /// </summary>
        /// <param name="saveDirectory"></param>
        public void Write(string saveDirectory)
        {
            // The output file is indicated by the save number.
            var writer = new BinaryWriter(File.Create(Path.Combine(saveDirectory, SaveFileName)));

            //BinaryWriter writer = new BinaryWriter(stream);

            // Firstly, write the header.
            writer.Write(Header);

            Details.Write(writer);

            // Now the skills.
            writer.Write(Proficiencies.ActiveCount + Skills.ActiveCount);
            Proficiencies.WriteAllProficiencies(writer);
            Skills.WriteAllSkills(writer);

            // Some unknown stuff.
            writer.Write(Vehicle1Color);
            writer.Write(Vehicle2Color);
            writer.Write(UnknownVariable4);
            writer.Write(UnknownVariable5);

            // Ammo.
            writer.Write(Ammo.Count);
            foreach (var ammo in Ammo)
            {
                ammo.Value.Write(writer);
            }

            // Items.
            writer.Write(Items.Count);
            foreach (var item in Items)
            {
                item.Write(writer);
            }

            writer.Write(BackpackSlots);
            writer.Write(WeaponSlots);

            // Weapons.
            writer.Write(Weapons.Count);
            foreach (var weapon in Weapons)
            {
                weapon.Write(writer);
            }

            // Stats.
            StatTable.Write(writer);

            // Visited locations.
            writer.Write(LocationsVisited.Count);
            foreach (var location in LocationsVisited)
            {
                writer.BL_WriteString(location.InternalName());
            }

            writer.BL_WriteString(CurrentLocation.InternalName());

            writer.Write(UnknownVariable6);
            writer.Write(UnknownVariable7);
            writer.BL_WriteString(UnknownVariable8);
            writer.Write(UnknownVariable9);
            writer.Write(UnknownVariable10);
            writer.Write(SaveNumber);
            writer.Write(UnknownVariable12);
            writer.Write(0u);

            // Playthroughs.
            writer.Write(Playthroughs.Count);
            foreach (var playthrough in Playthroughs)
            {
                writer.Write(playthrough.Number);
                writer.BL_WriteString(playthrough.ActiveMissionName);
                writer.Write(playthrough.FoundMissionsCount);
                foreach (var mission in playthrough.Missions)
                {
                    if (mission.Value.Status != Mission.MissionStatus.Unknown)
                    {
                        writer.BL_WriteString(mission.Value.InternalName);
                        writer.Write(mission.Value.MissionStatusFlag);
                        writer.Write(mission.Value.UnknownVariable2);
                        writer.Write(mission.Value.UnknownVariable3);
                        writer.Write(mission.Value.Details.Count);
                        foreach (var detail in mission.Value.Details)
                        {
                            writer.BL_WriteString(detail.UnknownString);
                            writer.Write(detail.UnknownVariable);
                        }
                    }
                }
            }

            writer.Write(PlayTimeSeconds);
            writer.BL_WriteString(SaveTimeString);
            writer.BL_WriteString(Name);
            writer.Write(Color1ARGB);
            writer.Write(Color2ARGB);
            writer.Write(Color3ARGB);

            writer.Write(UnknownVariable14);
            writer.Write(UnknownVariable15.Count);
            foreach (Int32 x in UnknownVariable15)
            {
                writer.Write(x);
            }
            writer.Write(UnknownVariable16.Count);
            foreach (Int32 x in UnknownVariable16)
            {
                writer.Write(x);
            }

            // Echo
            writer.Write(EchoPlaythroughs.Count);
            foreach (var echoPlaythrough in EchoPlaythroughs)
            {
                writer.Write(echoPlaythrough.Playthrough);
                writer.Write(echoPlaythrough.Echoes.Count);
                foreach (var echo in echoPlaythrough.Echoes)
                {
                    writer.BL_WriteString(echo.InternalName);
                    writer.Write(echo.UnknownVariable1);
                    writer.Write(echo.UnknownVariable2);
                }
            }

            writer.Write(UnknownVariable17.Length);
            writer.Write(UnknownVariable17);

            writer.Close();
        }