Exemplo n.º 1
0
        public BowgunAmmo GetBowgunAmmo(IElement wrapper)
        {
            BowgunAmmo ba = new BowgunAmmo();
            // Skipping two because the first two properties are just ids.
            List <PropertyInfo> pi = typeof(BowgunAmmo).GetProperties().Skip(2).ToList();

            // Skipping one because the first span is simply the levels.
            var spans = wrapper.Children[3].QuerySelectorAll("span").Skip(1).ToArray();

            for (int i = 0; i < spans.Count(); i++)
            {
                string value = spans[i].TextContent;
                // In this case, skill_shots are shots that can be equipped for the bowgun only if the corresponding skill is activated.
                string[] skill_shots = { "normal", "pierce", "pellet", "crag", "clust" };
                if (spans[i].ClassName == "text-muted" && skill_shots.Any(s => pi[i].Name.Contains(s)))
                {
                    value += " (needs skill)";
                }
                pi[i].SetValue(ba, value);
            }
            return(ba);
        }
Exemplo n.º 2
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++;
            }
        }