mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-22 06:56:31 +00:00
Added dextrous guardians to the code, able to hold and use items and store a single item within themselves. Dextrous guardians do low damage on punches, have medium damage resist, and recalling or leashing will force them to drop any items in their hands.
119 lines
3.7 KiB
Plaintext
119 lines
3.7 KiB
Plaintext
var/datum/events/keycard_events = new()
|
|
|
|
/obj/machinery/keycard_auth
|
|
name = "Keycard Authentication Device"
|
|
desc = "This device is used to trigger station functions, which require more than one ID card to authenticate."
|
|
icon = 'icons/obj/monitors.dmi'
|
|
icon_state = "auth_off"
|
|
anchored = 1
|
|
use_power = 1
|
|
idle_power_usage = 2
|
|
active_power_usage = 6
|
|
power_channel = ENVIRON
|
|
req_access = list(access_keycard_auth)
|
|
var/datum/event/ev
|
|
var/event = ""
|
|
var/obj/machinery/keycard_auth/event_source
|
|
var/mob/triggerer = null
|
|
var/waiting = 0
|
|
|
|
/obj/machinery/keycard_auth/New()
|
|
. = ..()
|
|
ev = keycard_events.addEvent("triggerEvent", src, "triggerEvent")
|
|
|
|
/obj/machinery/keycard_auth/Destroy()
|
|
keycard_events.clearEvent("triggerEvent", ev)
|
|
qdel(ev)
|
|
. = ..()
|
|
|
|
/obj/machinery/keycard_auth/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
|
datum/tgui/master_ui = null, datum/ui_state/state = physical_state)
|
|
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
|
if(!ui)
|
|
ui = new(user, src, ui_key, "keycard_auth", name, 375, 125, master_ui, state)
|
|
ui.open()
|
|
|
|
/obj/machinery/keycard_auth/ui_data()
|
|
var/list/data = list()
|
|
data["waiting"] = waiting
|
|
data["auth_required"] = event_source ? event_source.event : 0
|
|
data["red_alert"] = (seclevel2num(get_security_level()) >= SEC_LEVEL_RED) ? 1 : 0
|
|
data["emergency_maint"] = emergency_access
|
|
return data
|
|
|
|
/obj/machinery/keycard_auth/ui_status(mob/user)
|
|
if(isanimal(user))
|
|
var/mob/living/simple_animal/A = user
|
|
if(!A.dextrous)
|
|
user << "<span class='warning'>You are too primitive to use this device!</span>"
|
|
return UI_CLOSE
|
|
return ..()
|
|
|
|
/obj/machinery/keycard_auth/ui_act(action, params)
|
|
if(..() || waiting || !allowed(usr))
|
|
return
|
|
switch(action)
|
|
if("red_alert")
|
|
if(!event_source)
|
|
sendEvent("Red Alert")
|
|
. = TRUE
|
|
if("emergency_maint")
|
|
if(!event_source)
|
|
sendEvent("Emergency Maintenance Access")
|
|
. = TRUE
|
|
if("auth_swipe")
|
|
if(event_source)
|
|
event_source.trigger_event(usr)
|
|
event_source = null
|
|
. = TRUE
|
|
|
|
/obj/machinery/keycard_auth/proc/sendEvent(event_type)
|
|
triggerer = usr
|
|
event = event_type
|
|
waiting = 1
|
|
keycard_events.fireEvent("triggerEvent", src)
|
|
addtimer(src, "eventSent", 20)
|
|
|
|
/obj/machinery/keycard_auth/proc/eventSent()
|
|
triggerer = null
|
|
event = ""
|
|
waiting = 0
|
|
|
|
/obj/machinery/keycard_auth/proc/triggerEvent(source)
|
|
icon_state = "auth_on"
|
|
event_source = source
|
|
addtimer(src, "eventTriggered", 20)
|
|
|
|
/obj/machinery/keycard_auth/proc/eventTriggered()
|
|
icon_state = "auth_off"
|
|
event_source = null
|
|
|
|
/obj/machinery/keycard_auth/proc/trigger_event(confirmer)
|
|
log_game("[key_name(triggerer)] triggered and [key_name(confirmer)] confirmed event [event]")
|
|
message_admins("[key_name(triggerer)] triggered and [key_name(confirmer)] confirmed event [event]")
|
|
switch(event)
|
|
if("Red Alert")
|
|
set_security_level(SEC_LEVEL_RED)
|
|
feedback_inc("alert_keycard_auth_red",1)
|
|
if("Emergency Maintenance Access")
|
|
make_maint_all_access()
|
|
feedback_inc("alert_keycard_auth_maint",1)
|
|
|
|
|
|
/var/emergency_access = 0
|
|
/proc/make_maint_all_access()
|
|
for(var/area/maintenance/A in world)
|
|
for(var/obj/machinery/door/airlock/D in A)
|
|
D.emergency = 1
|
|
D.update_icon(0)
|
|
minor_announce("Access restrictions on maintenance and external airlocks have been lifted.", "Attention! Station-wide emergency declared!",1)
|
|
emergency_access = 1
|
|
|
|
/proc/revoke_maint_all_access()
|
|
for(var/area/maintenance/A in world)
|
|
for(var/obj/machinery/door/airlock/D in A)
|
|
D.emergency = 0
|
|
D.update_icon(0)
|
|
minor_announce("Access restrictions in maintenance areas have been restored.", "Attention! Station-wide emergency rescinded:")
|
|
emergency_access = 0
|