diff --git a/Content.Server/KillTracking/KillTrackingSystem.cs b/Content.Server/KillTracking/KillTrackingSystem.cs
index 63627fd1b9..ba27ea5d9e 100644
--- a/Content.Server/KillTracking/KillTrackingSystem.cs
+++ b/Content.Server/KillTracking/KillTrackingSystem.cs
@@ -2,6 +2,7 @@ using Content.Server.NPC.HTN;
using Content.Shared.Damage;
using Content.Shared.FixedPoint;
using Content.Shared.Mobs;
+using Content.Shared.Mobs.Systems;
using Robust.Shared.Player;
namespace Content.Server.KillTracking;
@@ -14,7 +15,8 @@ public sealed class KillTrackingSystem : EntitySystem
///
public override void Initialize()
{
- SubscribeLocalEvent(OnDamageChanged);
+ // Add damage to LifetimeDamage before MobStateChangedEvent gets raised
+ SubscribeLocalEvent(OnDamageChanged, before: [ typeof(MobThresholdSystem) ]);
SubscribeLocalEvent(OnMobStateChanged);
}
@@ -50,7 +52,7 @@ public sealed class KillTrackingSystem : EntitySystem
var largestSource = GetLargestSource(component.LifetimeDamage);
largestSource ??= killImpulse;
- KillSource? killSource;
+ KillSource killSource;
KillSource? assistSource = null;
if (killImpulse is KillEnvironmentSource)
@@ -69,13 +71,13 @@ public sealed class KillTrackingSystem : EntitySystem
killSource = killImpulse;
// no assist is given to environmental kills
- if (largestSource is not KillEnvironmentSource)
+ if (largestSource is not KillEnvironmentSource
+ && component.LifetimeDamage.TryGetValue(largestSource, out var largestDamage))
{
- // you have to do at least 50% of largest source's damage to get the assist.
- if (component.LifetimeDamage[largestSource] >= component.LifetimeDamage[killSource] / 2)
- {
+ var killDamage = component.LifetimeDamage.GetValueOrDefault(killSource);
+ // you have to do at least twice as much damage as the killing source to get the assist.
+ if (largestDamage >= killDamage / 2)
assistSource = largestSource;
- }
}
}