From bd7b563ce7d8ca773fdf68ed68fd2c03246d70f0 Mon Sep 17 00:00:00 2001 From: Karolis Date: Thu, 5 Sep 2019 11:01:54 +0300 Subject: [PATCH] Adds keypad maglock (#6871) Makes maglocks mappable Add keypad maglock Add vars that let make maglocks invincible and not require power. --- code/game/jobs/access_datum.dm | 6 ++ .../objects/items/devices/magnetic_lock.dm | 95 +++++++++++++++++- .../changelogs/karolis2011-keypadmaglocks.yml | 4 + icons/obj/magnetic_locks.dmi | Bin 32555 -> 33029 bytes .../components/view/misc/maglock-config.vue | 16 +++ vueui/src/components/view/misc/maglock.vue | 17 ++++ 6 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/karolis2011-keypadmaglocks.yml create mode 100644 vueui/src/components/view/misc/maglock-config.vue create mode 100644 vueui/src/components/view/misc/maglock.vue diff --git a/code/game/jobs/access_datum.dm b/code/game/jobs/access_datum.dm index a43eaa1f0c0..c0300b973da 100644 --- a/code/game/jobs/access_datum.dm +++ b/code/game/jobs/access_datum.dm @@ -508,3 +508,9 @@ var/const/access_journalist = 70//journalist's office access /datum/access/crate_cash id = access_crate_cash access_type = ACCESS_TYPE_NONE + +/var/const/access_none = -1 +/datum/access/none + id = access_none + access_type = ACCESS_TYPE_NONE + diff --git a/code/game/objects/items/devices/magnetic_lock.dm b/code/game/objects/items/devices/magnetic_lock.dm index e34a9b810e8..8c8e8f1223c 100644 --- a/code/game/objects/items/devices/magnetic_lock.dm +++ b/code/game/objects/items/devices/magnetic_lock.dm @@ -19,6 +19,8 @@ var/status = 0 var/locked = 1 var/hacked = 0 + var/invincible = FALSE + var/processpower = TRUE var/constructionstate = 0 var/drain_per_second = 3 var/last_process_time = 0 @@ -49,6 +51,22 @@ desc += " It is painted with [department] colors." update_icon() + var/obj/machinery/door/airlock/newtarget = (locate(/obj/machinery/door/airlock) in get_turf(src)) + if(newtarget) + var/direction = reverse_direction(dir) + forceMove(get_step(newtarget.loc, reverse_direction(direction))) + for (var/obj/machinery/door/airlock/A in oview(1, newtarget)) + var/rdir = get_dir(newtarget, A) + if (istype(A, newtarget.type) && (rdir == turn(direction, -90) || rdir == turn(direction, 90))) + if(!target_node1) + target_node1 = A + target_node1.bracer = src + else + target_node2 = A + target_node2.bracer = src + + status = STATUS_ACTIVE + attach(newtarget) /obj/item/device/magnetic_lock/examine(mob/user) ..(user) @@ -72,9 +90,11 @@ to_chat(user, "You remove \the [powercell].") powercell = null setconstructionstate(2) + return TRUE else if (anchored) if (!locked) detach() + return TRUE else to_chat(user, "\The [src] is locked in place!") else @@ -119,6 +139,8 @@ playsound(loc, "sound/weapons/Genhit.ogg", I.force*2.5, 1) return + if(invincible) + return switch (constructionstate) if (0) if (istype(I, /obj/item/weapon/card/emag)) @@ -208,6 +230,8 @@ return /obj/item/device/magnetic_lock/process() + if(!processpower) + return var/obj/item/weapon/cell/C = powercell // both of these are for viewing ease var/obj/item/weapon/cell/BU = internal_cell var/delta_sec = (world.time - last_process_time) / 10 @@ -300,15 +324,16 @@ target_node2.bracer = src break - user.visible_message("[user] attached [src] onto [newtarget] and flicks it on. The magnetic lock now seals [newtarget].", "You attached [src] onto [newtarget] and switched on the magnetic lock.") user.drop_from_inventory(src, src.loc) forceMove(get_step(newtarget.loc, reverse_direction(direction))) set_dir(reverse_direction(direction)) status = STATUS_ACTIVE attach(newtarget) + user.visible_message("[user] attached [src] onto [newtarget] and flicks it on. The magnetic lock now seals [newtarget].", "You attached [src] onto [newtarget] and switched on the magnetic lock.") return + /obj/item/device/magnetic_lock/proc/setconstructionstate(var/newstate) if (!powercell && newstate == 1) setconstructionstate(2) @@ -404,6 +429,8 @@ add_overlay("overlay_deconstruct_[constructionstate]") /obj/item/device/magnetic_lock/proc/takedamage(var/damage) + if(invincible) + return health -= rand(damage/2, damage) if (damage >= 40 && prob(50)) @@ -419,6 +446,72 @@ if (prob(50)) spark(target ? target : src, 5, alldirs) +/obj/item/device/magnetic_lock/keypad + name = "magnetic door lock" + desc = "A large, passcode locked device used for completely locking down airlocks." + + req_access = list(access_none) + + var/passcode = "open" + var/configurable = TRUE + +/obj/item/device/magnetic_lock/keypad/update_overlays() + ..() + switch (status) + if (STATUS_INACTIVE to STATUS_ACTIVE) + if(istype(src, /obj/item/device/magnetic_lock/keypad)) + add_overlay("overlay_keypad") + + +/obj/item/device/magnetic_lock/keypad/attack_self(mob/user as mob) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) + if(!ui) + if(locked) + ui = new(user, src, "misc-maglock", 300, 100, "Maglock", list()) + else + ui = new(user, src, "misc-maglock-config", 300, 100, "Maglock configuration", list("passcode" = passcode)) + + ui.open() + +/obj/item/device/magnetic_lock/keypad/attack_hand(var/mob/user) + . = ..() + if(. || !locked) + return + + attack_self(user) + +/obj/item/device/magnetic_lock/keypad/Topic(href, href_list) + var/datum/vueui/ui = href_list["vueui"] + if(!istype(ui)) + return + if(href_list["passcode"]) + if(lowertext(href_list["passcode"]) == passcode) + locked = !locked + playsound(src, 'sound/machines/ping.ogg', 30, 1) + var/msg = "buttons on \the [src] and it [locked ? "locks" : "unlocks"] with a beep." + var/pos_adj = "[usr.name] presses " + var/fp_adj = "You press " + usr.visible_message("[addtext(pos_adj, msg)]", "[addtext(fp_adj, msg)]") + update_icon() + ui.close() + else + playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1) + to_chat(usr, span("warning", "\The [src] buzzes as you enter passcode.")) + return + if(href_list["set_passcode"]) + if(!locked) + passcode = lowertext(href_list["set_passcode"]) + ui.data["passcode"] = passcode + to_chat(usr, "New passcode has been set.") + ui.push_change() + if(href_list["lock"]) + if(!locked) + locked = !locked + playsound(src, 'sound/machines/ping.ogg', 30, 1) + to_chat(usr, "You have locked \the [src].") + ui.close() + update_icon() + #undef STATUS_INACTIVE #undef STATUS_ACTIVE #undef STATUS_BROKEN diff --git a/html/changelogs/karolis2011-keypadmaglocks.yml b/html/changelogs/karolis2011-keypadmaglocks.yml new file mode 100644 index 00000000000..0cba71bc4d7 --- /dev/null +++ b/html/changelogs/karolis2011-keypadmaglocks.yml @@ -0,0 +1,4 @@ +author: Karolis2011 +delete-after: True +changes: + - rscadd: "Added keypad magnetic lock that is locked using passcode, instead of ID access." diff --git a/icons/obj/magnetic_locks.dmi b/icons/obj/magnetic_locks.dmi index b5c8a09cca4906955f490fba2c072adb75e47238..6b0e76ec905c74bebcb438a65927bf90c0a97d1d 100644 GIT binary patch delta 9072 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 D;4MuV delta 8594 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 diff --git a/vueui/src/components/view/misc/maglock-config.vue b/vueui/src/components/view/misc/maglock-config.vue new file mode 100644 index 00000000000..690437decbf --- /dev/null +++ b/vueui/src/components/view/misc/maglock-config.vue @@ -0,0 +1,16 @@ + + + + diff --git a/vueui/src/components/view/misc/maglock.vue b/vueui/src/components/view/misc/maglock.vue new file mode 100644 index 00000000000..d05f01e31f3 --- /dev/null +++ b/vueui/src/components/view/misc/maglock.vue @@ -0,0 +1,17 @@ + + + +