using Content.Shared.IdentityManagement;
using Content.Shared.Interaction;
using Content.Shared.Popups;
+using Content.Shared.Silicons.Laws.Components;
using Content.Shared.Tag;
namespace Content.Shared.Emag.Systems;
if (HasComp<EmaggedComponent>(target))
return false;
+ var onAttemptEmagEvent = new OnAttemptEmagEvent(user);
+ RaiseLocalEvent(target, ref onAttemptEmagEvent);
+
+ // prevent emagging if attempt fails
+ if (onAttemptEmagEvent.Handled)
+ return false;
+
var emaggedEvent = new GotEmaggedEvent(user);
RaiseLocalEvent(target, ref emaggedEvent);
[ByRefEvent]
public record struct GotEmaggedEvent(EntityUid UserUid, bool Handled = false, bool Repeatable = false);
+
+[ByRefEvent]
+public record struct OnAttemptEmagEvent(EntityUid UserUid, bool Handled = false);
public override void Initialize()
{
SubscribeLocalEvent<EmagSiliconLawComponent, GotEmaggedEvent>(OnGotEmagged);
+ SubscribeLocalEvent<EmagSiliconLawComponent, OnAttemptEmagEvent>(OnAttemptEmag);
}
- protected virtual void OnGotEmagged(EntityUid uid, EmagSiliconLawComponent component, ref GotEmaggedEvent args)
+ protected virtual void OnAttemptEmag(EntityUid uid, EmagSiliconLawComponent component, ref OnAttemptEmagEvent args)
{
if (component.RequireOpenPanel &&
TryComp<WiresPanelComponent>(uid, out var panel) &&
!panel.Open)
{
_popup.PopupClient(Loc.GetString("law-emag-require-panel"), uid, args.UserUid);
- return;
+ args.Handled = true;
}
+ }
+
+ protected virtual void OnGotEmagged(EntityUid uid, EmagSiliconLawComponent component, ref GotEmaggedEvent args)
+ {
component.OwnerName = Name(args.UserUid);
args.Handled = true;
}