[MIRROR] [READY] RND TECHWEBS + DEPARTMENTAL LATHES (#4014)

* [READY] RND TECHWEBS + DEPARTMENTAL LATHES

* resetting all the maps because we can worry about them later.

* Regexing

* I'm fucked

* Fixes

* .

* maps

* bleh

* ree

* fixes
This commit is contained in:
CitadelStationBot
2017-12-11 18:36:38 -06:00
committed by kevinz000
parent b5600cb91c
commit cc0b768c72
332 changed files with 4962 additions and 4331 deletions
+41 -201
View File
@@ -1,99 +1,65 @@
/obj/machinery/r_n_d/server
/obj/machinery/rnd/server
name = "\improper R&D Server"
desc = "A computer system running a deep neural network that processes arbitrary information to produce data useable in the development of new technologies. In layman's terms, it makes research points."
icon = 'icons/obj/machines/research.dmi'
icon_state = "server"
var/datum/research/files
var/datum/techweb/stored_research
var/heat_health = 100
var/list/id_with_upload = list() //List of R&D consoles with upload to server access.
var/list/id_with_download = list() //List of R&D consoles with download from server access.
var/id_with_upload_string = "" //String versions for easy editing in map editor.
var/id_with_download_string = ""
//Code for point mining here.
var/working = TRUE //temperature should break it.
var/server_id = 0
var/base_mining_income = 2
var/heat_gen = 100
var/heating_power = 40000
var/delay = 10
var/delay = 5
var/temp_tolerance_low = 0
var/temp_tolerance_high = T20C
var/temp_penalty_coefficient = 0.5 //1 = -1 points per degree above high tolerance. 0.5 = -0.5 points per degree above high tolerance.
req_access = list(ACCESS_RD) //ONLY THE R&D CAN CHANGE SERVER SETTINGS.
/obj/machinery/r_n_d/server/Initialize()
/obj/machinery/rnd/server/Initialize()
. = ..()
SSresearch.servers |= src
stored_research = SSresearch.science_tech
var/obj/item/circuitboard/machine/B = new /obj/item/circuitboard/machine/rdserver(null)
B.apply_default_parts(src)
/obj/machinery/r_n_d/server/Destroy()
griefProtection()
/obj/machinery/rnd/server/Destroy()
SSresearch.servers -= src
return ..()
/obj/machinery/r_n_d/server/RefreshParts()
/obj/machinery/rnd/server/RefreshParts()
var/tot_rating = 0
for(var/obj/item/stock_parts/SP in src)
tot_rating += SP.rating
heat_gen /= max(1, tot_rating)
/obj/machinery/r_n_d/server/Initialize(mapload)
. = ..()
if(!files)
files = new /datum/research(src)
var/list/temp_list
if(!id_with_upload.len)
temp_list = list()
temp_list = splittext(id_with_upload_string, ";")
for(var/N in temp_list)
id_with_upload += text2num(N)
if(!id_with_download.len)
temp_list = list()
temp_list = splittext(id_with_download_string, ";")
for(var/N in temp_list)
id_with_download += text2num(N)
/obj/machinery/r_n_d/server/process()
var/datum/gas_mixture/environment = loc.return_air()
switch(environment.temperature)
if(0 to T0C)
heat_health = min(100, heat_health + 1)
if(T0C to (T20C + 20))
heat_health = Clamp(heat_health, 0, 100)
if((T20C + 20) to (T0C + 70))
heat_health = max(0, heat_health - 1)
if(heat_health <= 0)
/*griefProtection() This seems to get called twice before running any code that deletes/damages the server or it's files anwyay.
refreshParts and the hasReq procs that get called by this are laggy and do not need to be called by every server on the map every tick */
var/updateRD = 0
files.known_designs = list()
for(var/v in files.known_tech)
var/datum/tech/T = files.known_tech[v]
if(prob(1))
updateRD++
T.level--
if(updateRD)
files.RefreshResearch()
if(delay)
delay--
/obj/machinery/rnd/server/proc/refresh_working()
if(stat & EMPED)
working = FALSE
else
produce_heat(heat_gen)
delay = initial(delay)
working = TRUE
/obj/machinery/rnd/server/emp_act()
stat |= EMPED
addtimer(CALLBACK(src, .proc/unemp), 600)
refresh_working()
return ..()
/obj/machinery/r_n_d/server/emp_act(severity)
griefProtection()
..()
/obj/machinery/rnd/server/proc/unemp()
stat &= ~EMPED
refresh_working()
/obj/machinery/r_n_d/server/ex_act(severity, target)
griefProtection()
..()
/obj/machinery/rnd/server/proc/mine()
. = base_mining_income
var/penalty = max((get_env_temp() - temp_tolerance_low), 0) / temp_penalty_coefficient
. = max(. - penalty, 0)
//Backup files to centcom to help admins recover data after greifer attacks
/obj/machinery/r_n_d/server/proc/griefProtection()
for(var/obj/machinery/r_n_d/server/centcom/C in GLOB.machines)
for(var/v in files.known_tech)
var/datum/tech/T = files.known_tech[v]
C.files.AddTech2Known(T)
for(var/v in files.known_designs)
var/datum/design/D = files.known_designs[v]
C.files.AddDesign2Known(D)
C.files.RefreshResearch()
/obj/machinery/rnd/server/proc/get_env_temp()
var/datum/gas_mixture/environment = loc.return_air()
return environment.temperature
/obj/machinery/r_n_d/server/proc/produce_heat(heat_amt)
/obj/machinery/rnd/server/proc/produce_heat(heat_amt)
if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater.
var/turf/L = loc
if(istype(L))
@@ -114,30 +80,17 @@
env.merge(removed)
air_update_turf()
//called when the server is deconstructed.
/obj/machinery/r_n_d/server/on_deconstruction()
griefProtection()
..()
/obj/machinery/r_n_d/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves.
/obj/machinery/rnd/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves.
if (disabled)
return
if (shocked)
shock(user,50)
return
/obj/machinery/r_n_d/server/centcom
name = "CentCom Central R&D Database"
server_id = -1
/obj/machinery/r_n_d/server/centcom/Initialize()
. = ..()
fix_noid_research_servers()
/proc/fix_noid_research_servers()
var/list/no_id_servers = list()
var/list/server_ids = list()
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
for(var/obj/machinery/rnd/server/S in GLOB.machines)
switch(S.server_id)
if(-1)
continue
@@ -146,7 +99,7 @@
else
server_ids += S.server_id
for(var/obj/machinery/r_n_d/server/S in no_id_servers)
for(var/obj/machinery/rnd/server/S in no_id_servers)
var/num = 1
while(!S.server_id)
if(num in server_ids)
@@ -156,9 +109,6 @@
server_ids += num
no_id_servers -= S
/obj/machinery/r_n_d/server/centcom/process()
return PROCESS_KILL //don't need process()
/obj/machinery/computer/rdservercontrol
name = "R&D Server Controller"
@@ -166,7 +116,7 @@
icon_screen = "rdcomp"
icon_keyboard = "rd_key"
var/screen = 0
var/obj/machinery/r_n_d/server/temp_server
var/obj/machinery/rnd/server/temp_server
var/list/servers = list()
var/list/consoles = list()
var/badmin = 0
@@ -185,58 +135,6 @@
if(href_list["main"])
screen = 0
else if(href_list["access"] || href_list["data"] || href_list["transfer"])
temp_server = null
consoles = list()
servers = list()
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
if(S.server_id == text2num(href_list["access"]) || S.server_id == text2num(href_list["data"]) || S.server_id == text2num(href_list["transfer"]))
temp_server = S
break
if(href_list["access"])
screen = 1
for(var/obj/machinery/computer/rdconsole/C in GLOB.machines)
if(C.sync)
consoles += C
else if(href_list["data"])
screen = 2
else if(href_list["transfer"])
screen = 3
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
if(S == src)
continue
servers += S
else if(href_list["upload_toggle"])
var/num = text2num(href_list["upload_toggle"])
if(num in temp_server.id_with_upload)
temp_server.id_with_upload -= num
else
temp_server.id_with_upload += num
else if(href_list["download_toggle"])
var/num = text2num(href_list["download_toggle"])
if(num in temp_server.id_with_download)
temp_server.id_with_download -= num
else
temp_server.id_with_download += num
else if(href_list["reset_tech"])
var/choice = alert("Technology Data Reset", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel")
if(choice == "Continue" && usr.canUseTopic(src))
var/datum/tech/T = temp_server.files.known_tech[href_list["reset_tech"]]
if(T)
T.level = 1
temp_server.files.RefreshResearch()
else if(href_list["reset_design"])
var/choice = alert("Design Data Deletion", "Are you sure you want to delete this design? Data lost cannot be recovered.", "Continue", "Cancel")
if(choice == "Continue" && usr.canUseTopic(src))
var/datum/design/D = temp_server.files.known_designs[href_list["reset_design"]]
if(D)
temp_server.files.known_designs -= D.id
temp_server.files.RefreshResearch()
updateUsrDialog()
return
@@ -250,58 +148,12 @@
if(0) //Main Menu
dat += "Connected Servers:<BR><BR>"
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin)
continue
for(var/obj/machinery/rnd/server/S in GLOB.machines)
dat += "[S.name] || "
dat += "<A href='?src=[REF(src)];access=[S.server_id]'>Access Rights</A> | "
dat += "<A href='?src=[REF(src)];data=[S.server_id]'>Data Management</A>"
if(badmin)
dat += " | <A href='?src=[REF(src)];transfer=[S.server_id]'>Server-to-Server Transfer</A>"
dat += "<BR>"
if(1) //Access rights menu
dat += "[temp_server.name] Access Rights<BR><BR>"
dat += "Consoles with Upload Access<BR>"
for(var/obj/machinery/computer/rdconsole/C in consoles)
var/turf/console_turf = get_turf(C)
dat += "* <A href='?src=[REF(src)];upload_toggle=[C.id]'>[console_turf.loc]" //FYI, these are all numeric ids, eventually.
if(C.id in temp_server.id_with_upload)
dat += " (Remove)</A><BR>"
else
dat += " (Add)</A><BR>"
dat += "Consoles with Download Access<BR>"
for(var/obj/machinery/computer/rdconsole/C in consoles)
var/turf/console_turf = get_turf(C)
dat += "* <A href='?src=[REF(src)];download_toggle=[C.id]'>[console_turf.loc]"
if(C.id in temp_server.id_with_download)
dat += " (Remove)</A><BR>"
else
dat += " (Add)</A><BR>"
dat += "<HR><A href='?src=[REF(src)];main=1'>Main Menu</A>"
//Mining status here
if(2) //Data Management menu
dat += "[temp_server.name] Data ManagementP<BR><BR>"
dat += "Known Technologies<BR>"
for(var/v in temp_server.files.known_tech)
var/datum/tech/T = temp_server.files.known_tech[v]
if(T.level <= 0)
continue
dat += "* [T.name] "
dat += "<A href='?src=[REF(src)];reset_tech=[T.id]'>(Reset)</A><BR>" //FYI, these are all strings.
dat += "Known Designs<BR>"
for(var/v in temp_server.files.known_designs)
var/datum/design/D = temp_server.files.known_designs[v]
dat += "* [D.name] "
dat += "<A href='?src=[REF(src)];reset_design=[D.id]'>(Delete)</A><BR>"
dat += "<HR><A href='?src=[REF(src)];main=1'>Main Menu</A>"
if(3) //Server Data Transfer
dat += "[temp_server.name] Server to Server Transfer<BR><BR>"
dat += "Send Data to what server?<BR>"
for(var/obj/machinery/r_n_d/server/S in servers)
dat += "[S.name] <A href='?src=[REF(src)];send_to=[S.server_id]'>(Transfer)</A><BR>"
dat += "<HR><A href='?src=[REF(src)];main=1'>Main Menu</A>"
user << browse("<TITLE>R&D Server Control</TITLE><HR>[dat]", "window=server_control;size=575x400")
onclose(user, "server_control")
return
@@ -317,15 +169,3 @@
emagged = TRUE
to_chat(user, "<span class='notice'>You you disable the security protocols.</span>")
/obj/machinery/r_n_d/server/robotics
name = "Robotics R&D Server"
id_with_upload_string = "1;2"
id_with_download_string = "1;2"
server_id = 2
/obj/machinery/r_n_d/server/core
name = "Core R&D Server"
id_with_upload_string = "1"
id_with_download_string = "1"
server_id = 1