mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
(forgot one file, but also sending the log from the previous commit)
Command intercept will now only increase the security level if it's lower than blue Added a keycard authentication device. When you interact with it it asks you which event you'd like to trigger, currently only "Red alert". When you select the event, it asks you to swipe your ID card. If you have the new keycard auth access (60) on it (all heads of staff do), it will trigger all other devices of the same type to flash for 2 seconds. If someone with the same access level on their card swipes their card on another device during this period, the event will happen. The idea behind this is the two key idea from submarine movies - just with ID cards. Admins are informed who requests the event and who triggers it btw, so abusing this is a bad idea. Added this to the changelog. Hopefully the dme will work properly this time. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2635 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
143
code/modules/security levels/keycard authentication.dm
Normal file
143
code/modules/security levels/keycard authentication.dm
Normal file
@@ -0,0 +1,143 @@
|
||||
/obj/machinery/keycard_auth
|
||||
name = "Keycard Authentication Device"
|
||||
desc = "This device is used to trigger ship functions, which require more than one ID card to authenticate."
|
||||
icon = 'monitors.dmi'
|
||||
icon_state = "auth_off"
|
||||
var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made.
|
||||
var/event = ""
|
||||
var/screen = 1
|
||||
var/confirmed = 0 //This variable is set by the device that confirms the request.
|
||||
var/confirm_delay = 20 //(2 seconds)
|
||||
var/busy = 0 //Busy when waiting for authentication or an event request has been sent from this device.
|
||||
var/obj/machinery/keycard_auth/event_source
|
||||
var/mob/event_triggered_by
|
||||
var/mob/event_confirmed_by
|
||||
//1 = select event
|
||||
//2 = authenticate
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 6
|
||||
power_channel = ENVIRON
|
||||
|
||||
/obj/machinery/keycard_auth/attack_ai(mob/user as mob)
|
||||
user << "The ship AI is not to interact with these devices"
|
||||
return
|
||||
|
||||
/obj/machinery/keycard_auth/attack_paw(mob/user as mob)
|
||||
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))
|
||||
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(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
|
||||
else if(screen == 2)
|
||||
event_triggered_by = usr
|
||||
broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices
|
||||
|
||||
/obj/machinery/keycard_auth/power_change()
|
||||
if(powered(ENVIRON))
|
||||
stat &= ~NOPOWER
|
||||
icon_state = "auth_off"
|
||||
else
|
||||
stat |= NOPOWER
|
||||
|
||||
/obj/machinery/keycard_auth/attack_hand(mob/user as mob)
|
||||
if(user.stat || stat & (NOPOWER|BROKEN))
|
||||
user << "This device is not powered."
|
||||
return
|
||||
if (busy)
|
||||
user << "This device is busy"
|
||||
return
|
||||
|
||||
user.machine = src
|
||||
|
||||
var/dat = "<h1>Keycard Authentication Device</h1>"
|
||||
|
||||
dat += "This device is used to trigger some high security events. It requires the simultaneous swipe of two high-level ID cards"
|
||||
dat += "<br><hr><br>"
|
||||
|
||||
if ( screen == 1 )
|
||||
dat += "Select an event to trigger:<ul>"
|
||||
dat += "<li><A href='?src=\ref[src];triggerevent=Red alert'>Red alert</A></li>"
|
||||
dat += "</ul>"
|
||||
user << browse(dat, "window=keycard_auth;size=500x250")
|
||||
if ( screen == 2 )
|
||||
dat += "Please swipe your card to authorize the following event: <b>[event]</b>"
|
||||
dat += "<p><A href='?src=\ref[src];reset=1'>Back</A>"
|
||||
user << browse(dat, "window=keycard_auth;size=500x250")
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/keycard_auth/Topic(href, href_list)
|
||||
..()
|
||||
if (busy)
|
||||
usr << "This device is busy"
|
||||
return
|
||||
if (usr.stat || stat & (BROKEN|NOPOWER))
|
||||
usr << "This device is without power"
|
||||
return
|
||||
if (href_list["triggerevent"])
|
||||
event = href_list["triggerevent"]
|
||||
screen = 2
|
||||
if (href_list["reset"])
|
||||
reset()
|
||||
|
||||
src.updateUsrDialog()
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
/obj/machinery/keycard_auth/proc/reset()
|
||||
active = 0
|
||||
event = ""
|
||||
screen = 1
|
||||
confirmed = 0
|
||||
event_source = null
|
||||
icon_state = "auth_off"
|
||||
event_triggered_by = null
|
||||
event_confirmed_by = null
|
||||
|
||||
/obj/machinery/keycard_auth/proc/broadcast_request()
|
||||
icon_state = "auth_on"
|
||||
for(var/obj/machinery/keycard_auth/KA in world)
|
||||
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]")
|
||||
message_admins("[key_name(event_triggered_by)] triggered and [key_name(event_confirmed_by)] confirmed event [event]", 1)
|
||||
reset()
|
||||
|
||||
/obj/machinery/keycard_auth/proc/receive_request(var/obj/machinery/keycard_auth/source)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
event_source = source
|
||||
busy = 1
|
||||
active = 1
|
||||
icon_state = "auth_on"
|
||||
|
||||
sleep(confirm_delay)
|
||||
|
||||
event_source = null
|
||||
icon_state = "auth_off"
|
||||
active = 0
|
||||
busy = 0
|
||||
|
||||
/obj/machinery/keycard_auth/proc/trigger_event()
|
||||
switch(event)
|
||||
if("Red alert")
|
||||
set_security_level(SEC_LEVEL_RED)
|
||||
Reference in New Issue
Block a user