// Creates added damage from weapon local mod. public static Added Create(DamageSource source, ItemMod itemMod) { Match m = ReAddMod.Match(itemMod.Attribute); if (m.Success) return new Added(source, m.Groups[1].Value, itemMod.Value[0], itemMod.Value[1]); else { m = ReAddInHandMod.Match(itemMod.Attribute); if (m.Success) return new Added(source, m.Groups[1].Value, itemMod.Value[0], itemMod.Value[1]) { Hand = m.Groups[2].Value == "Main" ? WeaponHand.Main : WeaponHand.Off }; } return null; }
public Item(ItemClass iClass, RavenJObject val) { Attributes = new Dictionary <string, List <float> >(); Mods = new List <ItemMod>(); Class = iClass; Name = val["name"].Value <string>(); if (Name == "") { Name = val["typeLine"].Value <string>(); } Type = val["typeLine"].Value <string>(); if (val.ContainsKey("properties")) { foreach (RavenJObject obj in (RavenJArray)val["properties"]) { var values = new List <float>(); string s = ""; foreach (RavenJArray jva in (RavenJArray)obj["values"]) { s += " " + jva[0].Value <string>(); } s = s.TrimStart(); if (s == "") { 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, "#")); Attributes.Add(cs, values); } } if (val.ContainsKey("explicitMods")) { foreach (string s in val["explicitMods"].Values <string>()) { List <ItemMod> mods = ItemMod.CreateMods(this, s.Replace("Additional ", ""), numberfilter); Mods.AddRange(mods); } } if (val.ContainsKey("implicitMods")) { foreach (string s in val["implicitMods"].Values <string>()) { List <ItemMod> mods = ItemMod.CreateMods(this, s.Replace("Additional ", ""), numberfilter); Mods.AddRange(mods); } } if (val.ContainsKey("craftedMods")) { foreach (string s in val["craftedMods"].Values <string>()) { List <ItemMod> mods = ItemMod.CreateMods(this, s.Replace("Additional ", ""), numberfilter); Mods.AddRange(mods); } } 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.ContainsKey("sockets")) { foreach (RavenJObject obj in (RavenJArray)val["sockets"]) { Sockets.Add(obj["group"].Value <int>()); } } if (val.ContainsKey("socketedItems")) { int socket = 0; foreach (RavenJObject obj in (RavenJArray)val["socketedItems"]) { var item = new Item(ItemClass.Gem, obj); item.SocketGroup = Sockets[socket++]; Gems.Add(item); } } }