From 6a5a09845811921dc495ae446ccba52cf260c810 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 16 Dec 2019 01:43:21 +0100 Subject: [PATCH 1/4] Fixing the blood bank generator. --- code/game/machinery/bloodbankgen.dm | 96 ++++++++++++----------------- 1 file changed, 38 insertions(+), 58 deletions(-) diff --git a/code/game/machinery/bloodbankgen.dm b/code/game/machinery/bloodbankgen.dm index 296e79b403..79268f067e 100644 --- a/code/game/machinery/bloodbankgen.dm +++ b/code/game/machinery/bloodbankgen.dm @@ -108,74 +108,55 @@ /obj/machinery/bloodbankgen/process() if(!is_operational()) - return PROCESS_KILL + return bloodstored = reagents.total_volume var/transfer_amount = 20 if(draining) - if(reagents.total_volume >= reagents.maximum_volume) - draining = FALSE - return - - if(bag) - if(bag.reagents.total_volume) - var/datum/reagent/blood/B = bag.reagents.has_reagent("blood") - if(B) - var/amount = reagents.maximum_volume - reagents.total_volume //monitor the machine's internal storage - amount = min(amount, transfer_amount) - if(!amount) - draining = FALSE - updateUsrDialog() - visible_message("[src] beeps loudly.") - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - return - - if(bag.blood_type == "SY") //no infinite loops using synthetics. - reagents.add_reagent("syntheticblood", amount) - else - reagents.add_reagent("syntheticblood", (amount+(5*efficiency))) - - if(bag.reagents.total_volume >= amount) - bag.reagents.remove_reagent("blood", amount) - else - visible_message("[src] beeps loudly.") - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - draining = FALSE - - bag.update_icon() - update_icon() - updateUsrDialog() - else + if(reagents.total_volume >= reagents.maximum_volume || !bag) draining = FALSE updateUsrDialog() return + if(bag.reagents.total_volume) + var/datum/reagent/blood/B = bag.reagents.has_reagent("blood") + if(!B) + beep_stop_pumping() + return + //monitor the machine and blood bag's reagents storage. + var/amount = min(B.volume, min(transfer_amount, reagents.maximum_volume - reagents.total_volume)) + if(!amount) + beep_stop_pumping() + return + var/bonus = bag.blood_type == "SY" ? 0 : 5 * efficiency //no infinite loops using synthetics. + reagents.add_reagent("syntheticblood", amount + bonus) + bag.reagents.remove_reagent("blood", amount) + update_icon() + return if(filling) - if(!reagents || !reagents.total_volume) + if(!reagents || !reagents.total_volume || !outbag) filling = FALSE //there ain't anything in the machine yo. + updateUsrDialog() return - if(outbag && outbag.reagents.total_volume < outbag.reagents.maximum_volume) - var/amount = outbag.reagents.maximum_volume - outbag.reagents.total_volume //monitor the output bag's internal storage - amount = min(amount, transfer_amount) + if(outbag.reagents.total_volume < outbag.reagents.maximum_volume) + //monitor the output bag's reagents storage. + var/amount = min(transfer_amount, outbag.reagents.maximum_volume - outbag.reagents.total_volume) if(!amount) - filling = FALSE - visible_message("[src] pings.") - playsound(loc, 'sound/machines/beep.ogg', 50, 1) - updateUsrDialog() + beep_stop_pumping("[src] pings.", TRUE) return - reagents.trans_to(outbag, amount) - outbag.update_icon() update_icon() - updateUsrDialog() - else - visible_message("[src] pings.") - playsound(loc, 'sound/machines/beep.ogg', 50, 1) - filling = FALSE - updateUsrDialog() - return + +/obj/machinery/bloodbankgen/proc/beep_stop_pumping(msg = "[src] beeps loudly.", out_instead_of_in = FALSE) + if(out_instead_of_in) + filling = FALSE + else + draining = FALSE + updateUsrDialog() + audible_message(msg) + playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) /obj/machinery/bloodbankgen/attackby(obj/item/O, mob/user, params) if(user.a_intent == INTENT_HARM) @@ -198,8 +179,8 @@ if(istype(O, /obj/item/reagent_containers/blood)) . = TRUE //no afterattack - var/msg = "" - if(!panel_open) + var/msg + if(panel_open) . += "Close the maintenance panel" if(!anchored) . += "[msg ? " and a" : "A"]nchor its bolts" @@ -338,23 +319,22 @@ to_chat(user, "There is already something in this slot!") /obj/machinery/bloodbankgen/Topic(href, href_list) - if(..() || panel_open) + . = ..() + if(. | !is_operational()) return usr.set_machine(src) if(href_list["activateinput"]) activateinput() - updateUsrDialog() else if(href_list["detachinput"]) detachinput() - updateUsrDialog() else if(href_list["activateoutput"]) activateoutput() - updateUsrDialog() else if(href_list["detachoutput"]) detachoutput() - updateUsrDialog() + + updateUsrDialog() From fb6b01a4ae44ddb80b5f8acb2e6e6c6b654997d2 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 16 Dec 2019 02:29:53 +0100 Subject: [PATCH 2/4] testing, further improvements. Tired. --- code/game/machinery/bloodbankgen.dm | 64 ++++++++++++++--------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/code/game/machinery/bloodbankgen.dm b/code/game/machinery/bloodbankgen.dm index 79268f067e..9aa48eb28c 100644 --- a/code/game/machinery/bloodbankgen.dm +++ b/code/game/machinery/bloodbankgen.dm @@ -12,7 +12,6 @@ var/filling = FALSE var/obj/item/reagent_containers/blood/bag = null var/obj/item/reagent_containers/blood/outbag = null - var/bloodstored = 0 var/maxbloodstored = 1000 var/menustat = "menu" var/efficiency = 0 @@ -20,7 +19,7 @@ /obj/machinery/bloodbankgen/Initialize() . = ..() - create_reagents(1000) + create_reagents(maxbloodstored, AMOUNT_VISIBLE) update_icon() /obj/machinery/bloodbankgen/Destroy() @@ -28,6 +27,14 @@ QDEL_NULL(outbag) return ..() +/obj/machinery/bloodbankgen/examine(mob/user) + . = ..() + if(bag) + . += "It has \a [bag.name] hooked to its input slot. The counter reads: \"Current Capacity: [bag.reagents.total_volume] of [bag.reagents.maximum_volume]\"" + if(outbag) + . += "It has \a [bag.name] hooked to its output slot. The counter reads: \"Current Capacity: [outbag.reagents.total_volume] of [outbag.reagents.maximum_volume]\"" + + /obj/machinery/bloodbankgen/handle_atom_del(atom/A) ..() if(A == bag) @@ -110,44 +117,31 @@ if(!is_operational()) return - bloodstored = reagents.total_volume - var/transfer_amount = 20 if(draining) - if(reagents.total_volume >= reagents.maximum_volume || !bag) - draining = FALSE - updateUsrDialog() + if(reagents.total_volume >= reagents.maximum_volume || !bag || !bag.reagents.total_volume) + beep_stop_pumping() return - if(bag.reagents.total_volume) - var/datum/reagent/blood/B = bag.reagents.has_reagent("blood") - if(!B) - beep_stop_pumping() - return - //monitor the machine and blood bag's reagents storage. - var/amount = min(B.volume, min(transfer_amount, reagents.maximum_volume - reagents.total_volume)) - if(!amount) - beep_stop_pumping() - return - var/bonus = bag.blood_type == "SY" ? 0 : 5 * efficiency //no infinite loops using synthetics. - reagents.add_reagent("syntheticblood", amount + bonus) - bag.reagents.remove_reagent("blood", amount) - update_icon() - return + var/blood_amount = bag.reagents.get_reagent_amount("blood") + //monitor the machine and blood bag's reagents storage. + var/amount = min(blood_amount, min(transfer_amount, reagents.maximum_volume - reagents.total_volume)) + if(!amount) + beep_stop_pumping() + return + var/bonus = bag.blood_type == "SY" ? 0 : 5 * efficiency //no infinite loops using synthetics. + reagents.add_reagent("syntheticblood", amount + bonus) + bag.reagents.remove_reagent("blood", amount) + update_icon() if(filling) - if(!reagents || !reagents.total_volume || !outbag) - filling = FALSE //there ain't anything in the machine yo. - updateUsrDialog() + if(!reagents.total_volume || outbag.reagents.total_volume >= outbag.reagents.maximum_volume || !outbag) + beep_stop_pumping("[src] pings.", TRUE) return - if(outbag.reagents.total_volume < outbag.reagents.maximum_volume) - //monitor the output bag's reagents storage. - var/amount = min(transfer_amount, outbag.reagents.maximum_volume - outbag.reagents.total_volume) - if(!amount) - beep_stop_pumping("[src] pings.", TRUE) - return - reagents.trans_to(outbag, amount) - update_icon() + //monitor the output bag's reagents storage. + var/amount = min(transfer_amount, outbag.reagents.maximum_volume - outbag.reagents.total_volume) + reagents.trans_to(outbag, amount) + update_icon() /obj/machinery/bloodbankgen/proc/beep_stop_pumping(msg = "[src] beeps loudly.", out_instead_of_in = FALSE) if(out_instead_of_in) @@ -248,7 +242,7 @@ if(!bag && !outbag) dat += "
No containers inside, please insert container.
" - var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 520) + var/datum/browser/popup = new(user, "bloodbankgen", name, 350, 420) popup.set_content(dat) popup.open() @@ -286,6 +280,7 @@ if(usr && Adjacent(usr) && !issiliconoradminghost(usr)) usr.put_in_hands(bag) bag = null + draining = null update_icon() /obj/machinery/bloodbankgen/proc/detachoutput() @@ -294,6 +289,7 @@ if(usr && Adjacent(usr) && !issiliconoradminghost(usr)) usr.put_in_hands(outbag) outbag = null + filling = null update_icon() /obj/machinery/bloodbankgen/proc/attachinput(obj/item/O, mob/user) From b0e8fb42cd3919729e6b239708709dd9db46282b Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 16 Dec 2019 14:00:14 +0100 Subject: [PATCH 3/4] AAAAA --- code/game/machinery/bloodbankgen.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/bloodbankgen.dm b/code/game/machinery/bloodbankgen.dm index 9aa48eb28c..c92e55084d 100644 --- a/code/game/machinery/bloodbankgen.dm +++ b/code/game/machinery/bloodbankgen.dm @@ -135,7 +135,7 @@ update_icon() if(filling) - if(!reagents.total_volume || outbag.reagents.total_volume >= outbag.reagents.maximum_volume || !outbag) + if(!reagents.total_volume || !outbag || outbag.reagents.total_volume >= outbag.reagents.maximum_volume) beep_stop_pumping("[src] pings.", TRUE) return //monitor the output bag's reagents storage.