GunSystem.Cartridges.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using Content.Shared.Damage;
  2. using Content.Shared.Damage.Events;
  3. using Content.Shared.Examine;
  4. using Content.Shared.FixedPoint;
  5. using Content.Shared.Projectiles;
  6. using Content.Shared.Weapons.Ranged.Components;
  7. using Robust.Shared.Prototypes;
  8. namespace Content.Server.Weapons.Ranged.Systems;
  9. public sealed partial class GunSystem
  10. {
  11. protected override void InitializeCartridge()
  12. {
  13. base.InitializeCartridge();
  14. SubscribeLocalEvent<CartridgeAmmoComponent, ExaminedEvent>(OnCartridgeExamine);
  15. SubscribeLocalEvent<CartridgeAmmoComponent, DamageExamineEvent>(OnCartridgeDamageExamine);
  16. }
  17. private void OnCartridgeDamageExamine(EntityUid uid, CartridgeAmmoComponent component, ref DamageExamineEvent args)
  18. {
  19. var damageSpec = GetProjectileDamage(component.Prototype);
  20. if (damageSpec == null)
  21. return;
  22. _damageExamine.AddDamageExamine(args.Message, Damageable.ApplyUniversalAllModifiers(damageSpec), Loc.GetString("damage-projectile"));
  23. }
  24. private DamageSpecifier? GetProjectileDamage(string proto)
  25. {
  26. if (!ProtoManager.TryIndex<EntityPrototype>(proto, out var entityProto))
  27. return null;
  28. if (entityProto.Components
  29. .TryGetValue(_factory.GetComponentName(typeof(ProjectileComponent)), out var projectile))
  30. {
  31. var p = (ProjectileComponent) projectile.Component;
  32. if (!p.Damage.Empty)
  33. {
  34. return p.Damage * Damageable.UniversalProjectileDamageModifier;
  35. }
  36. }
  37. return null;
  38. }
  39. private void OnCartridgeExamine(EntityUid uid, CartridgeAmmoComponent component, ExaminedEvent args)
  40. {
  41. if (component.Spent)
  42. {
  43. args.PushMarkup(Loc.GetString("gun-cartridge-spent"));
  44. }
  45. else
  46. {
  47. args.PushMarkup(Loc.GetString("gun-cartridge-unspent"));
  48. }
  49. }
  50. }