mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-25 01:22:13 +00:00
- Adds NTNet relay chat, communication method that works as alternative to PDA messaging. - NTNRC client is available to everyone for download. Once started, you can set your username (much as you can with IRC in real) and join channels created by other users (or create your own channel) - Each channel has an operator. This is typically the channel's creator. If the operator leaves, operator status is transferred to randomly picked other user. If all users leave operator status is set as null until someone arrives again. - Operator can delete or rename the channel, as well as save copy of chat logs to the hard drive (in future it will be editable/printable) and set channel password. Password-locked channels are private only for those who know the password. - Added new access type (ID 42): access_network. RD is now, by default, given this access. - People with network access can enter administrative mode, which allows them to make operator actions even without operator status on all channels. Furthermore, this hides them from other users (unless they decide to talk). They also bypass password locks, if they are set. - Minor tweaks to NTNet monitoring tool. Fixed one minor graphical glitch in the UI and added access requirement to run the program (network access) - Screenshot of NTNRC in action: http://i.imgur.com/c7hrWY5.png
149 lines
5.7 KiB
Plaintext
149 lines
5.7 KiB
Plaintext
var/global/datum/ntnet/ntnet_global = new()
|
|
|
|
|
|
// This is the NTNet datum. There can be only one NTNet datum in game at once. Modular computers read data from this.
|
|
/datum/ntnet/
|
|
var/list/relays = list()
|
|
var/list/logs = list()
|
|
var/list/available_station_software = list()
|
|
var/list/available_antag_software = list()
|
|
var/list/chat_channels = list()
|
|
|
|
// 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.
|
|
var/setting_maxlogcount = 100
|
|
|
|
// 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 = 1
|
|
var/setting_peertopeer = 1
|
|
var/setting_communication = 1
|
|
var/setting_systemcontrol = 1
|
|
var/setting_disabled = 0 // Setting to 1 will disable all wireless, independently on relays status.
|
|
|
|
var/intrusion_detection_enabled = 1 // Whether the IDS warning system is enabled
|
|
var/intrusion_detection_alarm = 0 // Set when there is an IDS warning due to malicious (antag) software. Currently only for monitor UI testing, things that would set it are not coded yet
|
|
|
|
|
|
// If new NTNet datum is spawned, it replaces the old one.
|
|
/datum/ntnet/New()
|
|
if(ntnet_global && (ntnet_global != src))
|
|
ntnet_global = src // There can be only one.
|
|
for(var/obj/machinery/ntnet_relay/R in machines)
|
|
relays.Add(R)
|
|
R.NTNet = src
|
|
build_software_lists()
|
|
add_log("NTNet logging system activated.")
|
|
|
|
// Simplified logging: Adds a log. log_string is mandatory parameter, source is optional.
|
|
/datum/ntnet/proc/add_log(var/log_string, var/datum/computer_hardware/network_card/source = null)
|
|
var/log_text = "[worldtime2text()] - "
|
|
if(source)
|
|
log_text += "[source.get_network_tag()] - "
|
|
else
|
|
log_text += "*SYSTEM* - "
|
|
log_text += log_string
|
|
logs.Add(log_text)
|
|
|
|
if(logs.len > setting_maxlogcount)
|
|
// We have too many logs, remove the oldest entries until we get into the limit
|
|
for(var/L in logs)
|
|
if(logs.len > setting_maxlogcount)
|
|
logs.Remove(L)
|
|
else
|
|
break
|
|
|
|
// Checks whether NTNet operates. If parameter is passed checks whether specific function is enabled.
|
|
/datum/ntnet/proc/check_function(var/specific_action = 0)
|
|
if(!relays || !relays.len) // No relays found. NTNet is down
|
|
return 0
|
|
|
|
var/operating = 0
|
|
|
|
// Check all relays. If we have at least one working relay, network is up.
|
|
for(var/obj/machinery/ntnet_relay/R in relays)
|
|
if(R.is_operational())
|
|
operating = 1
|
|
break
|
|
|
|
if(setting_disabled)
|
|
return 0
|
|
|
|
if(specific_action == NTNET_SOFTWAREDOWNLOAD)
|
|
return (operating && setting_softwaredownload)
|
|
if(specific_action == NTNET_PEERTOPEER)
|
|
return (operating && setting_peertopeer)
|
|
if(specific_action == NTNET_COMMUNICATION)
|
|
return (operating && setting_communication)
|
|
if(specific_action == NTNET_SYSTEMCONTROL)
|
|
return (operating && setting_systemcontrol)
|
|
return operating
|
|
|
|
// Builds lists that contain downloadable software.
|
|
/datum/ntnet/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 || !istype(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/proc/find_ntnet_file_by_name(var/filename)
|
|
for(var/datum/computer_file/program/P in available_station_software)
|
|
if(filename == P.filename)
|
|
return P
|
|
for(var/datum/computer_file/program/P in available_antag_software)
|
|
if(filename == P.filename)
|
|
return P
|
|
|
|
// Resets the IDS alarm
|
|
/datum/ntnet/proc/resetIDS()
|
|
intrusion_detection_alarm = 0
|
|
|
|
/datum/ntnet/proc/toggleIDS()
|
|
resetIDS()
|
|
intrusion_detection_enabled = !intrusion_detection_enabled
|
|
|
|
// Removes all logs
|
|
/datum/ntnet/proc/purge_logs()
|
|
logs = list()
|
|
add_log("-!- LOGS DELETED BY SYSTEM OPERATOR -!-")
|
|
|
|
// Updates maximal amount of stored logs. Use this instead of setting the number, it performs required checks.
|
|
/datum/ntnet/proc/update_max_log_count(var/lognumber)
|
|
if(!lognumber)
|
|
return 0
|
|
// Trim the value if necessary
|
|
lognumber = between(MIN_NTNET_LOGS, lognumber, MAX_NTNET_LOGS)
|
|
setting_maxlogcount = lognumber
|
|
add_log("Configuration Updated. Now keeping [setting_maxlogcount] logs in system memory.")
|
|
|
|
/datum/ntnet/proc/toggle_function(var/function)
|
|
if(!function)
|
|
return
|
|
function = text2num(function)
|
|
switch(function)
|
|
if(NTNET_SOFTWAREDOWNLOAD)
|
|
setting_softwaredownload = !setting_softwaredownload
|
|
add_log("Configuration Updated. Wireless network firewall now [setting_softwaredownload ? "allows" : "disallows"] connection to software repositories.")
|
|
if(NTNET_PEERTOPEER)
|
|
setting_peertopeer = !setting_peertopeer
|
|
add_log("Configuration Updated. Wireless network firewall now [setting_peertopeer ? "allows" : "disallows"] peer to peer network traffic.")
|
|
if(NTNET_COMMUNICATION)
|
|
setting_communication = !setting_communication
|
|
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
|
|
add_log("Configuration Updated. Wireless network firewall now [setting_systemcontrol ? "allows" : "disallows"] remote control of station's systems.")
|
|
|
|
|
|
|
|
|
|
|