diff --git a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs index c378841278..012fb80f76 100644 --- a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs +++ b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs @@ -39,8 +39,7 @@ public sealed class KillPersonConditionSystem : EntitySystem return 1f; var targetDead = _mind.IsCharacterDeadIc(mind); - var targetMarooned = !_emergencyShuttle.IsTargetEscaping(target) && - _emergencyShuttle.ShuttlesLeft; + var targetOnShuttle = _emergencyShuttle.IsTargetEscaping(mind.OwnedEntity.Value); if (!_config.GetCVar(CCVars.EmergencyShuttleEnabled) && requireMaroon) { requireDead = true; @@ -50,8 +49,17 @@ public sealed class KillPersonConditionSystem : EntitySystem if (requireDead && !targetDead) return 0f; - if (requireMaroon) // if evac is still here and target hasn't boarded, show 50% to give you an indicator that you are doing good - return targetMarooned ? 1f : _emergencyShuttle.EmergencyShuttleArrived ? 0.5f : 0f; + // Always failed if the target needs to be marooned and the shuttle hasn't even arrived yet + if (requireMaroon && !_emergencyShuttle.EmergencyShuttleArrived) + return 0f; + + // If the shuttle hasn't left, give 50% progress if the target isn't on the shuttle as a "almost there!" + if (requireMaroon && !_emergencyShuttle.ShuttlesLeft) + return targetOnShuttle ? 0f : 0.5f; + + // If the shuttle has already left, and the target isn't on it, 100% + if (requireMaroon && _emergencyShuttle.ShuttlesLeft) + return targetOnShuttle ? 0f : 1f; return 1f; // Good job you did it woohoo } diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs index 8e3e01bfb6..c9c764a014 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs @@ -648,18 +648,11 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem if (!EmergencyShuttleArrived) return false; - // check each emergency shuttle + // check if target is on an emergency shuttle var xform = Transform(target); - foreach (var stationData in EntityQuery()) - { - if (stationData.EmergencyShuttle == null) - continue; - if (IsOnGrid(xform, stationData.EmergencyShuttle.Value)) - { - return true; - } - } + if (HasComp(xform.GridUid)) + return true; return false; } diff --git a/Resources/Locale/en-US/objectives/conditions/kill-person.ftl b/Resources/Locale/en-US/objectives/conditions/kill-person.ftl index 48606b92c2..aad31d26f9 100644 --- a/Resources/Locale/en-US/objectives/conditions/kill-person.ftl +++ b/Resources/Locale/en-US/objectives/conditions/kill-person.ftl @@ -1,3 +1,3 @@ objective-condition-kill-person-title = Kill or maroon {$targetName}, {CAPITALIZE($job)} objective-condition-kill-maroon-title = Kill and maroon {$targetName}, {CAPITALIZE($job)} -objective-condition-maroon-person-title = Maroon {$targetName}, {CAPITALIZE($job)} +objective-condition-maroon-person-title = Prevent {$targetName}, {CAPITALIZE($job)} from reaching CentComm. diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index 0f53488e69..4b6d9e0e66 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -83,7 +83,7 @@ - type: entity parent: [BaseTraitorObjective, BaseKillObjective] id: KillRandomPersonObjective - description: Do it however you like, just make sure they don't make it to centcomm. + description: Do it however you like, just make sure they don't get off the station. components: - type: Objective difficulty: 1.75 @@ -91,11 +91,13 @@ - type: TargetObjective title: objective-condition-maroon-person-title - type: PickRandomPerson + - type: KillPersonCondition + requireMaroon: true - type: entity parent: [BaseTraitorObjective, BaseKillObjective] id: KillRandomHeadObjective - description: We need this head gone and you probably know why. Make sure they don't make it to centcomm, even if they're dead. Good luck, agent. + description: We need this head gone and you probably know why. Make sure they don't make it to CentComm, even if they're dead. Good luck, agent. components: - type: Objective # technically its still possible for KillRandomPersonObjective to roll a head but this is guaranteed, so higher difficulty