From 6ec3fde836b10d9985158ed28f6bdf76899a2027 Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Fri, 10 Jan 2020 18:06:55 +0800 Subject: [PATCH] better-signalers --- code/controllers/subsystem/pai.dm | 2 +- .../items/devices/radio/electropack.dm | 108 +++++++++--------- .../items/devices/radio/shockcollar.dm | 62 +++++----- 3 files changed, 84 insertions(+), 88 deletions(-) diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm index 18667053d4..5aa109b63a 100644 --- a/code/controllers/subsystem/pai.dm +++ b/code/controllers/subsystem/pai.dm @@ -8,7 +8,7 @@ SUBSYSTEM_DEF(pai) var/spam_delay = 100 var/list/pai_card_list = list() -/datum/controller/subsystem/pai/Topic(href, href_list[]) +/datum/controller/subsystem/pai/Topic(href, href_list) if(href_list["download"]) var/datum/paiCandidate/candidate = locate(href_list["candidate"]) in candidates var/obj/item/paicard/card = locate(href_list["device"]) in pai_card_list diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index b74b0fa3d4..f468121048 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -10,22 +10,23 @@ slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_HUGE materials = list(MAT_METAL=10000, MAT_GLASS=2500) - var/on = TRUE + var/code = 2 var/frequency = FREQ_ELECTROPACK - var/shock_cooldown = 0 + var/on = TRUE + var/shock_cooldown = FALSE -/obj/item/electropack/suicide_act(mob/user) +/obj/item/electropack/suicide_act(mob/living/carbon/user) user.visible_message("[user] hooks [user.p_them()]self to the electropack and spams the trigger! It looks like [user.p_theyre()] trying to commit suicide!") return (FIRELOSS) /obj/item/electropack/Initialize() . = ..() - SSradio.add_object(src, frequency, RADIO_SIGNALER) + set_frequency(frequency) /obj/item/electropack/Destroy() SSradio.remove_object(src, frequency) - return ..() + . = ..() //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/electropack/attack_hand(mob/user) @@ -36,7 +37,7 @@ return return ..() -/obj/item/electropack/attackby(obj/item/W, mob/user, params) +/obj/item/electropack/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/clothing/head/helmet)) var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit(user) A.icon = 'icons/obj/assemblies.dmi' @@ -57,43 +58,47 @@ return ..() /obj/item/electropack/Topic(href, href_list) - //..() var/mob/living/carbon/C = usr if(usr.stat || usr.restrained() || C.back == src) return - if((ishuman(usr) && usr.contents.Find(src)) || usr.contents.Find(master) || (in_range(src, usr) && isturf(loc))) - usr.set_machine(src) - if(href_list["freq"]) - SSradio.remove_object(src, frequency) - frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) - SSradio.add_object(src, frequency, RADIO_SIGNALER) - else - if(href_list["code"]) - code += text2num(href_list["code"]) - code = round(code) - code = min(100, code) - code = max(1, code) - else - if(href_list["power"]) - on = !( on ) - icon_state = "electropack[on]" - if(!( master )) - if(ismob(loc)) - attack_self(loc) - else - for(var/mob/M in viewers(1, src)) - if(M.client) - attack_self(M) - else - if(ismob(master.loc)) - attack_self(master.loc) - else - for(var/mob/M in viewers(1, master)) - if(M.client) - attack_self(M) - else + + if(!usr.canUseTopic(src, BE_CLOSE)) usr << browse(null, "window=radio") + onclose(usr, "radio") return + + if(href_list["set"]) + if(href_list["set"] == "freq") + var/new_freq = input(usr, "Input a new receiving frequency", "Electropack Frequency", format_frequency(frequency)) as num|null + if(!usr.canUseTopic(src, BE_CLOSE)) + return + new_freq = unformat_frequency(new_freq) + new_freq = sanitize_frequency(new_freq, TRUE) + set_frequency(new_freq) + + if(href_list["set"] == "code") + var/new_code = input(usr, "Input a new receiving code", "Electropack Code", code) as num|null + if(!usr.canUseTopic(src, BE_CLOSE)) + return + new_code = round(new_code) + new_code = CLAMP(new_code, 1, 100) + code = new_code + + if(href_list["set"] == "power") + if(!usr.canUseTopic(src, BE_CLOSE)) + return + on = !(on) + icon_state = "electropack[on]" + + if(usr) + attack_self(usr) + + return + +/obj/item/electropack/proc/set_frequency(new_frequency) + SSradio.remove_object(src, frequency) + frequency = new_frequency + SSradio.add_object(src, frequency, RADIO_SIGNALER) return /obj/item/electropack/receive_signal(datum/signal/signal) @@ -101,10 +106,10 @@ return if(isliving(loc) && on) - if(shock_cooldown != 0) + if(shock_cooldown == TRUE) return - shock_cooldown = 1 - addtimer(VARSET_CALLBACK(src, shock_cooldown, 0), 100) + shock_cooldown = TRUE + addtimer(VARSET_CALLBACK(src, shock_cooldown, FALSE), 100) var/mob/living/L = loc step(L, pick(GLOB.cardinals)) @@ -119,25 +124,22 @@ master.receive_signal() return -/obj/item/electropack/attack_self(mob/user) - +/obj/item/electropack/ui_interact(mob/user) if(!ishuman(user)) return + user.set_machine(src) - var/dat = {"Turned [on ? "On" : "Off"] - -Toggle
+ var/dat = {" + +Turned [on ? "On" : "Off"] - Toggle
Frequency/Code for electropack:
Frequency: -- -- [format_frequency(frequency)] -+ -+
+[format_frequency(src.frequency)] +Set
Code: -- -- [code] -+ -+
+[src.code] +Set
"} user << browse(dat, "window=radio") onclose(user, "radio") diff --git a/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm index 9d0757e26e..94bf1ba30a 100644 --- a/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm +++ b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm @@ -11,6 +11,7 @@ strip_delay = 60 equip_delay_other = 60 materials = list(MAT_METAL=5000, MAT_GLASS=2000) + var/tagname = null /datum/design/electropack/shockcollar @@ -25,18 +26,17 @@ if(loc == user && user.get_item_by_slot(SLOT_NECK)) to_chat(user, "The collar is fastened tight! You'll need help taking this off!") return - ..() + return ..() /obj/item/electropack/shockcollar/receive_signal(datum/signal/signal) if(!signal || signal.data["code"] != code) return if(isliving(loc) && on) - if(shock_cooldown != 0) + if(shock_cooldown == TRUE) return - shock_cooldown = 1 - spawn(100) - shock_cooldown = 0 + shock_cooldown = TRUE + addtimer(VARSET_CALLBACK(src, shock_cooldown, FALSE), 100) var/mob/living/L = loc step(L, pick(GLOB.cardinals)) @@ -51,33 +51,27 @@ master.receive_signal() return -/obj/item/electropack/shockcollar/attack_self(mob/user) //Turns out can't fully source this from the parent item, spritepath gets confused if power toggled. Will come back to this when I know how to code better and readd powertoggle.. - var/option = "Change Name" - option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Change Frequency") - switch(option) - if("Change Name") - var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text - if(t) - tagname = copytext(sanitize(t), 1, MAX_NAME_LEN) - name = "[initial(name)] - [tagname]" - if("Change Frequency") - if(!ishuman(user)) - return - user.set_machine(src) - var/dat = {"
- Frequency/Code for shock collar:
- Frequency: - - - - [format_frequency(frequency)] - + - +
- Code: - - - - [code] - + - +
-
"} +/obj/item/electropack/shockcollar/attackby(obj/item/W, mob/user, params) //moves it here because on_click is being bad + if(istype(W, /obj/item/pen)) + var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text + if(t) + tagname = copytext(sanitize(t), 1, MAX_NAME_LEN) + name = "[initial(name)] - [tagname]" + else + return ..() - user << browse(dat, "window=radio") - onclose(user, "radio") - return +/obj/item/electropack/shockcollar/ui_interact(mob/user) //on_click calls this + var/dat = {" + +Frequency/Code for shock collar:
+Frequency: +[format_frequency(src.frequency)] +Set
+ +Code: +[src.code] +Set
+
"} + user << browse(dat, "window=radio") + onclose(user, "radio") + return