From 260df1bcf9f770a6f9e0747e186c672f5ae2c43f Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 26 Sep 2022 00:53:57 +0200 Subject: [PATCH] [MIRROR] Fixed airlock shells made from airlock electronics not triggering AAE circuit component [MDB IGNORE] (#16360) * Fixed airlock shells made from airlock electronics not triggering AAE circuit component (#69992) Airlock shells made from airlock electronic and door assemblies would not trigger the 'Airlock Access Event' circuit component because the registered signals did not include the signals called by regular airlocks. This fixes that. * Fixed airlock shells made from airlock electronics not triggering AAE circuit component Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> --- code/__DEFINES/dcs/signals/signals_object.dm | 2 +- code/modules/jobs/access.dm | 5 ++++- code/modules/wiremod/shell/airlock.dm | 14 ++++++++++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index 3651139b127..5464fffdcec 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -81,9 +81,9 @@ #define COMSIG_OBJ_ALLOWED "door_try_to_activate" #define COMPONENT_OBJ_ALLOW (1<<0) + #define COMPONENT_OBJ_DISALLOW (1<<1) #define COMSIG_AIRLOCK_SHELL_ALLOWED "airlock_shell_try_allowed" - #define COMPONENT_AIRLOCK_SHELL_ALLOW (1<<0) // /obj/machinery/door/airlock signals diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index f7bd7d1aa84..b30742d0dfc 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -1,7 +1,10 @@ //returns TRUE if this mob has sufficient access to use this object /obj/proc/allowed(mob/accessor) - if(SEND_SIGNAL(src, COMSIG_OBJ_ALLOWED, accessor) & COMPONENT_OBJ_ALLOW) + var/result_bitflags = SEND_SIGNAL(src, COMSIG_OBJ_ALLOWED, accessor) + if(result_bitflags & COMPONENT_OBJ_ALLOW) return TRUE + if(result_bitflags & COMPONENT_OBJ_DISALLOW) // override all other checks + return FALSE //check if it doesn't require any access at all if(check_access(null)) return TRUE diff --git a/code/modules/wiremod/shell/airlock.dm b/code/modules/wiremod/shell/airlock.dm index eabb37ccfa2..e04f63ce7c7 100644 --- a/code/modules/wiremod/shell/airlock.dm +++ b/code/modules/wiremod/shell/airlock.dm @@ -31,7 +31,7 @@ return FALSE /obj/machinery/door/airlock/shell/allowed(mob/user) - if(SEND_SIGNAL(src, COMSIG_AIRLOCK_SHELL_ALLOWED, user) & COMPONENT_AIRLOCK_SHELL_ALLOW) + if(SEND_SIGNAL(src, COMSIG_AIRLOCK_SHELL_ALLOWED, user) & COMPONENT_OBJ_ALLOW) return TRUE return isAdminGhostAI(user) @@ -156,12 +156,16 @@ . = ..() if(istype(shell, /obj/machinery/door/airlock)) attached_airlock = shell - RegisterSignal(shell, COMSIG_AIRLOCK_SHELL_ALLOWED , .proc/handle_allowed) + RegisterSignal(shell, list( + COMSIG_OBJ_ALLOWED, + COMSIG_AIRLOCK_SHELL_ALLOWED, + ), .proc/handle_allowed) /obj/item/circuit_component/airlock_access_event/unregister_shell(atom/movable/shell) attached_airlock = null UnregisterSignal(shell, list( - COMSIG_AIRLOCK_SHELL_ALLOWED , + COMSIG_OBJ_ALLOWED, + COMSIG_AIRLOCK_SHELL_ALLOWED )) return ..() @@ -193,4 +197,6 @@ return if(result["should_open"]) - return COMPONENT_AIRLOCK_SHELL_ALLOW + return COMPONENT_OBJ_ALLOW + else + return COMPONENT_OBJ_DISALLOW