From e70194f329b039b7ea2ab933bb0ede15fa63b26f Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Thu, 15 Feb 2018 15:07:17 +0200 Subject: [PATCH] Merge pull request #35561 from ShizCalev/rndconsole-runtime Fixes rnd console runtimes --- code/__DEFINES/research.dm | 10 +-- code/modules/research/rdconsole.dm | 119 +++++++++++++++++++++-------- 2 files changed, 91 insertions(+), 38 deletions(-) diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index bb2e232886..b7aac16f76 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -35,11 +35,11 @@ #define RDSCREEN_TEXT_NO_SNODE "

No Technology Node Selected!


" #define RDSCREEN_TEXT_NO_SDESIGN "

No Design Selected!


" -#define RDSCREEN_UI_LATHE_CHECK if(!linked_lathe) { return RDSCREEN_TEXT_NO_PROTOLATHE } -#define RDSCREEN_UI_IMPRINTER_CHECK if(!linked_imprinter) { return RDSCREEN_TEXT_NO_IMPRINTER } -#define RDSCREEN_UI_DECONSTRUCT_CHECK if(!linked_destroy) { return RDSCREEN_TEXT_NO_DECONSTRUCT } -#define RDSCREEN_UI_TDISK_CHECK if(!t_disk) { return RDSCREEN_TEXT_NO_TDISK } -#define RDSCREEN_UI_DDISK_CHECK if(!d_disk) { return RDSCREEN_TEXT_NO_DDISK } +#define RDSCREEN_UI_LATHE_CHECK if(QDELETED(linked_lathe)) { return RDSCREEN_TEXT_NO_PROTOLATHE } +#define RDSCREEN_UI_IMPRINTER_CHECK if(QDELETED(linked_imprinter)) { return RDSCREEN_TEXT_NO_IMPRINTER } +#define RDSCREEN_UI_DECONSTRUCT_CHECK if(QDELETED(linked_destroy)) { return RDSCREEN_TEXT_NO_DECONSTRUCT } +#define RDSCREEN_UI_TDISK_CHECK if(QDELETED(t_disk)) { return RDSCREEN_TEXT_NO_TDISK } +#define RDSCREEN_UI_DDISK_CHECK if(QDELETED(d_disk)) { return RDSCREEN_TEXT_NO_DDISK } #define RDSCREEN_UI_SNODE_CHECK if(!selected_node) { return RDSCREEN_TEXT_NO_SNODE } #define RDSCREEN_UI_SDESIGN_CHECK if(!selected_design) { return RDSCREEN_TEXT_NO_SDESIGN } diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index c47294d3fc..42cf5a529b 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -830,11 +830,17 @@ doesn't have toxins access. if(ls["back_screen"]) back = text2num(ls["back_screen"]) if(ls["build"]) //Causes the Protolathe to build something. + if(QDELETED(linked_lathe)) + say("No Protolathe Linked!") + return if(linked_lathe.busy) say("Warning: Protolathe busy!") else linked_lathe.user_try_print_id(ls["build"], ls["amount"]) if(ls["imprint"]) + if(QDELETED(linked_imprinter)) + say("No Circuit Imprinter Linked!") + return if(linked_imprinter.busy) say("Warning: Imprinter busy!") else @@ -844,12 +850,21 @@ doesn't have toxins access. if(ls["disconnect"]) //The R&D console disconnects with a specific device. switch(ls["disconnect"]) if("destroy") + if(QDELETED(linked_destroy)) + say("No Deconstructive Analyzer Linked!") + return linked_destroy.linked_console = null linked_destroy = null if("lathe") + if(QDELETED(linked_lathe)) + say("No Protolathe Linked!") + return linked_lathe.linked_console = null linked_lathe = null if("imprinter") + if(QDELETED(linked_imprinter)) + say("No Circuit Imprinter Linked!") + return linked_imprinter.linked_console = null linked_imprinter = null if(ls["eject_design"]) //Eject the design disk. @@ -861,20 +876,41 @@ doesn't have toxins access. screen = RDSCREEN_MENU say("Ejecting Technology Disk") if(ls["deconstruct"]) + if(QDELETED(linked_destroy)) + say("No Deconstructive Analyzer Linked!") + return linked_destroy.user_try_decon_id(ls["deconstruct"], usr) //Protolathe Materials - if(ls["disposeP"] && linked_lathe) //Causes the protolathe to dispose of a single reagent (all of it) + if(ls["disposeP"]) //Causes the protolathe to dispose of a single reagent (all of it) + if(QDELETED(linked_lathe)) + say("No Protolathe Linked!") + return linked_lathe.reagents.del_reagent(ls["disposeP"]) - if(ls["disposeallP"] && linked_lathe) //Causes the protolathe to dispose of all it's reagents. + if(ls["disposeallP"]) //Causes the protolathe to dispose of all it's reagents. + if(QDELETED(linked_lathe)) + say("No Protolathe Linked!") + return linked_lathe.reagents.clear_reagents() - if(ls["ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material + if(ls["ejectsheet"]) //Causes the protolathe to eject a sheet of material + if(QDELETED(linked_lathe)) + say("No Protolathe Linked!") + return linked_lathe.materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["ejectsheet"]) //Circuit Imprinter Materials - if(ls["disposeI"] && linked_imprinter) //Causes the circuit imprinter to dispose of a single reagent (all of it) + if(ls["disposeI"]) //Causes the circuit imprinter to dispose of a single reagent (all of it) + if(QDELETED(linked_imprinter)) + say("No Circuit Imprinter Linked!") + return linked_imprinter.reagents.del_reagent(ls["disposeI"]) - if(ls["disposeallI"] && linked_imprinter) //Causes the circuit imprinter to dispose of all it's reagents. + if(ls["disposeallI"]) //Causes the circuit imprinter to dispose of all it's reagents. + if(QDELETED(linked_imprinter)) + say("No Circuit Imprinter Linked!") + return linked_imprinter.reagents.clear_reagents() - if(ls["imprinter_ejectsheet"] && linked_imprinter) //Causes the imprinter to eject a sheet of material + if(ls["imprinter_ejectsheet"]) //Causes the imprinter to eject a sheet of material + if(QDELETED(linked_imprinter)) + say("No Circuit Imprinter Linked!") + return linked_imprinter.materials.retrieve_sheets(text2num(ls["eject_amt"]), ls["imprinter_ejectsheet"]) if(ls["disk_slot"]) disk_slot_selected = text2num(ls["disk_slot"]) @@ -885,25 +921,32 @@ doesn't have toxins access. return //Nope! research_node(ls["research_node"], usr) if(ls["clear_tech"]) //Erase la on the technology disk. - if(t_disk) - qdel(t_disk.stored_research) - t_disk.stored_research = new + if(QDELETED(t_disk)) + say("No Technology Disk Inserted!") + return + qdel(t_disk.stored_research) + t_disk.stored_research = new say("Wiping technology disk.") if(ls["copy_tech"]) //Copy some technology la from the research holder to the disk. + if(QDELETED(t_disk)) + say("No Technology Disk Inserted!") + return stored_research.copy_research_to(t_disk.stored_research) screen = RDSCREEN_TECHDISK say("Downloading to technology disk.") if(ls["clear_design"]) //Erases la on the design disk. - if(d_disk) - var/n = text2num(ls["clear_design"]) - if(!n) - for(var/i in 1 to d_disk.max_blueprints) - d_disk.blueprints[i] = null - say("Wiping design disk.") - else - var/datum/design/D = d_disk.blueprints[n] - say("Wiping design [D.name] from design disk.") - d_disk.blueprints[n] = null + if(QDELETED(d_disk)) + say("No Design Disk Inserted!") + return + var/n = text2num(ls["clear_design"]) + if(!n) + for(var/i in 1 to d_disk.max_blueprints) + d_disk.blueprints[i] = null + say("Wiping design disk.") + else + var/datum/design/D = d_disk.blueprints[n] + say("Wiping design [D.name] from design disk.") + d_disk.blueprints[n] = null if(ls["search"]) //Search for designs with name matching pattern searchstring = ls["to_search"] searchtype = ls["type"] @@ -913,10 +956,15 @@ doesn't have toxins access. else screen = RDSCREEN_IMPRINTER_SEARCH if(ls["updt_tech"]) //Uple the research holder with information from the technology disk. - say("Uploading Technology Disk.") - if(t_disk) - t_disk.stored_research.copy_research_to(stored_research) + if(QDELETED(t_disk)) + say("No Technology Disk Inserted!") + return + say("Uploading technology disk.") + t_disk.stored_research.copy_research_to(stored_research) if(ls["copy_design"]) //Copy design la from the research holder to the design disk. + if(QDELETED(d_disk)) + say("No Design Disk Inserted!") + return var/slot = text2num(ls["copy_design"]) var/datum/design/D = stored_research.researched_designs[ls["copy_design_ID"]] if(D) @@ -936,7 +984,10 @@ doesn't have toxins access. d_disk.blueprints[slot] = D screen = RDSCREEN_DESIGNDISK if(ls["eject_item"]) //Eject the item inside the destructive analyzer. - if(linked_destroy && linked_destroy.busy) + if(QDELETED(linked_destroy)) + say("No Deconstructive Analyzer Linked!") + return + if(linked_destroy.busy) to_chat(usr, "The destructive analyzer is busy at the moment.") else if(linked_destroy.loaded_item) linked_destroy.unload_item() @@ -948,14 +999,16 @@ doesn't have toxins access. selected_design = SSresearch.techweb_designs[ls["view_design"]] screen = RDSCREEN_TECHWEB_DESIGNVIEW if(ls["updt_design"]) //Uples the research holder with design la from the design disk. - if(d_disk) - var/n = text2num(ls["updt_design"]) - if(!n) - for(var/D in d_disk.blueprints) - if(D) - stored_research.add_design(D) - else - stored_research.add_design(d_disk.blueprints[n]) + if(QDELETED(d_disk)) + say("No design disk found.") + return + var/n = text2num(ls["updt_design"]) + if(!n) + for(var/D in d_disk.blueprints) + if(D) + stored_research.add_design(D) + else + stored_research.add_design(d_disk.blueprints[n]) updateUsrDialog() @@ -1004,14 +1057,14 @@ doesn't have toxins access. /obj/machinery/computer/rdconsole/proc/check_canprint(datum/design/D, buildtype) var/amount = 50 if(buildtype == IMPRINTER) - if(!linked_imprinter) + if(QDELETED(linked_imprinter)) return FALSE for(var/M in D.materials + D.reagents_list) amount = min(amount, linked_imprinter.check_mat(D, M)) if(amount < 1) return FALSE else if(buildtype == PROTOLATHE) - if(!linked_lathe) + if(QDELETED(linked_lathe)) return FALSE for(var/M in D.materials + D.reagents_list) amount = min(amount, linked_lathe.check_mat(D, M))