From fa7e321f107ba3a2a871c25a3baf1c4a04e8c9dc Mon Sep 17 00:00:00 2001 From: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:32:37 -0400 Subject: [PATCH] Lets the rnd server controller actually have use in blacklisting (#21034) * [WIP] Lets the rnd server controller actually have use in blacklisting * grief protection gave me grief, more at 11. * Apply suggestions from code review Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> * Update research.dm * Apply suggestions from code review Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> --------- Co-authored-by: Ryan <80364400+Sirryan2002@users.noreply.github.com> --- code/modules/research/rdconsole.dm | 4 +++- code/modules/research/research.dm | 17 +++++++++++++++++ code/modules/research/server.dm | 17 +++++++++++++++-- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index a10f08118a9..253a0b1d97f 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -267,11 +267,14 @@ won't update every console in existence) but it's more of a hassle to do. Also, /obj/machinery/computer/rdconsole/proc/sync_research() if(!sync) return + var/list/temp_unblacklist = files.unblacklisted_designs + files.unblacklisted_designs = list() //Remove this asap, else it will stick around clear_wait_message() for(var/obj/machinery/r_n_d/server/S in GLOB.machines) var/server_processed = FALSE if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom)) + S.files.blacklisted_designs -= temp_unblacklist files.push_data(S.files) server_processed = TRUE @@ -606,7 +609,6 @@ won't update every console in existence) but it's more of a hassle to do. Also, to_chat(usr, "You must connect to the network first!") else add_wait_message("Syncing Database...", SYNC_RESEARCH_DELAY) - griefProtection() //Putting this here because I dont trust the sync process addtimer(CALLBACK(src, PROC_REF(sync_research)), SYNC_RESEARCH_DELAY) if("togglesync") //Prevents the console from being synced by other consoles. Can still send data. diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index ba73dcac72a..668ae87fceb 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -53,6 +53,11 @@ research holder datum. var/list/known_tech = list() //List of locally known tech. var/list/possible_designs = list() //List of all designs var/list/known_designs = list() //List of available designs + /// List of designs that have been blacklisted by the server controller + var/list/blacklisted_designs = list() + /// Used during the rnd sync system, to ensure that blacklists are reverted, then cleared. + var/list/unblacklisted_designs = list() + /datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated. // MON DIEU!!! @@ -82,6 +87,8 @@ research holder datum. //Checks to see if design has all the required pre-reqs. //Input: datum/design; Output: 0/1 (false/true) /datum/research/proc/DesignHasReqs(datum/design/D) + if(D.id in blacklisted_designs) + return FALSE if(D.req_tech.len == 0) return TRUE for(var/req in D.req_tech) @@ -103,6 +110,8 @@ research holder datum. /datum/research/proc/CanAddDesign2Known(datum/design/D) if (D.id in known_designs) return FALSE + if(D.id in blacklisted_designs) + return FALSE return TRUE /datum/research/proc/AddDesign2Known(datum/design/D) @@ -124,6 +133,8 @@ research holder datum. if(DesignHasReqs(PD)) if(!AddDesign2Known(PD)) stack_trace("Game attempted to add a null design to list of known designs! Design: [PD] with ID: [PD.id]") + if(length(blacklisted_designs)) //No need to run this unless there are blacklisted designs + known_designs -= blacklisted_designs for(var/v in known_tech) var/datum/tech/T = known_tech[v] T.level = clamp(T.level, 0, 20) @@ -158,6 +169,12 @@ research holder datum. // Arguments: // `other` - The research datum to send designs and techs to /datum/research/proc/push_data(datum/research/other) + other.blacklisted_designs += (blacklisted_designs - other.blacklisted_designs) + for(var/v in unblacklisted_designs) + blacklisted_designs -= v + other.blacklisted_designs -= v + unblacklisted_designs -= v + other.unblacklisted_designs += v //Needed so the main rnd console actually removes the rest of the blacklists in the fucking world for(var/v in known_tech) var/datum/tech/T = known_tech[v] other.AddTech2Known(T) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 00cb7e1f0cb..5f06df28615 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -259,15 +259,23 @@ 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") + var/choice = alert("Design Data Deletion", "Are you sure you want to blacklist this design? Ensure you sync servers after this decision.", "Continue", "Cancel") if(choice == "Continue") for(var/I in temp_server.files.known_designs) var/datum/design/D = temp_server.files.known_designs[I] if(D.id == href_list["reset_design"]) temp_server.files.known_designs -= D.id + temp_server.files.blacklisted_designs += D.id break temp_server.files.RefreshResearch() + else if(href_list["restore_design"]) + var/choice = alert("Design Data Restoration", "Are you sure you want to restore this design? Ensure you sync servers after this decision.", "Continue", "Cancel") + if(choice == "Continue") + temp_server.files.blacklisted_designs -= href_list["restore_design"] + temp_server.files.unblacklisted_designs += href_list["restore_design"] + temp_server.files.RefreshResearch() + updateUsrDialog() return @@ -323,7 +331,12 @@ for(var/I in temp_server.files.known_designs) var/datum/design/D = temp_server.files.known_designs[I] dat += "* [D.name] " - dat += "(Delete)
" + dat += "(Blacklist)
" + if(length(temp_server.files.blacklisted_designs)) + dat += "Blacklisted Designs
" + for(var/I in temp_server.files.blacklisted_designs) + dat += "* [I] " + dat += "(Restore design)
" dat += "
Main Menu" if(3) //Server Data Transfer