/client/verb/mentorwho() set category = "Mentor" set name = "Mentorwho" var/msg = "Current Mentors:\n" for(var/X in GLOB.mentors) var/client/C = X if(!C) GLOB.mentors -= C continue // weird runtime that happens randomly var/suffix = "" if(holder) if(isobserver(C.mob)) suffix += " - Observing" else if(istype(C.mob,/mob/dead/new_player)) suffix += " - Lobby" else suffix += " - Playing" if(C.is_afk()) suffix += " (AFK)" msg += "\t[C][suffix]\n" to_chat(src, msg) /client/verb/who() set name = "Who" set category = "OOC" var/msg = "" var/list/Lines = list() var/list/assembled = list() var/admin_mode = check_rights_for(src, R_ADMIN) && isobserver(mob) if(admin_mode) log_admin("[key_name(usr)] checked advanced who in-round") if(length(GLOB.admins)) Lines += "Admins:" for(var/X in GLOB.admins) var/client/C = X if(C && C.holder && !C.holder.fakekey) assembled += "\t [C.key][admin_mode? "[show_admin_info(C)]":""] ([round(C.avgping, 1)]ms)" Lines += sortList(assembled) assembled.len = 0 if(length(GLOB.mentors)) Lines += "Mentors:" for(var/X in GLOB.mentors) var/client/C = X if(C && (!C.holder || (C.holder && !C.holder.fakekey))) //>using stuff this complex instead of just using if/else lmao assembled += "\t [C.key][admin_mode? "[show_admin_info(C)]":""] ([round(C.avgping, 1)]ms)" Lines += sortList(assembled) assembled.len = 0 Lines += "Players:" for(var/X in sortList(GLOB.clients)) var/client/C = X if(!C) continue var/key = C.key if(C.holder && C.holder.fakekey) key = C.holder.fakekey assembled += "\t [key][admin_mode? "[show_admin_info(C)]":""] ([round(C.avgping, 1)]ms)" Lines += sortList(assembled) for(var/line in Lines) msg += "[line]\n" msg += "Total Players: [length(GLOB.clients)]" to_chat(src, msg) /client/proc/show_admin_info(var/client/C) if(!C) return "" var/entry = "" if(C.holder && C.holder.fakekey) entry += " (as [C.holder.fakekey])" if (isnewplayer(C.mob)) entry += " - In Lobby" else entry += " - Playing as [C.mob.real_name]" switch(C.mob.stat) if(UNCONSCIOUS) entry += " - Unconscious" if(DEAD) if(isobserver(C.mob)) var/mob/dead/observer/O = C.mob if(O.started_as_observer) entry += " - Observing" else entry += " - DEAD" else entry += " - DEAD" if(is_special_character(C.mob)) entry += " - Antagonist" entry += " (?)" return entry /client/verb/adminwho() set category = "Admin" set name = "Adminwho" var/msg = "Current Admins:\n" if(check_rights_for(src, R_ADMIN)) for(var/X in GLOB.admins) var/client/C = X if(!check_rights_for(C, R_ADMIN)) 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(isnewplayer(C.mob)) msg += " - Lobby" else msg += " - Playing" if(C.is_afk()) msg += " (AFK)" msg += "\n" else for(var/X in GLOB.admins) var/client/C = X if(!check_rights_for(C, R_ADMIN)) continue if(C.is_afk()) continue //Don't show afk admins to adminwho if(!C.holder.fakekey) msg += "\t[C] is a [C.holder.rank]\n" msg += "Adminhelps are also sent to Discord. If no admins are available in game adminhelp anyways and an admin on Discord will see it and respond." to_chat(src, msg)