diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 6e9cf6f11f0..5fd9d9efaaf 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -950,7 +950,10 @@ About the new airlock wires panel: var/obj/item/weapon/airlock_electronics/ae if(!electronics) ae = new/obj/item/weapon/airlock_electronics( src.loc ) - ae.conf_access = src.req_access + if(req_one_access) + ae.conf_access = src.req_one_access + else + ae.conf_access = src.req_access else ae = electronics electronics = null diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 07198623d76..e4ed8d78bc4 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -11,89 +11,106 @@ req_access = list(access_maint_tunnels) var/list/conf_access = null + var/use_one_access = 0 //If the door should require ALL or only ONE of the listed accesses. var/last_configurator = null var/locked = 1 - attack_self(mob/user as mob) - if (!ishuman(user)) - return ..(user) +/obj/item/weapon/airlock_electronics/attack_self(mob/user as mob) + if (!ishuman(user)) + return ..(user) - var/mob/living/carbon/human/H = user - if(H.getBrainLoss() >= 60) - return + var/mob/living/carbon/human/H = user + if(H.getBrainLoss() >= 60) + return - var/t1 = text("Access control
\n") + var/t1 = text("") - if (last_configurator) - t1 += "Operator: [last_configurator]
" + if (last_configurator) + t1 += "Operator: [last_configurator]
" - if (locked) - t1 += "Swipe ID
" + if (locked) + t1 += "Swipe ID
" + else + t1 += "Lock Interface
" + + if(use_one_access) + t1 += "Restriction Type: At least one access required
" else - t1 += "Block
" + t1 += "Restriction Type: All accesses required
" + t1 += "Remove All
" - t1 += conf_access == null ? "All
" : "All
" - - t1 += "
" - - var/list/accesses = get_all_accesses() - for (var/acc in accesses) - var/aname = get_access_desc(acc) - - if (!conf_access || !conf_access.len || !(acc in conf_access)) - t1 += "[aname]
" + var/accesses = "" + accesses += "
Access
" + accesses += "" + accesses += "" + for(var/i = 1; i <= 7; i++) + accesses += "" + accesses += "" + for(var/i = 1; i <= 7; i++) + accesses += "" + accesses += "
[get_region_accesses_name(i)]:
" + for(var/A in get_region_accesses(i)) + if(A in conf_access) + accesses += "[replacetext(get_access_desc(A), " ", " ")] " else - t1 += "[aname]
" + accesses += "[replacetext(get_access_desc(A), " ", " ")] " + accesses += "
" + accesses += "
" + t1 += "[accesses]" - t1 += text("

Close

\n", src) + t1 += text("

Close

\n", src) - user << browse(t1, "window=airlock_electronics") - onclose(user, "airlock") + var/datum/browser/popup = new(user, "airlock_electronics", "Access Control", 900, 500) + popup.set_content(t1) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + onclose(user, "airlock") - Topic(href, href_list) - ..() - if (usr.stat || usr.restrained() || !ishuman(usr)) - return - if (href_list["close"]) - usr << browse(null, "window=airlock") - return +/obj/item/weapon/airlock_electronics/Topic(href, href_list) + ..() + if (usr.stat || usr.restrained() || !ishuman(usr)) + return + if (href_list["close"]) + usr << browse(null, "window=airlock") + return - if (href_list["login"]) - var/obj/item/I = usr.get_active_hand() - if (istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/pda = I - I = pda.id - if (I && src.check_access(I)) - src.locked = 0 - src.last_configurator = I:registered_name + if (href_list["login"]) + var/obj/item/I = usr.get_active_hand() + if (istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/pda = I + I = pda.id + if (I && src.check_access(I)) + src.locked = 0 + src.last_configurator = I:registered_name - if (locked) - return + if (locked) + return - if (href_list["logout"]) - locked = 1 + if (href_list["logout"]) + locked = 1 - if (href_list["access"]) - toggle_access(href_list["access"]) + if (href_list["access"]) + toggle_access(href_list["access"]) - attack_self(usr) + attack_self(usr) - proc - toggle_access(var/acc) - if (acc == "all") +/obj/item/weapon/airlock_electronics/proc/toggle_access(var/acc) + if (acc == "all") + conf_access = null + else if(acc == "one") + use_one_access = !use_one_access + else + var/req = text2num(acc) + + if (conf_access == null) + conf_access = list() + + if (!(req in conf_access)) + conf_access += req + else + conf_access -= req + if (!conf_access.len) conf_access = null - else - var/req = text2num(acc) - - if (conf_access == null) - conf_access = list() - - if (!(req in conf_access)) - conf_access += req - else - conf_access -= req - if (!conf_access.len) - conf_access = null diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index c184c6f3bb5..edfcdf5c5ce 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -555,7 +555,10 @@ obj/structure/door_assembly door = new src.airlock_type( src.loc ) //door.req_access = src.req_access door.electronics = src.electronics - door.req_access = src.electronics.conf_access + if(src.electronics.use_one_access) + door.req_one_access = src.electronics.conf_access + else + door.req_access = src.electronics.conf_access if(created_name) door.name = created_name src.electronics.loc = door diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index af17d680569..9bf25c153a8 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -238,7 +238,10 @@ obj/structure/windoor_assembly/Destroy() windoor.dir = src.dir windoor.density = 0 - windoor.req_access = src.electronics.conf_access + if(src.electronics.use_one_access) + windoor.req_one_access = src.electronics.conf_access + else + windoor.req_access = src.electronics.conf_access windoor.electronics = src.electronics src.electronics.loc = windoor windoor.close()