Ejemplo n.º 1
0
        private void AddAttack(TerritoryIDType from, TerritoryIDType to, AttackTransferEnum attackTransfer, int numArmies, bool attackTeammates)
        {
            IEnumerable <GameOrderAttackTransfer> attacks = Orders.OfType <GameOrderAttackTransfer>();
            var existingFrom   = attacks.Where(o => o.From == from).ToList();
            var existingFromTo = existingFrom.Where(o => o.To == to).ToList();

            if (existingFromTo.Any())
            {
                existingFromTo.Single().NumArmies = existingFromTo.Single().NumArmies.Add(new Armies(numArmies));
            }
            else
            {
                var specials = Standing.Territories[from].NumArmies.SpecialUnits;
                if (specials.Length > 0)
                {
                    var used = existingFrom.SelectMany(o => o.NumArmies.SpecialUnits).Select(o => o.ID).ToHashSet(false);
                    specials = specials.Where(o => used.Contains(o.ID) == false).ToArray();
                }

                AddOrder(GameOrderAttackTransfer.Create(this.PlayerID, from, to, attackTransfer, false, new Armies(numArmies, false, specials), attackTeammates));
            }
        }
Ejemplo n.º 2
0
        public void AddAttack(TerritoryIDType from, TerritoryIDType to, AttackTransferEnum attackTransfer, int numArmies, bool attackTeammates, bool byPercent = false, bool bosses = false, bool commanders = false)
        {
            Assert.Fatal(Bot.Map.Territories[from].ConnectedTo.ContainsKey(to), from + " does not connect to " + to);

            var actualArmies    = numArmies;
            var actualByPercent = byPercent;

            if (actualByPercent && Bot.Settings.AllowPercentageAttacks == false)
            {
                actualByPercent = false;
                actualArmies    = 1000000;
            }

            var actualMode = attackTransfer;

            if (actualMode == AttackTransferEnum.Transfer && Bot.Settings.AllowTransferOnly == false)
            {
                actualMode = AttackTransferEnum.AttackTransfer;
            }
            if (actualMode == AttackTransferEnum.Attack && Bot.Settings.AllowAttackOnly == false)
            {
                actualMode = AttackTransferEnum.AttackTransfer;
            }

            IEnumerable <GameOrderAttackTransfer> attacks = Orders.OfType <GameOrderAttackTransfer>();
            var existingFrom   = attacks.Where(o => o.From == from).ToList();
            var existingFromTo = existingFrom.Where(o => o.To == to).ToList();

            if (existingFromTo.Any())
            {
                var existing = existingFromTo.Single();
                existing.ByPercent      = actualByPercent;
                existing.AttackTransfer = actualMode;
                existing.NumArmies      = existing.NumArmies.Add(new Armies(actualArmies));

                if (actualByPercent && existing.NumArmies.NumArmies > 100)
                {
                    existing.NumArmies = existing.NumArmies.Subtract(new Armies(existing.NumArmies.NumArmies - 100));
                }
            }
            else
            {
                var specials = Bot.Standing.Territories[from].NumArmies.SpecialUnits;
                if (specials.Length > 0)
                {
                    var used = existingFrom.SelectMany(o => o.NumArmies.SpecialUnits).Select(o => o.ID).ToHashSet(false);
                    specials = specials.Where(o => used.Contains(o.ID) == false).ToArray();

                    if (bosses == false)
                    {
                        specials = specials.Where(o => o.IsBoss() == false).ToArray();
                    }

                    if (commanders == false)
                    {
                        specials = specials.Where(o => !(o is Commander)).ToArray();
                    }
                }

                AddOrder(GameOrderAttackTransfer.Create(Bot.PlayerID, from, to, actualMode, actualByPercent, new Armies(actualArmies, specials), attackTeammates));
            }
        }
        public static GameOrderAttackTransfer Create(PlayerIDType playerID, TerritoryIDType from, TerritoryIDType to, AttackTransferEnum attackTransfer, bool byPercent, Armies armies, bool attackTeammates)
        {
            var r = new GameOrderAttackTransfer();

            r.PlayerID        = playerID;
            r.From            = from;
            r.To              = to;
            r.AttackTransfer  = attackTransfer;
            r.ByPercent       = byPercent;
            r.NumArmies       = armies;
            r.AttackTeammates = attackTeammates;
            return(r);
        }
        public static GameOrderAttackTransfer Create(PlayerIDType playerID, TerritoryIDType from, TerritoryIDType to, AttackTransferEnum attackTransfer, Armies armies, String reason)
        {
            var r = new GameOrderAttackTransfer();

            r.PlayerID        = playerID;
            r.From            = from;
            r.To              = to;
            r.AttackTransfer  = attackTransfer;
            r.ByPercent       = false;
            r.NumArmies       = armies;
            r.AttackTeammates = true;
            r.Reason          = reason;
            return(r);
        }