diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 0a545828292..aa19f3e8ea7 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -217,7 +217,6 @@ if(busy) to_chat(usr, "The autolathe is busy. Please wait for completion of previous operation.") return -<<<<<<< HEAD switch(action) if("make") var/datum/category_item/autolathe/making = locate(params["make"]) @@ -271,6 +270,15 @@ //Create the desired item. var/obj/item/I = new making.path(src.loc) + + if(LAZYLEN(I.matter)) // Sadly we must obey the laws of equivalent exchange. + I.matter.Cut() + else + I.matter = list() + + for(var/material in making.resources) // Handle the datum's autoscaling for waste, so we're properly wasting material, but not so much if we have efficiency. + I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency) + flick("[initial(icon_state)]_finish", src) if(multiplier > 1) if(istype(I, /obj/item/stack)) @@ -278,96 +286,18 @@ S.amount = multiplier else for(multiplier; multiplier > 1; --multiplier) // Create multiple items if it's not a stack. - new making.path(src.loc) + I = new making.path(src.loc) + // We've already deducted the cost of multiple items. Process the matter the same. + if(LAZYLEN(I.matter)) + I.matter.Cut() + + else + I.matter = list() + + for(var/material in making.resources) + I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency) return TRUE return FALSE -======= - - else if(href_list["setfilter"]) - var/filterstring = input(usr, "Input a filter string, or blank to not filter:", "Design Filter", filtertext) as null|text - if(!Adjacent(usr)) - return - if(isnull(filterstring)) //Clicked Cancel - return - if(filterstring == "") //Cleared value - filtertext = null - filtertext = sanitize(filterstring, 25) - - if(href_list["change_category"]) - - var/choice = input("Which category do you wish to display?") as null|anything in machine_recipes.categories - if(!choice) return - current_category = choice - - if(href_list["make"] && machine_recipes) - var/multiplier = text2num(href_list["multiplier"]) - var/datum/category_item/autolathe/making = locate(href_list["make"]) in current_category.items - - //Exploit detection, not sure if necessary after rewrite. - if(!making || multiplier < 0 || multiplier > 100) - var/turf/exploit_loc = get_turf(usr) - message_admins("[key_name_admin(usr)] tried to exploit an autolathe to duplicate an item! ([exploit_loc ? "JMP" : "null"])", 0) - log_admin("EXPLOIT : [key_name(usr)] tried to exploit an autolathe to duplicate an item!") - return - - busy = 1 - update_use_power(USE_POWER_ACTIVE) - - //Check if we still have the materials. - var/coeff = (making.no_scale ? 1 : mat_efficiency) //stacks are unaffected by production coefficient - for(var/material in making.resources) - if(!isnull(stored_material[material])) - if(stored_material[material] < round(making.resources[material] * coeff) * multiplier) - return - - //Consume materials. - for(var/material in making.resources) - if(!isnull(stored_material[material])) - stored_material[material] = max(0, stored_material[material] - round(making.resources[material] * coeff) * multiplier) - - update_icon() // So lid closes - - sleep(build_time) - - busy = 0 - update_use_power(USE_POWER_IDLE) - update_icon() // So lid opens - - //Sanity check. - if(!making || !src) return - - //Create the desired item. - var/obj/item/I = new making.path(src.loc) - - if(LAZYLEN(I.matter)) // Sadly we must obey the laws of equivalent exchange. - I.matter.Cut() - else - I.matter = list() - - for(var/material in making.resources) // Handle the datum's autoscaling for waste, so we're properly wasting material, but not so much if we have efficiency. - I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency) - - flick("[initial(icon_state)]_finish", src) - if(multiplier > 1) - if(istype(I, /obj/item/stack)) - var/obj/item/stack/S = I - S.amount = multiplier - else - for(multiplier; multiplier > 1; --multiplier) // Create multiple items if it's not a stack. - I = new making.path(src.loc) - -// We've already deducted the cost of multiple items. Process the matter the same. - if(LAZYLEN(I.matter)) - I.matter.Cut() - - else - I.matter = list() - - for(var/material in making.resources) - I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency) - - updateUsrDialog() ->>>>>>> 09ec6d4... Matter Matters (#7756) /obj/machinery/autolathe/update_icon() overlays.Cut()