From 04e66db3e211a9e6124018ba0980707d7986fc98 Mon Sep 17 00:00:00 2001 From: "baloh.matevz" Date: Sat, 12 Feb 2011 00:58:46 +0000 Subject: [PATCH] CRAFT LATHE added not to be used yet, as it's still a WIP git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1022 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/mining.dm | 191 ++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) diff --git a/code/WorkInProgress/mining.dm b/code/WorkInProgress/mining.dm index 5e86668978e..19d98d1e8d8 100644 --- a/code/WorkInProgress/mining.dm +++ b/code/WorkInProgress/mining.dm @@ -1,3 +1,194 @@ +/*********************NEW AUTOLATHE / CRAFT LATHE***********************/ + +var/list/datum/craftlathe_item/CRAFT_ITEMS = list() +var/CRAFT_ITEMS_SETUP = 1 //this should probably be a pre-game thing, but i'll do it so the first lathe2 that's created will set-up the recipes. + +proc/check_craftlathe_recipe(var/list/param_recipe) + if(param_recipe.len != 9) + return + var/i + var/match = 0 //this one counts if there is at least one non-"" ingredient. + for(var/datum/craftlathe_item/CI in CRAFT_ITEMS) + match = 0 + for(i = 1; i <= 9; i++) + if(CI.recipe[i] != param_recipe[i]) + match = 0 //use this so it passes by the match > 0 check below, otherwise i'd need a new variable to tell the return CI below that the check failed + break + if(CI.recipe[i] != "") + match++ + if(match > 0) + return CI + return 0 + +/datum/craftlathe_item + var/id = "" //must be unique for each item type. used to create recipes + var/name = "unknown" //what the lathe will show as it's contents + var/list/recipe = list("","","","","","","","","") //the 9 items here represent what items need to be placed in the lathe to produce this item. + var/item_type = null //this is used on items like sheets which are added when inserted into the lathe. + var/amount = 1 + var/amount_attackby = 1 + +/datum/craftlathe_item/New(var/param_id,var/param_name,var/param_amount,var/param_ammount_per_attackby,var/list/param_recipe,var/param_type = null) + ..() + world << "ADDING [param_name]" + id = param_id + name = param_name + recipe = param_recipe + item_type = param_type + amount = param_amount; + amount_attackby = param_ammount_per_attackby + world << "SUCCESSFULLY ADDED [name]" + return + +//this proc checks the recipe you give in it's parameter with the entire list of available items. If any match, it returns the item from CRAFT_ITEMS. the returned item should not be changed!! + +/obj/machinery/autolathe2 + name = "Craft lathe" + icon_state = "autolathe" + density = 1 + anchored = 1 + var/datum/craftlathe_item/selected = null + var/datum/craftlathe_item/make = null + var/list/datum/craftlathe_item/craft_contents = list() + var/list/current_recipe = list("","","","","","","","","") + +/obj/machinery/autolathe2/New() + ..() + if(CRAFT_ITEMS_SETUP) + CRAFT_ITEMS_SETUP = 0 + build_recipes() + return + +/obj/machinery/autolathe2/attack_hand(mob/user as mob) + var/dat + dat = text("

Craft Lathe

") + dat += text("
") + + dat += text("Materials

") + var/datum/craftlathe_item/CI + var/i + for(i = 1; i <= craft_contents.len; i++) + CI = craft_contents[i] + if (CI == selected) + dat += text("[CI.name] ([CI.amount])
") + else + dat += text("[CI.name] ([CI.amount])
") + + dat += text("

") + + dat += text("Crafting Table

") + + dat += text(" ") + + var/j = 0 + var/k = 0 + for (i = 0; i < 3; i++) + dat += text(" ") + for (j = 1; j <= 3; j++) + k = i * 3 + j + if (current_recipe[k]) + dat += text(" ") + else + dat += text(" ") + dat += text(" ") + dat += text("
[current_recipe[k]]----
") + + dat += text("

") + dat += text("Will make: ") + if (make) + dat += text("[make.name]") + else + dat += text("nothing useful") + + dat += text("

") + user << browse("[dat]", "window=craft") + +/obj/machinery/autolathe2/Topic(href, href_list) + if(..()) + return + usr.machine = src + src.add_fingerprint(usr) + if(href_list["remove"]) + var/n = text2num(href_list["remove"]) + if(!n || n < 1 || n > 9) + return + current_recipe[n] = "" + if(href_list["select"]) + var/n = text2num(href_list["select"]) + if(!n || n < 1 || n > 9) + return + selected = craft_contents[n] + if(href_list["add"]) + var/n = text2num(href_list["add"]) + if(!n || n < 1 || n > 9) + return + if(selected) + current_recipe[n] = selected.id + if(href_list["make"]) + var/datum/craftlathe_item/MAKE = check_craftlathe_recipe(src.current_recipe) + if(MAKE) + for (var/datum/craftlathe_item/CI2 in craft_contents) + if(CI2.id == MAKE.id) + CI2.amount += CI2.amount_attackby + src.updateUsrDialog() + return + craft_contents += new/datum/craftlathe_item(MAKE.id,MAKE.name,MAKE.amount,MAKE.amount_attackby,MAKE.recipe,MAKE.item_type) + var/datum/craftlathe_item/CI = check_craftlathe_recipe(src.current_recipe) + if(CI) + make = CI + else + make = null + src.updateUsrDialog() + + + +/obj/machinery/autolathe2/attackby(obj/item/weapon/W as obj, mob/user as mob) + usr.machine = src + src.add_fingerprint(usr) + for (var/datum/craftlathe_item/CI in CRAFT_ITEMS) + if(W.type == CI.item_type) + for (var/datum/craftlathe_item/CI2 in craft_contents) + if(CI2.item_type == W.type) + CI2.amount += CI2.amount_attackby + rmv_item(W) + return + craft_contents += new/datum/craftlathe_item(CI.id,CI.name,CI.amount,CI.amount_attackby,CI.recipe,CI.item_type) + rmv_item(W) + return + src.updateUsrDialog() + return + +/obj/machinery/autolathe2/proc/rmv_item(obj/item/W as obj) + if(istype(W,/obj/item/stack)) + var/obj/item/stack/S = W + S.amount-- + if (S.amount <= 0) + del(S) + else + del(W) + +/obj/machinery/autolathe2/proc/build_recipes() + world << "BUILDING RECIPES" + //Parameters: ID, Name, Amount, Amount_added_per_attackby, Recipe, Object type + CRAFT_ITEMS += new/datum/craftlathe_item("METAL","Metal",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/metal) + CRAFT_ITEMS += new/datum/craftlathe_item("GLASS","Glass",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/glass) + CRAFT_ITEMS += new/datum/craftlathe_item("GOLD","Gold",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/gold) + CRAFT_ITEMS += new/datum/craftlathe_item("SILVER","Silver",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/silver) + CRAFT_ITEMS += new/datum/craftlathe_item("DIAMOND","Diamond",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/diamond) + CRAFT_ITEMS += new/datum/craftlathe_item("PLASMA","Plasma",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/plasma) + CRAFT_ITEMS += new/datum/craftlathe_item("URANIUM","Uranium",1,1,list("","","","","","","","",""),/obj/item/weapon/ore/uranium) + CRAFT_ITEMS += new/datum/craftlathe_item("CLOWN","Bananium",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/clown) + CRAFT_ITEMS += new/datum/craftlathe_item("SCREWS","Screws",9,9,list("","","","","METAL","","","METAL","")) + CRAFT_ITEMS += new/datum/craftlathe_item("COGS","Cogs",9,9,list("","METAL","","METAL","METAL","METAL","","METAL","")) + CRAFT_ITEMS += new/datum/craftlathe_item("M SHEET","Metal Sheet",10,10,list("","","","","METAL","METAL","","METAL","METAL")) + CRAFT_ITEMS += new/datum/craftlathe_item("G SHEET","Glass Sheet",10,10,list("","","","","GLASS","GLASS","","GLASS","GLASS")) + CRAFT_ITEMS += new/datum/craftlathe_item("SCREEN","Screen",1,1,list("","GLASS","","GLASS","PLASMA","GLASS","","GLASS","")) + world << "BUILDING RECIPES COMPLETE" + return + + +/*********************MANUALS (BOOKS)***********************/ + /obj/item/weapon/book/manual/engineering_construction name = "Station Repairs and Construction" icon = 'library.dmi'