You can now stick IDs in PDAs.

If you look at your PDA window, there should be an option to stick an ID in, like with some computers.
  While carrying an ID, a PDA can be used for almost everything an ID can.
    While ID scanners can read cards through a PDA, it is difficult to shove a PDA into the ID slot on some computers.
    It is possible I missed some functions, but I was quite thorough in my sweep through the code.
    In the event of PDA destruction, any inserted ID is ejected unharmed.

It is now possible to stick PDAs in your jumpsuit's ID slot.
  Since PDAs are named, you can disguise yourself as someone else using one.
  Beepsky/ED-209 can see through a PDA disguise if you stick your real ID in for access.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@592 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
n3ophyt3@gmail.com
2010-12-12 04:37:39 +00:00
parent c9cd0f6c61
commit 1b4d6517c7
29 changed files with 174 additions and 47 deletions

View File

@@ -226,7 +226,7 @@
else if (src.menu == 4)
var/obj/item/weapon/card/id/C = usr.equipped()
if (istype(C))
if (istype(C)||istype(C, /obj/item/device/pda))
if(src.check_access(C))
src.records.Remove(src.active_record)
del(src.active_record)
@@ -568,7 +568,7 @@
//Let's unlock this early I guess. Might be too early, needs tweaking.
/obj/machinery/clonepod/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/card/id))
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (!src.check_access(W))
user << "\red Access Denied."
return

View File

@@ -74,11 +74,16 @@
else if(istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/alien/humanoid))
var/mob/living/carbon/george = M
//they can only hold things :(
if(george.equipped() && istype(george.equipped(), /obj/item/weapon/card/id) && src.check_access(george.equipped()))
if(george.equipped() && (istype(george.equipped(), /obj/item/weapon/card/id) || istype(george.equipped(), /obj/item/device/pda)) && src.check_access(george.equipped()))
return 1
return 0
/obj/proc/check_access(obj/item/weapon/card/id/I)
if (istype(I, /obj/item/device/pda))
var/obj/item/device/pda/pda = I
I = pda.id
if(!src.req_access) //no requirements
return 1
if(!istype(src.req_access, /list)) //something's very wrong

View File

@@ -607,11 +607,15 @@
//src.equip_if_possible(new /obj/item/device/radio/signaler(src), slot_belt)
src.equip_if_possible(new /obj/item/device/pda(src), slot_belt)
if (istype(src.belt, /obj/item/device/pda))
src.belt:owner = src.real_name
src.belt.name = "PDA-[src.real_name]"
var/obj/item/device/pda/pda = src.belt
pda.owner = src.real_name
pda.ownjob = src.wear_id.assignment
pda.name = "PDA-[src.real_name]"
if (istype(src.r_store, /obj/item/device/pda)) //damned mime PDAs not starting in belt slot
src.r_store:owner = src.real_name
src.r_store.name = "PDA-[src.real_name]"
var/obj/item/device/pda/pda = src.r_store
pda.owner = src.real_name
pda.ownjob = src.wear_id.assignment
pda.name = "PDA-[src.real_name]"
/client/proc/mimewall()
set category = "Mime"

View File

@@ -268,7 +268,7 @@
O.show_message(text("\red [] has []activated []!", user, (stat&BROKEN) ? "de" : "re", src), 1)
return
else if (istype(W, /obj/item/weapon/card/id))// trying to unlock the interface with an ID card
else if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
if(stat & (NOPOWER|BROKEN))
user << "It does nothing"
else

View File

@@ -101,7 +101,7 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
src.path = new()
/obj/machinery/bot/cleanbot/attackby(obj/item/weapon/W, mob/user as mob)
if (istype(W, /obj/item/weapon/card/id))
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(src.allowed(usr))
src.locked = !src.locked
user << "You [ src.locked ? "lock" : "unlock"] the [src] behaviour controls."

View File

@@ -172,7 +172,7 @@ Auto Patrol: []"},
src.on = 1
src.icon_state = "ed209[src.on]"
mode = SECBOT_IDLE
else if (istype(W, /obj/item/weapon/card/id))
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (src.allowed(user))
src.locked = !src.locked
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
@@ -649,8 +649,16 @@ Auto Patrol: []"},
if (src.check_records)
for (var/datum/data/record/E in data_core.general)
var/perpname = perp.name
if (perp:wear_id && perp:wear_id.registered)
perpname = perp.wear_id.registered
if (perp:wear_id)
var/obj/item/weapon/card/id/id = perp:wear_id
if(istype(perp:wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = perp:wear_id
id = pda.id
if (id)
perpname = id.registered
else
var/obj/item/device/pda/pda = perp:wear_id
perpname = pda.owner
if (E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.security)
if ((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))

View File

@@ -91,7 +91,7 @@
del(T)
user << "\red You load [loaded] tiles into the floorbot. He now contains [src.amount] tiles!"
src.updateicon()
if(istype(W, /obj/item/weapon/card/id))
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(src.allowed(usr))
src.locked = !src.locked
user << "You [src.locked ? "lock" : "unlock"] the [src] behaviour controls."

View File

@@ -182,7 +182,7 @@
src.on = 1
src.icon_state = "medibot[src.on]"
else if (istype(W, /obj/item/weapon/card/id))
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (src.allowed(user))
src.locked = !src.locked
user << "Controls are now [src.locked ? "locked." : "unlocked."]"

View File

@@ -172,7 +172,7 @@ Auto Patrol: []"},
src.on = 1
src.icon_state = "secbot[src.on]"
mode = SECBOT_IDLE
else if (istype(W, /obj/item/weapon/card/id))
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (src.allowed(user))
src.locked = !src.locked
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
@@ -621,8 +621,16 @@ Auto Patrol: []"},
if (src.check_records)
for (var/datum/data/record/E in data_core.general)
var/perpname = perp.name
if (perp:wear_id && perp:wear_id.registered)
perpname = perp.wear_id.registered
if (perp:wear_id)
var/obj/item/weapon/card/id/id = perp:wear_id
if(istype(perp:wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = perp:wear_id
id = pda.id
if (id)
perpname = id.registered
else
var/obj/item/device/pda/pda = perp:wear_id
perpname = pda.owner
if (E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.security)
if ((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))

View File

@@ -19,6 +19,9 @@
if("login")
var/mob/M = usr
var/obj/item/weapon/card/id/I = M.equipped()
if (istype(I, /obj/item/device/pda))
var/obj/item/device/pda/pda = I
I = pda.id
if (I && istype(I))
if(src.check_access(I))
authenticated = 1

View File

@@ -137,6 +137,9 @@
else if (href_list["eject2"])
var/obj/item/weapon/card/id/I = usr.equipped()
if (istype(I, /obj/item/device/pda))
var/obj/item/device/pda/pda = I
I = pda.id
if (istype(I))
if(src.check_access(I))
if (!status)

View File

@@ -5,8 +5,10 @@
return
if (istype(W, /obj/item/weapon/card/id))
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (istype(W, /obj/item/device/pda))
var/obj/item/device/pda/pda = W
W = pda.id
if (!W:access) //no access
user << "The access level of [W:registered]\'s card is not high enough. "
return

View File

@@ -63,9 +63,12 @@
return
if (href_list["login"])
var/obj/item/I
if (istype(usr.l_hand, /obj/item/weapon/card/id)) I = usr.l_hand
if (istype(usr.r_hand, /obj/item/weapon/card/id)) I = usr.r_hand
var/obj/item/I = usr.equipped()
if (istype(I, /obj/item/device/pda))
var/obj/item/device/pda/pda = I
I = pda.id
// if (istype(usr.l_hand, /obj/item/weapon/card/id)) I = usr.l_hand
// if (istype(usr.r_hand, /obj/item/weapon/card/id)) I = usr.r_hand
if (I && src.check_access(I))
src.locked = 0
src.last_configurator = I:registered

View File

@@ -111,7 +111,7 @@
updateicon()
else if (istype(I, /obj/item/weapon/card/id))
else if (istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda))
if(open)
if (src.allowed(user))
src.locked = !src.locked

View File

@@ -674,7 +674,7 @@ However people seem to like it for some reason.
user << "You cut the emitter free from the floor."
return
if(istype(W, /obj/item/weapon/card/id))
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (src.allowed(user))
src.locked = !src.locked
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
@@ -1218,7 +1218,7 @@ However people seem to like it for some reason.
user << "You cut the field generator free from the floor."
return
if(istype(W, /obj/item/weapon/card/id))
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (src.allowed(user))
src.locked = !src.locked
user << "Controls are now [src.locked ? "locked." : "unlocked."]"

View File

@@ -497,7 +497,7 @@
/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/card/id))
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(src.internals_access_allowed(usr))
if(state==0)
state = 1

View File

@@ -16,7 +16,10 @@
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
user.drop_item()
if (W) W.loc = src.loc
else if (istype(W, /obj/item/weapon/card/id))
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(istype(W, /obj/item/device/pda))
var/obj/item/device/pda/pda = W
W = pda.id
if(src.broken)
user << "\red It appears to be broken."
return

View File

@@ -34,6 +34,8 @@
var/obj/item/weapon/integrated_uplink/uplink = null
var/message1 // used for status_displays
var/message2
var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
var/ownjob = null //related to above
/obj/item/device/pda/medical
default_cartridge = /obj/item/weapon/cartridge/medical
@@ -494,7 +496,9 @@
switch (src.mode)
if (0)
dat += "<h2>PERSONAL DATA ASSISTANT</h2>"
dat += "Owner: [src.owner]<br><br>"
dat += "Owner: [src.owner], [src.ownjob]<br>"
dat += text("ID: <A href='?src=\ref[];auth=1'>[]</A>", src, (src.id ? "[src.id.registered], [src.id.assignment]" : "----------"))
dat += "<br><br>"
dat += "<h4>General Functions</h4>"
dat += "<ul>"
@@ -1051,6 +1055,25 @@ Code:
src.add_fingerprint(usr)
usr.machine = src
if (href_list["auth"])
if (src.id)
if (istype(src.loc, /mob))
var/obj/item/W = src.loc:equipped()
var/emptyHand = (W == null)
if(emptyHand)
src.id.DblClick()
// src.id.loc = src.loc
// else if (istype(src.loc, /turf)) src.id.loc = src.loc
else src.id.loc = src.loc
src.id = null
else
var/obj/item/I = usr.equipped()
if (istype(I, /obj/item/weapon/card/id))
usr.drop_item()
I.loc = src
src.id = I
if (href_list["mm"])
src.mode = 0
@@ -1396,6 +1419,7 @@ Code:
else if (istype(C, /obj/item/weapon/card/id) && !src.owner && C:registered)
src.owner = C:registered
src.ownjob = C:assignment
src.name = "PDA-[src.owner]"
user << "\blue Card scanned."
src.updateUsrDialog()
@@ -1474,6 +1498,13 @@ Code:
del(src)
return
/obj/item/device/pda/Del()
if (src.id)
if(istype(src.loc, /mob))
src.id.loc = src.loc.loc
else src.id.loc = src.loc
..()
/obj/item/device/pda/clown/HasEntered(AM as mob|obj) //Clown PDA is slippery.
if (istype(AM, /mob/living/carbon))
var/mob/M = AM

View File

@@ -147,7 +147,13 @@ Frequency:
if (istype(M, /mob/living/carbon))
if (M:wear_id)
eqjobname = M:wear_id:assignment
var/obj/item/weapon/card/id/id
if (istype(M:wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = M:wear_id
id = pda.id
else id = M:wear_id
if (id.assignment) eqjobname = M:wear_id:assignment
else eqjobname = "No job"
else
eqjobname = "No id"
else if (istype(M,/mob/living/silicon/ai))

View File

@@ -293,6 +293,12 @@ var/ordernum=0
idname = usr:wear_id.registered
if(usr:wear_id.assignment)
idrank = usr:wear_id.assignment
if (istype(usr:wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = usr:wear_id
if(pda.owner)
idname = pda.owner
if(pda.ownjob)
idrank = pda.ownjob
else
idname = usr.name

View File

@@ -989,7 +989,11 @@ var/showadminmessages = 1
continue
H.paralysis += 5
if(H.wear_id)
for(var/A in H.wear_id.access)
var/obj/item/weapon/card/id/id = H.wear_id
if (istype (H.wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = H.wear_id
id = pda.id
for(var/A in id.access)
if(A == access_security)
security++
if(!security)

View File

@@ -246,9 +246,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if (H.wear_id)
var/obj/item/weapon/card/id/id = H.wear_id
if(istype(H.wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = H.wear_id
id = pda.id
log_admin("[key_name(src)] has granted [M.key] full access.")
H.wear_id.icon_state = "gold"
H.wear_id.access = get_all_accesses()
id.icon_state = "gold"
id:access = get_all_accesses()
else
alert("Invalid ID card")
else

View File

@@ -72,7 +72,11 @@
usr << "\blue [src.name] has a \icon[src.back] [src.back.name] on [t_his] back."
if (src.wear_id)
if (src.wear_id.registered != src.real_name && in_range(src, usr) && prob(10))
var/obj/item/weapon/card/id/id = src:wear_id
if(istype(src:wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = src:wear_id
id = pda.id
if (id.registered != src.real_name && in_range(src, usr) && prob(10))
usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] yet doesn't seem to be that person!!!"
else
usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name]."

View File

@@ -798,7 +798,7 @@
return
if (!src.w_uniform)
return
if (!( istype(W, /obj/item/weapon/card/id) ))
if (!istype(W, /obj/item/weapon/card/id) && !istype(W, /obj/item/device/pda) )
return
src.u_equip(W)
src.wear_id = W
@@ -1178,13 +1178,34 @@
src.s_store.screen_loc = ui_sstore1
if ((src.wear_mask && !(src.wear_mask.see_face)) || (src.head && !(src.head.see_face))) // can't see the face
if (src.wear_id && src.wear_id.registered)
src.name = src.wear_id.registered
if (src.wear_id)
if (istype(src.wear_id, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/id = src.wear_id
if (id.registered)
src.name = id.registered
else
src.name = "Unknown"
else if (istype(src.wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = src.wear_id
if (pda.owner)
src.name = pda.owner
else
src.name = "Unknown"
else
if (src.wear_id && src.wear_id.registered != src.real_name)
src.name = "[src.real_name] (as [src.wear_id.registered])"
src.name = "Unknown"
else
if (src.wear_id)
if (istype(src.wear_id, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/id = src.wear_id
if (id.registered != src.real_name)
src.name = "[src.real_name] (as [id.registered])"
else if (istype(src.wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = src.wear_id
if (pda.owner)
if (pda.owner != src.real_name)
src.name = "[src.real_name] (as [pda.owner])"
else
src.name = src.real_name
@@ -2217,7 +2238,7 @@
W.layer = initial(W.layer)
W.add_fingerprint(src.source)
else
if ((istype(src.item, /obj/item/weapon/card/id) && src.target.w_uniform))
if (((istype(src.item, /obj/item/weapon/card/id)||istype(src.item, /obj/item/device/pda)) && src.target.w_uniform))
src.source.drop_item()
src.loc = src.target
src.item.layer = 20

View File

@@ -18,8 +18,12 @@
var/alt_name = ""
if (istype(src, /mob/living/carbon/human) && src.name != src.real_name)
if (src:wear_id && src:wear_id:registered)
alt_name = " (as [src:wear_id:registered])"
if (src.wear_id)
var/obj/item/weapon/card/id/id = src:wear_id
if(istype(src:wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = src:wear_id
id = pda.id
alt_name = " (as [id:registered])"
else
alt_name = " (as Unknown)"

View File

@@ -27,8 +27,12 @@
var/alt_name = ""
if (istype(src, /mob/living/carbon/human) && src.name != src.real_name)
if (src:wear_id && src:wear_id:registered)
alt_name = " (as [src:wear_id:registered])"
if (src:wear_id)
var/obj/item/weapon/card/id/id = src:wear_id
if(istype(src:wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = src:wear_id
id = pda.id
alt_name = " (as [id:registered])"
else
alt_name = " (as Unknown)"

View File

@@ -395,7 +395,7 @@
user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
updateicon()
else if (istype(W, /obj/item/weapon/card/id)) // trying to unlock the interface with an ID card
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
if(emagged)
user << "The interface is broken"
else if(opened)

View File

@@ -14,8 +14,12 @@
var/alt_name = ""
if (istype(src, /mob/living/carbon/human) && src.name != src.real_name)
if (src:wear_id && src:wear_id:registered)
alt_name = " (as [src:wear_id:registered])"
if (src:wear_id)
var/obj/item/weapon/card/id/id = src:wear_id
if(istype(src:wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = src:wear_id
id = pda.id
alt_name = " (as [id:registered])"
else
alt_name = " (as Unknown)"
else if (istype(src, /mob/dead/observer))

View File

@@ -212,7 +212,7 @@
user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
updateicon()
else if (istype(W, /obj/item/weapon/card/id)) // trying to unlock the interface with an ID card
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
if(emagged || malfhack)
user << "The interface is broken"
else if(opened)