diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm
index 0668e79a556..075cb3e4150 100644
--- a/code/defines/procs/helpers.dm
+++ b/code/defines/procs/helpers.dm
@@ -910,11 +910,21 @@ Turf and target are seperate in case you want to teleport some distance from a t
if (!the_key)
text += "*no client*"
else
+ var/linked = 1
if (include_link && !isnull(the_mob))
if (istext(include_link))
- text += ""
+ text += ""
else
- text += ""
+ if(ismob(include_link))
+ var/mob/MM = include_link
+ if(MM.client)
+ text += ""
+ else
+ linked = 0
+ else if (istype(include_link, /client))
+ text += ""
+ else
+ linked = 0
if (the_client && the_client.holder && the_client.stealth && !include_name)
text += "Administrator"
@@ -922,7 +932,10 @@ Turf and target are seperate in case you want to teleport some distance from a t
text += "[the_key]"
if (!isnull(include_link) && !isnull(the_mob))
- text += ""
+ if(linked)
+ text += ""
+ else
+ text += " (DC)"
if (include_name && !isnull(the_mob))
if (the_mob.real_name)
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index bd5946ff053..cff3f989427 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -19,11 +19,12 @@
if (!msg)
return
+ //feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
for (var/mob/M in world)
if (M.client && M.client.holder)
if (src.holder.rank == "Admin Observer")
M << "ADMIN: [key_name(usr, M)]: [msg]"
else
- M << "ADMIN: [key_name(usr, M)]X: [msg]"
+ M << "ADMIN: [key_name(usr, M)] (JMP): [msg]"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 7d358a5eed4..d01bbc91010 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -82,6 +82,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(NewLoc)
loc = NewLoc
return
+ loc = get_turf(src) //Get out of closets and such as a ghost
if((direct & NORTH) && y < world.maxy)
y++
if((direct & SOUTH) && y > 1)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d03457cf60d..6ed478a73ec 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -631,7 +631,21 @@
src:cameraFollow = null
+/client/Topic(href, href_list)
+ if(href_list["priv_msg"])
+ var/client/C = locate(href_list["priv_msg"])
+ if(ismob(C)) //Old stuff can pass in mobs instead of clients
+ var/mob/M = C
+ C = M.client
+ cmd_admin_pm(C,null)
+ else
+ ..()
+
/mob/Topic(href, href_list)
+ if(href_list["priv_msg"]) //for priv_msg references that have yet to be updated to target clients. Forwards it to client/Topic()
+ if(client)
+ client.Topic(href, href_list)
+
if(href_list["mach_close"])
var/t1 = text("window=[href_list["mach_close"]]")
machine = null