A player Status class 'ExplosionDamageStatus' that applies multiplicative modifiers to the player's explosion damage and bullet damage based on the status level, and provides descriptive text and upgrade text. It sets title and icon, updates modifiers in Refresh, and exposes helper methods for level-based multipliers and percents.
using System;
using System.Collections.Generic;
using System.Linq;
using Sandbox;
[Status( 5, 0, 1f, 0, false, typeof( GrenadeShootReloadStatus ), typeof( FearDropGrenadeStatus ) )]
public class ExplosionDamageStatus : Status
{
public ExplosionDamageStatus()
{
Title = "Explosives Expert";
IconPath = "textures/icons/explosion_damage.png";
}
public override void Init( Player player )
{
base.Init( player );
}
public override void Refresh()
{
Description = GetDescription( Level );
Player.Modify( this, PlayerStat.ExplosionDamageMultiplier, GetExplosionMultForLevel( Level ), ModifierType.Mult );
Player.Modify( this, PlayerStat.BulletDamage, GetBulletMultForLevel( Level ), ModifierType.Mult );
}
public override string GetDescription( int newLevel )
{
return string.Format( "Your explosions deal {0}% extra damage but your bullets deal {1}% less", GetExplosionPercentForLevel( Level ), GetBulletPercentForLevel( Level ) );
}
public override string GetUpgradeDescription( int newLevel )
{
return newLevel > 1 ? string.Format( "Your explosions deal {0}%→{1}% extra damage but your bullets deal {2}%→{3}% less", GetExplosionPercentForLevel( newLevel - 1 ), GetExplosionPercentForLevel( newLevel ), GetBulletPercentForLevel( newLevel - 1 ), GetBulletPercentForLevel( newLevel ) ) : GetDescription( newLevel );
}
public float GetExplosionMultForLevel( int level ) { return 1f + 0.20f * level; }
public float GetExplosionPercentForLevel( int level ) { return 20 * level; }
public float GetBulletMultForLevel( int level ) { return 1f - 0.05f * level; }
public float GetBulletPercentForLevel( int level ) { return 5 * level; }
}