Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
                    }
                }
            }
        }