From f21c921c56592f8dd3fe117c4df454356b4489e0 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Fri, 1 Oct 2021 15:09:01 +0200 Subject: [PATCH] Fix being able to place cables on non-subfloor tiles - Also performs an actionblocker check just in case. --- .../Power/Components/CablePlacerComponent.cs | 25 +++++++++++++------ Resources/Changelog/Parts/cable.yml | 4 +++ 2 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 Resources/Changelog/Parts/cable.yml diff --git a/Content.Server/Power/Components/CablePlacerComponent.cs b/Content.Server/Power/Components/CablePlacerComponent.cs index 97363c7f32..e7e0143b79 100644 --- a/Content.Server/Power/Components/CablePlacerComponent.cs +++ b/Content.Server/Power/Components/CablePlacerComponent.cs @@ -1,7 +1,9 @@ using System.Threading.Tasks; using Content.Server.Stack; +using Content.Shared.ActionBlocker; using Content.Shared.Interaction; using Content.Shared.Interaction.Helpers; +using Content.Shared.Maps; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Map; @@ -29,26 +31,35 @@ namespace Content.Server.Power.Components /// async Task IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) { + if (!EntitySystem.Get().CanInteract(eventArgs.User)) + return false; + if (_cablePrototypeID == null) - return true; + return false; + if (!eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) - return true; + return false; + if(!_mapManager.TryGetGrid(eventArgs.ClickLocation.GetGridId(Owner.EntityManager), out var grid)) - return true; + return false; + var snapPos = grid.TileIndicesFor(eventArgs.ClickLocation); - if(grid.GetTileRef(snapPos).Tile.IsEmpty) - return true; + var tileDef = grid.GetTileRef(snapPos).Tile.GetContentTileDefinition(); + + if(!tileDef.IsSubFloor || tileDef.IsSpace) + return false; + foreach (var anchored in grid.GetAnchoredEntities(snapPos)) { if (Owner.EntityManager.TryGetComponent(anchored, out var wire) && wire.CableType == _blockingCableType) { - return true; + return false; } } if (Owner.TryGetComponent(out var stack) && !EntitySystem.Get().Use(Owner.Uid, 1, stack)) - return true; + return false; Owner.EntityManager.SpawnEntity(_cablePrototypeID, grid.GridTileToLocal(snapPos)); return true; diff --git a/Resources/Changelog/Parts/cable.yml b/Resources/Changelog/Parts/cable.yml new file mode 100644 index 0000000000..a13ba8de2e --- /dev/null +++ b/Resources/Changelog/Parts/cable.yml @@ -0,0 +1,4 @@ +author: Zumorica +changes: + - type: Fix # One of the following: Add, Remove, Tweak, Fix + message: Fix being able to place cables/wires on non-subfloor tiles.