mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 01:34:01 +00:00
3591 individual conflicts Update build.js Update install_node.sh Update byond.js oh my fucking god hat slow huh holy shit we all fall down 2 more I missed 2900 individual conflicts 2700 Individual conflicts replaces yarn file with tg version, bumping us down to 2200-ish Down to 2000 individual conflicts 140 down mmm aaaaaaaaaaaaaaaaaaa not yt 575 soon 900 individual conflicts 600 individual conflicts, 121 file conflicts im not okay 160 across 19 files 29 in 4 files 0 conflicts, compiletime fix time some minor incap stuff missed ticks weird dupe definition stuff missed ticks 2 incap fixes undefs and pie fix Radio update and some extra minor stuff returns a single override no more dupe definitions, 175 compiletime errors Unticked file fix sound and emote stuff honk and more radio stuff
245 lines
8.4 KiB
Plaintext
245 lines
8.4 KiB
Plaintext
GLOBAL_DATUM_INIT(keycard_events, /datum/events, new)
|
|
|
|
#define KEYCARD_RED_ALERT "Red Alert"
|
|
#define KEYCARD_EMERGENCY_MAINTENANCE_ACCESS "Emergency Maintenance Access"
|
|
#define KEYCARD_BSA_UNLOCK "Bluespace Artillery Unlock"
|
|
#define KEYCARD_PIN_UNRESTRICT "Unrestrict Permit Firing Pins" //SKYRAT EDIT
|
|
#define KEYCARD_ENG_OVERRIDE "Engineering Override Access" //SKYRAT EDIT
|
|
|
|
#define ACCESS_GRANTING_COOLDOWN (30 SECONDS)
|
|
|
|
/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, or to give the Janitor access to a department."
|
|
icon = 'icons/obj/machines/keycard_auth_table.dmi'
|
|
icon_state = "auth_off"
|
|
power_channel = AREA_USAGE_ENVIRON
|
|
req_access = list(ACCESS_KEYCARD_AUTH)
|
|
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
|
|
|
var/datum/callback/activated
|
|
var/event = ""
|
|
var/obj/machinery/keycard_auth/event_source
|
|
var/mob/triggerer = null
|
|
var/waiting = FALSE
|
|
|
|
COOLDOWN_DECLARE(access_grant_cooldown)
|
|
|
|
/obj/machinery/keycard_auth/Initialize(mapload)
|
|
. = ..()
|
|
activated = GLOB.keycard_events.addEvent("triggerEvent", CALLBACK(src, PROC_REF(triggerEvent)))
|
|
|
|
/obj/machinery/keycard_auth/Destroy()
|
|
GLOB.keycard_events.clearEvent("triggerEvent", activated)
|
|
activated = null
|
|
return ..()
|
|
|
|
/obj/machinery/keycard_auth/ui_state(mob/user)
|
|
return GLOB.physical_state
|
|
|
|
/obj/machinery/keycard_auth/ui_interact(mob/user, datum/tgui/ui)
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "KeycardAuth", name)
|
|
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"] = (SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED) ? 1 : 0
|
|
data["emergency_maint"] = GLOB.emergency_access
|
|
data["bsa_unlock"] = GLOB.bsa_unlock
|
|
data["permit_pins"] = (CONFIG_GET(flag/permit_pins) ? TRUE : FALSE) //SKYRAT EDIT
|
|
data["eng_override"] = GLOB.force_eng_override //SKYRAT EDIT
|
|
return data
|
|
|
|
/obj/machinery/keycard_auth/ui_status(mob/user, datum/ui_state/state)
|
|
if(isdrone(user))
|
|
return UI_CLOSE
|
|
if(!isanimal_or_basicmob(user))
|
|
return ..()
|
|
if(!HAS_TRAIT(user, TRAIT_CAN_HOLD_ITEMS))
|
|
balloon_alert(user, "no hands!")
|
|
return UI_CLOSE
|
|
return ..()
|
|
|
|
/obj/machinery/keycard_auth/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
|
. = ..()
|
|
if(. || waiting || !allowed(usr))
|
|
return
|
|
|
|
switch(action)
|
|
if("red_alert")
|
|
if(!event_source)
|
|
sendEvent(KEYCARD_RED_ALERT)
|
|
. = TRUE
|
|
if("emergency_maint")
|
|
if(!event_source)
|
|
sendEvent(KEYCARD_EMERGENCY_MAINTENANCE_ACCESS)
|
|
. = TRUE
|
|
if("auth_swipe")
|
|
if(event_source)
|
|
event_source.trigger_event(usr)
|
|
event_source = null
|
|
update_appearance()
|
|
. = TRUE
|
|
if("bsa_unlock")
|
|
if(!event_source)
|
|
sendEvent(KEYCARD_BSA_UNLOCK)
|
|
. = TRUE
|
|
//SKYRAT EDIT START
|
|
if("pin_unrestrict")
|
|
if(!event_source)
|
|
sendEvent(KEYCARD_PIN_UNRESTRICT)
|
|
. = TRUE
|
|
if("eng_override")
|
|
if(!event_source)
|
|
sendEvent(KEYCARD_ENG_OVERRIDE)
|
|
. = TRUE
|
|
//SKYRAT EDIT END
|
|
if("give_janitor_access")
|
|
var/mob/living/living_user = usr
|
|
if(!living_user || !istype(living_user))
|
|
return TRUE
|
|
if(!COOLDOWN_FINISHED(src, access_grant_cooldown))
|
|
balloon_alert(usr, "on cooldown!")
|
|
return TRUE
|
|
var/obj/item/card/id/advanced/card = living_user.get_idcard(hand_first = TRUE)
|
|
if(!card)
|
|
return TRUE
|
|
for(var/access_as_text in SSid_access.sub_department_managers_tgui)
|
|
var/list/info = SSid_access.sub_department_managers_tgui[access_as_text]
|
|
if(card.trim.assignment != info["head"])
|
|
continue
|
|
COOLDOWN_START(src, access_grant_cooldown, ACCESS_GRANTING_COOLDOWN)
|
|
SEND_GLOBAL_SIGNAL(COMSIG_ON_DEPARTMENT_ACCESS, info["regions"])
|
|
balloon_alert(usr, "key access sent")
|
|
return
|
|
|
|
/obj/machinery/keycard_auth/update_appearance(updates)
|
|
. = ..()
|
|
|
|
if(event_source && !(machine_stat & (NOPOWER|BROKEN)))
|
|
set_light(2, 1, "#5668E1")
|
|
else
|
|
set_light(0)
|
|
|
|
/obj/machinery/keycard_auth/update_overlays()
|
|
. = ..()
|
|
|
|
if(event_source && !(machine_stat & (NOPOWER|BROKEN)))
|
|
. += mutable_appearance(icon, "auth_on")
|
|
. += emissive_appearance(icon, "auth_on", src, alpha = src.alpha)
|
|
|
|
/obj/machinery/keycard_auth/proc/sendEvent(event_type)
|
|
triggerer = usr
|
|
event = event_type
|
|
waiting = TRUE
|
|
GLOB.keycard_events.fireEvent("triggerEvent", src)
|
|
addtimer(CALLBACK(src, PROC_REF(eventSent)), 2 SECONDS)
|
|
|
|
/obj/machinery/keycard_auth/proc/eventSent()
|
|
triggerer = null
|
|
event = ""
|
|
waiting = FALSE
|
|
|
|
/obj/machinery/keycard_auth/proc/triggerEvent(source)
|
|
event_source = source
|
|
update_appearance()
|
|
addtimer(CALLBACK(src, PROC_REF(eventTriggered)), 2 SECONDS)
|
|
|
|
/obj/machinery/keycard_auth/proc/eventTriggered()
|
|
event_source = null
|
|
update_appearance()
|
|
|
|
/obj/machinery/keycard_auth/proc/trigger_event(confirmer)
|
|
triggerer.log_message("triggered and [key_name(confirmer)] confirmed event [event].", LOG_GAME)
|
|
message_admins("[ADMIN_LOOKUPFLW(triggerer)] triggered and [ADMIN_LOOKUPFLW(confirmer)] confirmed event [event]")
|
|
|
|
var/area/A1 = get_area(triggerer)
|
|
deadchat_broadcast(" triggered [event] at [span_name("[A1.name]")].", span_name("[triggerer]"), triggerer, message_type=DEADCHAT_ANNOUNCEMENT)
|
|
|
|
var/area/A2 = get_area(confirmer)
|
|
deadchat_broadcast(" confirmed [event] at [span_name("[A2.name]")].", span_name("[confirmer]"), confirmer, message_type=DEADCHAT_ANNOUNCEMENT)
|
|
switch(event)
|
|
if(KEYCARD_RED_ALERT)
|
|
SSsecurity_level.set_level(SEC_LEVEL_RED)
|
|
if(KEYCARD_EMERGENCY_MAINTENANCE_ACCESS)
|
|
make_maint_all_access()
|
|
if(KEYCARD_BSA_UNLOCK)
|
|
toggle_bluespace_artillery()
|
|
//SKYRAT EDIT START
|
|
if(KEYCARD_PIN_UNRESTRICT)
|
|
toggle_permit_pins()
|
|
if(KEYCARD_ENG_OVERRIDE)
|
|
toggle_eng_override()
|
|
//SKYRAT EDIT END
|
|
|
|
/// Subtype which is stuck to a wall
|
|
/obj/machinery/keycard_auth/wall_mounted
|
|
icon = 'icons/obj/machines/wallmounts.dmi'
|
|
|
|
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth/wall_mounted, 26)
|
|
|
|
/obj/machinery/keycard_auth/wall_mounted/Initialize(mapload)
|
|
. = ..()
|
|
find_and_hang_on_wall()
|
|
|
|
/// Subtype which is stuck to a wall
|
|
/obj/machinery/keycard_auth/wall_mounted
|
|
icon = 'icons/obj/machines/wallmounts.dmi'
|
|
|
|
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth/wall_mounted, 26)
|
|
|
|
/obj/machinery/keycard_auth/wall_mounted/Initialize(mapload)
|
|
. = ..()
|
|
find_and_hang_on_wall()
|
|
|
|
/// Subtype which is stuck to a wall
|
|
/obj/machinery/keycard_auth/wall_mounted
|
|
icon = 'icons/obj/machines/wallmounts.dmi'
|
|
|
|
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth/wall_mounted, 26)
|
|
|
|
/obj/machinery/keycard_auth/wall_mounted/Initialize(mapload)
|
|
. = ..()
|
|
find_and_hang_on_wall()
|
|
|
|
GLOBAL_VAR_INIT(emergency_access, FALSE)
|
|
/proc/make_maint_all_access()
|
|
for(var/area/station/maintenance/area in GLOB.areas)
|
|
for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists())
|
|
for(var/turf/area_turf as anything in zlevel_turfs)
|
|
for(var/obj/machinery/door/airlock/airlock in area_turf)
|
|
airlock.emergency = TRUE
|
|
airlock.update_icon(ALL, 0)
|
|
|
|
minor_announce("Access restrictions on maintenance and external airlocks have been lifted.", "Attention! Station-wide emergency declared!",1)
|
|
GLOB.emergency_access = TRUE
|
|
SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("emergency maintenance access", "enabled"))
|
|
|
|
/proc/revoke_maint_all_access()
|
|
for(var/area/station/maintenance/area in GLOB.areas)
|
|
for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists())
|
|
for(var/turf/area_turf as anything in zlevel_turfs)
|
|
for(var/obj/machinery/door/airlock/airlock in area_turf)
|
|
airlock.emergency = FALSE
|
|
airlock.update_icon(ALL, 0)
|
|
|
|
minor_announce("Access restrictions in maintenance areas have been restored.", "Attention! Station-wide emergency rescinded:")
|
|
GLOB.emergency_access = FALSE
|
|
SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("emergency maintenance access", "disabled"))
|
|
|
|
/proc/toggle_bluespace_artillery()
|
|
GLOB.bsa_unlock = !GLOB.bsa_unlock
|
|
minor_announce("Bluespace Artillery firing protocols have been [GLOB.bsa_unlock? "unlocked" : "locked"]", "Weapons Systems Update:")
|
|
SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("bluespace artillery", GLOB.bsa_unlock? "unlocked" : "locked"))
|
|
|
|
#undef ACCESS_GRANTING_COOLDOWN
|
|
#undef KEYCARD_RED_ALERT
|
|
#undef KEYCARD_EMERGENCY_MAINTENANCE_ACCESS
|
|
#undef KEYCARD_BSA_UNLOCK
|
|
#undef KEYCARD_PIN_UNRESTRICT //SKYRAT EDIT
|
|
#undef KEYCARD_ENG_OVERRIDE //SKYRAT EDIT
|