Exemplo n.º 1
0
        public static Backpack Get(IRequest request, bool cache=true, String profileID=null)
        {
            //get the json
            String raw = request.GetJSON();
            if(cache)
                Cache.SaveJSON(String.Format("backpack{0}.txt", profileID ?? ""), raw);
            JToken json = JObject.Parse(raw)["result"];

            //parse it
            int result = json["status"].ToObject<int>();

            if (result != 1)
            {
                if (result == 8)
                    throw new ArgumentException("SteamID invalid");
                if (result == 15)
                    throw new InvalidOperationException("Backpack was private");
                if (result == 18)
                    throw new ArgumentException("SteamID does not exist");
            }

            Backpack backpack = new Backpack(json["num_backpack_slots"].ToObject<int>());
            //parse all the items
            List<Item> items = ParseItems(json["items"]);

            //place the items in the backpack
            foreach (Item i in items)
            {
                if (i.IsPlaced)
                    backpack.ItemsAsPlaced[i.Position - 1] = i;
                else
                    backpack.UnplacedItems.Add(i);
            }
            return backpack;
        }
Exemplo n.º 2
0
        public static ItemSchema Get(IRequest request, bool cache=true)
        {
            //get the json
            String raw = request.GetJSON();
            if(cache)
                Cache.SaveJSON("schema.txt", raw);

            JToken json = JObject.Parse(raw)["result"];
            ItemSchema schema = new ItemSchema();

            foreach (JToken item in json["items"])
            {
                ItemTemplate template = new ItemTemplate();
                template.Name = item["item_name"].ToObject<String>();
                int defIndex = item["defindex"].ToObject<int>();

                if (template.Name.StartsWith("Strange Part:") || template.Name.StartsWith("Strange Cosmetic Part:"))
                {
                    int id = item["attributes"][0]["value"].ToObject<int>();
                    schema.StrangePartIDs.Add(id, defIndex);
                    schema.StrangePartNames.Add(id, template.Name.Substring(template.Name.IndexOf(':')+2));
                }

                String type = item["item_slot"] == null ? "other" : item["item_slot"].ToObject<String>();
                switch (type)
                {
                    //weapons!
                    case "primary":
                    case "secondary":
                    case "melee":
                    case "pda":
                    case "pda2":
                    case "building":
                        template.Type = ItemType.Weapon;
                        //if it's got the same values, then add it to the vintage chart (we can safely ignore basically everything else)
                        //of course, this does give a few things that you can't get in vintage or is entirely pointless, but *shrug*
                        if (item["min_ilevel"].ToObject<int>() == item["max_ilevel"].ToObject<int>())
                            schema.DefaultVintageLevels.Add(defIndex, item["min_ilevel"].ToObject<int>());
                        break;
                    case "head":
                    case "misc":
                        template.Type = ItemType.Cosmetic;
                        break;
                    default:
                        template.Type = ItemType.Tool;
                        break;
                }
                schema.Items.Add(defIndex, template);
            }
            return schema;
        }
Exemplo n.º 3
0
        public static PriceSchema Get(IRequest request, bool cache=true)
        {
            //get the json
            String raw = request.GetJSON();

            dynamic fullJson = JsonConvert.DeserializeObject(raw);
            if (fullJson.success == 0)
                return null;
            if (cache)
                Cache.SaveJSON("backpacktf.txt", raw);
            dynamic json = fullJson.response;

            PriceSchema schema = new PriceSchema();

            //first, get the raw prices of buds/keys/ref.
            Price.RefPrice = json.raw_usd_value;
            Price.KeyPrice = json.items["Mann Co. Supply Crate Key"]["prices"]["6"]["Tradable"]
                ["Craftable"][0]["value_raw"];
            Price.BudsPrice = json["items"]["Earbuds"]["prices"]["6"]["Tradable"]["Craftable"][0]["value_raw"];

            foreach (dynamic item in json.items)
            {
                //we don't want Australium Gold
                bool isAus = item.Name.StartsWith("Australium") && !item.Name.Contains("Gold");
                if (item.Value.defindex.Count == 0)
                {
                    Console.WriteLine("Found an item with no defindex");
                    continue;
                }

                //it's changed - now defindices are defindex: [val]
                int defIndex = (int)item.Value.defindex[0].Value;
                //and now iterate all the qualities
                foreach (dynamic itemQuality in item.Value.prices)
                {
                    Quality quality = (Quality)Enum.Parse(typeof(Quality), itemQuality.Name);
                    foreach (dynamic tradableItem in itemQuality.Value)
                    {
                        //tradables, craftables
                        bool isTradable = (tradableItem.Name == "Tradable");
                        foreach (dynamic craftableItem in tradableItem.Value)
                        {
                            bool isCraftable = (craftableItem.Name == "Craftable");

                            //it's now split into some things being Craftability: [blah blah] and some being Craftability: attribute value : blah blah
                            //this is 0 for most things, but some things like unusuals and crates have values
                            foreach (dynamic attributes in craftableItem.Value)
                            {
                                //ignore it if it's 0.
                                bool isNested = !(craftableItem.Value is JArray);
                                int series = isNested ? Convert.ToInt32(attributes.Name) : 0;
                                dynamic priceObject = isNested ? attributes.Value : attributes;

                                Price price = new Price();
                                double lowPrice = priceObject["value"].Value;
                                double highPrice = priceObject["value_high"] == null ? lowPrice : priceObject["value_high"].Value;

                                String currency = priceObject["currency"].Value;

                                //normalise to refined
                                if (currency == "earbuds")
                                {
                                    lowPrice *= Price.BudsPrice;
                                    highPrice *= Price.BudsPrice;
                                }
                                else if (currency == "keys")
                                {
                                    lowPrice *= Price.KeyPrice;
                                    highPrice *= Price.KeyPrice;
                                }
                                else if (currency == "usd")
                                {
                                    lowPrice *= Price.RefPrice;
                                    highPrice *= Price.RefPrice;
                                }
                                price.LowRefPrice = lowPrice;
                                price.HighRefPrice = highPrice;

                                //separate australiums, unusuals/crates, and the other one
                                schema.PriceList[GetItemKey(quality, defIndex, isTradable, isCraftable, isAus, series)] = price;
                            }
                        }
                    }
                }
            }
            return schema;
        }