Firelocks are no longer pryable by hand if they are powered (#29221)

This commit is contained in:
nikthechampiongr
2024-06-22 17:49:50 +00:00
committed by GitHub
parent 061445ef6e
commit 6aced66406
3 changed files with 24 additions and 3 deletions

View File

@@ -21,6 +21,7 @@ public abstract class SharedFirelockSystem : EntitySystem
// Access/Prying // Access/Prying
SubscribeLocalEvent<FirelockComponent, BeforeDoorOpenedEvent>(OnBeforeDoorOpened); SubscribeLocalEvent<FirelockComponent, BeforeDoorOpenedEvent>(OnBeforeDoorOpened);
SubscribeLocalEvent<FirelockComponent, BeforePryEvent>(OnBeforePry);
SubscribeLocalEvent<FirelockComponent, GetPryTimeModifierEvent>(OnDoorGetPryTimeModifier); SubscribeLocalEvent<FirelockComponent, GetPryTimeModifierEvent>(OnDoorGetPryTimeModifier);
SubscribeLocalEvent<FirelockComponent, PriedEvent>(OnAfterPried); SubscribeLocalEvent<FirelockComponent, PriedEvent>(OnAfterPried);
@@ -60,6 +61,14 @@ public abstract class SharedFirelockSystem : EntitySystem
WarnPlayer((uid, component), args.User.Value); WarnPlayer((uid, component), args.User.Value);
} }
private void OnBeforePry(EntityUid uid, FirelockComponent component, ref BeforePryEvent args)
{
if (args.Cancelled || !component.Powered || args.StrongPry || args.PryPowered)
return;
args.Cancelled = true;
}
private void OnDoorGetPryTimeModifier(EntityUid uid, FirelockComponent component, ref GetPryTimeModifierEvent args) private void OnDoorGetPryTimeModifier(EntityUid uid, FirelockComponent component, ref GetPryTimeModifierEvent args)
{ {
WarnPlayer((uid, component), args.User); WarnPlayer((uid, component), args.User);

View File

@@ -43,14 +43,26 @@ public sealed partial class PryingComponent : Component
/// Cancel to stop the entity from being pried open. /// Cancel to stop the entity from being pried open.
/// </summary> /// </summary>
[ByRefEvent] [ByRefEvent]
public record struct BeforePryEvent(EntityUid User, bool PryPowered, bool Force) public record struct BeforePryEvent(EntityUid User, bool PryPowered, bool Force, bool StrongPry)
{ {
public readonly EntityUid User = User; public readonly EntityUid User = User;
/// <summary>
/// Whether prying should be allowed even if whatever is being pried is powered.
/// </summary>
public readonly bool PryPowered = PryPowered; public readonly bool PryPowered = PryPowered;
/// <summary>
/// Whether prying should be allowed to go through under most circumstances. (E.g. airlock is bolted).
/// Systems may still wish to ignore this occasionally.
/// </summary>
public readonly bool Force = Force; public readonly bool Force = Force;
/// <summary>
/// Whether anything other than bare hands were used. This should only be false if prying is being performed without a prying comp.
/// </summary>
public readonly bool StrongPry = StrongPry;
public string? Message; public string? Message;
public bool Cancelled; public bool Cancelled;

View File

@@ -109,7 +109,7 @@ public sealed class PryingSystem : EntitySystem
if (comp != null || Resolve(user, ref comp, false)) if (comp != null || Resolve(user, ref comp, false))
{ {
canev = new BeforePryEvent(user, comp.PryPowered, comp.Force); canev = new BeforePryEvent(user, comp.PryPowered, comp.Force, true);
} }
else else
{ {
@@ -119,7 +119,7 @@ public sealed class PryingSystem : EntitySystem
return false; return false;
} }
canev = new BeforePryEvent(user, false, false); canev = new BeforePryEvent(user, false, false, false);
} }
RaiseLocalEvent(target, ref canev); RaiseLocalEvent(target, ref canev);