public MyEventPactEnded(MyPolitic politic) : base(false) => Politic = politic;
internal MyTradeShipAttackResult AttackTradeShip(string tag, TimeSpan time, out MyTradeShipFight fight) { fight = null; if (!Faction.Attack) { return(MyTradeShipAttackResult.NoAttack); } if (Faction.Tag == tag) { return(MyTradeShipAttackResult.YourShip); } string factionTag = GetTradeShips().Find(x => x == tag); if (string.IsNullOrWhiteSpace(factionTag)) { return(MyTradeShipAttackResult.NotFound); } MyFaction enemy = MySave.Factions.Find(x => x.Tag == tag); if (enemy is null) { return(MyTradeShipAttackResult.NotFound); } MyPolitic policits = MySave.Politics.Find(x => x.Factions.Item1 == Faction.Tag && (x.Factions.Item2 == enemy.Tag) ^ (x.Factions.Item2 == Faction.Tag) && x.Factions.Item1 == enemy.Tag) ?? throw new ArgumentException("Данные отношений не найдены", nameof(Faction)); if (!(policits.Status == MyPoliticStatus.War || Faction.FactionType == FactionType.Pirate)) { return(MyTradeShipAttackResult.NotInWar); } if (MySave.BotSettings.ActivityTime.Item1 > time || MySave.BotSettings.ActivityTime.Item2 < time) { return(MyTradeShipAttackResult.InvalidAdminTime); } if (Faction.ActiveInterval.start > time || Faction.ActiveInterval.finish < time) { return(MyTradeShipAttackResult.InvalidYourTime); } if (enemy.ActiveInterval.start > time || enemy.ActiveInterval.finish < time) { return(MyTradeShipAttackResult.InvalidEnemyTime); } if (enemy.Ships.Values.Sum() == 0) { enemy.TradeShipStatus = TradeShipStatus.None; Faction.Resourses %= Faction.FactionType == FactionType.Pirate ? 250 : 125; Faction.Attack = false; return(MyTradeShipAttackResult.OkNoFight); } enemy.TradeShipStatus = TradeShipStatus.Attacked; DateTime date = DateTime.UtcNow.Date.AddDays(1.0) + time; if (date < DateTime.UtcNow) { date = date.AddDays(1.0); } fight = new MyTradeShipFight(Faction.Tag, enemy.Tag, date); MySave.Fights = MySave.Fights.Add(fight); return(MyTradeShipAttackResult.Ok); }
static public void Load() { try { Console.WriteLine($"{DateTime.Now}: Начат процесс загрузки…"); MyBotSettings.Load(); ImmutableList <MyPlayer> .Builder playersBuilder = ImmutableList.CreateBuilder <MyPlayer>(); ImmutableList <MyFaction> .Builder factionsBuilder = ImmutableList.CreateBuilder <MyFaction>(); ImmutableList <MySector> .Builder sectorsBuilder = ImmutableList.CreateBuilder <MySector>(); ImmutableList <MyPolitic> .Builder politicsBuilder = ImmutableList.CreateBuilder <MyPolitic>(); ImmutableList <AMyFight> .Builder fightsBuilder = ImmutableList.CreateBuilder <AMyFight>(); ImmutableList <MyOffer> .Builder offersBuilder = ImmutableList.CreateBuilder <MyOffer>(); ImmutableList <MyScript> .Builder scriptsBuilder = ImmutableList.CreateBuilder <MyScript>(); ImmutableList <MyTimer> .Builder timersBuilder = ImmutableList.CreateBuilder <MyTimer>(); Parallel.Invoke(() => Parallel.ForEach(Directory.GetFiles(SavePathPlayers), item => { using (FileStream stream = File.OpenRead(item)) { MyPlayer player = (MyPlayer)MyPlayerSerializer.ReadObject(stream); lock (playersBuilder) { playersBuilder.Add(player); } } }), () => Parallel.ForEach(Directory.GetFiles(SavePathFactions), item => { using (FileStream stream = File.OpenRead(item)) { MyFaction faction = (MyFaction)MyFactionSerializer.ReadObject(stream); lock (factionsBuilder) { factionsBuilder.Add(faction); } } }), () => Parallel.ForEach(Directory.GetFiles(SavePathSectors), item => { using (FileStream stream = File.OpenRead(item)) { MySector sector = (MySector)MySectorSerializer.ReadObject(stream); lock (sectorsBuilder) { sectorsBuilder.Add(sector); } } }), () => Parallel.ForEach(Directory.GetFiles(SavePathPolitics), item => { using (FileStream stream = File.OpenRead(item)) { MyPolitic pol = (MyPolitic)MyPoliticSerializer.ReadObject(stream); lock (politicsBuilder) { politicsBuilder.Add(pol); } } }), () => Parallel.ForEach(Directory.GetFiles(SavePathFights), item => { using (FileStream stream = File.OpenRead(item)) { AMyFight fight; if (item.Contains("@S")) { fight = (MySectorFight)MySectorFightSerializer.ReadObject(stream); } else if (item.Contains("@T")) { fight = (MyTradeShipFight)MyTradeShipFightSerializer.ReadObject(stream); } else if (item.Contains("@C")) { fight = (MyCustomFight)MyCustomFightSerializer.ReadObject(stream); } else { throw new FileLoadException("Неизвестный тип боя", item); } lock (fightsBuilder) { fightsBuilder.Add(fight); } } }), () => Parallel.ForEach(Directory.GetFiles(SavePathOffers), item => { using (FileStream stream = File.OpenRead(item)) { MyOffer offer = (MyOffer)MyOfferSerializer.ReadObject(stream); lock (offersBuilder) { offersBuilder.Add(offer); } } }), () => Parallel.ForEach(Directory.GetFiles(SavePathScripts), item => { using (FileStream stream = File.OpenRead(item)) { MyScript scr = (MyScript)MyScriptSerializer.ReadObject(stream); lock (scriptsBuilder) { scriptsBuilder.Add(scr); } } }), () => Parallel.ForEach(Directory.GetFiles(SavePathTimers), item => { using (FileStream stream = File.OpenRead(item)) { MyTimer timer = (MyTimer)MyTimerSerializer.ReadObject(stream); lock (timersBuilder) { timersBuilder.Add(timer); } } })); playersBuilder.Sort(); factionsBuilder.Sort(); sectorsBuilder.Sort(); Players = playersBuilder.ToImmutable(); Factions = factionsBuilder.ToImmutable(); Sectors = sectorsBuilder.ToImmutable(); Politics = politicsBuilder.ToImmutable(); Fights = fightsBuilder.ToImmutable(); Offers = offersBuilder.ToImmutable(); Scripts = scriptsBuilder.ToImmutable(); Timers = timersBuilder.ToImmutable(); Console.WriteLine($"{DateTime.Now}: Загрузка завершена"); } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"{DateTime.Now}: Исключение во время попытки загрузки: {e.Message}\r\n{e.StackTrace}"); Console.ForegroundColor = ConsoleColor.Green; } }