Skip to content

Commit

Permalink
refactor who code
Browse files Browse the repository at this point in the history
  • Loading branch information
S34NW committed Sep 2, 2024
1 parent d35c6c6 commit 28be62a
Showing 1 changed file with 102 additions and 119 deletions.
221 changes: 102 additions & 119 deletions code/game/verbs/who.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,46 +3,44 @@
set category = "OOC"

var/list/lines = list()
var/list/temp = list()
var/list/ckeys = list()

for(var/client/C in GLOB.clients)
if(C.holder && C.holder.big_brother) // BB doesn't show up at all
continue

if(C.holder && C.holder.fakekey)
temp += C.holder.fakekey
ckeys.Add(C.holder.fakekey)
else
temp += C.key
ckeys.Add(C.key)

temp = sortList(temp) // Sort it. We dont do this above because fake keys would be out of order, which would be a giveaway
ckeys = sortList(ckeys) // Sort it. We dont do this above because fake keys would be out of order, which would be a giveaway

var/list/output_players = list()

// Now go over it again to apply colours.
for(var/p in temp)
var/client/C = GLOB.directory[ckey(p)]
for(var/player in ckeys)
var/client/C = GLOB.directory[ckey(player)]
if(!C)
// This should NEVER happen, but better to be safe
continue
// Get the colour
var/colour = client2rankcolour(C)
var/out = "[p]"
var/output = "[player]"
if(C.holder)
out = "<b>[out]</b>"
output = "<b>[output]</b>"
if(colour)
out = "<font color='[colour]'>[out]</font>"
output = "<font color='[colour]'>[output]</font>"

output_players += out
output_players.Add(output)

lines += "<b>Current Players ([length(output_players)]): </b>"
lines += output_players.Join(", ") // Turn players into a comma separated list
lines.Add("<b>Current Players ([length(output_players)]): </b>")
lines.Add(output_players.Join(", ")) // Turn players into a comma separated list

if(check_rights(R_ADMIN, FALSE))
lines += "Click <a href='byond://?_src_=holder;who_advanced=1'>here</a> for detailed (old) who."
lines.Add("Click <a href='byond://?_src_=holder;who_advanced=1'>here</a> for detailed (old) who.")

var/msg = lines.Join("\n")

to_chat(src, msg)
to_chat(src, lines.Join("<br>"))

// Advanced version of `who` to show player age, antag status and more. Lags the chat when loading, so its in its own proc
/client/proc/who_advanced()
Expand All @@ -55,132 +53,117 @@
if(C.holder && C.holder.big_brother && !check_rights(R_PERMISSIONS, FALSE)) // need PERMISSIONS to see BB
continue

var/entry = "\t[C.key]"
var/list/entry = list()
entry.Add("\t[C.key]")
if(C.holder && C.holder.fakekey)
entry += " <i>(as [C.holder.fakekey])</i>"
entry += " - Playing as [C.mob.real_name]"
entry.Add(" <i>(as [C.holder.fakekey])</i>")
entry.Add(" - Playing as [C.mob.real_name]")
switch(C.mob.stat)
if(UNCONSCIOUS)
entry += " - <font color='darkgray'><b>Unconscious</b></font>"
entry.Add(" - <font color='darkgray'><b>Unconscious</b></font>")
if(DEAD)
if(isobserver(C.mob))
var/mob/dead/observer/O = C.mob
if(O.started_as_observer)
entry += " - <font color='gray'>Observing</font>"
var/mob/dead/observer/observer = C.mob
if(observer.started_as_observer)
entry.Add(" - <font color='gray'>Observing</font>")
else
entry += " - <font color='black'><b>DEAD</b></font>"
entry.Add(" - <font color='black'><b>DEAD</b></font>")
else if(isnewplayer(C.mob))
entry += " - <font color='green'>New Player</font>"
entry.Add(" - <font color='green'>New Player</font>")
else
entry += " - <font color='black'><b>DEAD</b></font>"
entry.Add(" - <font color='black'><b>DEAD</b></font>")

var/age
var/account_age
if(isnum(C.player_age))
age = C.player_age
account_age = C.player_age
else
age = 0
account_age = 0

if(age <= 1)
age = "<font color='#ff0000'><b>[age]</b></font>"
else if(age < 10)
age = "<font color='#ff8c00'><b>[age]</b></font>"
if(account_age <= 1)
account_age = "<font color='#ff0000'><b>[account_age]</b></font>"
else if(account_age < 10)
account_age = "<font color='#ff8c00'><b>[account_age]</b></font>"

entry += " - [age]"
entry.Add(" - [account_age]")

if(is_special_character(C.mob))
entry += " - <b><font color='red'>Antagonist</font></b>"
entry += " ([ADMIN_QUE(C.mob, "?")])"
Lines += entry
entry.Add(" - <b><font color='red'>Antagonist</font></b>")
entry.Add(" ([ADMIN_QUE(C.mob, "?")])")

Lines.Add(entry.Join(""))

var/msg = ""
var/list/msg = list()

for(var/line in sortList(Lines))
msg += "[line]\n"
msg.Add("[line]")

msg += "<b>Total Players: [length(Lines)]</b>"
to_chat(src, msg)
msg.Add("<b>Total Players: [length(Lines)]</b>")
to_chat(src, msg.Join("<br>"))

/client/verb/adminwho()
set category = "Admin"
set name = "Adminwho"

var/msg = ""
var/modmsg = ""
var/num_mods_online = 0
var/list/adminmsg = list()
var/list/mentormsg = list()
var/list/devmsg = list()
var/num_mentors_online = 0
var/num_admins_online = 0
if(holder)
for(var/client/C in GLOB.admins)
if(check_rights(R_ADMIN, 0, C.mob))

if(C?.holder?.fakekey && !check_rights(R_ADMIN, 0)) //Mentors can't see stealthmins
continue

if(C?.holder?.big_brother && !check_rights(R_PERMISSIONS, FALSE)) // normal admins can't see BB
continue

// Their rank may not have a defined colour, only set colour if so
var/rank_colour = client2rankcolour(C)
if(rank_colour)
msg += "<font color='[rank_colour]'><b>[C]</b></font> is a [C.holder.rank]"
else
msg += "<b>[C]</b> is a [C.holder.rank]"

if(C.holder.fakekey)
msg += " <i>(as [C.holder.fakekey])</i>"

if(isobserver(C.mob))
msg += " - Observing"
else if(isnewplayer(C.mob))
msg += " - Lobby"
else
msg += " - Playing"
var/num_devs_online = 0

if(C.is_afk())
msg += " (AFK)"
msg += "\n"

num_admins_online++

else if(check_rights(R_MENTOR|R_MOD|R_DEV_TEAM, 0, C.mob))
// Their rank may not have a defined colour, only set colour if so
var/rank_colour = client2rankcolour(C)
if(rank_colour)
modmsg += "<font color='[rank_colour]'><b>[C]</b></font> is a [C.holder.rank]"
else
modmsg += "<b>[C]</b> is a [C.holder.rank]"

if(isobserver(C.mob))
modmsg += " - Observing"
else if(isnewplayer(C.mob))
modmsg += " - Lobby"
else
modmsg += " - Playing"

if(C.is_afk())
modmsg += " (AFK)"
modmsg += "\n"
num_mods_online++
else
for(var/client/C in GLOB.admins)

if(check_rights(R_ADMIN, 0, C.mob))
if(!C.holder.fakekey)
var/rank_colour = client2rankcolour(C)
if(rank_colour)
msg += "<font color='[rank_colour]'><b>[C]</b></font> is a [C.holder.rank]"
else
msg += "<b>[C]</b> is a [C.holder.rank]"
msg += "\n"
num_admins_online++
else if(check_rights(R_MOD|R_MENTOR|R_DEV_TEAM, 0, C.mob) && !check_rights(R_ADMIN, 0, C.mob))
var/rank_colour = client2rankcolour(C)
if(rank_colour)
modmsg += "<font color='[rank_colour]'><b>[C]</b></font> is a [C.holder.rank]"
else
modmsg += "<b>[C]</b> is a [C.holder.rank]"
modmsg += "\n"
num_mods_online++

var/noadmins_info = "\n<span class='notice'><small>If no admins or mentors are online, make a ticket anyways. Adminhelps and mentorhelps will be relayed to discord, and staff will still be informed.<small></span>"
msg = "<b>Current Admins ([num_admins_online]):</b>\n" + msg + "\n<b>Current Mentors ([num_mods_online]):</b>\n" + modmsg + noadmins_info
to_chat(src, msg)
for(var/client/C in GLOB.admins)
var/list/line = list()
var/rank_colour = client2rankcolour(C)
if(rank_colour)
line.Add("<font color='[rank_colour]'><b>[C]</b></font> is a [C.holder.rank]")
else
line.Add("<b>[C]</b> is a [C.holder.rank]")

if(holder) // Only for those with perms see the extra bit
if(C.holder.fakekey || check_rights(R_ADMIN, FALSE))
line.Add(" <i>(as [C.holder.fakekey])</i>")

if(isobserver(C.mob))
line.Add(" - Observing")
else if(isnewplayer(C.mob))
line.Add(" - Lobby")
else
line.Add(" - Playing")

if(C.is_afk())
line.Add(" (AFK)")

line.Add("<br>")
if(check_rights(R_ADMIN, FALSE, C.mob)) // Is this client an admin?
if(C?.holder?.fakekey && !check_rights(R_ADMIN, FALSE)) // Only admins can see stealthmins
continue

if(C?.holder?.big_brother && !check_rights(R_PERMISSIONS, FALSE)) // Normal admins can't see Big Brother
continue
num_admins_online++
adminmsg.Add(line.Join(""))

else if(check_rights(R_DEV_TEAM, FALSE, C.mob)) // Is this client a developer?
num_devs_online++
devmsg.Add(line.Join(""))

else if(check_rights(R_MENTOR, FALSE, C.mob)) // Is this client a mentor?
num_mentors_online++
mentormsg.Add(line.Join(""))

var/list/final_message = list()
if(num_admins_online)
final_message.Add("<b>Current Admins ([num_admins_online]):</b><br>")
final_message.Add(adminmsg)
final_message.Add("<br>")
if(num_devs_online)
final_message.Add("<b>Current Developers ([num_devs_online]):</b><br>")
final_message.Add(devmsg)
final_message.Add("<br>")
if(num_mentors_online)
final_message.Add("<b>Current Mentors ([num_mentors_online]):</b><br>")
final_message.Add(mentormsg)
final_message.Add("<br>")
if(!num_admins_online || !num_mentors_online)
final_message.Add("<span class='notice'>Even with no [!num_admins_online ? "admins" : ""][!num_admins_online && !num_mentors_online ? " or " : ""][!num_mentors_online ? "mentors" : ""] are online, make a ticket anyways. [!num_admins_online ? "Adminhelps" : ""][!num_admins_online && !num_mentors_online ? " and " : ""][!num_mentors_online ? "Mentorhelps" : ""] will be relayed to discord, and staff will still be informed.</span>")
to_chat(src, final_message.Join(""))

0 comments on commit 28be62a

Please sign in to comment.