diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm
index 734840b6078..4e7eb20936d 100644
--- a/code/__DEFINES/admin.dm
+++ b/code/__DEFINES/admin.dm
@@ -68,6 +68,7 @@
#define ADMIN_COORDJMP(src) "[src ? src.Admin_Coordinates_Readable(FALSE, TRUE) : "nonexistent location"]"
#define ADMIN_VERBOSEJMP(src) "[src ? src.Admin_Coordinates_Readable(TRUE, TRUE) : "nonexistent location"]"
#define ADMIN_INDIVIDUALLOG(user) "(LOGS)"
+#define ADMIN_TAG(datum) "(TAG)"
/atom/proc/Admin_Coordinates_Readable(area_name, admin_jump_ref)
var/turf/T = Safe_COORD_Location()
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index f7aad8f38a3..624d2b7a0ad 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -276,6 +276,9 @@
var/M_name = html_encode(M.name)
var/M_rname = html_encode(M.real_name)
+ var/M_rname_as_key = html_encode(ckey(M.real_name)) // so you can ignore punctuation
+ if(M_rname == M_rname_as_key)
+ M_rname_as_key = null
var/M_key = html_encode(M.key)
var/previous_names = ""
if(M_key)
@@ -294,10 +297,11 @@
onmouseover='expand("data[i]","item[i]")'
>
[M_name] - [M_rname] - [M_key] ([M_job])
- [M_name] [M_rname] [M_key] [M_job] [previous_names]
+ [M_name] [M_rname] [M_rname_as_key] [M_key] [M_job] [previous_names]
[M_name]
[M_job]
[M_rname]
+ [M_rname_as_key]
[previous_names]
[M_key]
[M.lastKnownIP]
diff --git a/code/modules/admin/tag.dm b/code/modules/admin/tag.dm
index c0c22806636..459c6d7ecb3 100644
--- a/code/modules/admin/tag.dm
+++ b/code/modules/admin/tag.dm
@@ -94,7 +94,7 @@
specific_info = "[resolved_subsystem.stat_entry()]"
// else, it's just a /datum
- dat += "\t[index]: [iter_datum] | [specific_info] | [ADMIN_VV(iter_datum)]| [TAG_DEL(iter_datum)] | [iter_datum == marked_datum ? "Marked" : TAG_MARK(iter_datum)] "
+ dat += "\t[index]: [iter_datum] | [specific_info] | [ADMIN_VV(iter_datum)] | [TAG_DEL(iter_datum)] | [iter_datum == marked_datum ? "Marked" : TAG_MARK(iter_datum)] "
dat += "\t([iter_datum.type])"
else
dat += "No datums tagged :("
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 1764f5e5809..faf7a5b090a 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -778,6 +778,21 @@
var/mob/M = locate(href_list["adminplayeropts"])
show_player_panel(M)
+ else if(href_list["ppbyckey"])
+ var/target_ckey = href_list["ppbyckey"]
+ var/mob/original_mob = locate(href_list["ppbyckeyorigmob"]) in GLOB.mob_list
+ var/mob/target_mob = get_mob_by_ckey(target_ckey)
+ if(!target_mob)
+ to_chat(usr, span_warning("No mob found with that ckey."))
+ return
+
+ if(original_mob == target_mob)
+ to_chat(usr, span_warning("[target_ckey] is still in their original mob: [original_mob]."))
+ return
+
+ to_chat(usr, span_notice("Jumping to [target_ckey]'s new mob: [target_mob]!"))
+ show_player_panel(target_mob)
+
else if(href_list["adminplayerobservefollow"])
if(!isobserver(usr) && !check_rights(R_ADMIN))
return
@@ -1981,6 +1996,14 @@
return
GLOB.interviews.ui_interact(usr)
+ else if(href_list["tag_datum"])
+ if(!check_rights(R_ADMIN))
+ return
+ var/datum/datum_to_tag = locate(href_list["tag_datum"])
+ if(!datum_to_tag)
+ return
+ return add_tagged_datum(datum_to_tag)
+
else if(href_list["del_tag"])
if(!check_rights(R_ADMIN))
return
diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm
index b001f6ebab6..42ab8856522 100644
--- a/code/modules/admin/verbs/admingame.dm
+++ b/code/modules/admin/verbs/admingame.dm
@@ -27,6 +27,9 @@
else
body += " \[Heal\] "
+ if(M.ckey)
+ body += "
\[Find Updated Panel\]"
+
if(M.client)
body += "
\[First Seen: [M.client.player_join_date]\]\[Byond account registered on: [M.client.account_join_date]\]"
body += "
CentCom Galactic Ban DB: "
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 929b0cc6c1e..55875137d81 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -511,7 +511,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
var/list/L = M.get_contents()
for(var/t in L)
- to_chat(usr, "[t]", confidential = TRUE)
+ to_chat(usr, "[t] [ADMIN_VV(t)] [ADMIN_TAG(t)]", confidential = TRUE)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Check Contents") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/modify_goals()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 81121ac0c40..27431318014 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -649,9 +649,8 @@
/mob/living/get_contents()
var/list/ret = list()
ret |= contents //add our contents
- for(var/i in ret.Copy()) //iterate storage objects
- var/atom/A = i
- SEND_SIGNAL(A, COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret)
+ for(var/atom/iter_atom as anything in ret.Copy()) //iterate storage objects
+ SEND_SIGNAL(iter_atom, COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret)
for(var/obj/item/folder/F in ret.Copy()) //very snowflakey-ly iterate folders
ret |= F.contents
return ret