diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 654b9e0e69..745843474e 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -59,6 +59,11 @@ recharge() dispensable_reagents = sortList(dispensable_reagents) +/obj/machinery/chem_dispenser/Destroy() + QDEL_NULL(beaker) + QDEL_NULL(cell) + return ..() + /obj/machinery/chem_dispenser/process() if(recharged < 0) @@ -303,6 +308,7 @@ if(beaker) beaker.forceMove(drop_location()) beaker = null + return ..() /obj/machinery/chem_dispenser/drinks name = "soda dispenser" diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index f8d2a66247..a6d958220a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -13,6 +13,28 @@ var/heater_coefficient = 0.1 var/on = FALSE +/obj/machinery/chem_heater/Destroy() + QDEL_NULL(beaker) + return ..() + +/obj/machinery/chem_heater/handle_atom_del(atom/A) + . = ..() + if(A == beaker) + beaker = null + update_icon() + +/obj/machinery/chem_heater/update_icon() + if(beaker) + icon_state = "mixer1b" + else + icon_state = "mixer0b" + +/obj/machinery/chem_heater/proc/eject_beaker() + if(beaker) + beaker.forceMove(drop_location()) + beaker = null + update_icon() + /obj/machinery/chem_heater/RefreshParts() heater_coefficient = 0.1 for(var/obj/item/stock_parts/micro_laser/M in component_parts) @@ -52,12 +74,13 @@ return beaker = I to_chat(user, "You add [I] to [src].") - icon_state = "mixer1b" + update_icon() return return ..() /obj/machinery/chem_heater/on_deconstruction() eject_beaker() + return ..() /obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) @@ -108,10 +131,3 @@ on = FALSE eject_beaker() . = TRUE - -/obj/machinery/chem_heater/proc/eject_beaker() - if(beaker) - beaker.forceMove(drop_location()) - beaker.reagents.handle_reactions() - beaker = null - icon_state = "mixer0b" diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 434996fb08..3e06449e3a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -13,7 +13,7 @@ var/obj/item/reagent_containers/beaker = null var/obj/item/storage/pill_bottle/bottle = null var/mode = 1 - var/condi = 0 + var/condi = FALSE var/screen = "home" var/analyzeVars[0] var/useramount = 30 // Last used amount @@ -23,6 +23,11 @@ add_overlay("waitlight") . = ..() +/obj/machinery/chem_master/Destroy() + QDEL_NULL(beaker) + QDEL_NULL(bottle) + return ..() + /obj/machinery/chem_master/RefreshParts() reagents.maximum_volume = 0 for(var/obj/item/reagent_containers/glass/beaker/B in component_parts) @@ -44,10 +49,22 @@ if(A == beaker) beaker = null reagents.clear_reagents() - icon_state = "mixer0" + update_icon() else if(A == bottle) bottle = null +/obj/machinery/chem_master/update_icon() + if(beaker) + icon_state = "mixer1" + else + icon_state = "mixer0" + +/obj/machinery/chem_master/proc/eject_beaker() + if(beaker) + beaker.forceMove(drop_location()) + adjust_item_drop_location(beaker) + beaker = null + update_icon() /obj/machinery/chem_master/blob_act(obj/structure/blob/B) if (prob(50)) @@ -61,15 +78,6 @@ /obj/machinery/chem_master/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", I)) - if(beaker) - beaker.forceMove(drop_location()) - adjust_item_drop_location(beaker) - beaker = null - reagents.clear_reagents() - if(bottle) - bottle.forceMove(drop_location()) - adjust_item_drop_location(bottle) - bottle = null return else if(exchange_parts(user, I)) @@ -94,7 +102,7 @@ beaker = I to_chat(user, "You add [I] to [src].") src.updateUsrDialog() - icon_state = "mixer1" + update_icon() else if(!condi && istype(I, /obj/item/storage/pill_bottle)) if(bottle) @@ -109,6 +117,13 @@ else return ..() +/obj/machinery/chem_master/on_deconstruction() + eject_beaker() + if(bottle) + bottle.forceMove(drop_location()) + adjust_item_drop_location(bottle) + bottle = null + return ..() /obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) @@ -154,13 +169,8 @@ return switch(action) if("eject") - if(beaker) - beaker.forceMove(drop_location()) - adjust_item_drop_location(beaker) - beaker = null - reagents.clear_reagents() - icon_state = "mixer0" - . = TRUE + eject_beaker() + . = TRUE if("ejectp") if(bottle) @@ -348,7 +358,7 @@ #if DM_VERSION >= 513 #warning 512 is definitely stable now, remove the old code #endif - + #if DM_VERSION >= 512 . += hex2num(md5[i]) #else @@ -361,4 +371,4 @@ /obj/machinery/chem_master/condimaster name = "CondiMaster 3000" desc = "Used to create condiments and other cooking supplies." - condi = 1 + condi = TRUE diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 466aa047ad..f6b0f464fd 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -25,6 +25,12 @@ QDEL_NULL(beaker) return ..() +/obj/machinery/computer/pandemic/handle_atom_del(atom/A) + . = ..() + if(A == beaker) + beaker = null + update_icon() + /obj/machinery/computer/pandemic/proc/get_by_index(thing, index) if(!beaker || !beaker.reagents) return @@ -121,9 +127,10 @@ add_overlay("waitlight") /obj/machinery/computer/pandemic/proc/eject_beaker() - beaker.forceMove(drop_location()) - beaker = null - update_icon() + if(beaker) + beaker.forceMove(drop_location()) + beaker = null + update_icon() /obj/machinery/computer/pandemic/ui_interact(mob/user, ui_key = "main", datum/tgui/ui, force_open = FALSE, datum/tgui/master_ui, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) @@ -159,8 +166,7 @@ return switch(action) if("eject_beaker") - if(beaker) - eject_beaker() + eject_beaker() . = TRUE if("empty_beaker") if(beaker) @@ -236,7 +242,5 @@ return ..() /obj/machinery/computer/pandemic/on_deconstruction() - if(beaker) - beaker.forceMove(drop_location()) - beaker = null + eject_beaker() . = ..()