diff --git a/Content.Shared/Contraband/ContrabandSystem.cs b/Content.Shared/Contraband/ContrabandSystem.cs index ff18a08cef..7e5446da74 100644 --- a/Content.Shared/Contraband/ContrabandSystem.cs +++ b/Content.Shared/Contraband/ContrabandSystem.cs @@ -4,8 +4,10 @@ using Content.Shared.CCVar; using Content.Shared.Examine; using Content.Shared.Localizations; using Content.Shared.Roles; +using Content.Shared.Verbs; using Robust.Shared.Configuration; using Robust.Shared.Prototypes; +using Robust.Shared.Utility; namespace Content.Shared.Contraband; @@ -17,22 +19,18 @@ public sealed class ContrabandSystem : EntitySystem [Dependency] private readonly IConfigurationManager _configuration = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly SharedIdCardSystem _id = default!; + [Dependency] private readonly ExamineSystemShared _examine = default!; private bool _contrabandExamineEnabled; /// public override void Initialize() { - SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent>(OnDetailedExamine); Subs.CVar(_configuration, CCVars.ContrabandExamine, SetContrabandExamine, true); } - private void SetContrabandExamine(bool val) - { - _contrabandExamineEnabled = val; - } - public void CopyDetails(EntityUid uid, ContrabandComponent other, ContrabandComponent? contraband = null) { if (!Resolve(uid, ref contraband)) @@ -44,59 +42,80 @@ public sealed class ContrabandSystem : EntitySystem Dirty(uid, contraband); } - private void OnExamined(Entity ent, ref ExaminedEvent args) + private void OnDetailedExamine(EntityUid ent,ContrabandComponent component, ref GetVerbsEvent args) { + if (!_contrabandExamineEnabled) return; + // CanAccess is not used here, because we want people to be able to examine legality in strip menu. + if (!args.CanInteract) + return; + // two strings: // one, the actual informative 'this is restricted' // then, the 'you can/shouldn't carry this around' based on the ID the user is wearing - - using (args.PushGroup(nameof(ContrabandComponent))) + var localizedDepartments = component.AllowedDepartments.Select(p => Loc.GetString("contraband-department-plural", ("department", Loc.GetString(_proto.Index(p).Name)))); + var localizedJobs = component.AllowedJobs.Select(p => Loc.GetString("contraband-job-plural", ("job", _proto.Index(p).LocalizedName))); + var severity = _proto.Index(component.Severity); + String departmentExamineMessage; + if (severity.ShowDepartmentsAndJobs) { - var localizedDepartments = ent.Comp.AllowedDepartments.Select(p => Loc.GetString("contraband-department-plural", ("department", Loc.GetString(_proto.Index(p).Name)))); - var localizedJobs = ent.Comp.AllowedJobs.Select(p => Loc.GetString("contraband-job-plural", ("job", _proto.Index(p).LocalizedName))); + //creating a combined list of jobs and departments for the restricted text + var list = ContentLocalizationManager.FormatList(localizedDepartments.Concat(localizedJobs).ToList()); + // department restricted text + departmentExamineMessage = Loc.GetString("contraband-examine-text-Restricted-department", ("departments", list)); + } + else + { + departmentExamineMessage = Loc.GetString(severity.ExamineText); + } - var severity = _proto.Index(ent.Comp.Severity); - if (severity.ShowDepartmentsAndJobs) + // text based on ID card + List> departments = new(); + var jobId = ""; + if (_id.TryFindIdCard(args.User, out var id)) + { + departments = id.Comp.JobDepartments; + if (id.Comp.LocalizedJobTitle is not null) { - //creating a combined list of jobs and departments for the restricted text - var list = ContentLocalizationManager.FormatList(localizedDepartments.Concat(localizedJobs).ToList()); - - // department restricted text - args.PushMarkup(Loc.GetString("contraband-examine-text-Restricted-department", ("departments", list))); - } - else - { - args.PushMarkup(Loc.GetString(severity.ExamineText)); - } - - // text based on ID card - List> departments = new(); - var jobId = ""; - - if (_id.TryFindIdCard(args.Examiner, out var id)) - { - departments = id.Comp.JobDepartments; - if (id.Comp.LocalizedJobTitle is not null) - { - jobId = id.Comp.LocalizedJobTitle; - } - } - - // for the jobs we compare the localized string in case you use an agent ID or custom job name that is not a prototype - if (departments.Intersect(ent.Comp.AllowedDepartments).Any() - || localizedJobs.Contains(jobId)) - { - // you are allowed to use this! - args.PushMarkup(Loc.GetString("contraband-examine-text-in-the-clear")); - } - else - { - // straight to jail! - args.PushMarkup(Loc.GetString("contraband-examine-text-avoid-carrying-around")); + jobId = id.Comp.LocalizedJobTitle; } } + + String carryingMessage; + // either its fully restricted, you have no departments, or your departments dont intersect with the restricted departments + if (departments.Intersect(component.AllowedDepartments).Any() + || localizedJobs.Contains(jobId)) + { + carryingMessage = Loc.GetString("contraband-examine-text-in-the-clear"); + } + else + { + // otherwise fine to use :tm: + carryingMessage = Loc.GetString("contraband-examine-text-avoid-carrying-around"); + } + + var examineMarkup = GetContrabandExamine(departmentExamineMessage, carryingMessage); + _examine.AddDetailedExamineVerb(args, + component, + examineMarkup, + Loc.GetString("contraband-examinable-verb-text"), + "/Textures/Interface/VerbIcons/lock.svg.192dpi.png", + Loc.GetString("contraband-examinable-verb-message")); + } + + private FormattedMessage GetContrabandExamine(String deptMessage, String carryMessage) + { + var msg = new FormattedMessage(); + msg.AddMarkupOrThrow(deptMessage); + msg.PushNewline(); + msg.AddMarkupOrThrow(carryMessage); + return msg; + } + + private void SetContrabandExamine(bool val) + { + _contrabandExamineEnabled = val; } } diff --git a/Resources/Locale/en-US/contraband/contraband-severity.ftl b/Resources/Locale/en-US/contraband/contraband-severity.ftl index 68bb11930a..d79ecfa4b2 100644 --- a/Resources/Locale/en-US/contraband/contraband-severity.ftl +++ b/Resources/Locale/en-US/contraband/contraband-severity.ftl @@ -8,5 +8,8 @@ contraband-examine-text-Syndicate = [color=crimson]This item is highly illegal S contraband-examine-text-avoid-carrying-around = [color=red][italic]You probably want to avoid visibly carrying this around without a good reason.[/italic][/color] contraband-examine-text-in-the-clear = [color=green][italic]You should be in the clear to visibly carry this around.[/italic][/color] +contraband-examinable-verb-text = Legality +contraband-examinable-verb-message = Check legality of this item. + contraband-department-plural = {$department} contraband-job-plural = {MAKEPLURAL($job)} diff --git a/Resources/Textures/Interface/VerbIcons/ATTRIBUTION.txt b/Resources/Textures/Interface/VerbIcons/ATTRIBUTION.txt index 5b1320b450..1c71df2d5c 100644 --- a/Resources/Textures/Interface/VerbIcons/ATTRIBUTION.txt +++ b/Resources/Textures/Interface/VerbIcons/ATTRIBUTION.txt @@ -9,4 +9,4 @@ unlock.svg by Delapouite under CC BY 3.0 https://game-icons.net/1x1/delapouite/padlock-open.html bubbles.svg by Lorc under CC BY 3.0 -https://game-icons.net/1x1/lorc/bubbles.html \ No newline at end of file +https://game-icons.net/1x1/lorc/bubbles.html