public DropData Copy() { var result = new DropData(); result.ItemId = this.ItemId; result.QuestId = this.QuestId; result.Chance = this.Chance; result.AmountMin = this.AmountMin; result.AmountMax = this.AmountMax; result.Prefix = this.Prefix; result.Suffix = this.Suffix; result.Color1 = this.Color1; result.Color2 = this.Color2; result.Color3 = this.Color3; result.Expires = this.Expires; result.Durability = this.Durability; result.FoodQuality = this.FoodQuality; result.FormId = this.FormId; result.Scale = this.Scale; result.MetaData1 = this.MetaData1; result.MetaData2 = this.MetaData2; result.Feature = this.Feature; return(result); }
public DropData Copy() { var result = new DropData(); result.ItemId = this.ItemId; result.Chance = this.Chance; result.Amount = this.Amount; result.MinAmount = this.MinAmount; result.MaxAmount = this.MaxAmount; result.Prefix = this.Prefix; result.Suffix = this.Suffix; result.Color1 = this.Color1; result.Color2 = this.Color2; result.Color3 = this.Color3; result.HasColor = this.HasColor; return(result); }
public DropData Copy() { var result = new DropData(); result.ItemId = this.ItemId; result.Chance = this.Chance; result.AmountMin = this.AmountMin; result.AmountMax = this.AmountMax; result.Prefix = this.Prefix; result.Suffix = this.Suffix; result.Color1 = this.Color1; result.Color2 = this.Color2; result.Color3 = this.Color3; result.Expires = this.Expires; result.Durability = this.Durability; return(result); }
protected override void ReadEntry(JObject entry) { entry.AssertNotMissing("id", "name", "group", "tags", "gender", "vehicleType", "runSpeedFactor", "state", "invWidth", "invHeight", "range", "attackSpeed", "knockCount", "splashRadius", "splashAngle", "splashDamage", "stand", "ai", "color1", "color2", "color3", "cp", "life"); var raceData = new RaceData(); raceData.Id = entry.ReadInt("id"); raceData.Name = entry.ReadString("name"); raceData.Group = entry.ReadString("group"); raceData.Tags = entry.ReadString("tags"); raceData.Gender = (Gender)entry.ReadByte("gender"); raceData.VehicleType = entry.ReadInt("vehicleType"); raceData.RunSpeedFactor = entry.ReadFloat("runSpeedFactor"); raceData.DefaultState = entry.ReadUInt("state"); raceData.InventoryWidth = entry.ReadInt("invWidth"); raceData.InventoryHeight = entry.ReadInt("invHeight"); raceData.AttackSkill = 23002; // Combat Mastery, they all use this anyway. raceData.AttackMinBase = entry.ReadInt("attackMinBase"); raceData.AttackMaxBase = entry.ReadInt("attackMaxBase"); raceData.AttackMinBaseMod = entry.ReadInt("attackMinBaseMod"); raceData.AttackMaxBaseMod = entry.ReadInt("attackMaxBaseMod"); raceData.InjuryMinBase = entry.ReadInt("injuryMinBase"); raceData.InjuryMaxBase = entry.ReadInt("injuryMaxBase"); raceData.InjuryMinBaseMod = entry.ReadInt("injuryMinBaseMod"); raceData.InjuryMaxBaseMod = entry.ReadInt("injuryMaxBaseMod"); raceData.AttackRange = entry.ReadInt("range"); raceData.AttackSpeed = entry.ReadInt("attackSpeed"); raceData.KnockCount = entry.ReadInt("knockCount"); raceData.CriticalBase = entry.ReadInt("criticalBase"); raceData.CriticalBaseMod = entry.ReadInt("criticalBaseMod"); raceData.BalanceBase = entry.ReadInt("balanceBase"); raceData.BalanceBaseMod = entry.ReadInt("balanceBaseMod"); raceData.SplashRadius = entry.ReadInt("splashRadius"); raceData.SplashAngle = entry.ReadInt("splashAngle"); raceData.SplashDamage = entry.ReadFloat("splashDamage"); raceData.Stand = (RaceStands)entry.ReadInt("stand"); raceData.SharpMindImmune = entry.ReadBool("sharpMindImmune"); raceData.AI = entry.ReadString("ai"); // Looks raceData.Color1 = entry.ReadUInt("color1"); raceData.Color2 = entry.ReadUInt("color2"); raceData.Color3 = entry.ReadUInt("color3"); if (!entry.ContainsAnyKeys("size", "sizeMin", "sizeMax")) { raceData.SizeMin = raceData.SizeMax = 1; } else if (entry.ContainsKey("size")) { raceData.SizeMin = raceData.SizeMax = entry.ReadFloat("size"); } else { raceData.SizeMin = entry.ReadFloat("sizeMin", 1); raceData.SizeMax = entry.ReadFloat("sizeMax", 1); } if (raceData.SizeMin > raceData.SizeMax) { raceData.SizeMax = raceData.SizeMin; } // Face Action <string, JObject, List <int> > readArrOrIntCol = (col, obj, list) => { if (obj[col] != null) { if (obj[col].Type == JTokenType.Integer) { list.Add(obj.ReadInt(col)); } else if (obj[col].Type == JTokenType.Array) { list.AddRange(obj[col].Select(id => (int)id)); } } }; readArrOrIntCol("eyeColor", entry, raceData.Face.EyeColors); readArrOrIntCol("eyeType", entry, raceData.Face.EyeTypes); readArrOrIntCol("mouthType", entry, raceData.Face.MouthTypes); readArrOrIntCol("skinColor", entry, raceData.Face.SkinColors); // Stat Info raceData.Level = entry.ReadInt("level"); raceData.Str = entry.ReadFloat("str"); raceData.Int = entry.ReadFloat("int"); raceData.Dex = entry.ReadFloat("dex"); raceData.Will = entry.ReadFloat("will"); raceData.Luck = entry.ReadFloat("luck"); raceData.CombatPower = entry.ReadFloat("cp"); raceData.Life = entry.ReadFloat("life"); raceData.Mana = entry.ReadFloat("mana"); raceData.Stamina = entry.ReadFloat("stamina"); raceData.LifeRecoveryRate = entry.ReadFloat("lifeRecoveryRate", 1); raceData.Defense = entry.ReadInt("defense"); raceData.Protection = (int)entry.ReadFloat("protection"); raceData.ElementPhysical = entry.ReadInt("elementPhysical"); raceData.ElementLightning = entry.ReadInt("elementLightning"); raceData.ElementFire = entry.ReadInt("elementFire"); raceData.ElementIce = entry.ReadInt("elementIce"); raceData.Exp = entry.ReadInt("exp"); raceData.GoldMin = entry.ReadInt("goldMin"); raceData.GoldMax = entry.ReadInt("goldMax"); // Drops if (entry.ContainsKeys("drops")) { foreach (JObject drop in entry["drops"].Where(a => a.Type == JTokenType.Object)) { drop.AssertNotMissing("itemId", "chance"); var dropData = new DropData(); dropData.ItemId = drop.ReadInt("itemId"); dropData.Chance = drop.ReadFloat("chance"); var amount = drop.ReadInt("amount"); dropData.AmountMin = drop.ReadInt("amountMin"); dropData.AmountMax = drop.ReadInt("amountMax"); dropData.Prefix = drop.ReadInt("prefix"); dropData.Suffix = drop.ReadInt("suffix"); dropData.Feature = drop.ReadString("feature"); if (amount != 0) { dropData.AmountMin = dropData.AmountMax = amount; } if (dropData.AmountMin > dropData.AmountMax) { dropData.AmountMax = dropData.AmountMin; } if (dropData.Chance > 100) { dropData.Chance = 100; } else if (dropData.Chance < 0) { dropData.Chance = 0; } if (drop.ContainsKey("color1")) { dropData.Color1 = drop.ReadUInt("color1"); } if (drop.ContainsKey("color2")) { dropData.Color2 = drop.ReadUInt("color2"); } if (drop.ContainsKey("color3")) { dropData.Color3 = drop.ReadUInt("color3"); } dropData.Durability = drop.ReadInt("durability", -1); if (drop.ContainsKey("foodQuality")) { dropData.FoodQuality = drop.ReadInt("foodQuality"); } if (drop.ContainsKey("formId")) { dropData.FormId = drop.ReadInt("formId"); } if (drop.ContainsKey("scale")) { dropData.Scale = drop.ReadFloat("scale"); } if (drop.ContainsKey("metaData1")) { dropData.MetaData1 = drop.ReadString("metaData1"); } if (drop.ContainsKey("metaData2")) { dropData.MetaData2 = drop.ReadString("metaData2"); } raceData.Drops.Add(dropData); } } // Skills if (entry.ContainsKeys("skills")) { foreach (JObject skill in entry["skills"].Where(a => a.Type == JTokenType.Object)) { skill.AssertNotMissing("skillId", "rank"); // Check feature var feature = skill.ReadString("feature"); if (!string.IsNullOrWhiteSpace(feature) && !AuraData.FeaturesDb.IsEnabled(feature)) { continue; } var skillData = new RaceSkillData(); skillData.SkillId = skill.ReadUShort("skillId"); var rank = skill.ReadString("rank"); if (rank == "N") { skillData.Rank = 0; } else { skillData.Rank = (byte)(16 - int.Parse(rank, NumberStyles.HexNumber)); } raceData.Skills.Add(skillData); } } // Items if (entry.ContainsKeys("equip")) { foreach (JObject item in entry["equip"].Where(a => a.Type == JTokenType.Object)) { item.AssertNotMissing("itemId", "pocket"); var itemData = new RaceItemData(); // Item ids if (item["itemId"].Type == JTokenType.Integer) { itemData.ItemIds.Add(item.ReadInt("itemId")); } else if (item["itemId"].Type == JTokenType.Array) { foreach (var id in item["itemId"]) { itemData.ItemIds.Add((int)id); } } // Check that we got ids if (itemData.ItemIds.Count == 0) { throw new MandatoryValueException(null, "itemId", item); } // Color 1 if (item["color1"] != null) { if (item["color1"].Type == JTokenType.Integer) { itemData.Color1s.Add(item.ReadUInt("color1")); } else if (item["color1"].Type == JTokenType.Array) { foreach (var id in item["color1"]) { itemData.Color1s.Add((uint)id); } } } // Color 2 if (item["color2"] != null) { if (item["color2"].Type == JTokenType.Integer) { itemData.Color2s.Add(item.ReadUInt("color2")); } else if (item["color2"].Type == JTokenType.Array) { foreach (var id in item["color2"]) { itemData.Color2s.Add((uint)id); } } } // Color 3 if (item["color3"] != null) { if (item["color3"].Type == JTokenType.Integer) { itemData.Color3s.Add(item.ReadUInt("color3")); } else if (item["color3"].Type == JTokenType.Array) { foreach (var id in item["color3"]) { itemData.Color3s.Add((uint)id); } } } // Pocket itemData.Pocket = item.ReadInt("pocket"); raceData.Equip.Add(itemData); } } // Speed SpeedData actionInfo; if ((actionInfo = AuraData.SpeedDb.Find(raceData.Group + "/walk")) != null) { raceData.WalkingSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(raceData.Group + "/*")) != null) { raceData.WalkingSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(Regex.Replace(raceData.Group, "/.*$", "") + "/*/walk")) != null) { raceData.WalkingSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(Regex.Replace(raceData.Group, "/.*$", "") + "/*/*")) != null) { raceData.WalkingSpeed = actionInfo.Speed; } else { raceData.WalkingSpeed = 207.6892f; } if ((actionInfo = AuraData.SpeedDb.Find(raceData.Group + "/run")) != null) { raceData.RunningSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(raceData.Group + "/*")) != null) { raceData.RunningSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(Regex.Replace(raceData.Group, "/.*$", "") + "/*/run")) != null) { raceData.RunningSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(Regex.Replace(raceData.Group, "/.*$", "") + "/*/*")) != null) { raceData.RunningSpeed = actionInfo.Speed; } else { raceData.RunningSpeed = 373.850647f; } this.Entries[raceData.Id] = raceData; }
protected override void ReadEntry(JObject entry) { entry.AssertNotMissing("name", "conditions", "items"); var data = new FishingGroundData(); data.Name = entry.ReadString("name"); data.Priority = entry.ReadInt("priority"); var entryConditions = (JObject)entry["conditions"]; if (entryConditions.ContainsKeys("location")) { data.Locations = ((JArray)entryConditions["location"]).Select(a => (string)a).ToArray(); } else { data.Locations = new string[0]; } data.Event = entryConditions.ReadString("event"); data.Chance = entryConditions.ReadFloat("chance"); data.Rod = entryConditions.ReadInt("rod"); data.Bait = entryConditions.ReadInt("bait"); var items = new List <DropData>(); foreach (var entryItemObj in entry["items"]) { // Items might be commented var entryItem = entryItemObj as JObject; if (entryItem == null) { continue; } entryItem.AssertNotMissing("chance"); if (entryItem["itemId"] == null && entryItem["questId"] == null) { throw new MandatoryValueException(null, "itemId' or 'questId", entryItem); } var item = new DropData(); item.ItemId = entryItem.ReadInt("itemId"); item.QuestId = entryItem.ReadInt("questId"); item.Chance = entryItem.ReadFloat("chance"); if (entryItem.ContainsKey("color1")) { item.Color1 = entryItem.ReadUInt("color1"); } if (entryItem.ContainsKey("color2")) { item.Color2 = entryItem.ReadUInt("color2"); } if (entryItem.ContainsKey("color3")) { item.Color3 = entryItem.ReadUInt("color3"); } items.Add(item); } data.Items = items.ToArray(); data.TotalItemChance = items.Sum(a => a.Chance); if (data.Items.Length == 0) { throw new DatabaseErrorException("Item list must not be empty."); } this.Entries[data.Name] = data; }
protected override void ReadEntry(JObject entry) { entry.AssertNotMissing("id", "name", "group", "tags", "gender", "vehicleType", "runSpeedFactor", "state", "invWidth", "invHeight", "attackMin", "attackMax", "range", "attackSpeed", "knockCount", "critical", "criticalRate", "splashRadius", "splashAngle", "splashDamage", "stand", "ai", "color1", "color2", "color3", "size", "cp", "life", "defense", "protection", "element"); var raceData = new RaceData(); raceData.Id = entry.ReadInt("id"); raceData.Name = entry.ReadString("name"); raceData.Group = entry.ReadString("group"); raceData.Tags = entry.ReadString("tags"); raceData.Gender = (Gender)entry.ReadByte("gender"); raceData.VehicleType = entry.ReadInt("vehicleType"); raceData.RunSpeedFactor = entry.ReadFloat("runSpeedFactor"); raceData.DefaultState = entry.ReadUInt("state"); raceData.InventoryWidth = entry.ReadInt("invWidth"); raceData.InventoryHeight = entry.ReadInt("invHeight"); raceData.AttackSkill = 23002; // Combat Mastery, they all use this anyway. raceData.AttackMin = entry.ReadInt("attackMin"); raceData.AttackMax = entry.ReadInt("attackMax"); raceData.AttackRange = entry.ReadInt("range"); raceData.AttackSpeed = entry.ReadInt("attackSpeed"); raceData.KnockCount = entry.ReadInt("knockCount"); raceData.Critical = entry.ReadInt("critical"); raceData.CriticalRate = entry.ReadInt("criticalRate"); raceData.SplashRadius = entry.ReadInt("splashRadius"); raceData.SplashAngle = entry.ReadInt("splashAngle"); raceData.SplashDamage = entry.ReadFloat("splashDamage"); raceData.Stand = (RaceStands)entry.ReadInt("stand"); raceData.AI = entry.ReadString("ai"); // Looks raceData.Size = entry.ReadFloat("size"); raceData.Color1 = entry.ReadUInt("color1"); raceData.Color2 = entry.ReadUInt("color2"); raceData.Color3 = entry.ReadUInt("color3"); // Face Action <string, JObject, List <int> > readArrOrIntCol = (col, obj, list) => { if (obj[col] != null) { if (obj[col].Type == JTokenType.Integer) { list.Add(obj.ReadInt(col)); } else if (obj[col].Type == JTokenType.Array) { list.AddRange(obj[col].Select(id => (int)id)); } } }; readArrOrIntCol("eyeColor", entry, raceData.Face.EyeColors); readArrOrIntCol("eyeType", entry, raceData.Face.EyeTypes); readArrOrIntCol("mouthType", entry, raceData.Face.MouthTypes); readArrOrIntCol("skinColor", entry, raceData.Face.SkinColors); // Stat Info raceData.CombatPower = entry.ReadFloat("cp"); raceData.Life = entry.ReadFloat("life"); raceData.Defense = entry.ReadInt("defense"); raceData.Protection = (int)entry.ReadFloat("protection"); raceData.Element = (Element)entry.ReadByte("element"); raceData.Exp = entry.ReadInt("exp"); raceData.GoldMin = entry.ReadInt("goldMin"); raceData.GoldMax = entry.ReadInt("goldMax"); // Drops if (entry.ContainsKeys("drops")) { foreach (JObject drop in entry["drops"].Where(a => a.Type == JTokenType.Object)) { drop.AssertNotMissing("itemId", "chance"); var dropData = new DropData(); dropData.ItemId = drop.ReadInt("itemId"); dropData.Chance = drop.ReadFloat("chance"); dropData.Chance /= 100; if (dropData.Chance > 1) { dropData.Chance = 1; } else if (dropData.Chance < 0) { dropData.Chance = 0; } raceData.Drops.Add(dropData); } } // Skills if (entry.ContainsKeys("skills")) { foreach (JObject skill in entry["skills"].Where(a => a.Type == JTokenType.Object)) { skill.AssertNotMissing("skillId", "rank"); var skillData = new RaceSkillData(); skillData.SkillId = skill.ReadUShort("skillId"); var rank = skill.ReadString("rank"); if (rank == "N") { skillData.Rank = 0; } else { skillData.Rank = (byte)(16 - int.Parse(rank, NumberStyles.HexNumber)); } raceData.Skills.Add(skillData); } } // Items if (entry.ContainsKeys("equip")) { foreach (JObject item in entry["equip"].Where(a => a.Type == JTokenType.Object)) { item.AssertNotMissing("itemId", "pocket"); var itemData = new RaceItemData(); // Item ids if (item["itemId"].Type == JTokenType.Integer) { itemData.ItemIds.Add(item.ReadInt("itemId")); } else if (item["itemId"].Type == JTokenType.Array) { foreach (var id in item["itemId"]) { itemData.ItemIds.Add((int)id); } } // Check that we got ids if (itemData.ItemIds.Count == 0) { throw new MandatoryValueException(null, "itemId", item); } // Color 1 if (item["color1"] != null) { if (item["color1"].Type == JTokenType.Integer) { itemData.Color1s.Add(item.ReadUInt("color1")); } else if (item["color1"].Type == JTokenType.Array) { foreach (var id in item["color1"]) { itemData.Color1s.Add((uint)id); } } } // Color 2 if (item["color2"] != null) { if (item["color2"].Type == JTokenType.Integer) { itemData.Color2s.Add(item.ReadUInt("color2")); } else if (item["color2"].Type == JTokenType.Array) { foreach (var id in item["color2"]) { itemData.Color2s.Add((uint)id); } } } // Color 3 if (item["color3"] != null) { if (item["color3"].Type == JTokenType.Integer) { itemData.Color3s.Add(item.ReadUInt("color3")); } else if (item["color3"].Type == JTokenType.Array) { foreach (var id in item["color3"]) { itemData.Color3s.Add((uint)id); } } } // Pocket itemData.Pocket = item.ReadInt("pocket"); raceData.Equip.Add(itemData); } } // Speed SpeedData actionInfo; if ((actionInfo = AuraData.SpeedDb.Find(raceData.Group + "/walk")) != null) { raceData.WalkingSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(raceData.Group + "/*")) != null) { raceData.WalkingSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(Regex.Replace(raceData.Group, "/.*$", "") + "/*/walk")) != null) { raceData.WalkingSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(Regex.Replace(raceData.Group, "/.*$", "") + "/*/*")) != null) { raceData.WalkingSpeed = actionInfo.Speed; } else { raceData.WalkingSpeed = 207.6892f; } if ((actionInfo = AuraData.SpeedDb.Find(raceData.Group + "/run")) != null) { raceData.RunningSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(raceData.Group + "/*")) != null) { raceData.RunningSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(Regex.Replace(raceData.Group, "/.*$", "") + "/*/run")) != null) { raceData.RunningSpeed = actionInfo.Speed; } else if ((actionInfo = AuraData.SpeedDb.Find(Regex.Replace(raceData.Group, "/.*$", "") + "/*/*")) != null) { raceData.RunningSpeed = actionInfo.Speed; } else { raceData.RunningSpeed = 373.850647f; } this.Entries[raceData.Id] = raceData; }