Fix borg becoming emag immune if emag attempted with panel closed. (#23729)
* Fix borg becoming emag immune if emag attempted with panel closed. * new event * removed code added in accessreader * fix emag 1984 (cherry picked from commit 23e714e523f18ffe5c4a2e1e2186142371dbf0bb)
This commit is contained in:
parent
98e9d86840
commit
e36dd93b60
|
|
@ -6,6 +6,7 @@ using Content.Shared.Emag.Components;
|
|||
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;
|
||||
|
|
@ -79,6 +80,13 @@ public sealed class EmagSystem : EntitySystem
|
|||
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);
|
||||
|
||||
|
|
@ -90,3 +98,6 @@ public sealed class EmagSystem : EntitySystem
|
|||
|
||||
[ByRefEvent]
|
||||
public record struct GotEmaggedEvent(EntityUid UserUid, bool Handled = false, bool Repeatable = false);
|
||||
|
||||
[ByRefEvent]
|
||||
public record struct OnAttemptEmagEvent(EntityUid UserUid, bool Handled = false);
|
||||
|
|
|
|||
|
|
@ -16,18 +16,23 @@ public abstract class SharedSiliconLawSystem : EntitySystem
|
|||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue