diff --git a/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs b/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs index 105a8f9720..4ba60e9c3d 100644 --- a/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs +++ b/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs @@ -11,6 +11,7 @@ using Content.Shared.Ensnaring.Components; using Content.Shared.IdentityManagement; using Content.Shared.StepTrigger.Systems; using Content.Shared.Throwing; +using Content.Shared.Popups; namespace Content.Server.Ensnaring; @@ -151,9 +152,11 @@ public sealed partial class EnsnareableSystem Dirty(component.Ensnared.Value, ensnareable); component.Ensnared = null; + _popup.PopupEntity(Loc.GetString("ensnare-component-try-free-complete", ("ensnare", ensnare)), target, target, PopupType.Medium); // WD + UpdateAlert(target, ensnareable); var ev = new EnsnareRemoveEvent(component.WalkSpeed, component.SprintSpeed); - RaiseLocalEvent(ensnare, ev); + RaiseLocalEvent(target, ev); // WD fix from ensnare to target } /// diff --git a/Content.Server/Implants/SubdermalImplantSystem.cs b/Content.Server/Implants/SubdermalImplantSystem.cs index c25cf86c34..f50ec8f826 100644 --- a/Content.Server/Implants/SubdermalImplantSystem.cs +++ b/Content.Server/Implants/SubdermalImplantSystem.cs @@ -23,6 +23,9 @@ using Content.Shared.Movement.Pulling.Components; using Content.Shared.Movement.Pulling.Systems; using Robust.Shared.Collections; using Robust.Shared.Map.Components; +using Content.Server.Ensnaring; +using Content.Shared.Ensnaring.Components; +using System.Linq; namespace Content.Server.Implants; @@ -41,6 +44,7 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly IdentitySystem _identity = default!; // WD + [Dependency] private readonly EnsnareableSystem _ensnareable = default!; // WD private EntityQuery _physicsQuery; private HashSet> _targetGrids = []; @@ -84,11 +88,26 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem private void OnFreedomImplant(EntityUid uid, SubdermalImplantComponent component, UseFreedomImplantEvent args) { - if (!TryComp(component.ImplantedEntity, out var cuffs) || cuffs.Container.ContainedEntities.Count < 1) - return; + // WD EDIT START + var ensnareCheck = TryComp(component.ImplantedEntity, out var ensnareable) && ensnareable.Container.ContainedEntities.Count > 0; + if (ensnareCheck && ensnareable != null) + { + var ensnaringUid = ensnareable.Container.ContainedEntities.First(); + if (TryComp(ensnaringUid, out var ensnaringComp)) + _ensnareable.ForceFree(ensnaringUid, ensnaringComp); + } - _cuffable.Uncuff(component.ImplantedEntity.Value, cuffs.LastAddedCuffs, cuffs.LastAddedCuffs); - args.Handled = true; + var cuffCheck = TryComp(component.ImplantedEntity, out var cuffs) && cuffs.Container.ContainedEntities.Count > 0; + if (cuffCheck && cuffs != null && component.ImplantedEntity != null) + { + _cuffable.Uncuff(component.ImplantedEntity.Value, cuffs.LastAddedCuffs, cuffs.LastAddedCuffs); + } + + if (ensnareCheck || cuffCheck) + { + args.Handled = true; + } + // WD EDIT END } private void OnActivateImplantEvent(EntityUid uid, SubdermalImplantComponent component, ActivateImplantEvent args)