Merge pull request #130 from Tastyfish/master

improved sec/med id card handling, records management, also spaceman christmas
This commit is contained in:
Albert Iordache
2011-12-23 01:17:13 -08:00
10 changed files with 244 additions and 15 deletions
+2
View File
@@ -134,6 +134,7 @@
req_access = list(access_medical)
circuit = "/obj/item/weapon/circuitboard/med_data"
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/disk/records/disk = null
var/authenticated = null
var/rank = null
var/screen = null
@@ -182,6 +183,7 @@
req_access = list(access_security)
circuit = "/obj/item/weapon/circuitboard/secure_data"
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/disk/records/disk = null
var/authenticated = null
var/rank = null
var/screen = null
+54 -3
View File
@@ -1,3 +1,16 @@
/obj/machinery/computer/med_data/attackby(obj/item/O as obj, user as mob)
if(istype(O, /obj/item/weapon/card/id) && !scan)
usr.drop_item()
O.loc = src
scan = O
user << "You insert [O]."
else if(istype(O, /obj/item/weapon/disk/records) && !disk)
usr.drop_item()
O.loc = src
disk = O
user << "You insert [O]."
..()
/obj/machinery/computer/med_data/attack_ai(user as mob)
return src.attack_hand(user)
@@ -33,7 +46,24 @@
//Foreach goto(132)
dat += text("<HR><A href='?src=\ref[];screen=1'>Back</A>", src)
if(3.0)
dat += text("<B>Records Maintenance</B><HR>\n<A href='?src=\ref[];back=1'>Backup To Disk</A><BR>\n<A href='?src=\ref[];u_load=1'>Upload From disk</A><BR>\n<A href='?src=\ref[];del_all=1'>Delete All Records</A><BR>\n<BR>\n<A href='?src=\ref[];screen=1'>Back</A>", src, src, src, src)
dat += "<B>Records Maintenance</B><HR>"
if(disk)
dat += "<B>Disk Contents:</B><UL style='margin-top:0;margin-bottom:0'>"
if(disk.general)
dat += "<LI>General</LI>"
if(disk.medical)
dat += "<LI>Medical</LI>"
if(disk.security)
dat += "<LI>Security</LI>"
dat += "</UL><A href='?src=\ref[src];backup=1'>Backup To Disk</A><BR>"
if(disk.general && disk.medical)
dat += "<A href='?src=\ref[src];restore=1'>Restore From Disk</A><BR>"
else
dat += "Disk does not contain medical records.<BR>"
dat += "<A href='?src=\ref[src];eject_disk=1'>Eject Disk</A><BR>"
else
dat += "Please insert a records disk.<BR>"
dat += "<BR><A href='?src=\ref[src];del_all=1'>Delete All Records</A><BR><BR><A href='?src=\ref[src];screen=1'>Back</A>"
if(4.0)
dat += "<CENTER><B>Medical Record</B></CENTER><BR>"
if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
@@ -98,8 +128,11 @@
src.temp = null
if (href_list["scan"])
if (src.scan)
src.scan.loc = src.loc
src.scan = null
if(!usr.get_active_hand())
usr.put_in_hand(scan)
else
scan.loc = get_turf(src)
scan = null
else
var/obj/item/I = usr.equipped()
if (istype(I, /obj/item/weapon/card/id))
@@ -422,6 +455,24 @@
if ((E.fields["name"] == active2.fields["name"] || E.fields["id"] == active2.fields["id"]))
active1 = E
screen = 4
if (href_list["eject_disk"])
if (!disk)
return
if(!usr.get_active_hand())
usr.put_in_hand(disk)
else
disk.loc = get_turf(src)
disk = null
if (href_list["backup"])
if (!disk)
return
disk.backup(1, 0)
temp = "Data backup complete."
if (href_list["restore"])
if (!disk)
return
disk.restore(1, 0)
temp = "Data restore complete."
src.add_fingerprint(usr)
src.updateUsrDialog()
+150 -2
View File
@@ -1,3 +1,16 @@
/obj/machinery/computer/secure_data/attackby(obj/item/O as obj, user as mob)
if(istype(O, /obj/item/weapon/card/id) && !scan)
usr.drop_item()
O.loc = src
scan = O
user << "You insert [O]."
else if(istype(O, /obj/item/weapon/disk/records) && !disk)
usr.drop_item()
O.loc = src
disk = O
user << "You insert [O]."
..()
/obj/machinery/computer/secure_data/attack_ai(mob/user as mob)
return attack_hand(user)
@@ -65,7 +78,24 @@
dat += text("<A href='?src=\ref[];choice=Record Maintenance'>Record Maintenance</A><br><br>", src)
dat += text("<A href='?src=\ref[];choice=Log Out'>{Log Out}</A>",src)
if(2.0)
dat += text("<B>Records Maintenance</B><HR>\n<A href='?src=\ref[];choice=Delete All Records'>Delete All Records</A><BR>\n<BR>\n<A href='?src=\ref[];choice=Return'>Back</A>", src, src)
dat += "<B>Records Maintenance</B><HR>"
if(disk)
dat += "<B>Disk Contents:</B><UL style='margin-top:0;margin-bottom:0'>"
if(disk.general)
dat += "<LI>General</LI>"
if(disk.medical)
dat += "<LI>Medical</LI>"
if(disk.security)
dat += "<LI>Security</LI>"
dat += "</UL><A href='?src=\ref[src];choice=backup'>Backup To Disk</A><BR>"
if(disk.general && disk.security)
dat += "<A href='?src=\ref[src];choice=restore'>Restore From Disk</A><BR>"
else
dat += "Disk does not contain security records.<BR>"
dat += "<A href='?src=\ref[src];choice=eject_disk'>Eject Disk</A><BR>"
else
dat += "Please insert a records disk.<BR>"
dat += "<BR><A href='?src=\ref[src];choice=Delete All Records'>Delete All Records</A><BR><BR><A href='?src=\ref[src];choice=Return'>Back</A>"
if(3.0)
dat += "<CENTER><B>Security Record</B></CENTER><BR>"
if ((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
@@ -162,7 +192,10 @@ What a mess.*/
if("Confirm Identity")
if (scan)
scan.loc = loc
if(!usr.get_active_hand())
usr.put_in_hand(scan)
else
scan.loc = get_turf(src)
scan = null
else
var/obj/item/I = usr.equipped()
@@ -425,6 +458,24 @@ What a mess.*/
temp += "</ul>"
else
alert(usr, "You do not have the required rank to do this!")
if ("eject_disk")
if (!disk)
return
if(!usr.get_active_hand())
usr.put_in_hand(disk)
else
disk.loc = get_turf(src)
disk = null
if ("backup")
if (!disk)
return
disk.backup(0, 1)
temp = "Data backup complete."
if ("restore")
if (!disk)
return
disk.restore(0, 1)
temp = "Data restore complete."
//TEMPORARY MENU FUNCTIONS
else//To properly clear as per clear screen.
temp=null
@@ -466,3 +517,100 @@ What a mess.*/
updateUsrDialog()
return
/obj/item/weapon/disk/records
name = "Crew Records Disk"
desc = "Stores security and medical records."
icon = 'cloning.dmi'
icon_state = "datadisk2"
item_state = "card-id"
w_class = 1.0
var/list/general
var/list/security
var/list/medical
/obj/item/weapon/disk/records/verb/label(t as text)
set name = "Label Disk"
set category = "Object"
set src in usr
if (t)
src.name = text("Records Disk - '[]'", t)
else
src.name = "Crew Records Disk"
src.add_fingerprint(usr)
return
/obj/item/weapon/disk/records/proc/backup(var/med, var/sec)
// have to manually copy each field so there's no references between data_core and the disk
general = new()
for(var/datum/data/record/E in data_core.general)
var/datum/data/record/G = new /datum/data/record()
for(var/F in E.fields)
G.fields[F] += E.fields[F]
general += G
if(med)
medical = new()
for(var/datum/data/record/E in data_core.medical)
var/datum/data/record/G = new /datum/data/record()
for(var/F in E.fields)
G.fields[F] += E.fields[F]
medical += G
if(sec)
security = new()
for(var/datum/data/record/E in data_core.security)
var/datum/data/record/G = new /datum/data/record()
for(var/F in E.fields)
G.fields[F] += E.fields[F]
security += G
/obj/item/weapon/disk/records/proc/restore(var/med, var/sec)
// actually merge the content to not wipe new arrivals, etc
if(general)
for(var/datum/data/record/R in general)
for(var/datum/data/record/E in data_core.general)
if (E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])
data_core.general -= E
break
var/datum/data/record/G = new /datum/data/record()
for(var/F in R.fields)
G.fields[F] += R.fields[F]
data_core.general += G
if(med && medical)
for(var/datum/data/record/R in medical)
for(var/datum/data/record/E in data_core.medical)
if (E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])
data_core.medical -= E
break
var/datum/data/record/G = new /datum/data/record()
for(var/F in R.fields)
G.fields[F] += R.fields[F]
data_core.medical += G
if(sec && security)
for(var/datum/data/record/R in security)
for(var/datum/data/record/E in data_core.security)
if (E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])
data_core.security -= E
break
var/datum/data/record/G = new /datum/data/record()
for(var/F in R.fields)
G.fields[F] += R.fields[F]
data_core.security += G
/obj/item/weapon/storage/recordsbox
name = "Records Diskette Box"
icon_state = "disk_kit"
item_state = "syringe_kit"
/obj/item/weapon/storage/recordsbox/New()
..()
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
new /obj/item/weapon/disk/records(src)
+2
View File
@@ -207,6 +207,7 @@
verbs += /client/proc/admin_cancel_shuttle
verbs += /obj/admins/proc/show_traitor_panel
verbs += /client/proc/cmd_admin_dress
verbs += /client/proc/cmd_admin_christmas
verbs += /client/proc/respawn_character
verbs += /client/proc/spawn_xeno
verbs += /proc/possess
@@ -340,6 +341,7 @@
verbs -= /client/proc/admin_cancel_shuttle
verbs -= /obj/admins/proc/show_traitor_panel
verbs -= /client/proc/cmd_admin_dress
verbs -= /client/proc/cmd_admin_christmas
verbs -= /client/proc/respawn_character
verbs -= /client/proc/spawn_xeno
verbs -= /proc/possess
+23
View File
@@ -0,0 +1,23 @@
var/global/gimmick_hat = null
// irreversable, for now
/client/proc/cmd_admin_christmas()
set category = "Fun"
set name = "Christmas Time"
if(!authenticated || !holder)
src << "Only administrators may use this command."
return
if(!gimmick_hat)
log_admin("[usr.key] has started Christmas!")
message_admins("<font color='blue'>[usr.key] has started Christmas!</font>")
// handle pre-existing hats
gimmick_hat = "santahat"
else
log_admin("[usr.key] has stopped Christmas!")
message_admins("<font color='blue'>[usr.key] has stopped Christmas!</font>")
// handle pre-existing hats
gimmick_hat = null
@@ -31,10 +31,10 @@
usr << "\blue [src.name] has a \icon[src.wear_suit] [src.wear_suit.name] on."
if (src.l_ear)
usr << "\blue [src.name] has a \icon[src.l_ear] [src.l_ear.name] by [t_his] mouth."
usr << "\blue [src.name] has a \icon[src.l_ear] [src.l_ear.name] on [t_his] left ear."
if (src.r_ear)
usr << "\blue [src.name] has a \icon[src.r_ear] [src.r_ear.name] by [t_his] mouth."
usr << "\blue [src.name] has a \icon[src.r_ear] [src.r_ear.name] on [t_his] right ear."
if (src.wear_mask)
if (src.wear_mask.blood_DNA)
@@ -1006,6 +1006,8 @@
if(istype(head,/obj/item/clothing/head/kitty))
head_icon = (( lying ) ? head:mob2 : head:mob)
overlays += image("icon" = head_icon, "layer" = MOB_LAYER)
if(gimmick_hat)
overlays += image("icon" = icon('gimmick_head.dmi', "[gimmick_hat][!lying ? "" : "2"]"), "layer" = MOB_LAYER)
if (head.blood_DNA)
var/icon/stain_icon = icon('blood.dmi', "helmetblood[!lying ? "" : "2"]")
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)