From c90048c7aa41b992891f56eb140f736ec1dc8a1f Mon Sep 17 00:00:00 2001 From: "daniel.cf.hultgren@gmail.com" Date: Fri, 1 Jun 2012 19:53:16 +0000 Subject: [PATCH] * Added pickup verb to all items * Added "Toggle Open" verb to all closets and crates * Added "Toggle Lock" verb to all lockable closets * Modified the cloning computer's UI slightly, makes more sense, added a little delay when scanning to improve user feedback when trying to clone several braindead bodies. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3712 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj.dm | 10 ++ code/game/machinery/computer/cloning.dm | 101 ++++++++++-------- code/game/objects/closets.dm | 10 ++ .../objects/closets/secure/secure_closets.dm | 40 ++++--- 4 files changed, 101 insertions(+), 60 deletions(-) diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 97d929451b..12cd04964f 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -308,6 +308,16 @@ var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) var/list/allowed = null //suit storage stuff. +/obj/item/verb/verb_pickup() + set src in oview(1) + set category = "Object" + set name = "Pickup" + + if(!usr.canmove || usr.stat || usr.restrained()) + return + + src.attack_hand(usr) + /obj/item/device icon = 'device.dmi' diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 3843e8489a..a3f852d2be 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -83,70 +83,54 @@ req_access = list(access_heads) //Only used for record deletion right now. var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning. var/obj/machinery/clonepod/pod1 = null //Linked cloning pod. - var/temp = "Initializing System..." + var/temp = "" + var/scantemp = "Scanner unoccupied" var/menu = 1 //Which menu screen to display var/list/records = list() var/datum/data/record/active_record = null var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything. + var/loading = 0 // Nice loading text /obj/machinery/computer/cloning/New() ..() spawn(5) updatemodules() - /*src.scanner = findscanner()//locate(/obj/machinery/dna_scannernew, get_step(src, WEST)) - src.pod1 = findcloner()//locate(/obj/machinery/clonepod, get_step(src, EAST)) - world << "SEARCHING FOR MACHEIN" - src.temp = "" - if (isnull(src.scanner)) - src.temp += " SCNR-ERROR" - if (isnull(src.pod1)) - src.temp += " POD1-ERROR" - else - src.pod1.connected = src - - if (src.temp == "") - src.temp = "System ready."*/ return return /obj/machinery/computer/cloning/proc/updatemodules() - //world << "UPDATING MODULES" - src.scanner = findscanner()//locate(/obj/machinery/dna_scannernew, get_step(src, WEST)) - src.pod1 = findcloner()//locate(/obj/machinery/clonepod, get_step(src, EAST)) - //world << "SEARCHING FOR MACHEIN" - //src.temp = "" - //if (isnull(src.scanner)) - // src.temp += " SCNR-ERROR" - if (!isnull(src.pod1)) - src.pod1.connected = src - // src.temp += " POD1-ERROR" - //else + src.scanner = findscanner() + src.pod1 = findcloner() - //if (src.temp == "") - // src.temp = "System ready." + if (!isnull(src.pod1)) + src.pod1.connected = src // Some variable the pod needs /obj/machinery/computer/cloning/proc/findscanner() - //..() - //world << "SEARCHING FOR SCANNER" var/obj/machinery/dna_scannernew/scannerf = null + + // Loop through every direction for(dir in list(NORTH,EAST,SOUTH,WEST)) - //world << "SEARCHING IN [dir]" + + // Try to find a scanner in that direction scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir)) + + // If found, then we break, and return the scanner if (!isnull(scannerf)) - //world << "FOUND" break + + // If no scanner was found, it will return null return scannerf /obj/machinery/computer/cloning/proc/findcloner() - //..() - //world << "SEARCHING FOR POD" var/obj/machinery/clonepod/podf = null + for(dir in list(NORTH,EAST,SOUTH,WEST)) - //world << "SEARCHING IN [dir]" + podf = locate(/obj/machinery/clonepod, get_step(src, dir)) + if (!isnull(podf)) - //world << "FOUND" break + return podf /obj/machinery/computer/cloning/attackby(obj/item/W as obj, mob/user as mob) @@ -184,6 +168,7 @@ switch(src.menu) if(1) + // Modules dat += "

Modules

" //dat += "Reload Modules" if (isnull(src.scanner)) @@ -195,18 +180,27 @@ else dat += " Pod-Found!
" + // Scanner dat += "

Scanner Functions

" + if(loading) + dat += "Scanning...
" + else + dat += "[scantemp]
" + if (isnull(src.scanner)) - dat += "No scanner connected!" + dat += "No scanner connected!
" else if (src.scanner.occupant) - dat += "Scan - [src.scanner.occupant]" + if(scantemp == "Scanner unoccupied") scantemp = "" // Stupid check to remove the text + + dat += "Scan - [src.scanner.occupant]
" else - dat += "Scanner unoccupied" + scantemp = "Scanner unoccupied" - dat += "
Lock status: [src.scanner.locked ? "Locked" : "Unlocked"]" + dat += "Lock status: [src.scanner.locked ? "Locked" : "Unlocked"]
" + // Database dat += "

Database Functions

" dat += "View Records
" if (src.diskette) @@ -268,8 +262,21 @@ if(..()) return + if(loading) + return + if ((href_list["scan"]) && (!isnull(src.scanner))) - src.scan_mob(src.scanner.occupant) + scantemp = "" + + loading = 1 + src.updateUsrDialog() + + spawn(20) + src.scan_mob(src.scanner.occupant) + + loading = 0 + src.updateUsrDialog() + //No locking an open scanner. else if ((href_list["lock"]) && (!isnull(src.scanner))) @@ -380,22 +387,22 @@ /obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject as mob) if ((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna)) - src.temp = "Error: Unable to locate valid genetic data." + scantemp = "Error: Unable to locate valid genetic data." return if (subject.brain_op_stage == 4.0) - src.temp = "Error: No signs of intelligence detected." + scantemp = "Error: No signs of intelligence detected." return if (subject.suiciding == 1) - src.temp = "Error: Subject's brain is not responding to scanning stimuli." + scantemp = "Error: Subject's brain is not responding to scanning stimuli." return if ((!subject.ckey) || (!subject.client)) - src.temp = "Error: Mental interface failure." + scantemp = "Error: Mental interface failure." return if (NOCLONE in subject.mutations) - src.temp = "Error: Mental interface failure." + scantemp = "Error: Mental interface failure." return if (!isnull(find_record(subject.ckey))) - src.temp = "Subject already in database." + scantemp = "Subject already in database." return subject.dna.check_integrity() @@ -428,7 +435,7 @@ R.fields["mind"] = "\ref[subject.mind]" src.records += R - src.temp = "Subject successfully scanned." + scantemp = "Subject successfully scanned." //Find a specific record by key. /obj/machinery/computer/cloning/proc/find_record(var/find_key) diff --git a/code/game/objects/closets.dm b/code/game/objects/closets.dm index 5476833e04..042e20e6dd 100644 --- a/code/game/objects/closets.dm +++ b/code/game/objects/closets.dm @@ -216,3 +216,13 @@ if(!src.toggle()) usr << "\blue It won't budge!" + +/obj/structure/closet/verb/verb_toggleopen() + set src in oview(1) + set category = "Object" + set name = "Toggle Open" + + if(!usr.canmove || usr.stat || usr.restrained()) + return + + src.attack_hand(usr) diff --git a/code/game/objects/closets/secure/secure_closets.dm b/code/game/objects/closets/secure/secure_closets.dm index a9feb95e1c..88881d37de 100644 --- a/code/game/objects/closets/secure/secure_closets.dm +++ b/code/game/objects/closets/secure/secure_closets.dm @@ -24,6 +24,19 @@ src.req_access += pick(get_all_accesses()) ..() +/obj/structure/closet/secure_closet/proc/togglelock(mob/user as mob) + if(src.allowed(user)) + src.locked = !src.locked + for(var/mob/O in viewers(user, 3)) + if((O.client && !( O.blinded ))) + O << "\blue The locker has been [src.locked ? null : "un"]locked by [user]." + if(src.locked) + src.icon_state = src.icon_locked + else + src.icon_state = src.icon_closed + else + user << "\red Access Denied" + /obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob) if(src.opened) if(istype(W, /obj/item/weapon/grab)) @@ -54,19 +67,8 @@ else for(var/mob/O in viewers(user, 3)) O.show_message("\blue The locker has been broken by [user] with an electromagnetic card!", 1, "You hear a faint electrical spark.", 2) - else if(src.allowed(user)) - src.locked = !src.locked - for(var/mob/O in viewers(user, 3)) - if((O.client && !( O.blinded ))) - O << "\blue The locker has been [src.locked ? null : "un"]locked by [user]." - if(src.locked) - src.icon_state = src.icon_locked - else - src.icon_state = src.icon_closed - else - user << "\red Access Denied" - return + togglelock(user) /obj/structure/closet/secure_closet/relaymove(mob/user as mob) if(user.stat) @@ -96,4 +98,16 @@ return src.attackby(null, user) /obj/structure/closet/secure_closet/attack_paw(mob/user as mob) - return src.attack_hand(user) \ No newline at end of file + return src.attack_hand(user) + +/obj/structure/closet/secure_closet/verb/verb_togglelock() + set src in oview(1) // Can only use it from one square distance + set category = "Object" + set name = "Toggle Lock" + + if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain + return + + if(!opened) // If we let him lock it while it's open, it will close without the items inside going with it + togglelock(usr) +