diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 6831034edf..4a936c6014 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -110,6 +110,8 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). return if(default_part_replacement(user, O)) return + if(istype(O, /obj/item/weapon/gripper/no_use/loader)) + return 0 //Sheet loaders weren't finishing attack(), this prevents the message "You can't stuff that gripper into this" without preventing the rest of the attack sequence from finishing if(panel_open) user << "You can't load \the [src] while it's opened." return 1 @@ -128,29 +130,35 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). user << "\The [src]'s material bin is full. Please remove material before adding more." return 1 - var/obj/item/stack/stack = O - - var/amount = round(input("How many sheets do you want to add?") as num) - if(!O) + var/obj/item/stack/material/S = O + if(!(S.material.name in materials)) + user << "The [src] doesn't accept [S.material]!" return - if(amount <= 0)//No negative numbers - return - if(amount > stack.get_amount()) - amount = stack.get_amount() - if(max_material_storage - TotalMaterials() < (amount * SHEET_MATERIAL_AMOUNT)) //Can't overfill - amount = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT)) busy = 1 - use_power(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10))) - var/stacktype = stack.type - var/t = getMaterialName(stacktype) - if(t) - if(do_after(usr, 16)) - if(stack.use(amount)) - user << "You add [amount] sheets to \the [src]." - materials[t] += amount * SHEET_MATERIAL_AMOUNT + var/sname = "[S.name]" + var/amnt = S.perunit + var/max_res_amount = max_material_storage + for(var/mat in materials) + max_res_amount -= materials[mat] + + if(materials[S.material.name] + amnt <= max_res_amount) + if(S && S.amount >= 1) + var/count = 0 + overlays += "fab-load-metal" + spawn(10) + overlays -= "fab-load-metal" + while(materials[S.material.name] + amnt <= max_res_amount && S.amount >= 1) + materials[S.material.name] += amnt + S.use(1) + count++ + user << "You insert [count] [sname] into the fabricator." + else + user << "The fabricator cannot hold more [sname]." busy = 0 + updateUsrDialog() + return /obj/machinery/r_n_d/circuit_imprinter/proc/addToQueue(var/datum/design/D) queue += D diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index d5237e5a81..60aabdf3f8 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -102,6 +102,8 @@ return if(O.is_open_container()) return 1 + if(istype(O, /obj/item/weapon/gripper/no_use/loader)) + return 0 //Sheet loaders weren't finishing attack(), this prevents the message "You can't stuff that gripper into this" without preventing the rest of the attack sequence from finishing if(panel_open) user << "You can't load \the [src] while it's opened." return 1 @@ -114,35 +116,39 @@ if(stat) return 1 - if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage) - user << "\The [src]'s material bin is full. Please remove material before adding more." - return 1 - - var/obj/item/stack/material/stack = O - var/amount = round(input("How many sheets do you want to add?") as num)//No decimals - if(!O) + var/obj/item/stack/material/S = O + if(!(S.material.name in materials)) + user << "The [src] doesn't accept [S.material]!" return - if(amount <= 0)//No negative numbers - return - if(amount > stack.get_amount()) - amount = stack.get_amount() - if(max_material_storage - TotalMaterials() < (amount * SHEET_MATERIAL_AMOUNT)) //Can't overfill - amount = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT)) - var/stacktype = stack.type + busy = 1 + var/sname = "[S.name]" + var/amnt = S.perunit + var/max_res_amount = max_material_storage + for(var/mat in materials) + max_res_amount -= materials[mat] + + if(materials[S.material.name] + amnt <= max_res_amount) + if(S && S.amount >= 1) + var/count = 0 + overlays += "fab-load-metal" + spawn(10) + overlays -= "fab-load-metal" + while(materials[S.material.name] + amnt <= max_res_amount && S.amount >= 1) + materials[S.material.name] += amnt + S.use(1) + count++ + user << "You insert [count] [sname] into the fabricator." + else + user << "The fabricator cannot hold more [sname]." + busy = 0 + + var/stacktype = S.type var/t = getMaterialName(stacktype) overlays += "protolathe_[t]" spawn(10) overlays -= "protolathe_[t]" - busy = 1 - use_power(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10))) - if(t) - if(do_after(user, 16)) - if(stack.use(amount)) - user << "You add [amount] sheets to \the [src]." - materials[t] += amount * SHEET_MATERIAL_AMOUNT - busy = 0 updateUsrDialog() return diff --git a/html/changelogs/Atermonera - Sheetloader Fix.yml b/html/changelogs/Atermonera - Sheetloader Fix.yml new file mode 100644 index 0000000000..0768be15fd --- /dev/null +++ b/html/changelogs/Atermonera - Sheetloader Fix.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Atermonera + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Sheetloaders can load materials into protolathes and circuit imprinters." + - tweak: "Protolathes and circuit imprinters input materials like autolathes, taking as much of the fed stack as it can."