public async Task GetBow(string address) { var config = Configuration.Default.WithDefaultLoader(l => l.IsResourceLoadingEnabled = true).WithCss(); var context = BrowsingContext.New(config); var page = await context.OpenAsync(address); string[] flav = Weapons.GetFlavorText(page); string bow_set_name = page.QuerySelector("title").TextContent.Split('/')[0].Trim(); var crafting_table = page.QuerySelectorAll(".table")[1].QuerySelector("tbody"); int current_wpn_index = 0; foreach (var tr in page.QuerySelector(".table").QuerySelectorAll("tr")) { string weapon_name = tr.FirstElementChild.TextContent; int weapon_damage = Convert.ToInt32(tr.Children[1].TextContent); List <ElementDamage> elements = new List <ElementDamage>(); int affinity = 0; foreach (var small in tr.Children[2].QuerySelectorAll("small")) { if (small.TextContent.Any(char.IsLetter)) { elements.Add(Weapons.GetElement(small)); } else { affinity = Convert.ToInt32(intsOnly.Replace(small.TextContent.Trim(), "")); } } string[] bow_shots = GetBowShots(tr); string supported_coatings = GetBowCoatings(tr); int slots = tr.Children[5].FirstElementChild.TextContent.Count(c => c == '◯'); int monsterid = -1; if (page.QuerySelectorAll(".lead").Count() == 3) { monsterid = (await Monsters.GetMonsterFromDB(page.QuerySelectorAll(".lead")[2].TextContent.Trim())).id; } Bow bow = new Bow() { monster_id = monsterid, bow_set_name = bow_set_name, bow_name = weapon_name, bow_damage = weapon_damage, affinity = affinity, arc_type = bow_shots[0].Split(":")[1].Trim(), level_one_charge = bow_shots[1], level_two_charge = bow_shots[2], level_three_charge = bow_shots[3], level_four_charge = bow_shots[4], supported_coatings = supported_coatings, slots = slots, rarity = Convert.ToInt32(flav[4]), description = weapon_name.Contains(flav[0]) ? flav[2] : flav[3] }; await db.InsertAsync(bow); List <CraftItem> craftitems = Weapons.GetCraftItems(crafting_table.Children[current_wpn_index]); foreach (CraftItem item in craftitems) { item.creation_id = bow.bow_id; item.creation_type = "Bow"; } foreach (ElementDamage element in elements) { element.weapon_id = bow.bow_id; } await db.InsertAllAsync(craftitems); current_wpn_index++; } }
/// <summary> /// Retrieves weapon information for all blademaster weapons. /// </summary> /// <param name="address">The URL of the weapon.</param> /// <param name="notes">If the weapon is a hunting horn, this is the int array containing the note information.</param> public async Task GetBlademasterWeapon(string address, int[] notes = null) { try { var config = Configuration.Default.WithDefaultLoader(l => l.IsResourceLoadingEnabled = true).WithCss(); var context = BrowsingContext.New(config); var page = await context.OpenAsync(address); string[] flav = Weapons.GetFlavorText(page); var crafting_table = page.QuerySelectorAll(".table")[1].QuerySelector("tbody"); int current_wpn_index = 0; foreach (var tr in page.QuerySelector(".table").QuerySelectorAll("tr")) { SwordValues sv = await GetSwordAttributes(page, tr, crafting_table, current_wpn_index); List <SharpnessValue> sharpvalues = GetSharpness(tr); await db.InsertAllAsync(sharpvalues); sv.sharp_0_id = sharpvalues[0].sharp_id; sv.sharp_1_id = sharpvalues[1].sharp_id; sv.sharp_2_id = sharpvalues[2].sharp_id; sv.sword_set_name = flav[0]; sv.description = sv.sword_name.Contains(flav[0]) ? flav[2] : flav[3]; bool already_inserted = false; if (address.Contains("/greatsword/")) { sv.sword_class = "Great Sword"; } else if (address.Contains("/longsword/")) { sv.sword_class = "Long Sword"; } else if (address.Contains("/swordshield/")) { sv.sword_class = "Sword & Shield"; } else if (address.Contains("/hammer/")) { sv.sword_class = "Hammer"; } else if (address.Contains("/lance/")) { sv.sword_class = "Great Sword"; } else if (address.Contains("/insectglaive/")) { sv.sword_class = "Insect Glaive"; } else if (address.Contains("/dualblades/")) { sv.sword_class = "Dual Blades"; } else if (spblade_weapons.Any(b => address.Contains(b))) { if (address.Contains("/chargeblade/")) { sv.sword_class = "Charge Blade"; } else if (address.Contains("/switchaxe/")) { sv.sword_class = "Switch Axe"; } else if (address.Contains("/gunlance/")) { sv.sword_class = "Gunlance"; } await db.InsertAsync(sv); already_inserted = true; string phialtype = GetPhialType(tr, sv.sword_class); PhialOrShellWeapon weapon = new PhialOrShellWeapon() { sword_id = sv.sword_id, phial_or_shell_type = phialtype }; await db.InsertAsync(weapon); } else if (address.Contains("/huntinghorn/") && notes != null) { sv.sword_class = "Hunting Horn"; await db.InsertAsync(sv); already_inserted = true; HuntingHorn horn = GetHuntingHorn(notes, sv.sword_id); await db.InsertAsync(horn); } if (!already_inserted) { try { await db.InsertAsync(sv); } catch (SQLiteException) { ConsoleWriters.ErrorMessage($"{sv.sword_name} is already in the database!"); } } List <CraftItem> craftitems = Weapons.GetCraftItems(crafting_table.Children[current_wpn_index]); foreach (CraftItem item in craftitems) { item.creation_id = sv.sword_id; item.creation_type = "Blademaster"; } foreach (ElementDamage element in sv.element) { element.weapon_id = sv.sword_id; } await db.InsertAllAsync(sv.element); await db.InsertAllAsync(craftitems); current_wpn_index++; } } catch (Exception ex) { ConsoleWriters.ErrorMessage(ex.ToString()); await GetBlademasterWeapon(address, notes); } }
public async Task GetBowgun(string address) { var config = Configuration.Default.WithDefaultLoader(l => l.IsResourceLoadingEnabled = true).WithCss(); var context = BrowsingContext.New(config); var page = await context.OpenAsync(address); string[] flav = Weapons.GetFlavorText(page); string title = page.QuerySelector("title").TextContent; string bg_set_name = title.Split('/')[0].Trim(); string bg_type = "Heavy Bowgun"; if (address.Contains("lightbowgun")) { bg_type = "Light Bowgun"; } var crafting_table = page.QuerySelectorAll(".table")[1].QuerySelector("tbody"); int current_wpn_index = 0; foreach (var tr in page.QuerySelector(".table").QuerySelectorAll("tr")) { string weapon_name = tr.FirstElementChild.TextContent; int weapon_damage = Convert.ToInt32(tr.Children[1].TextContent); List <ElementDamage> elements = new List <ElementDamage>(); int affinity = 0; foreach (var small in tr.Children[2].QuerySelectorAll("small").Skip(1)) { if (small.TextContent.Any(char.IsLetter)) { elements.Add(Weapons.GetElement(small)); } else { affinity = Convert.ToInt32(intsOnly.Replace(small.TextContent.Trim(), "")); } } string[] gun_characteristics = GetBowgunInformation(tr); int slots = tr.Children[5].FirstElementChild.TextContent.Count(c => c == '◯'); int monsterid = -1; if (page.QuerySelectorAll(".lead").Count() == 3) { monsterid = (await Monsters.GetMonsterFromDB(page.QuerySelectorAll(".lead")[2].TextContent.Trim())).id; } Bowgun bowgun = new Bowgun() { monster_id = monsterid, bg_set_name = bg_set_name, bg_type = bg_type, bg_name = weapon_name, bg_damage = weapon_damage, affinity = affinity, slots = slots, rarity = Convert.ToInt32(flav[4]), reload_speed = gun_characteristics[0], recoil = gun_characteristics[1], deviation = gun_characteristics[2], description = weapon_name.Contains(flav[0]) ? flav[2] : flav[3] }; await db.InsertAsync(bowgun); BowgunAmmo ba = GetBowgunAmmo(tr); ba.bowgun_id = bowgun.bg_id; await db.InsertAsync(ba); List <InternalBowgunAmmo> iba = GetInternalAmmo(tr); foreach (InternalBowgunAmmo ammo in iba) { ammo.bowgun_id = bowgun.bg_id; } await db.InsertAllAsync(iba); List <SpecialBowgunAmmo> sba = GetSpecialAmmo(tr); foreach (SpecialBowgunAmmo ammo in sba) { ammo.bowgun_id = bowgun.bg_id; } await db.InsertAllAsync(sba); List <CraftItem> craftitems = Weapons.GetCraftItems(crafting_table.Children[current_wpn_index]); foreach (CraftItem item in craftitems) { item.creation_id = bowgun.bg_id; item.creation_type = "Bowgun"; } foreach (ElementDamage element in elements) { element.weapon_id = bowgun.bg_id; } await db.InsertAllAsync(craftitems); current_wpn_index++; } }