1
0

KillTrackerComponent.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using Content.Shared.FixedPoint;
  2. using Content.Shared.Mobs;
  3. using Robust.Shared.Network;
  4. namespace Content.Server.KillTracking;
  5. /// <summary>
  6. /// This is used for entities that track player damage sources and killers.
  7. /// </summary>
  8. [RegisterComponent, Access(typeof(KillTrackingSystem))]
  9. public sealed partial class KillTrackerComponent : Component
  10. {
  11. /// <summary>
  12. /// The mobstate that registers as a "kill"
  13. /// </summary>
  14. [DataField("killState")]
  15. public MobState KillState = MobState.Critical;
  16. /// <summary>
  17. /// A dictionary of sources and how much damage they've done to this entity over time.
  18. /// </summary>
  19. [DataField("lifetimeDamage")]
  20. public Dictionary<KillSource, FixedPoint2> LifetimeDamage = new();
  21. }
  22. public abstract record KillSource;
  23. /// <summary>
  24. /// A kill source for players
  25. /// </summary>
  26. [DataDefinition, Serializable]
  27. public sealed partial record KillPlayerSource : KillSource
  28. {
  29. [DataField("playerId")]
  30. public NetUserId PlayerId;
  31. public KillPlayerSource(NetUserId playerId)
  32. {
  33. PlayerId = playerId;
  34. }
  35. }
  36. /// <summary>
  37. /// A kill source for non-player controlled entities
  38. /// </summary>
  39. [DataDefinition, Serializable]
  40. public sealed partial record KillNpcSource : KillSource
  41. {
  42. [DataField("npcEnt")]
  43. public EntityUid NpcEnt;
  44. public KillNpcSource(EntityUid npcEnt)
  45. {
  46. NpcEnt = npcEnt;
  47. }
  48. }
  49. /// <summary>
  50. /// A kill source for kills with no damage origin
  51. /// </summary>
  52. [DataDefinition, Serializable]
  53. public sealed partial record KillEnvironmentSource : KillSource;