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 +="