using Content.Shared.Damage; using Content.Shared.Damage.Events; using Content.Shared.Examine; using Content.Shared.FixedPoint; using Content.Shared.Projectiles; using Content.Shared.Weapons.Ranged.Components; using Robust.Shared.Prototypes; namespace Content.Server.Weapons.Ranged.Systems; public sealed partial class GunSystem { protected override void InitializeCartridge() { base.InitializeCartridge(); SubscribeLocalEvent(OnCartridgeExamine); SubscribeLocalEvent(OnCartridgeDamageExamine); } 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(string proto) { if (!ProtoManager.TryIndex(proto, out var entityProto)) return null; if (entityProto.Components .TryGetValue(_factory.GetComponentName(typeof(ProjectileComponent)), out var projectile)) { var p = (ProjectileComponent) projectile.Component; if (!p.Damage.Empty) { return p.Damage * Damageable.UniversalProjectileDamageModifier; } } return null; } private void OnCartridgeExamine(EntityUid uid, CartridgeAmmoComponent component, ExaminedEvent args) { if (component.Spent) { args.PushMarkup(Loc.GetString("gun-cartridge-spent")); } else { args.PushMarkup(Loc.GetString("gun-cartridge-unspent")); } } }