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

[Status( 5, 0, 1f, 0, false )]
public class HomingBulletStatus : Status
{
	public HomingBulletStatus()
	{
		Title = "Homing Bullets";
		IconPath = "textures/icons/homing_bullets.png";
	}

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

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

		Player.Modify( this, PlayerStat.HomingBulletChance, GetAddForLevel( Level ), ModifierType.Add );
		Player.Modify( this, PlayerStat.BulletDamage, GetDamageMultForLevel( Level ), ModifierType.Mult );
	}

	public override string GetDescription( int newLevel )
	{
		return string.Format( "{0}% chance for bullets to be homing but reduce bullet dmg by {1}%", GetPercentForLevel( Level ), GetDamagePercentForLevel( Level ) );
	}

	public override string GetUpgradeDescription( int newLevel )
	{
		return newLevel > 1 ? string.Format( "{0}%→{1}% chance for bullets to be homing but reduce bullet dmg by {2}%→{3}%", GetPercentForLevel( newLevel - 1 ), GetPercentForLevel( newLevel ), GetDamagePercentForLevel( newLevel - 1 ), GetDamagePercentForLevel( newLevel ) ) : GetDescription( newLevel );
	}

	//public float GetAddForLevel( int level )
	//{
	//	switch(level)
	//	{
	//		case 1: default: return 0.15f;
	//		case 2: return 0.25f;
	//		case 3: return 0.40f;
	//		case 4: return 0.55f;
	//		case 5: return 0.80f;
	//		case 6: return 0.90f;
	//		case 7: return 1.0f;
	//	}
	//}

	//public float GetPercentForLevel( int level )
	//{
	//	switch ( level )
	//	{
	//		case 1: default: return 15f;
	//		case 2: return 25f;
	//		case 3: return 40f;
	//		case 4: return 55f;
	//		case 5: return 80f;
	//		case 6: return 90f;
	//		case 7: return 100f;
	//	}
	//}

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

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

	public float GetDamageMultForLevel( int level )
	{
		return 1f - level * 0.02f;
	}

	public float GetDamagePercentForLevel( int level )
	{
		return level * 2;
	}
}