public async Task GetArmors(string address) { var config = Configuration.Default.WithDefaultLoader(); var context = BrowsingContext.New(config); var page = await context.OpenAsync(address); var rows = page.QuerySelector(".table").QuerySelectorAll("tr.table-active"); int throttle = 3; await db.CreateTablesAsync <Armor, ArmorSkill, ArmorCraftItem, ArmorScrapReward, ArmorUpgradeItem>(); List <Task> tasks = new List <Task>(); foreach (var row in rows) { string addr = ((IHtmlAnchorElement)row.NextElementSibling.FirstElementChild.FirstElementChild).Href; tasks.Add(GetArmor(addr)); if (tasks.Count == throttle) { Task completed = await Task.WhenAny(tasks); tasks.Remove(completed); } } await Task.WhenAll(tasks); ConsoleWriters.CompletionMessage($"\nFinished with page! ({address}).\n"); }
public async Task <PalicoArmor> GetPalicoArmor(string address) { var page = await context.OpenAsync(address); var basicinfo = page.QuerySelector("[itemprop=\"gameItem\"]"); string name = basicinfo.FirstElementChild.TextContent; string description = basicinfo.Children[1].TextContent; ConsoleWriters.StartingPageMessage($"Started on the {name} palico armor."); var leads = page.QuerySelectorAll(".lead"); int rarity = leads[0].TextContent.ToInt(); int price = leads[1].TextContent.ToInt(); int[] defense_info = page.QuerySelector(".table").Children[1].QuerySelectorAll("td").Select(d => d.TextContent.ToInt()).ToArray(); PalicoArmor armor = new PalicoArmor() { pa_name = name, pa_description = description, pa_rarity = rarity, pa_price = price, pa_defense = defense_info[0], pa_fire = defense_info[1], pa_water = defense_info[2], pa_thunder = defense_info[3], pa_ice = defense_info[4], pa_dragon = defense_info[5], craft_items = new List <PalicoCraftItem>() }; var craft_table = page.QuerySelector(".table-sm").FirstElementChild.QuerySelectorAll("td"); armor.craft_items = GetPalicoCrafts(craft_table, armor.pa_name, "armor"); ConsoleWriters.CompletionMessage($"Finished adding the {name} palico armor!"); return(armor); }
public async Task GetArmor(string address) { IConfiguration config = Configuration.Default.WithDefaultLoader(l => l.IsResourceLoadingEnabled = true).WithCss(); IBrowsingContext context = BrowsingContext.New(config); var page = await context.OpenAsync(address); SetInfo setinfo = GetSetInfo(page); ConsoleWriters.StartingPageMessage($"Starting the {setinfo.armor_set} set."); var tables = page.QuerySelectorAll(".table"); var defense_trs = tables[0].QuerySelectorAll("tbody tr").SkipLast(1); var skill_table = tables[1].Children[1].Children.ToArray(); var create_table = tables[2].Children[1].Children.ToArray(); var upgrade_table = tables[4].Children[1].Children.ToArray(); // Skip the last tr, because that is the total foreach (var tr in defense_trs) { DefenseInfo definfo = GetArmorPieceDefenseInfo(tr); int tr_index = tr.ParentElement.Children.Index(tr); ArmorSkillInfo asi = GetArmorSkills(skill_table[tr_index]); Armor piece = new Armor() { armor_name = definfo.armor_name, armor_set = setinfo.armor_set, armor_description = setinfo.piece_descriptions[tr_index], rarity = setinfo.rarity, max_upgrade = setinfo.max_upgrade, monster_id = setinfo.monster_id, is_blademaster = setinfo.is_blademaster, is_gunner = setinfo.is_gunner, is_male = setinfo.is_male, is_female = setinfo.is_female, min_armor_defense = definfo.min_defense, max_armor_defense = definfo.max_defense, fire_def = definfo.fire_defense, water_def = definfo.water_defense, thunder_def = definfo.thunder_defense, ice_def = definfo.ice_defense, dragon_def = definfo.dragon_def, slots = asi.slots, }; await db.InsertAsync(piece); foreach (ArmorSkill skill in asi.skills) { skill.armor_id = piece.armor_id; } await Task.WhenAll( db.InsertAllAsync(asi.skills), db.InsertAllAsync(GetArmorScraps(create_table[tr_index], "create", piece.armor_id)), db.InsertAllAsync(GetArmorScraps(upgrade_table[tr_index], "upgrade", piece.armor_id)), db.InsertAllAsync(GetArmorCrafts(create_table[tr_index], piece.armor_id)), db.InsertAllAsync(GetArmorUpgradeItems(upgrade_table[tr_index], piece.armor_id)) ); } ConsoleWriters.CompletionMessage($"Finished with the {setinfo.armor_set} set!"); }
public PalicoSkill GetPalicoSkill(IElement tr) { string name = tr.Children[0].TextContent; ConsoleWriters.StartingPageMessage($"Retrieving the palico skill {name}."); string type = ""; switch (tr.Children[1].FirstElementChild.ClassList[2]) { case "text-danger": type = "offensive"; break; case "text-info": type = "defensive"; break; case "text-warning": type = "passive"; break; } int memory = 0; foreach (var span in tr.Children[1].Children) { memory += 1; } int level = tr.Children[2].TextContent.ToInt(); string description = tr.Children[3].TextContent; ConsoleWriters.CompletionMessage($"Finished with the palico skill {name}!"); return(new PalicoSkill() { ps_description = description, ps_learn_level = level, ps_memory_req = memory, ps_name = name, ps_type = type }); }
static void Main(string[] args) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); TimeSpan timeSpan = new TimeSpan(); if (args.Contains("--items") || args.Contains("--all") || args.Length == 0) { var itemManager = new Items(); itemManager.GetItemList().Wait(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); Console.WriteLine("\n\nFinished with items! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Reset(); stopwatch.Start(); } if (args.Contains("--monsters") || args.Contains("--all") || args.Length == 0) { var monManager = new Monsters(); Console.WriteLine("Starting monster data retrieval."); monManager.GetMonsters().Wait(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); Console.WriteLine("Done with monsters! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Reset(); stopwatch.Start(); } if (args.Contains("--quests") || args.Contains("--all") || args.Length == 0) { var questManager = new Quests(); Console.WriteLine("Starting quest data retrieval."); questManager.GetQuests("http://mhgen.kiranico.com/quest/village").Wait(); questManager.GetQuests("http://mhgen.kiranico.com/quest/guild").Wait(); questManager.GetQuests("http://mhgen.kiranico.com/quest/arena").Wait(); questManager.GetQuests("http://mhgen.kiranico.com/quest/training").Wait(); questManager.GetQuests("http://mhgen.kiranico.com/quest/special-permit").Wait(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); Console.WriteLine("Done with all quests! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Reset(); stopwatch.Start(); } if (args.Contains("--weapons") || args.Contains("--all") || args.Length == 0) { Stopwatch indiv_weapon_watch = new Stopwatch(); var weaponManager = new Weapons(); string[] weaponurls = new string[] { "heavybowgun", "lightbowgun", "bow", "gunlance", "chargeblade", "switchaxe", "huntinghorn", "dualblades", "greatsword", "longsword", "swordshield", "hammer", "lance", "insectglaive" }; indiv_weapon_watch.Start(); foreach (string category in weaponurls) { ConsoleWriters.InfoMessage($"Starting {category} retrieval..."); weaponManager.GetWeapons($"http://mhgen.kiranico.com/{category}").Wait(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(indiv_weapon_watch.Elapsed.TotalSeconds)); ConsoleWriters.InfoMessage($"Done with {category}s! Took {timeSpan.ToString("c")}.\n\n"); indiv_weapon_watch.Restart(); } indiv_weapon_watch.Stop(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); ConsoleWriters.InfoMessage("Done with all weapons! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Restart(); } if (args.Contains("--skills") || args.Contains("--all") || args.Length == 0) { var skillManager = new Skills(); ConsoleWriters.InfoMessage("Starting skill retrieval...\n\n"); skillManager.GetSkills("http://mhgen.kiranico.com/skill").Wait(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); ConsoleWriters.InfoMessage("Done with all skills! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Restart(); } if (args.Contains("--arts") || args.Contains("--all") || args.Length == 0) { var artManager = new HunterArts(); ConsoleWriters.InfoMessage("Starting hunter art retrieval...\n\n"); artManager.GetArts("http://mhgen.kiranico.com/hunter-art").Wait(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); ConsoleWriters.InfoMessage("Done with all hunter arts! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Restart(); } if (args.Contains("--decorations") || args.Contains("--all") || args.Length == 0) { var decoManager = new Decorations(); ConsoleWriters.InfoMessage("Starting decoration retrieval...\n\n"); decoManager.GetDecorations("http://mhgen.kiranico.com/decoration").Wait(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); ConsoleWriters.InfoMessage("Done with all decorations! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Restart(); } if (args.Contains("--armor") || args.Contains("--all") || args.Length == 0) { var armor = new Armors(); for (int i = 1; i < 9; i++) { armor.GetArmors($"http://mhgen.kiranico.com/armor?rare={i}").Wait(); } timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); ConsoleWriters.InfoMessage("Done with all armors! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Restart(); } if (args.Contains("--palico-skills") || args.Contains("--all") || args.Length == 0) { var palico = new Palicoes(); ConsoleWriters.StartingPageMessage("Starting palico skill retrieval...\n\n"); palico.GetPalicoSkills("http://mhgen.kiranico.com/palico-skill").Wait(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); ConsoleWriters.InfoMessage("Done with all palico skills! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Restart(); } if (args.Contains("--palico-armor") || args.Contains("--all") || args.Length == 0) { var palico = new Palicoes(); ConsoleWriters.StartingPageMessage("Starting palico armor retrieval...\n\n"); for (int i = 1; i < 5; i++) { palico.GetPalicoArmors($"http://mhgen.kiranico.com/palico-armor?page={i}").Wait(); } timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); ConsoleWriters.InfoMessage("Done with all palico armors! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Restart(); } if (args.Contains("--palico-weapons") || args.Contains("--all") || args.Length == 0) { var palico = new Palicoes(); ConsoleWriters.StartingPageMessage("Starting palico weapon retrieval...\n\n"); palico.GetPalicoWeapons("http://mhgen.kiranico.com/palico-weapon").Wait(); timeSpan = TimeSpan.FromSeconds(Convert.ToInt32(stopwatch.Elapsed.TotalSeconds)); ConsoleWriters.InfoMessage("Done with all palico weapons! Took " + timeSpan.ToString("c") + ".\n\n"); stopwatch.Restart(); } stopwatch.Stop(); }
public static void Main(string[] args) { string command = string.Empty; Fields.CreateAllFields(); int pointsCounter = 0; bool flagMineExploaded = false; // Player alex = new Player("Alexander", 0); // Player todor = new Player("Todor", 0); // Player pesho = new Player("Peter", 0); // Score.players.Add(alex); // Score.players.Add(todor); // Score.players.Add(pesho); int row = 0; int col = 0; bool flagGameLost = true; bool flagGameWon = false; do { if (flagGameLost) { ConsoleWriters.PrintString("Hajde da igraem na “Mini4KI”. Probvaj si kasmeta da otkriesh poleteta bez mini4ki." + " Komanda 'top' pokazva klasiraneto, 'restart' po4va nova igra, 'exit' izliza i hajde 4ao!"); ConsoleWriters.PrintTheField(Fields.User); flagGameLost = false; } ConsoleWriters.PrintString("Daj red i kolona : "); command = Console.ReadLine().Trim(); if (command.Length >= 3) { if (int.TryParse(command[0].ToString(), out row) && int.TryParse(command[2].ToString(), out col) && row <= Fields.User.GetLength(0) && col <= Fields.User.GetLength(1)) { command = "turn"; } } switch (command) { case "top": ConsoleWriters.PrintAllPlayersRanking(Score.GetAllPlayersRanking()); break; case "restart": Fields.CreateAllFields(); ConsoleWriters.PrintTheField(Fields.User); flagMineExploaded = false; flagGameLost = false; break; case "exit": ConsoleWriters.PrintString("4a0, 4a0, 4a0!"); break; case "turn": if (Fields.Bombs[row, col] != '*') { if (Fields.Bombs[row, col] == '-') { NextTurn(Fields.User, Fields.Bombs, row, col); pointsCounter++; } if (MaxScore == pointsCounter) { flagGameWon = true; } else { ConsoleWriters.PrintTheField(Fields.User); } } else { flagMineExploaded = true; } break; default: ConsoleWriters.PrintString("\nGreshka! nevalidna Komanda\n"); break; } if (flagMineExploaded) { ConsoleWriters.PrintTheField(Fields.Bombs); string tempString = string.Format("\nHrrrrrr! Umria gerojski s {0} to4ki. Daj si niknejm: ", pointsCounter); ConsoleWriters.PrintString(tempString); string nickName = Console.ReadLine(); Player playerToBeAddedToScoreResults = new Player(nickName, pointsCounter); if (Score.Players.Count < 5) { Score.Players.Add(playerToBeAddedToScoreResults); } else { for (int i = 0; i < Score.Players.Count; i++) { if (Score.Players[i].Points < playerToBeAddedToScoreResults.Points) { Score.Players.Insert(i, playerToBeAddedToScoreResults); Score.Players.RemoveAt(Score.Players.Count - 1); break; } } } Score.Players.Sort((Player r1, Player r2) => r2.Name.CompareTo(r1.Name)); Score.Players.Sort((Player r1, Player r2) => r2.Points.CompareTo(r1.Points)); ConsoleWriters.PrintAllPlayersRanking(Score.GetAllPlayersRanking()); Fields.CreateAllFields(); pointsCounter = 0; flagMineExploaded = false; flagGameLost = true; } if (flagGameWon) { ConsoleWriters.PrintString("\nBRAVOOOS! Otvri 35 kletki bez kapka kryv."); ConsoleWriters.PrintTheField(Fields.Bombs); ConsoleWriters.PrintString("Daj si imeto, batka: "); string nickName = Console.ReadLine(); Player to4kii = new Player(nickName, pointsCounter); Score.Players.Add(to4kii); ConsoleWriters.PrintAllPlayersRanking(Score.GetAllPlayersRanking()); Fields.CreateAllFields(); pointsCounter = 0; flagGameWon = false; flagGameLost = true; } }while (command != "exit"); ConsoleWriters.PrintOnExitMessage(); }
/// <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 <PalicoWeapon> GetPalicoWeapon(string address, string weapon_type, string weapon_damage_type) { var page = await context.OpenAsync(address); var basicinfo = page.QuerySelector("[itemprop=\"gameItem\"]"); string name = basicinfo.FirstElementChild.TextContent; string description = basicinfo.Children[1].TextContent; ConsoleWriters.StartingPageMessage($"Started on the {name} palico weapon."); var leads = page.QuerySelectorAll(".lead"); int rarity = leads[0].TextContent.ToInt(); int price = leads[1].TextContent.ToInt(); var damage_tr = page.QuerySelector(".table").QuerySelectorAll("tr")[1]; var melee_data = damage_tr.FirstElementChild.QuerySelectorAll("div"); int melee_dmg = melee_data[0].TextContent.ToInt(); int melee_affinity = melee_data[1].TextContent.ToInt(); string sharpness = damage_tr.QuerySelector("span").ClassName; string melee_element = "none"; int melee_elem_amount = 0; if (damage_tr.Children[2].TextContent.Replace(" ", "") != "") { melee_element = damage_tr.Children[2].TextContent.Trim().Split(' ')[1]; melee_elem_amount = damage_tr.Children[2].TextContent.ToInt(); } var boom_data = damage_tr.Children[3].QuerySelectorAll("div"); int boom_dmg = boom_data[0].TextContent.ToInt(); int boom_affinity = boom_data[1].TextContent.ToInt(); string boom_element = "none"; int boom_elem_amount = 0; if (damage_tr.Children[4].TextContent.Replace(" ", "") != "") { boom_element = damage_tr.Children[4].TextContent.Trim().Split(' ')[1]; boom_elem_amount = damage_tr.Children[4].TextContent.ToInt(); } int defense = damage_tr.LastElementChild.TextContent.ToInt(); PalicoWeapon weapon = new PalicoWeapon() { pw_name = name, pw_description = description, pw_affinity = melee_affinity, pw_boomerang_affinity = boom_affinity, pw_boomerang_damage = boom_dmg, pw_boomerang_element = boom_element, pw_boomerang_element_amt = boom_elem_amount, pw_damage = melee_dmg, pw_damage_type = weapon_damage_type, pw_defense = defense, pw_element = melee_element, pw_element_amt = melee_elem_amount, pw_price = price, pw_rarity = rarity, pw_sharpness = sharpness, pw_type = weapon_type }; var craft_table = page.QuerySelector(".table-sm").FirstElementChild.QuerySelectorAll("td"); weapon.craft_items = GetPalicoCrafts(craft_table, name, "weapon"); ConsoleWriters.CompletionMessage($"Finished adding the {name} palico weapon!"); return(weapon); }