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
This commit is contained in:
67
Content.Shared/Roles/JobRequirement/TraitsRequirement.cs
Normal file
67
Content.Shared/Roles/JobRequirement/TraitsRequirement.cs
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user