mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 18:22:14 +00:00
3591 individual conflicts Update build.js Update install_node.sh Update byond.js oh my fucking god hat slow huh holy shit we all fall down 2 more I missed 2900 individual conflicts 2700 Individual conflicts replaces yarn file with tg version, bumping us down to 2200-ish Down to 2000 individual conflicts 140 down mmm aaaaaaaaaaaaaaaaaaa not yt 575 soon 900 individual conflicts 600 individual conflicts, 121 file conflicts im not okay 160 across 19 files 29 in 4 files 0 conflicts, compiletime fix time some minor incap stuff missed ticks weird dupe definition stuff missed ticks 2 incap fixes undefs and pie fix Radio update and some extra minor stuff returns a single override no more dupe definitions, 175 compiletime errors Unticked file fix sound and emote stuff honk and more radio stuff
132 lines
5.1 KiB
Plaintext
132 lines
5.1 KiB
Plaintext
///Checks whether NTNet is available by ensuring at least one relay exists and is operational.
|
|
/proc/find_functional_ntnet_relay()
|
|
// Check all relays. If we have at least one working relay, ntos is up.
|
|
for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay))
|
|
if(!relays.is_operational)
|
|
continue
|
|
return TRUE
|
|
return FALSE
|
|
|
|
// Relays don't handle any actual communication. Global NTNet datum does that, relays only tell the datum if it should or shouldn't work.
|
|
/obj/machinery/ntnet_relay
|
|
name = "NTNet Quantum Relay"
|
|
desc = "A very complex router and transmitter capable of connecting electronic devices together. Looks fragile."
|
|
use_power = ACTIVE_POWER_USE
|
|
active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 10 //10kW, apropriate for machine that keeps massive cross-Zlevel wireless network operational. Used to be 20 but that actually drained the smes one round
|
|
icon = 'icons/obj/machines/telecomms.dmi'
|
|
icon_state = "bus"
|
|
density = TRUE
|
|
circuit = /obj/item/circuitboard/machine/ntnet_relay
|
|
|
|
///On / off status for the relay machine, toggleable by the user.
|
|
var/relay_enabled = TRUE
|
|
///(D)DoS-attack-related failure causing it not to be operational any longer.
|
|
var/dos_failure = FALSE
|
|
var/list/dos_sources = list() // Backwards reference for qdel() stuff
|
|
var/uid
|
|
var/static/gl_uid = 1
|
|
|
|
// Denial of Service attack variables
|
|
var/dos_overload = 0 // Amount of DoS "packets" in this relay's buffer
|
|
var/dos_capacity = 500 // Amount of DoS "packets" in buffer required to crash the relay
|
|
var/dos_dissipate = 0.5 // Amount of DoS "packets" dissipated over time.
|
|
|
|
/obj/machinery/ntnet_relay/Initialize(mapload)
|
|
. = ..()
|
|
uid = gl_uid++
|
|
var/list/current_machines = SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)
|
|
SSmodular_computers.add_log("New quantum relay activated. Current amount of linked relays: [current_machines.len]")
|
|
|
|
/obj/machinery/ntnet_relay/Destroy()
|
|
. = ..()
|
|
var/list/machines_left = SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)
|
|
SSmodular_computers.add_log("Quantum relay connection severed. Current amount of linked relays: [machines_left.len]")
|
|
for(var/datum/computer_file/program/ntnet_dos/D in dos_sources)
|
|
D.target = null
|
|
D.error = "Connection to quantum relay severed"
|
|
|
|
///Proc called to change the value of the `relay_enabled` variable and append behavior related to its change.
|
|
/obj/machinery/ntnet_relay/proc/set_relay_enabled(new_value)
|
|
if(new_value == relay_enabled)
|
|
return
|
|
. = relay_enabled
|
|
relay_enabled = new_value
|
|
if(.) //Turned off
|
|
set_is_operational(FALSE)
|
|
else if(!dos_failure && !(machine_stat & (NOPOWER|BROKEN|MAINT))) //Turned on
|
|
set_is_operational(TRUE)
|
|
|
|
///Proc called to change the value of the `dos_failure` variable and append behavior related to its change.
|
|
/obj/machinery/ntnet_relay/proc/set_dos_failure(new_value)
|
|
if(new_value == dos_failure)
|
|
return
|
|
. = dos_failure
|
|
dos_failure = new_value
|
|
if(.) //Failure ended
|
|
if(relay_enabled && !(machine_stat & (NOPOWER|BROKEN|MAINT)))
|
|
set_is_operational(TRUE)
|
|
else //Failure started
|
|
set_is_operational(FALSE)
|
|
|
|
/obj/machinery/ntnet_relay/on_set_machine_stat(old_value)
|
|
if(old_value & (NOPOWER|BROKEN|MAINT))
|
|
if(relay_enabled && !dos_failure && !(machine_stat & (NOPOWER|BROKEN|MAINT))) //From off to on.
|
|
set_is_operational(TRUE)
|
|
else if(machine_stat & (NOPOWER|BROKEN|MAINT)) //From on to off.
|
|
set_is_operational(FALSE)
|
|
|
|
/obj/machinery/ntnet_relay/update_icon_state()
|
|
icon_state = "bus[is_operational ? null : "_off"]"
|
|
return ..()
|
|
|
|
/obj/machinery/ntnet_relay/process(seconds_per_tick)
|
|
update_use_power(is_operational ? ACTIVE_POWER_USE : IDLE_POWER_USE)
|
|
|
|
update_appearance()
|
|
|
|
if(dos_overload > 0)
|
|
dos_overload = max(0, dos_overload - dos_dissipate * seconds_per_tick)
|
|
|
|
// If DoS traffic exceeded capacity, crash.
|
|
if((dos_overload > dos_capacity) && !dos_failure)
|
|
set_dos_failure(TRUE)
|
|
update_appearance()
|
|
SSmodular_computers.add_log("Quantum relay switched from normal operation mode to overload recovery mode.")
|
|
// If the DoS buffer reaches 0 again, restart.
|
|
if((dos_overload == 0) && dos_failure)
|
|
set_dos_failure(FALSE)
|
|
update_appearance()
|
|
SSmodular_computers.add_log("Quantum relay switched from overload recovery mode to normal operation mode.")
|
|
return TRUE
|
|
|
|
/obj/machinery/ntnet_relay/ui_interact(mob/user, datum/tgui/ui)
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "NtnetRelay")
|
|
ui.open()
|
|
|
|
/obj/machinery/ntnet_relay/ui_data(mob/user)
|
|
var/list/data = list()
|
|
data["enabled"] = relay_enabled
|
|
data["dos_capacity"] = dos_capacity
|
|
data["dos_overload"] = dos_overload
|
|
data["dos_crashed"] = dos_failure
|
|
return data
|
|
|
|
/obj/machinery/ntnet_relay/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
switch(action)
|
|
if("restart")
|
|
dos_overload = 0
|
|
set_dos_failure(FALSE)
|
|
update_appearance()
|
|
SSmodular_computers.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.")
|
|
return TRUE
|
|
if("toggle")
|
|
set_relay_enabled(!relay_enabled)
|
|
SSmodular_computers.add_log("Quantum relay manually [relay_enabled ? "enabled" : "disabled"].")
|
|
update_appearance()
|
|
return TRUE
|