Example #1
0
 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);
        }
Example #3
0
        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;
            }
        }