mirror of
https://github.com/Sandstorm-Station/Sandstorm-Station-13.git
synced 2026-08-18 02:37:45 +01:00
79 lines
2.7 KiB
Plaintext
79 lines
2.7 KiB
Plaintext
/obj/item/assembly/signaler/nanite
|
|
var/datum/nanite_program/signaler/program
|
|
|
|
/obj/item/assembly/signaler/nanite/New(_program)
|
|
..()
|
|
program = _program
|
|
if(!istype(program))
|
|
qdel(src)
|
|
|
|
/obj/item/assembly/signaler/nanite/signal()
|
|
//Almost the same as the original; altered log message
|
|
if(!radio_connection)
|
|
return
|
|
|
|
var/datum/signal/signal = new(list("code" = code))
|
|
radio_connection.post_signal(src, signal)
|
|
|
|
if(program.host_mob) // Sanity
|
|
var/time = time2text(world.realtime,"hh:mm:ss")
|
|
var/turf/T = get_turf(program.host_mob)
|
|
GLOB.lastsignalers.Add("[time] <B>:</B> A nanite signaler program in [program.host_mob.key] @ location ([T.x],[T.y],[T.z]) <B>:</B> [format_frequency(frequency)]/[code]")
|
|
return
|
|
|
|
/obj/item/assembly/signaler/nanite/receive_signal(datum/signal/signal)
|
|
//Got rid of beep and suicide in relation to the original.
|
|
. = FALSE
|
|
if(!signal)
|
|
return
|
|
if(signal.data["code"] != code)
|
|
return
|
|
if(!(src.wires & WIRE_RADIO_RECEIVE))
|
|
return
|
|
program.send_code()
|
|
return TRUE
|
|
|
|
/datum/nanite_program/signaler
|
|
name = "Signaler"
|
|
desc = "The nanites receive and send radio signals. Trigger to send a radio signal; when a radio signal is received, sends a signal to the nanites."
|
|
can_trigger = TRUE
|
|
trigger_cost = 2
|
|
trigger_cooldown = 3 SECONDS
|
|
rogue_types = list(/datum/nanite_program/toxic)
|
|
var/obj/item/assembly/signaler/nanite/signaler //needed because radio code works with objects, not datums.
|
|
|
|
/datum/nanite_program/signaler/register_extra_settings()
|
|
extra_settings["Frequency"] = new /datum/nanite_extra_setting/number(FREQ_SIGNALER, MIN_FREE_FREQ, MAX_FREE_FREQ)
|
|
extra_settings["Radio Code"] = new /datum/nanite_extra_setting/number(DEFAULT_SIGNALER_CODE, 1, 100)
|
|
extra_settings["Nanite Code"] = new /datum/nanite_extra_setting/number(0, 1, 9999)
|
|
|
|
/datum/nanite_program/signaler/proc/send_code()
|
|
if(activated)
|
|
var/datum/nanite_extra_setting/nanite_code = extra_settings["Nanite Code"]
|
|
SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, nanite_code.value, "a [name] program")
|
|
|
|
/datum/nanite_program/signaler/on_mob_add()
|
|
..()
|
|
signaler = new(src)
|
|
signaler.set_frequency(get_extra_setting_value("Frequency"))
|
|
signaler.code = get_extra_setting_value("Radio Code")
|
|
|
|
/datum/nanite_program/signaler/copy_programming(datum/nanite_program/target, copy_activated)
|
|
..()
|
|
var/datum/nanite_program/signaler/T = target
|
|
if(!istype(T))
|
|
return //how did we even get here?
|
|
|
|
if(!T.signaler)
|
|
return //don't need to copy, we're prolly a program in a cloud or something
|
|
|
|
T.signaler.set_frequency(get_extra_setting_value("Frequency"))
|
|
T.signaler.code = get_extra_setting_value("Radio Code")
|
|
|
|
/datum/nanite_program/signaler/on_mob_remove()
|
|
..()
|
|
qdel(signaler)
|
|
|
|
/datum/nanite_program/signaler/on_trigger(comm_message)
|
|
signaler.signal()
|