using Kryz.CharacterStats.Examples; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu] public class CraftingStatStoneTemplate : Item { [Space] public int MinAttackDamageBonus; public int MaxAttackDamageBonus; [Space] public int MinSpellDamageBonus; public int MaxSpellDamageBonus; [Space] public int MinCritChanceBonus; public int MaxCritChanceBonus; [Space] public int MinCritDamageBonus; public int MaxCritDamageBonus; [Space] public int MinMaxHealthBonus; public int MaxMaxHealthBonus; [Space] public int MinArmorBonus; public int MaxArmorBonus; [Space] public int MinMagicResistanceBonus; public int MaxMagicResistanceBonus; [Space] [Space] public float MinAttackDamagePercentBonus; public float MaxAttackDamagePercentBonus; [Space] public float MinSpellDamagePercentBonus; public float MaxSpellDamagePercentBonus; [Space] public float MinCritChancePercentBonus; public float MaxCritChancePercentBonus; [Space] public float MinCritDamagePercentBonus; public float MaxCritDamagePercentBonus; [Space] public float MinMaxHealthPercentBonus; public float MaxMaxHealthPercentBonus; [Space] public float MinArmorPercentBonus; public float MaxArmorPercentBonus; [Space] public float MinMagicResistancePercentBonus; public float MaxMagicResistancePercentBonus; } [System.Serializable] public class CraftingStatStone : ItemInstance { public int AttackDamageBonus; public int SpellDamageBonus; public int CritChanceBonus; public int CritDamageBonus; public int MaxHealthBonus; public int ArmorBonus; public int MagicResistanceBonus; [Space] public float AttackDamagePercentBonus; public float SpellDamagePercentBonus; public float CritChancePercentBonus; public float CritDamagePercentBonus; public float MaxHealthPercentBonus; public float ArmorPercentBonus; public float MagicResistancePercentBonus; public CraftingStatStone() : base() { } public CraftingStatStone(CraftingStatStoneTemplate template) { ItemName = template.ItemName; Icon = template.Icon; sellPricePlayer = template.sellPricePlayer; sellPriceVendor = template.sellPriceVendor; description = template.description; templateIndex = ItemIndexer.Instance.Items.IndexOf(template); AttackDamageBonus = Random.Range(template.MinAttackDamageBonus, template.MaxAttackDamageBonus); SpellDamageBonus = Random.Range(template.MinSpellDamageBonus, template.MaxSpellDamageBonus); CritChanceBonus = Random.Range(template.MinCritChanceBonus, template.MaxCritChanceBonus); CritDamageBonus = Random.Range(template.MinCritDamageBonus, template.MaxCritDamageBonus); MaxHealthBonus = Random.Range(template.MinMaxHealthBonus, template.MaxMaxHealthBonus); ArmorBonus = Random.Range(template.MinArmorBonus, template.MaxArmorBonus); MagicResistanceBonus = Random.Range(template.MinMagicResistanceBonus, template.MaxMagicResistanceBonus); AttackDamagePercentBonus = Mathf.Round(Random.Range(template.MinAttackDamagePercentBonus, template.MaxAttackDamagePercentBonus) * 100f) / 100f; SpellDamagePercentBonus = Mathf.Round(Random.Range(template.MinSpellDamagePercentBonus, template.MaxSpellDamagePercentBonus) * 100f) / 100f; CritChancePercentBonus = Mathf.Round(Random.Range(template.MinCritChancePercentBonus, template.MaxCritChancePercentBonus) * 100f) / 100f; CritDamagePercentBonus = Mathf.Round(Random.Range(template.MinCritDamagePercentBonus, template.MaxCritDamagePercentBonus) * 100f) / 100f; MaxHealthPercentBonus = Mathf.Round(Random.Range(template.MinMaxHealthPercentBonus, template.MaxMaxHealthPercentBonus) * 100f) / 100f; ArmorPercentBonus = Mathf.Round(Random.Range(template.MinArmorPercentBonus, template.MaxArmorPercentBonus) * 100f) / 100f; MagicResistancePercentBonus = Mathf.Round(Random.Range(template.MinMagicResistancePercentBonus, template.MaxMagicResistancePercentBonus) * 100f) / 100f; } public List GetNonZeroStats() { var nonZeroStats = new List(); var fields = this.GetType().GetFields(); foreach (var field in fields) { if (field.GetValue(this) is int intValue && intValue != 0 && field.Name.ToLower().Contains("bonus")) { nonZeroStats.Add(field.Name); //Debug.Log("ç-CraftingStone GotNonZeroStat: " + field.Name); } else if (field.GetValue(this) is float floatValue && !Mathf.Approximately(floatValue, 0f) && field.Name.ToLower().Contains("bonus")) { nonZeroStats.Add(field.Name); //Debug.Log("ç-CraftingStone GotNonZeroStat: " + field.Name); } } return nonZeroStats; } }