mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 11:37:40 +01:00
Refactors signallers, assemblies, electropacks (#18689)
* Refactors signalers, assemblies, electropacks * Update code/game/objects/items/devices/radio/electropack.dm Co-authored-by: Sirryan2002 <80364400+Sirryan2002@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com> Co-authored-by: Sirryan2002 <80364400+Sirryan2002@users.noreply.github.com> Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>
This commit is contained in:
co-authored by
Sirryan2002
Charlie
parent
98a143afb6
commit
aba452f785
@@ -40,7 +40,7 @@
|
||||
var/frequency = rand(PUBLIC_LOW_FREQ, PUBLIC_HIGH_FREQ)
|
||||
if(ISMULTIPLE(frequency, 2))//signaller frequencies are always uneven!
|
||||
frequency++
|
||||
aSignal.set_frequency(frequency)
|
||||
aSignal.frequency = frequency
|
||||
|
||||
if(new_lifespan)
|
||||
lifespan = new_lifespan
|
||||
|
||||
@@ -1,43 +1,57 @@
|
||||
/obj/item/radio/electropack
|
||||
/obj/item/electropack
|
||||
name = "electropack"
|
||||
desc = "Dance my monkeys! DANCE!!!"
|
||||
icon = 'icons/obj/radio.dmi'
|
||||
icon_state = "electropack0"
|
||||
item_state = "electropack"
|
||||
frequency = AIRLOCK_FREQ
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
materials = list(MAT_METAL=10000, MAT_GLASS=2500)
|
||||
var/code = 2
|
||||
materials = list(MAT_METAL = 10000, MAT_GLASS = 2500)
|
||||
/// The integrated signaler
|
||||
var/obj/item/assembly/signaler/electropack/integrated_signaler
|
||||
|
||||
/obj/item/radio/electropack/attack_hand(mob/user as mob)
|
||||
if(src == user.back)
|
||||
to_chat(user, "<span class='notice'>You need help taking this off!</span>")
|
||||
return 0
|
||||
/obj/item/electropack/Initialize(mapload)
|
||||
. = ..()
|
||||
integrated_signaler = new /obj/item/assembly/signaler/electropack(src, src) // Loc and the integrated one
|
||||
|
||||
/obj/item/radio/electropack/Destroy()
|
||||
if(istype(src.loc, /obj/item/assembly/shock_kit))
|
||||
var/obj/item/assembly/shock_kit/S = src.loc
|
||||
/obj/item/electropack/Destroy()
|
||||
integrated_signaler.owning_pack = null
|
||||
QDEL_NULL(integrated_signaler)
|
||||
|
||||
if(istype(loc, /obj/item/assembly/shock_kit))
|
||||
var/obj/item/assembly/shock_kit/S = loc
|
||||
if(S.part1 == src)
|
||||
S.part1 = null
|
||||
|
||||
else if(S.part2 == src)
|
||||
S.part2 = null
|
||||
|
||||
master = null
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/radio/electropack/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
/obj/item/electropack/attack_hand(mob/user)
|
||||
if(src == user.back)
|
||||
to_chat(user, "<span class='notice'>You need help taking this off!</span>")
|
||||
return FALSE
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/electropack/attack_self(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/electropack/attackby(obj/item/W, mob/user, params)
|
||||
..()
|
||||
|
||||
if(istype(W, /obj/item/clothing/head/helmet))
|
||||
if(!b_stat)
|
||||
to_chat(user, "<span class='notice'>[src] is not ready to be attached!</span>")
|
||||
return
|
||||
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'
|
||||
|
||||
if(!user.unEquip(W))
|
||||
to_chat(user, "<span class='notice'>\the [W] is stuck to your hand, you cannot attach it to \the [src]!</span>")
|
||||
return
|
||||
|
||||
W.loc = A
|
||||
W.master = A
|
||||
A.part1 = W
|
||||
@@ -53,11 +67,12 @@
|
||||
A.flags |= NODROP
|
||||
|
||||
|
||||
/obj/item/radio/electropack/receive_signal(datum/signal/signal)
|
||||
if(!signal || signal.encryption != code)
|
||||
return
|
||||
/obj/item/electropack/proc/handle_shock()
|
||||
if(istype(master, /obj/item/assembly/shock_kit))
|
||||
var/obj/item/assembly/shock_kit/SK = master
|
||||
SK.shock_invoke()
|
||||
|
||||
if(isliving(loc) && on)
|
||||
if(isliving(loc))
|
||||
var/mob/living/M = loc
|
||||
var/turf/T = M.loc
|
||||
if(istype(T, /turf))
|
||||
@@ -67,58 +82,80 @@
|
||||
sleep(50)
|
||||
if(M)
|
||||
M.moved_recently = 0
|
||||
|
||||
to_chat(M, "<span class='danger'>You feel a sharp shock!</span>")
|
||||
do_sparks(3, 1, M)
|
||||
|
||||
M.Weaken(10 SECONDS)
|
||||
|
||||
if(master)
|
||||
master.receive_signal()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/radio/electropack/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
|
||||
// This should honestly just proxy the UI to the internal signaler
|
||||
/obj/item/electropack/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "Electropack", name, 360, 150, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/radio/electropack/ui_data(mob/user)
|
||||
/obj/item/electropack/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["power"] = on
|
||||
data["frequency"] = frequency
|
||||
data["code"] = code
|
||||
data["power"] = integrated_signaler.receiving
|
||||
data["frequency"] = integrated_signaler.frequency
|
||||
data["code"] = integrated_signaler.code
|
||||
data["minFrequency"] = PUBLIC_LOW_FREQ
|
||||
data["maxFrequency"] = PUBLIC_HIGH_FREQ
|
||||
return data
|
||||
|
||||
/obj/item/radio/electropack/ui_act(action, params)
|
||||
/obj/item/electropack/ui_act(action, list/params)
|
||||
if(..())
|
||||
return
|
||||
|
||||
. = TRUE
|
||||
|
||||
switch(action)
|
||||
if("power")
|
||||
on = !on
|
||||
integrated_signaler.receiving = !integrated_signaler.receiving
|
||||
|
||||
if("freq")
|
||||
var/value = params["freq"]
|
||||
if(value)
|
||||
frequency = sanitize_frequency(value)
|
||||
set_frequency(frequency)
|
||||
integrated_signaler.frequency = sanitize_frequency(value)
|
||||
else
|
||||
. = FALSE
|
||||
|
||||
if("code")
|
||||
var/value = text2num(params["code"])
|
||||
if(value)
|
||||
value = round(value)
|
||||
code = clamp(value, 1, 100)
|
||||
integrated_signaler.code = clamp(value, 1, 100)
|
||||
else
|
||||
. = FALSE
|
||||
|
||||
if("reset")
|
||||
if(params["reset"] == "freq")
|
||||
frequency = initial(frequency)
|
||||
integrated_signaler.frequency = initial(integrated_signaler.frequency)
|
||||
else if(params["reset"] == "code")
|
||||
code = initial(code)
|
||||
integrated_signaler.code = initial(integrated_signaler.code)
|
||||
else
|
||||
. = FALSE
|
||||
|
||||
if(.)
|
||||
add_fingerprint(usr)
|
||||
|
||||
// Electropack signaller type
|
||||
/obj/item/assembly/signaler/electropack
|
||||
frequency = AIRLOCK_FREQ
|
||||
code = 2
|
||||
receiving = TRUE
|
||||
|
||||
var/obj/item/electropack/owning_pack
|
||||
|
||||
/obj/item/assembly/signaler/electropack/Initialize(mapload, holding_electropack)
|
||||
. = ..()
|
||||
owning_pack = holding_electropack
|
||||
|
||||
/obj/item/assembly/signaler/electropack/signal_callback()
|
||||
if(owning_pack)
|
||||
owning_pack.handle_shock()
|
||||
|
||||
/obj/item/assembly/signaler/electropack/Destroy()
|
||||
owning_pack = null
|
||||
return ..()
|
||||
|
||||
@@ -181,9 +181,9 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/animal/populate_contents()
|
||||
new /obj/item/assembly/signaler(src)
|
||||
new /obj/item/radio/electropack(src)
|
||||
new /obj/item/radio/electropack(src)
|
||||
new /obj/item/radio/electropack(src)
|
||||
new /obj/item/electropack(src)
|
||||
new /obj/item/electropack(src)
|
||||
new /obj/item/electropack(src)
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/chemical
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
return FALSE
|
||||
break
|
||||
|
||||
if(rigged && locate(/obj/item/radio/electropack) in src)
|
||||
if(rigged && locate(/obj/item/electropack) in src)
|
||||
if(isliving(usr))
|
||||
var/mob/living/L = usr
|
||||
if(L.electrocute_act(17, src))
|
||||
@@ -105,7 +105,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need atleast 15 wires to rig [src]!</span>")
|
||||
return TRUE
|
||||
if(istype(W, /obj/item/radio/electropack))
|
||||
if(istype(W, /obj/item/electropack))
|
||||
if(rigged)
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "<span class='warning'>[W] seems to be stuck to your hand!</span>")
|
||||
@@ -140,7 +140,7 @@
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
if(rigged && locate(/obj/item/radio/electropack) in src)
|
||||
if(rigged && locate(/obj/item/electropack) in src)
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(L.electrocute_act(17, src))
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
if(isnull(part)) //This e-chair was not custom built
|
||||
part = new(src)
|
||||
var/obj/item/clothing/head/helmet/part1 = new(part)
|
||||
var/obj/item/radio/electropack/part2 = new(part)
|
||||
part2.set_frequency(1445)
|
||||
part2.code = 6
|
||||
var/obj/item/electropack/part2 = new(part)
|
||||
part2.integrated_signaler.frequency = 1445
|
||||
part2.integrated_signaler.code = 6
|
||||
part2.master = part
|
||||
part.part1 = part1
|
||||
part.part2 = part2
|
||||
|
||||
Reference in New Issue
Block a user