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())