better-signalers

This commit is contained in:
Letter N
2020-01-10 18:06:55 +08:00
parent c4f64c13e5
commit 6ec3fde836
3 changed files with 84 additions and 88 deletions

View File

@@ -8,7 +8,7 @@ SUBSYSTEM_DEF(pai)
var/spam_delay = 100 var/spam_delay = 100
var/list/pai_card_list = list() 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"]) if(href_list["download"])
var/datum/paiCandidate/candidate = locate(href_list["candidate"]) in candidates var/datum/paiCandidate/candidate = locate(href_list["candidate"]) in candidates
var/obj/item/paicard/card = locate(href_list["device"]) in pai_card_list var/obj/item/paicard/card = locate(href_list["device"]) in pai_card_list

View File

@@ -10,22 +10,23 @@
slot_flags = ITEM_SLOT_BACK slot_flags = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_HUGE w_class = WEIGHT_CLASS_HUGE
materials = list(MAT_METAL=10000, MAT_GLASS=2500) materials = list(MAT_METAL=10000, MAT_GLASS=2500)
var/on = TRUE
var/code = 2 var/code = 2
var/frequency = FREQ_ELECTROPACK 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("<span class='suicide'>[user] hooks [user.p_them()]self to the electropack and spams the trigger! It looks like [user.p_theyre()] trying to commit suicide!</span>") user.visible_message("<span class='suicide'>[user] hooks [user.p_them()]self to the electropack and spams the trigger! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (FIRELOSS) return (FIRELOSS)
/obj/item/electropack/Initialize() /obj/item/electropack/Initialize()
. = ..() . = ..()
SSradio.add_object(src, frequency, RADIO_SIGNALER) set_frequency(frequency)
/obj/item/electropack/Destroy() /obj/item/electropack/Destroy()
SSradio.remove_object(src, frequency) SSradio.remove_object(src, frequency)
return ..() . = ..()
//ATTACK HAND IGNORING PARENT RETURN VALUE //ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/electropack/attack_hand(mob/user) /obj/item/electropack/attack_hand(mob/user)
@@ -36,7 +37,7 @@
return return
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)) if(istype(W, /obj/item/clothing/head/helmet))
var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit(user) var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit(user)
A.icon = 'icons/obj/assemblies.dmi' A.icon = 'icons/obj/assemblies.dmi'
@@ -57,43 +58,47 @@
return ..() return ..()
/obj/item/electropack/Topic(href, href_list) /obj/item/electropack/Topic(href, href_list)
//..()
var/mob/living/carbon/C = usr var/mob/living/carbon/C = usr
if(usr.stat || usr.restrained() || C.back == src) if(usr.stat || usr.restrained() || C.back == src)
return return
if((ishuman(usr) && usr.contents.Find(src)) || usr.contents.Find(master) || (in_range(src, usr) && isturf(loc)))
usr.set_machine(src) if(!usr.canUseTopic(src, BE_CLOSE))
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") usr << browse(null, "window=radio")
onclose(usr, "radio")
return 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 return
/obj/item/electropack/receive_signal(datum/signal/signal) /obj/item/electropack/receive_signal(datum/signal/signal)
@@ -101,10 +106,10 @@
return return
if(isliving(loc) && on) if(isliving(loc) && on)
if(shock_cooldown != 0) if(shock_cooldown == TRUE)
return return
shock_cooldown = 1 shock_cooldown = TRUE
addtimer(VARSET_CALLBACK(src, shock_cooldown, 0), 100) addtimer(VARSET_CALLBACK(src, shock_cooldown, FALSE), 100)
var/mob/living/L = loc var/mob/living/L = loc
step(L, pick(GLOB.cardinals)) step(L, pick(GLOB.cardinals))
@@ -119,25 +124,22 @@
master.receive_signal() master.receive_signal()
return return
/obj/item/electropack/attack_self(mob/user) /obj/item/electropack/ui_interact(mob/user)
if(!ishuman(user)) if(!ishuman(user))
return return
user.set_machine(src) user.set_machine(src)
var/dat = {"<TT>Turned [on ? "On" : "Off"] - var/dat = {"
<A href='?src=[REF(src)];power=1'>Toggle</A><BR> <TT>
Turned [on ? "On" : "Off"] - <A href='?src=[REF(src)];set=power'>Toggle</A><BR>
<B>Frequency/Code</B> for electropack:<BR> <B>Frequency/Code</B> for electropack:<BR>
Frequency: Frequency:
<A href='byond://?src=[REF(src)];freq=-10'>-</A> [format_frequency(src.frequency)]
<A href='byond://?src=[REF(src)];freq=-2'>-</A> [format_frequency(frequency)] <A href='byond://?src=[REF(src)];set=freq'>Set</A><BR>
<A href='byond://?src=[REF(src)];freq=2'>+</A>
<A href='byond://?src=[REF(src)];freq=10'>+</A><BR>
Code: Code:
<A href='byond://?src=[REF(src)];code=-5'>-</A> [src.code]
<A href='byond://?src=[REF(src)];code=-1'>-</A> [code] <A href='byond://?src=[REF(src)];set=code'>Set</A><BR>
<A href='byond://?src=[REF(src)];code=1'>+</A>
<A href='byond://?src=[REF(src)];code=5'>+</A><BR>
</TT>"} </TT>"}
user << browse(dat, "window=radio") user << browse(dat, "window=radio")
onclose(user, "radio") onclose(user, "radio")

View File

@@ -11,6 +11,7 @@
strip_delay = 60 strip_delay = 60
equip_delay_other = 60 equip_delay_other = 60
materials = list(MAT_METAL=5000, MAT_GLASS=2000) materials = list(MAT_METAL=5000, MAT_GLASS=2000)
var/tagname = null var/tagname = null
/datum/design/electropack/shockcollar /datum/design/electropack/shockcollar
@@ -25,18 +26,17 @@
if(loc == user && user.get_item_by_slot(SLOT_NECK)) if(loc == user && user.get_item_by_slot(SLOT_NECK))
to_chat(user, "<span class='warning'>The collar is fastened tight! You'll need help taking this off!</span>") to_chat(user, "<span class='warning'>The collar is fastened tight! You'll need help taking this off!</span>")
return return
..() return ..()
/obj/item/electropack/shockcollar/receive_signal(datum/signal/signal) /obj/item/electropack/shockcollar/receive_signal(datum/signal/signal)
if(!signal || signal.data["code"] != code) if(!signal || signal.data["code"] != code)
return return
if(isliving(loc) && on) if(isliving(loc) && on)
if(shock_cooldown != 0) if(shock_cooldown == TRUE)
return return
shock_cooldown = 1 shock_cooldown = TRUE
spawn(100) addtimer(VARSET_CALLBACK(src, shock_cooldown, FALSE), 100)
shock_cooldown = 0
var/mob/living/L = loc var/mob/living/L = loc
step(L, pick(GLOB.cardinals)) step(L, pick(GLOB.cardinals))
@@ -51,33 +51,27 @@
master.receive_signal() master.receive_signal()
return 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.. /obj/item/electropack/shockcollar/attackby(obj/item/W, mob/user, params) //moves it here because on_click is being bad
var/option = "Change Name" if(istype(W, /obj/item/pen))
option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Change Frequency") var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text
switch(option) if(t)
if("Change Name") tagname = copytext(sanitize(t), 1, MAX_NAME_LEN)
var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text name = "[initial(name)] - [tagname]"
if(t) else
tagname = copytext(sanitize(t), 1, MAX_NAME_LEN) return ..()
name = "[initial(name)] - [tagname]"
if("Change Frequency")
if(!ishuman(user))
return
user.set_machine(src)
var/dat = {"<SK><BR>
<B>Frequency/Code</B> for shock collar:<BR>
Frequency:
<A href='byond://?src=\ref[src];freq=-10'>-</A>
<A href='byond://?src=\ref[src];freq=-2'>-</A> [format_frequency(frequency)]
<A href='byond://?src=\ref[src];freq=2'>+</A>
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
Code:
<A href='byond://?src=\ref[src];code=-5'>-</A>
<A href='byond://?src=\ref[src];code=-1'>-</A> [code]
<A href='byond://?src=\ref[src];code=1'>+</A>
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
</SK>"}
user << browse(dat, "window=radio") /obj/item/electropack/shockcollar/ui_interact(mob/user) //on_click calls this
onclose(user, "radio") var/dat = {"
return <TT>
<B>Frequency/Code</B> for shock collar:<BR>
Frequency:
[format_frequency(src.frequency)]
<A href='byond://?src=[REF(src)];set=freq'>Set</A><BR>
Code:
[src.code]
<A href='byond://?src=[REF(src)];set=code'>Set</A><BR>
</TT>"}
user << browse(dat, "window=radio")
onclose(user, "radio")
return