private static double CalculateStat(Item item, float optionLevelFactor, StaticPick staticPick, Script script, float currentStatValue) { Random random = Random.Shared; string calcScript; switch (staticPick.Stat) { case StatAttribute.Hp: calcScript = "static_value_hp"; break; case StatAttribute.Defense: // TODO: this is not calculating correctly calcScript = "static_value_ndd"; break; case StatAttribute.MagicRes: calcScript = "static_value_mar"; break; case StatAttribute.PhysicalRes: calcScript = "static_value_par"; break; case StatAttribute.PhysicalAtk: calcScript = "static_value_pap"; break; case StatAttribute.MagicAtk: calcScript = "static_value_map"; break; case StatAttribute.MaxWeaponAtk: calcScript = "static_value_wapmax"; break; case StatAttribute.PerfectGuard: calcScript = "static_rate_abp"; break; default: return(0); } DynValue result = script.RunFunction(calcScript, currentStatValue, staticPick.DeviationValue, (int)item.Type, (int)item.RecommendJobs.First(), optionLevelFactor, item.Rarity, item.Level); if (result.Tuple.Length < 2) { return(0); } if (result.Tuple[0].Number == 0 && result.Tuple[1].Number == 0) { return(0); } // Get random between min and max values return(random.NextDouble() * (result.Tuple[1].Number - result.Tuple[0].Number) + result.Tuple[0].Number); }
private static void SetStat(Dictionary <StatAttribute, ItemStat> stats, StaticPick staticPick, Item item, Script script, float optionLevelFactor) { if (!stats.ContainsKey(staticPick.Stat)) { stats[staticPick.Stat] = new BasicStat(staticPick.Stat, 0, StatAttributeType.Flat); } float currentStatValue = stats[staticPick.Stat].GetValue(); double statValue = CalculateStat(item, optionLevelFactor, staticPick, script, currentStatValue); stats[staticPick.Stat].SetValue((float)statValue); if (stats[staticPick.Stat].GetValue() <= 0.0000f) { stats.Remove(staticPick.Stat); } }