protected override List<Digimon> GetDigimons(Tamer tamer, bool isDetailed)
{
if (LogManager != null) {
LogManager.InfoFormat("Obtaining digimons for tamer \"{0}\"", tamer.Name);
}
List<Digimon> digimonList = new List<Digimon>();
HtmlDocument doc = new HtmlDocument();
string html = DownloadContent(string.Format(STR_URL_TAMER_POPPAGE, tamer.AccountId, tamer.Guild.Server.Identifier));
doc.LoadHtml(html);
//getting starter
Digimon partner;
try {
partner = new Digimon() {
Tamer = tamer,
Name = ClearStr(doc.DocumentNode.SelectSingleNode("//div[1]//div[2]//div[2]//table[1]//tr[1]//td[2]//table[1]//tr[3]//td[2]//b").InnerText),
SizePc = 100
};
} catch {
return digimonList;
}
DigimonType type = null;
using (IDatabaseContext context = DatabaseManager.CreateContext()) {
type = context.FindDigimonTypeBySearchKDMO(context.PrepareDigimonSearch(partner.Name));
}
if (type != null) {
partner.Type = type;
partner.Name = type.Name;
partner.SizeCm = type.SizeCm;
}
digimonList.Add(partner);
if (!GetStarterInfo(ref partner, tamer)) {
if (LogManager != null) {
LogManager.ErrorFormat("Unable to obtain info about starter digimon \"{0}\" for tamer \"{1}\"", partner.Name, tamer.Name);
}
}
HtmlNode mercList = doc.DocumentNode.SelectNodes("//table[@class='list']")[1];
HtmlNodeCollection dlist = mercList.SelectNodes(".//tr");
if (dlist != null) {
using (IDatabaseContext context = DatabaseManager.CreateContext()) {
for (int i = 1; i < dlist.Count; i++) {
Digimon digimonInfo = new Digimon() {
Tamer = tamer,
Name = ClearStr(dlist[i].SelectSingleNode(".//td[1]").InnerText),
Level = Convert.ToByte(ClearStr(dlist[i].SelectSingleNode(".//td[2]//label").InnerText))
};
string rank = string.Empty;
foreach (char c in ClearStr(dlist[i].SelectSingleNode(".//td[3]//label").InnerText)) {
if (Char.IsDigit(c)) {
rank += c;
} else {
break;
}
}
digimonInfo.Rank = Convert.ToInt32(rank);
digimonInfo.Type = context.FindDigimonTypeBySearchKDMO(context.PrepareDigimonSearch(digimonInfo.Name));
if (digimonInfo.Type == null) {
continue;
}
digimonInfo.Name = digimonInfo.Type.Name;
digimonInfo.SizeCm = digimonInfo.Type.SizeCm;
if (digimonList.Count(d => d.Type.Equals(digimonInfo.Type)) == 0) {
if (isDetailed) {
if (!GetMercenaryInfo(ref digimonInfo, tamer)) {
if (LogManager != null) {
LogManager.ErrorFormat("Unable to obtain detailed data of digimon \"{0}\" for tamer \"{1}\"", digimonInfo.Name, tamer.Name);
}
}
}
digimonList.Add(digimonInfo);
if (LogManager != null) {
LogManager.InfoFormat("Found digimon \"{0}\"", digimonInfo.Name);
}
}
}
}
}
return digimonList;
}