diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index c683ff510c8..bba8fa1494e 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -77,7 +77,6 @@
circuit = /obj/item/circuitboard/machine/telecomms/message_server
var/list/datum/data_tablet_msg/pda_msgs = list()
- var/list/datum/data_tablet_msg/modular_msgs = list()
var/list/datum/data_rc_msg/rc_msgs = list()
var/decryptkey = "password"
var/calibrating = 15 MINUTES //Init reads this and adds world.time, then becomes 0 when that time has passed and the machine works
diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm
index cff4cd7847f..5e76089ad04 100644
--- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm
+++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm
@@ -26,6 +26,11 @@
/obj/item/modular_computer/tablet/pda/heads/captain/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_TABLET_CHECK_DETONATE, .proc/tab_no_detonate)
+ var/obj/item/computer_hardware/hard_drive/drive = all_components[MC_HDD]
+ if(!drive)
+ return
+ for(var/datum/computer_file/program/messenger/messenger_app in drive.stored_files)
+ messenger_app.spam_mode = TRUE
/obj/item/modular_computer/tablet/pda/heads/hop
name = "head of personnel PDA"
@@ -274,6 +279,14 @@
/datum/computer_file/program/records/security,
)
+/obj/item/modular_computer/tablet/pda/lawyer/Initialize(mapload)
+ . = ..()
+ var/obj/item/computer_hardware/hard_drive/drive = all_components[MC_HDD]
+ if(!drive)
+ return
+ for(var/datum/computer_file/program/messenger/messenger_app in drive.stored_files)
+ messenger_app.spam_mode = TRUE
+
/obj/item/modular_computer/tablet/pda/botanist
name = "botanist PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
diff --git a/code/modules/modular_computers/file_system/programs/ntmessenger.dm b/code/modules/modular_computers/file_system/programs/ntmessenger.dm
index 3c6fa2e7160..c93b3d81179 100644
--- a/code/modules/modular_computers/file_system/programs/ntmessenger.dm
+++ b/code/modules/modular_computers/file_system/programs/ntmessenger.dm
@@ -45,6 +45,8 @@
var/is_silicon = FALSE
/// Whether or not we're in a mime PDA.
var/mime_mode = FALSE
+ /// Whether this app can send messages to all.
+ var/spam_mode = FALSE
/datum/computer_file/program/messenger/proc/ScrubMessengerList()
var/list/dictionary = list()
@@ -185,11 +187,7 @@
data["sortByJob"] = sort_by_job
data["isSilicon"] = is_silicon
data["photo"] = photo_path
-
- var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD]
- if(card_slot)
- var/obj/item/card/id/id_card = card_slot ? card_slot.stored_card : ""
- data["canSpam"] = (ACCESS_LAWYER in id_card?.access)
+ data["canSpam"] = spam_mode
var/obj/item/computer_hardware/hard_drive/portable/virus/disk = computer.all_components[MC_SDD]
if(disk)
diff --git a/code/modules/modular_computers/file_system/programs/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm
similarity index 66%
rename from code/modules/modular_computers/file_system/programs/ntmonitor.dm
rename to code/modules/modular_computers/file_system/programs/wirecarp.dm
index 5a34488fd22..24f63cf7258 100644
--- a/code/modules/modular_computers/file_system/programs/ntmonitor.dm
+++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm
@@ -11,7 +11,7 @@
tgui_id = "NtosNetMonitor"
program_icon = "network-wired"
-/datum/computer_file/program/ntnetmonitor/ui_act(action, params)
+/datum/computer_file/program/ntnetmonitor/ui_act(action, list/params, datum/tgui/ui)
. = ..()
if(.)
return
@@ -49,6 +49,20 @@
return
SSnetworks.station_network.toggle_function(text2num(params["id"]))
return TRUE
+ if("toggle_mass_pda")
+ if(!SSnetworks.station_network)
+ return
+ var/mob/user = ui.user
+
+ var/obj/item/modular_computer/target_tablet = locate(params["ref"]) in GLOB.TabletMessengers
+ if(!istype(target_tablet))
+ return
+ var/obj/item/computer_hardware/hard_drive/drive = target_tablet.all_components[MC_HDD]
+ if(!drive)
+ to_chat(user, span_boldnotice("Target tablet somehow is lacking a hard drive."))
+ return
+ for(var/datum/computer_file/program/messenger/messenger_app in drive.stored_files)
+ messenger_app.spam_mode = !messenger_app.spam_mode
/datum/computer_file/program/ntnetmonitor/ui_data(mob/user)
if(!SSnetworks.station_network)
@@ -73,4 +87,19 @@
data["ntnetlogs"] += list(list("entry" = i))
data["ntnetmaxlogs"] = SSnetworks.setting_maxlogcount
+ data["tablets"] = list()
+ for(var/obj/item/modular_computer/messenger in GetViewableDevices())
+ var/list/tablet_data = list()
+ if(messenger.saved_identification)
+ var/obj/item/computer_hardware/hard_drive/drive = messenger.all_components[MC_HDD]
+ if(!drive)
+ continue
+ for(var/datum/computer_file/program/messenger/messenger_app in drive.stored_files)
+ tablet_data["enabled_spam"] += messenger_app.spam_mode
+
+ tablet_data["name"] += messenger.saved_identification
+ tablet_data["ref"] += REF(messenger)
+
+ data["tablets"] += list(tablet_data)
+
return data
diff --git a/tgstation.dme b/tgstation.dme
index 07b7c41e2d2..f2467f23d1c 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3613,7 +3613,6 @@
#include "code\modules\modular_computers\file_system\programs\notepad.dm"
#include "code\modules\modular_computers\file_system\programs\ntdownloader.dm"
#include "code\modules\modular_computers\file_system\programs\ntmessenger.dm"
-#include "code\modules\modular_computers\file_system\programs\ntmonitor.dm"
#include "code\modules\modular_computers\file_system\programs\ntnrc_client.dm"
#include "code\modules\modular_computers\file_system\programs\phys_scanner.dm"
#include "code\modules\modular_computers\file_system\programs\portrait_printer.dm"
@@ -3628,6 +3627,7 @@
#include "code\modules\modular_computers\file_system\programs\sm_monitor.dm"
#include "code\modules\modular_computers\file_system\programs\statusdisplay.dm"
#include "code\modules\modular_computers\file_system\programs\techweb.dm"
+#include "code\modules\modular_computers\file_system\programs\wirecarp.dm"
#include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm"
#include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm"
#include "code\modules\modular_computers\hardware\_hardware.dm"
diff --git a/tgui/packages/tgui/interfaces/NtosNetMonitor.js b/tgui/packages/tgui/interfaces/NtosNetMonitor.js
index f0aaad2231a..eed9acef9f7 100644
--- a/tgui/packages/tgui/interfaces/NtosNetMonitor.js
+++ b/tgui/packages/tgui/interfaces/NtosNetMonitor.js
@@ -1,9 +1,10 @@
-import { useBackend } from '../backend';
-import { Box, Button, LabeledList, NoticeBox, NumberInput, Section } from '../components';
+import { useBackend, useSharedState } from '../backend';
+import { Box, Button, LabeledList, NoticeBox, NumberInput, Icon, Section, Stack, Tabs } from '../components';
import { NtosWindow } from '../layouts';
export const NtosNetMonitor = (props, context) => {
const { act, data } = useBackend(context);
+ const [tab_main, setTab_main] = useSharedState(context, 'tab_main', 1);
const {
ntnetrelays,
ntnetstatus,
@@ -17,131 +18,238 @@ export const NtosNetMonitor = (props, context) => {
maxlogs,
minlogs,
ntnetlogs = [],
+ tablets = [],
} = data;
return (
-
- WARNING: Disabling wireless transmitters when using
- a wireless device may prevent you from reenabling them!
-
- act('toggleWireless')} />
- )}>
- {ntnetrelays ? (
-
-
- {ntnetrelays}
-
-
- ) : "No Relays Connected"}
-
-
-
- act('toggle_function', { id: "1" })} />
- )} />
- act('toggle_function', { id: "2" })} />
- )} />
- act('toggle_function', { id: "3" })} />
- )} />
- act('toggle_function', { id: "4" })} />
- )} />
-
-
-
- {!!idsalarm && (
- <>
-
- NETWORK INCURSION DETECTED
-
-
- Abnormal activity has been detected in the network.
- Check system logs for more information
-
- >
- )}
-
-
-
- act('purgelogs')} />
- )}>
- {ntnetlogs.map(log => (
-
- {log.entry}
-
- ))}
-
-
+
+
+ setTab_main(1)}>
+ NtNet
+
+ setTab_main(2)}>
+ Tablets ({tablets.length})
+
+
+
+ {tab_main === 1 && (
+
+
+
+ )}
+ {tab_main === 2 && (
+
+
+
+ )}
);
};
+
+const MainPage = (props, context) => {
+ const {
+ ntnetrelays,
+ ntnetstatus,
+ config_softwaredownload,
+ config_peertopeer,
+ config_communication,
+ config_systemcontrol,
+ idsalarm,
+ idsstatus,
+ ntnetmaxlogs,
+ maxlogs,
+ minlogs,
+ ntnetlogs = [],
+ } = props;
+ const { act, data } = useBackend(context);
+ return (
+
+
+ WARNING: Disabling wireless transmitters when using
+ a wireless device may prevent you from reenabling them!
+
+ act('toggleWireless')} />
+ )}>
+ {ntnetrelays ? (
+
+
+ {ntnetrelays}
+
+
+ ) : "No Relays Connected"}
+
+
+
+ act('toggle_function', { id: "1" })} />
+ )} />
+ act('toggle_function', { id: "2" })} />
+ )} />
+ act('toggle_function', { id: "3" })} />
+ )} />
+ act('toggle_function', { id: "4" })} />
+ )} />
+
+
+
+ {!!idsalarm && (
+ <>
+
+ NETWORK INCURSION DETECTED
+
+
+ Abnormal activity has been detected in the network.
+ Check system logs for more information
+
+ >
+ )}
+
+
+ act('toggleIDS')} />
+ act('resetIDS')} />
+ >
+ )} />
+ act('updatemaxlogs', {
+ new_number: value,
+ })}
+ />
+ )} />
+
+ act('purgelogs')} />
+ )}>
+ {ntnetlogs.map(log => (
+
+ {log.entry}
+
+ ))}
+
+
+
+ );
+};
+
+const TabletPage = (props, context) => {
+ const { tablets } = props;
+ const { act, data } = useBackend(context);
+ if (!tablets.length) {
+ return (
+
+ No tablets detected.
+
+ );
+ }
+ return (
+
+
+
+
+
+
+
+ {tablets.map(tablet => (
+ act('toggle_mass_pda', {
+ ref: tablet.ref,
+ })}
+ />
+ )} />
+ ))}
+
+
+
+
+ );
+};