using Content.Shared.Damage; using Content.Shared.Damage.Events; using Content.Shared.Damage.Systems; using Content.Shared.Examine; using Content.Shared.Projectiles; using Content.Shared.Weapons.Ranged.Components; using Robust.Shared.Prototypes; namespace Content.Shared.Weapons.Ranged.Systems; public abstract partial class SharedGunSystem { [Dependency] private readonly DamageExamineSystem _damageExamine = default!; // needed for server system protected virtual void InitializeCartridge() { SubscribeLocalEvent(OnCartridgeExamine); SubscribeLocalEvent(OnCartridgeDamageExamine); } private void OnCartridgeExamine(Entity ent, ref ExaminedEvent args) { args.PushMarkup(ent.Comp.Spent ? Loc.GetString("gun-cartridge-spent") : Loc.GetString("gun-cartridge-unspent")); } private void OnCartridgeDamageExamine(EntityUid uid, CartridgeAmmoComponent component, ref DamageExamineEvent args) { var damageSpec = GetProjectileDamage(component.Prototype); if (damageSpec == null) return; _damageExamine.AddDamageExamine(args.Message, Damageable.ApplyUniversalAllModifiers(damageSpec), Loc.GetString("damage-projectile")); } private DamageSpecifier? GetProjectileDamage(EntProtoId proto) { if (!ProtoManager.TryIndex(proto, out var entityProto)) return null; if (!entityProto.TryGetComponent(out var projectile, Factory)) return null; if (!projectile.Damage.Empty) return projectile.Damage * Damageable.UniversalProjectileDamageModifier; return null; } }