From 70dc368d27c153d0ee80153f95d6aab795f82910 Mon Sep 17 00:00:00 2001 From: Atermonera Date: Mon, 14 Jun 2021 00:22:04 -0700 Subject: [PATCH 1/3] Make req_[one_]access lazy --- code/__defines/_lists.dm | 2 +- code/controllers/subsystems/supply.dm | 8 ++++++++ code/game/jobs/access.dm | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/code/__defines/_lists.dm b/code/__defines/_lists.dm index 247e9dfeb0e..582c026f3c8 100644 --- a/code/__defines/_lists.dm +++ b/code/__defines/_lists.dm @@ -39,7 +39,7 @@ #define LAZYACCESSASSOC(L, I, K) L ? L[I] ? L[I][K] ? L[I][K] : null : null : null // Null-safe L.Cut() -#define LAZYCLEARLIST(L) if(L) L.Cut() +#define LAZYCLEARLIST(L) if(L) { L.Cut(); L = null; } // Reads L or an empty list if L is not a list. Note: Does NOT assign, L may be an expression. #define SANITIZE_LIST(L) ( islist(L) ? L : list() ) diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm index c55208d7dfe..481eb66fd76 100644 --- a/code/controllers/subsystems/supply.dm +++ b/code/controllers/subsystems/supply.dm @@ -205,11 +205,19 @@ SUBSYSTEM_DEF(supply) else if(islist(SP.access) && SP.one_access) var/list/L = SP.access // access var is a plain var, we need a list A.req_one_access = L.Copy() +<<<<<<< HEAD A.req_access = null else if(islist(SP.access) && !SP.one_access) var/list/L = SP.access A.req_access = L.Copy() A.req_one_access = null +======= + LAZYCLEARLIST(A.req_access) + else if(islist(SP.access) && !SP.one_access) + var/list/L = SP.access + A.req_access = L.Copy() + LAZYCLEARLIST(A.req_one_access) +>>>>>>> dabfdc1... Merge pull request #8122 from VOREStation/Arokha/access else log_debug("Supply pack with invalid access restriction [SP.access] encountered!") diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index b7b1ab3aed5..be8cd491734 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -28,6 +28,7 @@ return has_access(req_access, req_one_access, L) /proc/has_access(var/list/req_access, var/list/req_one_access, var/list/accesses) +<<<<<<< HEAD // Doesn't have access lists, always works if(!LAZYLEN(req_access) && !LAZYLEN(req_one_access)) return TRUE @@ -54,6 +55,23 @@ // Didn't find anything that matched return FALSE +======= + // req_access list has priority if set + // Requires at least every access in list + for(var/req in req_access) + if(!(req in accesses)) + return FALSE + + // req_one_access is secondary if set + // Requires at least one access in list + if(LAZYLEN(req_one_access)) + for(var/req in req_one_access) + if(req in accesses) + return TRUE + return FALSE + + return TRUE +>>>>>>> dabfdc1... Merge pull request #8122 from VOREStation/Arokha/access /proc/get_centcom_access(job) switch(job) From 034cf08b546a3f901beb582ffc749ff8e0ad2c5f Mon Sep 17 00:00:00 2001 From: Novacat <35587478+Novacat@users.noreply.github.com> Date: Mon, 14 Jun 2021 08:20:35 -0400 Subject: [PATCH 2/3] Update supply.dm --- code/controllers/subsystems/supply.dm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm index 481eb66fd76..47a0e0e7bd4 100644 --- a/code/controllers/subsystems/supply.dm +++ b/code/controllers/subsystems/supply.dm @@ -205,19 +205,11 @@ SUBSYSTEM_DEF(supply) else if(islist(SP.access) && SP.one_access) var/list/L = SP.access // access var is a plain var, we need a list A.req_one_access = L.Copy() -<<<<<<< HEAD - A.req_access = null - else if(islist(SP.access) && !SP.one_access) - var/list/L = SP.access - A.req_access = L.Copy() - A.req_one_access = null -======= LAZYCLEARLIST(A.req_access) else if(islist(SP.access) && !SP.one_access) var/list/L = SP.access A.req_access = L.Copy() LAZYCLEARLIST(A.req_one_access) ->>>>>>> dabfdc1... Merge pull request #8122 from VOREStation/Arokha/access else log_debug("Supply pack with invalid access restriction [SP.access] encountered!") From 8565237711a5271e69d5f641171969e2388e9d81 Mon Sep 17 00:00:00 2001 From: Novacat <35587478+Novacat@users.noreply.github.com> Date: Mon, 14 Jun 2021 08:20:56 -0400 Subject: [PATCH 3/3] Update access.dm --- code/game/jobs/access.dm | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index be8cd491734..e53fa62935b 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -28,34 +28,6 @@ return has_access(req_access, req_one_access, L) /proc/has_access(var/list/req_access, var/list/req_one_access, var/list/accesses) -<<<<<<< HEAD - // Doesn't have access lists, always works - if(!LAZYLEN(req_access) && !LAZYLEN(req_one_access)) - return TRUE - - // Didn't pass anything to compare - if(!LAZYLEN(accesses)) - return FALSE - - // req_access list has priority if set - // Requires at least every access in list - if(LAZYLEN(req_access)) - for(var/req in req_access) - if(!(req in accesses)) - return FALSE - // Wasn't missing any accesses - return TRUE - - // req_one_access is secondary if set - // Requires at least one access in list - for(var/req in req_one_access) - if(req in accesses) - // Found at least one - return TRUE - - // Didn't find anything that matched - return FALSE -======= // req_access list has priority if set // Requires at least every access in list for(var/req in req_access) @@ -71,7 +43,6 @@ return FALSE return TRUE ->>>>>>> dabfdc1... Merge pull request #8122 from VOREStation/Arokha/access /proc/get_centcom_access(job) switch(job)