- 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
213 lines
8.4 KiB
C#
213 lines
8.4 KiB
C#
using UnityEngine;
|
|
|
|
namespace Kryz.CharacterStats.Examples
|
|
{
|
|
public enum EquipmentType
|
|
{
|
|
Helmet,
|
|
Chest,
|
|
Gloves,
|
|
Boots,
|
|
MainWeapon,
|
|
OffWeapon,
|
|
Accessory,
|
|
Amulet,
|
|
}
|
|
|
|
[CreateAssetMenu]
|
|
public class EquippableItem : Item
|
|
{
|
|
public int StrengthBonus;
|
|
public int AgilityBonus;
|
|
public int IntelligenceBonus;
|
|
public int SpiritBonus;
|
|
public int VitalityBonus;
|
|
[Space]
|
|
public float StrengthPercentBonus;
|
|
public float AgilityPercentBonus;
|
|
public float IntelligencePercentBonus;
|
|
public float SpiritPercentBonus;
|
|
public float VitalityPercentBonus;
|
|
[Space]
|
|
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 EquipmentType EquipmentType;
|
|
[Space]
|
|
public bool CraftableBase = false;
|
|
[Space(20f)]
|
|
[Header("Crafting-ish")]
|
|
public int MinStrengthBonus;
|
|
public int MaxStrengthBonus;
|
|
[Space]
|
|
public int MinAgilityBonus;
|
|
public int MaxAgilityBonus;
|
|
[Space]
|
|
public int MinIntelligenceBonus;
|
|
public int MaxIntelligenceBonus;
|
|
[Space]
|
|
public int MinSpiritBonus;
|
|
public int MaxSpiritBonus;
|
|
[Space]
|
|
public int MinVitalityBonus;
|
|
public int MaxVitalityBonus;
|
|
[Space]
|
|
[Space]
|
|
public float MinStrengthPercentBonus;
|
|
public float MaxStrengthPercentBonus;
|
|
[Space]
|
|
public float MinAgilityPercentBonus;
|
|
public float MaxAgilityPercentBonus;
|
|
[Space]
|
|
public float MinIntelligencePercentBonus;
|
|
public float MaxIntelligencePercentBonus;
|
|
[Space]
|
|
public float MinSpiritPercentBonus;
|
|
public float MaxSpiritPercentBonus;
|
|
[Space]
|
|
public float MinVitalityPercentBonus;
|
|
public float MaxVitalityPercentBonus;
|
|
[Space]
|
|
[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;
|
|
[Space]
|
|
[Space]
|
|
[Tooltip("Can only increase up to this number of unique stats in a single item instance.")]
|
|
public int MaxTotalUniqueStatsIncreasedByStones;
|
|
|
|
|
|
public void Equip(PlayerCharacterStats c)
|
|
{
|
|
if (StrengthBonus != 0)
|
|
c.Strength.AddModifier(new StatModifier(StrengthBonus, StatModType.Flat, this));
|
|
if (AgilityBonus != 0)
|
|
c.Agility.AddModifier(new StatModifier(AgilityBonus, StatModType.Flat, this));
|
|
if (IntelligenceBonus != 0)
|
|
c.Intelligence.AddModifier(new StatModifier(IntelligenceBonus, StatModType.Flat, this));
|
|
if (SpiritBonus != 0)
|
|
c.Spirit.AddModifier(new StatModifier(SpiritBonus, StatModType.Flat, this));
|
|
if (VitalityBonus != 0)
|
|
c.Vitality.AddModifier(new StatModifier(VitalityBonus, StatModType.Flat, this));
|
|
|
|
if (StrengthPercentBonus != 0)
|
|
c.Strength.AddModifier(new StatModifier(StrengthPercentBonus, StatModType.PercentMult, this));
|
|
if (AgilityPercentBonus != 0)
|
|
c.Agility.AddModifier(new StatModifier(AgilityPercentBonus, StatModType.PercentMult, this));
|
|
if (IntelligencePercentBonus != 0)
|
|
c.Intelligence.AddModifier(new StatModifier(IntelligencePercentBonus, StatModType.PercentMult, this));
|
|
if (SpiritPercentBonus != 0)
|
|
c.Spirit.AddModifier(new StatModifier(SpiritPercentBonus, StatModType.PercentMult, this));
|
|
if (VitalityPercentBonus != 0)
|
|
c.Vitality.AddModifier(new StatModifier(VitalityPercentBonus, StatModType.PercentMult, this));
|
|
|
|
|
|
|
|
if (AttackDamageBonus != 0)
|
|
c.AttackDamage.AddModifier(new StatModifier(AttackDamageBonus, StatModType.Flat, this));
|
|
if (SpellDamageBonus != 0)
|
|
c.SpellDamage.AddModifier(new StatModifier(SpellDamageBonus, StatModType.Flat, this));
|
|
|
|
if (CritChanceBonus != 0)
|
|
c.CritChance.AddModifier(new StatModifier(CritChanceBonus, StatModType.Flat, this));
|
|
if (CritDamageBonus != 0)
|
|
c.CritDamage.AddModifier(new StatModifier(CritDamageBonus, StatModType.Flat, this));
|
|
|
|
if (MaxHealthBonus != 0)
|
|
c.MaxHealth.AddModifier(new StatModifier(MaxHealthBonus, StatModType.Flat, this));
|
|
if (ArmorBonus != 0)
|
|
c.Armor.AddModifier(new StatModifier(ArmorBonus, StatModType.Flat, this));
|
|
if (MagicResistanceBonus != 0)
|
|
c.MagicResistance.AddModifier(new StatModifier(MagicResistanceBonus, StatModType.Flat, this));
|
|
|
|
if (AttackDamagePercentBonus != 0)
|
|
c.AttackDamage.AddModifier(new StatModifier(AttackDamagePercentBonus, StatModType.PercentAdd, this));
|
|
if (SpellDamagePercentBonus != 0)
|
|
c.SpellDamage.AddModifier(new StatModifier(SpellDamagePercentBonus, StatModType.PercentAdd, this));
|
|
|
|
if (CritChancePercentBonus != 0)
|
|
c.CritChance.AddModifier(new StatModifier(CritChancePercentBonus, StatModType.PercentAdd, this));
|
|
if (CritDamagePercentBonus != 0)
|
|
c.CritDamage.AddModifier(new StatModifier(CritDamagePercentBonus, StatModType.PercentAdd, this));
|
|
|
|
if (MaxHealthPercentBonus != 0)
|
|
c.MaxHealth.AddModifier(new StatModifier(MaxHealthPercentBonus, StatModType.PercentAdd, this));
|
|
if (ArmorPercentBonus != 0)
|
|
c.Armor.AddModifier(new StatModifier(ArmorPercentBonus, StatModType.PercentAdd, this));
|
|
if (MagicResistancePercentBonus != 0)
|
|
c.MagicResistance.AddModifier(new StatModifier(MagicResistancePercentBonus, StatModType.PercentAdd, this));
|
|
}
|
|
|
|
public void Unequip(PlayerCharacterStats c)
|
|
{
|
|
c.Strength.RemoveAllModifiersFromSource(this);
|
|
c.Agility.RemoveAllModifiersFromSource(this);
|
|
c.Intelligence.RemoveAllModifiersFromSource(this);
|
|
c.Spirit.RemoveAllModifiersFromSource(this);
|
|
c.Vitality.RemoveAllModifiersFromSource(this);
|
|
|
|
c.AttackDamage.RemoveAllModifiersFromSource(this);
|
|
c.SpellDamage.RemoveAllModifiersFromSource(this);
|
|
|
|
c.CritChance.RemoveAllModifiersFromSource(this);
|
|
c.CritDamage.RemoveAllModifiersFromSource(this);
|
|
|
|
c.MaxHealth.RemoveAllModifiersFromSource(this);
|
|
c.Armor.RemoveAllModifiersFromSource(this);
|
|
c.MagicResistance.RemoveAllModifiersFromSource(this);
|
|
}
|
|
|
|
}
|
|
} |