From 0cfbee98098536fd257850cd76b69fb78dc433fb Mon Sep 17 00:00:00 2001 From: DeltaFire Date: Sat, 6 Jun 2020 18:08:30 +0200 Subject: [PATCH] modifies keycard authentification devices They now actually require an ID to authentificate instead of just 'access' to it. Additionally, one can no longer initiate and confirm actions with the same ID. --- .../security_levels/keycard_authentication.dm | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 04f2de9bec..adf53ff0da 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -20,6 +20,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) var/event = "" var/obj/machinery/keycard_auth/event_source var/mob/triggerer = null + var/obj/item/card/id/first_id = null var/waiting = 0 /obj/machinery/keycard_auth/Initialize() @@ -56,32 +57,37 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) return ..() /obj/machinery/keycard_auth/ui_act(action, params) - if(..() || waiting || !allowed(usr)) + if(..() || waiting) + return + var/obj/item/card/id/ID = usr.get_idcard(TRUE) + if(!ID || !istype(ID)) + return + if(!check_access(ID)) return switch(action) if("red_alert") if(!event_source) - sendEvent(KEYCARD_RED_ALERT) + sendEvent(KEYCARD_RED_ALERT, ID) . = TRUE if("emergency_maint") if(!event_source) - sendEvent(KEYCARD_EMERGENCY_MAINTENANCE_ACCESS) + sendEvent(KEYCARD_EMERGENCY_MAINTENANCE_ACCESS, ID) . = TRUE if("auth_swipe") - if(event_source) + if(event_source && ID != first_id && first_id) event_source.trigger_event(usr) event_source = null . = TRUE if("bsa_unlock") if(!event_source) - sendEvent(KEYCARD_BSA_UNLOCK) + sendEvent(KEYCARD_BSA_UNLOCK, ID) . = TRUE -/obj/machinery/keycard_auth/proc/sendEvent(event_type) +/obj/machinery/keycard_auth/proc/sendEvent(event_type, trigger_id) triggerer = usr event = event_type waiting = 1 - GLOB.keycard_events.fireEvent("triggerEvent", src) + GLOB.keycard_events.fireEvent("triggerEvent", src, trigger_id) addtimer(CALLBACK(src, .proc/eventSent), 20) /obj/machinery/keycard_auth/proc/eventSent() @@ -89,14 +95,16 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) event = "" waiting = 0 -/obj/machinery/keycard_auth/proc/triggerEvent(source) +/obj/machinery/keycard_auth/proc/triggerEvent(source, trigger_id) icon_state = "auth_on" + first_id = trigger_id event_source = source addtimer(CALLBACK(src, .proc/eventTriggered), 20) /obj/machinery/keycard_auth/proc/eventTriggered() icon_state = "auth_off" event_source = null + first_id = null /obj/machinery/keycard_auth/proc/trigger_event(confirmer) log_game("[key_name(triggerer)] triggered and [key_name(confirmer)] confirmed event [event]")