using System.Text; using Content.Shared.Preferences; using Content.Shared.Roles; using Robust.Shared.Configuration; using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Shared.Customization.Systems; public sealed class CharacterRequirementsSystem : EntitySystem { public bool CheckRequirementsValid(List requirements, JobPrototype job, HumanoidCharacterProfile profile, Dictionary playTimes, bool whitelisted, IEntityManager entityManager, IPrototypeManager prototypeManager, IConfigurationManager configManager, out List reasons) { reasons = new List(); var valid = true; foreach (var requirement in requirements) { // Set valid to false if the requirement is invalid and not inverted // If it's inverted set valid to false when it's valid if (!requirement.IsValid(job, profile, playTimes, whitelisted, entityManager, prototypeManager, configManager, out var reason)) { if (valid) valid = requirement.Inverted; } else { if (valid) valid = !requirement.Inverted; } if (reason != null) reasons.Add(reason); } return valid; } /// /// Gets the reason text from as a . /// public FormattedMessage GetRequirementsText(List reasons) { var text = new StringBuilder(); foreach (var reason in reasons) text.Append($"\n{reason.ToMarkup()}"); return FormattedMessage.FromMarkup(text.ToString().Trim()); } /// /// Gets the reason text from as a markup string. /// public string GetRequirementsMarkup(List reasons) { var text = new StringBuilder(); foreach (var reason in reasons) text.Append($"\n{reason.ToMarkup()}"); return text.ToString().Trim(); } }