disallow unanchoring or opening panels on locked emitters/APEs (#26600)

* disallow unanchoring or opening panels on locked emitters/APEs

* no locking open panels

* oops

* needback feedback

* Update Content.Shared/Lock/LockSystem.cs

* Update Content.Shared/Lock/LockSystem.cs

* Update Content.Shared/Lock/LockSystem.cs

* sanity

---------

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
Nemanja
2024-03-31 02:34:17 -04:00
committed by GitHub
parent d512bc141a
commit 1b69762816
12 changed files with 129 additions and 15 deletions

View File

@@ -28,15 +28,24 @@ public abstract class SharedWiresSystem : EntitySystem
if (args.Cancelled)
return;
TogglePanel(uid, panel, !panel.Open);
if (!TogglePanel(uid, panel, !panel.Open, args.User))
return;
AdminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(args.User):user} screwed {ToPrettyString(uid):target}'s maintenance panel {(panel.Open ? "open" : "closed")}");
var sound = panel.Open ? panel.ScrewdriverOpenSound : panel.ScrewdriverCloseSound;
Audio.PlayPredicted(sound, uid, args.User);
args.Handled = true;
}
private void OnInteractUsing(Entity<WiresPanelComponent> ent, ref InteractUsingEvent args)
{
if (!Tool.HasQuality(args.Used, ent.Comp.OpeningTool))
return;
if (!CanTogglePanel(ent, args.User))
return;
if (!Tool.UseTool(
args.Used,
args.User,
@@ -89,14 +98,25 @@ public abstract class SharedWiresSystem : EntitySystem
Appearance.SetData(uid, WiresVisuals.MaintenancePanelState, panel.Open && panel.Visible, appearance);
}
public void TogglePanel(EntityUid uid, WiresPanelComponent component, bool open)
public bool TogglePanel(EntityUid uid, WiresPanelComponent component, bool open, EntityUid? user = null)
{
if (!CanTogglePanel((uid, component), user))
return false;
component.Open = open;
UpdateAppearance(uid, component);
Dirty(uid, component);
var ev = new PanelChangedEvent(component.Open);
RaiseLocalEvent(uid, ref ev);
return true;
}
public bool CanTogglePanel(Entity<WiresPanelComponent> ent, EntityUid? user)
{
var attempt = new AttemptChangePanelEvent(ent.Comp.Open, user);
RaiseLocalEvent(ent, ref attempt);
return !attempt.Cancelled;
}
public bool IsPanelOpen(Entity<WiresPanelComponent?> entity)