diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index bbf21e0a545..d5a753c973e 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -240,7 +240,7 @@ Class Procs:
if(occupant && !state_open)
if(ishuman(occupant))
var/mob/living/carbon/human/H = occupant
- var/obj/item/card/id/I = H.get_idcard()
+ var/obj/item/card/id/I = H.get_idcard(TRUE)
if(I)
var/datum/bank_account/insurance = I.registered_account
if(!insurance)
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index 8615af205bf..b2324d0cae6 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -93,9 +93,7 @@
if(!usr || !usr.canUseTopic(src) || stat || QDELETED(src))
return
if(href_list["authenticate"])
- var/obj/item/card/id/ID = usr.get_active_held_item()
- if(!istype(ID))
- ID = usr.get_idcard()
+ var/obj/item/card/id/ID = usr.get_idcard(TRUE)
if(ID && istype(ID))
if(check_access(ID))
authenticated = TRUE
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 9725ef396b9..2c1526e1af5 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -441,7 +441,7 @@
if(ishuman(mob_occupant))
var/mob/living/carbon/C = mob_occupant
dna = C.has_dna()
- var/obj/item/card/id/I = C.get_idcard()
+ var/obj/item/card/id/I = C.get_idcard(TRUE)
if(I)
has_bank_account = I.registered_account
if(isbrain(mob_occupant))
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 8257b5f9a39..b4ec2e215ba 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -71,9 +71,7 @@
if("login")
var/mob/M = usr
- var/obj/item/card/id/I = M.get_active_held_item()
- if(!istype(I))
- I = M.get_idcard()
+ var/obj/item/card/id/I = M.get_idcard(TRUE)
if(I && istype(I))
if(check_access(I))
diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm
index 1d5c57f5c76..0c1f3439fd7 100644
--- a/code/modules/cargo/console.dm
+++ b/code/modules/cargo/console.dm
@@ -161,7 +161,7 @@
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
name = H.get_authentification_name()
- rank = H.get_assignment()
+ rank = H.get_assignment(hand_first = TRUE)
else if(issilicon(usr))
name = usr.real_name
rank = "Silicon"
diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm
index ed688d7fd22..f7d6485fec8 100644
--- a/code/modules/cargo/expressconsole.dm
+++ b/code/modules/cargo/expressconsole.dm
@@ -157,7 +157,7 @@
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
name = H.get_authentification_name()
- rank = H.get_assignment()
+ rank = H.get_assignment(hand_first = TRUE)
else if(issilicon(usr))
name = usr.real_name
rank = "Silicon"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index edd1b8544bd..e6f8ff64030 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -568,7 +568,7 @@
return threatcount
//Check for ID
- var/obj/item/card/id/idcard = get_idcard()
+ var/obj/item/card/id/idcard = get_idcard(FALSE)
if( (judgement_criteria & JUDGE_IDCHECK) && !idcard && name=="Unknown")
threatcount += 4
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 81a0e93757c..7788b9ef001 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -11,8 +11,8 @@
//gets assignment from ID or ID inside PDA or PDA itself
//Useful when player do something with computers
-/mob/living/carbon/human/proc/get_assignment(if_no_id = "No id", if_no_job = "No job")
- var/obj/item/card/id/id = get_idcard()
+/mob/living/carbon/human/proc/get_assignment(if_no_id = "No id", if_no_job = "No job", hand_first = TRUE)
+ var/obj/item/card/id/id = get_idcard(hand_first)
if(id)
. = id.assignment
else
@@ -27,7 +27,7 @@
//gets name from ID or ID inside PDA or PDA itself
//Useful when player do something with computers
/mob/living/carbon/human/proc/get_authentification_name(if_no_id = "Unknown")
- var/obj/item/card/id/id = get_idcard()
+ var/obj/item/card/id/id = get_idcard(FALSE)
if(id)
return id.registered_name
var/obj/item/pda/pda = wear_id
@@ -85,11 +85,33 @@
. = if_no_id //to prevent null-names making the mob unclickable
return
-//gets ID card object from special clothes slot or null.
-/mob/living/carbon/human/get_idcard()
+//Gets ID card from a human. If hand_first is false the one in the id slot is prioritized, otherwise inventory slots go first.
+/mob/living/carbon/human/get_idcard(hand_first = TRUE)
+ //Check hands
+ var/obj/item/card/id/id_card
+ var/obj/item/held_item
+ held_item = get_active_held_item()
+ if(held_item) //Check active hand
+ id_card = held_item.GetID()
+ if(!id_card) //If there is no id, check the other hand
+ held_item = get_inactive_held_item()
+ id_card = held_item.GetID()
+
+ if(id_card)
+ if(hand_first)
+ return id_card
+ else
+ . = id_card
+
+ //Check inventory slots
if(wear_id)
- return wear_id.GetID()
-
+ id_card = wear_id.GetID()
+ if(id_card)
+ return id_card
+ else if(belt)
+ id_card = belt.GetID()
+ if(id_card)
+ return id_card
/mob/living/carbon/human/IsAdvancedToolUser()
if(has_trait(TRAIT_MONKEYLIKE))
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index e43d838d37b..be2ea6fe94a 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -463,7 +463,7 @@
return
sync_lighting_plane_alpha()
-/mob/living/simple_animal/get_idcard()
+/mob/living/simple_animal/get_idcard(hand_first)
return access_card
/mob/living/simple_animal/OpenCraftingMenu()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 5d47baa0fdd..627ed21da8b 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -883,7 +883,7 @@
/mob/proc/can_hold_items()
return FALSE
-/mob/proc/get_idcard()
+/mob/proc/get_idcard(hand_first)
return
diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm
index 051b12ea717..f94ac6cc065 100644
--- a/code/modules/modular_computers/file_system/program.dm
+++ b/code/modules/modular_computers/file_system/program.dm
@@ -97,14 +97,9 @@
card_slot = computer.all_components[MC_CARD]
D = card_slot.GetID()
var/mob/living/carbon/human/h = user
- var/obj/item/card/id/I = h.get_idcard()
- var/obj/item/card/id/C = h.get_active_held_item()
- if(C)
- C = C.GetID()
- if(!(C && istype(C)))
- C = null
+ var/obj/item/card/id/I = h.get_idcard(TRUE)
- if(!I && !C && !D)
+ if(!I && !D)
if(loud)
to_chat(user, "\The [computer] flashes an \"RFID Error - Unable to scan ID\" warning.")
return 0
@@ -112,9 +107,6 @@
if(I)
if(access_to_check in I.GetAccess())
return 1
- else if(C)
- if(access_to_check in C.GetAccess())
- return 1
else if(D)
if(access_to_check in D.GetAccess())
return 1
diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm
index def388c5741..028ba014651 100644
--- a/code/modules/modular_computers/file_system/programs/card.dm
+++ b/code/modules/modular_computers/file_system/programs/card.dm
@@ -117,7 +117,7 @@
else
if(ishuman(user))
var/mob/living/carbon/human/h = user
- user_id_card = h.get_idcard()
+ user_id_card = h.get_idcard(TRUE)
switch(action)
if("PRG_switchm")
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index cbc6810143e..396a158eb32 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -57,7 +57,7 @@
var/mob/user = usr
. = FALSE
- var/obj/item/card/id/ID = user.get_idcard()
+ var/obj/item/card/id/ID = user.get_idcard(TRUE)
if(!ID)
to_chat(user, "You don't have an ID.")
@@ -93,7 +93,7 @@
minor_announce("Early launch authorization revoked, [remaining] authorizations needed")
/obj/machinery/computer/emergency_shuttle/proc/authorize(mob/user, source)
- var/obj/item/card/id/ID = user.get_idcard()
+ var/obj/item/card/id/ID = user.get_idcard(TRUE)
if(ID in authorized)
return FALSE
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
index dd01ee28131..6d3e304ddad 100644
--- a/code/modules/shuttle/special.dm
+++ b/code/modules/shuttle/special.dm
@@ -199,7 +199,7 @@
if(H.mind && H.mind.assigned_role == "Bartender")
return TRUE
- var/obj/item/card/id/ID = user.get_idcard()
+ var/obj/item/card/id/ID = user.get_idcard(FALSE)
if(ID && (ACCESS_CENT_BAR in ID.access))
return TRUE
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index a1399a0fb5d..b7071e7b8cf 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -305,7 +305,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
var/obj/item/card/id/C
if(ishuman(user))
H = user
- C = H.get_idcard()
+ C = H.get_idcard(TRUE)
if(!C)
dat += "No ID Card detected!
"
@@ -376,7 +376,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
vend_ready = 0
if(ishuman(usr) && onstation)
var/mob/living/carbon/human/H = usr
- var/obj/item/card/id/C = H.get_idcard()
+ var/obj/item/card/id/C = H.get_idcard(TRUE)
if(!C)
say("No card found.")
@@ -441,7 +441,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
return
if(onstation && ishuman(usr))
var/mob/living/carbon/human/H = usr
- var/obj/item/card/id/C = H.get_idcard()
+ var/obj/item/card/id/C = H.get_idcard(TRUE)
if(!C)
say("No card found.")