diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 727271749e6..36681edecdc 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -452,137 +452,137 @@ won't update every console in existence) but it's more of a hassle to do. Also, sync = !sync if("build") //Causes the Protolathe to build something. - if(linked_lathe) - if(linked_lathe.busy) - to_chat(usr, "[linked_lathe] is busy at the moment.") - return TRUE - var/coeff = linked_lathe.efficiency_coeff - var/g2g = 1 - var/datum/design/being_built = files.known_designs[params["id"]] - if(being_built) - var/power = 2000 - var/amount = text2num(params["amount"]) - if(being_built.make_reagents.len) - return FALSE - amount = max(1, min(10, amount)) - for(var/M in being_built.materials) - power += round(being_built.materials[M] * amount / 5) - power = max(2000, power) - var/key = usr.key //so we don't lose the info during the spawn delay - if(!(being_built.build_type & PROTOLATHE)) - g2g = 0 - message_admins("Protolathe exploit attempted by [key_name(usr, TRUE)]!") + if(!linked_lathe) + return + if(linked_lathe.busy) + to_chat(usr, "[linked_lathe] is busy at the moment.") + return + var/coeff = linked_lathe.efficiency_coeff + var/datum/design/being_built = files.known_designs[params["id"]] + if(!being_built) + return + var/power = BUILD_POWER + var/amount = text2num(params["amount"]) + if(being_built.make_reagents.len) + return FALSE + amount = max(1, min(10, amount)) + for(var/M in being_built.materials) + power += round(being_built.materials[M] * amount / 5) + power = max(BUILD_POWER, power) + var/key = usr.key //so we don't lose the info during the spawn delay + if(!(being_built.build_type & PROTOLATHE)) + message_admins("Protolathe exploit attempted by [key_name(usr, TRUE)]!") + return - if(g2g) //If input is incorrect, nothing happens - var/new_coeff = coeff * being_built.lathe_time_factor - var/time_to_construct = PROTOLATHE_CONSTRUCT_DELAY * new_coeff * amount ** 0.8 - var/enough_materials = 1 + var/new_coeff = coeff * being_built.lathe_time_factor + var/time_to_construct = PROTOLATHE_CONSTRUCT_DELAY * new_coeff * amount ** 0.8 + var/enough_materials = TRUE - add_wait_message("Constructing Prototype. Please Wait...", time_to_construct) - linked_lathe.busy = TRUE - flick("protolathe_n", linked_lathe) - use_power(power) + add_wait_message("Constructing Prototype. Please Wait...", time_to_construct) + linked_lathe.busy = TRUE + flick("protolathe_n", linked_lathe) + use_power(power) - var/list/efficient_mats = list() - for(var/MAT in being_built.materials) - efficient_mats[MAT] = being_built.materials[MAT] * coeff + var/list/efficient_mats = list() + for(var/MAT in being_built.materials) + efficient_mats[MAT] = being_built.materials[MAT] * coeff - if(!linked_lathe.materials.has_materials(efficient_mats, amount)) - atom_say("Not enough materials to complete prototype.") - enough_materials = FALSE - g2g = FALSE + if(!linked_lathe.materials.has_materials(efficient_mats, amount)) + atom_say("Not enough materials to complete prototype.") + enough_materials = FALSE + else + for(var/R in being_built.reagents_list) + if(!linked_lathe.reagents.has_reagent(R, being_built.reagents_list[R]) * coeff) + atom_say("Not enough reagents to complete prototype.") + enough_materials = FALSE + + if(enough_materials) + linked_lathe.materials.use_amount(efficient_mats, amount) + for(var/R in being_built.reagents_list) + linked_lathe.reagents.remove_reagent(R, being_built.reagents_list[R]*coeff) + + var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. + var/O = being_built.locked + + spawn(time_to_construct) + if(enough_materials) //And if we only fail the material requirements, we still spend time and power + for(var/i = 0, iCircuit Imprinter is busy at the moment.") - return - var/datum/design/being_built = null - being_built = files.known_designs[params["id"]] - if(being_built) - var/power = 2000 - for(var/M in being_built.materials) - power += round(being_built.materials[M] / 5) - power = max(2000, power) - if(!(being_built.build_type & IMPRINTER)) - g2g = 0 - message_admins("Circuit imprinter exploit attempted by [key_name(usr, TRUE)]!") + var/enough_materials = TRUE + if(!linked_imprinter) + return - if(g2g) //Again, if input is wrong, do nothing - add_wait_message("Imprinting Circuit. Please Wait...", IMPRINTER_DELAY) - linked_imprinter.busy = 1 - flick("circuit_imprinter_ani",linked_imprinter) - use_power(power) + if(linked_imprinter.busy) + to_chat(usr, "Circuit Imprinter is busy at the moment.") + return - var/list/efficient_mats = list() - for(var/MAT in being_built.materials) - efficient_mats[MAT] = being_built.materials[MAT]/coeff + var/datum/design/being_built = null + being_built = files.known_designs[params["id"]] + if(!being_built) + return - if(!linked_imprinter.materials.has_materials(efficient_mats)) - visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"") - enough_materials = 0 - g2g = 0 - else - for(var/R in being_built.reagents_list) - if(!linked_imprinter.reagents.has_reagent(R, being_built.reagents_list[R]/coeff)) - visible_message("The [name] beeps, \"Not enough reagents to complete prototype.\"") - enough_materials = 0 - g2g = 0 + if(!(being_built.build_type & IMPRINTER)) + message_admins("Circuit imprinter exploit attempted by [key_name(usr, TRUE)]!") + return - if(enough_materials) - linked_imprinter.materials.use_amount(efficient_mats) - for(var/R in being_built.reagents_list) - linked_imprinter.reagents.remove_reagent(R, being_built.reagents_list[R]/coeff) + var/power = BUILD_POWER + for(var/M in being_built.materials) + power += round(being_built.materials[M] / 5) + power = max(BUILD_POWER, power) - var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. - spawn(IMPRINTER_DELAY) - if(g2g) - var/obj/item/new_item = new P(src) - new_item.loc = linked_imprinter.loc - linked_imprinter.busy = 0 - clear_wait_message() - SStgui.update_uis(src) + add_wait_message("Imprinting Circuit. Please Wait...", IMPRINTER_DELAY) + linked_imprinter.busy = TRUE + flick("circuit_imprinter_ani", linked_imprinter) + use_power(power) + + var/list/efficient_mats = list() + for(var/MAT in being_built.materials) + efficient_mats[MAT] = being_built.materials[MAT] / coeff + + if(!linked_imprinter.materials.has_materials(efficient_mats)) + visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"") + enough_materials = FALSE + else + for(var/R in being_built.reagents_list) + if(!linked_imprinter.reagents.has_reagent(R, being_built.reagents_list[R] / coeff)) + visible_message("The [name] beeps, \"Not enough reagents to complete prototype.\"") + enough_materials = FALSE + + if(enough_materials) + linked_imprinter.materials.use_amount(efficient_mats) + for(var/R in being_built.reagents_list) + linked_imprinter.reagents.remove_reagent(R, being_built.reagents_list[R]/coeff) + + var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. + spawn(IMPRINTER_DELAY) + if(enough_materials) + var/obj/item/new_item = new P(src) + new_item.loc = linked_imprinter.loc + linked_imprinter.busy = FALSE + clear_wait_message() + SStgui.update_uis(src) if("disposeI") //Causes the circuit imprinter to dispose of a single reagent (all of it) if(linked_imprinter)