Ejemplo n.º 1
0
        public override async Task <TaskRes> Execute(HtmlDocument htmlDoc, ChromeDriver wb, Files.Models.AccModels.Account acc)
        {
            await acc.Wb.Navigate($"{acc.AccInfo.ServerUrl}/hero.php");

            acc.Hero.HeroInfo = HeroParser.GetHeroInfo(htmlDoc);
            var points = acc.Hero.HeroInfo.AvaliblePoints;

            for (int i = 0; i < 4; i++)
            {
                var amount = acc.Hero.Settings.Upgrades[i];
                if (amount == 0)
                {
                    continue;
                }
                var id     = HeroHelper.AttributeDomId(i);
                var script = $"var attribute = document.getElementById('{id}');";
                script += "var upPoint = attribute.getElementsByClassName('pointsValueSetter')[1];";
                script += "upPoint.getElementsByTagName('a')[0].click();";

                for (int j = 0; j < amount; j++)
                {
                    // Execute the script (set point) to add 1 point
                    wb.ExecuteScript(script);
                }
                await Task.Delay(AccountHelper.Delay());
            }

            await Task.Delay(AccountHelper.Delay());

            return(TaskRes.Executed);
        }
Ejemplo n.º 2
0
        private bool ranHeroSelectionAtLeastOnce = false; // Hero selection has code other parts depend on


        public ReplayAnalyzer() : base()
        {
            tickTimer          = new System.Timers.Timer(1000.0 / 30.0);
            tickTimer.Elapsed += new System.Timers.ElapsedEventHandler(tickCallback);

            heroData         = new HeroParser(GUISelection.replayDataFolderLocation);
            heroIDData       = new ReplayHeroID(GUISelection.replayDataFolderLocation);
            replayTick       = new ReplayTick(GUISelection.replayDataFolderLocation);
            replayHighlights = new ReplayHighlights(GUISelection.replayDataFolderLocation, GUISelection.heroName);
            replayHighlights.ConstructTickInfo(replayTick);
            lastHitCalculator = new LastHitCalculator();
            retreat           = new Retreat();

            heroID = heroIDData.getHeroID(GUISelection.heroName);
            string heroname = GUISelection.heroName;

            team_side = 0;
            for (int i = 0; i < table.Length / 4; i++)
            {
                if (table[i, 0] == hero_table[heroname])
                {
                    team_side = table[i, 2];
                }
            }
            suggestiontable = cp.suggestionTable_1(team_side, 3);
            table_checkmark = cp.checkMark();
        }
Ejemplo n.º 3
0
    public void LoadConfigs()
    {
        StringCache instance = PersistentSingleton <StringCache> .Instance;

        Biomes = BiomeParser.ParseBiomes(instance.Get("biomes"));
        BossChunkGeneratings = ChunkGeneratingParser.ParseChunkGeneratings(instance.Get("boss_chunk_generating"));
        ChunkMaps            = new List <ChunkMapConfig>();
        for (int i = 0; i <= 4; i++)
        {
            ChunkMaps.Add(ChunkMapParser.ParseChunkMap(instance.Get("ChunkMaps/chunk_map_" + i)));
        }
        ChunkGeneratings = ChunkGeneratingParser.ParseChunkGeneratings(instance.Get("chunk_generating"));
        Skills           = SkillParser.ParseSkills(instance.Get("skills"));
        Heroes           = HeroParser.ParseHeros(instance.Get("heros"));
        Boosters         = BoosterParser.ParseBoosters(instance.Get("boosters"));
        string text = instance.Get("perk_milestones");

        PerkMilestones          = PerkMilestoneParser.ParsePerkMilestonesLevels(text);
        PerkMilestoneConfigs    = PerkMilestoneParser.ParsePerkMilestones(text);
        CompanionMiniMilestones = PerkMilestoneParser.ParseMiniMilestones(instance.Get("companion_mini_milestones"));
        HeroMiniMilestones      = PerkMilestoneParser.ParseMiniMilestones(instance.Get("hero_mini_milestones"));
        Tiers             = TierParser.ParseTiers(instance.Get("tiers"));
        Ranks             = TierParser.ParseRanks(instance.Get("ranks"));
        Gears             = GearParser.ParseGears(instance.Get("gears"));
        TutorialGoals     = PlayerGoalParser.ParsePlayerGoals(instance.Get("tutorial_goals"), tutorial: true);
        PlayerGoals       = PlayerGoalParser.ParsePlayerGoals(instance.Get("player_goals"), tutorial: false);
        PlayerGoalRewards = PlayerGoalParser.ParseRewards(instance.Get("goal_rewards"));
        GearSets          = GearParser.ParseGearSets(instance.Get("gear_set"));
        KeyChest          = ChestParser.ParseChests(instance.Get("chests"), ChestEnum.KeyChest);
        BronzeChest       = ChestParser.ParseChests(instance.Get("chests"), ChestEnum.BronzeChest);
        SilverChest       = ChestParser.ParseChests(instance.Get("chests"), ChestEnum.SilverChest);
        GoldChest         = ChestParser.ParseChests(instance.Get("chests"), ChestEnum.GoldChest);
        Crafting          = CraftingParser.ParseCrafting(instance.Get("crafting"));
        CraftingMaterial  = CraftingMaterialParser.ParseCraftingMaterial(instance.Get("crafting_materials"));
        IAPs                 = IAPParser.ParseIAPs(instance.Get("iaps"));
        BundleTiers          = BundleTierParser.ParseBundleTiers(instance.Get("bundle_tiers"));
        AdFrequencies        = AdFrequencyParser.ParseAdFrequencies(instance.Get("Ads/frequencies"));
        Drills               = DrillParser.ParseDrills(instance.Get("drills"));
        Gifts                = GiftParser.ParseGiftRewards(instance.Get("gifts"));
        GpuPerf              = GpuPerfParser.ParseGpuPerf(instance.Get("gpuperf"));
        XPromo               = XPromoParser.ParseXpromo(instance.Get("xpromo"));
        Gamblings            = GamblingParser.ParseGamblings(instance.Get("gambling"));
        Tournaments          = TournamentParser.ParseTournaments(instance.Get("tournaments"));
        TournamentTiers      = TournamentParser.ParseTournamentTiers(instance.Get("tournamentTiers"));
        AdMobZoneData        = NetworkConfigParser.ParseAdMobZoneData();
        UnityZoneData        = NetworkConfigParser.ParseUnityZoneData();
        FacebookFloors       = NetworkConfigParser.ParseFacebookFloors();
        AdColonyFloors       = NetworkConfigParser.ParseAdColonyFloors();
        AdMobZoneMappings    = NetworkConfigParser.ParseAdMobZoneMappings();
        FacebookZoneMappings = NetworkConfigParser.ParseFacebookZoneMappings();
        UnityZoneMappings    = NetworkConfigParser.ParseUnityZoneMappings();
    }
Ejemplo n.º 4
0
        public override async Task <TaskRes> Execute(HtmlDocument htmlDoc, ChromeDriver wb, Files.Models.AccModels.Account acc)
        {
            await acc.Wb.Navigate($"{acc.AccInfo.ServerUrl}/hero.php?t=1");

            acc.Hero.HeroInfo = HeroParser.GetHeroInfo(htmlDoc);
            var homeVill = HeroParser.GetHeroVillageId(htmlDoc);

            if (homeVill != null)
            {
                acc.Hero.HomeVillageId = homeVill ?? 0;
            }

            if (acc.Hero.HeroInfo.Health > acc.Hero.Settings.MinHealth && acc.Hero.Settings.AutoSendToAdventure)
            {
                TaskExecutor.AddTaskIfNotExists(acc, new StartAdventure()
                {
                    ExecuteAt = DateTime.MinValue.AddMilliseconds(1)
                });
            }
            return(TaskRes.Executed);
        }
Ejemplo n.º 5
0
        public override async Task <TaskRes> Execute(Account acc)
        {
            var wb = acc.Wb.Driver;

            await VersionHelper.Navigate(acc, "/hero.php?t=3", "/hero/adventures");

            acc.Hero.Adventures = AdventureParser.GetAdventures(acc.Wb.Html, acc.AccInfo.ServerVersion);

            HeroHelper.UpdateHeroVillage(acc);

            if (acc.Hero.Adventures == null || acc.Hero.Adventures.Count == 0 || UpdateOnly)
            {
                return(TaskRes.Executed);
            }

            var adventures = acc.Hero.Adventures
                             .Where(x =>
                                    MapHelper.CalculateDistance(acc, x.Coordinates, HeroHelper.GetHeroHomeVillage(acc).Coordinates) <= acc.Hero.Settings.MaxDistance
                                    )
                             .ToList();

            if (adventures.Count == 0)
            {
                return(TaskRes.Executed);
            }

            var adventure = adventures.FirstOrDefault(x => x.Difficulty == Classificator.DifficultyEnum.Normal);

            if (adventure == null)
            {
                adventure = adventures.FirstOrDefault();
            }

            acc.Hero.NextHeroSend = DateTime.Now.AddSeconds(adventure.DurationSeconds * 2);

            switch (acc.AccInfo.ServerVersion)
            {
            case Classificator.ServerVersionEnum.T4_4:
                await acc.Wb.Navigate($"{acc.AccInfo.ServerUrl}/{adventure.Ref}");

                var startButton = acc.Wb.Html.GetElementbyId("start");
                if (startButton == null)
                {
                    //Hero is probably out of the village.
                    this.NextExecute = DateTime.Now.AddMinutes(10);
                    return(TaskRes.Executed);
                }
                wb.ExecuteScript("document.getElementById('start').click()");
                break;

            case Classificator.ServerVersionEnum.T4_5:
                string script = $"var div = document.getElementById('{adventure.AdventureId}');";
                script += $"div.children[0].submit();";
                await DriverHelper.ExecuteScript(acc, script);

                // Check hero outgoing time
                var outTime = HeroParser.GetHeroArrival(acc.Wb.Html);
                // At least 1.5x longer (if hero has Large map)
                acc.Hero.NextHeroSend = DateTime.Now + TimeSpan.FromTicks((long)(outTime.Ticks * 1.5));
                break;
            }

            return(TaskRes.Executed);
        }
Ejemplo n.º 6
0
        /// <summary>

        /// Gets tasks that should be executed after loading a page
        /// </summary>
        /// <param name="acc">Account</param>
        /// <returns>List of tasks</returns>
        public static List <Action> GetPostLoadTasks(Account acc)
        {
            var html = acc.Wb.Html;

            var ran = new Random();

            //Web browser not initialized
            if (!UpdateAccountObject.UpdateVillages(html, acc))
            {
                return(new List <Action>());
            }

            //Didnt check version yet
            if (acc.AccInfo.ServerSpeed == 0 || acc.AccInfo.MapSize == 0)
            {
                return(new List <Action>());
            }

            var vill = acc.Villages.FirstOrDefault(x => x.Active);

            return(new List <Action>()
            {
                // 1: update info
                () => {
                    if (acc.Wb.CurrentUrl.Contains("dorf1"))
                    {
                        TaskExecutor.UpdateDorf1Info(acc);
                    }
                    else if (acc.Wb.CurrentUrl.Contains("dorf2"))
                    {
                        TaskExecutor.UpdateDorf2Info(acc);
                    }
                },
                // 2: get culture point
                () => acc.AccInfo.CulturePoints = RightBarParser.GetCulturePoints(html, acc.AccInfo.ServerVersion),
                // 3: Village expansion:
                () =>
                {
                    var villExpansionReady = acc.Villages.FirstOrDefault(x => x.Expansion.ExpansionAvailable);
                    if (acc.AccInfo.CulturePoints?.MaxVillages > acc.AccInfo.CulturePoints?.VillageCount &&
                        villExpansionReady != null)
                    {
                        villExpansionReady.Expansion.ExpansionAvailable = false;
                        TaskExecutor.AddTaskIfNotExists(acc, new SendSettlers()
                        {
                            ExecuteAt = DateTime.Now, Vill = villExpansionReady
                        });
                    }
                },
                // 4: claim Beginner Quests:
                () =>
                {
                    if (acc.AccInfo.ServerVersion == Classificator.ServerVersionEnum.T4_5 &&
                        acc.Wb.Html.GetElementbyId("sidebarBoxQuestmaster")?
                        .Descendants()?.FirstOrDefault(x => x.HasClass("newQuestSpeechBubble")) != null &&
                        acc.Wb.Html.GetElementbyId("mentorTaskList") == null &&
                        acc.Quests.ClaimBeginnerQuests)
                    {
                        TaskExecutor.AddTaskIfNotExists(acc, new ClaimBeginnerTask2021()
                        {
                            ExecuteAt = DateTime.Now
                        });
                        return;
                    }

                    acc.Quests.Quests = RightBarParser.GetBeginnerQuests(html, acc.AccInfo.ServerVersion);
                    var claimQuest = acc.Quests?.Quests?.FirstOrDefault(x => x.finished);
                    if (claimQuest != null &&
                        acc.Quests.ClaimBeginnerQuests
                        )
                    {
                        TaskExecutor.AddTaskIfNotExists(acc, new ClaimBeginnerTask()
                        {
                            ExecuteAt = DateTime.Now,
                            QuestToClaim = claimQuest,
                            Vill = VillageHelper.VillageFromId(acc, acc.Quests.VillToClaim)
                        });
                    }
                },
                // 5: claim Daily Quest:
                () =>
                {
                    if (acc.AccInfo.ServerVersion == Classificator.ServerVersionEnum.T4_5 &&
                        RightBarParser.CheckDailyQuest(html) &&
                        acc.Quests.ClaimDailyQuests)
                    {
                        TaskExecutor.AddTaskIfNotExists(acc, new ClaimDailyTask()
                        {
                            ExecuteAt = DateTime.Now,
                            Vill = VillageHelper.VillageFromId(acc, acc.Quests.VillToClaim)
                        });
                    }
                },
                // 6: Parse gold/silver
                () =>
                {
                    var goldSilver = RightBarParser.GetGoldAndSilver(html, acc.AccInfo.ServerVersion);
                    acc.AccInfo.Gold = goldSilver[0];
                    acc.AccInfo.Silver = goldSilver[1];
                },
                // 7: plus acconunt
                () => acc.AccInfo.PlusAccount = RightBarParser.HasPlusAccount(html, acc.AccInfo.ServerVersion),

                // 8: Check msgs:
                () =>
                {
                    if (MsgParser.UnreadMessages(html, acc.AccInfo.ServerVersion) > 0 &&
                        !acc.Wb.CurrentUrl.Contains("messages.php") &&
                        acc.Settings.AutoReadIgms)
                    {
                        TaskExecutor.AddTaskIfNotExists(acc, new ReadMessage()
                        {
                            ExecuteAt = DateTime.Now.AddSeconds(ran.Next(10, 600)), // Read msg in next 10-600 seconds
                            Priority = TaskPriority.Low
                        });
                    }
                },
                // 9: JS resources
                () => {
                    // TODO: cast directly from object to ResourcesJsObject, no de/serialization!
                    var resJson = DriverHelper.GetJsObj <string>(acc, "JSON.stringify(resources);");
                    var resJs = JsonConvert.DeserializeObject <ResourcesJsObject>(resJson);

                    vill.Res.Capacity.GranaryCapacity = resJs.maxStorage.l4;
                    vill.Res.Capacity.WarehouseCapacity = resJs.maxStorage.l1;

                    vill.Res.Stored.Resources = resJs.storage.GetResources();
                    vill.Res.Stored.LastRefresh = DateTime.Now;

                    vill.Res.Production = resJs.production.GetResources();
                    vill.Res.FreeCrop = resJs.production.l5;
                },
                // 10: Check if there are unfinished tasks
                () => ResSpendingHelper.CheckUnfinishedTasks(acc, vill),
                // 11: Donate to ally bonus
                () => DonateToAlly(acc, vill),
                // 12: increase next village refresh time
                () => VillageHelper.SetNextRefresh(acc, vill),
                // 13: NPC:
                () =>
                {
                    float ratio = (float)vill.Res.Stored.Resources.Crop / vill.Res.Capacity.GranaryCapacity;
                    if (0.99 <= ratio &&
                        3 <= acc.AccInfo.Gold &&
                        vill.Market.Npc.Enabled &&
                        (vill.Market.Npc.NpcIfOverflow || !MarketHelper.NpcWillOverflow(vill)))
                    {  //npc crop!
                        TaskExecutor.AddTaskIfNotExistInVillage(acc, vill, new NPC()
                        {
                            ExecuteAt = DateTime.MinValue,
                            Vill = vill
                        });
                    }
                },
                // 14: TTwars plus and boost
                () => {
                    if (acc.Settings.AutoActivateProductionBoost && CheckProductionBoost(acc))
                    {
                        TaskExecutor.AddTask(acc, new TTWarsPlusAndBoost()
                        {
                            ExecuteAt = DateTime.Now.AddSeconds(1)
                        });
                    }
                },
                // 15: Insta upgrade:
                () =>
                {
                    if (vill.Build.InstaBuild &&
                        acc.AccInfo.Gold >= 2 &&
                        vill.Build.CurrentlyBuilding.Count >= (acc.AccInfo.PlusAccount ? 2 : 1) &&
                        vill.Build.CurrentlyBuilding.LastOrDefault().Duration
                        >= DateTime.Now.AddMinutes(vill.Build.InstaBuildMinutes))
                    {
                        TaskExecutor.AddTaskIfNotExistInVillage(acc, vill, new InstaUpgrade()
                        {
                            Vill = vill,
                            ExecuteAt = DateTime.Now.AddHours(-1)
                        });
                    }
                },
                // 16: Adventure num
                () => acc.Hero.AdventureNum = HeroParser.GetAdventureNum(html, acc.AccInfo.ServerVersion),
                // 17: status of hero
                () => acc.Hero.Status = HeroParser.HeroStatus(html, acc.AccInfo.ServerVersion),
                // 18: health of hero
                () => acc.Hero.HeroInfo.Health = HeroParser.GetHeroHealth(html, acc.AccInfo.ServerVersion),
                // 19:  Hero:
                () =>
                {
                    bool heroReady = (acc.Hero.HeroInfo.Health > acc.Hero.Settings.MinHealth &&
                                      acc.Hero.Settings.AutoSendToAdventure &&
                                      acc.Hero.Status == Hero.StatusEnum.Home &&
                                      acc.Hero.NextHeroSend < DateTime.Now);

                    var homeVill = HeroHelper.GetHeroHomeVillage(acc);
                    // Update adventures
                    if (homeVill == null)
                    {
                        TaskExecutor.AddTask(acc, new HeroUpdateInfo()
                        {
                            ExecuteAt = DateTime.Now
                        });
                    }
                    else if (heroReady &&
                             (homeVill.Build.Buildings.Any(x => x.Type == Classificator.BuildingEnum.RallyPoint && 0 < x.Level)) &&
                             (acc.Hero.AdventureNum != acc.Hero.Adventures.Count() || HeroHelper.AdventureInRange(acc)))
                    {
                        // Update adventures
                        TaskExecutor.AddTaskIfNotExists(acc, new StartAdventure()
                        {
                            ExecuteAt = DateTime.Now.AddSeconds(10)
                        });
                    }
                    if (acc.Hero.AdventureNum == 0 && acc.Hero.Settings.BuyAdventures) //for UNL servers, buy adventures
                    {
                        TaskExecutor.AddTaskIfNotExists(acc, new TTWarsBuyAdventure()
                        {
                            ExecuteAt = DateTime.Now.AddSeconds(5)
                        });
                    }
                    if (acc.Hero.Status == Hero.StatusEnum.Dead && acc.Hero.Settings.AutoReviveHero) //if hero is dead, revive him
                    {
                        TaskExecutor.AddTaskIfNotExists(acc, new ReviveHero()
                        {
                            ExecuteAt = DateTime.Now.AddSeconds(5),
                            Vill = AccountHelper.GetHeroReviveVillage(acc)
                        });
                    }
                    if (HeroParser.LeveledUp(html, acc.AccInfo.ServerVersion) && acc.Hero.Settings.AutoSetPoints)
                    {
                        TaskExecutor.AddTaskIfNotExists(acc, new HeroSetPoints()
                        {
                            ExecuteAt = DateTime.Now
                        });
                    }
                },
                // 20: build more storage
                () => AutoExpandStorage(acc, vill),
                // 21: Extend protection
                () => {
                    if (acc.Settings.ExtendProtection &&
                        acc.Wb.Html.GetElementbyId("sidebarBoxInfobox").Descendants("button").Any(x => x.GetAttributeValue("value", "") == "Extend"))
                    {
                        // infoType_25 ?
                        TaskExecutor.AddTaskIfNotExists(acc, new ExtendProtection()
                        {
                            ExecuteAt = DateTime.Now
                        });
                    }
                }
            });
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Will be called before each task to update resources/msg?,villages,quests,hero health, adventures num, gold/silver
        /// </summary>
        /// <param name="acc">Account</param>
        /// <returns>True if successful, false if error</returns>
        private static bool PreTaskRefresh(Account acc)
        {
            var html = acc.Wb.Html;

            try
            {
                //check & update dorf1/dorf2
                if (!UpdateAccountObject.UpdateVillages(html, acc))
                {
                    return(false);                                                //Web browser not initiali
                }
                var activeVill = acc.Villages.FirstOrDefault(x => x.Active);
                //update dorf1/dorf2
                if (acc.Wb.CurrentUrl.Contains("dorf1"))
                {
                    UpdateDorf1Info(acc);
                }
                else if (acc.Wb.CurrentUrl.Contains("dorf2"))
                {
                    UpdateDorf2Info(acc);
                }


                acc.AccInfo.CulturePoints = RightBarParser.GetCulurePoints(html, acc.AccInfo.ServerVersion);

                var villExpansionReady = acc.Villages.FirstOrDefault(x => x.Expansion.ExpensionAvailable);
                if (acc.AccInfo.CulturePoints.MaxVillages > acc.AccInfo.CulturePoints.VillageCount &&
                    villExpansionReady != null)
                {
                    villExpansionReady.Expansion.ExpensionAvailable = false;
                    TaskExecutor.AddTaskIfNotExists(acc, new SendSettlers()
                    {
                        ExecuteAt = DateTime.Now, vill = villExpansionReady
                    });
                }

                acc.AccInfo.Tribe = LeftBarParser.GetAccountTribe(acc, html);
                acc.Quests        = RightBarParser.GetQuests(html);
                var goldSilver = RightBarParser.GetGoldAndSilver(html, acc.AccInfo.ServerVersion);
                acc.AccInfo.Gold        = goldSilver[0];
                acc.AccInfo.Silver      = goldSilver[1];
                acc.AccInfo.PlusAccount = RightBarParser.HasPlusAccount(html, acc.AccInfo.ServerVersion);
                //Check reports/msg count
                if (MsgParser.UnreadMessages(html, acc.AccInfo.ServerVersion) > 0 &&
                    !acc.Wb.CurrentUrl.Contains("messages.php") &&
                    !IsTaskOnQueue(acc, typeof(ReadMessage)))
                {
                    TaskExecutor.AddTask(acc, new ReadMessage()
                    {
                        ExecuteAt = DateTime.Now.AddMilliseconds(AccountHelper.Delay() * 30)
                    });
                }

                //update loyalty of village


                activeVill.Res.FreeCrop = RightBarParser.GetFreeCrop(html);
                activeVill.Res.Capacity = ResourceParser.GetResourceCapacity(html, acc.AccInfo.ServerVersion);
                activeVill.Res.Stored   = ResourceParser.GetResources(html);

                float ratio = (float)activeVill.Res.Stored.Resources.Crop / activeVill.Res.Capacity.GranaryCapacity;
                if (ratio >= 0.99 &&
                    acc.AccInfo.Gold >= 3 &&
                    activeVill.Market.Npc.Enabled &&
                    (activeVill.Market.Npc.NpcIfOverflow || !MarketHelper.NpcWillOverflow(activeVill)))
                {  //npc crop!
                    TaskExecutor.AddTaskIfNotExistInVillage(acc, activeVill, new NPC()
                    {
                        ExecuteAt = DateTime.MinValue,
                        vill      = activeVill
                    });
                }
                if (acc.Settings.AutoActivateProductionBoost && CheckProductionBoost(acc))
                {
                    TaskExecutor.AddTask(acc, new TTWarsPlusAndBoost()
                    {
                        ExecuteAt = DateTime.Now.AddSeconds(1)
                    });
                }

                acc.Hero.AdventureNum    = HeroParser.GetAdventureNum(html, acc.AccInfo.ServerVersion);
                acc.Hero.Status          = HeroParser.HeroStatus(html, acc.AccInfo.ServerVersion);
                acc.Hero.HeroInfo.Health = HeroParser.GetHeroHealth(html, acc.AccInfo.ServerVersion);

                bool heroReady = (acc.Hero.HeroInfo.Health > acc.Hero.Settings.MinHealth &&
                                  acc.Hero.Settings.AutoSendToAdventure &&
                                  acc.Hero.Status == Hero.StatusEnum.Home &&
                                  acc.Hero.NextHeroSend < DateTime.Now);
                // Update adventures
                if (heroReady &&
                    (acc.Hero.AdventureNum != acc.Hero.Adventures.Count() || HeroHelper.AdventureInRange(acc))) //update adventures
                {
                    AddTaskIfNotExists(acc, new StartAdventure()
                    {
                        ExecuteAt = DateTime.Now.AddSeconds(10)
                    });
                }
                if (acc.Hero.AdventureNum == 0 && acc.Hero.Settings.BuyAdventures) //for UNL servers, buy adventures
                {
                    AddTaskIfNotExists(acc, new TTWarsBuyAdventure()
                    {
                        ExecuteAt = DateTime.Now.AddSeconds(5)
                    });
                }
                if (acc.Hero.Status == Hero.StatusEnum.Dead && acc.Hero.Settings.AutoReviveHero) //if hero is dead, revive him
                {
                    AddTaskIfNotExists(acc, new ReviveHero()
                    {
                        ExecuteAt = DateTime.Now.AddSeconds(5), vill = AccountHelper.GetHeroReviveVillage(acc)
                    });
                }
                if (HeroParser.LeveledUp(html) && acc.Hero.Settings.AutoSetPoints)
                {
                    AddTaskIfNotExists(acc, new HeroSetPoints()
                    {
                        ExecuteAt = DateTime.Now
                    });
                }
                return(true);
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in PreTask " + e.Message + "\n\nStack Trace: " + e.StackTrace + "\n-----------------------");
                return(false);
            }
        }
Ejemplo n.º 8
0
        public override async Task <TaskRes> Execute(HtmlDocument htmlDoc, ChromeDriver wb, Files.Models.AccModels.Account acc)
        {
            await acc.Wb.Navigate($"{acc.AccInfo.ServerUrl}/hero.php?t=3");

            acc.Hero.Adventures = AdventureParser.GetAdventures(htmlDoc, acc.AccInfo.ServerVersion);

            var homeVill = HeroParser.GetHeroVillageId(htmlDoc);

            if (homeVill != null)
            {
                acc.Hero.HomeVillageId = homeVill ?? 0;
            }

            if (acc.Hero.Adventures == null || acc.Hero.Adventures.Count == 0)
            {
                return(TaskRes.Executed);
            }

            var adventures = acc.Hero.Adventures
                             .Where(x =>
                                    MapHelper.CalculateDistance(acc, x.Coordinates, MapHelper.CoordinatesFromKid(acc.Hero.HomeVillageId, acc)) <= acc.Hero.Settings.MaxDistance
                                    )
                             .ToList();

            if (adventures.Count == 0)
            {
                return(TaskRes.Executed);
            }

            var adventure = adventures.FirstOrDefault(x => x.Difficulty == 1);

            if (adventure == null)
            {
                adventure = adventures.FirstOrDefault();
            }

            acc.Hero.NextHeroSend = DateTime.Now.AddSeconds(adventure.DurationSeconds * 2);

            switch (acc.AccInfo.ServerVersion)
            {
            case Classificator.ServerVersionEnum.T4_4:
                await acc.Wb.Navigate($"{acc.AccInfo.ServerUrl}/{adventure.Ref}");

                var startButton = htmlDoc.GetElementbyId("start");
                if (startButton == null)
                {
                    //Hero is probably out of the village.
                    this.NextExecute = DateTime.Now.AddMinutes(10);
                    return(TaskRes.Executed);
                }
                wb.ExecuteScript("document.getElementById('start').click()");
                break;

            case Classificator.ServerVersionEnum.T4_5:
                string script = $"var div = document.getElementById('{adventure.AdventureId}');";
                script += $"div.children[0].submit();";
                wb.ExecuteScript(script);
                break;
            }

            return(TaskRes.Executed);
        }