mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 11:13:16 +00:00
Mech fabricator redefined check access for no reason, let base proc handle it. Adds span classes for messages guestpass console gives.
189 lines
5.9 KiB
Plaintext
189 lines
5.9 KiB
Plaintext
/////////////////////////////////////////////
|
|
//Guest pass ////////////////////////////////
|
|
/////////////////////////////////////////////
|
|
/obj/item/weapon/card/id/guest
|
|
name = "guest pass"
|
|
desc = "Allows temporary access to station areas."
|
|
icon_state = "guest"
|
|
|
|
var/temp_access = list() //to prevent agent cards stealing access as permanent
|
|
var/expiration_time = 0
|
|
var/reason = "NOT SPECIFIED"
|
|
|
|
/obj/item/weapon/card/id/guest/GetAccess()
|
|
if (world.time > expiration_time)
|
|
return access
|
|
else
|
|
return temp_access
|
|
|
|
/obj/item/weapon/card/id/guest/examine()
|
|
..()
|
|
if (world.time < expiration_time)
|
|
usr << "<span class='notice'>This pass expires at [worldtime2text(expiration_time)].</span>"
|
|
else
|
|
usr << "<span class='warning'>It expired at [worldtime2text(expiration_time)].</span>"
|
|
|
|
/obj/item/weapon/card/id/guest/read()
|
|
if (world.time > expiration_time)
|
|
usr << "<span class='notice'>This pass expired at [worldtime2text(expiration_time)].</span>"
|
|
else
|
|
usr << "<span class='notice'>This pass expires at [worldtime2text(expiration_time)].</span>"
|
|
|
|
usr << "<span class='notice'>It grants access to following areas:</span>"
|
|
for (var/A in temp_access)
|
|
usr << "<span class='notice'>[get_access_desc(A)].</span>"
|
|
usr << "<span class='notice'>Issuing reason: [reason].</span>"
|
|
return
|
|
|
|
/////////////////////////////////////////////
|
|
//Guest pass terminal////////////////////////
|
|
/////////////////////////////////////////////
|
|
|
|
/obj/machinery/computer/guestpass
|
|
name = "guest pass terminal"
|
|
icon_state = "guest"
|
|
density = 0
|
|
|
|
|
|
var/obj/item/weapon/card/id/giver
|
|
var/list/accesses = list()
|
|
var/giv_name = "NOT SPECIFIED"
|
|
var/reason = "NOT SPECIFIED"
|
|
var/duration = 0
|
|
|
|
var/list/internal_log = list()
|
|
var/mode = 0 // 0 - making pass, 1 - viewing logs
|
|
|
|
/obj/machinery/computer/guestpass/New()
|
|
..()
|
|
uid = "[rand(100,999)]-G[rand(10,99)]"
|
|
|
|
/obj/machinery/computer/guestpass/attackby(obj/O, mob/user)
|
|
if(istype(O, /obj/item/weapon/card/id))
|
|
if(!giver)
|
|
user.drop_item()
|
|
O.loc = src
|
|
giver = O
|
|
updateUsrDialog()
|
|
else
|
|
user << "<span class='warning'>There is already ID card inside.</span>"
|
|
|
|
/obj/machinery/computer/guestpass/attack_ai(var/mob/user as mob)
|
|
return attack_hand(user)
|
|
|
|
/obj/machinery/computer/guestpass/attack_paw(var/mob/user as mob)
|
|
return attack_hand(user)
|
|
|
|
/obj/machinery/computer/guestpass/attack_hand(var/mob/user as mob)
|
|
if(..())
|
|
return
|
|
|
|
user.set_machine(src)
|
|
var/dat
|
|
|
|
if (mode == 1) //Logs
|
|
dat += "<h3>Activity log</h3><br>"
|
|
for (var/entry in internal_log)
|
|
dat += "[entry]<br><hr>"
|
|
dat += "<a href='?src=\ref[src];action=print'>Print</a><br>"
|
|
dat += "<a href='?src=\ref[src];mode=0'>Back</a><br>"
|
|
else
|
|
dat += "<h3>Guest pass terminal #[uid]</h3><br>"
|
|
dat += "<a href='?src=\ref[src];mode=1'>View activity log</a><br><br>"
|
|
dat += "Issuing ID: <a href='?src=\ref[src];action=id'>[giver]</a><br>"
|
|
dat += "Issued to: <a href='?src=\ref[src];choice=giv_name'>[giv_name]</a><br>"
|
|
dat += "Reason: <a href='?src=\ref[src];choice=reason'>[reason]</a><br>"
|
|
dat += "Duration (minutes): <a href='?src=\ref[src];choice=duration'>[duration] m</a><br>"
|
|
dat += "Access to areas:<br>"
|
|
if (giver && giver.access)
|
|
for (var/A in giver.access)
|
|
var/area = get_access_desc(A)
|
|
if (A in accesses)
|
|
area = "<b>[area]</b>"
|
|
dat += "<a href='?src=\ref[src];choice=access;access=[A]'>[area]</a><br>"
|
|
dat += "<br><a href='?src=\ref[src];action=issue'>Issue pass</a><br>"
|
|
|
|
user << browse(dat, "window=guestpass;size=400x520")
|
|
onclose(user, "guestpass")
|
|
|
|
|
|
/obj/machinery/computer/guestpass/Topic(href, href_list)
|
|
if(..())
|
|
return
|
|
usr.set_machine(src)
|
|
if (href_list["mode"])
|
|
mode = text2num(href_list["mode"])
|
|
|
|
if (href_list["choice"])
|
|
switch(href_list["choice"])
|
|
if ("giv_name")
|
|
var/nam = input("Person pass is issued to", "Name", name)
|
|
if (nam)
|
|
giv_name = strip_html_simple(nam)
|
|
if ("reason")
|
|
var/reas = input("Reason why pass is issued", "Reason", reason)
|
|
reason = strip_html_simple(reas)
|
|
if ("duration")
|
|
var/dur = input("Duration (in minutes) during which pass is valid.", "Duration") as num
|
|
if (dur > 0 && dur < 30)
|
|
duration = dur
|
|
else
|
|
usr << "<span class='warning'>Invalid duration.</span>"
|
|
if ("access")
|
|
var/A = text2num(href_list["access"])
|
|
if (A in accesses)
|
|
accesses.Remove(A)
|
|
else
|
|
accesses.Add(A)
|
|
if (href_list["action"])
|
|
switch(href_list["action"])
|
|
if ("id")
|
|
if (giver)
|
|
if(ishuman(usr))
|
|
giver.loc = usr.loc
|
|
if(!usr.get_active_hand())
|
|
usr.put_in_hands(giver)
|
|
giver = null
|
|
else
|
|
giver.loc = src.loc
|
|
giver = null
|
|
else
|
|
var/obj/item/I = usr.get_active_hand()
|
|
if (istype(I, /obj/item/weapon/card/id))
|
|
usr.drop_item()
|
|
I.loc = src
|
|
giver = I
|
|
updateUsrDialog()
|
|
|
|
if ("print")
|
|
var/dat = "<h3>Activity log of guest pass terminal #[uid]</h3><br>"
|
|
for (var/entry in internal_log)
|
|
dat += "[entry]<br><hr>"
|
|
//usr << "Printing the log, standby..."
|
|
//sleep(50)
|
|
var/obj/item/weapon/paper/P = new/obj/item/weapon/paper( loc )
|
|
P.name = "activity log"
|
|
P.info = dat
|
|
|
|
if ("issue")
|
|
if (giver)
|
|
var/number = add_zero("[rand(0,9999)]", 4)
|
|
var/entry = "\[[worldtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: "
|
|
for (var/i=1 to accesses.len)
|
|
var/A = accesses[i]
|
|
if (A)
|
|
var/area = get_access_desc(A)
|
|
entry += "[i > 1 ? ", [area]" : "[area]"]"
|
|
entry += ". Expires at [worldtime2text(world.time + duration*10*60)]."
|
|
internal_log.Add(entry)
|
|
|
|
var/obj/item/weapon/card/id/guest/pass = new(src.loc)
|
|
pass.temp_access = accesses.Copy()
|
|
pass.registered_name = giv_name
|
|
pass.expiration_time = world.time + duration*10*60
|
|
pass.reason = reason
|
|
pass.name = "guest pass #[number]"
|
|
else
|
|
usr << "\red Cannot issue pass without issuing ID."
|
|
updateUsrDialog()
|
|
return |