diff --git a/Content.Server/Forensics/Systems/ForensicScannerSystem.cs b/Content.Server/Forensics/Systems/ForensicScannerSystem.cs index aa45ebee33..bc5391763d 100644 --- a/Content.Server/Forensics/Systems/ForensicScannerSystem.cs +++ b/Content.Server/Forensics/Systems/ForensicScannerSystem.cs @@ -7,6 +7,7 @@ using Content.Server.Popups; using Content.Shared.Forensics; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; +using Content.Shared.Verbs; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Player; @@ -27,6 +28,7 @@ namespace Content.Server.Forensics SubscribeLocalEvent(OnAfterInteract); SubscribeLocalEvent(OnAfterInteractUsing); + SubscribeLocalEvent>(OnUtilityVerb); SubscribeLocalEvent(OnPrint); SubscribeLocalEvent(OnTargetScanSuccessful); SubscribeLocalEvent(OnScanCancelled); @@ -55,6 +57,33 @@ namespace Content.Server.Forensics OpenUserInterface(ev.User, scanner); } + private void OnUtilityVerb(EntityUid uid, ForensicScannerComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess || component.CancelToken != null) + return; + + var verb = new UtilityVerb() + { + Act = () => + { + component.CancelToken = new CancellationTokenSource(); + _doAfterSystem.DoAfter(new DoAfterEventArgs(args.User, component.ScanDelay, component.CancelToken.Token, target: args.Target) + { + BroadcastFinishedEvent = new TargetScanSuccessfulEvent(args.User, (EntityUid) args.Target, component.Owner), + BroadcastCancelledEvent = new ScanCancelledEvent(component.Owner), + BreakOnTargetMove = true, + BreakOnUserMove = true, + BreakOnStun = true, + NeedHand = true + }); + }, + Text = Loc.GetString("forensic-scanner-verb-text"), + Message = Loc.GetString("forensic-scanner-verb-message") + }; + + args.Verbs.Add(verb); + } + private void OnAfterInteract(EntityUid uid, ForensicScannerComponent component, AfterInteractEvent args) { if (component.CancelToken != null || args.Target == null || !args.CanReach) diff --git a/Resources/Locale/en-US/forensics/forensics.ftl b/Resources/Locale/en-US/forensics/forensics.ftl index 397d980f3b..b2d3a749e0 100644 --- a/Resources/Locale/en-US/forensics/forensics.ftl +++ b/Resources/Locale/en-US/forensics/forensics.ftl @@ -13,6 +13,10 @@ forensic-pad-already-used = This pad has already been used. forensic-scanner-match-fiber = Match in fiber found! forensic-scanner-match-fingerprint = Match in fingerprint found! forensic-scanner-match-none = No matches found! +forensic-scanner-verb-text = Scan +forensic-scanner-verb-message = Perform a forensic scan + + forensic-pad-fingerprint-name = {$entity}'s fingerprints forensic-pad-gloves-name = fibers from {$entity}