Example #1
0
        private int GetMaximumNumberOfSockets()
        {
            if (ImplicitMods.Any(s => s.Name == "Has # Socket"))
            {
                // e.g. Unset Ring
                return(1);
            }
            switch (ItemGroup)
            {
            case ItemGroup.OneHandedWeapon:
            case ItemGroup.Shield:
                return(3);

            case ItemGroup.Boots:
            case ItemGroup.Gloves:
            case ItemGroup.Helmet:
                return(4);

            case ItemGroup.TwoHandedWeapon:
            case ItemGroup.BodyArmour:
                return(6);

            default:
                return(0);
            }
        }
Example #2
0
        private int GetMaximumNumberOfSockets()
        {
            var socketStat = ImplicitMods
                             .SelectMany(m => m.Stats)
                             .FirstOrDefault(s => s.Id == "local_has_X_sockets");

            if (socketStat != null)
            {
                // e.g. Unset Ring
                return(socketStat.Range.From);
            }
            if (Tags.HasFlag(Tags.OneHand) || Tags.HasFlag(Tags.Shield))
            {
                return(3);
            }
            if (Tags.HasFlag(Tags.FishingRod))
            {
                return(4);
            }
            if (Tags.HasFlag(Tags.TwoHand) || Tags.HasFlag(Tags.BodyArmour))
            {
                return(6);
            }
            if (Tags.HasFlag(Tags.Armour))
            {
                // exceptions (Shield and BodyArmour) are handled above
                return(4);
            }
            return(0);
        }
Example #3
0
        private JObject GenerateJson()
        {
            var j = new JObject(
                new JProperty("w", Width),
                new JProperty("h", Height),
                new JProperty("x", X),
                new JProperty("y", Y),
                new JProperty("name", NameLine),
                new JProperty("typeLine", TypeLine),
                new JProperty("frameType", Frame)
                );

            if (_iconUrl != null)
            {
                j["icon"] = _iconUrl;
            }

            if (Properties.Count > 0)
            {
                j.Add(new JProperty("properties",
                                    new JArray(Properties.Select(p => p.ToJobject()).ToArray())));
            }

            if (Requirements.Count > 0)
            {
                j.Add(new JProperty("requirements",
                                    new JArray(Requirements.Select(p => p.ToJobject()).ToArray())));
            }

            if (ImplicitMods.Count > 0)
            {
                j.Add(new JProperty("implicitMods",
                                    new JArray(ImplicitMods.Select(p => p.ToJobject(true)).ToArray())));
            }

            if (ExplicitMods.Count > 0)
            {
                j.Add(new JProperty("explicitMods",
                                    new JArray(ExplicitMods.Select(p => p.ToJobject(true)).ToArray())));
            }

            if (CraftedMods.Count > 0)
            {
                j.Add(new JProperty("craftedMods",
                                    new JArray(CraftedMods.Select(p => p.ToJobject(true)).ToArray())));
            }

            if (HaveFlavourText)
            {
                j.Add("flavourText", new JArray(FlavourText));
            }

            return(j);
        }
Example #4
0
        public virtual XElement Serialize()
        {
            var elm = new XElement("ItemBase",
                                   new XAttribute("group", GearGroup),
                                   new XAttribute("class", Class),
                                   new XAttribute("type", ItemType),
                                   new XAttribute("level", Level));

            if (ImplicitMods.Count > 0)
            {
                elm.Add(new XElement("implicitmods", ImplicitMods.Select(m => m.Serialize())));
            }

            if (Properties.Count > 0)
            {
                elm.Add(new XElement("properties", Properties.Select(m => m.Serialize())));
            }


            return(elm);
        }
Example #5
0
        private JObject GenerateJson()
        {
            var j = new JObject(
                new JProperty("w", Width),
                new JProperty("h", Height),
                new JProperty("x", X),
                new JProperty("y", Y),
                new JProperty("name", NameLine),
                new JProperty("typeLine", TypeLine),
                new JProperty("frameType", Frame)
                );

            if (_iconUrl != null)
            {
                j["icon"] = _iconUrl;
            }

            if (Properties.Count > 0)
            {
                j.Add(new JProperty("properties",
                                    new JArray(Properties.Select(p => p.ToJobject()).ToArray())));
            }

            if (Requirements.Count > 0)
            {
                j.Add(new JProperty("requirements",
                                    new JArray(Requirements.Select(p => p.ToJobject()).ToArray())));
            }

            if (ImplicitMods.Count > 0)
            {
                j.Add(new JProperty("implicitMods",
                                    new JArray(ImplicitMods.Select(p => p.ToJobject(true)).ToArray())));
            }

            if (ExplicitMods.Count > 0)
            {
                j.Add(new JProperty("explicitMods",
                                    new JArray(ExplicitMods.Select(p => p.ToJobject(true)).ToArray())));
            }

            if (CraftedMods.Count > 0)
            {
                j.Add(new JProperty("craftedMods",
                                    new JArray(CraftedMods.Select(p => p.ToJobject(true)).ToArray())));
            }

            if (Gems.Count > 0)
            {
                var sockets       = new JArray();
                var socketedItems = new JArray();
                foreach (var gem in Gems)
                {
                    sockets.Add(new JObject {
                        { "group", gem.SocketGroup }
                    });
                    socketedItems.Add(gem.JsonBase);
                }
                j["sockets"]       = sockets;
                j["socketedItems"] = socketedItems;
            }

            if (HaveFlavourText)
            {
                j.Add("flavourText", new JArray(FlavourText));
            }

            return(j);
        }
Example #6
0
        private void Init(ItemClass iClass, JObject val)
        {
            JSONBase = val;

            Attributes = new Dictionary <string, List <float> >();
            Mods       = new List <ItemMod>();
            Class      = iClass;

            Width  = val["w"].Value <int>();
            Height = val["h"].Value <int>();
            if (val["x"] != null)
            {
                X = val["x"].Value <int>();
            }
            if (val["y"] != null)
            {
                Y = val["y"].Value <int>();
            }

            if (val["name"] != null)
            {
                NameLine = val["name"].Value <string>();
            }

            TypeLine = BaseType = val["typeLine"].Value <string>();

            Frame = (FrameType)val["frameType"].Value <int>();

            if (val["properties"] != null)
            {
                foreach (JObject obj in (JArray)val["properties"])
                {
                    var    values = new List <float>();
                    string s      = "";

                    foreach (JArray jva in (JArray)obj["values"])
                    {
                        s += " " + jva[0].Value <string>();
                    }
                    s = s.TrimStart();

                    if (s == "")
                    {
                        Properties.Add(ItemMod.CreateMod(this, obj["name"].Value <string>(), numberfilter));

                        Keywords = new List <string>();
                        string[] sl = obj["name"].Value <string>().Split(',');
                        foreach (string i in sl)
                        {
                            Keywords.Add(i.Trim());
                        }
                        continue;
                    }

                    foreach (Match m in numberfilter.Matches(s))
                    {
                        if (m.Value == "")
                        {
                            values.Add(float.NaN);
                        }
                        else
                        {
                            values.Add(float.Parse(m.Value, CultureInfo.InvariantCulture));
                        }
                    }
                    string cs = obj["name"].Value <string>() + ": " + (numberfilter.Replace(s, "#"));

                    var mod = ItemMod.CreateMod(this, obj, numberfilter2);
                    Properties.Add(mod);


                    mod.ValueColor = ((JArray)obj["values"]).Select(a =>
                    {
                        var floats = ((JArray)a)[0].Value <string>().Split('-');
                        return(floats.Select(f => (ItemMod.ValueColoring)((JArray)a)[1].Value <int>()));
                    }).SelectMany(c => c).ToList();

                    Attributes.Add(cs, values);
                }
            }

            if (val["requirements"] != null)
            {
                string       reqs    = "";
                List <float> numbers = new List <float>();
                List <ItemMod.ValueColoring> affects = new List <ItemMod.ValueColoring>();

                foreach (JObject obj in (JArray)val["requirements"])
                {
                    var n = obj["name"].Value <string>();

                    if (obj["displayMode"].Value <int>() == 0)
                    {
                        n = n + " #";
                    }
                    else
                    {
                        n = "# " + n;
                    }

                    numbers.Add(((JArray)((JArray)obj["values"])[0])[0].Value <float>());
                    affects.Add((ItemMod.ValueColoring)((JArray)((JArray)obj["values"])[0])[1].Value <int>());

                    if (!string.IsNullOrEmpty(reqs))
                    {
                        reqs += ", " + n;
                    }
                    else
                    {
                        reqs += n;
                    }
                }

                var m = ItemMod.CreateMod(this, "Requires " + reqs, numberfilter);
                m.Value      = numbers;
                m.ValueColor = affects;
                Requirements.Add(m);
            }


            if (val["implicitMods"] != null)
            {
                foreach (string s in val["implicitMods"].Values <string>())
                {
                    List <ItemMod> mods = ItemMod.CreateMods(this, s.Replace("Additional ", ""), numberfilter);
                    Mods.AddRange(mods);

                    ImplicitMods.Add(ItemMod.CreateMod(this, s, numberfilter));
                }
            }
            if (val["explicitMods"] != null)
            {
                foreach (string s in val["explicitMods"].Values <string>())
                {
                    List <ItemMod> mods = ItemMod.CreateMods(this, s.Replace("Additional ", ""), numberfilter);
                    Mods.AddRange(mods);

                    ExplicitMods.Add(ItemMod.CreateMod(this, s, numberfilter));
                }
            }

            if (val["craftedMods"] != null)
            {
                foreach (string s in val["craftedMods"].Values <string>())
                {
                    List <ItemMod> mods = ItemMod.CreateMods(this, s.Replace("Additional ", ""), numberfilter);
                    Mods.AddRange(mods);

                    CraftedMods.Add(ItemMod.CreateMod(this, s, numberfilter));
                }
            }

            if (val["flavourText"] != null)
            {
                FlavourText = string.Join("\r\n", val["flavourText"].Values <string>());
            }


            if (iClass == ItemClass.Gem)
            {
                switch (val["colour"].Value <string>())
                {
                case "S":
                    Keywords.Add("Strength");
                    break;

                case "D":
                    Keywords.Add("Dexterity");
                    break;

                case "I":
                    Keywords.Add("Intelligence");
                    break;
                }
            }
            else
            {
                Gems = new List <Item>();
            }

            var Sockets = new List <int>();

            if (val["sockets"] != null)
            {
                foreach (JObject obj in (JArray)val["sockets"])
                {
                    Sockets.Add(obj["group"].Value <int>());
                }
            }
            if (val["socketedItems"] != null)
            {
                int socket = 0;
                foreach (JObject obj in (JArray)val["socketedItems"])
                {
                    var item = new Item(ItemClass.Gem, obj);
                    item.SocketGroup = Sockets[socket++];
                    Gems.Add(item);
                }
            }
        }