- Crafting UI fully functional - Crafting Stat stones and modular equippable items fully functional Notes: - Urgent need for exclusive(auto sorted) inventory for stones only - Something to do with the "trash" modular items instead of just selling - Add new uses for gold besides equipment, preset items will probably be worthless with modular crafting
123 lines
4.7 KiB
C#
123 lines
4.7 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);
|
|
}
|
|
else if (field.GetValue(this) is float floatValue && !Mathf.Approximately(floatValue, 0f) && field.Name.ToLower().Contains("bonus"))
|
|
{
|
|
nonZeroStats.Add(field.Name);
|
|
}
|
|
}
|
|
|
|
return nonZeroStats;
|
|
}
|
|
} |