/**********************Prisoners' Console**************************/ /obj/machinery/mineral/labor_claim_console name = "point claim console" desc = "A stacking console with an electromagnetic writer, used to track ore mined by prisoners." icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = 0 anchored = 1 var/obj/machinery/mineral/stacking_machine/laborstacker/machine = null var/machinedir = SOUTH var/obj/item/weapon/card/id/prisoner/inserted_id var/obj/machinery/door/airlock/release_door var/door_tag = "prisonshuttle" var/use_release_door = 0 var/obj/item/device/radio/intercom/announcer /obj/machinery/mineral/labor_claim_console/New() ..() announcer = new /obj/item/device/radio/intercom(null) announcer.config(list("Security" = 0)) spawn(7) src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) var/t for(var/obj/machinery/door/airlock/d in range(5,src)) t = d.id_tag if(t == src.door_tag) src.release_door = d if (machine && (release_door || !use_release_door)) machine.console = src else qdel(src) /obj/machinery/mineral/labor_claim_console/proc/check_auth() if(emagged) return 1 //Shuttle is emagged, let any ol' person through return (istype(inserted_id) && inserted_id.points >= inserted_id.goal) //Otherwise, only let them out if the prisoner's reached his quota. /obj/machinery/mineral/labor_claim_console/attack_hand(user as mob) var/dat dat += text("Point Claim Console

") if(emagged) //Shit's broken dat += text("QU&#t0A In%aL*D
") else if(istype(inserted_id)) //There's an ID in there. dat += text("ID: [inserted_id.registered_name] Eject ID.
") dat += text("Points Collected:[inserted_id.points]
") dat += text("Point Quota: [inserted_id.goal] - Reach your quota to earn your release
") dat += text("Unclaimed Collection Points: [machine.points]. Claim points.
") else //No ID in sight. Complain about it. dat += text("No ID inserted. Insert ID.
") if(check_auth()) dat += text("Proceed to station.
") if(use_release_door) dat += text("Open release door.
") if(machine) dat += text("
Mineral Value List:
[machine.get_ore_values()]") user << browse("[dat]", "window=console_stacking_machine") /obj/machinery/mineral/labor_claim_console/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/weapon/card/id)) return attack_hand(user) ..() /obj/machinery/mineral/labor_claim_console/emag_act(user as mob) emag(user) /obj/machinery/mineral/labor_claim_console/proc/emag(mob/user as mob) if(!emagged) emagged = 1 user << "PZZTTPFFFT" /obj/machinery/mineral/labor_claim_console/Topic(href, href_list) var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles["Labor"] usr.set_machine(src) src.add_fingerprint(usr) if(href_list["choice"]) if(istype(inserted_id)) //Sanity check against href spoofs if(href_list["choice"] == "eject") inserted_id.loc = loc inserted_id.verb_pickup() inserted_id = null if(href_list["choice"] == "claim") inserted_id.points += machine.points machine.points = 0 src << "Points transferred." else if(href_list["choice"] == "insert") var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand() if(istype(I)) usr.drop_item() I.loc = src inserted_id = I else usr << "Invalid ID." if(check_auth()) //Sanity check against hef spoofs if(href_list["choice"] == "station") if(!alone_in_area(get_area(src), usr)) usr << "Prisoners are only allowed to be released while alone." else if(shuttle.location == 1) if (shuttle.moving_status == SHUTTLE_IDLE) var/message = "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval." announcer.autosay(message, "Labor Camp Controller", "Security") usr << "Shuttle received message and will be sent shortly." shuttle.launch() else usr << "\blue Shuttle is already moving." else usr << "\blue Shuttle is already on-station." if(href_list["choice"] == "release") if(alone_in_area(get_area(loc), usr)) if(shuttle.location == 1) if(release_door && release_door.density) release_door.open() else usr << "Prisoners can only be released while docked with the station." else usr << "Prisoners are only allowed to be released while alone." src.updateUsrDialog() return /**********************Prisoner Collection Unit**************************/ /obj/machinery/mineral/stacking_machine/laborstacker var/points = 0 //The unclaimed value of ore stacked. Value for each ore loosely relative to its rarity. var/list/ore_values = list(("glass" = 1), ("metal" = 2), ("iron" = 3), ("solid plasma" = 20), ("plasteel" = 23), ("reinforced glass" = 4), ("gold" = 20), ("silver" = 20), ("uranium" = 20), ("diamond" = 25), ("bananium" = 50)) /obj/machinery/mineral/stacking_machine/laborstacker/proc/get_ore_values() var/dat = "" for(var/ore in ore_values) var/value = ore_values[ore] dat += "" dat += "
[capitalize(ore)][value]
" return dat /obj/machinery/mineral/stacking_machine/laborstacker/process() if (src.output && src.input) var/turf/T = get_turf(input) for(var/obj/item/O in T.contents) if(!O) return if(istype(O,/obj/item/stack)) var/obj/item/stack/S = O if(S.name in ore_values) points += ore_values[S.name] * S.amount S.loc = null else S.loc = output.loc else O.loc = output.loc //Output amounts that are past stack_amt. for(var/sheet in stack_storage) if(stack_storage[sheet] >= stack_amt) var/stacktype = stack_paths[sheet] var/obj/item/stack/sheet/S = new stacktype (get_turf(output)) S.amount = stack_amt stack_storage[sheet] -= stack_amt console.updateUsrDialog() return /**********************Point Lookup Console**************************/ /obj/machinery/mineral/labor_points_checker name = "points checking console" desc = "A console used by prisoners to check the progress on their quotas. Simply swipe a prisoner ID." icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = 0 anchored = 1 /obj/machinery/mineral/labor_points_checker/attack_hand(mob/user) user.examine(src) /obj/machinery/mineral/labor_points_checker/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/weapon/card/id)) if(istype(I, /obj/item/weapon/card/id/prisoner)) var/obj/item/weapon/card/id/prisoner/prisoner_id = I user << "ID: [prisoner_id.registered_name]" user << "Points Collected:[prisoner_id.points]" user << "Point Quota: [prisoner_id.goal]" user << "Collect points by bringing smelted minerals to the Labor Shuttle stacking machine. Reach your quota to earn your release." else user << "Error: Invalid ID" return ..()