mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-03 13:32:17 +00:00
## 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 🆑 refactor: Modular computers NTnet and applications run on its own subsystem, please report any new bugs you may find. /🆑
201 lines
6.5 KiB
Plaintext
201 lines
6.5 KiB
Plaintext
/datum/computer_file/program/ntnetdownload
|
|
filename = "ntsoftwarehub"
|
|
filedesc = "NT Software Hub"
|
|
program_icon_state = "generic"
|
|
extended_desc = "This program allows downloads of software from official NT repositories"
|
|
undeletable = TRUE
|
|
size = 4
|
|
requires_ntnet = TRUE
|
|
requires_ntnet_feature = NTNET_SOFTWAREDOWNLOAD
|
|
available_on_ntnet = FALSE
|
|
ui_header = "downloader_finished.gif"
|
|
tgui_id = "NtosNetDownloader"
|
|
program_icon = "download"
|
|
|
|
var/datum/computer_file/program/downloaded_file = null
|
|
var/hacked_download = FALSE
|
|
var/download_completion = FALSE //GQ of downloaded data.
|
|
var/download_netspeed = 0
|
|
var/downloaderror = ""
|
|
var/emagged = FALSE
|
|
var/list/main_repo
|
|
var/list/antag_repo
|
|
|
|
var/list/show_categories = list(
|
|
PROGRAM_CATEGORY_CREW,
|
|
PROGRAM_CATEGORY_ENGI,
|
|
PROGRAM_CATEGORY_SCI,
|
|
PROGRAM_CATEGORY_SUPL,
|
|
PROGRAM_CATEGORY_MISC,
|
|
)
|
|
|
|
/datum/computer_file/program/ntnetdownload/on_start()
|
|
. = ..()
|
|
main_repo = SSmodular_computers.available_station_software
|
|
antag_repo = SSmodular_computers.available_antag_software
|
|
|
|
/datum/computer_file/program/ntnetdownload/run_emag()
|
|
if(emagged)
|
|
return FALSE
|
|
emagged = TRUE
|
|
return TRUE
|
|
|
|
|
|
/datum/computer_file/program/ntnetdownload/proc/begin_file_download(filename)
|
|
if(downloaded_file)
|
|
return FALSE
|
|
|
|
var/datum/computer_file/program/PRG = SSmodular_computers.find_ntnet_file_by_name(filename)
|
|
|
|
if(!PRG || !istype(PRG))
|
|
return FALSE
|
|
|
|
// Attempting to download antag only program, but without having emagged/syndicate computer. No.
|
|
if(PRG.available_on_syndinet && !emagged)
|
|
return FALSE
|
|
|
|
if(!computer || !computer.can_store_file(PRG))
|
|
return FALSE
|
|
|
|
ui_header = "downloader_running.gif"
|
|
|
|
if(PRG in main_repo)
|
|
generate_network_log("Began downloading file [PRG.filename].[PRG.filetype] from NTNet Software Repository.")
|
|
hacked_download = FALSE
|
|
else if(PRG in antag_repo)
|
|
generate_network_log("Began downloading file **ENCRYPTED**.[PRG.filetype] from unspecified server.")
|
|
hacked_download = TRUE
|
|
else
|
|
generate_network_log("Began downloading file [PRG.filename].[PRG.filetype] from unspecified server.")
|
|
hacked_download = FALSE
|
|
|
|
downloaded_file = PRG.clone()
|
|
|
|
/datum/computer_file/program/ntnetdownload/proc/abort_file_download()
|
|
if(!downloaded_file)
|
|
return
|
|
generate_network_log("Aborted download of file [hacked_download ? "**ENCRYPTED**" : "[downloaded_file.filename].[downloaded_file.filetype]"].")
|
|
downloaded_file = null
|
|
download_completion = FALSE
|
|
ui_header = "downloader_finished.gif"
|
|
|
|
/datum/computer_file/program/ntnetdownload/proc/complete_file_download()
|
|
if(!downloaded_file)
|
|
return
|
|
generate_network_log("Completed download of file [hacked_download ? "**ENCRYPTED**" : "[downloaded_file.filename].[downloaded_file.filetype]"].")
|
|
if(!computer || !computer.store_file(downloaded_file))
|
|
// The download failed
|
|
downloaderror = "I/O ERROR - Unable to save file. Check whether you have enough free space on your hard drive and whether your hard drive is properly connected. If the issue persists contact your system administrator for assistance."
|
|
downloaded_file = null
|
|
download_completion = FALSE
|
|
ui_header = "downloader_finished.gif"
|
|
|
|
/datum/computer_file/program/ntnetdownload/process_tick(delta_time)
|
|
if(!downloaded_file)
|
|
return
|
|
if(download_completion >= downloaded_file.size)
|
|
complete_file_download()
|
|
// Download speed according to connectivity state. NTNet server is assumed to be on unlimited speed so we're limited by our local connectivity
|
|
download_netspeed = 0
|
|
// Speed defines are found in misc.dm
|
|
switch(ntnet_status)
|
|
if(1)
|
|
download_netspeed = NTNETSPEED_LOWSIGNAL
|
|
if(2)
|
|
download_netspeed = NTNETSPEED_HIGHSIGNAL
|
|
if(3)
|
|
download_netspeed = NTNETSPEED_ETHERNET
|
|
download_completion += download_netspeed
|
|
|
|
/datum/computer_file/program/ntnetdownload/ui_act(action, params)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
switch(action)
|
|
if("PRG_downloadfile")
|
|
if(!downloaded_file)
|
|
begin_file_download(params["filename"])
|
|
return TRUE
|
|
if("PRG_reseterror")
|
|
if(downloaderror)
|
|
download_completion = FALSE
|
|
download_netspeed = FALSE
|
|
downloaded_file = null
|
|
downloaderror = ""
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/computer_file/program/ntnetdownload/ui_data(mob/user)
|
|
var/list/data = get_header_data()
|
|
var/list/access = computer.GetAccess()
|
|
|
|
data["downloading"] = !!downloaded_file
|
|
data["error"] = downloaderror || FALSE
|
|
|
|
// Download running. Wait please..
|
|
if(downloaded_file)
|
|
data["downloadname"] = downloaded_file.filename
|
|
data["downloaddesc"] = downloaded_file.filedesc
|
|
data["downloadsize"] = downloaded_file.size
|
|
data["downloadspeed"] = download_netspeed
|
|
data["downloadcompletion"] = round(download_completion, 0.1)
|
|
|
|
data["disk_size"] = computer.max_capacity
|
|
data["disk_used"] = computer.used_capacity
|
|
data["emagged"] = emagged
|
|
|
|
var/list/repo = antag_repo | main_repo
|
|
var/list/program_categories = list()
|
|
|
|
for(var/datum/computer_file/program/programs as anything in repo)
|
|
if(!(programs.category in program_categories))
|
|
program_categories.Add(programs.category)
|
|
data["programs"] += list(list(
|
|
"icon" = programs.program_icon,
|
|
"filename" = programs.filename,
|
|
"filedesc" = programs.filedesc,
|
|
"fileinfo" = programs.extended_desc,
|
|
"category" = programs.category,
|
|
"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 = TRUE, access = access),
|
|
"verifiedsource" = programs.available_on_ntnet,
|
|
))
|
|
|
|
data["categories"] = show_categories & program_categories
|
|
|
|
return data
|
|
|
|
/datum/computer_file/program/ntnetdownload/proc/check_compatibility(datum/computer_file/program/P)
|
|
var/hardflag = computer.hardware_flag
|
|
|
|
if(P?.is_supported_by_hardware(hardware_flag = hardflag, loud = FALSE))
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/computer_file/program/ntnetdownload/kill_program(forced)
|
|
abort_file_download()
|
|
return ..()
|
|
|
|
////////////////////////
|
|
//Syndicate Downloader//
|
|
////////////////////////
|
|
|
|
/// This app only lists programs normally found in the emagged section of the normal downloader app
|
|
|
|
/datum/computer_file/program/ntnetdownload/syndicate
|
|
filename = "syndownloader"
|
|
filedesc = "Software Download Tool"
|
|
program_icon_state = "generic"
|
|
extended_desc = "This program allows downloads of software from shared Syndicate repositories"
|
|
requires_ntnet = FALSE
|
|
ui_header = "downloader_finished.gif"
|
|
tgui_id = "NtosNetDownloader"
|
|
emagged = TRUE
|
|
|
|
/datum/computer_file/program/ntnetdownload/syndicate/on_start()
|
|
. = ..()
|
|
main_repo = SSmodular_computers.available_antag_software
|
|
antag_repo = null
|