diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 558844c688c..3a3e29af17d 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -157,6 +157,10 @@ update_icon() return +/obj/item/weapon/flamethrower/CheckParts() + weldtool = locate(/obj/item/weapon/weldingtool) in contents + igniter = locate(/obj/item/device/assembly/igniter) in contents + update_icon() //Called from turf.dm turf/dblclick /obj/item/weapon/flamethrower/proc/flame_turf(turflist) @@ -195,9 +199,11 @@ /obj/item/weapon/flamethrower/full/New(var/loc) ..() - weldtool = new /obj/item/weapon/weldingtool(src) + if(!weldtool) + weldtool = new /obj/item/weapon/weldingtool(src) weldtool.status = 0 - igniter = new /obj/item/device/assembly/igniter(src) + if(!igniter) + igniter = new /obj/item/device/assembly/igniter(src) igniter.secured = 0 status = 1 update_icon() @@ -205,4 +211,4 @@ /obj/item/weapon/flamethrower/full/tank/New(var/loc) ..() ptank = new /obj/item/weapon/tank/internals/plasma/full(src) - update_icon() \ No newline at end of file + update_icon() diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 870e0115d75..d8934a1372f 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -96,6 +96,7 @@ F.ptank = src user.unEquip(src) src.loc = F + F.update_icon() return /obj/item/weapon/tank/internals/plasma/full/New() diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index fe4713a37c5..e4266c752f0 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -308,6 +308,7 @@ //Toggles the welder off and on /obj/item/weapon/weldingtool/proc/toggle(mob/user, message = 0) if(!status) + user << "[src] can't be turned on while unsecured." return welding = !welding if(welding) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index dfc441d15e2..ef5c30fd07c 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -5,7 +5,7 @@ var/tools[] = list() //type paths of items needed but not consumed var/time = 30 //time in deciseconds var/parts[] = list() //type paths of items that will be placed in the result - var/chem_catalists[] = list() //like tools but for reagents + var/chem_catalysts[] = list() //like tools but for reagents /datum/table_recipe/IED @@ -87,7 +87,9 @@ result = /obj/item/weapon/flamethrower reqs = list(/obj/item/weapon/weldingtool = 1, /obj/item/device/assembly/igniter = 1, - /obj/item/stack/rods = 2) + /obj/item/stack/rods = 1) + parts = list(/obj/item/device/assembly/igniter = 1, + /obj/item/weapon/weldingtool = 1) tools = list(/obj/item/weapon/screwdriver) time = 20 diff --git a/code/modules/crafting/table.dm b/code/modules/crafting/table.dm index 1d4bfa561e9..749648f43fd 100644 --- a/code/modules/crafting/table.dm +++ b/code/modules/crafting/table.dm @@ -17,11 +17,22 @@ if(table_contents[B] >= R.reqs[A]) continue main_loop return 0 - for(var/A in R.chem_catalists) - if(table_contents[A] < R.chem_catalists[A]) + for(var/A in R.chem_catalysts) + if(table_contents[A] < R.chem_catalysts[A]) return 0 return 1 +/obj/structure/table/proc/partial_check_contents(datum/table_recipe/R) + check_table() + var/required_amount = max(round(R.reqs.len/2), 1) + var/amount = 0 + for(var/A in R.reqs) + for(var/B in table_contents) + if(ispath(B, A)) + amount += 1 + if(amount >= required_amount) + return 1 + /obj/structure/table/proc/check_table() table_contents = list() for(var/obj/item/I in loc) @@ -164,11 +175,46 @@ dat += "Crafting in progress..." else for(var/datum/table_recipe/R in table_recipes) + var/name_text = "" + var/req_text = "" + var/tool_text = "" + var/catalist_text = "" if(check_contents(R)) - dat += "[R.name]
" + name_text ="[R.name]" + + else if(partial_check_contents(R)) + name_text = "[R.name]" + + if(name_text) + for(var/A in R.reqs) + if(ispath(A, /obj)) + var/obj/O = new A + req_text += " [R.reqs[A]] [O.name]" + qdel(O) + if(ispath(A, /datum/reagent)) + var/datum/reagent/RE = new A + req_text += " [R.reqs[A]] [RE.name]" + qdel(RE) + + if(R.chem_catalysts.len) + catalist_text += ", Catalysts:" + for(var/C in R.chem_catalysts) + if(ispath(C, /datum/reagent)) + var/datum/reagent/RE = new C + catalist_text += " [R.chem_catalysts[C]] [RE.name]" + qdel(RE) + if(R.tools.len) + tool_text += ", Tools:" + for(var/O in R.tools) + if(ispath(O, /obj)) + var/obj/T = new O + tool_text += " [R.tools[O]] [T.name]" + qdel(T) + + dat += "[name_text][req_text][tool_text][catalist_text]
" dat += "" - var/datum/browser/popup = new(user, "table", "Table", 300, 300) + var/datum/browser/popup = new(user, "table", "Table", 500, 500) popup.set_content(dat) popup.open() return diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_sandwich.dm index 41aa0f936e6..57e1a1f6614 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_sandwich.dm +++ b/code/modules/food&drinks/recipes/tablecraft/recipes_sandwich.dm @@ -52,7 +52,7 @@ name = "Not a sandwich" reqs = list( /obj/item/weapon/reagent_containers/food/snacks/breadslice/plain = 2, - /obj/item/clothing/mask/fakemoustache + /obj/item/clothing/mask/fakemoustache = 1 ) result = /obj/item/weapon/reagent_containers/food/snacks/notasandwich diff --git a/html/changelogs/phil235-TablecraftFix.yml b/html/changelogs/phil235-TablecraftFix.yml new file mode 100644 index 00000000000..123f9e75f55 --- /dev/null +++ b/html/changelogs/phil235-TablecraftFix.yml @@ -0,0 +1,6 @@ +author: phil235 + +delete-after: True + +changes: + - rscadd: "The tablecrafting window now also shows partial recipes in grey, if there's some of the things required for the recipe on the table. Recipe requirements are now also shown next to the names of recipes listed in the window."