diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index d30cc76b0a7..79c6466235b 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -107,6 +107,8 @@
var/icon/side
var/dat
var/stamped = 0
+
+ var/obj/item/weapon/card/id/guest/guest_pass = null // Guest pass attached to the ID
/obj/item/weapon/card/id/New()
..()
@@ -120,6 +122,16 @@
show(usr)
else
to_chat(user, "It is too far away.")
+ if(guest_pass)
+ to_chat(user, "There is a guest pass attached to this ID card")
+ if (world.time < guest_pass.expiration_time)
+ to_chat(user, "It expires at [worldtime2text(guest_pass.expiration_time)].")
+ else
+ to_chat(user, "It expired at [worldtime2text(guest_pass.expiration_time)].")
+ to_chat(user, "It grants access to following areas:")
+ for (var/A in guest_pass.temp_access)
+ to_chat(user, "[get_access_desc(A)].")
+ to_chat(user, "Issuing reason: [guest_pass.reason].")
/obj/item/weapon/card/id/proc/show(mob/user as mob)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/paper)
@@ -170,7 +182,9 @@
"
/obj/item/weapon/card/id/GetAccess()
- return access
+ if(!guest_pass)
+ return access
+ return access | guest_pass.GetAccess()
/obj/item/weapon/card/id/GetID()
return src
@@ -204,9 +218,42 @@
if(!stamped)
dat+="
"
stamped = 1
- to_chat(usr, "You stamp the ID card!")
+ to_chat(user, "You stamp the ID card!")
else
- to_chat(usr, "This ID has already been stamped!")
+ to_chat(user, "This ID has already been stamped!")
+
+ else if(istype(W, /obj/item/weapon/card/id/guest))
+ if(istype(src, /obj/item/weapon/card/id/guest))
+ return
+ var/obj/item/weapon/card/id/guest/G = W
+ if(world.time > G.expiration_time)
+ to_chat(user, "There's no point, the guest pass has expired.")
+ return
+ if(guest_pass)
+ to_chat(user, "There's already a guest pass attached to this ID.")
+ return
+ if(G.registered_name != registered_name && G.registered_name != "NOT SPECIFIED")
+ to_chat(user, "The guest pass cannot be attached to this ID")
+ return
+ if(!user.unEquip(G))
+ return
+ G.loc = src
+ guest_pass = G
+
+/obj/item/weapon/card/id/verb/remove_guest_pass()
+ set name = "Remove Guest Pass"
+ set category = "Object"
+ set src in range(0)
+
+ if(usr.stat || !usr.canmove || usr.restrained())
+ return
+
+ if(guest_pass)
+ to_chat(usr, "You remove the guest pass from this ID.")
+ guest_pass.forceMove(get_turf(src))
+ guest_pass = null
+ else
+ to_chat(usr, "There is no guest pass attached to this ID")
/obj/item/weapon/card/id/silver
name = "identification card"