Pedro Gomes 4c3edff503 Crafting system working (WIP)
- 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
2025-01-06 19:52:31 +00:00

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);
}
}
}