From 055dfe6f0baa18d7ca462fc0f6a85621c812df69 Mon Sep 17 00:00:00 2001
From: Ed <96445749+TheShuEd@users.noreply.github.com>
Date: Mon, 19 Aug 2024 14:42:55 +0300
Subject: [PATCH] No pacifist or blind sec (#30777)
* no pacifist sec
* also block blindness
* Update warden.yml
* Update security_officer.yml
* Update head_of_security.yml
* Update security_cadet.yml
* Update detective.yml
---
.../Roles/JobRequirement/TraitsRequirement.cs | 67 +++++++++++++++++++
.../Locale/en-US/job/role-requirements.ftl | 2 +
.../Roles/Jobs/Security/detective.yml | 6 +-
3 files changed, 72 insertions(+), 3 deletions(-)
create mode 100644 Content.Shared/Roles/JobRequirement/TraitsRequirement.cs
diff --git a/Content.Shared/Roles/JobRequirement/TraitsRequirement.cs b/Content.Shared/Roles/JobRequirement/TraitsRequirement.cs
new file mode 100644
index 0000000000..418afba159
--- /dev/null
+++ b/Content.Shared/Roles/JobRequirement/TraitsRequirement.cs
@@ -0,0 +1,67 @@
+using System.Diagnostics.CodeAnalysis;
+using System.Text;
+using Content.Shared.Humanoid.Prototypes;
+using Content.Shared.Preferences;
+using Content.Shared.Traits;
+using JetBrains.Annotations;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
+using Robust.Shared.Utility;
+
+namespace Content.Shared.Roles;
+
+///
+/// Requires a character to have, or not have, certain traits
+///
+[UsedImplicitly]
+[Serializable, NetSerializable]
+public sealed partial class TraitsRequirement : JobRequirement
+{
+ [DataField(required: true)]
+ public HashSet> Traits = new();
+
+ public override bool Check(IEntityManager entManager,
+ IPrototypeManager protoManager,
+ HumanoidCharacterProfile? profile,
+ IReadOnlyDictionary playTimes,
+ [NotNullWhen(false)] out FormattedMessage? reason)
+ {
+ reason = new FormattedMessage();
+
+ if (profile is null) //the profile could be null if the player is a ghost. In this case we don't need to block the role selection for ghostrole
+ return true;
+
+ var sb = new StringBuilder();
+ sb.Append("[color=yellow]");
+ foreach (var t in Traits)
+ {
+ sb.Append(Loc.GetString(protoManager.Index(t).Name) + " ");
+ }
+
+ sb.Append("[/color]");
+
+ if (!Inverted)
+ {
+ reason = FormattedMessage.FromMarkupPermissive($"{Loc.GetString("role-timer-whitelisted-traits")}\n{sb}");
+ //at least one of
+ foreach (var trait in Traits)
+ {
+ if (profile.TraitPreferences.Contains(trait))
+ return true;
+ }
+ return false;
+ }
+ else
+ {
+ reason = FormattedMessage.FromMarkupPermissive($"{Loc.GetString("role-timer-blacklisted-traits")}\n{sb}");
+
+ foreach (var trait in Traits)
+ {
+ if (profile.TraitPreferences.Contains(trait))
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/Resources/Locale/en-US/job/role-requirements.ftl b/Resources/Locale/en-US/job/role-requirements.ftl
index f0fff98c09..00281fa6cd 100644
--- a/Resources/Locale/en-US/job/role-requirements.ftl
+++ b/Resources/Locale/en-US/job/role-requirements.ftl
@@ -8,6 +8,8 @@ role-timer-age-to-old = Your character's age must be at most [color=yellow]{$age
role-timer-age-to-young = Your character's age must be at least [color=yellow]{$age}[/color] to play this role.
role-timer-whitelisted-species = Your character must be one of the following species to play this role:
role-timer-blacklisted-species = Your character must not be one of the following species to play this role:
+role-timer-whitelisted-traits = Your character must have one of the following traits:
+role-timer-blacklisted-traits = Your character must not have any of the following traits:
role-timer-locked = Locked (hover for details)
diff --git a/Resources/Prototypes/Roles/Jobs/Security/detective.yml b/Resources/Prototypes/Roles/Jobs/Security/detective.yml
index 22ef115d7c..f44b424f40 100644
--- a/Resources/Prototypes/Roles/Jobs/Security/detective.yml
+++ b/Resources/Prototypes/Roles/Jobs/Security/detective.yml
@@ -4,9 +4,9 @@
description: job-description-detective
playTimeTracker: JobDetective
requirements:
- - !type:DepartmentTimeRequirement
- department: Security
- time: 54000 # 15 hours
+ - !type:DepartmentTimeRequirement
+ department: Security
+ time: 54000 # 15 hours
startingGear: DetectiveGear
icon: "JobIconDetective"
supervisors: job-supervisors-hos
--
2.51.2