Exemplo n.º 1
0
        public static int GetAdventureNum(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                var adv44  = htmlDoc.DocumentNode.Descendants("button").FirstOrDefault(x => x.HasClass("adventureWhite"));
                var bubble = adv44.Descendants().FirstOrDefault(x => x.HasClass("speechBubbleContent"));
                if (bubble == null)
                {
                    return(0);                    //No bubble, no adventures
                }
                return((int)Parser.RemoveNonNumeric(bubble.InnerText));

            case Classificator.ServerVersionEnum.T4_5:
                var adv45 = htmlDoc.DocumentNode.Descendants("a").FirstOrDefault(x => x.HasClass("adventure"));
                var num   = adv45.ChildNodes.FirstOrDefault(x => x.HasClass("content") && x.Name == "div");
                if (num == null)
                {
                    return(0);
                }
                return((int)Parser.RemoveNonNumeric(num.InnerText));

            default: return(0);
            }
        }
Exemplo n.º 2
0
        public static int UnreadMessages(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                var msgs      = htmlDoc.GetElementbyId("n6");
                var container = msgs.Descendants("div").FirstOrDefault(x => x.HasClass("speechBubbleContainer"));
                if (container == null)
                {
                    return(0);
                }
                var msgCount = container.Descendants("div").FirstOrDefault(x => x.HasClass("speechBubbleContent")).InnerHtml;
                return((int)Parser.RemoveNonNumeric(msgCount));

            case Classificator.ServerVersionEnum.T4_5:
                var msgs5 = htmlDoc.DocumentNode.Descendants("a").FirstOrDefault(x => x.HasClass("messages"));
                if (msgs5 == null)
                {
                    return(0);
                }
                var indicator = msgs5.Descendants("div").FirstOrDefault(x => x.HasClass("indicator"));
                if (indicator == null)
                {
                    return(0);
                }
                return((int)Parser.RemoveNonNumeric(indicator.InnerHtml));
            }
            return(0);
        }
Exemplo n.º 3
0
        public static bool LeveledUp(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                return(htmlDoc.DocumentNode
                       .Descendants("div")
                       .Any(x => x.HasClass("levelUp")));

            case Classificator.ServerVersionEnum.T4_5:
                return(htmlDoc.DocumentNode
                       .Descendants("i")
                       .Any(x => x.HasClass("levelUp") && x.HasClass("show")));
            }
            return(false);
        }
Exemplo n.º 4
0
        public static List <Building> GetResourcefields(HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                var             fields    = htmlDoc.GetElementbyId("village_map").Descendants("div").Where(x => !x.HasClass("labelLayer")).ToList();
                List <Building> resFields = new List <Building>();
                for (int i = 0; i < 18; i++)
                {
                    var vals     = fields.ElementAt(i).GetAttributeValue("class", "").Split(' ');
                    var building = new Building();

                    var aid = Convert.ToByte(vals.FirstOrDefault(x => x.StartsWith("aid")).Replace("aid", ""));
                    var lvl = Convert.ToByte(vals.FirstOrDefault(x => x.StartsWith("level") && x != "level").Replace("level", ""));
                    var gid = Convert.ToByte(vals.FirstOrDefault(x => x.StartsWith("gid")).Replace("gid", ""));
                    var uc  = vals.Contains("underConstruction");

                    building.Init(aid, lvl, gid, uc);
                    resFields.Add(building);
                }
                return(resFields);

            case Classificator.ServerVersionEnum.T4_5:
                var             fields5    = htmlDoc.GetElementbyId("resourceFieldContainer").ChildNodes.Where(x => x.Name == "div").ToList();
                List <Building> resFields5 = new List <Building>();
                foreach (var field in fields5)
                {
                    var vals = field.GetClasses();     //.GetAttributeValue("class", "").Split(' ');
                    //fields5.ElementAt(1).GetClasses().
                    var building = new Building();

                    var aid = Convert.ToByte(vals.FirstOrDefault(x => x.StartsWith("buildingSlot")).Replace("buildingSlot", ""));
                    var lvl = Convert.ToByte(vals.FirstOrDefault(x => x.StartsWith("level") && x != "level").Replace("level", ""));
                    var gid = Convert.ToByte(vals.FirstOrDefault(x => x.StartsWith("gid")).Replace("gid", ""));
                    var uc  = vals.Contains("underConstruction");

                    building.Init(aid, lvl, gid, uc);
                    resFields5.Add(building);
                }
                return(resFields5);
            }
            return(null);
        }
Exemplo n.º 5
0
        public static bool HasPlusAccount(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                var buttons = htmlDoc.DocumentNode.Descendants("button");
                var off     = buttons.FirstOrDefault(x => x.HasClass("barracksBlack"));
                if (off != null)
                {
                    return(false);
                }

                var on = buttons.FirstOrDefault(x => x.HasClass("barracksWhite"));
                if (on != null)
                {
                    return(true);
                }
                break;

            case Classificator.ServerVersionEnum.T4_5:
                var market = htmlDoc.DocumentNode.Descendants("a").FirstOrDefault(x => x.HasClass("market") && x.HasClass("round"));
                if (market == null)
                {
                    return(false);
                }

                //layoutButton buttonFramed withIcon round market green disabled  // No market, Plus account
                //layoutButton buttonFramed withIcon round market gold disabled   // No market, No plus account

                if (market.HasClass("green"))
                {
                    return(true);
                }
                if (market.HasClass("gold"))
                {
                    return(false);
                }
                break;
            }
            return(false);
        }
        public static TimeSpan GetBuildDuration(HtmlAgilityPack.HtmlNode node, Classificator.ServerVersionEnum version)
        {
            var duration = node.Descendants("div").FirstOrDefault(x => x.HasClass("duration"));

            if (duration != null)
            {
                switch (version)
                {
                case Classificator.ServerVersionEnum.T4_4:
                    return(TimeParser.ParseDuration(duration.InnerText));

                case Classificator.ServerVersionEnum.T4_5:
                    var dur = duration.Descendants("span").FirstOrDefault(x => x.HasClass("value"));
                    if (dur != null)
                    {
                        return(TimeParser.ParseDuration(dur.InnerText));
                    }
                    break;
                }
            }
            return(new TimeSpan());
        }
Exemplo n.º 7
0
        public static int GetHeroHealth(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                var health = htmlDoc.GetElementbyId("sidebarBoxHero").Descendants("div").FirstOrDefault(x => x.HasClass("bar")).Attributes.FirstOrDefault(x => x.Name == "style").Value.Split(':')[1].Replace("%", "");
                health = health.Split('.')[0];
                return((int)Parser.RemoveNonNumeric(health));

            case Classificator.ServerVersionEnum.T4_5:
                var path = htmlDoc.GetElementbyId("healthMask").Descendants("path").FirstOrDefault();
                if (path == null)
                {
                    return(0);
                }
                var commands = path.GetAttributeValue("d", "").Split(' ');
                var xx       = double.Parse(commands[commands.Length - 2]);
                var yy       = double.Parse(commands[commands.Length - 1]);

                var rad = Math.Atan2(yy - 55, xx - 55);
                return((int)Math.Round(-56.173 * rad + 96.077));
            }
            return(0);
        }
Exemplo n.º 8
0
        // JS resources.maxStorage returns capacity
        public static ResourceCapacity GetResourceCapacity(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            string WarehouseCap = "";
            string GranaryCap   = "";

            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                WarehouseCap = htmlDoc.GetElementbyId("stockBarWarehouse").InnerText;
                GranaryCap   = htmlDoc.GetElementbyId("stockBarGranary").InnerText;
                break;

            case Classificator.ServerVersionEnum.T4_5:
                var cap = htmlDoc.DocumentNode.Descendants("div").Where(x => x.HasClass("capacity")).ToList();

                WarehouseCap = cap[0].Descendants("div").FirstOrDefault(x => x.HasClass("value")).InnerText;
                GranaryCap   = cap[1].Descendants("div").FirstOrDefault(x => x.HasClass("value")).InnerText;
                break;
            }
            return(new ResourceCapacity()
            {
                WarehouseCapacity = Parser.RemoveNonNumeric(WarehouseCap),
                GranaryCapacity = Parser.RemoveNonNumeric(GranaryCap)
            });
        }
Exemplo n.º 9
0
        public static List <Adventure> GetAdventures(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            List <Adventure> adventuresList = new List <Adventure>();
            var adventures = htmlDoc.GetElementbyId("adventureListForm");

            if (adventures == null)
            {
                return(adventuresList);
            }
            foreach (var adv in adventures.Descendants("tr"))
            {
                if (string.IsNullOrEmpty(adv.Id))
                {
                    continue;
                }
                var sec         = (int)TimeParser.ParseDuration(adv.Descendants("td").FirstOrDefault(x => x.HasClass("moveTime")).InnerText).TotalSeconds;
                var coordinates = MapParser.GetCoordinates(adv.Descendants("td").FirstOrDefault(x => x.HasClass("coords")).InnerText);

                DifficultyEnum difficulty = DifficultyEnum.Normal;
                switch (version)
                {
                case ServerVersionEnum.T4_4:
                    difficulty = adv.Descendants("img").FirstOrDefault().GetAttributeValue("alt", "") == "Normal" ?
                                 DifficultyEnum.Normal : DifficultyEnum.Difficult;
                    break;

                case ServerVersionEnum.T4_5:
                    difficulty = adv.Descendants("img").FirstOrDefault().GetAttributeValue("class", "") == "adventureDifficulty1" ?
                                 DifficultyEnum.Normal : DifficultyEnum.Difficult;
                    break;
                }

                var secStr       = adv.Descendants("td").FirstOrDefault(x => x.HasClass("timeLeft"))?.InnerText;
                int secRemaining = int.MaxValue;
                if (!string.IsNullOrEmpty(secStr))
                {
                    secRemaining = (int)TimeParser.ParseDuration(secStr).TotalSeconds;
                }

                switch (version)
                {
                case Classificator.ServerVersionEnum.T4_4:
                    var href = adv.Descendants("a").FirstOrDefault(x => x.HasClass("gotoAdventure")).GetAttributeValue("href", "").Replace("amp;", "");
                    adventuresList.Add(new Adventure()
                    {
                        Coordinates     = coordinates,
                        DurationSeconds = sec,
                        TimeLeftSeconds = secRemaining,
                        Difficulty      = difficulty,
                        Ref             = href
                    });
                    break;

                case Classificator.ServerVersionEnum.T4_5:
                    var elementId = adv.Descendants("td").FirstOrDefault(x => x.HasClass("goTo")).Id;
                    adventuresList.Add(new Adventure()
                    {
                        Coordinates     = coordinates,
                        DurationSeconds = sec,
                        TimeLeftSeconds = secRemaining,
                        Difficulty      = difficulty,
                        AdventureId     = elementId
                    });
                    break;
                }
            }
            return(adventuresList);
        }
Exemplo n.º 10
0
        public static List <long> GetGoldAndSilver(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            //first gold, then silver
            List <long> ret = new List <long>();

            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                ret.Add(Parser.RemoveNonNumeric(htmlDoc.DocumentNode.Descendants("div").FirstOrDefault(x => x.HasClass("gold")).ChildNodes.FirstOrDefault(x => x.Name == "span").InnerText));
                ret.Add(Parser.RemoveNonNumeric(htmlDoc.DocumentNode.Descendants("div").FirstOrDefault(x => x.HasClass("silver")).ChildNodes.FirstOrDefault(x => x.Name == "span").InnerText));
                break;

            case Classificator.ServerVersionEnum.T4_5:
                ret.Add(Parser.RemoveNonNumeric(htmlDoc.DocumentNode.Descendants("div").FirstOrDefault(x => x.HasClass("ajaxReplaceableGoldAmount")).InnerText));
                ret.Add(Parser.RemoveNonNumeric(htmlDoc.DocumentNode.Descendants("div").FirstOrDefault(x => x.HasClass("ajaxReplaceableSilverAmount")).InnerText));
                break;
            }
            return(ret);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Gets the beginner quests
        /// </summary>
        /// <param name="htmlDoc"></param>
        /// <returns>List of beginner quests</returns>
        public static List <Quest> GetBeginnerQuests(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            List <Quest> QuestList = new List <Quest>();

            var mentor = htmlDoc.GetElementbyId("mentorTaskList");

            if (mentor == null)
            {
                return(null);
            }

            var nodes = mentor.ChildNodes.Where(x => x.Name == "li");

            foreach (var node in nodes)
            {
                Quest quest = new Quest();
                quest.finished = false;
                switch (version)
                {
                case Classificator.ServerVersionEnum.T4_5:
                    if (node.Descendants("svg").FirstOrDefault(x => x.HasClass("check")) != null)
                    {
                        quest.finished = true;
                    }
                    //quest.level  = (byte)Parser.RemoveNonNumeric(node.Attributes.FirstOrDefault(x => x.Name == "data-questid").Value);
                    quest.Id = node.Attributes.FirstOrDefault(x => x.Name == "data-questid").Value;
                    switch (node.Attributes.FirstOrDefault(x => x.Name == "data-category").Value)
                    {
                    case "battle":
                        quest.category = Category.Battle;
                        break;

                    case "economy":
                        quest.category = Category.Economy;
                        break;

                    case "world":
                        quest.category = Category.World;
                        break;
                    }
                    break;

                case Classificator.ServerVersionEnum.T4_4:
                    if (node.Descendants("img").FirstOrDefault(x => x.HasClass("finished")) != null)
                    {
                        quest.finished = true;
                    }
                    var node1 = node.ChildNodes.FirstOrDefault(x => x.Name == "a");
                    //quest.level = byte.Parse(.Split('_')[1]);
                    quest.Id = node1.Attributes.FirstOrDefault(x => x.Name == "data-questid").Value;
                    switch (node1.Attributes.FirstOrDefault(x => x.Name == "data-category").Value)
                    {
                    case "battle":
                        quest.category = Category.Battle;
                        break;

                    case "economy":
                        quest.category = Category.Economy;
                        break;

                    case "world":
                        quest.category = Category.World;
                        break;
                    }
                    break;
                }
                QuestList.Add(quest);
            }
            return(QuestList);
        }
Exemplo n.º 12
0
        public static CulturePoints GetCulurePoints(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            var slot = htmlDoc.GetElementbyId("sidebarBoxVillagelist");

            if (slot == null)
            {
                return(null);
            }
            var expensionSlotInfo = slot.Descendants("div").FirstOrDefault(x => x.HasClass("expansionSlotInfo"));

            string[] nums = { "", "" };
            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                nums = expensionSlotInfo.Descendants("div").FirstOrDefault(x => x.HasClass("boxTitleAdditional")).InnerText.Split('/');
                break;

            case Classificator.ServerVersionEnum.T4_5:
                nums = expensionSlotInfo.Descendants("span").FirstOrDefault(x => x.HasClass("slots")).InnerText.Split('/');
                break;
            }
            var percentage = expensionSlotInfo.Descendants("div").FirstOrDefault(x => x.HasClass("bar")).Attributes.FirstOrDefault(x => x.Name == "style").Value.Split(':')[1].Replace("%", "");

            percentage = percentage.Split('.')[0];

            return(new CulturePoints()
            {
                MaxVillages = (int)Parser.ParseNum(nums[1]),
                VillageCount = (int)Parser.ParseNum(nums[0]),
                NewVillagePercentage = (int)Parser.ParseNum(percentage)
            });
        }
Exemplo n.º 13
0
        public static Hero.StatusEnum HeroStatus(HtmlAgilityPack.HtmlDocument htmlDoc, Classificator.ServerVersionEnum version)
        {
            switch (version)
            {
            case Classificator.ServerVersionEnum.T4_4:
                var HeroStatus = htmlDoc.DocumentNode.Descendants("div").FirstOrDefault(x => x.HasClass("heroStatusMessage")).ChildNodes.FirstOrDefault(x => x.Name == "img").GetAttributeValue("class", "");
                switch (HeroStatus)
                {
                case "heroStatus101Regenerate":
                    return(Hero.StatusEnum.Regenerating);

                case "heroStatus101":
                    return(Hero.StatusEnum.Dead);

                case "heroStatus100":
                    return(Hero.StatusEnum.Home);

                case "heroStatus50":
                    return(Hero.StatusEnum.Away);

                default: return(Hero.StatusEnum.Unknown);
                }

            case Classificator.ServerVersionEnum.T4_5:
                var heroStatus5 = htmlDoc.DocumentNode.Descendants("div").First(x => x.HasClass("heroStatus")).Descendants().FirstOrDefault(x => x.Name == "svg");
                if (heroStatus5 == null)
                {
                    return(Hero.StatusEnum.Unknown);
                }
                var str = heroStatus5.GetClasses().FirstOrDefault();
                if (str == null)
                {
                    return(Hero.StatusEnum.Unknown);
                }
                switch (str)
                {
                case "heroRunning":
                    return(Hero.StatusEnum.Away);

                case "heroHome":
                    return(Hero.StatusEnum.Home);

                case "heroDead":
                    return(Hero.StatusEnum.Dead);

                case "heroReviving":
                    return(Hero.StatusEnum.Regenerating);

                case "heroReinforcing":
                    return(Hero.StatusEnum.Reinforcing);

                default: return(Hero.StatusEnum.Unknown);
                    //TODO ADD FOR DEAD, REGENERATING
                }
            }
            return(Hero.StatusEnum.Unknown);
        }