diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 3fda820c314..735dd1cdc57 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -7,15 +7,17 @@ SUBSYSTEM_DEF(research) //TECHWEB STATIC var/list/techweb_nodes = list() //associative id = node datum var/list/techweb_designs = list() //associative id = node datum + + ///List of all techwebs. var/list/datum/techweb/techwebs = list() + ///The default Science Techweb. var/datum/techweb/science/science_tech + ///The default Admin Techweb. var/datum/techweb/admin/admin_tech + var/datum/techweb_node/error_node/error_node //These two are what you get if a node/design is deleted and somehow still stored in a console. var/datum/design/error_design/error_design - ///List of all research servers. - var/list/obj/machinery/rnd/server/servers = list() - //ERROR LOGGING ///associative id = number of times var/list/invalid_design_ids = list() @@ -42,14 +44,8 @@ SUBSYSTEM_DEF(research) var/list/point_types = list() //typecache style type = TRUE list //---------------------------------------------- var/list/single_server_income = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_SINGLE_SERVER_INCOME) - var/last_income //^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^ - /// A list of all master servers. If none of these have a source code HDD, research point generation is lowered. - var/list/obj/machinery/rnd/server/master/master_servers = list() - /// A multiplier applied to all research gain. - var/income_modifier = 1 - //Aiming for 1.5 hours to max R&D //[88nodes * 5000points/node] / [1.5hr * 90min/hr * 60s/min] //Around 450000 points max??? @@ -86,28 +82,23 @@ SUBSYSTEM_DEF(research) return SS_INIT_SUCCESS /datum/controller/subsystem/research/fire() - var/list/bitcoins = list() - for(var/obj/machinery/rnd/server/miner as anything in servers) - if(miner.working) - bitcoins = single_server_income.Copy() - break //Just need one to work. + for(var/datum/techweb/techweb_list as anything in techwebs) + if(!techweb_list.should_generate_points) + continue + var/list/bitcoins = list() + for(var/obj/machinery/rnd/server/miner as anything in techweb_list.techweb_servers) + if(miner.working) + bitcoins = single_server_income.Copy() + break //Just need one to work. - if (!isnull(last_income)) - var/income_time_difference = world.time - last_income - science_tech.last_bitcoins = bitcoins // Doesn't take tick drift into account - for(var/i in bitcoins) - bitcoins[i] *= (income_time_difference / 10) * income_modifier - science_tech.add_point_list(bitcoins) + if(!isnull(techweb_list.last_income)) + var/income_time_difference = world.time - techweb_list.last_income + techweb_list.last_bitcoins = bitcoins // Doesn't take tick drift into account + for(var/i in bitcoins) + bitcoins[i] *= (income_time_difference / 10) * techweb_list.income_modifier + techweb_list.add_point_list(bitcoins) - last_income = world.time - -/datum/controller/subsystem/research/proc/calculate_server_coefficient() //Diminishing returns. - var/amt = servers.len - if(!amt) - return 0 - var/coeff = 100 - coeff = sqrt(coeff / amt) - return coeff + techweb_list.last_income = world.time /datum/controller/subsystem/research/proc/autosort_categories() for(var/i in techweb_nodes) diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm index be897397723..9bc7f6bbdb4 100644 --- a/code/modules/antagonists/pirate/pirate_event.dm +++ b/code/modules/antagonists/pirate/pirate_event.dm @@ -144,11 +144,9 @@ //interrupt_research /obj/machinery/shuttle_scrambler/proc/interrupt_research() - for(var/obj/machinery/rnd/server/S as anything in SSresearch.servers) + for(var/obj/machinery/rnd/server/S as anything in SSresearch.science_tech.techweb_servers) if(S.machine_stat & (NOPOWER|BROKEN)) continue - if(S.stored_research != SSresearch.science_tech) //only target the station - continue S.emp_act() new /obj/effect/temp_visual/emp(get_turf(S)) diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm index 95c81fbdcd0..29a83d50333 100644 --- a/code/modules/experisci/experiment/handlers/experiment_handler.dm +++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm @@ -301,12 +301,13 @@ if (!turf_source) turf_source = get_turf(parent) var/list/local_servers = list() - for (var/obj/machinery/rnd/server/server as anything in SSresearch.servers) - var/turf/turf_server = get_turf(server) - if (!turf_source || !turf_server) - break - if(is_valid_z_level(turf_source, turf_server)) - local_servers += server + for (var/datum/techweb/techwebs as anything in SSresearch.techwebs) + for (var/obj/machinery/rnd/server/server as anything in techwebs.techweb_servers) + var/turf/turf_server = get_turf(server) + if (!turf_source || !turf_server) + break + if(is_valid_z_level(turf_source, turf_server)) + local_servers += server return local_servers /** diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 4ddb7e929d2..bdf1a201acc 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -29,7 +29,6 @@ . = ..() if(CONFIG_GET(flag/no_default_techweb_link)) stored_research = new /datum/techweb - SSresearch.servers |= src stored_research.techweb_servers |= src name += " [num2hex(rand(1,65535), -1)]" //gives us a random four-digit hex number as part of the name. Y'know, for fluff. @@ -38,7 +37,6 @@ stored_research.techweb_servers -= src if(CONFIG_GET(flag/no_default_techweb_link)) QDEL_NULL(stored_research) - SSresearch.servers -= src return ..() /obj/machinery/rnd/server/update_icon_state() @@ -131,7 +129,7 @@ add_fingerprint(usr) if (href_list["toggle"]) if(allowed(usr) || obj_flags & EMAGGED) - var/obj/machinery/rnd/server/S = locate(href_list["toggle"]) in SSresearch.servers + var/obj/machinery/rnd/server/S = locate(href_list["toggle"]) in stored_research.techweb_servers S.toggle_disable(usr) else to_chat(usr, span_danger("Access Denied.")) @@ -145,9 +143,7 @@ dat += "Connected Servers:" dat += "
| Server | Status | Control | " - for(var/obj/machinery/rnd/server/server as anything in SSresearch.servers) - if(server.stored_research != stored_research) //not on our servers - continue + for(var/obj/machinery/rnd/server/server as anything in stored_research.techweb_servers) var/server_info = "" var/status_text = server.get_status_text() @@ -204,7 +200,6 @@ name = "\improper Master " + name desc += "\nIt looks incredibly resistant to damage!" source_code_hdd = new(src) - SSresearch.master_servers += src add_overlay("RD-server-objective-stripes") @@ -212,8 +207,6 @@ if (source_code_hdd && (deconstruction_state == HDD_OVERLOADED)) QDEL_NULL(source_code_hdd) - SSresearch.master_servers -= src - return ..() /obj/machinery/rnd/server/master/get_status_text() @@ -307,7 +300,7 @@ to_chat(user, span_notice("You cut the final wire and remove [source_code_hdd].")) try_put_in_hand(source_code_hdd, user) source_code_hdd = null - SSresearch.income_modifier *= 0.5 + stored_research.income_modifier *= 0.5 return TRUE to_chat(user, span_notice("You delicately cut the wire. [hdd_wires] wire\s left...")) return TRUE diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 6a7871a2b9b..b8b0d9b73e7 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -48,6 +48,13 @@ ///All research servers connected to this individual techweb. var/list/obj/machinery/rnd/server/techweb_servers = list() + ///Boolean on whether the techweb should generate research points overtime. + var/should_generate_points = FALSE + ///A multiplier applied to all research gain, cut in half if the Master server was sabotaged. + var/income_modifier = 1 + ///The amount of research points generated the techweb generated the latest time it generated. + var/last_income + /** * Assoc list of relationships with various partners * scientific_cooperation[partner_typepath] = relationship diff --git a/code/modules/research/techweb/techweb_types.dm b/code/modules/research/techweb/techweb_types.dm index bf281818c98..5a8e7cf42b4 100644 --- a/code/modules/research/techweb/techweb_types.dm +++ b/code/modules/research/techweb/techweb_types.dm @@ -4,6 +4,8 @@ /datum/techweb/science id = "SCIENCE" organization = "Nanotrasen" + should_generate_points = TRUE + //When something is researched, triggers the proc for this techweb only /datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) diff --git a/modular_skyrat/master_files/code/modules/experisci/experiment/handlers/experiment_handler.dm b/modular_skyrat/master_files/code/modules/experisci/experiment/handlers/experiment_handler.dm deleted file mode 100644 index db2f3052b37..00000000000 --- a/modular_skyrat/master_files/code/modules/experisci/experiment/handlers/experiment_handler.dm +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Attempts to get rnd servers that are on the station z-level, also checks if provided turf is on the station z-level - * - * Arguments: - * * turf_to_check_for_servers - The turf to check if its on the station z-level - */ -/datum/component/experiment_handler/get_available_servers(turf/turf_to_check_for_servers = null) - var/list/local_servers = list() - for(var/obj/machinery/rnd/server/server in SSresearch.servers) - local_servers += server - return local_servers diff --git a/tgstation.dme b/tgstation.dme index e4063f11a1b..de9a27873e2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5217,7 +5217,6 @@ #include "modular_skyrat\master_files\code\modules\clothing\under\jobs\civilian\suits.dm" #include "modular_skyrat\master_files\code\modules\events\disease_outbreak.dm" #include "modular_skyrat\master_files\code\modules\events\spacevine.dm" -#include "modular_skyrat\master_files\code\modules\experisci\experiment\handlers\experiment_handler.dm" #include "modular_skyrat\master_files\code\modules\food_and_drinks\recipes\food_mixtures.dm" #include "modular_skyrat\master_files\code\modules\jobs\departments\departments.dm" #include "modular_skyrat\master_files\code\modules\jobs\job_types\cyborg.dm"