Firelocks are no longer pryable by hand if they are powered (#29221)
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user