Removes more NTNet from Tablets and removes a ton of dead code (#74085)

## About The Pull Request

Removes NtNet softwaredownload/communication because they did nothing,
so this also removes the feature to shut them off from Wirecarp

I removed tablets from being added to networks, Tablets already generate
logs for actions they do, which is already enough for the effects it has
in-game (just being visible to Wirecarp), once NtNet is deleted from
everything else then we can move it to ModPCs and limit logging to only
ModPC actions.

Fixes shutting off ntnet relays from Wirecarp, now you can properly shut
off Ntnet, and the warning that it kicks you out of the program is now
true.

Gives the Holodeck it's own network root define and fixes Syndicate
network showing up on Wirecarp

Wirecarp's PDA logs now shows the source of an action

## Why It's Good For The Game

Moves ModPCs further from NTNet so we can move towards deleting it
entirely
Makes Wirecarp more responsible and trustworthy
Removes useless stuff that never gets used, simplifying a overthought
overcomplicated system.

## Changelog

🆑
balance: Wirecarp now properly shuts off NtNet remotely.
balance: Wirecarp now shows the source of a PDA that does an action.
fix: Wirecarp can no longer be used to see if Nukies exist through their
networks.
del: Removes Software downloading and communication Ntnet networks, as
they were pretty worthless.
/🆑
This commit is contained in:
John Willard
2023-03-21 09:50:47 +13:00
committed by GitHub
parent d7674626c6
commit 4462f4d5be
13 changed files with 65 additions and 147 deletions
+5 -8
View File
@@ -1,12 +1,4 @@
//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_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
#define NTNETSPEED_HIGHSIGNAL 1 // GQ/s transfer speed when the device is wirelessly connected and on High signal
#define NTNETSPEED_ETHERNET 2 // GQ/s transfer speed when the device is using wired connection
//Caps for NTNet logging. Less than 10 would make logging useless anyway, more than 500 may make the log browser too laggy. Defaults to 100 unless user changes it.
#define MAX_NTNET_LOGS 300
@@ -31,6 +23,11 @@
#define DETOMATIX_RESIST_MINOR 1
#define DETOMATIX_RESIST_MAJOR 2
//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
#define NTNETSPEED_HIGHSIGNAL 1 // GQ/s transfer speed when the device is wirelessly connected and on High signal
#define NTNETSPEED_ETHERNET 2 // GQ/s transfer speed when the device is using wired connection
// NTNet connection signals
///When you're away from the station/mining base and not on a console, you can't access the internet
#define NTNET_NO_SIGNAL 0
+6 -20
View File
@@ -14,35 +14,21 @@
#define NETWORK_NAME_COMBINE(L,R) ((L) + "." + (R))
/// Station network names. Used as the root networks for main parts of the station
#define __STATION_NETWORK_ROOT "SS13"
#define __CENTCOM_NETWORK_ROOT "CENTCOM"
#define __SYNDICATE_NETWORK_ROOT "SYNDI"
#define __LIMBO_NETWORK_ROOT "LIMBO" // Limbo is a dead network
#define HOLODECK_NETWORK_ROOT "HOLODECK"
#define STATION_NETWORK_ROOT "SS13"
#define CENTCOM_NETWORK_ROOT "CENTCOM"
#define SYNDICATE_NETWORK_ROOT "SYNDI"
#define LIMBO_NETWORK_ROOT "LIMBO" // Limbo is a dead network
/// various sub networks pieces
#define __NETWORK_LIMBO "LIMBO"
#define __NETWORK_TOOLS "TOOLS"
#define __NETWORK_CONTROL "CONTROL"
#define __NETWORK_STORAGE "STORAGE"
#define __NETWORK_CARGO "CARGO"
#define __NETWORK_BOTS "BOTS"
#define __NETWORK_COMPUTER "COMPUTER"
#define __NETWORK_TABLETS "TABLETS"
#define __NETWORK_CIRCUITS "CIRCUITS"
/// Various combined subnetworks
#define NETWORK_TABLETS NETWORK_NAME_COMBINE(__NETWORK_COMPUTER, __NETWORK_TABLETS)
#define NETWORK_BOTS_CARGO NETWORK_NAME_COMBINE(__NETWORK_CARGO, __NETWORK_BOTS)
// Finally turn eveything into strings
#define STATION_NETWORK_ROOT __STATION_NETWORK_ROOT
#define CENTCOM_NETWORK_ROOT __CENTCOM_NETWORK_ROOT
#define SYNDICATE_NETWORK_ROOT __SYNDICATE_NETWORK_ROOT
#define LIMBO_NETWORK_ROOT __LIMBO_NETWORK_ROOT
/// Network name should be all caps and no punctuation except for _ and . between domains
/// This does a quick an dirty fix to a network name to make sure it works
/proc/simple_network_name_fix(name)
@@ -9,11 +9,6 @@ SUBSYSTEM_DEF(modular_computers)
///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.
@@ -48,34 +43,6 @@ SUBSYSTEM_DEF(modular_computers)
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)
@@ -272,9 +272,11 @@ SUBSYSTEM_DEF(networks)
// Anything in Centcom is completely isolated
// Special case for holodecks.
if(istype(A,/area/station/holodeck))
A.network_root_id = "HOLODECK" // isolated from the station network
A.network_root_id = HOLODECK_NETWORK_ROOT // isolated from the station network
else if(SSmapping.level_trait(A.z, ZTRAIT_CENTCOM))
A.network_root_id = CENTCOM_NETWORK_ROOT
else if(SSmapping.level_trait(A.z, ZTRAIT_RESERVED))
A.network_root_id = SYNDICATE_NETWORK_ROOT
// Otherwise the default is the station
else
A.network_root_id = STATION_NETWORK_ROOT
-3
View File
@@ -34,7 +34,6 @@
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)
@@ -47,7 +46,6 @@
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.
@@ -55,7 +53,6 @@
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 ..()
@@ -135,7 +135,6 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
update_appearance()
register_context()
init_network_id(NETWORK_TABLETS)
Add_Messenger()
install_default_programs()
@@ -468,7 +467,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
shutdown_computer()
return
if(active_program && active_program.requires_ntnet && !get_ntnet_status(active_program.requires_ntnet_feature))
if(active_program && active_program.requires_ntnet && !get_ntnet_status())
active_program.event_networkfailure(FALSE) // Active program requires NTNet to run but we've just lost connection. Crash.
for(var/datum/computer_file/program/idle_programs as anything in idle_threads)
@@ -476,7 +475,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
idle_threads.Remove(idle_programs)
continue
idle_programs.process_tick(delta_time)
idle_programs.ntnet_status = get_ntnet_status(idle_programs.requires_ntnet_feature)
idle_programs.ntnet_status = get_ntnet_status()
if(idle_programs.requires_ntnet && !idle_programs.ntnet_status)
idle_programs.event_networkfailure(TRUE)
@@ -607,7 +606,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
to_chat(user, span_danger("\The [src] displays a \"Maximal CPU load reached. Unable to run another program.\" error."))
return FALSE
if(program.requires_ntnet && !get_ntnet_status(program.requires_ntnet_feature)) // The program requires NTNet connection, but we are not connected to NTNet.
if(program.requires_ntnet && !get_ntnet_status()) // The program requires NTNet connection, but we are not connected to NTNet.
to_chat(user, span_danger("\The [src]'s screen shows \"Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\" warning."))
return FALSE
@@ -621,9 +620,9 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
return TRUE
// 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)
/obj/item/modular_computer/proc/get_ntnet_status()
// NTNet is down and we are not connected via wired connection. No signal.
if(!SSmodular_computers.check_function(specific_action))
if(!SSmodular_computers.check_relay_operation())
return NTNET_NO_SIGNAL
// computers are connected through ethernet
@@ -647,7 +646,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
if(!get_ntnet_status())
return FALSE
return SSnetworks.add_log(text, network_id)
return SSnetworks.add_log("[src]: [text]", network_id)
/obj/item/modular_computer/proc/shutdown_computer(loud = 1)
kill_program(forced = TRUE)
@@ -322,7 +322,7 @@
return ..()
return FALSE
/obj/item/modular_computer/pda/silicon/get_ntnet_status(specific_action = 0)
/obj/item/modular_computer/pda/silicon/get_ntnet_status()
//No borg found
if(!silicon_owner)
return FALSE
@@ -21,8 +21,6 @@
var/header_program = FALSE
/// 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 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
/// Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) or PROGRAM_ALL
@@ -52,7 +50,6 @@
temp.filedesc = filedesc
temp.program_icon_state = program_icon_state
temp.requires_ntnet = requires_ntnet
temp.requires_ntnet_feature = requires_ntnet_feature
temp.usage_flags = usage_flags
return temp
@@ -61,11 +58,11 @@
if(computer)
computer.update_appearance()
// Attempts to create a log in global ntnet datum. Returns 1 on success, 0 on fail.
///Attempts to generate an Ntnet log, returns the log on success, FALSE otherwise.
/datum/computer_file/program/proc/generate_network_log(text)
if(computer)
return computer.add_log(text)
return 0
return FALSE
/**
*Runs when the device is used to attack an atom in non-combat mode using right click (secondary).
@@ -153,10 +150,10 @@
**/
/datum/computer_file/program/proc/on_start(mob/living/user)
SHOULD_CALL_PARENT(TRUE)
if(can_run(user, 1))
if(can_run(user, loud = TRUE))
if(requires_ntnet)
var/obj/item/card/id/ID = computer.computer_id_slot?.GetID()
generate_network_log("Connection opened -- Program ID: [filename] User:[ID?"[ID.registered_name]":"None"]")
generate_network_log("Connection opened -- Program ID:[filename] User:[ID?"[ID.registered_name]":"None"]")
program_state = PROGRAM_STATE_ACTIVE
return TRUE
return FALSE
@@ -6,7 +6,6 @@
undeletable = TRUE
size = 4
requires_ntnet = TRUE
requires_ntnet_feature = NTNET_SOFTWAREDOWNLOAD
available_on_ntnet = FALSE
ui_header = "downloader_finished.gif"
tgui_id = "NtosNetDownloader"
@@ -12,7 +12,6 @@
extended_desc = "This program allows communication over NTNRC network"
size = 8
requires_ntnet = TRUE
requires_ntnet_feature = NTNET_COMMUNICATION
ui_header = "ntnrc_idle.gif"
available_on_ntnet = TRUE
tgui_id = "NtosNetChat"
@@ -22,6 +22,12 @@
if("toggleIDS")
SSmodular_computers.intrusion_detection_enabled = !SSmodular_computers.intrusion_detection_enabled
return TRUE
if("toggle_relay")
var/obj/machinery/ntnet_relay/target_relay = locate(params["ref"]) in SSmodular_computers.ntnet_relays
if(!istype(target_relay))
return
target_relay.set_relay_enabled(!target_relay.relay_enabled)
return TRUE
if("purgelogs")
SSnetworks.purge_logs()
return TRUE
@@ -29,24 +35,25 @@
var/logcount = params["new_number"]
SSnetworks.update_max_log_count(logcount)
return TRUE
if("toggle_function")
SSmodular_computers.toggle_function(text2num(params["id"]))
return TRUE
if("toggle_mass_pda")
var/obj/item/modular_computer/target_tablet = locate(params["ref"]) in GLOB.TabletMessengers
if(!istype(target_tablet))
return
for(var/datum/computer_file/program/messenger/messenger_app in target_tablet.stored_files)
messenger_app.spam_mode = !messenger_app.spam_mode
return TRUE
/datum/computer_file/program/ntnetmonitor/ui_data(mob/user)
var/list/data = list()
data["ntnetstatus"] = SSmodular_computers.check_function()
data["ntnetrelays"] = SSmodular_computers.ntnet_relays.len
data["ntnetrelays"] = list()
for(var/obj/machinery/ntnet_relay/relays as anything in SSmodular_computers.ntnet_relays)
var/list/relay_data = list()
relay_data["is_operational"] = !!relays.is_operational
relay_data["name"] = relays.name
relay_data["ref"] = REF(relays)
data["config_softwaredownload"] = SSmodular_computers.setting_softwaredownload
data["config_communication"] = SSmodular_computers.setting_communication
data["ntnetrelays"] += list(relay_data)
data["idsstatus"] = SSmodular_computers.intrusion_detection_enabled
data["idsalarm"] = SSmodular_computers.intrusion_detection_alarm
+13 -17
View File
@@ -1,17 +1,20 @@
/datum/unit_test/ntnetwork
var/list/valid_network_names = list(
var/number_of_names_to_test = 50
var/length_of_test_network = 5
var/static/list/valid_network_names = list(
"SS13.ATMOS.SCRUBBERS.SM",
"DEEPSPACE.HYDRO.PLANT",
"SINDIE.STINKS.BUTT",
)
var/list/invalid_network_names = list(
var/static/list/invalid_network_names = list(
".SS13.BOB",
"SS13.OHMAN.",
"SS13.HAS A SPACE",
)
var/list/valid_network_trees = list(
var/static/list/valid_network_trees = list(
list(
"SS13",
"ATMOS",
@@ -30,26 +33,19 @@
),
)
var/list/network_roots = list(
__STATION_NETWORK_ROOT,
__CENTCOM_NETWORK_ROOT,
__SYNDICATE_NETWORK_ROOT,
__LIMBO_NETWORK_ROOT,
var/static/list/network_roots = list(
HOLODECK_NETWORK_ROOT,
STATION_NETWORK_ROOT,
CENTCOM_NETWORK_ROOT,
SYNDICATE_NETWORK_ROOT,
LIMBO_NETWORK_ROOT,
)
var/list/random_words_for_testing = list(
__NETWORK_TOOLS,
__NETWORK_CONTROL,
__NETWORK_STORAGE,
var/static/list/random_words_for_testing = list(
__NETWORK_CARGO,
__NETWORK_BOTS,
__NETWORK_COMPUTER,
__NETWORK_TABLETS,
)
var/number_of_names_to_test = 50
var/length_of_test_network = 5
/datum/unit_test/proc/mangle_word(word)
var/len = length(word)
var/space_pos = round(len/2)
+13 -41
View File
@@ -7,9 +7,6 @@ export const NtosNetMonitor = (props, context) => {
const [tab_main, setTab_main] = useSharedState(context, 'tab_main', 1);
const {
ntnetrelays,
ntnetstatus,
config_softwaredownload,
config_communication,
idsalarm,
idsstatus,
ntnetmaxlogs,
@@ -43,9 +40,6 @@ export const NtosNetMonitor = (props, context) => {
<Stack.Item>
<MainPage
ntnetrelays={ntnetrelays}
ntnetstatus={ntnetstatus}
config_softwaredownload={config_softwaredownload}
config_communication={config_communication}
idsalarm={idsalarm}
idsstatus={idsstatus}
ntnetmaxlogs={ntnetmaxlogs}
@@ -68,9 +62,6 @@ export const NtosNetMonitor = (props, context) => {
const MainPage = (props, context) => {
const {
ntnetrelays,
ntnetstatus,
config_softwaredownload,
config_communication,
idsalarm,
idsstatus,
ntnetmaxlogs,
@@ -86,41 +77,23 @@ const MainPage = (props, context) => {
may prevent you from reenabling them!
</NoticeBox>
<Section title="Wireless Connectivity">
{ntnetrelays ? (
<LabeledList>
<LabeledList.Item label="Active NTNet Relays">
{ntnetrelays}
</LabeledList.Item>
</LabeledList>
) : (
'No Relays Connected'
)}
</Section>
<Section title="Firewall Configuration">
<LabeledList>
<LabeledList.Item
label="Software Downloads"
{ntnetrelays.map((relay) => (
<Section
key={relay.ref}
title={relay.name}
buttons={
<Button
icon={config_softwaredownload ? 'power-off' : 'times'}
content={config_softwaredownload ? 'ENABLED' : 'DISABLED'}
selected={config_softwaredownload}
onClick={() => act('toggle_function', { id: '1' })}
<Button.Confirm
color={relay.is_operational ? 'good' : 'bad'}
content={relay.is_operational ? 'ENABLED' : 'DISABLED'}
onClick={() =>
act('toggle_relay', {
ref: relay.ref,
})
}
/>
}
/>
<LabeledList.Item
label="Communication Systems"
buttons={
<Button
icon={config_communication ? 'power-off' : 'times'}
content={config_communication ? 'ENABLED' : 'DISABLED'}
selected={config_communication}
onClick={() => act('toggle_function', { id: '2' })}
/>
}
/>
</LabeledList>
))}
</Section>
<Section title="Security Systems">
{!!idsalarm && (
@@ -171,7 +144,6 @@ const MainPage = (props, context) => {
</LabeledList>
<Section
title="System Log"
level={2}
buttons={
<Button.Confirm
icon="trash"