diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm
index b6366dfdb1f..d512c7ddf02 100644
--- a/code/game/verbs/who.dm
+++ b/code/game/verbs/who.dm
@@ -3,28 +3,27 @@
set name = "Who"
set category = "OOC"
- var/msg = "Current Players:\n"
-
- var/list/Lines = list()
+ var/msg = "Current Players:
"
+ var/total_num = 0
if(holder && (R_ADMIN & holder.rights || R_MOD & holder.rights))
for(var/client/C in clients)
- var/entry = "\t[C.key]"
+ msg += "\t[C.key]"
if(C.holder && C.holder.fakekey)
- entry += " (as [C.holder.fakekey])"
- entry += " - Playing as [C.mob.real_name]"
+ msg += " (as [C.holder.fakekey])"
+ msg += " - Playing as [C.mob.real_name]"
switch(C.mob.stat)
if(UNCONSCIOUS)
- entry += " - Unconscious"
+ msg += " - Unconscious"
if(DEAD)
if(isobserver(C.mob))
var/mob/abstract/observer/O = C.mob
if(O.started_as_observer)
- entry += " - Observing"
+ msg += " - Observing"
else
- entry += " - DEAD"
+ msg += " - DEAD"
else
- entry += " - DEAD"
+ msg += " - DEAD"
var/age
if(isnum(C.player_age))
@@ -37,24 +36,27 @@
else if(age < 10)
age = "[age]"
- entry += " - [age]"
+ msg += " - [age]"
if(is_special_character(C.mob))
- entry += " - Antagonist"
- entry += " (?)"
- Lines += entry
+ msg += " - Antagonist"
+ msg += " (?)"
+ msg += "
"
+ total_num++
else
for(var/client/C in clients)
if(C.holder && C.holder.fakekey)
- Lines += C.holder.fakekey
+ msg += C.holder.fakekey
else
- Lines += C.key
+ msg += C.key
+ total_num++
+ msg += "
"
- for(var/line in sortList(Lines))
- msg += "[line]\n"
+ msg += "Total Players: [total_num]"
- msg += "Total Players: [length(Lines)]"
- to_chat(src, msg)
+ var/datum/browser/who_win = new(usr, "who", "Who", 450, 500)
+ who_win.set_content(msg)
+ who_win.open()
/client/verb/staffwho()
set category = "Admin"
@@ -90,7 +92,7 @@
if(C.is_afk())
msg += " (AFK)"
- msg += "\n"
+ msg += "
"
num_admins_online++
else if(R_MOD & C.holder.rights) //Who shows up in mod/mentor rows.
@@ -105,7 +107,7 @@
if(C.is_afk())
modmsg += " (AFK)"
- modmsg += "\n"
+ modmsg += "
"
num_mods_online++
else if (R_CCIAA & C.holder.rights)
@@ -119,7 +121,7 @@
if (C.is_afk())
cciaamsg += " (AFK)"
- cciaamsg += "\n"
+ cciaamsg += "
"
num_cciaa_online++
else if(C.holder.rights & R_DEV)
@@ -133,7 +135,7 @@
if(C.is_afk())
devmsg += " (AFK)"
- devmsg += "\n"
+ devmsg += "
"
num_devs_online++
else
@@ -142,40 +144,42 @@
if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights))
if(!C.holder.fakekey)
if(C.is_afk())
- msg += "\t[C.key] is a [C.holder.rank] (AFK)\n"
+ msg += "\t[C.key] is a [C.holder.rank] (AFK)
"
else
- msg += "\t[C.key] is a [C.holder.rank]\n"
+ msg += "\t[C.key] is a [C.holder.rank]
"
num_admins_online++
else if (R_MOD & C.holder.rights)
if(C.is_afk())
- modmsg += "\t[C.key] is a [C.holder.rank] (AFK)\n"
+ modmsg += "\t[C.key] is a [C.holder.rank] (AFK)
"
else
- modmsg += "\t[C.key] is a [C.holder.rank]\n"
+ modmsg += "\t[C.key] is a [C.holder.rank]
"
num_mods_online++
else if(C.holder.rights & R_DEV)
if(C.is_afk())
- devmsg += "\t[C.key] is a [C.holder.rank] (AFK)\n"
+ devmsg += "\t[C.key] is a [C.holder.rank] (AFK)
"
else
- devmsg += "\t[C.key] is a [C.holder.rank]\n"
+ devmsg += "\t[C.key] is a [C.holder.rank]
"
num_devs_online++
else if (R_CCIAA & C.holder.rights)
if(C.is_afk())
- cciaamsg += "\t[C.key] is a [C.holder.rank] (AFK)\n"
+ cciaamsg += "\t[C.key] is a [C.holder.rank] (AFK)
"
else
- cciaamsg += "\t[C.key] is a [C.holder.rank]\n"
+ cciaamsg += "\t[C.key] is a [C.holder.rank]
"
num_cciaa_online++
if(discord_bot && discord_bot.active)
to_chat(src, "Adminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond.")
- msg = "Current Admins ([num_admins_online]):\n" + msg
+ msg = "Current Admins ([num_admins_online]):
" + msg
if(config.show_mods)
- msg += "\n Current Moderators ([num_mods_online]):\n" + modmsg
+ msg += "
Current Moderators ([num_mods_online]):
" + modmsg
if (config.show_auxiliary_roles)
if (num_cciaa_online)
- msg += "\n Current CCIA Agents ([num_cciaa_online]):\n" + cciaamsg
+ msg += "
Current CCIA Agents ([num_cciaa_online]):
" + cciaamsg
if(num_devs_online)
- msg += "\n Current Developers ([num_devs_online]):\n" + devmsg
+ msg += "
Current Developers ([num_devs_online]):
" + devmsg
- to_chat(src, msg)
+ var/datum/browser/staff_win = new(usr, "staffwho", "Staff Who", 450, 500)
+ staff_win.set_content(msg)
+ staff_win.open()
\ No newline at end of file
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 3078f51c960..227ed63abe2 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -933,7 +933,7 @@
if (0) status = "Alive"
if (1) status = "Unconscious"
if (2) status = "Dead"
- health_description = "Status = [status]"
+ health_description = "Status: [status]"
health_description += "
Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()]"
else
health_description = "This mob type has no health to speak of."
@@ -949,12 +949,24 @@
if(MALE,FEMALE) gender_description = "[M.gender]"
else gender_description = "[M.gender]"
- to_chat(src.owner, "Info about [M.name]: ")
- to_chat(src.owner, "Mob type = [M.type]; Species = [species_description] Gender = [gender_description] Damage = [health_description]")
- to_chat(src.owner, "Name = [M.name]; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = [M.key];")
- to_chat(src.owner, "Location = [location_description];")
- to_chat(src.owner, "[special_role_description]")
- to_chat(src.owner, "(PM) (PP) (VV) (SM) ([admin_jump_link(M, src)]) (CA)")
+ var/dat = "Info about [M.name]:
"
+ dat += "Mob type: [M.type]
"
+ if(species_description)
+ dat += "Species: [M.type]
"
+ if(gender_description)
+ dat += "Gender: [gender_description]
"
+ dat += "Damage: [health_description]
"
+ dat += "Real Name: [M.real_name]
"
+ dat += "Mind Name: [M.mind?"[M.mind.name]":""]
"
+ dat += "Key: [M.key]
"
+ dat += "Location: [location_description]
"
+ if(special_role_description)
+ dat += "Special Role Desc: [special_role_description]
"
+ dat += "(PM) (PP) (VV) (SM) ([admin_jump_link(M, src)]) (CA)"
+
+ var/datum/browser/extrainfo_win = new(usr, "extrainfo", "Extra Info (M.name)", 450, 500)
+ extrainfo_win.set_content(dat)
+ extrainfo_win.open()
else if(href_list["adminspawncookie"])
if(!check_rights(R_ADMIN|R_FUN)) return
diff --git a/html/changelogs/geeves-who_staffwho.yml b/html/changelogs/geeves-who_staffwho.yml
new file mode 100644
index 00000000000..110ca718b68
--- /dev/null
+++ b/html/changelogs/geeves-who_staffwho.yml
@@ -0,0 +1,7 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "The Who and Staff Who actions now output into a window rather than into the chat."
+ - admin: "The extra info button for admins now also outputs to a window rather than into the chat."
\ No newline at end of file