public void GetStaticStats(int itemId, int rarity, List <NormalStat> normalStats, List <SpecialStat> specialStats) { //Get Static Stats int staticId = ItemMetadataStorage.GetOptionStatic(itemId); ItemOptionsStatic staticOptions = ItemOptionStaticMetadataStorage.GetMetadata(staticId, rarity); if (staticOptions == null) { BasicStats.AddRange(normalStats); BasicStats.AddRange(specialStats); return; } foreach (ParserStat stat in staticOptions.Stats) { NormalStat normalStat = normalStats.FirstOrDefault(x => x.ItemAttribute == stat.Id); if (normalStat == null) { normalStats.Add(new NormalStat(stat.Id, stat.Flat, stat.Percent)); continue; } int index = normalStats.FindIndex(x => x.ItemAttribute == stat.Id); int summedFlat = normalStat.Flat + stat.Flat; float summedPercent = normalStat.Percent + stat.Percent; normalStats[index] = new NormalStat(stat.Id, summedFlat, summedPercent); } foreach (ParserSpecialStat stat in staticOptions.SpecialStats) { SpecialStat normalStat = specialStats.FirstOrDefault(x => x.ItemAttribute == stat.Id); if (normalStat == null) { specialStats.Add(new SpecialStat(stat.Id, stat.Flat, stat.Percent)); continue; } int index = specialStats.FindIndex(x => x.ItemAttribute == stat.Id); float summedFlat = normalStat.Flat + stat.Flat; float summedPercent = normalStat.Percent + stat.Percent; specialStats[index] = new SpecialStat(stat.Id, summedFlat, summedPercent); } if (staticOptions.HiddenDefenseAdd > 0) { AddHiddenNormalStat(normalStats, ItemAttribute.Defense, staticOptions.HiddenDefenseAdd, staticOptions.DefenseCalibrationFactor); } if (staticOptions.HiddenWeaponAtkAdd > 0) { AddHiddenNormalStat(normalStats, ItemAttribute.MinWeaponAtk, staticOptions.HiddenWeaponAtkAdd, staticOptions.WeaponAtkCalibrationFactor); AddHiddenNormalStat(normalStats, ItemAttribute.MaxWeaponAtk, staticOptions.HiddenWeaponAtkAdd, staticOptions.WeaponAtkCalibrationFactor); } BasicStats.AddRange(normalStats); BasicStats.AddRange(specialStats); }