From e846fa7b824ac90e7ce20a52586364e9188e3954 Mon Sep 17 00:00:00 2001 From: Chompstation Bot Date: Mon, 7 Jun 2021 05:32:43 +0000 Subject: [PATCH] [MIRROR] Adds new UI for secure stuff --- .../objects/items/weapons/storage/secure.dm | 181 +++++++++--------- tgui/packages/tgui/interfaces/SecureSafe.js | 106 ++++++++++ tgui/packages/tgui/public/tgui.bundle.js | 38 +++- 3 files changed, 234 insertions(+), 91 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/SecureSafe.js diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 7519525dd2..436b1da8c6 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -28,80 +28,84 @@ max_storage_space = ITEMSIZE_SMALL * 7 use_sound = 'sound/items/storage/briefcase.ogg' - examine(mob/user) - . = ..() - if(Adjacent(user)) - . += "The service panel is [src.open ? "open" : "closed"]." +/obj/item/weapon/storage/secure/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += "The service panel is [src.open ? "open" : "closed"]." - attackby(obj/item/weapon/W as obj, mob/user as mob) - if(locked) - if (istype(W, /obj/item/weapon/melee/energy/blade) && emag_act(INFINITY, user, "You slice through the lock of \the [src]")) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() - spark_system.set_up(5, 0, src.loc) - spark_system.start() - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) - playsound(src, "sparks", 50, 1) - return - - if (W.is_screwdriver()) - if (do_after(user, 20 * W.toolspeed)) - src.open =! src.open - playsound(src, W.usesound, 50, 1) - user.show_message(text("You [] the service panel.", (src.open ? "open" : "close"))) - return - if (istype(W, /obj/item/device/multitool) && (src.open == 1)&& (!src.l_hacking)) - user.show_message("Now attempting to reset internal memory, please hold.", 1) - src.l_hacking = 1 - if (do_after(usr, 100)) - if (prob(40)) - src.l_setshort = 1 - src.l_set = 0 - user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) - sleep(80) - src.l_setshort = 0 - src.l_hacking = 0 - else - user.show_message("Unable to reset internal memory.", 1) - src.l_hacking = 0 - else src.l_hacking = 0 - return - //At this point you have exhausted all the special things to do when locked - // ... but it's still locked. +/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(locked) + if (istype(W, /obj/item/weapon/melee/energy/blade) && emag_act(INFINITY, user, "You slice through the lock of \the [src]")) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src, "sparks", 50, 1) return - // -> storage/attackby() what with handle insertion, etc - ..() - - - MouseDrop(over_object, src_location, over_location) - if (locked) - src.add_fingerprint(usr) + if (W.is_screwdriver()) + if (do_after(user, 20 * W.toolspeed)) + src.open =! src.open + playsound(src, W.usesound, 50, 1) + user.show_message(text("You [] the service panel.", (src.open ? "open" : "close"))) return - ..() - - - attack_self(mob/user as mob) - user.set_machine(src) - var/dat = text("[]
\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED")) - var/message = "Code" - if ((src.l_set == 0) && (!src.emagged) && (!src.l_setshort)) - dat += text("

\n5-DIGIT PASSCODE NOT SET.
ENTER NEW PASSCODE.
") - if (src.emagged) - dat += text("

\nLOCKING SYSTEM ERROR - 1701") - if (src.l_setshort) - dat += text("

\nALERT: MEMORY SYSTEM ERROR - 6040 201") - message = text("[]", src.code) - if (!src.locked) - message = "*****" - dat += text("


\n>[]
\n1-2-3
\n4-5-6
\n7-8-9
\nR-0-E
\n
", message, src, src, src, src, src, src, src, src, src, src, src, src) - user << browse(dat, "window=caselock;size=300x280") - - Topic(href, href_list) - ..() - if ((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1)) + if (istype(W, /obj/item/device/multitool) && (src.open == 1)&& (!src.l_hacking)) + user.show_message("Now attempting to reset internal memory, please hold.", 1) + src.l_hacking = 1 + if (do_after(usr, 100)) + if (prob(40)) + src.l_setshort = 1 + src.l_set = 0 + src.code = "" + user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) + sleep(80) + src.l_setshort = 0 + src.l_hacking = 0 + else + user.show_message("Unable to reset internal memory.", 1) + src.l_hacking = 0 + else src.l_hacking = 0 return - if (href_list["type"]) - if (href_list["type"] == "E") + //At this point you have exhausted all the special things to do when locked + // ... but it's still locked. + return + + // -> storage/attackby() what with handle insertion, etc + ..() + + +/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location) + if (locked) + src.add_fingerprint(usr) + return + ..() + + +/obj/item/weapon/storage/secure/attack_self(mob/user as mob) + tgui_interact(user) + +/obj/item/weapon/storage/secure/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "SecureSafe", name) + ui.open() + +/obj/item/weapon/storage/secure/tgui_data(mob/user) + var/list/data = list() + data["locked"] = locked + data["code"] = code + data["emagged"] = emagged + data["l_setshort"] = l_setshort + data["l_set"] = l_set + return data + +/obj/item/weapon/storage/secure/tgui_act(action, params) + if(..()) + return TRUE + switch (action) + if("type") + var/digit = params["digit"] + if(digit == "E") if ((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR")) src.l_code = src.code src.l_set = 1 @@ -113,21 +117,18 @@ else src.code = "ERROR" else - if ((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort)) + if ((digit == "R") && (src.emagged == 0) && (!src.l_setshort)) src.locked = 1 src.overlays = null src.code = null src.close(usr) else - src.code += text("[]", href_list["type"]) + src.code += text("[]", digit) if (length(src.code) > 5) src.code = "ERROR" - src.add_fingerprint(usr) - for(var/mob/M in viewers(1, src.loc)) - if ((M.client && M.machine == src)) - src.attack_self(M) - return - return + src.add_fingerprint(usr) + . = TRUE + return /obj/item/weapon/storage/secure/emag_act(var/remaining_charges, var/mob/user, var/feedback) if(!emagged) @@ -156,18 +157,18 @@ w_class = ITEMSIZE_LARGE max_storage_space = ITEMSIZE_COST_NORMAL * 4 - attack_hand(mob/user as mob) - if ((src.loc == user) && (src.locked == 1)) - to_chat(user, "[src] is locked and cannot be opened!") - else if ((src.loc == user) && (!src.locked)) - src.open(usr) - else - ..() - for(var/mob/M in range(1)) - if (M.s_active == src) - src.close(M) - src.add_fingerprint(user) - return +/obj/item/weapon/storage/secure/briefcase/attack_hand(mob/user as mob) + if ((src.loc == user) && (src.locked == 1)) + to_chat(user, "[src] is locked and cannot be opened!") + else if ((src.loc == user) && (!src.locked)) + src.open(usr) + else + ..() + for(var/mob/M in range(1)) + if (M.s_active == src) + src.close(M) + src.add_fingerprint(user) + return // ----------------------------- // Secure Safe @@ -194,4 +195,4 @@ ) /obj/item/weapon/storage/secure/safe/attack_hand(mob/user as mob) - return attack_self(user) + tgui_interact(user) diff --git a/tgui/packages/tgui/interfaces/SecureSafe.js b/tgui/packages/tgui/interfaces/SecureSafe.js new file mode 100644 index 0000000000..4837aeff80 --- /dev/null +++ b/tgui/packages/tgui/interfaces/SecureSafe.js @@ -0,0 +1,106 @@ +import { useBackend } from '../backend'; +import { Box, Button, Flex, Grid, NoticeBox, Section } from '../components'; +import { Window } from '../layouts'; + +const NukeKeypad = (props, context) => { + const { act, data } = useBackend(context); + const keypadKeys = [ + ['1', '4', '7', 'R'], + ['2', '5', '8', '0'], + ['3', '6', '9', 'E'], + ]; + const { + locked, + l_setshort, + code, + emagged, + } = data; + return ( + + + {keypadKeys.map(keyColumn => ( + + {keyColumn.map(key => ( +