A Gem subclass that represents a "Gem Magnet" item. It defines an item id, provides formatted description and upgrade description strings, and on run start it adds a PerkXpAttractRange perk to the player a number of times equal to the gem level and posts a local chat message.
using Sandbox;
public class GemMagnet : Gem
{
public const string ItemId = "gem_magnet";
public static string Description( int level ) => $"Start with {Perk.GetRichTextNameToken( typeof( PerkXpAttractRange ) )} {Perk.GetRichTextToken( nameof( PerkXpAttractRange ), level )} Lvl {level}";
public static string UpgradeDescription( int level ) => $"Start with {Perk.GetRichTextNameToken( typeof( PerkXpAttractRange ) )} {Perk.GetRichTextToken( nameof( PerkXpAttractRange ), level )} Lvl [+]{level - 1}[/+]→Lvl [+]{level}[/+]";
public override void OnRunStart()
{
var perkType = TypeLibrary.GetType<PerkXpAttractRange>();
for ( int i = 0; i < Level; i++ )
Player.AddPerk( perkType );
Manager.Instance.Chat.AddLocalChatMessage( $"Got {Perk.GetRichTextNameToken( typeof( PerkXpAttractRange ) )} {Perk.GetRichTextToken( nameof( PerkXpAttractRange ), Level )} Lvl {Level}", from: "" );
}
}