mirror of
https://github.com/Sandstorm-Station/Sandstorm-Station-13.git
synced 2026-08-23 21:27:23 +01:00
Some useful stuff (#34)
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
/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()
|
||||
@@ -46,3 +46,7 @@
|
||||
/datum/techweb_node/computer_board_gaming/New()
|
||||
design_ids += "tetris"
|
||||
. = ..()
|
||||
|
||||
/datum/techweb_node/nanite_smart/New()
|
||||
design_ids += "signaler_nanites"
|
||||
. = ..()
|
||||
|
||||
Reference in New Issue
Block a user