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 0cff93a22a0..afbabec1a78 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 += "" - 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..32743b2b068 100644 --- a/code/modules/research/techweb/techweb_types.dm +++ b/code/modules/research/techweb/techweb_types.dm @@ -4,6 +4,7 @@ /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)
ServerStatusControl