public static void SaveMissions(this PlayerModel player, BinaryWriter writer) { foreach (var mission in player.Missions) { writer.Write(mission.Id); writer.WriteField(SaveField.CustomDate, mission.Date); writer.Write(mission.ClientName.PadRight(10, ' ').ToCharArray()); writer.Write((short)mission.RewardAmount); writer.Write((byte)mission.Type); writer.Write((byte)mission.Difficulty); writer.Write((byte)mission.TargetStarSystem.Coords.Y); writer.Write((byte)mission.TargetStarSystem.Coords.X); switch (mission.Type) { case MissionType.PackageDelivery: writer.Write(mission.PackageDescription.PadRight(20).ToCharArray()); break; case MissionType.GoodsDelivery : writer.Write((byte)mission.GoodsToDeliver_Type); writer.Write((byte)mission.GoodsToDeliver_Amount); break; case MissionType.Assassination : mission.AssassinationTarget.Save(writer); break; } } }
public static void Save(this GalaxyModel galaxy, BinaryWriter writer) { var galaxySizeX = galaxy.StarSystems.GetLength(1); var galaxySizeY = galaxy.StarSystems.GetLength(0); writer.WriteField(SaveField.GameDate, galaxy.GameDate); writer.WriteField(SaveField.LastEventDate, galaxy.LastEventDate); writer.WriteField(SaveField.RandomSeed, 0); writer.Write(galaxy.RandomSeed); writer.WriteField(SaveField.AlienStrength, (int)galaxy.AlienStrength); writer.WriteField(SaveField.StarSystems, (galaxySizeX << 8) + galaxySizeY); #region Star System Array for (var i = 0; i < galaxySizeY; i++) for (var j = 0; j < galaxySizeX; j++) { var starSystem = galaxy.StarSystems[i,j]; writer.WriteField(SaveField.StarName, starSystem.Name); writer.WriteField(SaveField.TechLevel, starSystem.TechLevel); writer.WriteField(SaveField.IsExplored, starSystem.IsExplored); writer.WriteField(SaveField.Allegiance, (int)starSystem.Allegiance); writer.WriteField(SaveField.CurrentEvent, (int)starSystem.CurrentEvent); writer.WriteField(SaveField.EventDuration, starSystem.EventDuration); writer.WriteField(SaveField.GoodsLegality, Enums.All_Merchandise.Count); foreach (var merch in Enums.All_Merchandise) writer.Write((byte)(starSystem.IllegalGoods.Contains(merch) ? 1 : 0)); writer.WriteField(SaveField.PriceDeviations, Enums.All_Merchandise.Count); for (var k = 0; k < Enums.All_Merchandise.Count; k++) writer.Write((sbyte)(starSystem.PriceChanges[k])); writer.WriteField(SaveField.StarSystemDataEnd, 0); } #endregion #region Global Event Log writer.WriteField(SaveField.GlobalEventsLog, galaxy.GlobalEventLog.Count); foreach (var t in galaxy.GlobalEventLog) { writer.Write((byte)t.StarSystemIndex); writer.Write((byte)t.Event); writer.Write((short)t.EventValue); writer.WriteField(SaveField.CustomDate, t.EventDate); } #endregion writer.WriteField(SaveField.GalaxyDataEnd, 0); }
public static void Save(this NPC_Model npc, BinaryWriter writer) { writer.WriteField(SaveField.NPC_Type, (int)npc.NPC_Type); writer.WriteField(SaveField.PlayerName, npc.Name); writer.WriteField(SaveField.ShipName, npc.Ship.ModelName); writer.WriteField(SaveField.CurrentHP, npc.CurrentHP); writer.WriteField(SaveField.CurrentMissiles, npc.CurrentMissiles); writer.WriteField(SaveField.Attack, npc.Attack); writer.WriteField(SaveField.Defense, npc.Defense); writer.WriteField(SaveField.HasECM, (int)npc.ECM); writer.WriteField(SaveField.Bounty, npc.Bounty); writer.WriteField(SaveField.EscapeChance, npc.EscapeChance); writer.WriteField(SaveField.IsRelevealedECM, npc.IsRelevealedECM); writer.WriteField(SaveField.CurrentCargo, Enums.All_Merchandise.Count); foreach (var merch in Enums.All_Merchandise) writer.Write((byte)npc.CurrentCargo[merch]); writer.WriteField(SaveField.NPC_DataEnd, 0); }
public static void Save(this PlayerModel player, BinaryWriter writer) { writer.WriteField(SaveField.PlayerName, player.Name); writer.WriteField(SaveField.ShipName, player.Ship.ModelName); writer.WriteField(SaveField.PosX, player.PosX); writer.WriteField(SaveField.PosY, player.PosY); writer.WriteField(SaveField.IsLanded, player.IsLanded); writer.WriteField(SaveField.Credits, player.Credits); writer.WriteField(SaveField.FuelLeft, player.FuelLeft); writer.WriteField(SaveField.CurrentHP, player.CurrentHP); writer.WriteField(SaveField.CurrentMissiles, player.CurrentMissiles); writer.WriteField(SaveField.Attack, player.Attack); writer.WriteField(SaveField.Defense, player.Defense); writer.WriteField(SaveField.HasECM, (int)player.ECM); writer.WriteField(SaveField.HasScanner, (int)player.Scanner); writer.WriteField(SaveField.HasMiningLaser, (int)player.MiningLaser); writer.WriteField(SaveField.HasEscapeBoat, (int)player.EscapeBoat); writer.WriteField(SaveField.CombatRating, player.CombatRating); writer.WriteField(SaveField.Reputation, player.ReputationRating); writer.WriteField(SaveField.CurrentCargo, Enums.All_Merchandise.Count); foreach (var merch in Enums.All_Merchandise) writer.Write((byte)player.CurrentCargo[merch]); writer.WriteField(SaveField.LegalStatus, Enums.All_Allegiances.Count); foreach (var allegiance in Enums.All_Allegiances) writer.Write((short)player.LegalRecords[allegiance].FineAmount); writer.WriteField(SaveField.Missions, player.Missions.Count); player.SaveMissions(writer); writer.WriteField(SaveField.MilitaryRanks, GameConfig.FractionsWithNavy.Length); for (var i = 0; i < GameConfig.FractionsWithNavy.Length; i++) { writer.Write((byte)GameConfig.FractionsWithNavy[i]); writer.Write((short)player.MilitaryRanks[GameConfig.FractionsWithNavy[i]].Rating); } writer.WriteField(SaveField.PlayerDataEnd, 0); }