diff --git a/Content.Server/SubFloor/SubFloorHideSystem.cs b/Content.Server/SubFloor/SubFloorHideSystem.cs index 54f4be86a0..304fa6d7c1 100644 --- a/Content.Server/SubFloor/SubFloorHideSystem.cs +++ b/Content.Server/SubFloor/SubFloorHideSystem.cs @@ -1,9 +1,7 @@ -using Content.Shared.Construction.Components; using Content.Shared.Eye; using Content.Shared.SubFloor; using Robust.Server.Player; using Robust.Shared.Enums; -using Robust.Shared.Map.Components; using Robust.Shared.Player; namespace Content.Server.SubFloor; @@ -18,8 +16,6 @@ public sealed class SubFloorHideSystem : SharedSubFloorHideSystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnAnchorAttempt); - SubscribeLocalEvent(OnUnanchorAttempt); SubscribeNetworkEvent(OnShowSubfloor); SubscribeLocalEvent(OnGetVisibility); @@ -72,24 +68,4 @@ public sealed class SubFloorHideSystem : SharedSubFloorHideSystem Value = ev.Value, }, args.SenderSession); } - - private void OnAnchorAttempt(EntityUid uid, SubFloorHideComponent component, AnchorAttemptEvent args) - { - // No teleporting entities through floor tiles when anchoring them. - var xform = Transform(uid); - - if (TryComp(xform.GridUid, out var grid) - && HasFloorCover(xform.GridUid.Value, grid, Map.TileIndicesFor(xform.GridUid.Value, grid, xform.Coordinates))) - { - args.Cancel(); - } - } - - private void OnUnanchorAttempt(EntityUid uid, SubFloorHideComponent component, UnanchorAttemptEvent args) - { - // No un-anchoring things under the floor. Only required for something like vents, which are still interactable - // despite being partially under the floor. - if (component.IsUnderCover) - args.Cancel(); - } } diff --git a/Content.Shared/SubFloor/SharedSubFloorHideSystem.cs b/Content.Shared/SubFloor/SharedSubFloorHideSystem.cs index d15055875a..9a7ce0d1df 100644 --- a/Content.Shared/SubFloor/SharedSubFloorHideSystem.cs +++ b/Content.Shared/SubFloor/SharedSubFloorHideSystem.cs @@ -1,8 +1,10 @@ using Content.Shared.Audio; +using Content.Shared.Construction.Components; using Content.Shared.Explosion; using Content.Shared.Eye; using Content.Shared.Interaction.Events; using Content.Shared.Maps; +using Content.Shared.Popups; using JetBrains.Annotations; using Robust.Shared.Map; using Robust.Shared.Map.Components; @@ -21,6 +23,7 @@ namespace Content.Shared.SubFloor [Dependency] protected readonly SharedMapSystem Map = default!; [Dependency] protected readonly SharedAppearanceSystem Appearance = default!; [Dependency] private readonly SharedVisibilitySystem _visibility = default!; + [Dependency] protected readonly SharedPopupSystem _popup = default!; private EntityQuery _hideQuery; @@ -38,6 +41,32 @@ namespace Content.Shared.SubFloor SubscribeLocalEvent(OnInteractionAttempt); SubscribeLocalEvent(OnAttackAttempt); SubscribeLocalEvent(OnGetExplosionResistance); + SubscribeLocalEvent(OnAnchorAttempt); + SubscribeLocalEvent(OnUnanchorAttempt); + } + + private void OnAnchorAttempt(EntityUid uid, SubFloorHideComponent component, AnchorAttemptEvent args) + { + // No teleporting entities through floor tiles when anchoring them. + var xform = Transform(uid); + + if (TryComp(xform.GridUid, out var grid) + && HasFloorCover(xform.GridUid.Value, grid, Map.TileIndicesFor(xform.GridUid.Value, grid, xform.Coordinates))) + { + _popup.PopupClient(Loc.GetString("subfloor-anchor-failure", ("entity", uid)), args.User); + args.Cancel(); + } + } + + private void OnUnanchorAttempt(EntityUid uid, SubFloorHideComponent component, UnanchorAttemptEvent args) + { + // No un-anchoring things under the floor. Only required for something like vents, which are still interactable + // despite being partially under the floor. + if (component.IsUnderCover) + { + _popup.PopupClient(Loc.GetString("subfloor-unanchor-failure", ("entity", uid)), args.User); + args.Cancel(); + } } private void OnGetExplosionResistance(EntityUid uid, SubFloorHideComponent component, ref GetExplosionResistanceEvent args) diff --git a/Resources/Locale/en-US/subfloor/subfloor.ftl b/Resources/Locale/en-US/subfloor/subfloor.ftl new file mode 100644 index 0000000000..90d771134a --- /dev/null +++ b/Resources/Locale/en-US/subfloor/subfloor.ftl @@ -0,0 +1,2 @@ +subfloor-anchor-failure = {CAPITALIZE(THE($entity))} can't be anchored here! +subfloor-unanchor-failure = {CAPITALIZE(THE($entity))} can't be unanchored here!