From 292fb13612b0534a5a67cba2dc924a07e35b9054 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Tue, 16 Jan 2018 08:39:06 -0500 Subject: [PATCH 1/2] Merge pull request #34463 from DaedalusGame/micro_fix Fixes duplicate reagents in chemistry macros --- .../reagents/chemistry/machinery/chem_dispenser.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index d82effb236..5a9ce63899 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -188,11 +188,13 @@ if("dispense_recipe") var/recipe_to_use = params["recipe"] var/list/chemicals_to_dispense = process_recipe_list(recipe_to_use) - for(var/r_id in chemicals_to_dispense) // i suppose you could edit the list locally before passing it + for(var/key in chemicals_to_dispense) // i suppose you could edit the list locally before passing it + var/list/keysplit = splittext(key," ") + var/r_id = keysplit[1] if(beaker && dispensable_reagents.Find(r_id)) // but since we verify we have the reagent, it'll be fine var/datum/reagents/R = beaker.reagents var/free = R.maximum_volume - R.total_volume - var/actual = min(chemicals_to_dispense[r_id], (cell.charge * powerefficiency)*10, free) + var/actual = min(chemicals_to_dispense[key], (cell.charge * powerefficiency)*10, free) if(actual) R.add_reagent(r_id, actual) cell.use((actual / 10) / powerefficiency) @@ -350,11 +352,12 @@ return ..() /obj/machinery/chem_dispenser/proc/process_recipe_list(var/fucking_hell) + var/list/key_list = list() var/list/final_list = list() var/list/first_process = splittext(fucking_hell, ";") for(var/reagents in first_process) var/list/fuck = splittext(reagents, "=") - final_list += list(fuck[1] = text2num(fuck[2])) + final_list += list(avoid_assoc_duplicate_keys(fuck[1],key_list) = text2num(fuck[2])) return final_list /obj/machinery/chem_dispenser/drinks