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); } }
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); }
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); }
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); }
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); }
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); } } }