Esempio n. 1
0
        /// <summary>
        /// Gets general weapon information. Blademaster only.
        /// </summary>
        /// <param name="page">The IDocument holding the page information.</param>
        /// <param name="wrapper">The table row element holding the weapon information.</param>
        /// <param name="crafting">The table containing information on price, upgrades, and items.</param>
        /// <param name="current_index">The index of the wrapper element in its parent table.</param>
        /// <returns>Returns a SwordValues object containing the retrieved information.</returns>
        public async Task <SwordValues> GetSwordAttributes(IDocument page, IElement wrapper, IElement crafting, int current_index)
        {
            string weapon_name   = wrapper.FirstElementChild.TextContent;
            int    weapon_damage = Convert.ToInt32(wrapper.Children[1].TextContent);
            var    techinfo      = wrapper.Children[5];
            int    slots         = techinfo.FirstElementChild.TextContent.Count(c => c == '◯');
            int    rarity        = Convert.ToInt32(techinfo.Children[1].TextContent.Trim().Replace("RARE", ""));
            string upgrades_into = "none";
            var    upgradeinfo   = crafting.Children[current_index].QuerySelectorAll("td");

            if (upgradeinfo[0].QuerySelector(".font-weight-bold") != null)
            {
                upgrades_into = String.Join(" & ", upgradeinfo[0].QuerySelectorAll("a").Select(a => a.TextContent.Trim()));
            }
            List <ElementDamage> elements = new List <ElementDamage>();
            int affinity = 0;

            foreach (var small in wrapper.Children[2].QuerySelectorAll("small"))
            {
                if (small.TextContent.Any(char.IsLetter))
                {
                    elements.Add(Weapons.GetElement(small));
                }
                else
                {
                    affinity = small.TextContent.Trim().ToInt();
                }
            }
            int price     = upgradeinfo[1].TextContent.Replace("z", "").ToInt();
            int monsterid = -1;

            if (page.QuerySelectorAll(".lead").Count() == 3)
            {
                monsterid = (await Monsters.GetMonsterFromDB(page.QuerySelectorAll(".lead")[2].TextContent.Trim())).id;
            }
            return(new SwordValues()
            {
                sword_name = weapon_name,
                raw_dmg = weapon_damage,
                slots = slots,
                rarity = rarity,
                upgrades_into = upgrades_into,
                price = price,
                element = elements,
                affinity = affinity,
                monster_id = monsterid,
            });
        }
Esempio n. 2
0
        public SetInfo GetSetInfo(IDocument page)
        {
            var         divs               = page.QuerySelectorAll(".lead");
            int         rarity             = divs[0].TextContent.ToInt();
            int         max_upgrade        = divs[1].TextContent.ToInt();
            List <bool> genderweaponchecks = new List <bool>();

            foreach (int index in new int[] { 2, 3, 4, 5 })
            {
                genderweaponchecks.Add(divs[index].FirstElementChild.ClassList.Contains("octicon-check"));
            }
            string set_name   = page.QuerySelector("[itemprop=\"name\"]").TextContent.Replace("Armor Set", "").Trim();
            int    monster_id = -1;

            string[] piece_descriptions;
            if (divs[6].FirstElementChild != null)
            {
                monster_id         = Monsters.GetMonsterFromDB(divs[6].FirstElementChild.TextContent).Result.id;
                piece_descriptions = divs.Skip(7).Select(d => d.NextElementSibling.TextContent).ToArray();
            }
            else
            {
                piece_descriptions = divs.Skip(6).Select(d => d.NextElementSibling.TextContent).ToArray();
            }
            return(new SetInfo {
                armor_set = set_name,
                rarity = rarity,
                max_upgrade = max_upgrade,
                is_blademaster = genderweaponchecks[0],
                is_gunner = genderweaponchecks[1],
                is_male = genderweaponchecks[2],
                is_female = genderweaponchecks[3],
                monster_id = monster_id,
                piece_descriptions = piece_descriptions
            });
        }
Esempio n. 3
0
        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++;
            }
        }
Esempio n. 4
0
        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++;
            }
        }