perks/PerkExplosionSize.cs

A Perk class that increases explosion size for a player. It registers metadata (name, icon, descriptions) and applies a multiplicative player stat modifier based on perk level.

Networking
using System;
using Sandbox;

[Perk( Rarity.Common, includedAtStart: false, alwaysOfferDebug: false )]
public class PerkExplosionSize : Perk
{
	private enum Mod { ExplosionSizeMultiplier };

	static PerkExplosionSize()
	{
		Register<PerkExplosionSize>(
			name: "Bigger Booms",
			imagePath: "textures/icons/vector/explosion_size.png",
			description: level => $"+{(int)GetValue( level, Mod.ExplosionSizeMultiplier, true )}% explosion size",
			upgradeDescription: level => $"+{(int)GetValue( level - 1, Mod.ExplosionSizeMultiplier, true )}%→{(int)GetValue( level, Mod.ExplosionSizeMultiplier, true )}% explosion size"
		);
	}

	public override void Start()
	{
		base.Start();
	}

	public override void Refresh()
	{
		base.Refresh();

		Player.Modify( this, PlayerStat.ExplosionSizeMultiplier, GetValue( Level, Mod.ExplosionSizeMultiplier ), ModifierType.Mult );
	}

	private static float GetValue( int level, Mod mod, bool isPercent = false )
	{
		switch ( mod )
		{
			case Mod.ExplosionSizeMultiplier:
			default:
				return isPercent
					? 5f + 15f * level
					: 1f + (0.05f + 0.15f * level);
		}
	}
}