]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
No pacifist or blind sec (#30777)
authorEd <96445749+TheShuEd@users.noreply.github.com>
Mon, 19 Aug 2024 11:42:55 +0000 (14:42 +0300)
committerGitHub <noreply@github.com>
Mon, 19 Aug 2024 11:42:55 +0000 (14:42 +0300)
* 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

Content.Shared/Roles/JobRequirement/TraitsRequirement.cs [new file with mode: 0644]
Resources/Locale/en-US/job/role-requirements.ftl
Resources/Prototypes/Roles/Jobs/Security/detective.yml

diff --git a/Content.Shared/Roles/JobRequirement/TraitsRequirement.cs b/Content.Shared/Roles/JobRequirement/TraitsRequirement.cs
new file mode 100644 (file)
index 0000000..418afba
--- /dev/null
@@ -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;
+
+/// <summary>
+/// Requires a character to have, or not have, certain traits
+/// </summary>
+[UsedImplicitly]
+[Serializable, NetSerializable]
+public sealed partial class TraitsRequirement : JobRequirement
+{
+    [DataField(required: true)]
+    public HashSet<ProtoId<TraitPrototype>> Traits = new();
+
+    public override bool Check(IEntityManager entManager,
+        IPrototypeManager protoManager,
+        HumanoidCharacterProfile? profile,
+        IReadOnlyDictionary<string, TimeSpan> 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;
+    }
+}
index f0fff98c09fafadb546f820b6fe728a2ea3b5924..00281fa6cd5e7585c7b994d2f8baf545e47b9477 100644 (file)
@@ -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)
 
index 22ef115d7cd9c42df0ca4cfd765e466a5c42d325..f44b424f405b4867544f7c9f1570a9e37cdc4c80 100644 (file)
@@ -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