From 82d9761f1f6f32371c0ee49cf9ce4cb73db8ad2a Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 11 Mar 2015 19:36:51 +0100 Subject: [PATCH 1/3] Fixes notasandwich and flamethrower tablecraft recipes Add a recipe detection to tablecrafting, if you have some of the things required for the recipe (50% of the amount of different things needed, i.e if less than 3 different things in the recipe then you need 1, otherwise 2+), it will now appear in grey in the tablecrafting window. The tablecrafting window will also lists the requirements for each recipes it shows. --- code/modules/crafting/recipes.dm | 4 +- code/modules/crafting/table.dm | 50 ++++++++++++++++++- .../recipes/tablecraft/recipes_sandwich.dm | 2 +- html/changelogs/phil235-TablecraftFix.yml | 6 +++ 4 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 html/changelogs/phil235-TablecraftFix.yml diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index dfc441d15e2..b7583bed928 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -84,10 +84,12 @@ /datum/table_recipe/flamethrower name = "Flamethrower" - result = /obj/item/weapon/flamethrower + result = /obj/item/weapon/flamethrower/full reqs = list(/obj/item/weapon/weldingtool = 1, /obj/item/device/assembly/igniter = 1, /obj/item/stack/rods = 2) + 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..d94e96c7bf8 100644 --- a/code/modules/crafting/table.dm +++ b/code/modules/crafting/table.dm @@ -22,6 +22,17 @@ 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_catalists.len) + catalist_text += ", Catalists:" + for(var/C in R.chem_catalists) + if(ispath(C, /datum/reagent)) + var/datum/reagent/RE = new C + catalist_text += " [R.chem_catalists[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." From 16a0d7bf809f7ba615a7477608b5122ad38ce079 Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 12 Mar 2015 19:58:37 +0100 Subject: [PATCH 2/3] Fix for flamethrower deconstruction. --- code/game/objects/items/weapons/flamethrower.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 558844c688c..9b8494018a8 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -195,9 +195,15 @@ /obj/item/weapon/flamethrower/full/New(var/loc) ..() - weldtool = new /obj/item/weapon/weldingtool(src) + for(var/obj/item/weapon/weldingtool/W in src) + weldtool = W + for(var/obj/item/device/assembly/igniter/I in src) + igniter = I + 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() From 0232afd05d03be95fb6b67079dff6021af6d8cd3 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 15 Mar 2015 00:23:47 +0100 Subject: [PATCH 3/3] Fix typo in catalyst. Fix flamethrower crafting recipe (now only use 1 rod, calls checkparts() to set up the weldingtool and igniter). Fix lack of message when trying to turn on an unsecured welding tool. Fix lack of icon update when clicking plasma tank with empty flamethrower. --- code/game/objects/items/weapons/flamethrower.dm | 10 +++++----- code/game/objects/items/weapons/tanks/tank_types.dm | 1 + code/game/objects/items/weapons/tools.dm | 1 + code/modules/crafting/recipes.dm | 6 +++--- code/modules/crafting/table.dm | 12 ++++++------ 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 9b8494018a8..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,10 +199,6 @@ /obj/item/weapon/flamethrower/full/New(var/loc) ..() - for(var/obj/item/weapon/weldingtool/W in src) - weldtool = W - for(var/obj/item/device/assembly/igniter/I in src) - igniter = I if(!weldtool) weldtool = new /obj/item/weapon/weldingtool(src) weldtool.status = 0 @@ -211,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 b7583bed928..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 @@ -84,10 +84,10 @@ /datum/table_recipe/flamethrower name = "Flamethrower" - result = /obj/item/weapon/flamethrower/full + 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) diff --git a/code/modules/crafting/table.dm b/code/modules/crafting/table.dm index d94e96c7bf8..749648f43fd 100644 --- a/code/modules/crafting/table.dm +++ b/code/modules/crafting/table.dm @@ -17,8 +17,8 @@ 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 @@ -196,12 +196,12 @@ req_text += " [R.reqs[A]] [RE.name]" qdel(RE) - if(R.chem_catalists.len) - catalist_text += ", Catalists:" - for(var/C in R.chem_catalists) + 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_catalists[C]] [RE.name]" + catalist_text += " [R.chem_catalysts[C]] [RE.name]" qdel(RE) if(R.tools.len) tool_text += ", Tools:"