diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index c26d2e8d7b8..634697b8e44 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -227,7 +227,7 @@ proc/tg_text2list(text, glue=",", assocglue=";")
. += copytext(text, last_found, found)
last_found = found + delim_len
while(found)
-
+
/proc/text2numlist(text, delimiter="\n")
var/list/num_list = list()
for(var/x in text2list(text, delimiter))
@@ -347,6 +347,7 @@ proc/tg_text2list(text, glue=",", assocglue=";")
if(rights & R_SOUNDS) . += "[seperator]+SOUND"
if(rights & R_SPAWN) . += "[seperator]+SPAWN"
if(rights & R_MOD) . += "[seperator]+MODERATOR"
+ if(rights & R_MENTOR) . += "[seperator]+MENTOR"
return .
/proc/ui_style2icon(ui_style)
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index a9afe87debf..d9f5d7d54ba 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -41,6 +41,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if("sound","sounds") rights |= R_SOUNDS
if("spawn","create") rights |= R_SPAWN
if("mod") rights |= R_MOD
+ if("mentor") rights |= R_MENTOR
admin_ranks[rank] = rights
previous_rights = rights
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 6e2f9b1d4b4..b9844597065 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -185,6 +185,12 @@ var/list/admin_verbs_mod = list(
// /client/proc/cmd_admin_subtle_message /*send an message to somebody as a 'voice in their head'*/
)
+var/list/admin_verbs_mentor = list(
+ /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
+ /client/proc/cmd_admin_pm_panel, /*admin-pm list*/
+ /client/proc/cmd_admin_pm_by_key_panel, /*admin-pm list by key*/
+ /client/proc/cmd_mod_say,
+)
/client/proc/add_admin_verbs()
if(holder)
@@ -202,6 +208,7 @@ var/list/admin_verbs_mod = list(
if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds
if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn
if(holder.rights & R_MOD) verbs += admin_verbs_mod
+ if(holder.rights & R_MENTOR) verbs += admin_verbs_mentor
/client/proc/admin_ghost()
set category = "Admin"
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 3038b414334..7b0b6f759b7 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -104,7 +104,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
var/list/adminholders = list()
var/list/eventholders = list()
for(var/client/X in admins)
- if(R_MOD & X.holder.rights)
+ if((R_MOD | R_MENTOR) & X.holder.rights)
if(X.is_afk())
admin_number_afk++
modholders += X
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 83f43ba6d9c..be65a42e0f6 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -103,7 +103,7 @@
//mod PMs are maroon
//PMs sent from admins and mods display their rank
if(holder)
- if( holder.rights & R_MOD && !holder.rights & R_ADMIN )
+ if( holder.rights & (R_MOD | R_MENTOR) && !holder.rights & R_ADMIN )
recieve_color = "maroon"
else
recieve_color = "red"
@@ -208,7 +208,7 @@
var/list/adminholders = list()
var/list/eventholders = list()
for(var/client/X in admins)
- if(R_MOD & X.holder.rights)
+ if((R_MOD | R_MENTOR) & X.holder.rights)
modholders += X
if(R_ADMIN & X.holder.rights)
adminholders += X
@@ -227,7 +227,7 @@
if(X.key!=key && X.key!=C.key)
switch(type)
if("Question")
- if(X.holder.rights & R_MOD)
+ if(X.holder.rights & (R_MOD | R_MENTOR))
X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X
else if(!modholders.len && X.holder.rights & R_ADMIN)
X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //Any admins in backup of mod question
@@ -273,6 +273,6 @@
for(var/client/X in admins)
if(X == src)
continue
- if((X.holder.rights & R_ADMIN) || (X.holder.rights & R_MOD))
+ if((X.holder.rights & R_ADMIN) || (X.holder.rights & (R_MOD | R_MENTOR)))
X << "PM: [key_name(src, X, 0)]->IRC-Admins: \blue [msg]"
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index ceefd17c3a6..b45e267c058 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -24,7 +24,7 @@
set name = "Msay"
set hidden = 1
- if(!check_rights(R_ADMIN|R_MOD)) return
+ if(!check_rights(R_ADMIN|R_MOD|R_MENTOR)) return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
log_admin("MOD: [key_name(src)] : [msg]")
@@ -36,8 +36,8 @@
color = "adminmod"
var/channel = "MOD:"
- if(config.mods_are_mentors)
+ if(check_rights(R_MENTOR,0))
channel = "MENTOR:"
for(var/client/C in admins)
- if((R_ADMIN|R_MOD) & C.holder.rights)
+ if((R_ADMIN|R_MOD|R_MENTOR) & C.holder.rights)
C << "[channel] [key_name(src,1)] (JMP): [msg]"
diff --git a/code/setup.dm b/code/setup.dm
index 4906f0e6bdf..5640ccd817b 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -698,6 +698,7 @@ var/list/TAGGERLOCATIONS = list("Disposals",
#define R_SOUNDS 2048
#define R_SPAWN 4096
#define R_MOD 8192
+#define R_MENTOR 16384
#define R_MAXPERMISSION 8192 //This holds the maximum value for a permission. It is used in iteration, so keep it updated.
@@ -735,7 +736,7 @@ var/list/TAGGERLOCATIONS = list("Disposals",
#define BE_CULTIST 256
#define BE_NINJA 512
#define BE_RAIDER 1024
-#define BE_VAMPIRE 2048
+#define BE_VAMPIRE 2048
#define BE_MUTINEER 4096
#define BE_BLOB 8192
@@ -807,7 +808,7 @@ var/list/restricted_camera_networks = list( //Those networks can only be accesse
"NukeOps",
"Thunderdome",
"UO45",
- "UO45R",
+ "UO45R",
"Xeno"
)