From ca735a752e21dc95df0c9fb3b3914425bf8bf322 Mon Sep 17 00:00:00 2001
From: Ghom <42542238+Ghommie@users.noreply.github.com>
Date: Sat, 11 Jan 2020 15:21:08 +0100
Subject: [PATCH] Merge pull request #10505 from LetterN/beep-boom
better electropack ui
---
code/controllers/subsystem/pai.dm | 2 +-
.../items/devices/radio/electropack.dm | 290 +++++++++---------
.../items/devices/radio/shockcollar.dm | 62 ++--
3 files changed, 175 insertions(+), 179 deletions(-)
diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm
index 2e2f7edd..8f95f2ec 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 967fd3fb..f4681210 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -1,144 +1,146 @@
-/obj/item/electropack
- name = "electropack"
- desc = "Dance my monkeys! DANCE!!!"
- icon = 'icons/obj/radio.dmi'
- icon_state = "electropack0"
- item_state = "electropack"
- lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- flags_1 = CONDUCT_1
- 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
-
-/obj/item/electropack/suicide_act(mob/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)
-
-/obj/item/electropack/Destroy()
- SSradio.remove_object(src, frequency)
- return ..()
-
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/obj/item/electropack/attack_hand(mob/user)
- if(iscarbon(user))
- var/mob/living/carbon/C = user
- if(src == C.back)
- to_chat(user, "You need help taking this off!")
- return
- return ..()
-
-/obj/item/electropack/attackby(obj/item/W, mob/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'
-
- if(!user.transferItemToLoc(W, A))
- to_chat(user, "[W] is stuck to your hand, you cannot attach it to [src]!")
- return
- W.master = A
- A.part1 = W
-
- user.transferItemToLoc(src, A, TRUE)
- master = A
- A.part2 = src
-
- user.put_in_hands(A)
- A.add_fingerprint(user)
- else
- 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
- usr << browse(null, "window=radio")
- return
- return
-
-/obj/item/electropack/receive_signal(datum/signal/signal)
- if(!signal || signal.data["code"] != code)
- return
-
- if(isliving(loc) && on)
- if(shock_cooldown != 0)
- return
- shock_cooldown = 1
- addtimer(VARSET_CALLBACK(src, shock_cooldown, 0), 100)
- var/mob/living/L = loc
- step(L, pick(GLOB.cardinals))
-
- to_chat(L, "You feel a sharp shock!")
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(3, 1, L)
- s.start()
-
- L.Knockdown(100)
-
- if(master)
- master.receive_signal()
- return
-
-/obj/item/electropack/attack_self(mob/user)
-
- if(!ishuman(user))
- return
- user.set_machine(src)
- var/dat = {"Turned [on ? "On" : "Off"] -
-Toggle
-Frequency/Code for electropack:
-Frequency:
--
-- [format_frequency(frequency)]
-+
-+
-
-Code:
--
-- [code]
-+
-+
-"}
- user << browse(dat, "window=radio")
- onclose(user, "radio")
- return
+/obj/item/electropack
+ name = "electropack"
+ desc = "Dance my monkeys! DANCE!!!"
+ icon = 'icons/obj/radio.dmi'
+ icon_state = "electropack0"
+ item_state = "electropack"
+ lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
+ flags_1 = CONDUCT_1
+ slot_flags = ITEM_SLOT_BACK
+ w_class = WEIGHT_CLASS_HUGE
+ materials = list(MAT_METAL=10000, MAT_GLASS=2500)
+
+ var/code = 2
+ var/frequency = FREQ_ELECTROPACK
+ var/on = TRUE
+ var/shock_cooldown = FALSE
+
+/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()
+ . = ..()
+ set_frequency(frequency)
+
+/obj/item/electropack/Destroy()
+ SSradio.remove_object(src, frequency)
+ . = ..()
+
+//ATTACK HAND IGNORING PARENT RETURN VALUE
+/obj/item/electropack/attack_hand(mob/user)
+ if(iscarbon(user))
+ var/mob/living/carbon/C = user
+ if(src == C.back)
+ to_chat(user, "You need help taking this off!")
+ return
+ return ..()
+
+/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'
+
+ if(!user.transferItemToLoc(W, A))
+ to_chat(user, "[W] is stuck to your hand, you cannot attach it to [src]!")
+ return
+ W.master = A
+ A.part1 = W
+
+ user.transferItemToLoc(src, A, TRUE)
+ master = A
+ A.part2 = src
+
+ user.put_in_hands(A)
+ A.add_fingerprint(user)
+ else
+ return ..()
+
+/obj/item/electropack/Topic(href, href_list)
+ var/mob/living/carbon/C = usr
+ if(usr.stat || usr.restrained() || C.back == src)
+ return
+
+ 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)
+ if(!signal || signal.data["code"] != code)
+ return
+
+ if(isliving(loc) && on)
+ if(shock_cooldown == TRUE)
+ return
+ shock_cooldown = TRUE
+ addtimer(VARSET_CALLBACK(src, shock_cooldown, FALSE), 100)
+ var/mob/living/L = loc
+ step(L, pick(GLOB.cardinals))
+
+ to_chat(L, "You feel a sharp shock!")
+ var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
+ s.set_up(3, 1, L)
+ s.start()
+
+ L.Knockdown(100)
+
+ if(master)
+ master.receive_signal()
+ return
+
+/obj/item/electropack/ui_interact(mob/user)
+ if(!ishuman(user))
+ return
+
+ user.set_machine(src)
+ var/dat = {"
+
+Turned [on ? "On" : "Off"] - Toggle
+Frequency/Code for electropack:
+Frequency:
+[format_frequency(src.frequency)]
+Set
+
+Code:
+[src.code]
+Set
+"}
+ user << browse(dat, "window=radio")
+ onclose(user, "radio")
+ return
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 fe5fcc0e..ff4b403b 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,36 +51,30 @@
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
/obj/item/electropack/shockcollar/security
name = "security shock collar"