/// <summary>
        /// Get all farm from travianstats.de
        /// </summary>
        /// <returns></returns>
        public async static Task <List <InactiveFarm> > GetFarms(Account acc, Coordinates Coords, int Distance)
        {
            var serverUrl = acc.AccInfo.ServerUrl;
            // get serverUrl without https://
            var url = (new UriBuilder(serverUrl)).Host;

            if (!(await CheckServerSupport(acc, url)))
            {
                return(null);
            }

            var Client = acc.Wb.RestClient;

            var moreFarm = true;
            var index    = 1;
            var result   = new List <InactiveFarm>();

            while (moreFarm)
            {
                Client.BaseUrl = new Uri($"https://www.inactivesearch.it/inactives/{url}?c={Coords.x}|{Coords.y}&page={index}");
                var request  = new RestRequest(Method.GET);
                var response = await Client.ExecuteAsync(request);

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    return(null);
                }

                var doc = new HtmlAgilityPack.HtmlDocument();
                doc.LoadHtml(response.Content);

                // table
                var table = doc.DocumentNode.SelectNodes("//table[@class='table table-condensed table-inactives table-shadow']//tbody") // they use myTable for naming their table ?_?
                            .Descendants("tr")
                            .Where(tr => tr.Elements("td").Count() > 1)
                            .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim().Replace("\t", "").Replace("\n", "")).ToList())
                            .ToList();

                if (table.Count < 1)
                {
                    moreFarm = false;
                    break;
                }

                foreach (var row in table)
                {
                    try
                    {
                        var intDistance = int.Parse(row[0].Split('.').First());
                        if (intDistance > Distance)
                        {
                            moreFarm = false;
                            break;
                        }
                        result.Add(new InactiveFarm()
                        {
                            distance = intDistance,
                            coord    = MapParser.GetCoordinates(row[1]),
                            nameVill = row[2],
                            // row[3] hide village button
                            // row[4] attack button
                            population = int.Parse(row[5].Split('+').First().Split('-').First()),
                            // row[6], [7], [8], [9] population previous day
                            // row[10] icon tribe
                            namePlayer = row[11],
                            nameAlly   = row[12],
                        });
                    }
                    catch (Exception) { }
                }

                index++;
            }

            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// Get all farm from travianstats.de
        /// </summary>
        /// <param name="serverCode"></param>
        /// <returns></returns>
        public async static Task <List <InactiveFarm> > GetFarms(Account acc, Coordinates Coords, int Distance)
        {
            var ServerCode = await GetServerCode(acc);

            if (string.IsNullOrEmpty(ServerCode))
            {
                return(null);
            }

            var Client = acc.Wb.RestClient;

            Client.BaseUrl = new Uri("https://travianstats.de");
            var request = new RestRequest($"?m=inactive_finder&w={ServerCode}", Method.POST);

            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddHeader("Cookie", $"tcn_world={ServerCode}");
            request.AddParameter("m", "inactivefinder");
            request.AddParameter("w", ServerCode);
            request.AddParameter("x", $"{Coords.x}");
            request.AddParameter("y", $"{Coords.y}");
            request.AddParameter("distance", $"{Distance}");

            var response = await Client.ExecuteAsync(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                return(null);
            }

            if (response.Content.Contains("Nothing found"))
            {
                return(null);
            }

            var doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(response.Content);

            // table
            var table = doc.DocumentNode.SelectNodes("//table[@id='myTable']//tbody") // they use myTable for naming their table ?_?
                        .Descendants("tr")
                        .Where(tr => tr.Elements("td").Count() > 1)
                        .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim().Replace("\t", "").Replace("\n", "")).ToList())
                        .ToList();

            var result = new List <InactiveFarm>();

            foreach (var row in table)
            {
                try
                {
                    result.Add(new InactiveFarm()
                    {
                        //status = row[0]
                        distance   = int.Parse(row[1]),
                        coord      = MapParser.GetCoordinates(row[2]),
                        namePlayer = row[3],
                        nameAlly   = row[4],
                        nameVill   = row[5],
                        population = int.Parse(row[6])
                                     //functions = row[7]
                    });
                }
                catch (Exception) { }
            }

            return(result);
        }
        private async Task <List <InactiveFarm> > GetFarms()
        {
            var serverCode = await GetServerCode();

            if (string.IsNullOrEmpty(serverCode))
            {
                string message = "Bot was unable to find the server code! This feature is only available for normal travian servers.";
                string caption = "Error getting server code";
                MessageBox.Show(message, caption, MessageBoxButtons.OK);
                return(null);
            }

            var request = new RestRequest($"?m=inactive_finder&w={serverCode}", Method.POST);

            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddHeader("Cookie", $"tcn_world={serverCode}");
            request.AddParameter("m", "inactivefinder");
            request.AddParameter("w", serverCode);
            request.AddParameter("x", ((int)coordinatesUc1.Coords.x).ToString());
            request.AddParameter("y", ((int)coordinatesUc1.Coords.y).ToString());
            request.AddParameter("distance", ((int)Distance.Value).ToString());

            var response = await Client.ExecuteAsync(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new Exception("SendGetReq failed!\n" + response.Content);
            }

            if (response.Content.Contains("Nothing found"))
            {
                return(null);
            }

            var doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(response.Content);

            // table
            var table = doc.DocumentNode.SelectNodes("//table[@id='myTable']//tbody") // they use myTable for naming their table ?_?
                        .Descendants("tr")
                        .Where(tr => tr.Elements("td").Count() > 1)
                        .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim().Replace("\t", "").Replace("\n", "")).ToList())
                        .ToList();

            var result = new List <InactiveFarm>();

            foreach (var row in table)
            {
                try
                {
                    result.Add(new InactiveFarm()
                    {
                        //status = row[0]
                        distance   = Int32.Parse(row[1]),
                        coord      = MapParser.GetCoordinates(row[2]),
                        namePlayer = row[3],
                        nameAlly   = row[4],
                        nameVill   = row[5],
                        population = Int32.Parse(row[6])
                                     //functions = row[7]
                    });
                }
                catch (Exception) { }
            }

            return(result);
        }