- Crafting stats cap now properly counts only the new added stats from stones instead of all stats from stones - Summon abilities now each have its own scaling with owners stats - Summon abilities time between attacks reduced (faster attacks overall)
125 lines
4.9 KiB
C#
125 lines
4.9 KiB
C#
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()
|
||
{
|
||
}
|
||
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<string> GetNonZeroStats()
|
||
{
|
||
var nonZeroStats = new List<string>();
|
||
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("<22>-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("<22>-CraftingStone GotNonZeroStat: " + field.Name);
|
||
}
|
||
}
|
||
|
||
return nonZeroStats;
|
||
}
|
||
} |