Event based lock access (#40883)
* init * some bonus stuff * CheckForAnyReaders * reader * doc * review * fuck yaml * Me when I push changes myshelf --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
This commit is contained in:
@@ -10,6 +10,7 @@ using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared.Localizations;
|
||||
using Content.Shared.Lock;
|
||||
using Content.Shared.NameIdentifier;
|
||||
using Content.Shared.PDA;
|
||||
using Content.Shared.StationRecords;
|
||||
@@ -44,6 +45,8 @@ public sealed class AccessReaderSystem : EntitySystem
|
||||
SubscribeLocalEvent<AccessReaderComponent, GotEmaggedEvent>(OnEmagged);
|
||||
SubscribeLocalEvent<AccessReaderComponent, LinkAttemptEvent>(OnLinkAttempt);
|
||||
SubscribeLocalEvent<AccessReaderComponent, AccessReaderConfigurationAttemptEvent>(OnConfigurationAttempt);
|
||||
SubscribeLocalEvent<AccessReaderComponent, FindAvailableLocksEvent>(OnFindAvailableLocks);
|
||||
SubscribeLocalEvent<AccessReaderComponent, CheckUserHasLockAccessEvent>(OnCheckLockAccess);
|
||||
|
||||
SubscribeLocalEvent<AccessReaderComponent, ComponentGetState>(OnGetState);
|
||||
SubscribeLocalEvent<AccessReaderComponent, ComponentHandleState>(OnHandleState);
|
||||
@@ -169,6 +172,22 @@ public sealed class AccessReaderSystem : EntitySystem
|
||||
ent.Comp.AccessListsOriginal ??= new(ent.Comp.AccessLists);
|
||||
}
|
||||
|
||||
private void OnFindAvailableLocks(Entity<AccessReaderComponent> ent, ref FindAvailableLocksEvent args)
|
||||
{
|
||||
args.FoundReaders |= LockTypes.Access;
|
||||
}
|
||||
|
||||
private void OnCheckLockAccess(Entity<AccessReaderComponent> ent, ref CheckUserHasLockAccessEvent args)
|
||||
{
|
||||
// Are we looking for an access lock?
|
||||
if (!args.FoundReaders.HasFlag(LockTypes.Access))
|
||||
return;
|
||||
|
||||
// If the user has access to this lock, we pass it into the event.
|
||||
if (IsAllowed(args.User, ent))
|
||||
args.HasAccess |= LockTypes.Access;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Searches the source for access tags
|
||||
/// then compares it with the all targets accesses to see if it is allowed.
|
||||
|
||||
Reference in New Issue
Block a user