diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index a31e8f462b9..3e7c63e711b 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -98,7 +98,28 @@ max_storage_space = ITEMSIZE_COST_NORMAL * 25 max_w_class = ITEMSIZE_NORMAL can_hold = list(/obj/item/weapon/ore) - var/stored_ore = list() + var/list/stored_ore = list( + "sand" = 0, + "hematite" = 0, + "carbon" = 0, + "raw copper" = 0, + "raw tin" = 0, + "void opal" = 0, + "painite" = 0, + "quartz" = 0, + "raw bauxite" = 0, + "phoron" = 0, + "silver" = 0, + "gold" = 0, + "marble" = 0, + "rutile" = 0, + "uranium" = 0, + "diamond" = 0, + "platinum" = 0, + "lead" = 0, + "mhydrogen" = 0, + "verdantium" = 0, + "rutile" = 0) var/last_update = 0 /obj/item/weapon/storage/bag/ore/holding @@ -128,21 +149,23 @@ /obj/item/weapon/storage/bag/ore/gather_all(turf/T as turf, mob/user as mob, var/silent = 0) var/success = 0 var/failure = 0 - for(var/obj/item/weapon/ore/I in T) //Only ever grabs ores. Doesn't do any extraneous checks, as all ore is the same size. Tons of checks means it causes hanging for up to three seconds. - if(contents.len >= max_storage_space) - failure = 1 - break - I.forceMove(src) + for(var/obj/item/weapon/ore/O in T) //Only ever grabs ores. Doesn't do any extraneous checks, as all ore is the same size. Tons of checks means it causes hanging for up to three seconds. + //if(contents.len >= max_storage_space) //TODO: Find a good way of having it hold a maximum amount of ore. + // failure = 1 + // break + var/obj/item/weapon/ore/ore = O + stored_ore[ore.material]++ + qdel(ore) success = 1 if(success && !failure && !silent) to_chat(user, "You put everything in [src].") - else if(success && (!silent || (silent && contents.len >= max_storage_space))) - to_chat(user, "You fill the [src].") + //else if(success && (!silent || (silent && contents.len >= max_storage_space))) //TODO: Find a good way of having it hold a maximum amount of ore. + // to_chat(user, "You fill the [src].") else if(!silent) to_chat(user, "You fail to pick anything up with \the [src].") if(istype(user.pulling, /obj/structure/ore_box)) //Bit of a crappy way to do this, as it doubles spam for the user, but it works. - var/obj/structure/ore_box/O = user.pulling - O.attackby(src, user) + var/obj/structure/ore_box/OB = user.pulling + OB.attackby(src, user) /obj/item/weapon/storage/bag/ore/equipped(mob/user) ..() @@ -175,24 +198,20 @@ if(istype(user, /mob/living)) add_fingerprint(user) - if(!contents.len) - . += "It is empty." - - else if(world.time > last_update + 10) - update_ore_count() - last_update = world.time - - . += "It holds:" - for(var/ore in stored_ore) + . += "It holds:" + var/has_ore = 0 + for(var/ore in stored_ore) + if(stored_ore[ore] > 0) . += "- [stored_ore[ore]] [ore]" + has_ore = 1 + if(!has_ore) + . += "Nothing." /obj/item/weapon/storage/bag/ore/open(mob/user as mob) //No opening it for the weird UI of having shit-tons of ore inside it. - if(world.time > last_update + 10) - update_ore_count() - last_update = world.time - user.examinate(src) + user.examinate(src) -/obj/item/weapon/storage/bag/ore/proc/update_ore_count() //Stolen from ore boxes. +/* +/obj/item/weapon/storage/bag/ore/proc/update_ore_count() //Stolen from ore boxes. OLD way of storing ore. stored_ore = list() @@ -201,7 +220,7 @@ stored_ore[O.name]++ else stored_ore[O.name] = 1 - +*/ // ----------------------------- // Plant bag // ----------------------------- diff --git a/code/modules/mining/machinery/machine_processing.dm b/code/modules/mining/machinery/machine_processing.dm index a4644035d99..1b06da1422c 100644 --- a/code/modules/mining/machinery/machine_processing.dm +++ b/code/modules/mining/machinery/machine_processing.dm @@ -69,7 +69,7 @@ else data["has_id"] = FALSE - + var/list/ores = list() for(var/ore in machine.ores_processing) if(!machine.ores_stored[ore] && !show_all_ores) @@ -194,7 +194,7 @@ var/ore/OD = GLOB.ore_data[ore] ores_processing[OD.name] = 0 ores_stored[OD.name] = 0 - + // TODO - Eschew input/output machinery and just use dirs ~Leshana //Locate our output and input machinery. for (var/dir in cardinal) @@ -236,11 +236,13 @@ var/list/tick_alloys = list() //Grab some more ore to process this tick. - for(var/obj/item/weapon/ore/O in input.loc) - if(!isnull(ores_stored[O.material])) - ores_stored[O.material]++ - points += (ore_values[O.material]*points_mult) // Give Points! VOREStation Edit - or give lots of points! or less points! or no points! - qdel(O) + for(var/obj/structure/ore_box/OB in input.loc) + for(var/ore in OB.stored_ore) + if(OB.stored_ore[ore] > 0) + var/ore_amount = OB.stored_ore[ore] // How many ores does the box have? + ores_stored[ore] += ore_amount // Add the ore to the machine. + points += (ore_values[ore]*points_mult*ore_amount) // Give Points! VOREStation Edit - or give lots of points! or less points! or no points! + OB.stored_ore[ore] = 0 // Set the value of the ore in the box to 0. if(!active) return diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm index 9fddd03e213..b2930992abe 100644 --- a/code/modules/mining/ore_box.dm +++ b/code/modules/mining/ore_box.dm @@ -7,27 +7,52 @@ desc = "A heavy box used for storing ore." density = TRUE var/last_update = 0 - var/list/stored_ore = list() + var/list/stored_ore = list( + "sand" = 0, + "hematite" = 0, + "carbon" = 0, + "raw copper" = 0, + "raw tin" = 0, + "void opal" = 0, + "painite" = 0, + "quartz" = 0, + "raw bauxite" = 0, + "phoron" = 0, + "silver" = 0, + "gold" = 0, + "marble" = 0, + "rutile" = 0, + "uranium" = 0, + "diamond" = 0, + "platinum" = 0, + "lead" = 0, + "mhydrogen" = 0, + "verdantium" = 0, + "rutile" = 0) + + var/list/contained_resources = list() //A list of the ore inside. This is done to reduce lag. + /obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/ore)) - user.remove_from_mob(W) - src.contents += W + var/obj/item/weapon/ore/ore = W + stored_ore[ore.material]++ + qdel(ore) - else if (istype(W, /obj/item/weapon/storage)) - var/obj/item/weapon/storage/S = W - if(!S.contents.len) - return + else if (istype(W, /obj/item/weapon/storage/bag/ore)) + var/obj/item/weapon/storage/bag/ore/S = W S.hide_from(user) - for(var/obj/item/weapon/ore/O in S.contents) - S.remove_from_storage(O, src) //This will move the item to this item's contents + for(var/ore in S.stored_ore) + if(S.stored_ore[ore] > 0) + var/ore_amount = S.stored_ore[ore] // How many ores does the satchel have? + stored_ore[ore] += ore_amount // Add the ore to the machine. + S.stored_ore[ore] = 0 // Set the value of the ore in the satchel to 0. to_chat(user, "You empty the satchel into the box.") - update_ore_count() - return -/obj/structure/ore_box/proc/update_ore_count() +/* +/obj/structure/ore_box/proc/update_ore_count() //OLD way of storing ore. Comment this out once done. stored_ore = list() @@ -37,7 +62,7 @@ stored_ore[O.name]++ else stored_ore[O.name] = 1 - +*/ /obj/structure/ore_box/examine(mob/user) . = ..() @@ -46,19 +71,16 @@ add_fingerprint(user) - if(!contents.len) - . += "It is empty." - return . - - if(world.time > last_update + 10) - update_ore_count() - last_update = world.time - . += "It holds:" + var/has_ore = 0 for(var/ore in stored_ore) - . += "- [stored_ore[ore]] [ore]" + if(stored_ore[ore] > 0) + . += "- [stored_ore[ore]] [ore]" + has_ore = 1 + if(!has_ore) + . += "Nothing." -// /obj/structure/ore_box/verb/empty_box() +// /obj/structure/ore_box/verb/empty_box() //Servercrash.mov // set name = "Empty Ore Box" // set category = "Object" // set src in view(1) @@ -87,9 +109,6 @@ // return /obj/structure/ore_box/ex_act(severity) - if(severity == 1.0 || (severity < 3.0 && prob(50))) - for (var/obj/item/weapon/ore/O in contents) - O.loc = src.loc - O.ex_act(severity++) + if(severity == 1.0 || (severity == 2.0 && prob(50))) qdel(src) return