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); } } }
// �����г�ҳ�� 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); } } }