A mythic-tier perk class that grants the player armor when they are hit by melee while reloading. It hooks into OnHit, checks for melee damage and reloading state, then gives an integer armor amount based on perk level and triggers a visual highlight.
using System;
using Sandbox;
[Perk( Rarity.Mythic, disabled: true, alwaysOfferDebug: false, IncludedCategories = new[] { PerkCategory.Armor })]
public class PerkHitWhileReloading : Perk
{
private enum Mod { ArmorGained };
static PerkHitWhileReloading()
{
//Register<PerkHitWhileReloading>(
// name: "Emergency Plating",
// imagePath: "textures/icons/vector/hit_while_reloading_armor.png",
// description: level => $"+{(int)GetValue( level, Mod.ArmorGained )} armor-item when you\ntake melee dmg while reloading",
// upgradeDescription: level => $"+{(int)GetValue( level - 1, Mod.ArmorGained )}→{(int)GetValue( level, Mod.ArmorGained )} armor-item when you\ntake melee dmg while reloading"
//);
}
public override void Start()
{
base.Start();
HighlightColor = new Color( 0.7f, 0.5f, 0.5f, 0.75f );
HighlightDuration = 0.25f;
HighlightOpacity = 2f;
}
public override void Refresh()
{
base.Refresh();
}
public override void OnHit( float amount, DamageType damageType, bool isSelfInflicted, Vector2 dir, float force, Enemy enemySource, EnemyType enemyType, float previousHealth )
{
base.OnHit( amount, damageType, isSelfInflicted, dir, force, enemySource, enemyType, previousHealth );
if ( damageType != DamageType.Melee || !Player.IsReloading )
return;
var armorAmount = (int)GetValue(Level, Mod.ArmorGained );
Player.GainArmor( armorAmount );
Highlight();
}
private static float GetValue( int level, Mod mod, bool isPercent = false )
{
switch ( mod )
{
case Mod.ArmorGained:
default:
return 1 + level;
}
}
}