From 86e811f7824a247d2cd7fbcecfb63a6c0a0ca778 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 13 Dec 2022 00:36:54 +0100 Subject: [PATCH] [MIRROR] Adds a modular computer subsystem to shift modPCs away from radios [MDB IGNORE] (#17942) * Adds a modular computer subsystem to shift modPCs away from radios (#71732) ## About The Pull Request Adds the modular computer subsystem which is meant to replace mod PC's reliance on networks and radios, specifically the network subsystem, the ntnet interface, and /datum/ntnet. This PR removes station_root ntnets entirely, but I tried to keep it small. This PR also removes a ton of unused vars and defines, such as NTNet channels that were unused (peer2peer and systemcontrol), atmos networks (as they were removed a while ago) and NTNet var on relays (its stated purpose is so admins can see it through varedits, but that's useless now that it's a subsystem) I also removed ``setting_disabled`` as a thing the RD can do, it turned off ALL ntnet systems. However, this was when there were 4 different ones, now that there's only 2 I thought it was redundant and he could just click 2 buttons to close them. ## Why It's Good For The Game ``/datum/ntnet``, ``/datum/component/ntnet_interface``, and ``/datum/controller/subsystem/networks`` are all old-code messes that depend on eachother and is hard for people to understand what exactly it adds to the game. 90% of its features is allowing the Wirecarp app to see all the ruins that spawned in-game, which I don't think is something that we even WANT (why does the RD need to know that oldstation spawned? Why should they know this anyway??) This hopefully starts to simplify networks/ntnet to make it easier to remove in the future, because surely there are better alternatives than **this** ## Changelog :cl: refactor: Modular computers NTnet and applications run on its own subsystem, please report any new bugs you may find. /:cl: * Adds a modular computer subsystem to shift modPCs away from radios * Fixed contractor uplink Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: tastyfish --- code/__DEFINES/modular_computer.dm | 4 +- code/__DEFINES/networks.dm | 5 - .../subsystem/modular_computers.dm | 89 +++++++++ .../subsystem/processing/networks.dm | 51 +---- code/datums/components/ntnet_interface.dm | 2 - code/modules/NTNet/network.dm | 188 +----------------- code/modules/NTNet/relays.dm | 15 +- .../NTNet/NTNRC/conversation.dm | 6 +- .../computers/item/computer.dm | 3 +- .../modular_computers/file_system/program.dm | 2 +- .../file_system/programs/antagonist/dos.dm | 17 +- .../file_system/programs/ntdownloader.dm | 11 +- .../file_system/programs/ntnrc_client.dm | 20 +- .../file_system/programs/wirecarp.dm | 58 ++---- code/modules/unit_tests/ntnetwork_tests.dm | 56 ++++-- .../modules/contractor/code/items/tablet.dm | 6 + tgstation.dme | 1 + .../tgui/interfaces/NtosNetMonitor.js | 41 +--- 18 files changed, 205 insertions(+), 370 deletions(-) create mode 100644 code/controllers/subsystem/modular_computers.dm diff --git a/code/__DEFINES/modular_computer.dm b/code/__DEFINES/modular_computer.dm index 5c1ffe9e6e4..f0f0877d47e 100644 --- a/code/__DEFINES/modular_computer.dm +++ b/code/__DEFINES/modular_computer.dm @@ -1,9 +1,7 @@ //NTNet stuff, for modular computers // NTNet module-configuration values. Do not change these. If you need to add another use larger number (5..6..7 etc) #define NTNET_SOFTWAREDOWNLOAD 1 // Downloads of software from NTNet -#define NTNET_PEERTOPEER 2 // P2P transfers of files between devices -#define NTNET_COMMUNICATION 3 // Communication (messaging) -#define NTNET_SYSTEMCONTROL 4 // Control of various systems, RCon, air alarm control, etc. +#define NTNET_COMMUNICATION 2 // Communication (messaging) //NTNet transfer speeds, used when downloading/uploading a file/program. #define NTNETSPEED_LOWSIGNAL 0.5 // GQ/s transfer speed when the device is wirelessly connected and on Low signal diff --git a/code/__DEFINES/networks.dm b/code/__DEFINES/networks.dm index a6fdd40aa24..8fc6b530e7f 100644 --- a/code/__DEFINES/networks.dm +++ b/code/__DEFINES/networks.dm @@ -25,9 +25,6 @@ #define __NETWORK_REMOTES "REMOTES" #define __NETWORK_AIRLOCKS "AIRLOCKS" #define __NETWORK_DOORS "DOORS" -#define __NETWORK_ATMOS "ATMOS" -#define __NETWORK_SCUBBERS "AIRLOCKS" -#define __NETWORK_AIRALARMS "AIRALARMS" #define __NETWORK_CONTROL "CONTROL" #define __NETWORK_STORAGE "STORAGE" #define __NETWORK_CARGO "CARGO" @@ -39,8 +36,6 @@ /// Various combined subnetworks #define NETWORK_DOOR_REMOTES NETWORK_NAME_COMBINE(__NETWORK_DOORS, __NETWORK_REMOTES) #define NETWORK_DOOR_AIRLOCKS NETWORK_NAME_COMBINE(__NETWORK_DOORS, __NETWORK_AIRLOCKS) -#define NETWORK_ATMOS_AIRALARMS NETWORK_NAME_COMBINE(__NETWORK_ATMOS, __NETWORK_AIRALARMS) -#define NETWORK_ATMOS_SCUBBERS NETWORK_NAME_COMBINE(__NETWORK_ATMOS, __NETWORK_SCUBBERS) #define NETWORK_TABLETS NETWORK_NAME_COMBINE(__NETWORK_COMPUTER, __NETWORK_TABLETS) #define NETWORK_BOTS_CARGO NETWORK_NAME_COMBINE(__NETWORK_CARGO, __NETWORK_BOTS) diff --git a/code/controllers/subsystem/modular_computers.dm b/code/controllers/subsystem/modular_computers.dm new file mode 100644 index 00000000000..5998ba5db21 --- /dev/null +++ b/code/controllers/subsystem/modular_computers.dm @@ -0,0 +1,89 @@ +SUBSYSTEM_DEF(modular_computers) + name = "Modular Computers" + flags = SS_NO_FIRE + + ///List of all programs available to download from the NTNet store. + var/list/available_station_software = list() + ///List of all programs that can be downloaded from an emagged NTNet store. + var/list/available_antag_software = list() + ///List of all chat channels created by Chat Client. + var/list/chat_channels = list() + + ///Boolean on whether downloading software works. + var/setting_softwaredownload = TRUE + ///Boolean on whether downloading communication apps like the Chat client works. + var/setting_communication = TRUE + + ///Boolean on whether the IDS warning system is enabled + var/intrusion_detection_enabled = TRUE + ///Boolean to show a message warning if there's an active intrusion for Wirecarp users. + var/intrusion_detection_alarm = FALSE + + ///List of all available NTNet relays. + var/list/obj/machinery/ntnet_relay/ntnet_relays = list() + +/datum/controller/subsystem/modular_computers/Initialize() + build_software_lists() + initialized = TRUE + return SS_INIT_SUCCESS + +///Finds all downloadable programs and adds them to their respective downloadable list. +/datum/controller/subsystem/modular_computers/proc/build_software_lists() + for(var/datum/computer_file/program/prog as anything in subtypesof(/datum/computer_file/program)) + // Has no TGUI file so is not meant to be a downloadable thing. + if(!initial(prog.tgui_id)) + continue + prog = new prog + + if(prog.available_on_ntnet) + available_station_software.Add(prog) + if(prog.available_on_syndinet) + available_antag_software.Add(prog) + +///Checks if at least one ntnet relay is functional. +/datum/controller/subsystem/modular_computers/proc/check_relay_operation() + for(var/obj/machinery/ntnet_relay/relays as anything in ntnet_relays) + if(!relays.is_operational) + continue + return TRUE + return FALSE + +/datum/controller/subsystem/modular_computers/proc/toggle_function(function) + if(!function) + return + function = text2num(function) + switch(function) + if(NTNET_SOFTWAREDOWNLOAD) + setting_softwaredownload = !setting_softwaredownload + SSnetworks.add_log("Configuration Updated. Wireless network firewall now [setting_softwaredownload ? "allows" : "disallows"] connection to software repositories.") + if(NTNET_COMMUNICATION) + setting_communication = !setting_communication + SSnetworks.add_log("Configuration Updated. Wireless network firewall now [setting_communication ? "allows" : "disallows"] instant messaging and similar communication services.") + +///Checks whether NTNet is available for a specific function, checking NTNet relays and shutdowns. If none is passed, none is needed. +/datum/controller/subsystem/modular_computers/proc/check_function(specific_action = NONE) + // No relays found. NTNet is down + if(!length(ntnet_relays)) + return FALSE + // Check all relays. If we have at least one working relay, network is up. + if(!check_relay_operation()) + return FALSE + + switch(specific_action) + if(NTNET_SOFTWAREDOWNLOAD) + return setting_softwaredownload + if(NTNET_COMMUNICATION) + return setting_communication + return TRUE + +///Attempts to find a new file through searching the available stores with its name. +/datum/controller/subsystem/modular_computers/proc/find_ntnet_file_by_name(filename) + for(var/datum/computer_file/program/programs as anything in available_station_software + available_antag_software) + if(filename == programs.filename) + return programs + +///Attempts to find a chatorom using the ID of the channel. +/datum/controller/subsystem/modular_computers/proc/get_chat_channel_by_id(id) + for(var/datum/ntnet_conversation/chan as anything in chat_channels) + if(chan.id == id) + return chan diff --git a/code/controllers/subsystem/processing/networks.dm b/code/controllers/subsystem/processing/networks.dm index 074ec4c3290..c5884a1eeaa 100644 --- a/code/controllers/subsystem/processing/networks.dm +++ b/code/controllers/subsystem/processing/networks.dm @@ -5,20 +5,9 @@ SUBSYSTEM_DEF(networks) flags = SS_KEEP_TIMING init_order = INIT_ORDER_NETWORKS - var/list/relays = list() - /// Legacy ntnet lookup for software. Should be changed latter so don't rely on this - /// being here. - var/datum/ntnet/station_root/station_network - var/datum/ntnet/station_root/syndie_network - var/list/network_initialize_queue = list() /// all interfaces by their hardware address. /// Do NOT use to verify a reciver_id is valid, use the network.root_devices for that var/list/interfaces_by_hardware_id = list() - /// Area to network, network to area list - /// This is an associated list to quickly find an area using either its id or network - /// Used mainly to make sure all area id's are unique even if a mapper uses the same - /// area many times - var/list/area_network_lookup = list() /// List of networks using their fully qualified network name. Used for quick lookups /// of networks for sending packets @@ -27,8 +16,6 @@ SUBSYSTEM_DEF(networks) /// network tress var/list/root_networks = list() - - // Why not list? Because its a Copy() every time we add a packet, and thats stupid. var/datum/netdata/first = null // start of the queue. Pulled off in fire. var/datum/netdata/last = null // end of the queue. pushed on by transmit @@ -36,7 +23,6 @@ SUBSYSTEM_DEF(networks) // packet stats var/count_broadcasts_packets = 0 // count of broadcast packets sent var/count_failed_packets = 0 // count of message fails - var/count_good_packets = 0 // Logs moved here // Amount of logs the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly. // High values make displaying logs much laggier. @@ -53,8 +39,8 @@ SUBSYSTEM_DEF(networks) /datum/controller/subsystem/networks/PreInit() /// Limbo network needs to be made at boot up for all error devices new/datum/ntnet(LIMBO_NETWORK_ROOT) - station_network = new(STATION_NETWORK_ROOT) - syndie_network = new(SYNDICATE_NETWORK_ROOT) + new/datum/ntnet(STATION_NETWORK_ROOT) + new/datum/ntnet(SYNDICATE_NETWORK_ROOT) /// As well as the station network incase something funny goes during startup new/datum/ntnet(CENTCOM_NETWORK_ROOT) @@ -64,12 +50,7 @@ SUBSYSTEM_DEF(networks) return ..() /datum/controller/subsystem/networks/Initialize() - station_network.register_map_supremecy() // sigh assign_areas_root_ids(get_sorted_areas()) // setup area names before Initialize - station_network.build_software_lists() - syndie_network.build_software_lists() - - // At round start, fix the network_id's so the station root is on them initialized = TRUE // Now when the objects Initialize they will join the right network return SS_INIT_SUCCESS @@ -127,7 +108,6 @@ SUBSYSTEM_DEF(networks) // All is good, send the packet then send an ACK to the sender if(!QDELETED(sending_interface)) SEND_SIGNAL(sending_interface.parent, COMSIG_COMPONENT_NTNET_ACK, data) - count_good_packets++ /// Helper define to make sure we pop the packet and qdel it #define POP_PACKET(CURRENT) first = CURRENT.next; packet_count--; if(!first) { last = null; packet_count = 0; }; qdel(CURRENT); @@ -188,21 +168,6 @@ SUBSYSTEM_DEF(networks) // We do error checking when the packet is sent return NETWORK_ERROR_OK - -/datum/controller/subsystem/networks/proc/check_relay_operation(zlevel=0) //can be expanded later but right now it's true/false. - for(var/i in relays) - var/obj/machinery/ntnet_relay/n = i - if(zlevel && n.z != zlevel) - continue - if(n.is_operational) - return TRUE - return FALSE - -/datum/controller/subsystem/networks/proc/log_data_transfer( datum/netdata/data) - logs += "[station_time_timestamp()] - [data.generate_netlog()]" - if(logs.len > setting_maxlogcount) - logs = logs.Copy(logs.len - setting_maxlogcount, 0) - /** * Records a message into the station logging system for the network * @@ -239,7 +204,6 @@ SUBSYSTEM_DEF(networks) if(logs.len > setting_maxlogcount) logs = logs.Copy(logs.len-setting_maxlogcount,0) - /** * Removes all station logs for the current game */ @@ -247,7 +211,10 @@ SUBSYSTEM_DEF(networks) logs = list() add_log("-!- LOGS DELETED BY SYSTEM OPERATOR -!-") - +/datum/controller/subsystem/networks/proc/log_data_transfer( datum/netdata/data) + logs += "[station_time_timestamp()] - [data.generate_netlog()]" + if(logs.len > setting_maxlogcount) + logs = logs.Copy(logs.len - setting_maxlogcount, 0) /** * Updates the maximum amount of logs and purges those that go beyond that number @@ -324,9 +291,9 @@ SUBSYSTEM_DEF(networks) if(!(A.area_flags & UNIQUE_AREA)) // if we aren't a unique area, make sure our name is different A.network_area_id = SSnetworks.assign_random_name(5, A.network_area_id + "_") // tack on some garbage incase there are two area types -/datum/controller/subsystem/networks/proc/assign_areas_root_ids(list/areas, datum/map_template/M=null) - for(var/area/A in areas) - assign_area_network_id(A, M) +/datum/controller/subsystem/networks/proc/assign_areas_root_ids(list/areas, datum/map_template/map_template) + for(var/area/area as anything in areas) + assign_area_network_id(area, map_template) /** * Converts a list of string's into a full network_id diff --git a/code/datums/components/ntnet_interface.dm b/code/datums/components/ntnet_interface.dm index 719c693323c..28ba2bd1f9e 100644 --- a/code/datums/components/ntnet_interface.dm +++ b/code/datums/components/ntnet_interface.dm @@ -130,8 +130,6 @@ /datum/component/ntnet_interface/proc/connect_port(port) return registered_sockets[port] - - /datum/component/ntnet_interface/Destroy() network.remove_interface(src, TRUE) SSnetworks.interfaces_by_hardware_id.Remove(hardware_id) diff --git a/code/modules/NTNet/network.dm b/code/modules/NTNet/network.dm index 141ad73fe52..b8432b46e44 100644 --- a/code/modules/NTNet/network.dm +++ b/code/modules/NTNet/network.dm @@ -33,7 +33,6 @@ /// Parrnt of the network. If this is null, we are a oot network var/datum/ntnet/parent - /* * Creates a new network * @@ -72,7 +71,7 @@ /// A network should NEVER be deleted. If you don't want to show it exists just check if its /// empty -/datum/ntnet/Destroy() +/datum/ntnet/Destroy(force) networks -= network_id if(children.len > 0 || linked_devices.len > 0) CRASH("Trying to delete a network with devices still in them") @@ -120,17 +119,6 @@ return devices -/* - * Find if an interface exists on this network - * - * Used to look up a device on the network. - * - * Arguments: - * * tag_or_hid - Ither the hardware id or the id_tag - */ -/datum/ntnet/proc/find_interface(tag_or_hid) - return root_devices[tag_or_hid] - /** * Add this interface to this branch of the network. * @@ -221,177 +209,3 @@ target.linked_devices[interface.hardware_id] = interface interface.alias.Remove(net.network_id) interface.alias[target.network_id] = target - - - -/datum/ntnet/station_root - var/list/services_by_path = list() //type = datum/ntnet_service - var/list/services_by_id = list() //id = datum/ntnet_service - - var/list/autoinit_service_paths = list() //typepaths - - - var/list/available_station_software = list() - var/list/available_antag_software = list() - var/list/chat_channels = list() - var/list/fileservers = list() - - // These only affect wireless. LAN (consoles) are unaffected since it would be possible to create scenario where someone turns off NTNet, and is unable to turn it back on since it refuses connections - var/setting_softwaredownload = TRUE - var/setting_peertopeer = TRUE - var/setting_communication = TRUE - var/setting_systemcontrol = TRUE - var/setting_disabled = FALSE // Setting to 1 will disable all wireless, independently on relays status. - - var/intrusion_detection_enabled = TRUE // Whether the IDS warning system is enabled - var/intrusion_detection_alarm = FALSE // Set when there is an IDS warning due to malicious (antag) software. - -// If new NTNet datum is spawned, it replaces the old one. -/datum/ntnet/station_root/New(root_name) - . = ..() - SSnetworks.add_log("NTNet logging system activated for [root_name]") - - - - -#ifdef NTNET_SERVICE -/datum/ntnet/station_root/Destroy() - for(var/i in services_by_id) - var/S = i - S.disconnect(src, TRUE) - return ..() - - -/datum/ntnet/station_root/proc/find_service_id(id) - return services_by_id[id] - -/datum/ntnet/station_root/proc/find_service_path(path) - return services_by_path[path] - -/datum/ntnet/station_root/proc/register_service(datum/ntnet_service/S) - if(!istype(S)) - return FALSE - if(services_by_path[S.type] || services_by_id[S.id]) - return FALSE - services_by_path[S.type] = S - services_by_id[S.id] = S - return TRUE - -/datum/ntnet/station_root/proc/unregister_service(datum/ntnet_service/S) - if(!istype(S)) - return FALSE - services_by_path -= S.type - services_by_id -= S.id - return TRUE - -/datum/ntnet/station_root/proc/create_service(type) - var/datum/ntnet_service/S = new type - if(!istype(S)) - return FALSE - . = S.connect(src) - if(!.) - qdel(S) - -/datum/ntnet/station_root/proc/destroy_service(type) - var/datum/ntnet_service/S = find_service_path(type) - if(!istype(S)) - return FALSE - . = S.disconnect(src) - if(.) - qdel(src) - -/datum/ntnet/station_root/proc/process_data_transmit(datum/component/ntnet_interface/sender, datum/netdata/data) - if(..()) - for(var/i in services_by_id) - var/datum/ntnet_service/serv = services_by_id[i] - serv.ntnet_intercept(data, src, sender) - return TRUE -#endif - -// Checks whether NTNet operates. If parameter is passed checks whether specific function is enabled. -/datum/ntnet/station_root/proc/check_function(specific_action = 0) - if(!SSnetworks.relays || !SSnetworks.relays.len) // No relays found. NTNet is down - return FALSE - - // Check all relays. If we have at least one working relay, network is up. - if(!SSnetworks.check_relay_operation()) - return FALSE - - if(setting_disabled) - return FALSE - - switch(specific_action) - if(NTNET_SOFTWAREDOWNLOAD) - return setting_softwaredownload - if(NTNET_PEERTOPEER) - return setting_peertopeer - if(NTNET_COMMUNICATION) - return setting_communication - if(NTNET_SYSTEMCONTROL) - return setting_systemcontrol - return TRUE - -// Builds lists that contain downloadable software. -/datum/ntnet/station_root/proc/build_software_lists() - available_station_software = list() - available_antag_software = list() - for(var/F in typesof(/datum/computer_file/program)) - var/datum/computer_file/program/prog = new F - // Invalid type (shouldn't be possible but just in case), invalid filetype (not executable program) or invalid filename (unset program) - if(!prog || prog.filename == "UnknownProgram" || prog.filetype != "PRG") - continue - // Check whether the program should be available for station/antag download, if yes, add it to lists. - if(prog.available_on_ntnet) - available_station_software.Add(prog) - if(prog.available_on_syndinet) - available_antag_software.Add(prog) - -// Attempts to find a downloadable file according to filename var -/datum/ntnet/station_root/proc/find_ntnet_file_by_name(filename) - for(var/N in available_station_software) - var/datum/computer_file/program/P = N - if(filename == P.filename) - return P - for(var/N in available_antag_software) - var/datum/computer_file/program/P = N - if(filename == P.filename) - return P - -/datum/ntnet/station_root/proc/get_chat_channel_by_id(id) - for(var/datum/ntnet_conversation/chan in chat_channels) - if(chan.id == id) - return chan - -// Resets the IDS alarm -/datum/ntnet/station_root/proc/resetIDS() - intrusion_detection_alarm = FALSE - -/datum/ntnet/station_root/proc/toggleIDS() - resetIDS() - intrusion_detection_enabled = !intrusion_detection_enabled - - -/datum/ntnet/station_root/proc/toggle_function(function) - if(!function) - return - function = text2num(function) - switch(function) - if(NTNET_SOFTWAREDOWNLOAD) - setting_softwaredownload = !setting_softwaredownload - SSnetworks.add_log("Configuration Updated. Wireless network firewall now [setting_softwaredownload ? "allows" : "disallows"] connection to software repositories.") - if(NTNET_PEERTOPEER) - setting_peertopeer = !setting_peertopeer - SSnetworks.add_log("Configuration Updated. Wireless network firewall now [setting_peertopeer ? "allows" : "disallows"] peer to peer network traffic.") - if(NTNET_COMMUNICATION) - setting_communication = !setting_communication - SSnetworks.add_log("Configuration Updated. Wireless network firewall now [setting_communication ? "allows" : "disallows"] instant messaging and similar communication services.") - if(NTNET_SYSTEMCONTROL) - setting_systemcontrol = !setting_systemcontrol - SSnetworks.add_log("Configuration Updated. Wireless network firewall now [setting_systemcontrol ? "allows" : "disallows"] remote control of station's systems.") - - - -/datum/ntnet/station_root/proc/register_map_supremecy() //called at map init to make this what station networks use. - for(var/obj/machinery/ntnet_relay/R in GLOB.machines) - SSnetworks.relays.Add(R) - R.NTNet = src diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index 63cca33c0c2..7669288a514 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -9,7 +9,6 @@ density = TRUE circuit = /obj/item/circuitboard/machine/ntnet_relay - var/datum/ntnet/NTNet = null // This is mostly for backwards reference and to allow varedit modifications from ingame. ///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. @@ -116,17 +115,13 @@ uid = gl_uid++ component_parts = list() - if(SSnetworks.station_network) - SSnetworks.relays.Add(src) - NTNet = SSnetworks.station_network - SSnetworks.add_log("New quantum relay activated. Current amount of linked relays: [SSnetworks.relays.len]") - . = ..() + SSmodular_computers.ntnet_relays.Add(src) + SSnetworks.add_log("New quantum relay activated. Current amount of linked relays: [SSmodular_computers.ntnet_relays.len]") + return ..() /obj/machinery/ntnet_relay/Destroy() - if(SSnetworks.station_network) - SSnetworks.relays.Remove(src) - SSnetworks.add_log("Quantum relay connection severed. Current amount of linked relays: [SSnetworks.relays.len]") - NTNet = null + SSmodular_computers.ntnet_relays.Remove(src) + SSnetworks.add_log("Quantum relay connection severed. Current amount of linked relays: [SSmodular_computers.ntnet_relays.len]") for(var/datum/computer_file/program/ntnet_dos/D in dos_sources) D.target = null diff --git a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm index 247c0f5c1bd..fcfa41e3c90 100644 --- a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm +++ b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm @@ -34,13 +34,11 @@ if(id > MAX_CHANNELS) qdel(src) return - if(SSnetworks.station_network) - SSnetworks.station_network.chat_channels.Add(src) + SSmodular_computers.chat_channels.Add(src) return ..() /datum/ntnet_conversation/Destroy() - if(SSnetworks.station_network) - SSnetworks.station_network.chat_channels.Remove(src) + SSmodular_computers.chat_channels.Remove(src) for(var/datum/computer_file/program/chatclient/chatterbox as anything in (active_clients | offline_clients)) purge_client(chatterbox) return ..() diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index e758aaee903..cb18b647c64 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -628,7 +628,8 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar // Returns 0 for No Signal, 1 for Low Signal and 2 for Good Signal. 3 is for wired connection (always-on) /obj/item/modular_computer/proc/get_ntnet_status(specific_action = 0) - if(!SSnetworks.station_network || !SSnetworks.station_network.check_function(specific_action)) // NTNet is down and we are not connected via wired connection. No signal. + // NTNet is down and we are not connected via wired connection. No signal. + if(!SSmodular_computers.check_function(specific_action)) return NTNET_NO_SIGNAL // computers are connected through ethernet diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 5c61bb2f0f0..ac96f74922f 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -19,7 +19,7 @@ var/program_icon_state = null /// Set to 1 for program to require nonstop NTNet connection to run. If NTNet connection is lost program crashes. var/requires_ntnet = FALSE - /// Optional, if above is set to 1 checks for specific function of NTNet (currently NTNET_SOFTWAREDOWNLOAD, NTNET_PEERTOPEER, NTNET_SYSTEMCONTROL and NTNET_COMMUNICATION) + /// Optional, if above is set to 1 checks for specific function of NTNet (currently NTNET_SOFTWAREDOWNLOAD and NTNET_COMMUNICATION) var/requires_ntnet_feature = 0 /// NTNet status, updated every tick by computer running this program. Don't use this for checks if NTNet works, computers do that. Use this for calculations, etc. var/ntnet_status = 1 diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index 93323415b02..8574bacfab9 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -46,9 +46,9 @@ return switch(action) if("PRG_target_relay") - for(var/obj/machinery/ntnet_relay/R in SSnetworks.relays) - if(R.uid == params["targid"]) - target = R + for(var/obj/machinery/ntnet_relay/relays as anything in SSmodular_computers.ntnet_relays) + if(relays.uid == params["targid"]) + target = relays break return TRUE if("PRG_reset") @@ -62,15 +62,12 @@ if(target) executed = TRUE target.dos_sources.Add(src) - if(SSnetworks.station_network.intrusion_detection_enabled) + if(SSmodular_computers.intrusion_detection_enabled) SSnetworks.add_log("IDS WARNING - Excess traffic flood targeting relay [target.uid] detected from device: [computer.name]") - SSnetworks.station_network.intrusion_detection_alarm = TRUE + SSmodular_computers.intrusion_detection_alarm = TRUE return TRUE /datum/computer_file/program/ntnet_dos/ui_data(mob/user) - if(!SSnetworks.station_network) - return - var/list/data = get_header_data() data["error"] = error @@ -83,8 +80,8 @@ else data["target"] = FALSE data["relays"] = list() - for(var/obj/machinery/ntnet_relay/R in SSnetworks.relays) - data["relays"] += list(list("id" = R.uid)) + for(var/obj/machinery/ntnet_relay/relays as anything in SSmodular_computers.ntnet_relays) + data["relays"] += list(list("id" = relays.uid)) data["focus"] = target ? target.uid : null return data diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index c4390b93bc1..36d415257bf 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -20,6 +20,7 @@ var/emagged = FALSE var/list/main_repo var/list/antag_repo + var/list/show_categories = list( PROGRAM_CATEGORY_CREW, PROGRAM_CATEGORY_ENGI, @@ -30,8 +31,8 @@ /datum/computer_file/program/ntnetdownload/on_start() . = ..() - main_repo = SSnetworks.station_network.available_station_software - antag_repo = SSnetworks.station_network.available_antag_software + main_repo = SSmodular_computers.available_station_software + antag_repo = SSmodular_computers.available_antag_software /datum/computer_file/program/ntnetdownload/run_emag() if(emagged) @@ -44,7 +45,7 @@ if(downloaded_file) return FALSE - var/datum/computer_file/program/PRG = SSnetworks.station_network.find_ntnet_file_by_name(filename) + var/datum/computer_file/program/PRG = SSmodular_computers.find_ntnet_file_by_name(filename) if(!PRG || !istype(PRG)) return FALSE @@ -158,7 +159,7 @@ "installed" = !!computer.find_file_by_name(programs.filename), "compatible" = check_compatibility(programs), "size" = programs.size, - "access" = emagged && programs.available_on_syndinet ? TRUE : programs.can_run(user,transfer = 1, access = access), + "access" = emagged && programs.available_on_syndinet ? TRUE : programs.can_run(user,transfer = TRUE, access = access), "verifiedsource" = programs.available_on_ntnet, )) @@ -195,5 +196,5 @@ /datum/computer_file/program/ntnetdownload/syndicate/on_start() . = ..() - main_repo = SSnetworks.station_network.available_antag_software + main_repo = SSmodular_computers.available_antag_software antag_repo = null diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm index 3c4a922b49b..54b0402ad60 100644 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm @@ -53,7 +53,7 @@ if(.) return - var/datum/ntnet_conversation/channel = SSnetworks.station_network.get_chat_channel_by_id(active_channel) + var/datum/ntnet_conversation/channel = SSmodular_computers.get_chat_channel_by_id(active_channel) var/authed = FALSE if(channel && ((channel.channel_operator == src) || netadmin_mode)) authed = TRUE @@ -84,7 +84,7 @@ return TRUE active_channel = new_target - channel = SSnetworks.station_network.get_chat_channel_by_id(new_target) + channel = SSmodular_computers.get_chat_channel_by_id(new_target) if((!(src in channel.active_clients) && !(src in channel.offline_clients)) && !channel.password) channel.add_client(src) return TRUE @@ -106,7 +106,7 @@ return UI_UPDATE var/mob/living/user = usr if(can_run(user, TRUE, ACCESS_NETWORK)) - for(var/datum/ntnet_conversation/channels as anything in SSnetworks.station_network.chat_channels) + for(var/datum/ntnet_conversation/channels as anything in SSmodular_computers.chat_channels) channels.remove_client(src) netadmin_mode = TRUE return UI_UPDATE @@ -115,7 +115,7 @@ newname = replacetext(newname, " ", "_") if(!newname || newname == username) return - for(var/datum/ntnet_conversation/anychannel as anything in SSnetworks.station_network.chat_channels) + for(var/datum/ntnet_conversation/anychannel as anything in SSmodular_computers.chat_channels) if(src in anychannel.active_clients) anychannel.add_status_message("[username] is now known as [newname].") username = newname @@ -180,7 +180,7 @@ /datum/computer_file/program/chatclient/process_tick(delta_time) . = ..() - var/datum/ntnet_conversation/channel = SSnetworks.station_network.get_chat_channel_by_id(active_channel) + var/datum/ntnet_conversation/channel = SSmodular_computers.get_chat_channel_by_id(active_channel) if(program_state != PROGRAM_STATE_KILLED) ui_header = "ntnrc_idle.gif" if(channel) @@ -198,13 +198,13 @@ . = ..() if(!.) return - for(var/datum/ntnet_conversation/channel as anything in SSnetworks.station_network.chat_channels) + for(var/datum/ntnet_conversation/channel as anything in SSmodular_computers.chat_channels) if(src in channel.offline_clients) channel.offline_clients.Remove(src) channel.active_clients.Add(src) /datum/computer_file/program/chatclient/kill_program(forced = FALSE) - for(var/datum/ntnet_conversation/channel as anything in SSnetworks.station_network.chat_channels) + for(var/datum/ntnet_conversation/channel as anything in SSmodular_computers.chat_channels) channel.go_offline(src) active_channel = null return ..() @@ -219,11 +219,11 @@ /datum/computer_file/program/chatclient/ui_data(mob/user) var/list/data = get_header_data() - if(!SSnetworks.station_network || !SSnetworks.station_network.chat_channels) + if(!SSmodular_computers.chat_channels) return data var/list/all_channels = list() - for(var/datum/ntnet_conversation/conversations as anything in SSnetworks.station_network.chat_channels) + for(var/datum/ntnet_conversation/conversations as anything in SSmodular_computers.chat_channels) if(conversations.title) all_channels.Add(list(list( "chan" = conversations.title, @@ -232,7 +232,7 @@ data["all_channels"] = all_channels data["active_channel"] = active_channel - var/datum/ntnet_conversation/channel = SSnetworks.station_network.get_chat_channel_by_id(active_channel) + var/datum/ntnet_conversation/channel = SSmodular_computers.get_chat_channel_by_id(active_channel) var/authed = FALSE data["clients"] = list() data["messages"] = list() diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index bc96c7efae5..cd23656227e 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -17,42 +17,22 @@ return switch(action) if("resetIDS") - if(SSnetworks.station_network) - SSnetworks.station_network.resetIDS() + SSmodular_computers.intrusion_detection_alarm = FALSE return TRUE if("toggleIDS") - if(SSnetworks.station_network) - SSnetworks.station_network.toggleIDS() - return TRUE - if("toggleWireless") - if(!SSnetworks.station_network) - return - - // NTNet is disabled. Enabling can be done without user prompt - if(SSnetworks.station_network.setting_disabled) - SSnetworks.station_network.setting_disabled = FALSE - return TRUE - - SSnetworks.station_network.setting_disabled = TRUE + SSmodular_computers.intrusion_detection_enabled = !SSmodular_computers.intrusion_detection_enabled return TRUE if("purgelogs") - if(SSnetworks.station_network) - SSnetworks.purge_logs() + SSnetworks.purge_logs() return TRUE if("updatemaxlogs") var/logcount = params["new_number"] - if(SSnetworks.station_network) - SSnetworks.update_max_log_count(logcount) + SSnetworks.update_max_log_count(logcount) return TRUE if("toggle_function") - if(!SSnetworks.station_network) - return - SSnetworks.station_network.toggle_function(text2num(params["id"])) + SSmodular_computers.toggle_function(text2num(params["id"])) return TRUE if("toggle_mass_pda") - if(!SSnetworks.station_network) - return - var/obj/item/modular_computer/target_tablet = locate(params["ref"]) in GLOB.TabletMessengers if(!istype(target_tablet)) return @@ -60,30 +40,24 @@ messenger_app.spam_mode = !messenger_app.spam_mode /datum/computer_file/program/ntnetmonitor/ui_data(mob/user) - if(!SSnetworks.station_network) - return var/list/data = get_header_data() - data["ntnetstatus"] = SSnetworks.station_network.check_function() - data["ntnetrelays"] = SSnetworks.relays.len - data["idsstatus"] = SSnetworks.station_network.intrusion_detection_enabled - data["idsalarm"] = SSnetworks.station_network.intrusion_detection_alarm + data["ntnetstatus"] = SSmodular_computers.check_function() + data["ntnetrelays"] = SSmodular_computers.ntnet_relays.len - data["config_softwaredownload"] = SSnetworks.station_network.setting_softwaredownload - data["config_peertopeer"] = SSnetworks.station_network.setting_peertopeer - data["config_communication"] = SSnetworks.station_network.setting_communication - data["config_systemcontrol"] = SSnetworks.station_network.setting_systemcontrol + data["config_softwaredownload"] = SSmodular_computers.setting_softwaredownload + data["config_communication"] = SSmodular_computers.setting_communication + + data["idsstatus"] = SSmodular_computers.intrusion_detection_enabled + data["idsalarm"] = SSmodular_computers.intrusion_detection_alarm data["ntnetlogs"] = list() - data["minlogs"] = MIN_NTNET_LOGS - data["maxlogs"] = MAX_NTNET_LOGS - for(var/i in SSnetworks.logs) data["ntnetlogs"] += list(list("entry" = i)) data["ntnetmaxlogs"] = SSnetworks.setting_maxlogcount data["tablets"] = list() - for(var/obj/item/modular_computer/messenger in GetViewableDevices()) + for(var/obj/item/modular_computer/messenger as anything in GetViewableDevices()) var/list/tablet_data = list() if(messenger.saved_identification) for(var/datum/computer_file/program/messenger/messenger_app in computer.stored_files) @@ -95,3 +69,9 @@ data["tablets"] += list(tablet_data) return data + +/datum/computer_file/program/ntnetmonitor/ui_static_data(mob/user) + var/list/data = ..() + data["minlogs"] = MIN_NTNET_LOGS + data["maxlogs"] = MAX_NTNET_LOGS + return data diff --git a/code/modules/unit_tests/ntnetwork_tests.dm b/code/modules/unit_tests/ntnetwork_tests.dm index 38dda244f76..636eb1de3a8 100644 --- a/code/modules/unit_tests/ntnetwork_tests.dm +++ b/code/modules/unit_tests/ntnetwork_tests.dm @@ -1,22 +1,54 @@ /datum/unit_test/ntnetwork - var/list/valid_network_names = list("SS13.ATMOS.SCRUBBERS.SM", "DEEPSPACE.HYDRO.PLANT", "SINDIE.STINKS.BUTT") + var/list/valid_network_names = list( + "SS13.ATMOS.SCRUBBERS.SM", + "DEEPSPACE.HYDRO.PLANT", + "SINDIE.STINKS.BUTT", + ) - var/list/invalid_network_names = list(".SS13.BOB", "SS13.OHMAN.", "SS13.HAS A SPACE" ) + var/list/invalid_network_names = list( + ".SS13.BOB", + "SS13.OHMAN.", + "SS13.HAS A SPACE", + ) - var/list/valid_network_trees = list(list("SS13","ATMOS","SCRUBBERS","SM"),list("DEEPSPACE","HYDRO","PLANT"), list("SINDIE","STINKS","BUTT")) + var/list/valid_network_trees = list( + list( + "SS13", + "ATMOS", + "SCRUBBERS", + "SM", + ), + list( + "DEEPSPACE", + "HYDRO", + "PLANT", + ), + list( + "SINDIE", + "STINKS", + "BUTT", + ), + ) var/list/network_roots = list( - __STATION_NETWORK_ROOT, - __CENTCOM_NETWORK_ROOT, - __SYNDICATE_NETWORK_ROOT, - __LIMBO_NETWORK_ROOT) + __STATION_NETWORK_ROOT, + __CENTCOM_NETWORK_ROOT, + __SYNDICATE_NETWORK_ROOT, + __LIMBO_NETWORK_ROOT, + ) var/list/random_words_for_testing = list( - __NETWORK_TOOLS, __NETWORK_REMOTES, __NETWORK_AIRLOCKS, - __NETWORK_DOORS, __NETWORK_ATMOS, __NETWORK_SCUBBERS, - __NETWORK_AIRALARMS, __NETWORK_CONTROL, __NETWORK_STORAGE, - __NETWORK_CARGO, __NETWORK_BOTS, __NETWORK_COMPUTER, - __NETWORK_TABLETS) + __NETWORK_TOOLS, + __NETWORK_REMOTES, + __NETWORK_AIRLOCKS, + __NETWORK_DOORS, + __NETWORK_CONTROL, + __NETWORK_STORAGE, + __NETWORK_CARGO, + __NETWORK_BOTS, + __NETWORK_COMPUTER, + __NETWORK_TABLETS, + ) var/number_of_names_to_test = 50 var/length_of_test_network = 5 diff --git a/modular_skyrat/modules/contractor/code/items/tablet.dm b/modular_skyrat/modules/contractor/code/items/tablet.dm index a318d36cbf5..f0ee355cd87 100644 --- a/modular_skyrat/modules/contractor/code/items/tablet.dm +++ b/modular_skyrat/modules/contractor/code/items/tablet.dm @@ -2,6 +2,12 @@ name = "contract PDA" icon = 'icons/obj/contractor_tablet.dmi' icon_state = "tablet" + icon_state_unpowered = "tablet" + icon_state_powered = "tablet" + icon_state_menu = "assign" + greyscale_config = null + greyscale_colors = null + comp_light_luminosity = 6.3 saved_identification = "John Doe" saved_job = "Citizen" device_theme = "syndicate" diff --git a/tgstation.dme b/tgstation.dme index 5c3c0297569..eb59394a567 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -617,6 +617,7 @@ #include "code\controllers\subsystem\materials.dm" #include "code\controllers\subsystem\minor_mapping.dm" #include "code\controllers\subsystem\mobs.dm" +#include "code\controllers\subsystem\modular_computers.dm" #include "code\controllers\subsystem\moods.dm" #include "code\controllers\subsystem\mouse_entered.dm" #include "code\controllers\subsystem\nightshift.dm" diff --git a/tgui/packages/tgui/interfaces/NtosNetMonitor.js b/tgui/packages/tgui/interfaces/NtosNetMonitor.js index f9944e7dfae..321a6250b86 100644 --- a/tgui/packages/tgui/interfaces/NtosNetMonitor.js +++ b/tgui/packages/tgui/interfaces/NtosNetMonitor.js @@ -9,9 +9,7 @@ export const NtosNetMonitor = (props, context) => { ntnetrelays, ntnetstatus, config_softwaredownload, - config_peertopeer, config_communication, - config_systemcontrol, idsalarm, idsstatus, ntnetmaxlogs, @@ -47,9 +45,7 @@ export const NtosNetMonitor = (props, context) => { ntnetrelays={ntnetrelays} ntnetstatus={ntnetstatus} config_softwaredownload={config_softwaredownload} - config_peertopeer={config_peertopeer} config_communication={config_communication} - config_systemcontrol={config_systemcontrol} idsalarm={idsalarm} idsstatus={idsstatus} ntnetmaxlogs={ntnetmaxlogs} @@ -74,9 +70,7 @@ const MainPage = (props, context) => { ntnetrelays, ntnetstatus, config_softwaredownload, - config_peertopeer, config_communication, - config_systemcontrol, idsalarm, idsstatus, ntnetmaxlogs, @@ -91,16 +85,7 @@ const MainPage = (props, context) => { WARNING: Disabling wireless transmitters when using a wireless device may prevent you from reenabling them! -
act('toggleWireless')} - /> - }> +
{ntnetrelays ? ( @@ -124,17 +109,6 @@ const MainPage = (props, context) => { /> } /> - act('toggle_function', { id: '2' })} - /> - } - /> { icon={config_communication ? 'power-off' : 'times'} content={config_communication ? 'ENABLED' : 'DISABLED'} selected={config_communication} - onClick={() => act('toggle_function', { id: '3' })} - /> - } - /> - act('toggle_function', { id: '4' })} + onClick={() => act('toggle_function', { id: '2' })} /> } />