From 9aafac8ade22eee07a12598c2f823a8ed498767f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 11 Jun 2014 15:06:46 +0930 Subject: [PATCH] Added multipliers to autolathe. --- code/game/machinery/autolathe.dm | 43 ++++++++++++++++--------- code/game/machinery/autolathe_datums.dm | 5 +++ code/game/machinery/machinery.dm | 14 +++++++- 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 580bee2228f..253954fe4ae 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -52,12 +52,19 @@ var/can_make = 1 var/material_string = "" + var/multiplier_string = "" + var/max_sheets var/comma if(!R.resources || !R.resources.len) material_string = "No resources required." else + + //Make sure it's buildable and list requires resources. for(var/material in R.resources) + var/sheets = round(stored_material[material]/R.resources[material]) + if(isnull(max_sheets) || max_sheets > sheets) + max_sheets = sheets if(!isnull(stored_material[material]) && stored_material[material] < R.resources[material]) can_make = 0 @@ -68,7 +75,15 @@ material_string += "[R.resources[material]] [material]" material_string += ".
" - dat += "[can_make ? "" : ""][R.name][can_make ? "" : ""][material_string]" + //Build list of multipliers for sheets. + if(R.is_stack) + if(max_sheets && max_sheets > 0) + multiplier_string += "
+ for(var/i = 5;i*" : ""][can_make ? "" : ""][R.name][can_make ? "" : ""][R.hidden ? "*" : ""][multiplier_string][material_string]" dat += "
" @@ -106,16 +121,8 @@ if (opened) //Dismantle the frame. if(istype(O, /obj/item/weapon/crowbar)) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = loc - del(src) - return 1 + dismantle() + return //Resources are being loaded. var/obj/item/eating = O @@ -200,13 +207,14 @@ if(href_list["make"] && autolathe_recipes) var/index = text2num(href_list["make"]) + var/multiplier = text2num(href_list["multiplier"]) var/datum/autolathe/recipe/making if(index > 0 && index <= autolathe_recipes.len) making = autolathe_recipes[index] //Exploit detection, not sure if necessary after rewrite. - if(!making) + 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!") @@ -214,18 +222,18 @@ busy = 1 //This needs some work. - use_power(max(2000, making.power_use)) + use_power(max(2000, (making.power_use*multiplier))) //Check if we still have the materials. for(var/material in making.resources) if(!isnull(stored_material[material])) - if(stored_material[material] < making.resources[material]) + if(stored_material[material] < (making.resources[material]*multiplier)) return //Consume materials. for(var/material in making.resources) if(!isnull(stored_material[material])) - stored_material[material] = max(0,stored_material[material]-making.resources[material]) + stored_material[material] = max(0,stored_material[material]-(making.resources[material]*multiplier)) //Fancy autolathe animation. flick("autolathe_n",src) @@ -238,7 +246,10 @@ if(!making || !src) return //Create the desired item. - new making.path(get_step(loc, get_dir(src,usr))) + var/obj/item/I = new making.path(get_step(loc, get_dir(src,usr))) + if(multiplier>1 && istype(I,/obj/item/stack)) + var/obj/item/stack/S = I + S.amount = multiplier if(href_list["act"]) diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index 9b21e81f4df..5ada4bd2faf 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -8,6 +8,7 @@ var/hidden var/category var/power_use = 0 + var/is_stack /datum/autolathe/recipe/bucket name = "bucket" @@ -78,21 +79,25 @@ name = "steel sheets" path = /obj/item/stack/sheet/metal category = "General" + is_stack = 1 /datum/autolathe/recipe/glass name = "glass sheets" path = /obj/item/stack/sheet/glass category = "General" + is_stack = 1 /datum/autolathe/recipe/rglass name = "reinforced glass sheets" path = /obj/item/stack/sheet/rglass category = "General" + is_stack = 1 /datum/autolathe/recipe/rods name = "metal rods" path = /obj/item/stack/rods category = "General" + is_stack = 1 /datum/autolathe/recipe/knife name = "kitchen knife" diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 19f5b76b8d0..495bb452464 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -270,4 +270,16 @@ Class Procs: if (electrocute_mob(user, get_area(src), src, 0.7)) return 1 else - return 0 \ No newline at end of file + return 0 + +/obj/machinery/proc/dismantle() + playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc) + M.state = 2 + M.icon_state = "box_1" + for(var/obj/I in component_parts) + if(I.reliability != 100 && crit_fail) + I.crit_fail = 1 + I.loc = loc + del(src) + return 1 \ No newline at end of file