diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index a72591e84d4..98d539e3911 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -493,7 +493,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
return -M
-/proc/key_name(var/whom, var/include_link = null, var/include_name = 1)
+/proc/key_name(var/whom, var/include_link = null, var/include_name = 1, var/highlight_special_characters = 1)
var/mob/M
var/client/C
var/key
@@ -538,7 +538,8 @@ Turf and target are seperate in case you want to teleport some distance from a t
else if(M.name)
name = M.name
- if(include_link && is_special_character(M))
+
+ if(include_link && is_special_character(M) && highlight_special_characters)
. += "/([name])" //Orange
else
. += "/([name])"
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index be28f26ab3d..48bec4880d6 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1099,7 +1099,22 @@ var/global/floorIsLava = 0
if(istype(H))
H.regenerate_icons()
-proc/get_options_bar(whom, detail = 2, name = 0, link = 1)
+
+/*
+ helper proc to test if someone is a mentor or not. Got tired of writing this same check all over the place.
+*/
+/proc/is_mentor(client/C)
+
+ if(!istype(C))
+ return 0
+ if(!C.holder)
+ return 0
+
+ if(C.holder.rights == R_MENTOR)
+ return 1
+ return 0
+
+/proc/get_options_bar(whom, detail = 2, name = 0, link = 1)
if(!whom)
return "(*null*)"
var/mob/M
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index b668c3fa33e..21a3047ce3f 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -360,9 +360,16 @@ var/list/admin_verbs_mentor = list(
if(istype(mob,/mob/dead/observer))
//re-enter
var/mob/dead/observer/ghost = mob
- ghost.can_reenter_corpse = 1 //just in-case.
- ghost.reenter_corpse()
+ if(!is_mentor(usr.client))
+ ghost.can_reenter_corpse = 1
+ if(ghost.can_reenter_corpse)
+ ghost.reenter_corpse()
+ else
+ ghost << "Error: Aghost: Can't reenter corpse, mentors that use adminHUD while aghosting are not permitted to enter their corpse again"
+ return
+
feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
else if(istype(mob,/mob/new_player))
src << "Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first."
else
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 87ed4787058..cbd3b2a0479 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -322,6 +322,7 @@
/datum/admins/proc/player_panel_old()
if (!usr.client.holder)
return
+
var/dat = "
Player Menu"
dat += "| Name | Real Name | Assigned Job | Key | Options | PM | Traitor? |
"
//add IP: | to this if wanting to add back in IP checking
@@ -364,13 +365,25 @@
X |
PM |
"}
- switch(is_special_character(M))
- if(0)
- dat += {"Traitor? | "}
- if(1)
- dat += {"Traitor? | "}
- if(2)
- dat += {"Traitor? | "}
+
+
+
+ if(usr.client)
+ var/client/C = usr.client
+ if(is_mentor(C))
+ dat += {" N/A | "}
+ else
+ switch(is_special_character(M))
+ if(0)
+ dat += {"Traitor? | "}
+ if(1)
+ dat += {"Traitor? | "}
+ if(2)
+ dat += {"Traitor? | "}
+ else
+ dat += {" N/A | "}
+
+
dat += "
"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 26cc3a75aa6..06e702bc173 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -80,12 +80,17 @@
var/missing_ages = 0
var/msg = ""
+
+ var/highlight_special_characters = 1
+ if(is_mentor(usr.client))
+ highlight_special_characters = 0
+
for(var/client/C in clients)
if(C.player_age == "Requires database")
missing_ages = 1
continue
if(C.player_age < age)
- msg += "[key_name_admin(C)]: account is [C.player_age] days old
"
+ msg += "[key_name(C, 1, 1, highlight_special_characters)]: account is [C.player_age] days old
"
if(missing_ages)
src << "Some accounts did not have proper ages set in their clients. This function requires database to be present"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 3eacd36e326..df0edf4b1a8 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -257,20 +257,22 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set category = "Ghost"
set name = "Toggle AntagHUD"
set desc = "Toggles AntagHUD allowing you to see who is the antagonist"
- if(!config.antag_hud_allowed && !client.holder)
+
+ if(!client)
+ return
+ var/mentor = is_mentor(usr.client)
+ if(!config.antag_hud_allowed && (!client.holder || mentor))
src << "\red Admins have disabled this for this round."
return
- if(!client)
- return
var/mob/dead/observer/M = src
if(jobban_isbanned(M, "AntagHUD"))
src << "\red You have been banned from using this feature"
return
- if(config.antag_hud_restricted && !M.has_enabled_antagHUD &&!client.holder)
+ if(config.antag_hud_restricted && !M.has_enabled_antagHUD && (!client.holder || mentor))
var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No")
if(response == "No") return
M.can_reenter_corpse = 0
- if(!M.has_enabled_antagHUD && !client.holder)
+ if(!M.has_enabled_antagHUD && (!client.holder || mentor))
M.has_enabled_antagHUD = 1
if(M.antagHUD)
M.antagHUD = 0
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index b08279354b8..b48bf4d3109 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -58,11 +58,14 @@
for(var/mob/M in player_list)
if(istype(M, /mob/new_player))
continue
- if(M.client && M.client.holder && (M.client.holder.rights & R_ADMIN|R_MOD) && (M.client.prefs.toggles & CHAT_DEAD)) // Show the message to admins/mods with deadchat toggled on
+ if(M.client && M.stat == DEAD && (M.client.prefs.toggles & CHAT_DEAD))
+ M << rendered
+ continue
+
+ if(M.client && M.client.holder && !is_mentor(M.client) && (M.client.prefs.toggles & CHAT_DEAD) ) // Show the message to admins/mods with deadchat toggled on
M << rendered //Admins can hear deadchat, if they choose to, no matter if they're blind/deaf or not.
- else if(M.client && M.stat == DEAD && (M.client.prefs.toggles & CHAT_DEAD)) // Show the message to regular ghosts with deadchat toggled on.
- M.show_message(rendered, 2) //Takes into account blindness and such.
+
return
/mob/proc/say_understands(var/mob/other,var/datum/language/speaking = null)