diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 83b9fe9b0ee..9eb09918e6e 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -15,7 +15,7 @@ var/obj/machinery/mineral/processing_unit/machine var/show_all_ores = FALSE var/points = 0 - var/obj/item/card/id/inserted_id + var/datum/weakref/scanned_id var/list/ore/input_mats = list() var/list/material/output_mats = list() @@ -46,17 +46,25 @@ /obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) add_fingerprint(user) + if(!scanned_id) + get_user_id(user) + else + var/obj/item/card/id/ID = scanned_id.resolve() + if(!ID) + scanned_id = null + get_user_id(user) + else + var/turf/id_turf = get_turf(ID) + if(!id_turf.Adjacent(loc)) + scanned_id = null + get_user_id(user) interact(user) -/obj/machinery/mineral/processing_unit_console/attackby(obj/item/I, mob/user) - if(istype(I,/obj/item/card/id)) - var/obj/item/card/id/C = user.get_active_hand() - if(istype(C) && !istype(inserted_id)) - user.drop_from_inventory(C, src) - inserted_id = C - interact(user) - else - ..() +/obj/machinery/mineral/processing_unit_console/proc/get_user_id(var/mob/user) + if(!scanned_id && !isDrone(user)) + var/obj/item/card/id/ID = user.GetIdCard() + if(ID) + scanned_id = WEAKREF(ID) /obj/machinery/mineral/processing_unit_console/interact(mob/user) if(..()) @@ -75,8 +83,9 @@ dat += "Current unclaimed points: [points]
" - if(istype(inserted_id)) - dat += "You have [inserted_id.mining_points] mining points collected. Eject ID.
" + var/obj/item/card/id/ID = scanned_id.resolve() + if(ID) + dat += "You have [ID.mining_points] mining points collected. Eject ID.
" dat += "Claim points.
" dat += "Print yield declaration.
" else @@ -121,15 +130,14 @@ src.add_fingerprint(usr) if(href_list["choice"]) - if(istype(inserted_id)) + var/obj/item/card/id/ID = scanned_id.resolve() + if(ID) if(href_list["choice"] == "eject") - inserted_id.forceMove(loc) - usr.put_in_hands(inserted_id) - inserted_id = null + scanned_id = null if(href_list["choice"] == "claim") - if(access_mining_station in inserted_id.access) + if(access_mining_station in ID.access) if(points >= 0) - inserted_id.mining_points += points + ID.mining_points += points if(points != 0) ping("\The [src] pings, \"Point transfer complete! Transaction total: [points] points!\"") points = 0 @@ -138,7 +146,7 @@ else to_chat(usr, SPAN_WARNING("Required access not found.")) if(href_list["choice"] == "print_report") - if(access_mining_station in inserted_id.access) + if(access_mining_station in ID.access) print_report(usr) else to_chat(usr, SPAN_WARNING("Required access not found.")) @@ -146,10 +154,7 @@ else if(href_list["choice"] == "insert") var/obj/item/card/id/I = usr.get_active_hand() if(istype(I)) - usr.drop_from_inventory(I,src) - inserted_id = I - else - to_chat(usr, SPAN_WARNING("No valid ID.")) + scanned_id = WEAKREF(I) 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") @@ -183,7 +188,8 @@ return /obj/machinery/mineral/processing_unit_console/proc/print_report(var/mob/living/user) - if(!inserted_id) + var/obj/item/card/id/ID = scanned_id.resolve() + if(!ID) to_chat(user, SPAN_WARNING("No ID inserted. Cannot digitally sign.")) return if(!input_mats.len && !output_mats.len && !alloy_mats) @@ -270,8 +276,7 @@ input_mats = list() waste = 0 - if(ishuman(user) && !(user.l_hand && user.r_hand)) - user.put_in_hands(P) + user.put_in_hands(P) printing = FALSE return diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index e3c53f1b0bb..e4c1110ee25 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -66,7 +66,7 @@ var/global/list/minevendor_list = list( //keep in order of price icon_state = "mining" density = TRUE anchored = TRUE - var/obj/item/card/id/inserted_id + var/datum/weakref/scanned_id /datum/data/mining_equipment var/equipment_name = "generic" @@ -103,13 +103,32 @@ var/global/list/minevendor_list = list( //keep in order of price /obj/machinery/mineral/equipment_vendor/attack_hand(mob/user) if(..()) return + if(!scanned_id) + get_user_id(user) + else + var/obj/item/card/id/ID = scanned_id.resolve() + if(!ID) + scanned_id = null + get_user_id(user) + else + var/turf/id_turf = get_turf(ID) + if(!id_turf.Adjacent(loc)) + scanned_id = null + get_user_id(user) interact(user) +/obj/machinery/mineral/equipment_vendor/proc/get_user_id(var/mob/user) + if(!scanned_id && !isDrone(user)) + var/obj/item/card/id/ID = user.GetIdCard() + if(ID) + scanned_id = WEAKREF(ID) + /obj/machinery/mineral/equipment_vendor/interact(mob/user) var/dat dat +="
" - if(istype(inserted_id)) - dat += "You have [inserted_id.mining_points ? inserted_id.mining_points : 0] mining points collected. Eject ID.
" + var/obj/item/card/id/ID = scanned_id.resolve() + if(ID) + dat += "You have [ID.mining_points ? ID.mining_points : 0] mining points collected. Eject ID.
" else dat += "No ID inserted. Insert ID.
" dat += "
" @@ -132,30 +151,23 @@ var/global/list/minevendor_list = list( //keep in order of price if(..()) return if(href_list["choice"]) - if(istype(inserted_id)) + var/obj/item/card/id/ID = scanned_id.resolve() + if(ID) if(href_list["choice"] == "eject") - inserted_id.forceMove(loc) - if(ishuman(usr)) - if(!usr.get_active_hand()) - usr.put_in_hands(inserted_id) - else - inserted_id.forceMove(get_turf(src)) - inserted_id = null + scanned_id = null else if(href_list["choice"] == "insert") var/obj/item/card/id/I = usr.get_active_hand() if(istype(I)) - usr.drop_from_inventory(I,src) - inserted_id = I - else - to_chat(usr, SPAN_DANGER("No valid ID.")) + scanned_id = WEAKREF(I) if(href_list["purchase"]) - if(istype(inserted_id)) + var/obj/item/card/id/ID = scanned_id.resolve() + if(ID) var/datum/data/mining_equipment/prize = locate(href_list["purchase"]) if(!prize || !(prize in minevendor_list)) return if(prize.amount <= 0 && prize.amount != -1) return - if(prize.cost > inserted_id.mining_points) + if(prize.cost > ID.mining_points) else if(prize.shuttle) var/datum/shuttle/autodock/ferry/supply/shuttle = SScargo.shuttle @@ -185,7 +197,7 @@ var/global/list/minevendor_list = list( //keep in order of price var/turf/pickedloc = clear_turfs[i] if(pickedloc) - inserted_id.mining_points -= prize.cost + ID.mining_points -= prize.cost new prize.equipment_path(pickedloc) to_chat(usr, SPAN_NOTICE("Order passed. Your order has been placed on the next available supply shuttle.")) else @@ -195,7 +207,7 @@ var/global/list/minevendor_list = list( //keep in order of price to_chat(usr, SPAN_DANGER("{ERR Code: NO_SHUTTLE} Order failed! Please try again.")) return else - inserted_id.mining_points -= prize.cost + ID.mining_points -= prize.cost if(prize.amount != -1) prize.amount-- new prize.equipment_path(get_turf(src)) @@ -219,13 +231,6 @@ var/global/list/minevendor_list = list( //keep in order of price qdel(I) user.put_in_hands(dispensed_equipment) return - else if(istype(I,/obj/item/card/id)) - var/obj/item/card/id/C = usr.get_active_hand() - if(istype(C) && !istype(inserted_id)) - usr.drop_from_inventory(C,src) - inserted_id = C - interact(user) - return if(default_deconstruction_screwdriver(user, "mining-open", "mining", I)) updateUsrDialog() return diff --git a/html/changelogs/geeves-mining_id.yml b/html/changelogs/geeves-mining_id.yml new file mode 100644 index 00000000000..bc8af77610e --- /dev/null +++ b/html/changelogs/geeves-mining_id.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Mining ore processors and Mining Vendors now find IDs wirelessly, allowing mining stationbounds to redeem points as well. Mining drones cannot utilize this system." \ No newline at end of file