using Content.Shared.Damage; using Content.Shared.Examine; using Content.Shared.FixedPoint; using Content.Shared.Projectiles; using Content.Shared.Verbs; using Content.Shared.Weapons.Ranged.Components; using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Server.Weapons.Ranged.Systems; public sealed partial class GunSystem { protected override void InitializeCartridge() { base.InitializeCartridge(); SubscribeLocalEvent(OnCartridgeExamine); SubscribeLocalEvent>(OnCartridgeVerbExamine); } private void OnCartridgeVerbExamine(EntityUid uid, CartridgeAmmoComponent component, GetVerbsEvent args) { if (!args.CanInteract || !args.CanAccess) return; var damageSpec = GetProjectileDamage(component.Prototype); if (damageSpec == null) return; var verb = new ExamineVerb() { Act = () => { var markup = Damageable.GetDamageExamine(damageSpec, Loc.GetString("damage-projectile")); _examine.SendExamineTooltip(args.User, uid, markup, false, false); }, Text = Loc.GetString("damage-examinable-verb-text"), Message = Loc.GetString("damage-examinable-verb-message"), Category = VerbCategory.Examine, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/smite.svg.192dpi.png")), }; args.Verbs.Add(verb); } 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.Total > FixedPoint2.Zero) { return p.Damage; } } 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")); } } }