diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm
index 6c309a6566..81fee4e764 100644
--- a/code/modules/client/verbs/who.dm
+++ b/code/modules/client/verbs/who.dm
@@ -6,55 +6,46 @@
var/list/Lines = list()
- if(holder && (R_ADMIN & holder.rights || R_MOD & holder.rights))
- for(var/client/C in GLOB.clients)
- var/entry = "\t[C.key]"
- if(C.holder && C.holder.fakekey)
- entry += " (as [C.holder.fakekey])"
- entry += " - Playing as [C.mob.real_name]"
- switch(C.mob.stat)
- if(UNCONSCIOUS)
- entry += " - Unconscious"
- if(DEAD)
- if(isobserver(C.mob))
- var/mob/observer/dead/O = C.mob
- if(O.started_as_observer)
- entry += " - Observing"
- else
- entry += " - DEAD"
+ for(var/client/C in GLOB.clients)
+ if(!check_rights_for(src, R_ADMIN|R_MOD))
+ Lines += "\t[C.holder?.fakekey || C.key]"
+ continue
+ var/entry = "\t[C.key]"
+ if(C.holder?.fakekey)
+ entry += " (as [C.holder.fakekey])"
+ entry += " - Playing as [C.mob.real_name]"
+ switch(C.mob.stat)
+ if(UNCONSCIOUS)
+ entry += " - Unconscious"
+ if(DEAD)
+ if(isobserver(C.mob))
+ var/mob/observer/dead/O = C.mob
+ if(O.started_as_observer)
+ entry += " - Observing"
else
entry += " - DEAD"
+ else
+ entry += " - DEAD"
- var/age
- if(isnum(C.player_age))
- age = C.player_age
- else
- age = 0
+ if(C.player_age != initial(C.player_age) && isnum(C.player_age)) // database is on
+ var/age = C.player_age
+ switch(age)
+ if(0 to 1)
+ age = "[age] days old"
+ if(1 to 10)
+ age = "[age] days old"
+ else
+ entry += " - [age] days old"
- if(age <= 1)
- age = "[age]"
- else if(age < 10)
- age = "[age]"
+ if(is_special_character(C.mob))
+ entry += " - Antagonist"
- entry += " - [age]"
+ if(C.is_afk())
+ var/seconds = C.last_activity_seconds()
+ entry += " (AFK - [round(seconds / 60)] minutes, [seconds % 60] seconds)"
- if(is_special_character(C.mob))
- entry += " - Antagonist"
-
- if(C.is_afk())
- var/seconds = C.last_activity_seconds()
- entry += " (AFK - "
- entry += "[round(seconds / 60)] minutes, "
- entry += "[seconds % 60] seconds)"
-
- entry += " (?)"
- Lines += entry
- else
- for(var/client/C in GLOB.clients)
- if(C.holder && C.holder.fakekey)
- Lines += C.holder.fakekey
- else
- Lines += C.key
+ entry += " (?)"
+ Lines += entry
for(var/line in sortList(Lines))
msg += "[line]\n"
@@ -66,11 +57,6 @@
set category = "Admin"
set name = "Staffwho"
- var/message = get_staffwho_message(holder)
- to_chat(src, message)
-
-// VOREStation Edit - This whole proc has various vorestation edits throughout. Practically every other line.
-/proc/get_staffwho_message(datum/admins/holder)
var/msg = ""
var/modmsg = ""
var/devmsg = ""
@@ -79,117 +65,50 @@
var/num_admins_online = 0
var/num_devs_online = 0
var/num_event_managers_online = 0
-
- if(holder)
- for(var/client/C in GLOB.admins)
- if(R_ADMIN & C.holder.rights && R_BAN & C.holder.rights)
-
- if(C.holder.fakekey && !((R_ADMIN & holder.rights) || (R_MOD & holder.rights))) //Event Managerss can't see stealthmins
- continue
-
- msg += "\t[C] is a [C.holder.rank]"
-
- if(C.holder.fakekey)
- msg += " (as [C.holder.fakekey])"
-
- if(isobserver(C.mob))
- msg += " - Observing"
- else if(istype(C.mob,/mob/new_player))
- msg += " - Lobby"
- else
- msg += " - Playing"
-
- if(C.is_afk())
- var/seconds = C.last_activity_seconds()
- msg += " (AFK - "
- msg += "[round(seconds / 60)] minutes, "
- msg += "[seconds % 60] seconds)"
- msg += "\n"
-
- num_admins_online++
- else if(R_ADMIN & C.holder.rights && !(R_SERVER & C.holder.rights))
- modmsg += "\t[C] is a [C.holder.rank]"
-
- if(C.holder.fakekey && !((R_ADMIN & holder.rights) || (R_MOD & holder.rights)))
- continue
- if(C.holder.fakekey)
- msg += " (as [C.holder.fakekey])"
-
- if(isobserver(C.mob))
- modmsg += " - Observing"
- else if(istype(C.mob,/mob/new_player))
- modmsg += " - Lobby"
- else
- modmsg += " - Playing"
-
- if(C.is_afk())
- var/seconds = C.last_activity_seconds()
- modmsg += " (AFK - "
- modmsg += "[round(seconds / 60)] minutes, "
- modmsg += "[seconds % 60] seconds)"
- modmsg += "\n"
- num_mods_online++
-
- else if(R_SERVER & C.holder.rights)
- if(C.holder.fakekey && !((R_ADMIN & holder.rights) || (R_MOD & holder.rights)))
- continue
- devmsg += "\t[C] is a [C.holder.rank]"
- if(C.holder.fakekey)
- devmsg += " (as [C.holder.fakekey])"
- if(isobserver(C.mob))
- devmsg += " - Observing"
- else if(istype(C.mob,/mob/new_player))
- devmsg += " - Lobby"
- else
- devmsg += " - Playing"
-
- if(C.is_afk())
- var/seconds = C.last_activity_seconds()
- devmsg += "(AFK - "
- devmsg += "[round(seconds / 60)] minutes, "
- devmsg += "[seconds % 60] seconds)"
- devmsg += "\n"
- num_devs_online++
+ for(var/client/C in GLOB.admins) // VOREStation Edit - GLOB
+ var/temp = ""
+ var/category = R_ADMIN
+ // VOREStation Edit - Apply stealthmin protection to all levels
+ if(C.holder.fakekey && check_rights(R_ADMIN|R_MOD, FALSE, src)) // Only admins and mods can see stealthmins
+ continue
+ // VOREStation Edit End
+ if(check_rights(R_ADMIN, FALSE, C)) // admins
+ num_admins_online++
+ else if(check_rights(R_MOD, FALSE, C)) // mods
+ category = R_MOD
+ num_mods_online++
+ else if(check_rights(R_SERVER, FALSE, C)) // developers
+ category = R_SERVER
+ num_devs_online++
+ else if(check_rights(R_EVENT, FALSE, C)) // event managers
+ category = R_EVENT
+ num_event_managers_online++
+
+ temp += "\t[C] is a [C.holder.rank]"
+ if(holder)
+ if(C.holder.fakekey)
+ temp += " (as [C.holder.fakekey])"
+ if(isobserver(C.mob))
+ temp += " - Observing"
+ else if(istype(C.mob,/mob/new_player))
+ temp += " - Lobby"
else
- if(C.holder.fakekey && !((R_ADMIN & holder.rights) || (R_MOD & holder.rights)))
- continue
- eventMmsg += "\t[C] is a [C.holder.rank]"
- if(C.holder.fakekey)
- eventMmsg += " (as [C.holder.fakekey])"
- if(isobserver(C.mob))
- eventMmsg += " - Observing"
- else if(istype(C.mob,/mob/new_player))
- eventMmsg += " - Lobby"
- else
- eventMmsg += " - Playing"
+ temp += " - Playing"
- if(C.is_afk())
- var/seconds = C.last_activity_seconds()
- eventMmsg += " (AFK - "
- eventMmsg += "[round(seconds / 60)] minutes, "
- eventMmsg += "[seconds % 60] seconds)"
- eventMmsg += "\n"
- num_event_managers_online++
-
- else
- for(var/client/C in GLOB.admins)
- if(R_ADMIN & C.holder.rights && R_BAN & C.holder.rights)
- if(!C.holder.fakekey)
- msg += "\t[C] is a [C.holder.rank]\n"
- num_admins_online++
- else if(R_ADMIN & C.holder.rights && !(R_SERVER & C.holder.rights))
- if(!C.holder.fakekey)
- modmsg += "\t[C] is a [C.holder.rank]\n"
- num_mods_online++
- else if(R_SERVER & C.holder.rights)
- if(!C.holder.fakekey)
- devmsg += "\t[C] is a [C.holder.rank]\n"
- num_devs_online++
- else
- if(!C.holder.fakekey)
- eventMmsg += "\t[C] is a [C.holder.rank]\n"
- num_event_managers_online++
+ if(C.is_afk())
+ var/seconds = C.last_activity_seconds()
+ temp += " (AFK - [round(seconds / 60)] minutes, [seconds % 60] seconds)"
+ temp += "\n"
+ switch(category)
+ if(R_ADMIN)
+ msg += temp
+ if(R_MOD)
+ modmsg += temp
+ if(R_SERVER)
+ devmsg += temp
+ if(R_EVENT)
+ eventMmsg += temp
msg = "Current Admins ([num_admins_online]):\n" + msg
@@ -204,5 +123,4 @@
msg += "\nAdminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond."
- return msg
-
+ to_chat(src, msg)