From 5a3b9d7a24ea77d0b4be65ec171ecbf14540e534 Mon Sep 17 00:00:00 2001 From: "baloh.matevz" Date: Wed, 15 Aug 2012 00:24:24 +0000 Subject: [PATCH] - A change to 'who' for admins, which now displays more information. Amongst these is the ckey of the person, the name of the character they're playing, their status as alive, unconscious, dead or observing (joined as observer) and whether they are an antagonist or not. Along with this you get an adminhelp-style (?) link which displays further information about the person. While this might not be considered a 'bugfix' it is necessary due to the removal of the tensioner panel as it gives a quick overview of how many people are alive and how many are dead. - Removed the obnoxious message blue and red colors which was shown when hydroponics trays were overran by weeds. The message is now blue and has a dot at the end, instead of an exclamation point. - Made '/obj/effect/debugging/marker' immovable. It was silly that it reacted to air movement. - Standardized mapping.dm - Removed the round-end condition of "Everyone is dead! Resetting in 30 seconds!" git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4415 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/mob/dead/observer.dm | 3 +- code/game/machinery/hydroponics.dm | 3 +- code/game/verbs/who.dm | 26 +- code/modules/admin/verbs/mapping.dm | 323 +++++++++++----------- code/modules/mob/death.dm | 25 -- code/modules/mob/new_player/new_player.dm | 1 + 6 files changed, 190 insertions(+), 191 deletions(-) diff --git a/code/defines/mob/dead/observer.dm b/code/defines/mob/dead/observer.dm index da90fc6d22b..4fb812720d5 100644 --- a/code/defines/mob/dead/observer.dm +++ b/code/defines/mob/dead/observer.dm @@ -12,4 +12,5 @@ // var/mob/corpse = null // observer mode //we use mind.current as the 'corpse' now var/can_reenter_corpse var/datum/hud/living/carbon/hud = null // hud - var/bootime = 0 \ No newline at end of file + var/bootime = 0 + var/started_as_observer //This variable is set to 1 when you enter the game as an observer. If you died in the game and are a ghsot - this will remain as null. Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. \ No newline at end of file diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index 61fb1becaa6..66a6cd3345e 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -218,9 +218,8 @@ obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, src.harvest = 0 src.weedlevel = 0 // Reset src.pestlevel = 0 // Reset - spawn(5) // Wait a while src.updateicon() - src.visible_message("\red[src] has been overtaken by \blue [src.myseed.plantname]!") + src.visible_message("\blue [src] has been overtaken by [src.myseed.plantname].") return diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 102d7236ab8..15fe7d38cfc 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -26,10 +26,32 @@ proc/get_all_admin_clients() var/list/peeps = list() for (var/client/C in client_list) + var/entry = "" if (C.stealth && !usr.client.holder) - peeps += "\t[C.fakekey]" + entry += "\t[C.fakekey]" else - peeps += "\t[C.key][C.stealth ? " (as [C.fakekey])" : ""]" + entry += "\t[C.key][C.stealth ? " (as [C.fakekey])" : ""]" + + if(usr.client.holder) + var/mob/M = C.mob + entry += " - Playing as [M.real_name]" + switch(M.stat) + if(UNCONSCIOUS) + entry += " - Unconscious" + if(DEAD) + if(isobserver(M)) + var/mob/dead/observer/O = M + if(O.started_as_observer) + entry += " - Observing" + else + entry += " - DEAD" + else + entry += " - DEAD" + if(is_special_character(C.mob)) + entry += " - Antagonist" + entry += " (?)" + + peeps += entry peeps = sortList(peeps) diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index d0de3660df2..9f684d77fb9 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -34,183 +34,184 @@ var/intercom_range_display_status = 0 icon = 'icons/turf/areas.dmi' icon_state = "yellow" -/client/proc +/obj/effect/debugging/marker/Move() + return 0 - do_not_use_these() - set category = "Mapping" - set name = "-None of these are for ingame use!!" +/client/proc/do_not_use_these() + set category = "Mapping" + set name = "-None of these are for ingame use!!" - ..() + ..() - camera_view() - set category = "Mapping" - set name = "Camera Range Display" +/client/proc/camera_view() + set category = "Mapping" + set name = "Camera Range Display" - if(camera_range_display_status) - camera_range_display_status = 0 - else - camera_range_display_status = 1 + if(camera_range_display_status) + camera_range_display_status = 0 + else + camera_range_display_status = 1 - for(var/obj/effect/debugging/camera_range/C in world) - del(C) - - if(camera_range_display_status) - for(var/obj/machinery/camera/C in Cameras) - new/obj/effect/debugging/camera_range(C.loc) - feedback_add_details("admin_verb","mCRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - - - sec_camera_report() - set category = "Mapping" - set name = "Camera Report" - - if(!master_controller) - alert(usr,"Master_controller not found.","Sec Camera Report") - return 0 - - var/list/obj/machinery/camera/CL = list() + for(var/obj/effect/debugging/camera_range/C in world) + del(C) + if(camera_range_display_status) for(var/obj/machinery/camera/C in Cameras) - CL += C + new/obj/effect/debugging/camera_range(C.loc) + feedback_add_details("admin_verb","mCRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - var/output = {"CAMERA ANNOMALITIES REPORT
+ + +/client/proc/sec_camera_report() + set category = "Mapping" + set name = "Camera Report" + + if(!master_controller) + alert(usr,"Master_controller not found.","Sec Camera Report") + return 0 + + var/list/obj/machinery/camera/CL = list() + + for(var/obj/machinery/camera/C in Cameras) + CL += C + + var/output = {"CAMERA ANNOMALITIES REPORT
The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.
" - usr << browse(output,"window=airreport;size=1000x500") - feedback_add_details("admin_verb","mCRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - intercom_view() - set category = "Mapping" - set name = "Intercom Range Display" - - if(intercom_range_display_status) - intercom_range_display_status = 0 - else - intercom_range_display_status = 1 - - for(var/obj/effect/debugging/marker/M in world) - del(M) - - if(intercom_range_display_status) - for(var/obj/item/device/radio/intercom/I in world) - for(var/turf/T in orange(7,I)) - var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) - if (!(F in view(7,I.loc))) - del(F) - feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - enable_debug_verbs() - set category = "Debug" - set name = "Debug verbs" - src.verbs += /client/proc/do_not_use_these //-errorage - src.verbs += /client/proc/camera_view //-errorage - src.verbs += /client/proc/sec_camera_report //-errorage - src.verbs += /client/proc/intercom_view //-errorage - src.verbs += /client/proc/air_status //Air things - src.verbs += /client/proc/Cell //More air things - src.verbs += /client/proc/atmosscan //check plumbing - src.verbs += /client/proc/powerdebug //check power - src.verbs += /client/proc/count_objects_on_z_level - src.verbs += /client/proc/count_objects_all - src.verbs += /client/proc/cmd_assume_direct_control //-errorage - src.verbs += /client/proc/jump_to_dead_group - src.verbs += /client/proc/startSinglo - src.verbs += /client/proc/ticklag //allows you to set the ticklag. - src.verbs += /client/proc/cmd_admin_grantfullaccess - //src.verbs += /client/proc/cmd_admin_rejuvenate - - feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - count_objects_on_z_level() - set category = "Mapping" - set name = "Count Objects On Level" - var/level = input("Which z-level?","Level?") as text - if(!level) return - var/num_level = text2num(level) - if(!num_level) return - if(!isnum(num_level)) return - - var/type_text = input("Which type path?","Path?") as text - if(!type_text) return - var/type_path = text2path(type_text) - if(!type_path) return - - var/count = 0 - - var/list/atom/atom_list = list() - - for(var/atom/A in world) - if(istype(A,type_path)) - var/atom/B = A - while(!(isturf(B.loc))) - if(B && B.loc) - B = B.loc - else + for(var/obj/machinery/camera/C1 in CL) + for(var/obj/machinery/camera/C2 in CL) + if(C1 != C2) + if(C1.c_tag == C2.c_tag) + output += "
  • c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]
  • " + if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y) + output += "
  • FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " + if(C1.loc == C2.loc) + output += "
  • overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " + var/turf/T = get_step(C1,turn(C1.dir,180)) + if(!T || !isturf(T) || !T.density ) + if(!(locate(/obj/structure/grille,T))) + var/window_check = 0 + for(var/obj/structure/window/W in T) + if (W.dir == turn(C1.dir,180) || W.dir in list(5,6,9,10) ) + window_check = 1 break - if(B) - if(B.z == num_level) - count++ - atom_list += A - /* - var/atom/temp_atom - for(var/i = 0; i <= (atom_list.len/10); i++) - var/line = "" - for(var/j = 1; j <= 10; j++) - if(i*10+j <= atom_list.len) - temp_atom = atom_list[i*10+j] - line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " - world << line*/ + if(!window_check) + output += "
  • Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]
  • " - world << "There are [count] objects of type [type_path] on z-level [num_level]" - feedback_add_details("admin_verb","mOBJZ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + output += "" + usr << browse(output,"window=airreport;size=1000x500") + feedback_add_details("admin_verb","mCRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - count_objects_all() - set category = "Mapping" - set name = "Count Objects All" +/client/proc/intercom_view() + set category = "Mapping" + set name = "Intercom Range Display" - var/type_text = input("Which type path?","") as text - if(!type_text) return - var/type_path = text2path(type_text) - if(!type_path) return + if(intercom_range_display_status) + intercom_range_display_status = 0 + else + intercom_range_display_status = 1 - var/count = 0 + for(var/obj/effect/debugging/marker/M in world) + del(M) - for(var/atom/A in world) - if(istype(A,type_path)) - count++ - /* - var/atom/temp_atom - for(var/i = 0; i <= (atom_list.len/10); i++) - var/line = "" - for(var/j = 1; j <= 10; j++) - if(i*10+j <= atom_list.len) - temp_atom = atom_list[i*10+j] - line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " - world << line*/ + if(intercom_range_display_status) + for(var/obj/item/device/radio/intercom/I in world) + for(var/turf/T in orange(7,I)) + var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) + if (!(F in view(7,I.loc))) + del(F) + feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - world << "There are [count] objects of type [type_path] in the game world" - feedback_add_details("admin_verb","mOBJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file +/client/proc/enable_debug_verbs() + set category = "Debug" + set name = "Debug verbs" + src.verbs += /client/proc/do_not_use_these //-errorage + src.verbs += /client/proc/camera_view //-errorage + src.verbs += /client/proc/sec_camera_report //-errorage + src.verbs += /client/proc/intercom_view //-errorage + src.verbs += /client/proc/air_status //Air things + src.verbs += /client/proc/Cell //More air things + src.verbs += /client/proc/atmosscan //check plumbing + src.verbs += /client/proc/powerdebug //check power + src.verbs += /client/proc/count_objects_on_z_level + src.verbs += /client/proc/count_objects_all + src.verbs += /client/proc/cmd_assume_direct_control //-errorage + src.verbs += /client/proc/jump_to_dead_group + src.verbs += /client/proc/startSinglo + src.verbs += /client/proc/ticklag //allows you to set the ticklag. + src.verbs += /client/proc/cmd_admin_grantfullaccess + //src.verbs += /client/proc/cmd_admin_rejuvenate + + feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/count_objects_on_z_level() + set category = "Mapping" + set name = "Count Objects On Level" + var/level = input("Which z-level?","Level?") as text + if(!level) return + var/num_level = text2num(level) + if(!num_level) return + if(!isnum(num_level)) return + + var/type_text = input("Which type path?","Path?") as text + if(!type_text) return + var/type_path = text2path(type_text) + if(!type_path) return + + var/count = 0 + + var/list/atom/atom_list = list() + + for(var/atom/A in world) + if(istype(A,type_path)) + var/atom/B = A + while(!(isturf(B.loc))) + if(B && B.loc) + B = B.loc + else + break + if(B) + if(B.z == num_level) + count++ + atom_list += A + /* + var/atom/temp_atom + for(var/i = 0; i <= (atom_list.len/10); i++) + var/line = "" + for(var/j = 1; j <= 10; j++) + if(i*10+j <= atom_list.len) + temp_atom = atom_list[i*10+j] + line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " + world << line*/ + + world << "There are [count] objects of type [type_path] on z-level [num_level]" + feedback_add_details("admin_verb","mOBJZ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/count_objects_all() + set category = "Mapping" + set name = "Count Objects All" + + var/type_text = input("Which type path?","") as text + if(!type_text) return + var/type_path = text2path(type_text) + if(!type_path) return + + var/count = 0 + + for(var/atom/A in world) + if(istype(A,type_path)) + count++ + /* + var/atom/temp_atom + for(var/i = 0; i <= (atom_list.len/10); i++) + var/line = "" + for(var/j = 1; j <= 10; j++) + if(i*10+j <= atom_list.len) + temp_atom = atom_list[i*10+j] + line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " + world << line*/ + + world << "There are [count] objects of type [type_path] in the game world" + feedback_add_details("admin_verb","mOBJ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 4cbf91a0100..5f50e4f06b5 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -50,31 +50,6 @@ /mob/proc/death(gibbed) timeofdeath = world.time - var/cancel = 0 - for(var/mob/M in player_list) - if(M.stat != DEAD) - cancel = 1 - break - if(!cancel) - world << "Everyone is dead! Resetting in 30 seconds!" - - spawn(300) - for(var/mob/M in player_list) - if(M.stat != DEAD) - world << "Aborting world restart!" - return - - feedback_set_details("end_error","no live players") - - if(blackbox) - blackbox.save_all_data_to_sql() - - sleep(50) - - log_game("Rebooting because of no live players") - world.Reboot() - return - living_mob_list -= src dead_mob_list += src return ..(gibbed) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index bef760134f5..1be3bc1eedd 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -130,6 +130,7 @@ spawning = 1 src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo + observer.started_as_observer = 1 close_spawn_windows() var/obj/O = locate("landmark*Observer-Start") src << "\blue Now teleporting."