コード例 #1
0
ファイル: TVillage.cs プロジェクト: lewispoiuy/TravianTool
 public void tick(TVillage CV, int MarketSpeed)
 {
     for (int i = MarketInfo.Count - 1; i >= 0; i--)
     {
         TMInfo x = MarketInfo[i];
         if (x.FinishTime > DateTime.Now)
         {
             continue;
         }
         if (x.MType == TMType.MyBack)
         {
             MarketInfo.Remove(x);
             if (SingleCarry == 0)
             {
                 continue;
             }
             Console.WriteLine(DateTime.Now.ToLongTimeString() + " " + ActiveMerchant.ToString());
             ActiveMerchant += Convert.ToInt32(Math.Ceiling((double)(x.CarryAmount.Resources[0] + x.CarryAmount.Resources[1] + x.CarryAmount.Resources[2] + x.CarryAmount.Resources[3]) / SingleCarry));
             Console.WriteLine(DateTime.Now.ToLongTimeString() + " " + ActiveMerchant.ToString());
         }
         else if (x.MType == TMType.MyOut)
         {
             x.MType = TMType.MyBack;
             var distance = CV.Coord * x.Coord;
             var time     = distance * 3600 / MarketSpeed;
             try
             {
                 x.FinishTime = x.FinishTime.AddSeconds(time);
             }
             catch (Exception ex)
             {
                 throw new InvalidOperationException(
                           string.Format("{0}\r\nMarketSpeed:{1}\r\nMyCoord:{2}\r\nTargetCoord:{3}",
                                         ex.Message, MarketSpeed, CV.Coord, x.Coord));
             }
         }
         else
         {
             for (int j = 0; j < 4; j++)
             {
                 CV.Resource[j].Write(CV.Resource[j].CurrAmount + x.CarryAmount.Resources[j]);
             }
             MarketInfo.Remove(x);
         }
     }
 }
コード例 #2
0
ファイル: NewParser.cs プロジェクト: churchillyik/TravianTool
        //    �����г�ҳ��
        private void NewParseMarket(int VillageID, string data)
        {
            if (this.GetBuildingLevel(17, data) < 0)
                return;

            var CV = TD.Villages[VillageID];

            if (Market[0] == Market[1])
                Market[0] = null;

            Match m = Regex.Match(data, "var carry = (\\d+);");
            if (!m.Success)
            {
                return;
            }

            int MCarry = Convert.ToInt32(m.Groups[1].Value);

            m = Regex.Match(data, "<div class=\"boxes-contents[^\"]*?\">[^\\d]*?(\\d+)</span>\\s/\\s(\\d+)\\s*?</div>"
                            , RegexOptions.Singleline);
            if (!m.Success)
            {
                return;
            }

            int MCount = Convert.ToInt32(m.Groups[1].Value);
            int MLevel = Convert.ToInt32(m.Groups[2].Value);

            CV.Market.ActiveMerchant = MCount;
            CV.Market.SingleCarry = MCarry;
            CV.Market.MaxMerchant = MLevel;

            // Market: 0 as other, 1 as my
            string t1 = "<h4 class=";
            string[] sp = data.Split(new string[] { t1 }, StringSplitOptions.None);

            CV.Market.MarketInfo.Clear();
            for (int i = 1; i < sp.Length; i++)
            {
                string[] MarketTables = HtmlUtility.GetElementsWithClass(
                    sp[i], "table", "traders");

                for (int j = 0; j < MarketTables.Length; j++)
                {
                    //	���������߲���
                    string traders_seg = HtmlUtility.GetElement(MarketTables[j], "thead");
                    if (traders_seg == null)
                        continue;

                    m = Regex.Match(traders_seg
                                    , "<a href=\"spieler.php\\?uid=\\d+\">(.*?)</a>");
                    if (!m.Success)
                        continue;
                    string Username = m.Groups[1].Value;

                    int TargetPos = 801 * 400 + 401;
                    string TargetVName = Username;
                    m = Regex.Match(traders_seg
                                    , "<a href=\"karte.php\\?d=(\\d+)\">([^<]+)</a>");
                    if (m.Success)
                    {
                        TargetPos = Convert.ToInt32(m.Groups[1].Value);
                        TargetVName = m.Groups[2].Value;
                    }

                    //	������������ʱ��IJ���
                    string arrival_seg = HtmlUtility.GetElementWithClass(MarketTables[j], "div", "in");
                    if (arrival_seg == null)
                        continue;

                    m = Regex.Match(arrival_seg, "<span id=\"timer\\d+\">([^<]*?)</span>", RegexOptions.Singleline);
                    if (!m.Success)
                        continue;
                    string arr_time = m.Groups[1].Value;

                    //	������Դ���͵IJ���
                    string resource_seg = HtmlUtility.GetElementWithClass(MarketTables[j], "tr", "res");
                    MatchCollection mc = Regex.Matches(resource_seg, "<img[^>]*?>\\s(\\d+)");
                    if (mc.Count != 4)
                        continue;
                    int[] am = new int[4];
                    int k = 0;
                    foreach (Match m_res in mc)
                    {
                        am[k] = Convert.ToInt32(m_res.Groups[1].Value);
                        k++;
                    }

                    //	�����������Ͳ���
                    TMType MType;
                    m = Regex.Match(resource_seg, "<span class=\"none\">");
                    if (m.Success)
                    {
                        MType = TMType.MyBack;
                    }
                    else
                    {
                        m = Regex.Match(resource_seg, "<td colspan=\"\\d+\"><span>");
                        if (m.Success)
                        {
                            MType = TMType.OtherCome;
                        }
                        else
                        {
                            MType = TMType.MyOut;
                        }
                    }
                    //	��ӽ����ͼ���
                    TMInfo m_info = new TMInfo()
                    {
                        Coord = TargetPos,
                        VillageName = TargetVName,
                        MType = MType,
                        CarryAmount = new TResAmount(am),
                        FinishTime = DateTime.Now.Add(TimeSpanParse(arr_time)).AddSeconds(15)
                    };
                    CV.Market.MarketInfo.Add(m_info);
                }

            }
        }