diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 08ca1ab291c..f63473216a9 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -24,12 +24,9 @@ GLOBAL_LIST_INIT(admin_verbs_admin, list( /client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/ /client/proc/cmd_admin_open_logging_view, /client/proc/getserverlogs, /*allows us to fetch server logs (diary) for other days*/ - /client/proc/jumptocoord, /*we ghost and jump to a coordinate*/ /client/proc/Getmob, /*teleports a mob to our location*/ /client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/ - /client/proc/Jump, - /client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/ - /client/proc/jumptomob, /*allows us to jump to a specific mob*/ + /client/proc/jump_to, /*Opens a menu for jumping to an Area, Mob, Key or Coordinate*/ /client/proc/jumptoturf, /*allows us to jump to a specific turf*/ /client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/ /client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/ diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 5441bb1ce9a..ed2aff985f1 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -1,23 +1,56 @@ -/client/proc/Jump(area/A in return_sorted_areas()) - set name = "Jump to Area" - set desc = "Area to jump to" +/client/proc/jump_to() + set name = "Jump to..." + set desc = "Area, Mob, Key or Coordinate" set category = "Admin" + var/list/choices = list("Area", "Mob", "Key", "Coordinates") if(!check_rights(R_ADMIN)) return - if(!A) + var/chosen = input(src, null, "Jump to...") as null|anything in choices + if(!chosen) + return + + var/jumping // Thing to jump to + switch(chosen) + if("Area") + jumping = input(src, "Area to jump to", "Jump to Area") as null|anything in return_sorted_areas() + if(jumping) + return jumptoarea(jumping) + if("Mob") + jumping = input(src, "Mob to jump to", "Jump to Mob") as null|anything in GLOB.mob_list + if(jumping) + return jumptomob(jumping) + if("Key") + jumping = input(src, "Key to jump to", "Jump to Key") as null|anything in sortKey(GLOB.clients) + if(jumping) + return jumptokey(jumping) + if("Coordinates") + var/x = input(src, "X Coordinate", "Jump to Coordinates") as null|num + if(!x) + return + var/y = input(src, "Y Coordinate", "Jump to Coordinates") as null|num + if(!y) + return + var/z = input(src, "Z Coordinate", "Jump to Coordinates") as null|num + if(!z) + return + return jumptocoord(x, y, z) + + +/client/proc/jumptoarea(area/A) + if(!A || !check_rights(R_ADMIN)) return var/list/turfs = list() for(var/turf/T in A) if(T.density) continue - if(locate(/obj/structure/grille, T)) // Quick check to not spawn in windows + if(locate(/obj/structure/grille) in T) // Quick check to not spawn in windows continue - turfs.Add(T) + turfs += T - var/turf/T = pick_n_take(turfs) + var/turf/T = safepick(turfs) if(!T) to_chat(src, "Nowhere to jump to!") return @@ -49,11 +82,9 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Jump To Turf") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return -/client/proc/jumptomob(mob/M in GLOB.mob_list) - set category = "Admin" +/client/proc/jumptomob(mob/M) set name = "Jump to Mob" - - if(!check_rights(R_ADMIN)) + if(!M || !check_rights(R_ADMIN)) return log_admin("[key_name(usr)] jumped to [key_name(M)]") @@ -72,9 +103,6 @@ to_chat(A, "This mob is not located in the game world.") /client/proc/jumptocoord(tx as num, ty as num, tz as num) - set category = "Admin" - set name = "Jump to Coordinate" - if(!isobserver(usr) && !check_rights(R_ADMIN)) // Only admins can jump without being a ghost return @@ -91,21 +119,10 @@ if(!isobserver(usr)) message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]") -/client/proc/jumptokey() - set category = "Admin" - set name = "Jump to Key" - - if(!check_rights(R_ADMIN)) +/client/proc/jumptokey(client/C) + if(!C?.mob || !check_rights(R_ADMIN)) return - - var/list/keys = list() - for(var/mob/M in GLOB.player_list) - keys += M.client - var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortKey(keys) - if(!selection) - to_chat(src, "No keys found.") - return - var/mob/M = selection:mob + var/mob/M = C.mob log_admin("[key_name(usr)] jumped to [key_name(M)]") if(!isobserver(usr)) message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)