mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-29 16:10:02 +01:00
RnD Tech Processors (#12136)
This commit is contained in:
@@ -46,6 +46,11 @@
|
||||
req_tech = list(TECH_DATA = 3)
|
||||
build_path = /obj/item/circuitboard/rdserver
|
||||
|
||||
/datum/design/circuit/machine/rdtechprocessor
|
||||
name = "R&D Tech Processor"
|
||||
req_tech = list(TECH_DATA = 3)
|
||||
build_path = /obj/item/circuitboard/rdtechprocessor
|
||||
|
||||
/datum/design/circuit/machine/mechfab
|
||||
name = "Exosuit Fabricator"
|
||||
req_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
|
||||
@@ -96,20 +96,19 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
return
|
||||
|
||||
/obj/machinery/computer/rdconsole/proc/SyncTechs()
|
||||
if(src)
|
||||
for(var/obj/machinery/r_n_d/server/S in SSmachinery.all_machines)
|
||||
var/server_processed = 0
|
||||
if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom))
|
||||
for(var/tech_id in files.known_tech)
|
||||
var/datum/tech/T = files.known_tech[tech_id]
|
||||
S.files.AddTech2Known(T)
|
||||
S.files.RefreshResearch()
|
||||
server_processed = 1
|
||||
files.known_tech = S.files.known_tech.Copy()
|
||||
if(!istype(S, /obj/machinery/r_n_d/server/centcom) && server_processed)
|
||||
S.produce_heat()
|
||||
screen = 1.6
|
||||
updateUsrDialog()
|
||||
for(var/obj/machinery/r_n_d/server/S in SSmachinery.all_machines)
|
||||
var/server_processed = 0
|
||||
if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom))
|
||||
for(var/tech_id in files.known_tech)
|
||||
var/datum/tech/T = files.known_tech[tech_id]
|
||||
S.files.AddTech2Known(T)
|
||||
S.files.RefreshResearch()
|
||||
server_processed = 1
|
||||
files.known_tech = S.files.known_tech.Copy()
|
||||
if(!istype(S, /obj/machinery/r_n_d/server/centcom) && server_processed)
|
||||
S.produce_heat()
|
||||
screen = 1.6
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/rdconsole/proc/griefProtection() //Have it automatically push research to the centcomm server so wild griffins can't fuck up R&D's work
|
||||
for(var/obj/machinery/r_n_d/server/centcom/C in SSmachinery.all_machines)
|
||||
@@ -861,7 +860,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
|
||||
/obj/machinery/computer/rdconsole/robotics
|
||||
name = "robotics R&D console"
|
||||
id = 2
|
||||
id = 1
|
||||
req_access = list(access_robotics)
|
||||
allow_analyzer = FALSE
|
||||
allow_lathe = FALSE
|
||||
|
||||
@@ -150,10 +150,12 @@ var/global/list/designs_imprinter_categories = list()
|
||||
if(KT.level >= MAX_TECH_LEVEL)
|
||||
break
|
||||
if(KT.next_level_progress + progress >= KT.next_level_threshold)
|
||||
progress -= KT.next_level_threshold - KT.next_level_progress
|
||||
var/progress_left = KT.next_level_threshold - KT.next_level_progress
|
||||
KT.next_level_progress += progress_left
|
||||
KT.level++
|
||||
KT.level = clamp(KT.level, 0, MAX_TECH_LEVEL)
|
||||
KT.next_level_threshold = get_level_value(KT.level)
|
||||
progress -= progress_left
|
||||
continue
|
||||
KT.next_level_progress += progress
|
||||
break
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/machinery/r_n_d/server
|
||||
name = "R&D server"
|
||||
name = "\improper R&D server"
|
||||
desc = "A server which houses a back-up of all station research. It can be used to restore lost data, or to act as another point of retrieval."
|
||||
icon = 'icons/obj/machines/research.dmi'
|
||||
icon_state = "server"
|
||||
@@ -10,11 +10,13 @@
|
||||
var/id_with_upload_string = "" //String versions for easy editing in map editor.
|
||||
var/id_with_download_string = ""
|
||||
var/server_id = 0
|
||||
var/produces_heat = 1
|
||||
var/produces_heat = TRUE
|
||||
idle_power_usage = 800
|
||||
var/delay = 10
|
||||
req_access = list(access_rd) //Only the R&D can change server settings.
|
||||
|
||||
var/list/linked_processors
|
||||
|
||||
component_types = list(
|
||||
/obj/item/circuitboard/rdserver,
|
||||
/obj/item/stock_parts/scanning_module,
|
||||
@@ -22,6 +24,8 @@
|
||||
)
|
||||
|
||||
/obj/machinery/r_n_d/server/Destroy()
|
||||
for(var/obj/machinery/r_n_d/tech_processor/TP as anything in linked_processors)
|
||||
TP.set_server(null)
|
||||
griefProtection()
|
||||
return ..()
|
||||
|
||||
@@ -52,6 +56,9 @@
|
||||
id_with_download += text2num(N)
|
||||
|
||||
/obj/machinery/r_n_d/server/machinery_process()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
switch(environment.temperature)
|
||||
if(0 to T0C)
|
||||
@@ -73,6 +80,19 @@
|
||||
else
|
||||
produce_heat()
|
||||
delay = initial(delay)
|
||||
upgrade_techs()
|
||||
|
||||
/obj/machinery/r_n_d/server/proc/upgrade_techs()
|
||||
for(var/obj/machinery/r_n_d/tech_processor/TP as anything in linked_processors)
|
||||
if(TP.stat & (NOPOWER|BROKEN))
|
||||
continue
|
||||
TP.processing_stage++
|
||||
if(TP.processing_stage == 5)
|
||||
for(var/tech_id in files.known_tech)
|
||||
var/datum/tech/T = files.known_tech[tech_id]
|
||||
if(T.level)
|
||||
files.UpdateTech(T.id, round(TP.tech_rate))
|
||||
TP.processing_stage = 0
|
||||
|
||||
/obj/machinery/r_n_d/server/emp_act(severity)
|
||||
griefProtection()
|
||||
@@ -113,7 +133,15 @@
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
/obj/machinery/r_n_d/server/attackby(obj/item/O, mob/user)
|
||||
if(O.ismultitool())
|
||||
var/obj/item/device/multitool/MT = O
|
||||
var/obj/machinery/r_n_d/tech_processor/TP = MT.get_buffer(/obj/machinery/r_n_d/tech_processor)
|
||||
if(TP)
|
||||
TP.set_server(src)
|
||||
MT.unregister_buffer(TP)
|
||||
to_chat(user, SPAN_NOTICE("You link \the [TP] to \the [src]."))
|
||||
return
|
||||
if(default_deconstruction_screwdriver(user, O))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, O))
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
/obj/machinery/r_n_d/tech_processor
|
||||
name = "\improper R&D tech processor"
|
||||
desc = "A highly advanced analytical computation engine, when connected to an R&D server with a multitool, it will start processing known technology and add research points to it."
|
||||
icon_state = "tech_processor"
|
||||
|
||||
component_types = list(
|
||||
/obj/item/circuitboard/rdtechprocessor,
|
||||
/obj/item/stock_parts/scanning_module = 2,
|
||||
/obj/item/stack/cable_coil = 2
|
||||
)
|
||||
|
||||
idle_power_usage = 800
|
||||
|
||||
var/tech_rate = 0
|
||||
var/obj/machinery/r_n_d/server/linked_server
|
||||
|
||||
var/processing_stage = 0
|
||||
|
||||
var/heat_delay = 10
|
||||
|
||||
/obj/machinery/r_n_d/tech_processor/Destroy()
|
||||
set_server(null)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/r_n_d/tech_processor/RefreshParts()
|
||||
tech_rate = 0
|
||||
for(var/obj/item/stock_parts/scanning_module/SM in component_parts)
|
||||
tech_rate += SM.rating / 2
|
||||
idle_power_usage = initial(idle_power_usage) * tech_rate // lots of power
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/r_n_d/tech_processor/machinery_process()
|
||||
heat_delay--
|
||||
if(!heat_delay)
|
||||
produce_heat()
|
||||
heat_delay = initial(heat_delay)
|
||||
|
||||
/obj/machinery/r_n_d/tech_processor/attackby(obj/item/W, mob/user)
|
||||
if(W.ismultitool())
|
||||
var/obj/item/device/multitool/MT = W
|
||||
MT.set_buffer(src)
|
||||
to_chat(user, SPAN_NOTICE("You attach \the [src]'s linking node to \the [MT]'s machinery buffer."))
|
||||
return
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, W))
|
||||
return
|
||||
if(default_part_replacement(user, W))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/r_n_d/tech_processor/proc/set_server(var/obj/machinery/r_n_d/server/S)
|
||||
if(linked_server)
|
||||
LAZYREMOVE(linked_server.linked_processors, src)
|
||||
linked_server = S
|
||||
if(linked_server)
|
||||
LAZYADD(linked_server.linked_processors, src)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/r_n_d/tech_processor/proc/produce_heat()
|
||||
if(!(stat & (NOPOWER|BROKEN)))
|
||||
var/turf/simulated/L = loc
|
||||
if(istype(L))
|
||||
var/datum/gas_mixture/env = L.return_air()
|
||||
var/transfer_moles = 0.25 * env.total_moles
|
||||
var/datum/gas_mixture/removed = env.remove(transfer_moles)
|
||||
if(removed)
|
||||
var/heat_produced = idle_power_usage //obviously can't produce more heat than the machine draws from it's power source
|
||||
removed.add_thermal_energy(heat_produced)
|
||||
env.merge(removed)
|
||||
|
||||
/obj/machinery/r_n_d/tech_processor/power_change()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/r_n_d/tech_processor/update_icon()
|
||||
cut_overlays()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
icon_state = "[initial(icon_state)]_off"
|
||||
else if(!linked_server)
|
||||
icon_state = "[initial(icon_state)]_unlinked"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
if(panel_open)
|
||||
add_overlay("[initial(icon_state)]_open")
|
||||
Reference in New Issue
Block a user