From c79ccbc10330e42742fdfb7b7eab9706e0183bba Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sat, 24 Sep 2022 22:04:02 -0400 Subject: [PATCH 01/10] Adds advanced ore scanner to mining vendor I didn't even realize this was a thing and I doubt many other miners did. --- code/modules/mining/ore_redemption_machine/equipment_vendor.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm index 09e5a692a6..8807e9eeb8 100644 --- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm @@ -99,6 +99,7 @@ EQUIPMENT("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 1200), EQUIPMENT("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 750), EQUIPMENT("Mining Satchel of Holding", /obj/item/weapon/storage/bag/ore/holding, 1500), + EQUIPMENT("Advanced Ore Scanner", /obj/item/weapon/mining_scanner/advanced, 500), ) prize_list["Consumables"] = list( EQUIPMENT("1 Marker Beacon", /obj/item/stack/marker_beacon, 1), From adc941c7000ec8f9705f889770a1df01c2fdad5b Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 00:43:13 -0400 Subject: [PATCH 02/10] Makes ore boxes, bags, and the processing machine use lists. - Makes Ore boxes, ore bags, and the processing machine all use lists. Previously, ore boxes would constantly add ore to the contents of the ore box. This meant that if a miner was constantly adding ore to a crate that has thousands of ores in its contents list, the contents list would be updated numerous times in succession. Updating a list with 10000 ore 25 times in a single tick makes the server cry. Making it use lists completely eliminates this problem and makes the entire process of ore more efficient. It simply adds the amount of ores to a list and transfers them between satchel/bag/processing machine. Using lists means the infinite mining satchel can actually be infinite without worries of constantly dropping & picking up ore and lagging the server. This has been tested and works. The only problem however is that I need to figure out a way to make mining bags able to know if they're full or not. Currently they can hold an infinite value of ores. --- .../objects/items/weapons/storage/bags.dm | 69 +++++++++++------- .../mining/machinery/machine_processing.dm | 16 ++-- code/modules/mining/ore_box.dm | 73 ++++++++++++------- 3 files changed, 99 insertions(+), 59 deletions(-) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index a31e8f462b..3e7c63e711 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 a4644035d9..1b06da1422 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 9fddd03e21..b2930992ab 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 From 76c7b3f003fe1341d0745c55ffe43c0cde4c54d4 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 01:20:55 -0400 Subject: [PATCH 03/10] Makes the mining drill use lists. Updates some ore names. Uses the same magical anti-lag lists as the other mining items! Some mining drill items had incorrect names, such as glass being 'silicates' which isn't an ore, which is essential for this change. This changes that. This is purely a name change and users won't see anything different. Also removed rutile as it was duplicated in the list. Presumably due to Polaris adding rutile and it never being removed. --- .../objects/items/weapons/storage/bags.dm | 1 - code/modules/mining/drilling/drill.dm | 66 ++++++++++++++++--- code/modules/mining/drilling/scanner.dm | 4 +- .../mining/machinery/machine_processing.dm | 1 - code/modules/mining/mine_turfs.dm | 2 +- code/modules/mining/ore_box.dm | 1 - code/modules/random_map/noise/ore.dm | 6 +- maps/expedition_vr/aerostat/_aerostat.dm | 6 +- 8 files changed, 66 insertions(+), 21 deletions(-) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 3e7c63e711..6db9ef64e8 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -112,7 +112,6 @@ "silver" = 0, "gold" = 0, "marble" = 0, - "rutile" = 0, "uranium" = 0, "diamond" = 0, "platinum" = 0, diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 0baa14a790..ed438e6fbe 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -20,6 +20,28 @@ var/drill_range = 5 var/offset = 2 + 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, + "uranium" = 0, + "diamond" = 0, + "platinum" = 0, + "lead" = 0, + "mhydrogen" = 0, + "verdantium" = 0, + "rutile" = 0) + var/list/ore_types = list( "hematite" = /obj/item/weapon/ore/iron, "uranium" = /obj/item/weapon/ore/uranium, @@ -27,9 +49,9 @@ "silver" = /obj/item/weapon/ore/silver, "diamond" = /obj/item/weapon/ore/diamond, "phoron" = /obj/item/weapon/ore/phoron, - "osmium" = /obj/item/weapon/ore/osmium, - "hydrogen" = /obj/item/weapon/ore/hydrogen, - "silicates" = /obj/item/weapon/ore/glass, + "platinum" = /obj/item/weapon/ore/osmium, + "mhydrogen" = /obj/item/weapon/ore/hydrogen, + "sand" = /obj/item/weapon/ore/glass, "carbon" = /obj/item/weapon/ore/coal, // "copper" = /obj/item/weapon/ore/copper, // "tin" = /obj/item/weapon/ore/tin, @@ -62,6 +84,25 @@ var/need_update_field = 0 var/need_player_check = 0 + +/obj/machinery/mining/drill/examine(mob/user) //Let's inform people about stuff. Let people KNOW how it works. + . = ..() + if(Adjacent(user)) + if(cell) + . += "The drill's cell is [round(cell.percent() )]% charged." + if(charge_use) //Prevention of dividing by 0 errors. + . += "The drill reads that it can mine for [round((cell.charge/charge_use)/60)] more minutes before the cell depletes." + else + . += "The drill has no cell installed." + if(drill_range) + . += "The drill will mine in a range of [drill_range] tiles." + if(harvest_speed) + . += "The drill can mine [harvest_speed] [(harvest_speed == 1)? "ore" : "ores"] a second!" + if(exotic_drilling) + . += "The drill is upgraded and is capable of mining [(exotic_drilling == 1)? "moderately further" : "as deep as possible"]!" + if(capacity && contents.len) //TODO: Replace contents with a list that calculates current value. + . += "The drill currently has [contents.len] capacity taken up and can fit [capacity - contents.len] more ore." + /obj/machinery/mining/drill/Initialize() . = ..() if(ispath(cell)) @@ -69,6 +110,7 @@ default_apply_parts() cell = default_use_hicell() faultreporter = new /obj/item/device/radio/intercom{channels=list("Supply")}(null) + RefreshParts() //This is required to get the cell to register. /obj/machinery/mining/drill/Destroy() qdel_null(faultreporter) @@ -104,7 +146,11 @@ return //Drill through the flooring, if any. - if(istype(get_turf(src), /turf/simulated)) + if(istype(get_turf(src), /turf/simulated/mineral)) + var/turf/simulated/mineral/M = get_turf(src) + M.GetDrilled() + + else if(istype(get_turf(src), /turf/simulated)) var/turf/simulated/T = get_turf(src) T.ex_act(2.0) @@ -154,8 +200,7 @@ harvesting.resources[metal] = 0 for(var/i=1, i <= create_ore, i++) - var/oretype = ore_types[metal] - new oretype(src) + stored_ore[metal]++ //Bugged line. if(!found_resource) // If a drill can't see an advanced material, it will destroy it while going through. harvesting.has_resources = 0 @@ -348,8 +393,11 @@ var/obj/structure/ore_box/B = locate() in orange(1) if(B) - for(var/obj/item/weapon/ore/O in contents) - O.loc = B + for(var/ore in stored_ore) + if(stored_ore[ore] > 0) + var/ore_amount = stored_ore[ore] // How many ores does the satchel have? + B.stored_ore[ore] += ore_amount // Add the ore to the machine. + stored_ore[ore] = 0 // Set the value of the ore in the satchel to 0. to_chat(usr, "You unload the drill's storage cache into the ore box.") else to_chat(usr, "You must move an ore box up to the drill before you can unload it.") @@ -365,7 +413,7 @@ /obj/machinery/mining/brace/examine(mob/user) . = ..() - if(brace_tier > 2) + if(brace_tier >= 3) . += SPAN_NOTICE("The internals of the brace look resilient enough to support a drill by itself.") /obj/machinery/mining/brace/Initialize() diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm index b1427946c9..34c0c2f99c 100644 --- a/code/modules/mining/drilling/scanner.dm +++ b/code/modules/mining/drilling/scanner.dm @@ -41,12 +41,12 @@ var/ore_type switch(metal) - if("silicates", "carbon", "marble", /*"quartz"*/) ore_type = "surface minerals" + if("sand", "carbon", "marble", /*"quartz"*/) ore_type = "surface minerals" if("hematite", /*"tin", "copper", "bauxite",*/ "lead") ore_type = "industrial metals" if("gold", "silver", "rutile") ore_type = "precious metals" if("diamond", /*"painite"*/) ore_type = "precious gems" if("uranium") ore_type = "nuclear fuel" - if("phoron", "osmium", "hydrogen") ore_type = "exotic matter" + if("phoron", "platinum", "mhydrogen") ore_type = "exotic matter" if("verdantium", /*"void opal"*/) ore_type = "anomalous matter" if(ore_type) metals[ore_type] += T.resources[metal] diff --git a/code/modules/mining/machinery/machine_processing.dm b/code/modules/mining/machinery/machine_processing.dm index 1b06da1422..b0930e116b 100644 --- a/code/modules/mining/machinery/machine_processing.dm +++ b/code/modules/mining/machinery/machine_processing.dm @@ -179,7 +179,6 @@ "silver" = 16, "gold" = 18, "marble" = 20, - "rutile" = 20, "uranium" = 30, "diamond" = 50, "platinum" = 40, diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index e36d5ba8c0..ece68c7a08 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -53,7 +53,7 @@ var/list/mining_overlay_cache = list() "phoron" = /obj/item/weapon/ore/phoron, "osmium" = /obj/item/weapon/ore/osmium, "hydrogen" = /obj/item/weapon/ore/hydrogen, - "silicates" = /obj/item/weapon/ore/glass, + "sand" = /obj/item/weapon/ore/glass, "carbon" = /obj/item/weapon/ore/coal, "verdantium" = /obj/item/weapon/ore/verdantium, "marble" = /obj/item/weapon/ore/marble, diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm index b2930992ab..cf205b3d73 100644 --- a/code/modules/mining/ore_box.dm +++ b/code/modules/mining/ore_box.dm @@ -21,7 +21,6 @@ "silver" = 0, "gold" = 0, "marble" = 0, - "rutile" = 0, "uranium" = 0, "diamond" = 0, "platinum" = 0, diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm index 17c10cad1a..8a0b014303 100644 --- a/code/modules/random_map/noise/ore.dm +++ b/code/modules/random_map/noise/ore.dm @@ -48,7 +48,7 @@ continue if(!priority_process) sleep(-1) T.resources = list() - T.resources["silicates"] = rand(3,5) + T.resources["sand"] = rand(3,5) T.resources["carbon"] = rand(3,5) var/current_cell = map[get_map_cell(x,y)] @@ -60,8 +60,8 @@ T.resources["marble"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) T.resources["diamond"] = 0 T.resources["phoron"] = 0 - T.resources["osmium"] = 0 - T.resources["hydrogen"] = 0 + T.resources["platinum"] = 0 + T.resources["mhydrogen"] = 0 T.resources["verdantium"] = 0 T.resources["lead"] = 0 //T.resources["copper"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) diff --git a/maps/expedition_vr/aerostat/_aerostat.dm b/maps/expedition_vr/aerostat/_aerostat.dm index 6bc8ab8522..f2404f2f7e 100644 --- a/maps/expedition_vr/aerostat/_aerostat.dm +++ b/maps/expedition_vr/aerostat/_aerostat.dm @@ -48,7 +48,7 @@ continue if(!priority_process) sleep(-1) T.resources = list() - T.resources["silicates"] = rand(3,5) + T.resources["sand"] = rand(3,5) T.resources["carbon"] = rand(3,5) var/current_cell = map[get_map_cell(x,y)] @@ -60,8 +60,8 @@ T.resources["marble"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) T.resources["diamond"] = 0 T.resources["phoron"] = 0 - T.resources["osmium"] = 0 - T.resources["hydrogen"] = 0 + T.resources["platinum"] = 0 + T.resources["mhydrogen"] = 0 T.resources["verdantium"] = 0 T.resources["lead"] = 0 //T.resources["copper"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) From 8d64ece4e49bb43b0848f4aa92b3067f45eedb6f Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 02:02:33 -0400 Subject: [PATCH 04/10] Fixes the drill --- code/modules/mining/drilling/drill.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index ed438e6fbe..01d1a4772e 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -108,9 +108,7 @@ if(ispath(cell)) cell = new cell(src) default_apply_parts() - cell = default_use_hicell() faultreporter = new /obj/item/device/radio/intercom{channels=list("Supply")}(null) - RefreshParts() //This is required to get the cell to register. /obj/machinery/mining/drill/Destroy() qdel_null(faultreporter) @@ -200,7 +198,7 @@ harvesting.resources[metal] = 0 for(var/i=1, i <= create_ore, i++) - stored_ore[metal]++ //Bugged line. + stored_ore[metal]++ if(!found_resource) // If a drill can't see an advanced material, it will destroy it while going through. harvesting.has_resources = 0 From ead04ced8d69230e7684bc0bc9d87d557725b3ca Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 02:11:12 -0400 Subject: [PATCH 05/10] Minor modifications --- code/game/objects/items/weapons/storage/bags.dm | 7 +++++++ code/modules/mining/ore_box.dm | 1 + 2 files changed, 8 insertions(+) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 6db9ef64e8..13c53b7c18 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -127,6 +127,13 @@ icon_state = "satchel_bspace" max_storage_space = ITEMSIZE_COST_NORMAL * 75 // 3x +/obj/item/weapon/storage/bag/ore/attackby(obj/item/weapon/W as obj, mob/user as mob) + if (istype(W, /obj/item/weapon/ore)) + var/obj/item/weapon/ore/ore = W + stored_ore[ore.material]++ + user.remove_from_mob(W) + qdel(ore) + /obj/item/weapon/storage/bag/ore/remove_from_storage(obj/item/W as obj, atom/new_location) if(!istype(W)) return 0 diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm index cf205b3d73..1e9b75088f 100644 --- a/code/modules/mining/ore_box.dm +++ b/code/modules/mining/ore_box.dm @@ -36,6 +36,7 @@ if (istype(W, /obj/item/weapon/ore)) var/obj/item/weapon/ore/ore = W stored_ore[ore.material]++ + user.remove_from_mob(W) qdel(ore) else if (istype(W, /obj/item/weapon/storage/bag/ore)) From 22f1b561e56cf4b087ddb3002faccba399d321f5 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 03:01:23 -0400 Subject: [PATCH 06/10] A few more changes. Makes bluespace ore satchel better. - Makes the mining satchel pick stuff up a bit differently. - Adds a failsafe for mining satchels so you can't pick up too many items at once. (set to 100) - Makes the bluespace ore satchel ACTUALLY bluespace. - Adds 'current capacity' so ore satchels and mining drills can only hold a certain amount. --- .../objects/items/weapons/storage/bags.dm | 47 ++++++++++++++----- code/modules/mining/drilling/drill.dm | 11 +++-- code/modules/mining/ore_box.dm | 3 +- 3 files changed, 43 insertions(+), 18 deletions(-) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 13c53b7c18..add1253d4f 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -98,6 +98,8 @@ max_storage_space = ITEMSIZE_COST_NORMAL * 25 max_w_class = ITEMSIZE_NORMAL can_hold = list(/obj/item/weapon/ore) + var/current_capacity = 0 + var/max_pickup = 100 //How much ore can be picked up in one go. There to prevent someone from walking on a turf with 10000 ore and making the server cry. var/list/stored_ore = list( "sand" = 0, "hematite" = 0, @@ -125,12 +127,17 @@ name = "mining satchel of holding" desc = "Like a mining satchel, but when you put your hand in, you're pretty sure you can feel time itself." icon_state = "satchel_bspace" - max_storage_space = ITEMSIZE_COST_NORMAL * 75 // 3x + max_storage_space = ITEMSIZE_COST_NORMAL * 15000 // This should never, ever, ever be reached. /obj/item/weapon/storage/bag/ore/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(current_capacity >= max_storage_space) + to_chat(user, "\the [src] is too full to possibly fit anything else inside of it.") + return + if (istype(W, /obj/item/weapon/ore)) var/obj/item/weapon/ore/ore = W stored_ore[ore.material]++ + current_capacity++ user.remove_from_mob(W) qdel(ore) @@ -155,23 +162,39 @@ /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 + var/current_pickup = 0 + var/max_pickup_reached = 0 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 + if(current_capacity >= max_storage_space) + failure = 1 + break + if(current_pickup >= max_pickup) + max_pickup_reached = 1 + break var/obj/item/weapon/ore/ore = O stored_ore[ore.material]++ + current_capacity++ + current_pickup++ 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))) //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. + if(!silent) //Let's do a single check and then do more instead of a bunch at once. + if(success && !failure && !max_pickup_reached) //Picked stuff up, did not reach capacity, did not reach max_pickup. + to_chat(user, "You put everything in [src].") + else if(success && failure)) //Picked stuff up to capacity. + to_chat(user, "You fill the [src].") + else if(success && max_pickup_reached) //Picked stuff up to the max_pickup + to_chat(user, "You fill the [src] with as much as you can grab in one go.") + else //Failed. The bag is full. + 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. //Then let me fix it. ~CL. var/obj/structure/ore_box/OB = user.pulling - OB.attackby(src, user) + for(var/ore in stored_ore) + if(stored_ore[ore] > 0) + var/ore_amount = stored_ore[ore] // How many ores does the satchel have? + OB.stored_ore[ore] += ore_amount // Add the ore to the box + stored_ore[ore] = 0 // Set the value of the ore in the satchel to 0. + current_capacity = 0 // Set the amount of ore in the satchel to 0. + one_go_pickup = 0 /obj/item/weapon/storage/bag/ore/equipped(mob/user) ..() diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 01d1a4772e..ef21299dcd 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -19,6 +19,7 @@ var/obj/item/device/radio/intercom/faultreporter var/drill_range = 5 var/offset = 2 + var/current_capacity = 0 var/list/stored_ore = list( "sand" = 0, @@ -100,8 +101,8 @@ . += "The drill can mine [harvest_speed] [(harvest_speed == 1)? "ore" : "ores"] a second!" if(exotic_drilling) . += "The drill is upgraded and is capable of mining [(exotic_drilling == 1)? "moderately further" : "as deep as possible"]!" - if(capacity && contents.len) //TODO: Replace contents with a list that calculates current value. - . += "The drill currently has [contents.len] capacity taken up and can fit [capacity - contents.len] more ore." + if(capacity && current_capacity) //TODO: Replace contents with a list that calculates current value. + . += "The drill currently has [current_capacity] capacity taken up and can fit [capacity - current_capacity] more ore." /obj/machinery/mining/drill/Initialize() . = ..() @@ -172,7 +173,7 @@ for(var/metal in ore_types) - if(contents.len >= capacity) + if(current_capacity >= capacity) system_error("Insufficient storage space.") active = 0 need_player_check = 1 @@ -198,7 +199,8 @@ harvesting.resources[metal] = 0 for(var/i=1, i <= create_ore, i++) - stored_ore[metal]++ + stored_ore[metal]++ // Adds the ore to the drill. + current_capacity++ // Adds the ore to the drill's capacity. if(!found_resource) // If a drill can't see an advanced material, it will destroy it while going through. harvesting.has_resources = 0 @@ -396,6 +398,7 @@ var/ore_amount = stored_ore[ore] // How many ores does the satchel have? B.stored_ore[ore] += ore_amount // Add the ore to the machine. stored_ore[ore] = 0 // Set the value of the ore in the satchel to 0. + current_capacity = 0 // Set the amount of ore in the drill to 0. to_chat(usr, "You unload the drill's storage cache into the ore box.") else to_chat(usr, "You must move an ore box up to the drill before you can unload it.") diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm index 1e9b75088f..98e8aa5dea 100644 --- a/code/modules/mining/ore_box.dm +++ b/code/modules/mining/ore_box.dm @@ -29,8 +29,6 @@ "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)) @@ -47,6 +45,7 @@ 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. + S.current_capacity = 0 // Set the amount of ore in the satchel to 0. to_chat(user, "You empty the satchel into the box.") return From c0d16b7d184334a0b3f1f1ecedffba607da9d5ae Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 03:03:33 -0400 Subject: [PATCH 07/10] whoops forgot a ) and left in previous var name --- code/game/objects/items/weapons/storage/bags.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index add1253d4f..ee28f497b6 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -180,7 +180,7 @@ if(!silent) //Let's do a single check and then do more instead of a bunch at once. if(success && !failure && !max_pickup_reached) //Picked stuff up, did not reach capacity, did not reach max_pickup. to_chat(user, "You put everything in [src].") - else if(success && failure)) //Picked stuff up to capacity. + else if(success && failure) //Picked stuff up to capacity. to_chat(user, "You fill the [src].") else if(success && max_pickup_reached) //Picked stuff up to the max_pickup to_chat(user, "You fill the [src] with as much as you can grab in one go.") @@ -194,7 +194,7 @@ OB.stored_ore[ore] += ore_amount // Add the ore to the box stored_ore[ore] = 0 // Set the value of the ore in the satchel to 0. current_capacity = 0 // Set the amount of ore in the satchel to 0. - one_go_pickup = 0 + current_pickup = 0 /obj/item/weapon/storage/bag/ore/equipped(mob/user) ..() From be7dc9dc4d47ac94161a98070f6f79dca089c3db Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 03:32:04 -0400 Subject: [PATCH 08/10] Adds ore chunks --- .../mining/machinery/machine_processing.dm | 10 ++++ .../mining/machinery/machine_unloading.dm | 14 +++--- code/modules/mining/ore.dm | 46 +++++++++++++++++++ 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/code/modules/mining/machinery/machine_processing.dm b/code/modules/mining/machinery/machine_processing.dm index b0930e116b..c6a3d35ddf 100644 --- a/code/modules/mining/machinery/machine_processing.dm +++ b/code/modules/mining/machinery/machine_processing.dm @@ -243,6 +243,16 @@ 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. + + for(var/obj/item/ore_chunk/ore_chunk in input.loc) //Special ore chunk item. For conveyor belt. Completely unneeded but keeps asthetics. + for(var/ore in ore_chunk.stored_ore) + if(ore_chunk.stored_ore[ore] > 0) + var/ore_amount = ore_chunk.stored_ore[ore] + ores_stored[ore] += ore_amount + points += (ore_values[ore]*points_mult*ore_amount) + ore_chunk.stored_ore[ore] = 0 + qdel(ore_chunk) + if(!active) return diff --git a/code/modules/mining/machinery/machine_unloading.dm b/code/modules/mining/machinery/machine_unloading.dm index ed609e4dfa..bbdd80e3d3 100644 --- a/code/modules/mining/machinery/machine_unloading.dm +++ b/code/modules/mining/machinery/machine_unloading.dm @@ -39,12 +39,14 @@ if (locate(/obj/structure/ore_box, input.loc)) var/obj/structure/ore_box/BOX = locate(/obj/structure/ore_box, input.loc) var/i = 0 - for (var/obj/item/weapon/ore/O in BOX.contents) - BOX.contents -= O - O.loc = output.loc - i++ - if (i>=10) - return + for (var/ore in BOX.stored_ore) + if(BOX.stored_ore[ore] > 0) + var/obj/item/ore_chunk/ore_chunk = new /obj/item/ore_chunk(src.output.loc) + var/ore_amount = BOX.stored_ore[ore] + ore_chunk.stored_ore[ore] += ore_amount + BOX.stored_ore[ore] = 0 + if (i>=3) //Let's make it staggered so it looks like a lot is happening. + return if (locate(/obj/item, input.loc)) var/obj/item/O var/i diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index 4fc2091b03..ffceba6718 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -170,3 +170,49 @@ return ..() //VOREStation Add End + +/obj/item/ore_chunk + name = "ore chunk" + desc = "A conglomerate of ore." + icon = 'icons/obj/xenoarchaeology.dmi' + icon_state = "strange" + randpixel = 8 + w_class = ITEMSIZE_SMALL + 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, + "uranium" = 0, + "diamond" = 0, + "platinum" = 0, + "lead" = 0, + "mhydrogen" = 0, + "verdantium" = 0, + "rutile" = 0) + +/obj/item/ore_chunk/examine(mob/user) + . = ..() + + if(!Adjacent(user)) //Can only check the contents of ore boxes if you can physically reach them. + return . + + add_fingerprint(user) //You pick it up to look at it. + + . += "It is composed of:" + 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. You should contact a developer." \ No newline at end of file From 300a6f243b111c1aaeeb1a91a72d87e521352523 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 03:56:16 -0400 Subject: [PATCH 09/10] Makes ore chunks have better sprites. --- .../mining/machinery/machine_unloading.dm | 46 ++++++++++++++++++ code/modules/mining/ore.dm | 2 +- icons/obj/mining_ore_vr.dmi | Bin 0 -> 10430 bytes 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 icons/obj/mining_ore_vr.dmi diff --git a/code/modules/mining/machinery/machine_unloading.dm b/code/modules/mining/machinery/machine_unloading.dm index bbdd80e3d3..91fc8f3fde 100644 --- a/code/modules/mining/machinery/machine_unloading.dm +++ b/code/modules/mining/machinery/machine_unloading.dm @@ -45,6 +45,52 @@ var/ore_amount = BOX.stored_ore[ore] ore_chunk.stored_ore[ore] += ore_amount BOX.stored_ore[ore] = 0 + + //Icon code here. Going from most to least common. + if(ore == "sand") + ore_chunk.icon_state = "ore_glass" + else if(ore == "carbon") + ore_chunk.icon_state = "ore_coal" + else if(ore == "hematite") + ore_chunk.icon_state = "ore_iron" + else if(ore == "phoron") + ore_chunk.icon_state = "ore_phoron" + else if(ore == "silver") + ore_chunk.icon_state = "ore_silver" + else if(ore == "gold") + ore_chunk.icon_state = "ore_gold" + else if(ore == "uranium") + ore_chunk.icon_state = "ore_uranium" + else if(ore == "diamond") + ore_chunk.icon_state = "ore_diamond" + else if(ore == "platinum") + ore_chunk.icon_state = "ore_platinum" + else if(ore == "marble") + ore_chunk.icon_state = "ore_marble" + else if(ore == "lead") + ore_chunk.icon_state = "ore_lead" + else if(ore == "rutile") + ore_chunk.icon_state = "ore_rutile" + else if(ore == "quartz") + ore_chunk.icon_state = "ore_quartz" + else if(ore == "mhydrogen") + ore_chunk.icon_state = "ore_hydrogen" + else if(ore == "verdantium") + ore_chunk.icon_state = "ore_verdantium" + else if(ore == "raw copper") + ore_chunk.icon_state = "ore_copper" + else if(ore == "raw tin") + ore_chunk.icon_state = "ore_tin" + else if(ore == "void opal") + ore_chunk.icon_state = "ore_void_opal" + else if(ore == "raw bauxite") + ore_chunk.icon_state = "ore_bauxite" + else if(ore == "painite") + ore_chunk.icon_state = "ore_painite" + else + ore_chunk.icon_state = "boulder[rand(1,4)]" + + if (i>=3) //Let's make it staggered so it looks like a lot is happening. return if (locate(/obj/item, input.loc)) diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index ffceba6718..3ceab8f7f9 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -174,7 +174,7 @@ /obj/item/ore_chunk name = "ore chunk" desc = "A conglomerate of ore." - icon = 'icons/obj/xenoarchaeology.dmi' + icon = 'icons/obj/mining_ore_vr.dmi' icon_state = "strange" randpixel = 8 w_class = ITEMSIZE_SMALL diff --git a/icons/obj/mining_ore_vr.dmi b/icons/obj/mining_ore_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cea068ac708f9b2390d9b1442cf024f0032fec73 GIT binary patch literal 10430 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 Date: Sun, 25 Sep 2022 03:58:04 -0400 Subject: [PATCH 10/10] NOT TODO ANYMORE --- code/modules/mining/drilling/drill.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index ef21299dcd..c788be2bb8 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -101,7 +101,7 @@ . += "The drill can mine [harvest_speed] [(harvest_speed == 1)? "ore" : "ores"] a second!" if(exotic_drilling) . += "The drill is upgraded and is capable of mining [(exotic_drilling == 1)? "moderately further" : "as deep as possible"]!" - if(capacity && current_capacity) //TODO: Replace contents with a list that calculates current value. + if(capacity && current_capacity) . += "The drill currently has [current_capacity] capacity taken up and can fit [capacity - current_capacity] more ore." /obj/machinery/mining/drill/Initialize()