2022-07-26 21:34:19 -04:00
using Content.Server.Weapon.Melee ;
using Content.Server.Stunnable ;
using Content.Shared.Inventory.Events ;
using Content.Server.Weapon.Melee.Components ;
using Content.Server.Clothing.Components ;
using Content.Server.Damage.Components ;
using Content.Server.Damage.Events ;
using Robust.Shared.Audio ;
using Robust.Shared.Player ;
using Robust.Shared.Random ;
using Robust.Shared.Containers ;
namespace Content.Server.Abilities.Boxer
{
public sealed class BoxingSystem : EntitySystem
{
[Dependency] private readonly SharedContainerSystem _containerSystem = default ! ;
public override void Initialize ( )
{
base . Initialize ( ) ;
SubscribeLocalEvent < BoxerComponent , ComponentInit > ( OnInit ) ;
2022-09-11 08:39:36 +02:00
SubscribeLocalEvent < BoxerComponent , ItemMeleeDamageEvent > ( GetDamageModifiers ) ;
2022-07-26 21:34:19 -04:00
SubscribeLocalEvent < BoxingGlovesComponent , StaminaMeleeHitEvent > ( OnStamHit ) ;
}
private void OnInit ( EntityUid uid , BoxerComponent boxer , ComponentInit args )
{
if ( TryComp < MeleeWeaponComponent > ( uid , out var meleeComp ) )
meleeComp . Range * = boxer . RangeBonus ;
}
2022-09-11 08:39:36 +02:00
private void GetDamageModifiers ( EntityUid uid , BoxerComponent component , ItemMeleeDamageEvent args )
2022-07-26 21:34:19 -04:00
{
if ( component . UnarmedModifiers = = default ! )
{
Logger . Warning ( "BoxerComponent on " + uid + " couldn't get damage modifiers. Know that adding components with damage modifiers through VV or similar is unsupported." ) ;
return ;
}
args . ModifiersList . Add ( component . UnarmedModifiers ) ;
}
private void OnStamHit ( EntityUid uid , BoxingGlovesComponent component , StaminaMeleeHitEvent args )
{
_containerSystem . TryGetContainingContainer ( uid , out var equipee ) ;
if ( TryComp < BoxerComponent > ( equipee ? . Owner , out var boxer ) )
args . Multiplier * = boxer . BoxingGlovesModifier ;
}
}
}