/**********************Mineral processing unit console**************************/ /obj/machinery/mineral/processing_unit_console name = "ore redemption console" icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = 0 anchored = 1 use_power = 1 idle_power_usage = 15 active_power_usage = 50 var/obj/machinery/mineral/processing_unit/machine = null var/show_all_ores = 0 var/points = 0 var/obj/item/weapon/card/id/inserted_id /obj/machinery/mineral/processing_unit_console/proc/setup_machine(mob/user) if(!machine) var/area/A = get_area(src) for(var/obj/machinery/mineral/processing_unit/checked_machine in SSmachinery.all_machines) if(A == get_area(checked_machine)) machine = checked_machine break if (machine) machine.console = src else user << "ERROR: Linked machine not found!" return machine /obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) add_fingerprint(user) interact(user) /obj/machinery/mineral/processing_unit_console/interact(mob/user) if(..()) return if(!setup_machine(user)) return if(!allowed(user)) user << "Access denied." return user.set_machine(src) var/dat = "

Ore processor console

" dat += "Current unclaimed points: [points]
" if(istype(inserted_id)) dat += "You have [inserted_id.mining_points] mining points collected. Eject ID.
" dat += "Claim points.
" else dat += "No ID inserted. Insert ID.
" dat += "
" for(var/ore in machine.ores_processing) if(!machine.ores_stored[ore] && !show_all_ores) continue var/ore/O = ore_data[ore] if(!O) continue dat += "" dat += "
[capitalize(O.display_name)][machine.ores_stored[ore]]" if(machine.ores_processing[ore]) switch(machine.ores_processing[ore]) if(0) dat += "not processing" if(1) dat += "smelting" if(2) dat += "compressing" if(3) dat += "alloying" else dat += "not processing" dat += ".\[change\]

" dat += "Currently displaying [show_all_ores ? "all ore types" : "only available ore types"]. \[[show_all_ores ? "show less" : "show more"]\]
" dat += "The ore processor is currently [(machine.active ? "processing" : "disabled")]." user << browse(dat, "window=processor_console;size=400x500") onclose(user, "processor_console") return /obj/machinery/mineral/processing_unit_console/Topic(href, href_list) if(..()) return 1 usr.set_machine(src) src.add_fingerprint(usr) if(href_list["choice"]) if(istype(inserted_id)) if(href_list["choice"] == "eject") inserted_id.forceMove(loc) if(!usr.get_active_hand()) usr.put_in_hands(inserted_id) inserted_id = null if(href_list["choice"] == "claim") if(access_mining_station in inserted_id.access) if(points >= 0) inserted_id.mining_points += points if(points != 0) ping( "\The [src] pings, \"Point transfer complete! Transaction total: [points] points!\"" ) points = 0 else usr << "[station_name()]'s mining division is currently indebted to NanoTrasen. Transaction incomplete until debt is cleared." else usr << "Required access not found." else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/I = usr.get_active_hand() if(istype(I)) usr.drop_from_inventory(I,src) inserted_id = I else usr << "No valid ID." if(href_list["toggle_smelting"]) var/choice = input("What setting do you wish to use for processing [href_list["toggle_smelting"]]?") as null|anything in list("Smelting","Compressing","Alloying","Nothing") if(!choice) return switch(choice) if("Nothing") choice = 0 if("Smelting") choice = 1 if("Compressing") choice = 2 if("Alloying") choice = 3 machine.ores_processing[href_list["toggle_smelting"]] = choice if(href_list["toggle_power"]) machine.active = !machine.active if(machine.active) machine.icon_state = "furnace" else machine.icon_state = "furnace-off" if(href_list["toggle_ores"]) show_all_ores = !show_all_ores src.updateUsrDialog() return /**********************Mineral processing unit**************************/ /obj/machinery/mineral/processing_unit name = "industrial smelter" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron... //lol fuk u bay it is //i'm gay icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "furnace-off" density = 1 anchored = 1 light_range = 3 var/obj/machinery/mineral/input = null var/obj/machinery/mineral/output = null var/obj/machinery/mineral/processing_unit_console/console = null var/sheets_per_tick = 20 var/list/ores_processing[0] var/list/ores_stored[0] var/static/list/alloy_data var/active = 0 use_power = 1 idle_power_usage = 15 active_power_usage = 150 component_types = list( /obj/item/weapon/circuitboard/refiner, /obj/item/weapon/stock_parts/capacitor = 2, /obj/item/weapon/stock_parts/scanning_module, /obj/item/weapon/stock_parts/micro_laser = 2, /obj/item/weapon/stock_parts/matter_bin ) /obj/machinery/mineral/processing_unit/Initialize() . = ..() // initialize static alloy_data list if(!alloy_data) alloy_data = list() for(var/alloytype in typesof(/datum/alloy)-/datum/alloy) alloy_data += new alloytype() for (var/O in ore_data) ores_processing[O] = 0 ores_stored[O] = 0 //Locate our output and input machinery. for (var/dir in cardinal) src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) if(src.input) break for (var/dir in cardinal) src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) if(src.output) break /obj/machinery/mineral/processing_unit/machinery_process() ..() if (!src.output || !src.input) return var/list/tick_alloys = list() //Grab some more ore to process this tick. for(var/i = 0,i= sheets_per_tick) break if(ores_stored[metal] > 0 && ores_processing[metal] != 0) var/ore/O = ore_data[metal] if(!O) continue if(ores_processing[metal] == 3 && O.alloy) //Alloying. for(var/datum/alloy/A in alloy_data) if(A.metaltag in tick_alloys) continue tick_alloys += A.metaltag var/enough_metal if(!isnull(A.requires[metal]) && ores_stored[metal] >= A.requires[metal]) //We have enough of our first metal, we're off to a good start. enough_metal = 1 for(var/needs_metal in A.requires) //Check if we're alloying the needed metal and have it stored. if(ores_processing[needs_metal] != 3 || ores_stored[needs_metal] < A.requires[needs_metal]) enough_metal = 0 break if(!enough_metal) continue else var/total for(var/needs_metal in A.requires) if(console) var/ore/Ore = ore_data[needs_metal] console.points += Ore.worth use_power(100) ores_stored[needs_metal] -= A.requires[needs_metal] total += A.requires[needs_metal] total = max(1,round(total*A.product_mod)) //Always get at least one sheet. sheets += total-1 for(var/i=0,i0) can_make-- var/material/M = get_material_by_name(O.compresses_to) if(!istype(M) || !can_make || ores_stored[metal] < 1) continue for(var/i=0,i