A Perk subclass named PerkArmorRerollCost that defines an 'Epic' rarity perk called "Recycled Armor". It sets UI metadata (name, icon, descriptions), visual highlight properties, and on Refresh applies a modifier to the player's ArmorRerollCost stat. It computes the cost value as 14 - level*2.
using System;
using Sandbox;
[Perk( Rarity.Epic, includedAtStart: false, alwaysOfferDebug: false )]
public class PerkArmorRerollCost : Perk
{
private enum Mod { ArmorCost };
static PerkArmorRerollCost()
{
Register<PerkArmorRerollCost>(
name: "Recycled Armor",
imagePath: "textures/icons/vector/armor_reroll_cost.png",
description: level => $"Rerolling costs {(int)GetValue( level, Mod.ArmorCost )} armor-item",
upgradeDescription: level => $"Rerolling costs {(int)GetValue( level - 1, Mod.ArmorCost )}→{(int)GetValue( level, Mod.ArmorCost )} armor-item"
);
}
public override void Start()
{
base.Start();
HighlightColor = new Color( 0.8f, 1f, 1f );
HighlightDuration = 0.4f;
HighlightOpacity = 3f;
}
public override void Refresh()
{
base.Refresh();
Player.Modify( this, PlayerStat.ArmorRerollCost, GetValue( Level, Mod.ArmorCost ), ModifierType.Add );
}
private static float GetValue( int level, Mod mod, bool isPercent = false )
{
switch ( mod )
{
case Mod.ArmorCost:
default:
return 14f - level * 2f;
}
}
}