From ed48ec641cb9d5d34c6fc2e21012ef2f5c13181b Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 4 Aug 2022 17:23:52 -0400 Subject: [PATCH] Labor camp machines - Fixes & Code improvement (#68584) About The Pull Request Visible changes (all the fixes): Labor point checkers now says the prisoner ID's stats rather than being a to_chat, it also displays their info much better. Labor stacker no longer duplicates your points at no cost by attacking the machine with materials, instead it processes it just like it would when sucking materials up. Labor stackers additionally now update their input/outputs when they are rotated through shuttles, as it doesn't work on the current version of Lavaland (there's no issue report up on this yet though, oddly). Adds a check if you actually have a goal before checking if you can send the shuttle up, preventing prisoners who were sent without a point goal (permanently) from being able to go up whenever they wanted by simply clicking on the button before it greyed out. The rest (code improvement): Added more early returns Removed single letter vars Renamed terribly named vars and added comments to some of them. Removed machinedir in favor of checking their view() when syncing machines, as I didn't find checking an entire side of the map next to an object to be very intuitive. Lets Lavaland use labor camp machines again Closes #67764 Just cool general fixes +1 Changelog cl fix: Labor camp Prisoners without a sentence can no longer send themselves back up whenever they wanted by clicking the button fast enough. fix: Prisoners can no longer get infinite labor camp points by clicking the stacking machine with ores. fix: All ore machines now properly change their direction when they dock a shuttle in a separate direction, fixing Lavaland's labor camp stacking machine. qol: Labor camp's point checker now states all the information you need, rather than being a paragraph of text that just appears in chat. /cl --- .../SpaceRuins/hilbertresearchfacility.dmm | 2 - _maps/RandomZLevels/moonoutpost19.dmm | 8 +- _maps/RandomZLevels/undergroundoutpost45.dmm | 8 +- .../map_files/Deltastation/DeltaStation2.dmm | 1 - .../map_files/IceBoxStation/IceBoxStation.dmm | 4 +- _maps/map_files/KiloStation/KiloStation.dmm | 1 - _maps/map_files/MetaStation/MetaStation.dmm | 1 - _maps/map_files/Mining/Lavaland.dmm | 8 +- _maps/shuttles/labour_box.dmm | 2 - _maps/shuttles/labour_delta.dmm | 2 - _maps/shuttles/labour_generic.dmm | 2 - _maps/shuttles/labour_kilo.dmm | 2 - code/modules/mining/laborcamp/laborstacker.dm | 119 +++++++-------- code/modules/mining/machine_processing.dm | 143 +++++++++--------- code/modules/mining/machine_stacking.dm | 8 +- 15 files changed, 145 insertions(+), 166 deletions(-) diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm index 9b1df6b1c97..744ff80b7b9 100644 --- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm +++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm @@ -264,7 +264,6 @@ dir = 8 }, /obj/machinery/mineral/processing_unit_console{ - machinedir = 0; pixel_x = -32 }, /turf/open/floor/mineral/plastitanium, @@ -411,7 +410,6 @@ dir = 8 }, /obj/machinery/mineral/processing_unit_console{ - machinedir = 0; pixel_x = 32 }, /turf/open/floor/mineral/plastitanium, diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 837d0f492d6..353766161ca 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -868,9 +868,7 @@ }, /area/awaymission/moonoutpost19/syndicate) "cD" = ( -/obj/machinery/mineral/processing_unit_console{ - machinedir = 8 - }, +/obj/machinery/mineral/processing_unit_console, /turf/closed/wall, /area/awaymission/moonoutpost19/syndicate) "cE" = ( @@ -1161,9 +1159,7 @@ }, /area/awaymission/moonoutpost19/syndicate) "df" = ( -/obj/machinery/mineral/stacking_unit_console{ - machinedir = 8 - }, +/obj/machinery/mineral/stacking_unit_console, /turf/closed/wall, /area/awaymission/moonoutpost19/syndicate) "dg" = ( diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index 5f2e03eac3f..14e50af667f 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -10775,9 +10775,7 @@ }, /area/awaymission/undergroundoutpost45/mining) "xx" = ( -/obj/machinery/mineral/processing_unit_console{ - machinedir = 8 - }, +/obj/machinery/mineral/processing_unit_console, /turf/closed/wall/rust, /area/awaymission/undergroundoutpost45/mining) "xy" = ( @@ -10915,9 +10913,7 @@ }, /area/awaymission/undergroundoutpost45/mining) "xM" = ( -/obj/machinery/mineral/stacking_unit_console{ - machinedir = 2 - }, +/obj/machinery/mineral/stacking_unit_console, /turf/closed/wall, /area/awaymission/undergroundoutpost45/mining) "xN" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index c23ebb08e9a..8e06479ea48 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -31681,7 +31681,6 @@ /area/station/service/abandoned_gambling_den) "hMn" = ( /obj/machinery/mineral/stacking_unit_console{ - machinedir = 8; pixel_x = 32 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 40d0fd2e775..8cb09905ced 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -60963,9 +60963,7 @@ /turf/open/floor/iron, /area/mine/laborcamp/security) "sJW" = ( -/obj/machinery/mineral/stacking_unit_console{ - machinedir = 8 - }, +/obj/machinery/mineral/stacking_unit_console, /turf/closed/wall, /area/station/maintenance/port/greater) "sKf" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 350a9ee30ee..7fdcae84137 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -65676,7 +65676,6 @@ /obj/effect/landmark/start/janitor, /obj/effect/turf_decal/stripes/line, /obj/machinery/mineral/stacking_unit_console{ - machinedir = 2; pixel_x = 64 }, /obj/structure/cable, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 43b2c54739a..8c83d475dbe 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -11344,7 +11344,6 @@ /area/station/engineering/main) "egO" = ( /obj/machinery/mineral/stacking_unit_console{ - machinedir = 8; pixel_x = 32 }, /obj/effect/turf_decal/stripes/line{ diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 38fc9f9940e..b070a267d8f 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -4373,9 +4373,7 @@ /turf/open/floor/iron, /area/mine/cafeteria) "zJ" = ( -/obj/machinery/mineral/processing_unit_console{ - machinedir = 5 - }, +/obj/machinery/mineral/processing_unit_console, /turf/closed/wall, /area/mine/production) "zK" = ( @@ -5951,9 +5949,7 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Kv" = ( -/obj/machinery/mineral/processing_unit_console{ - machinedir = 2 - }, +/obj/machinery/mineral/processing_unit_console, /turf/closed/wall, /area/mine/laborcamp/production) "Kw" = ( diff --git a/_maps/shuttles/labour_box.dmm b/_maps/shuttles/labour_box.dmm index 747c8dbf2ee..42f439753c7 100644 --- a/_maps/shuttles/labour_box.dmm +++ b/_maps/shuttles/labour_box.dmm @@ -40,7 +40,6 @@ /area/shuttle/labor) "h" = ( /obj/machinery/mineral/stacking_unit_console{ - machinedir = 2; pixel_x = 30; pixel_y = 30 }, @@ -76,7 +75,6 @@ /area/shuttle/labor) "n" = ( /obj/machinery/mineral/labor_claim_console{ - machinedir = 1; pixel_x = 30 }, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/labour_delta.dmm b/_maps/shuttles/labour_delta.dmm index 94a4750f3d1..210fab5eed6 100644 --- a/_maps/shuttles/labour_delta.dmm +++ b/_maps/shuttles/labour_delta.dmm @@ -45,7 +45,6 @@ /area/shuttle/labor) "i" = ( /obj/machinery/mineral/stacking_unit_console{ - machinedir = 2; pixel_x = 30; pixel_y = 30 }, @@ -99,7 +98,6 @@ /area/shuttle/labor) "p" = ( /obj/machinery/mineral/labor_claim_console{ - machinedir = 1; pixel_x = 30 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/labour_generic.dmm b/_maps/shuttles/labour_generic.dmm index a053d9d5fde..bccc8ad5b53 100644 --- a/_maps/shuttles/labour_generic.dmm +++ b/_maps/shuttles/labour_generic.dmm @@ -40,7 +40,6 @@ /area/shuttle/labor) "h" = ( /obj/machinery/mineral/stacking_unit_console{ - machinedir = 2; pixel_x = 30; pixel_y = 30 }, @@ -69,7 +68,6 @@ /area/shuttle/labor) "n" = ( /obj/machinery/mineral/labor_claim_console{ - machinedir = 1; pixel_x = 30 }, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/labour_kilo.dmm b/_maps/shuttles/labour_kilo.dmm index c1da0b198e6..cddc3599a73 100644 --- a/_maps/shuttles/labour_kilo.dmm +++ b/_maps/shuttles/labour_kilo.dmm @@ -57,7 +57,6 @@ /area/shuttle/labor) "h" = ( /obj/machinery/mineral/stacking_unit_console{ - machinedir = 2; pixel_x = 30; pixel_y = 30 }, @@ -134,7 +133,6 @@ /area/shuttle/labor) "n" = ( /obj/machinery/mineral/labor_claim_console{ - machinedir = 1; pixel_x = 30 }, /obj/effect/turf_decal/tile/neutral, diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 31c1e4869f4..ca218ffe297 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -9,16 +9,14 @@ GLOBAL_LIST(labor_sheet_values) icon_state = "console" density = FALSE /// Connected stacking machine - var/obj/machinery/mineral/stacking_machine/laborstacker/stacking_machine = null - /// Direction of the stacking machine - var/machinedir = SOUTH + var/obj/machinery/mineral/stacking_machine/laborstacker/stacking_machine /// Needed to send messages to sec radio - var/obj/item/radio/Radio + var/obj/item/radio/security_radio /obj/machinery/mineral/labor_claim_console/Initialize(mapload) . = ..() - Radio = new /obj/item/radio(src) - Radio.set_listening(FALSE) + security_radio = new /obj/item/radio(src) + security_radio.set_listening(FALSE) locate_stacking_machine() //If we can't find a stacking machine end it all ok? if(!stacking_machine) @@ -26,15 +24,14 @@ GLOBAL_LIST(labor_sheet_values) if(!GLOB.labor_sheet_values) var/sheet_list = list() - for(var/sheet_type in subtypesof(/obj/item/stack/sheet)) - var/obj/item/stack/sheet/sheet = sheet_type - if(!initial(sheet.point_value) || (initial(sheet.merge_type) && initial(sheet.merge_type) != sheet_type)) //ignore no-value sheets and x/fifty subtypes + for(var/obj/item/stack/sheet/sheet as anything in subtypesof(/obj/item/stack/sheet)) + if(!initial(sheet.point_value) || (initial(sheet.merge_type) && initial(sheet.merge_type) != sheet)) //ignore no-value sheets and x/fifty subtypes continue sheet_list += list(list("ore" = initial(sheet.name), "value" = initial(sheet.point_value))) GLOB.labor_sheet_values = sort_list(sheet_list, /proc/cmp_sheet_list) /obj/machinery/mineral/labor_claim_console/Destroy() - QDEL_NULL(Radio) + QDEL_NULL(security_radio) if(stacking_machine) stacking_machine.labor_console = null stacking_machine = null @@ -58,22 +55,22 @@ GLOBAL_LIST(labor_sheet_values) var/list/data = list() var/can_go_home = FALSE - data["emagged"] = FALSE if(obj_flags & EMAGGED) - data["emagged"] = TRUE can_go_home = TRUE - var/obj/item/card/id/I - if(isliving(usr)) - var/mob/living/L = usr - I = L.get_idcard(TRUE) - if(istype(I, /obj/item/card/id/advanced/prisoner)) - var/obj/item/card/id/advanced/prisoner/P = I - data["id_points"] = P.points - if(P.points >= P.goal) + var/obj/item/card/id/worn_id + if(isliving(user)) + var/mob/living/living_user = user + worn_id = living_user.get_idcard(TRUE) + if(istype(worn_id, /obj/item/card/id/advanced/prisoner)) + var/obj/item/card/id/advanced/prisoner/worn_prisoner_id = worn_id + data["id_points"] = worn_prisoner_id.points + if(!worn_prisoner_id.goal) + data["status_info"] = "No goal set!" + else if(worn_prisoner_id.points >= worn_prisoner_id.goal) can_go_home = TRUE data["status_info"] = "Goal met!" else - data["status_info"] = "You are [(P.goal - P.points)] points away." + data["status_info"] = "You are [(worn_prisoner_id.goal - worn_prisoner_id.points)] points away." else data["status_info"] = "No Prisoner ID detected." data["id_points"] = 0 @@ -89,41 +86,45 @@ GLOBAL_LIST(labor_sheet_values) if(.) return - var/mob/M = usr + var/mob/user_mob = usr + switch(action) + if("claim_points") - var/obj/item/card/id/I - if(isliving(M)) - var/mob/living/L = M - I = L.get_idcard(TRUE) - if(istype(I, /obj/item/card/id/advanced/prisoner)) - var/obj/item/card/id/advanced/prisoner/P = I - P.points += stacking_machine.points + var/obj/item/card/id/worn_id + if(isliving(user_mob)) + var/mob/living/living_mob = user_mob + worn_id = living_mob.get_idcard(TRUE) + if(istype(worn_id, /obj/item/card/id/advanced/prisoner)) + var/obj/item/card/id/advanced/prisoner/worn_prisoner_id = worn_id + worn_prisoner_id.points += stacking_machine.points stacking_machine.points = 0 - to_chat(M, span_notice("Points transferred.")) + to_chat(user_mob, span_notice("Points transferred.")) return TRUE else - to_chat(M, span_alert("No valid id for point transfer detected.")) + to_chat(user_mob, span_alert("No valid id for point transfer detected.")) + if("move_shuttle") - if(!alone_in_area(get_area(src), M)) - to_chat(M, span_alert("Prisoners are only allowed to be released while alone.")) + if(!alone_in_area(get_area(src), user_mob)) + to_chat(user_mob, span_alert("Prisoners are only allowed to be released while alone.")) return + switch(SSshuttle.moveShuttle("laborcamp", "laborcamp_home", TRUE)) if(1) - to_chat(M, span_alert("Shuttle not found.")) + to_chat(user_mob, span_alert("Shuttle not found.")) if(2) - to_chat(M, span_alert("Shuttle already at station.")) + to_chat(user_mob, span_alert("Shuttle already at station.")) if(3) - to_chat(M, span_alert("No permission to dock could be granted.")) + to_chat(user_mob, span_alert("No permission to dock could be granted.")) else if(!(obj_flags & EMAGGED)) - Radio.set_frequency(FREQ_SECURITY) - Radio.talk_into(src, "A prisoner has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY) - to_chat(M, span_notice("Shuttle received message and will be sent shortly.")) + security_radio.set_frequency(FREQ_SECURITY) + security_radio.talk_into(src, "A prisoner has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY) + to_chat(user_mob, span_notice("Shuttle received message and will be sent shortly.")) return TRUE /obj/machinery/mineral/labor_claim_console/proc/locate_stacking_machine() - stacking_machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) + stacking_machine = locate(/obj/machinery/mineral/stacking_machine) in view(2, src) if(stacking_machine) stacking_machine.labor_console = src @@ -136,9 +137,11 @@ GLOBAL_LIST(labor_sheet_values) /obj/machinery/mineral/stacking_machine/laborstacker force_connect = TRUE - var/points = 0 //The unclaimed value of ore stacked. - damage_deflection = 21 - var/obj/machinery/mineral/labor_claim_console/labor_console //This is abhorent. I know. + damage_deflection = 21 //otherwise prisoners will destroy it + ///Idle points sitting in the machine left to be claimed. + var/points = 0 + ///Labor claim console synced to our stacking machine, set by the console. + var/obj/machinery/mineral/labor_claim_console/labor_console /obj/machinery/mineral/stacking_machine/laborstacker/Destroy() if(labor_console) @@ -148,12 +151,12 @@ GLOBAL_LIST(labor_sheet_values) /obj/machinery/mineral/stacking_machine/laborstacker/process_sheet(obj/item/stack/sheet/inp) points += inp.point_value * inp.amount - ..() + return ..() -/obj/machinery/mineral/stacking_machine/laborstacker/attackby(obj/item/I, mob/living/user) - if(istype(I, /obj/item/stack/sheet) && user.canUnEquip(I) && !user.combat_mode) - var/obj/item/stack/sheet/inp = I - points += inp.point_value * inp.amount +/obj/machinery/mineral/stacking_machine/laborstacker/attackby(obj/item/weapon, mob/user, params) + if(istype(weapon, /obj/item/stack/sheet)) + process_sheet(weapon) + return return ..() /**********************Point Lookup Console**************************/ @@ -171,15 +174,13 @@ GLOBAL_LIST(labor_sheet_values) return user.examinate(src) -/obj/machinery/mineral/labor_points_checker/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/card/id)) - if(istype(I, /obj/item/card/id/advanced/prisoner)) - var/obj/item/card/id/advanced/prisoner/prisoner_id = I - to_chat(user, span_notice("ID: [prisoner_id.registered_name]")) - to_chat(user, span_notice("Points Collected:[prisoner_id.points]")) - to_chat(user, span_notice("Point Quota: [prisoner_id.goal]")) - to_chat(user, span_notice("Collect points by bringing smelted minerals to the Labor Shuttle stacking machine. Reach your quota to earn your release.")) - else - to_chat(user, span_warning("Error: Invalid ID")) - else +/obj/machinery/mineral/labor_points_checker/attackby(obj/item/weapon, mob/user, params) + if(!istype(weapon, /obj/item/card/id/advanced/prisoner)) return ..() + var/obj/item/card/id/advanced/prisoner/prisoner_id = weapon + if(!prisoner_id.goal) //no goal to reach + say("No goal required for this ID.") + return + say("ID: [prisoner_id.registered_name].") + say("Points Collected: [prisoner_id.points] / [prisoner_id.goal].") + say("Collect points by bringing smelted minerals to the Labor Shuttle stacking machine. Reach your quota to earn your release.") diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 1962aaa0f0a..44efcad0e1f 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -38,6 +38,11 @@ unregister_input_turf() register_input_turf() +/obj/machinery/mineral/shuttleRotate(rotation, params) + . = ..() + input_dir = angle2dir(rotation + dir2angle(input_dir)) + output_dir = angle2dir(rotation + dir2angle(output_dir)) + /** Base proc for all `/mineral` subtype machines to use. Place your item pickup behavior in this proc when you override it for your specific machine. @@ -54,34 +59,34 @@ return /// Generic unloading proc. Takes an atom as an argument and forceMove's it to the turf adjacent to this machine in the `output_dir` direction. -/obj/machinery/mineral/proc/unload_mineral(atom/movable/S) - S.forceMove(drop_location()) - var/turf/T = get_step(src,output_dir) - if(T) - S.forceMove(T) +/obj/machinery/mineral/proc/unload_mineral(atom/movable/unloaded_mineral) + unloaded_mineral.forceMove(drop_location()) + var/turf/unload_turf = get_step(src, output_dir) + if(unload_turf) + unloaded_mineral.forceMove(unload_turf) /obj/machinery/mineral/processing_unit_console name = "production machine console" icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = TRUE - var/obj/machinery/mineral/processing_unit/machine = null - var/machinedir = EAST + /// Connected ore processing machine. + var/obj/machinery/mineral/processing_unit/processing_machine /obj/machinery/mineral/processing_unit_console/Initialize(mapload) . = ..() - machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir)) - if (machine) - machine.CONSOLE = src + processing_machine = locate(/obj/machinery/mineral/processing_unit) in view(2, src) + if (processing_machine) + processing_machine.mineral_machine = src else return INITIALIZE_HINT_QDEL /obj/machinery/mineral/processing_unit_console/ui_interact(mob/user) . = ..() - if(!machine) + if(!processing_machine) return - var/dat = machine.get_machine_data() + var/dat = processing_machine.get_machine_data() var/datum/browser/popup = new(user, "processing", "Smelting Console", 300, 500) popup.set_content(dat) @@ -96,22 +101,22 @@ if(href_list["material"]) var/datum/material/new_material = locate(href_list["material"]) if(istype(new_material)) - machine.selected_material = new_material - machine.selected_alloy = null + processing_machine.selected_material = new_material + processing_machine.selected_alloy = null if(href_list["alloy"]) - machine.selected_material = null - machine.selected_alloy = href_list["alloy"] + processing_machine.selected_material = null + processing_machine.selected_alloy = href_list["alloy"] if(href_list["set_on"]) - machine.on = (href_list["set_on"] == "on") - machine.begin_processing() + processing_machine.on = (href_list["set_on"] == "on") + processing_machine.begin_processing() updateUsrDialog() return /obj/machinery/mineral/processing_unit_console/Destroy() - machine = null + processing_machine = null return ..() @@ -124,10 +129,10 @@ icon_state = "furnace" density = TRUE needs_item_input = TRUE - var/obj/machinery/mineral/CONSOLE = null var/on = FALSE - var/datum/material/selected_material = null - var/selected_alloy = null + var/selected_alloy + var/obj/machinery/mineral/mineral_machine + var/datum/material/selected_material var/datum/techweb/stored_research ///Proximity monitor associated with this atom, needed for proximity checks. var/datum/proximity_monitor/proximity_monitor @@ -135,23 +140,24 @@ /obj/machinery/mineral/processing_unit/Initialize(mapload) . = ..() proximity_monitor = new(src, 1) - var/list/allowed_materials = list(/datum/material/iron, - /datum/material/glass, - /datum/material/silver, - /datum/material/gold, - /datum/material/diamond, - /datum/material/plasma, - /datum/material/uranium, - /datum/material/bananium, - /datum/material/titanium, - /datum/material/bluespace - ) + var/list/allowed_materials = list( + /datum/material/iron, + /datum/material/glass, + /datum/material/silver, + /datum/material/gold, + /datum/material/diamond, + /datum/material/plasma, + /datum/material/uranium, + /datum/material/bananium, + /datum/material/titanium, + /datum/material/bluespace, + ) AddComponent(/datum/component/material_container, allowed_materials, INFINITY, MATCONTAINER_EXAMINE|BREAKDOWN_FLAGS_ORE_PROCESSOR, allowed_items=/obj/item/stack) stored_research = new /datum/techweb/specialized/autounlocking/smelter selected_material = GET_MATERIAL_REF(/datum/material/iron) /obj/machinery/mineral/processing_unit/Destroy() - CONSOLE = null + mineral_machine = null QDEL_NULL(stored_research) return ..() @@ -165,40 +171,40 @@ else materials.insert_item(O, breakdown_flags=BREAKDOWN_FLAGS_ORE_PROCESSOR) qdel(O) - if(CONSOLE) - CONSOLE.updateUsrDialog() + if(mineral_machine) + mineral_machine.updateUsrDialog() /obj/machinery/mineral/processing_unit/proc/get_machine_data() var/dat = "Smelter control console

" var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - for(var/datum/material/M in materials.materials) - var/amount = materials.materials[M] - dat += "[M.name]: [amount] cm³" - if (selected_material == M) + for(var/datum/material/all_materials as anything in materials.materials) + var/amount = materials.materials[all_materials] + dat += "[all_materials.name]: [amount] cm³" + if (selected_material == all_materials) dat += " Smelting" else - dat += " Not Smelting " + dat += " Not Smelting " dat += "
" dat += "

" dat += "Smelt Alloys
" - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - dat += "[D.name] " - if (selected_alloy == D.id) + for(var/research in stored_research.researched_designs) + var/datum/design/designs = SSresearch.techweb_design_by_id(research) + dat += "[designs.name] " + if (selected_alloy == designs.id) dat += " Smelting" else - dat += " Not Smelting " + dat += " Not Smelting " dat += "
" dat += "

" //On or off dat += "Machine is currently " if (on) - dat += "On " + dat += "On " else - dat += "Off " + dat += "Off " return dat @@ -209,30 +215,31 @@ process_ore(target) /obj/machinery/mineral/processing_unit/process(delta_time) - if(on) - if(selected_material) - smelt_ore(delta_time) - - else if(selected_alloy) - smelt_alloy(delta_time) - - - if(CONSOLE) - CONSOLE.updateUsrDialog() - else + if(!on) end_processing() + if(mineral_machine) + mineral_machine.updateUsrDialog() + return + + if(selected_material) + smelt_ore(delta_time) + else if(selected_alloy) + smelt_alloy(delta_time) + + if(mineral_machine) + mineral_machine.updateUsrDialog() /obj/machinery/mineral/processing_unit/proc/smelt_ore(delta_time = 2) var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) var/datum/material/mat = selected_material - if(mat) - var/sheets_to_remove = (materials.materials[mat] >= (MINERAL_MATERIAL_AMOUNT * SMELT_AMOUNT * delta_time) ) ? SMELT_AMOUNT * delta_time : round(materials.materials[mat] / MINERAL_MATERIAL_AMOUNT) - if(!sheets_to_remove) - on = FALSE - else - var/out = get_step(src, output_dir) - materials.retrieve_sheets(sheets_to_remove, mat, out) - + if(!mat) + return + var/sheets_to_remove = (materials.materials[mat] >= (MINERAL_MATERIAL_AMOUNT * SMELT_AMOUNT * delta_time) ) ? SMELT_AMOUNT * delta_time : round(materials.materials[mat] / MINERAL_MATERIAL_AMOUNT) + if(!sheets_to_remove) + on = FALSE + else + var/out = get_step(src, output_dir) + materials.retrieve_sheets(sheets_to_remove, mat, out) /obj/machinery/mineral/processing_unit/proc/smelt_alloy(delta_time = 2) var/datum/design/alloy = stored_research.isDesignResearchedID(selected_alloy) //check if it's a valid design @@ -274,6 +281,6 @@ /obj/machinery/mineral/processing_unit/on_deconstruction() var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) materials.retrieve_all() - ..() + return ..() #undef SMELT_AMOUNT diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index 52ee80ae993..a61b11e70b5 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -9,12 +9,10 @@ circuit = /obj/item/circuitboard/machine/stacking_unit_console /// Connected stacking machine var/obj/machinery/mineral/stacking_machine/machine - /// Direction for which console looks for stacking machine to connect to - var/machinedir = SOUTHEAST /obj/machinery/mineral/stacking_unit_console/Initialize(mapload) . = ..() - machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) + machine = locate(/obj/machinery/mineral/stacking_machine) in view(2, src) if (machine) machine.console = src @@ -87,7 +85,7 @@ var/obj/machinery/mineral/stacking_unit_console/console var/stk_types = list() var/stk_amt = list() - var/stack_list[0] //Key: Type. Value: Instance of type. + var/stack_list[0] //Key: Type. Value: Instance of type. var/stack_amt = 50 //amount to stack before releassing var/datum/component/remote_materials/materials var/force_connect = FALSE @@ -97,7 +95,7 @@ /obj/machinery/mineral/stacking_machine/Initialize(mapload) . = ..() proximity_monitor = new(src, 1) - materials = AddComponent(/datum/component/remote_materials, "stacking", mapload, FALSE, mapload && force_connect) + materials = AddComponent(/datum/component/remote_materials, "stacking", mapload, FALSE, (mapload && force_connect)) /obj/machinery/mineral/stacking_machine/Destroy() if(console)