diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm
index 694f27d7684..374739f542d 100644
--- a/code/controllers/verbs.dm
+++ b/code/controllers/verbs.dm
@@ -28,7 +28,7 @@
return
-/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras","Garbage"))
+/client/proc/debug_controller(controller in list("Master","Failsafe","Ticker","Lighting","Air","Jobs","Sun","Radio","Supply Shuttle","Emergency Shuttle","Configuration","pAI", "Cameras","Garbage", "Crafting"))
set category = "Debug"
set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
@@ -77,5 +77,8 @@
if("Cameras")
debug_variables(cameranet)
feedback_add_details("admin_verb","DCameras")
+ if("Crafting")
+ debug_variables(crafting_master)
+ feedback_add_details("admin_verb","DCrafting")
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
return
diff --git a/code/datums/crafting.dm b/code/datums/crafting.dm
index 21c187095fc..1aaf8e1a98c 100644
--- a/code/datums/crafting.dm
+++ b/code/datums/crafting.dm
@@ -1,4 +1,4 @@
-var/global/datum/crafting_controller/crafting_master = new()
+var/global/datum/crafting_controller/crafting_master
/datum/crafting_recipe
var/name = ""
@@ -11,7 +11,8 @@ var/global/datum/crafting_controller/crafting_master = new()
var/can_be_deconstructed = 0
/datum/crafting_recipe/New()
- crafting_master.all_crafting_recipes.Add(src)
+ spawn(10)
+ crafting_master.all_crafting_recipes |= src
//////////////////////////////////////
// //
@@ -112,8 +113,7 @@ var/global/datum/crafting_controller/crafting_master = new()
var/list/all_crafting_recipes = list()
/datum/crafting_controller/New()
- for(var/datum/crafting_recipe/A in typesof(/datum/crafting_recipe))
- all_crafting_recipes.Add(new A())
+ init_subtypes(/datum/crafting_recipe, all_crafting_recipes)
/datum/crafting_controller/proc/add_family(name, list/members)
var/list/family = members
@@ -150,7 +150,9 @@ var/global/datum/crafting_controller/crafting_master = new()
/datum/crafting_holder/New(atom/location)
location.craft_holder = src
- crafting_master.all_crafting_points |= src
+ holder = location
+ spawn(10)
+ crafting_master.all_crafting_points |= src
/datum/crafting_holder/proc/add_recipe(recipe)
recipes |= recipe
@@ -189,8 +191,7 @@ var/global/datum/crafting_controller/crafting_master = new()
qdel(target)
return result
-/datum/crafting_holder/proc/check_contents(datum/crafting_recipe/R)
- var/list/holder_contents = check_holder()
+/datum/crafting_holder/proc/check_contents(datum/crafting_recipe/R, list/holder_contents)
main_loop:
for(var/A in R.reqs)
for(var/B in holder_contents)
@@ -242,11 +243,11 @@ var/global/datum/crafting_controller/crafting_master = new()
/datum/crafting_holder/proc/construct_item(mob/user, datum/crafting_recipe/R)
var/list/holder_contents = check_holder()
- if(check_contents(R) && check_tools(user, R))
+ if(check_contents(R, holder_contents) && check_tools(user, R, holder_contents))
if(do_after(user, R.time))
- if(!check_contents(R) || !check_tools(user, R, holder_contents))
+ if(!check_contents(R, holder_contents) || !check_tools(user, R, holder_contents))
return 0
- var/list/parts = del_reqs(R)
+ var/list/parts = del_reqs(R, holder_contents)
var/atom/movable/I = new R.result_path
for(var/A in parts)
if(istype(A, /obj/item))
@@ -323,7 +324,7 @@ var/global/datum/crafting_controller/crafting_master = new()
dat += "Construction inprogress..."
else
for(var/datum/crafting_recipe/R in recipes)
- if(check_contents(R))
+ if(check_contents(R, holder_contents))
dat += "[R.name]
"
dat += ""
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 4c820f9d738..f2a71b9675b 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -39,8 +39,9 @@
update_icon()
update_adjacent()
- craft_holder = new craft_holder()
- craft_holder.recipes = crafting_master.all_crafting_recipes
+ craft_holder = new /datum/crafting_holder(src)
+ spawn(10)
+ craft_holder.recipes = crafting_master.all_crafting_recipes
/obj/structure/table/Destroy()
update_adjacent()
@@ -54,6 +55,7 @@
/obj/structure/table/MouseDrop(atom/over)
if(usr.stat || usr.lying || !Adjacent(usr) || (over != usr))
return
+ world << "craft holder interact is attempting to be called"
craft_holder.interact(usr)
/obj/structure/table/update_icon()
diff --git a/code/world.dm b/code/world.dm
index 6a6bcea9210..06afee0a5f7 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -56,6 +56,7 @@
sun = new /datum/sun()
radio_controller = new /datum/controller/radio()
data_core = new /obj/effect/datacore()
+ crafting_master = new /datum/crafting_controller()
paiController = new /datum/paiController()
if(!setup_database_connection())