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)); } }
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); }