private double CalculateStat(string stat, GameData.DataBuddyInformation character, DataEquipmentInformation weapon, DataEquipmentInformation armor, DataEquipmentInformation accessory, DataRecordMateriaInformation recordMateria, bool characterHasSynergy, bool weaponHasSynergy, bool armorHasSynergy, bool accessoryHasSynergy) { double baseValue = (character != null ? character.StatWithSynergy(stat, characterHasSynergy) : 0) + (weapon != null ? weapon.StatWithSynergy(stat, weaponHasSynergy) : 0) + (armor != null ? armor.StatWithSynergy(stat, armorHasSynergy) : 0) + (accessory != null ? accessory.StatWithSynergy(stat, accessoryHasSynergy) : 0); double multiplier; if (recordMateria != null && (stat == "Atk" || stat == "Mag" || stat == "Mnd" || stat == "Def" || stat == "Res")) { System.Reflection.MethodInfo method = recordMateria.GetType().GetMethod(stat + "Modifier"); multiplier = (double)method.Invoke(recordMateria, new object[] { weapon, armor, accessory }); } else { multiplier = 1; } switch (stat) { case "Atk": if (recordMateria != null && (recordMateria.RecordMateriaId == 111070100 || recordMateria.RecordMateriaId == 111080060)) { // Loner or Solitude for (int i = 0; i < characterBoxes.Count(box => box.SelectedItem == null); i++) { multiplier *= 1.1; } } if (checkBoxShout.Checked) { multiplier *= 1.5; } if (checkBoxHotE.Checked) { multiplier *= 1.3; } baseValue *= BuffedOffensiveMultiplier(multiplier); break; case "Mag": if (checkBoxFocus.Checked) { multiplier *= 1.2; } if (checkBoxFaith.Checked) { multiplier *= 1.2; } baseValue *= BuffedOffensiveMultiplier(multiplier); break; case "Mnd": baseValue *= BuffedOffensiveMultiplier(multiplier); break; case "Def": if (recordMateria != null && (recordMateria.RecordMateriaId == 111070100 || recordMateria.RecordMateriaId == 111080060)) { // Loner or Solitude for (int i = 0; i < characterBoxes.Count(box => box.SelectedItem == null); i++) { multiplier *= 1.1; } } if (checkBoxHotE.Checked) { multiplier *= 1.3; } baseValue *= BuffedDefensiveMultiplier(multiplier); break; case "Res": if (checkBoxFaith.Checked) { multiplier *= 1.5; } baseValue *= BuffedDefensiveMultiplier(multiplier); break; default: break; } return baseValue; }