diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm
index 5bd9caa70a3..9b158071c37 100644
--- a/code/modules/security levels/keycard authentication.dm
+++ b/code/modules/security levels/keycard authentication.dm
@@ -17,6 +17,7 @@ var/global/list/obj/machinery/keycard_auth/authenticators = list()
var/ert_reason
//1 = select event
//2 = authenticate
+ req_one_access = list(access_keycard_auth)
anchored = 1.0
use_power = 1
idle_power_usage = 2
@@ -28,26 +29,38 @@ var/global/list/obj/machinery/keycard_auth/authenticators = list()
authenticators += src
/obj/machinery/keycard_auth/attack_ai(mob/user as mob)
- to_chat(user, "The station AI is not to interact with these devices.")
+ to_chat(user, "The station AI is not to interact with these devices.")
return
/obj/machinery/keycard_auth/attack_paw(mob/user as mob)
- to_chat(user, "You are too primitive to use this device.")
+ to_chat(user, "You are too primitive to use this device.")
return
/obj/machinery/keycard_auth/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(stat & (NOPOWER|BROKEN))
- to_chat(user, "This device is not powered.")
+ to_chat(user, "This device is not powered.")
return
- if(istype(W,/obj/item/weapon/card/id))
- var/obj/item/weapon/card/id/ID = W
- if(access_keycard_auth in ID.access)
+ if(isID(W) || isPDA(W))
+ if(check_access(W))
if(active == 1)
//This is not the device that made the initial request. It is the device confirming the request.
if(event_source)
- event_source.confirmed = 1
- event_source.event_confirmed_by = usr
+ confirmed = 1
+
+ // All the useful information is in the source device, so copy it over. There's probably a better way to do this.
+ event_triggered_by = event_source.event_triggered_by
+ event_confirmed_by = usr
+ event = event_source.event
+ ert_reason = event_source.ert_reason
+
+ playsound(src, get_sfx("card_swipe"), 60, 1, -5)
+ to_chat(user, "You swipe your ID card to confirm the [event].")
+
+ trigger_event(event)
else if(screen == 2)
+ playsound(src, get_sfx("card_swipe"), 60, 1, -5)
+ to_chat(user, "You swipe your ID card to request the [event].")
+
event_triggered_by = usr
broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices
@@ -64,10 +77,10 @@ var/global/list/obj/machinery/keycard_auth/authenticators = list()
/obj/machinery/keycard_auth/attack_hand(mob/user as mob)
if(user.stat || stat & (NOPOWER|BROKEN))
- to_chat(user, "This device is not powered.")
+ to_chat(user, "This device is not powered.")
return
if(busy)
- to_chat(user, "This device is busy.")
+ to_chat(user, "This device is busy.")
return
user.set_machine(src)
@@ -105,10 +118,10 @@ var/global/list/obj/machinery/keycard_auth/authenticators = list()
if(..())
return 1
if(busy)
- to_chat(usr, "This device is busy.")
+ to_chat(usr, "This device is busy.")
return
if(usr.stat || stat & (BROKEN|NOPOWER))
- to_chat(usr, "This device is without power.")
+ to_chat(usr, "This device is without power.")
return
if(href_list["triggerevent"])
if(href_list["triggerevent"] == "Emergency Response Team")
@@ -132,6 +145,7 @@ var/global/list/obj/machinery/keycard_auth/authenticators = list()
event = ""
screen = 1
confirmed = 0
+ busy = 0
event_source = null
icon_state = "auth_off"
event_triggered_by = null
@@ -142,17 +156,7 @@ var/global/list/obj/machinery/keycard_auth/authenticators = list()
for(var/obj/machinery/keycard_auth/KA in authenticators)
if(KA == src)
continue
- KA.reset()
- spawn()
- KA.receive_request(src)
-
- sleep(confirm_delay)
- if(confirmed)
- confirmed = 0
- trigger_event(event)
- log_game("[key_name(event_triggered_by)] triggered and [key_name(event_confirmed_by)] confirmed event [event][event=="Emergency Response Team"?". ERT reason given was '[ert_reason]'":""]")
- message_admins("[key_name(event_triggered_by)] triggered and [key_name(event_confirmed_by)] confirmed event [event][event=="Emergency Response Team"?". ERT reason given was '[ert_reason]'":""]", 1)
- reset()
+ KA.receive_request(src)
/obj/machinery/keycard_auth/proc/receive_request(var/obj/machinery/keycard_auth/source)
if(stat & (BROKEN|NOPOWER))
@@ -162,12 +166,10 @@ var/global/list/obj/machinery/keycard_auth/authenticators = list()
active = 1
icon_state = "auth_on"
- sleep(confirm_delay)
-
- event_source = null
- icon_state = "auth_off"
- active = 0
- busy = 0
+ spawn(confirm_delay)
+ if(active)
+ for(var/obj/machinery/keycard_auth/KA in authenticators)
+ KA.reset()
/obj/machinery/keycard_auth/proc/trigger_event()
switch(event)
@@ -186,8 +188,15 @@ var/global/list/obj/machinery/keycard_auth/authenticators = list()
if("Emergency Response Team")
var/datum/striketeam/ert/response_team = new()
response_team.mission = ert_reason
- response_team.trigger_strike()
+ response_team.trigger_strike() // This will show up as *null* in logs, adding requester gives them power to approve an ERT.
feedback_inc("alert_keycard_auth_ert",1)
+ event_source.visible_message("An ERT has been requested, please await a response.")
+ playsound(event_source, 'sound/machines/notify.ogg', 60, 0)
+
+ log_game("[key_name(event_triggered_by)] triggered and [key_name(event_confirmed_by)] confirmed event [event][event=="Emergency Response Team"?". ERT reason given was '[ert_reason]'":""]")
+ message_admins("[key_name(event_triggered_by)] triggered and [key_name(event_confirmed_by)] confirmed event [event][event=="Emergency Response Team"?". ERT reason given was '[ert_reason]'":""]")
+ for(var/obj/machinery/keycard_auth/KA in authenticators)
+ KA.reset()
var/global/maint_all_access = 0