status/GrenadeStickyStatus.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Sandbox;

[Status(1, 0, 0.85f, 0, false, typeof( GrenadeShootReloadStatus ), typeof( FearDropGrenadeStatus ) )]
public class GrenadeStickyStatus : Status
{
    public GrenadeStickyStatus()
    {
        Title = "Sticky Bombs";
        IconPath = "textures/icons/grenade_sticky.png";
    }

    public override void Init(Player player)
    {
        base.Init(player);
    }

    public override void Refresh()
    {
        Description = GetDescription(Level);

        Player.Modify(this, PlayerStat.GrenadeStickyPercent, GetAddForLevel(Level), ModifierType.Add);
        Player.Modify(this, PlayerStat.MoveSpeed, GetMultForLevel(Level), ModifierType.Mult);
    }

    public override string GetDescription(int newLevel)
    {
        return string.Format("Your grenades are attracted to targets but you have 10% slower move speed");  
    }

    public override string GetUpgradeDescription(int newLevel)
    {
        return newLevel > 1 ? string.Format("Your grenades are attracted to targets but you have 10% slower move speed") : GetDescription(newLevel);
    }

    public float GetAddForLevel(int level)
    {
        return 1f;
    }

    public float GetMultForLevel(int level)
    {
        return 1f - 0.1f * level;
    }

    public float GetPercentForLevel(int level)
    {
        return 10 * level;
    }
}