public void MainLoop() { List <int> villagesToAttack = new List <int>(); List <int> oasisToAttack = new List <int>(); CanBuyTroops = false; TroopsInfo troopsToBuyPraven = new TroopsInfo(); troopsToBuyPraven.EquitesImperatoris.Amount = 20; TroopsInfo troopsToBuySuno = new TroopsInfo(); troopsToBuySuno.Imperian.Amount = 20; TroopsInfo troopsToSend = new TroopsInfo(); troopsToSend.Legionnaire.Amount = 6; troopsToSend.EquitesImperatoris.Amount = 2; troopsToSend.Imperian.Amount = 5; for (int i = 0; i < targets.Villages.Count; i++) { villagesToAttack.Add(i); } for (int i = 0; i < targets.Oases.Count; i++) { oasisToAttack.Add(i); } int waitForAttack = 0; Debug.WriteLine($"Waiting for attack to land"); Debug.WriteLine($"{DateTime.Now} - Attack will land in {waitForAttack.ToString()}"); LoggedWait(waitForAttack, "Waiting for last attack to land"); Login(); RefreshRessources(); while (true) { SendAttackToVillages(villagesToAttack, troopsToSend, troopsToBuyPraven, troopsToBuySuno); } }
public void SendAttackToVillages(List <int> number, TroopsInfo attackInfo, TroopsInfo buyInfoPraven, TroopsInfo buyInfoSuno) { for (int i = 0; i < number.Count; i++) { AvoidAttack(TroopsToSave); try { var grid = targets.Villages[number[i]]; if (!grid.CanRaid) { Debug.WriteLine($"----- Village # {i.ToString()} cannot be attacked -----"); Debug.WriteLine($"----- X: {grid.X.ToString()} -----"); Debug.WriteLine($"----- Y: {grid.Y.ToString()} -----"); } else { Debug.WriteLine($"----- Attacking village # {i.ToString()} -----"); Debug.WriteLine($"----- X: {grid.X.ToString()} -----"); Debug.WriteLine($"----- Y: {grid.Y.ToString()} -----"); Random random = new Random(); var randomWait = random.Next(2500, 10000); LoggedWait(randomWait, "Waiting before attack to not get banned for"); //Start with first village Cities city = Cities.Praven; OpenTab(Tabs.Ressources, Cities.Praven); while (CheckIfEnoughTroops(attackInfo, city, grid.Multiplier) == Messages.None) { Debug.WriteLine($"Not enough troops in the village for attack"); if (CanBuyTroops) { Debug.WriteLine($"Buying Troops"); if (city == Cities.Praven) { BuyTroops(buyInfoPraven, city); } else if (city == Cities.Suno) { BuyTroops(buyInfoSuno, city); } } AvoidAttack(TroopsToSave); if (city == Cities.Praven) { city = Cities.Suno; } else if (city == Cities.Suno) { city = Cities.Praven; } var changingCityWait = random.Next(10000, 20000); LoggedWait(changingCityWait, "Waiting before changing city"); Debug.WriteLine($"Changing village to {city.ToString()}"); } var result = CheckIfEnoughTroops(attackInfo, city, grid.Multiplier); if (result == Messages.EquitesImperatoris) { SendAttack(grid.X, grid.Y, attackInfo.EquitesImperatoris, grid.Multiplier); targets.Villages[i].IsAttacked = true; Debug.WriteLine($"{DateTime.Now} - Attacking X: {grid.X} - Y: {grid.Y}."); Debug.WriteLine($"{DateTime.Now} - Attack will land in {TimeBeforeAttackLands.ToString()}"); Debug.WriteLine($"{DateTime.Now} - Attacking with {attackInfo.EquitesImperatoris.Amount} {attackInfo.EquitesImperatoris.Name}"); targets.Villages[i].IsAttacked = false; } else if (result == Messages.Legionnaire) { SendAttack(grid.X, grid.Y, attackInfo.Legionnaire, grid.Multiplier); targets.Villages[i].IsAttacked = true; Debug.WriteLine($"{DateTime.Now} - Attacking X: {grid.X} - Y: {grid.Y}."); Debug.WriteLine($"{DateTime.Now} - Attack will land in {TimeBeforeAttackLands.ToString()}"); Debug.WriteLine($"{DateTime.Now} - Attacking with {attackInfo.Legionnaire.Amount} {attackInfo.Legionnaire.Name}"); targets.Villages[i].IsAttacked = false; } else if (result == Messages.Imperian) { SendAttack(grid.X, grid.Y, attackInfo.Imperian, grid.Multiplier); targets.Villages[i].IsAttacked = true; Debug.WriteLine($"{DateTime.Now} - Attacking X: {grid.X} - Y: {grid.Y}."); Debug.WriteLine($"{DateTime.Now} - Attack will land in {TimeBeforeAttackLands.ToString()}"); Debug.WriteLine($"{DateTime.Now} - Attacking with {attackInfo.Imperian.Amount} {attackInfo.Imperian.Name}"); targets.Villages[i].IsAttacked = false; } else if (result == Messages.All) { if (attackInfo.Legionnaire.Amount != 0) { SendAttack(grid.X, grid.Y, attackInfo.Legionnaire, grid.Multiplier); } else if (attackInfo.EquitesImperatoris.Amount != 0) { SendAttack(grid.X, grid.Y, attackInfo.EquitesImperatoris, grid.Multiplier); } else if (attackInfo.Imperian.Amount != 0) { SendAttack(grid.X, grid.Y, attackInfo.Imperian, grid.Multiplier); } else { Debug.WriteLine($"No troop was sent cause amounts were all at 0"); i--; } targets.Villages[i].IsAttacked = true; Debug.WriteLine($"{DateTime.Now} - Attacking X: {grid.X} - Y: {grid.Y}."); Debug.WriteLine($"{DateTime.Now} - Attack will land in {TimeBeforeAttackLands.ToString()}"); Debug.WriteLine($"{DateTime.Now} - Attacking with ---"); targets.Villages[i].IsAttacked = false; } else if (result == Messages.None) { Debug.WriteLine("No troop was sent"); } else { Debug.WriteLine("Bug, it should not get here"); } } } catch (Exception e) { Debug.WriteLine($"Exception, {e.Message}"); if (NumberOfTries <= MaxNumberOfTries) { i--; NumberOfTries++; } else { NumberOfTries = 0; SelectMainVillage(); OpenTab(Tabs.Ressources); } } } }