--- /dev/null
+using System.Linq;
+using Content.Shared.Chemistry.Reagent;
+using Content.Shared.Mobs;
+using Content.Shared.Mobs.Components;
+using Content.Shared.Localizations;
+using Robust.Shared.Prototypes;
+using Content.Shared.Mind;
+using Content.Shared.Mind.Components;
+using Content.Shared.Roles;
+using Content.Shared.Roles.Jobs;
+using Content.Shared.Station;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+using Robust.Shared.IoC;
+
+namespace Content.Server.Chemistry.ReagentEffectConditions
+{
+ public sealed partial class JobCondition : ReagentEffectCondition
+ {
+ [DataField(required: true)] public List<ProtoId<JobPrototype>> Job;
+
+ public override bool Condition(ReagentEffectArgs args)
+ {
+ args.EntityManager.TryGetComponent<MindContainerComponent>(args.SolutionEntity, out var mindContainer);
+ if (mindContainer != null && mindContainer.Mind != null)
+ {
+ var prototypeManager = IoCManager.Resolve<IPrototypeManager>();
+ if (args.EntityManager.TryGetComponent<JobComponent>(mindContainer?.Mind, out var comp) && prototypeManager.TryIndex(comp.Prototype, out var prototype))
+ {
+ foreach (var jobId in Job)
+ {
+ if (prototype.ID == jobId)
+ {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public override string GuidebookExplanation(IPrototypeManager prototype)
+ {
+ var localizedNames = Job.Select(jobId => prototype.Index(jobId).LocalizedName).ToList();
+ return Loc.GetString("reagent-effect-condition-guidebook-job-condition", ("job", ContentLocalizationManager.FormatListToOr(localizedNames)));
+ }
+ }
+}
+
-ο»Ώusing System.Globalization;
+using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using Robust.Shared.Utility;
};
}
+ /// <summary>
+ /// Formats a list as per english grammar rules, but uses or instead of and.
+ /// </summary>
+ public static string FormatListToOr(List<string> list)
+ {
+ return list.Count switch
+ {
+ <= 0 => string.Empty,
+ 1 => list[0],
+ 2 => $"{list[0]} or {list[1]}",
+ _ => $"{string.Join(" or ", list)}"
+ };
+ }
+
/// <summary>
/// Formats a direction struct as a human-readable string.
/// </summary>
reagent-effect-condition-guidebook-mob-state-condition =
the mob is { $state }
+reagent-effect-condition-guidebook-job-condition =
+ the target's job is { $job }
+
reagent-effect-condition-guidebook-solution-temperature =
the solution's temperature is { $max ->
[2147483648] at least {NATURALFIXED($min, 2)}k