/// <summary> /// Retrieves note information for hunting horns. /// </summary> /// <param name="notes">An array of ints corresponding to the horn's note values.</param> /// <param name="sword_id">The ID of the hunting horn in the database.</param> /// <returns>Returns a hunting horn object.</returns> public HuntingHorn GetHuntingHorn(int[] notes, int sword_id) { string notestring = ""; foreach (int note in notes) { switch (note) { case 1: notestring += "white "; break; case 2: notestring += "purple "; break; case 3: notestring += "red "; break; case 4: notestring += "blue "; break; case 5: notestring += "green "; break; case 6: notestring += "yellow "; break; case 7: notestring += "light_blue "; break; } } notestring = notestring.Trim().Replace(" ", ", "); HuntingHorn horn = new HuntingHorn() { sword_id = sword_id, notes = notestring }; return(horn); }
/// <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); } }