From 4541f1b83b737ea5bc77f4e8f0555f8b3f49f99f Mon Sep 17 00:00:00 2001 From: Crystalic <39885003+blackcrystall@users.noreply.github.com> Date: Fri, 28 Jun 2024 18:44:37 +0500 Subject: [PATCH 1/4] who pannel --- code/controllers/subsystem/who.dm | 306 +++++++++++++++++++++ code/game/verbs/who.dm | 209 -------------- colonialmarines.dme | 2 +- tgui/packages/tgui/interfaces/StaffWho.jsx | 78 ++++++ tgui/packages/tgui/interfaces/Who.jsx | 189 +++++++++++++ 5 files changed, 574 insertions(+), 210 deletions(-) create mode 100644 code/controllers/subsystem/who.dm delete mode 100644 code/game/verbs/who.dm create mode 100644 tgui/packages/tgui/interfaces/StaffWho.jsx create mode 100644 tgui/packages/tgui/interfaces/Who.jsx diff --git a/code/controllers/subsystem/who.dm b/code/controllers/subsystem/who.dm new file mode 100644 index 000000000000..8b0649ef9403 --- /dev/null +++ b/code/controllers/subsystem/who.dm @@ -0,0 +1,306 @@ +SUBSYSTEM_DEF(who) + name = "Who" + flags = SS_NO_INIT|SS_BACKGROUND + runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY + wait = 5 SECONDS + + var/datum/player_list/who = new + var/datum/player_list/staff/staff_who = new + +/datum/controller/subsystem/who/fire(resumed = TRUE) + who.update_data() + staff_who.update_data() + +//datum +/datum/player_list + var/tgui_name = "Who" + var/tgui_interface_name = "Who" + var/list/mobs_ckey = list() + var/list/list_data = list() + +/datum/player_list/proc/update_data() + var/list/new_list_data = list() + var/list/new_mobs_ckey = list() + var/list/additional_data = list( + "lobby" = 0, + "admin_observers" = 0, + "observers" = 0, + "yautja" = 0, + "infected_preds" = 0, + "humans" = 0, + "infected_humans" = 0, + "uscm" = 0, + "uscm_marines" = 0, + ) + new_list_data["additional_info"] = list() + var/list/counted_factions = list() + for(var/client/client in sortTim(GLOB.clients, GLOBAL_PROC_REF(cmp_ckey_asc))) + CHECK_TICK + new_list_data["all_clients"]++ + var/list/client_payload = list() + client_payload["ckey"] = "[client.key]" + client_payload["text"] = "[client.key]" + client_payload["ckey_color"] = "white" + var/mob/client_mob = client.mob + new_mobs_ckey[client.key] = client_mob + if(client_mob) + if(istype(client_mob, /mob/new_player)) + client_payload["text"] += " - in Lobby" + additional_data["lobby"]++ + + else if(isobserver(client_mob)) + client_payload["text"] += " - Playing as [client_mob.real_name]" + if(CLIENT_IS_STAFF(client)) + additional_data["admin_observers"]++ + else + additional_data["observers"]++ + + var/mob/dead/observer/observer = client_mob + if(observer.started_as_observer) + client_payload["color"] += "#ce89cd" + client_payload["text"] += " - Spectating" + else + client_payload["color"] += "#A000D0" + client_payload["text"] += " - DEAD" + + else + client_payload["text"] += " - Playing as [client_mob.real_name]" + + switch(client_mob.stat) + if(UNCONSCIOUS) + client_payload["color"] += "#B0B0B0" + client_payload["text"] += " - Unconscious" + if(DEAD) + client_payload["color"] += "#A000D0" + client_payload["text"] += " - DEAD" + + if(client_mob.stat != DEAD) + if(isxeno(client_mob)) + client_payload["color"] += "#f00" + client_payload["text"] += " - Xenomorph" + + else if(ishuman(client_mob)) + if(client_mob.faction == FACTION_ZOMBIE) + counted_factions[FACTION_ZOMBIE]++ + client_payload["color"] += "#2DACB1" + client_payload["text"] += " - Zombie" + else if(client_mob.faction == FACTION_YAUTJA) + client_payload["color"] += "#7ABA19" + client_payload["text"] += " - Yautja" + additional_data["yautja"]++ + if(client_mob.status_flags & XENO_HOST) + additional_data["infected_preds"]++ + else + additional_data["humans"]++ + if(client_mob.status_flags & XENO_HOST) + additional_data["infected_humans"]++ + if(client_mob.faction == FACTION_MARINE) + additional_data["uscm"]++ + if(client_mob.job in (GLOB.ROLES_MARINES)) + additional_data["uscm_marines"]++ + else + counted_factions[client_mob.faction]++ + + new_list_data["total_players"] += list(client_payload) + + new_list_data["additional_info"] += list(list( + "content" = "in Lobby: [additional_data["lobby"]]", + "color" = "#777", + "text" = "Player in lobby", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Spectators: [additional_data["observers"]] Players", + "color" = "#777", + "text" = "Spectating players", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Spectators: [additional_data["admin_observers"]] Administrators", + "color" = "#777", + "text" = "Spectating administrators", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Humans: [additional_data["humans"]]", + "color" = "#2C7EFF", + "text" = "Players playing as Human", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Infected Humans: [additional_data["infected_humans"]]", + "color" = "#F00", + "text" = "Players playing as Infected Human", + )) + + new_list_data["additional_info"] += list(list( + "content" = "USS `Almayer` Personnel: [additional_data["uscm"]]", + "color" = "#3e26c8", + "text" = "Players playing as USS `Almayer` Personnel", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Marines: [additional_data["uscm_marines"]]", + "color" = "#3e26c8", + "text" = "Players playing as Marines", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Yautjes: [additional_data["yautja"]]", + "color" = "#7ABA19", + "text" = "Players playing as Yautja", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Infected Predators: [additional_data["infected_preds"]]", + "color" = "#7ABA19", + "text" = "Players playing as Infected Yautja", + )) + + for(var/i in 10 to length(counted_factions) - 2) + if(counted_factions[counted_factions[i]]) + new_list_data["factions"] += list(list( + "content" = "[counted_factions[i]]: [counted_factions[counted_factions[i]]]", + "color" = "#2C7EFF", + "text" = "Other", + )) + if(counted_factions[FACTION_NEUTRAL]) + new_list_data["factions"] += list(list( + "content" = "[FACTION_NEUTRAL] Humans: [counted_factions[FACTION_NEUTRAL]]", + "color" = "#688944", + "text" = "Neutrals", + )) + + for(var/faction_to_get in ALL_XENO_HIVES) + var/datum/hive_status/hive = GLOB.hive_datum[faction_to_get] + if(hive && length(hive.totalXenos)) + new_list_data["xenomorphs"] += list(list( + "content" = "[hive.name]: [length(hive.totalXenos)]", + "color" = hive.color ? hive.color : "#8200FF", + "text" = "Queen: [hive.living_xeno_queen ? "Alive" : "Dead"]", + )) + + list_data = new_list_data + mobs_ckey = new_mobs_ckey + +/datum/player_list/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, tgui_name, tgui_interface_name) + ui.open() + ui.set_autoupdate(TRUE) + +/datum/player_list/ui_data(mob/user) + . = list_data + +/datum/player_list/ui_static_data(mob/user) + . = list() + + .["admin"] = CLIENT_IS_STAFF(user.client) + +/datum/player_list/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("get_player_panel") + if(mobs_ckey[params["ckey"]]) + GLOB.admin_datums[usr.client.ckey].show_player_panel(mobs_ckey[params["ckey"]]) + +/datum/player_list/ui_status(mob/user, datum/ui_state/state) + return UI_INTERACTIVE + + +/datum/player_list/staff + tgui_name = "StaffWho" + tgui_interface_name = "Staff Who" + + var/list/category_colors = list( + "Management" = "purple", + "Maintainers" = "blue", + "Administrators" = "red", + "Moderators" = "orange", + "Mentors" = "green" + ) + +/datum/player_list/staff/update_data() + var/list/new_list_data = list() + mobs_ckey = list() + + var/list/listings + var/list/mappings + if(CONFIG_GET(flag/show_manager)) + LAZYSET(mappings, "Management", R_PERMISSIONS) + if(CONFIG_GET(flag/show_devs)) + LAZYSET(mappings, "Maintainers", R_PROFILER) + LAZYSET(mappings, "Administrators", R_ADMIN) + if(CONFIG_GET(flag/show_mods)) + LAZYSET(mappings, "Moderators", R_MOD && R_BAN) + if(CONFIG_GET(flag/show_mentors)) + LAZYSET(mappings, "Mentors", R_MENTOR) + + for(var/category in mappings) + LAZYSET(listings, category, list()) + + for(var/client/client in GLOB.admins) + if(client.admin_holder?.fakekey && !CLIENT_IS_STAFF(client)) + continue + + for(var/category in mappings) + if(CLIENT_HAS_RIGHTS(client, mappings[category])) + LAZYADD(listings[category], client) + break + + for(var/category in listings) + var/list/admins = list() + for(var/client/entry in listings[category]) + var/list/admin = list() + var/rank = entry.admin_holder.rank + if(entry.admin_holder.extra_titles?.len) + for(var/srank in entry.admin_holder.extra_titles) + rank += " & [srank]" + + admin["content"] = "[entry.key] ([rank])" + admin["text"] = "" + + if(entry.admin_holder?.fakekey) + admin["text"] += " (HIDDEN)" + + if(istype(entry.mob, /mob/dead/observer)) + admin["color"] = "#808080" + admin["text"] += " Spectating" + + else if(istype(entry.mob, /mob/new_player)) + admin["color"] = "#688944" + admin["text"] += " in Lobby" + else + admin["color"] = "#688944" + admin["text"] += " Playing" + + if(entry.is_afk()) + admin["color"] = "#A040D0" + admin["text"] += " (AFK)" + + admins += list(admin) + + new_list_data["administrators"] += list(list( + "category" = category, + "category_color" = category_colors[category], + "category_administrators" = length(listings[category]), + "admins" = admins, + )) + + list_data = new_list_data + +/mob/verb/who() + set category = "OOC" + set name = "Who" + + SSwho.who.tgui_interact(src) + +/mob/verb/staffwho() + set category = "Admin" + set name = "Staff Who" + + SSwho.staff_who.tgui_interact(src) diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm deleted file mode 100644 index a73a3b96e5e4..000000000000 --- a/code/game/verbs/who.dm +++ /dev/null @@ -1,209 +0,0 @@ -/client/verb/who()//likely don't touch any... this is easy can die. (:troll_fale:) - set name = "Who" - set category = "OOC" - - var/list/counted_humanoids = list( - "Observers" = 0, - "Admin observers" = 0, - "Humans" = 0, - "Infected humans" = 0, - FACTION_MARINE = 0, - "USCM Marines" = 0, - "Lobby" = 0, - - FACTION_YAUTJA = 0, - "Infected preds" = 0, - - FACTION_PMC = 0, - FACTION_CLF = 0, - FACTION_UPP = 0, - FACTION_TWE = 0, - FACTION_FREELANCER = 0, - FACTION_SURVIVOR = 0, - FACTION_WY_DEATHSQUAD = 0, - FACTION_COLONIST = 0, - FACTION_MERCENARY = 0, - FACTION_DUTCH = 0, - FACTION_HEFA = 0, - FACTION_GLADIATOR = 0, - FACTION_PIRATE = 0, - FACTION_PIZZA = 0, - FACTION_SOUTO = 0, - - FACTION_NEUTRAL = 0, - - FACTION_ZOMBIE = 0 - ) - - var/list/counted_xenos = list() - - var/players = length(GLOB.clients) - - var/dat = "Current Players:
" - var/list/Lines = list() - if(admin_holder && ((R_ADMIN & admin_holder.rights) || (R_MOD & admin_holder.rights))) - for(var/client/C in GLOB.clients) - if(!CLIENT_HAS_RIGHTS(src, R_STEALTH) && (CLIENT_IS_STEALTHED(C))) - continue - var/entry = "[C.key]" - if(C.mob) //Juuuust in case - if(istype(C.mob, /mob/new_player)) - entry += " - In Lobby" - counted_humanoids["Lobby"]++ - else - entry += " - Playing as [C.mob.real_name]" - - if(isobserver(C.mob)) - counted_humanoids["Observers"]++ - if(C.admin_holder?.rights & R_MOD) - counted_humanoids["Admin observers"]++ - counted_humanoids["Observers"]-- - var/mob/dead/observer/O = C.mob - if(O.started_as_observer) - entry += " - Observing" - else - entry += " - DEAD" - else - switch(C.mob.stat) - if(UNCONSCIOUS) - entry += " - Unconscious" - if(DEAD) - entry += " - DEAD" - - if(C.mob && C.mob.stat != DEAD) - if(ishuman(C.mob)) - if(C.mob.faction == FACTION_ZOMBIE) - counted_humanoids[FACTION_ZOMBIE]++ - entry += " - Zombie" - else if(C.mob.faction == FACTION_YAUTJA) - counted_humanoids[FACTION_YAUTJA]++ - entry += " - Predator" - if(C.mob.status_flags & XENO_HOST) - counted_humanoids["Infected preds"]++ - else - counted_humanoids["Humans"]++ - if(C.mob.status_flags & XENO_HOST) - counted_humanoids["Infected humans"]++ - if(C.mob.faction == FACTION_MARINE) - counted_humanoids[FACTION_MARINE]++ - if(C.mob.job in (GLOB.ROLES_MARINES)) - counted_humanoids["USCM Marines"]++ - else - counted_humanoids[C.mob.faction]++ - else if(isxeno(C.mob)) - var/mob/living/carbon/xenomorph/X = C.mob - counted_xenos[X.hivenumber]++ - if(X.faction == FACTION_PREDALIEN) - counted_xenos[FACTION_PREDALIEN]++ - entry += " - Xenomorph" - entry += " (?)" - Lines += entry - - for(var/line in sortList(Lines)) - dat += "[line]
" - dat += "Total Players: [players]" - dat += "
In Lobby: [counted_humanoids["Lobby"]]" - dat += "
Observers: [counted_humanoids["Observers"]] players and [counted_humanoids["Admin observers"]] staff members" - dat += "
Humans: [counted_humanoids["Humans"]] (Infected: [counted_humanoids["Infected humans"]])" - if(counted_humanoids[FACTION_MARINE]) - dat += "
USCM personnel: [counted_humanoids[FACTION_MARINE]] (Marines: [counted_humanoids["USCM Marines"]])" - if(counted_humanoids[FACTION_YAUTJA]) - dat += "
Predators: [counted_humanoids[FACTION_YAUTJA]] [counted_humanoids["Infected preds"] ? "(Infected: [counted_humanoids["Infected preds"]])" : ""]" - if(counted_humanoids[FACTION_ZOMBIE]) - dat += "
Zombies: [counted_humanoids[FACTION_ZOMBIE]]" - - var/show_fact = TRUE - for(var/i in 10 to LAZYLEN(counted_humanoids) - 2) - if(counted_humanoids[counted_humanoids[i]]) - if(show_fact) - dat += "

Other factions:" - show_fact = FALSE - dat += "
[counted_humanoids[i]]: [counted_humanoids[counted_humanoids[i]]]" - if(counted_humanoids[FACTION_NEUTRAL]) - dat += "
[FACTION_NEUTRAL] Humans: [counted_humanoids[FACTION_NEUTRAL]]" - - show_fact = TRUE - var/datum/hive_status/hive - for(var/hivenumber in counted_xenos) - // Print predalien counts last - if(hivenumber == FACTION_PREDALIEN) - continue - if(show_fact) - dat += "

Xenomorphs:" - show_fact = FALSE - hive = GLOB.hive_datum[hivenumber] - if(hive) - dat += "
[hive.name]: [counted_xenos[hivenumber]] (Queen: [hive.living_xeno_queen ? "Alive" : "Dead"])" - else - dat += "
Error: no hive datum detected for [hivenumber]." - hive = null - if(counted_xenos[FACTION_PREDALIEN]) - dat += "
Predaliens: [counted_xenos[FACTION_PREDALIEN]]" - - else - for(var/client/C in GLOB.clients) - if((C.admin_holder && C.admin_holder.fakekey) || (CLIENT_IS_STEALTHED(C))) - continue - - Lines += C.key - for(var/line in sortList(Lines)) - dat += "[line]
" - dat += "Total Players: [players]
" - - dat += "" - show_browser(usr, dat, "Who", "who", "size=600x800") - - -/client/verb/staffwho() - set name = "Staffwho" - set category = "Admin" - - var/dat = "" - var/list/mappings - if(CONFIG_GET(flag/show_manager)) - LAZYSET(mappings, "Management", R_PERMISSIONS) - if(CONFIG_GET(flag/show_devs)) - LAZYSET(mappings, "Maintainers", R_PROFILER) - LAZYSET(mappings, "Admins", R_ADMIN) - if(CONFIG_GET(flag/show_mods)) - LAZYSET(mappings, "Moderators", R_MOD) - if(CONFIG_GET(flag/show_mentors)) - LAZYSET(mappings, "Mentors", R_MENTOR) - - var/list/listings - for(var/category in mappings) - LAZYSET(listings, category, list()) - - for(var/client/C in GLOB.admins) - if(CLIENT_IS_STEALTHED(C) && !CLIENT_HAS_RIGHTS(src, R_STEALTH)) - continue - if(C.admin_holder?.fakekey && !CLIENT_IS_STAFF(src)) - continue - for(var/category in mappings) - if(CLIENT_HAS_RIGHTS(C, mappings[category])) - LAZYADD(listings[category], C) - break - - for(var/category in listings) - dat += "
Current [category] ([length(listings[category])]):
\n" - for(var/client/entry in listings[category]) - dat += "\t[entry.key] is \a [entry.admin_holder.rank]" - if(entry.admin_holder.extra_titles?.len) - for(var/srank in entry.admin_holder.extra_titles) - dat += " & [srank]" - if(CLIENT_IS_STAFF(src)) - if(CLIENT_IS_STEALTHED(entry)) - dat += " (STEALTHED)" - else if(entry.admin_holder?.fakekey) - dat += " (HIDDEN)" - if(istype(entry.mob, /mob/dead/observer)) - dat += " - Observing" - else if(istype(entry.mob, /mob/new_player)) - dat += " - Lobby" - else - dat += " - Playing" - if(entry.is_afk()) - dat += " (AFK)" - dat += "
" - dat += "" - show_browser(usr, dat, "Staffwho", "staffwho", "size=600x800") diff --git a/colonialmarines.dme b/colonialmarines.dme index 5193cd3571cb..517174459340 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -311,6 +311,7 @@ #include "code\controllers\subsystem\tracking.dm" #include "code\controllers\subsystem\vote.dm" #include "code\controllers\subsystem\weather.dm" +#include "code\controllers\subsystem\who.dm" #include "code\controllers\subsystem\x_evolution.dm" #include "code\controllers\subsystem\xeno.dm" #include "code\controllers\subsystem\init\landmarks.dm" @@ -1409,7 +1410,6 @@ #include "code\game\verbs\ooc.dm" #include "code\game\verbs\preferences.dm" #include "code\game\verbs\records.dm" -#include "code\game\verbs\who.dm" #include "code\modules\trigger.dm" #include "code\modules\admin\admin.dm" #include "code\modules\admin\admin_ranks.dm" diff --git a/tgui/packages/tgui/interfaces/StaffWho.jsx b/tgui/packages/tgui/interfaces/StaffWho.jsx new file mode 100644 index 000000000000..1ce71c9b5001 --- /dev/null +++ b/tgui/packages/tgui/interfaces/StaffWho.jsx @@ -0,0 +1,78 @@ +import { useBackend } from '../backend'; +import { Button, Collapsible, Stack } from '../components'; +import { Window } from '../layouts'; + +export const StaffWho = (props, context) => { + const { data } = useBackend(context); + const { admin, administrators } = data; + + return ( + + + {administrators !== undefined ? ( + + + {administrators.map((x, index) => ( + + {x.admins.map((x, index) => ( + + ))} + + ))} + + + ) : null} + + + ); +}; + +const StaffWhoCollapsible = (props, context) => { + const { title, color, children } = props; + return ( + + {children} + + ); +}; + +const GetAdminInfo = (props, context) => { + const { admin, content, color, text } = props; + return admin ? ( + + ) : ( + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Who.jsx b/tgui/packages/tgui/interfaces/Who.jsx new file mode 100644 index 000000000000..dccf3d1e39f0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Who.jsx @@ -0,0 +1,189 @@ +import { useBackend, useLocalState } from '../backend'; +import { + Box, + Button, + Collapsible, + Icon, + Input, + Section, + Stack, +} from '../components'; +import { Window } from '../layouts'; + +export const Who = (props, context) => { + const { act, data } = useBackend(context); + const { + admin, + all_clients, + total_players = [], + additional_info = [], + factions = [], + xenomorphs = [], + } = data; + + const [searchQuery, setSearchQuery] = useLocalState('searchQuery', ''); + + const searchPlayers = () => + total_players.filter((player) => isMatch(player, searchQuery)); + + const filteredTotalPlayers = searchPlayers(); + + return ( + + + + +
+ + + + + + + act('get_player_panel', { + ckey: searchPlayers()?.[0].ckey, + }) + } + onInput={(e) => setSearchQuery(e.target.value)} + placeholder="Search..." + value={searchQuery} + /> + + +
+
+ +
+ + {filteredTotalPlayers.length ? ( + + {filteredTotalPlayers.map((x) => ( + + ))} + + ) : null} + +
+ {admin !== 0 ? ( +
+ + + {additional_info.length + ? additional_info.map((x, index) => ( + + )) + : null} + {factions.length + ? factions.map((x, index) => ( + + )) + : null} + {xenomorphs.length + ? xenomorphs.map((x, index) => ( + + )) + : null} + + +
+ ) : null} +
+
+
+
+ ); +}; + +const WhoCollapsible = (props, context) => { + const { title, color, children } = props; + return ( + + {children} + + ); +}; + +const GetAddInfo = (props, context) => { + const { act } = useBackend(context); + const { content, color, text } = props; + + return ( + + ); +}; + +const GetPlayerInfo = (props, context) => { + const { act } = useBackend(context); + const { + admin, + player: { ckey, ckey_color, color, text }, + } = props; + return admin !== 0 ? ( + + ) : ( + + ); +}; + +const isMatch = (player, searchQuery) => { + if (!searchQuery) { + return true; + } + + return ( + player.ckey.toLowerCase().includes(searchQuery?.toLowerCase()) || false + ); +}; From 0f87f64b8f362b6e0c33b948000e21b3d4140cd5 Mon Sep 17 00:00:00 2001 From: Crystalic <39885003+blackcrystall@users.noreply.github.com> Date: Thu, 11 Jul 2024 11:01:08 +0500 Subject: [PATCH 2/4] fix of mine skill issue --- code/controllers/subsystem/who.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/controllers/subsystem/who.dm b/code/controllers/subsystem/who.dm index 8b0649ef9403..6408654aafc9 100644 --- a/code/controllers/subsystem/who.dm +++ b/code/controllers/subsystem/who.dm @@ -34,7 +34,7 @@ SUBSYSTEM_DEF(who) ) new_list_data["additional_info"] = list() var/list/counted_factions = list() - for(var/client/client in sortTim(GLOB.clients, GLOBAL_PROC_REF(cmp_ckey_asc))) + for(var/client/client as anything in sortTim(GLOB.clients, GLOBAL_PROC_REF(cmp_ckey_asc))) CHECK_TICK new_list_data["all_clients"]++ var/list/client_payload = list() @@ -157,7 +157,7 @@ SUBSYSTEM_DEF(who) "text" = "Players playing as Infected Yautja", )) - for(var/i in 10 to length(counted_factions) - 2) + for(var/i = 1 to length(counted_factions)) if(counted_factions[counted_factions[i]]) new_list_data["factions"] += list(list( "content" = "[counted_factions[i]]: [counted_factions[counted_factions[i]]]", @@ -243,7 +243,7 @@ SUBSYSTEM_DEF(who) for(var/category in mappings) LAZYSET(listings, category, list()) - for(var/client/client in GLOB.admins) + for(var/client/client as anything in GLOB.admins) if(client.admin_holder?.fakekey && !CLIENT_IS_STAFF(client)) continue @@ -254,7 +254,7 @@ SUBSYSTEM_DEF(who) for(var/category in listings) var/list/admins = list() - for(var/client/entry in listings[category]) + for(var/client/entry as anything in listings[category]) var/list/admin = list() var/rank = entry.admin_holder.rank if(entry.admin_holder.extra_titles?.len) From 9b1f9207abd3e7789a7f0309df86dc6204368c03 Mon Sep 17 00:00:00 2001 From: Deleted user Date: Wed, 17 Jul 2024 11:31:03 +0500 Subject: [PATCH 3/4] 0001-tgui-who-update.patch --- code/__DEFINES/subsystems.dm | 1 + code/controllers/subsystem/who.dm | 34 ++++++++++++++++++------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 47aa0e732c76..88496c79d630 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -123,6 +123,7 @@ #define SS_INIT_NIGHTMARE 21.5 #define SS_INIT_TIMETRACK 21.1 #define SS_INIT_HUMANS 21 +#define SS_INIT_WHO 20 #define SS_INIT_POWER 19 #define SS_INIT_INFLUXMCSTATS 12 #define SS_INIT_INFLUXSTATS 11 diff --git a/code/controllers/subsystem/who.dm b/code/controllers/subsystem/who.dm index 6408654aafc9..12e24b802bf2 100644 --- a/code/controllers/subsystem/who.dm +++ b/code/controllers/subsystem/who.dm @@ -1,12 +1,18 @@ SUBSYSTEM_DEF(who) name = "Who" - flags = SS_NO_INIT|SS_BACKGROUND - runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY + flags = SS_BACKGROUND + runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY + init_order = SS_INIT_WHO wait = 5 SECONDS var/datum/player_list/who = new var/datum/player_list/staff/staff_who = new +/datum/controller/subsystem/who/Initialize() + who.update_data() + staff_who.update_data() + return SS_INIT_SUCCESS + /datum/controller/subsystem/who/fire(resumed = TRUE) who.update_data() staff_who.update_data() @@ -76,7 +82,7 @@ SUBSYSTEM_DEF(who) if(client_mob.stat != DEAD) if(isxeno(client_mob)) - client_payload["color"] += "#f00" + client_payload["color"] += "#ec3535" client_payload["text"] += " - Xenomorph" else if(ishuman(client_mob)) @@ -104,19 +110,19 @@ SUBSYSTEM_DEF(who) new_list_data["total_players"] += list(client_payload) new_list_data["additional_info"] += list(list( - "content" = "in Lobby: [additional_data["lobby"]]", + "content" = "In Lobby: [additional_data["lobby"]]", "color" = "#777", "text" = "Player in lobby", )) new_list_data["additional_info"] += list(list( - "content" = "Spectators: [additional_data["observers"]] Players", + "content" = "Spectating Players: [additional_data["observers"]]", "color" = "#777", "text" = "Spectating players", )) new_list_data["additional_info"] += list(list( - "content" = "Spectators: [additional_data["admin_observers"]] Administrators", + "content" = "Spectating Admins: [additional_data["admin_observers"]]", "color" = "#777", "text" = "Spectating administrators", )) @@ -129,24 +135,24 @@ SUBSYSTEM_DEF(who) new_list_data["additional_info"] += list(list( "content" = "Infected Humans: [additional_data["infected_humans"]]", - "color" = "#F00", + "color" = "#ec3535", "text" = "Players playing as Infected Human", )) new_list_data["additional_info"] += list(list( - "content" = "USS `Almayer` Personnel: [additional_data["uscm"]]", - "color" = "#3e26c8", - "text" = "Players playing as USS `Almayer` Personnel", + "content" = "[MAIN_SHIP_NAME] Personnel: [additional_data["uscm"]]", + "color" = "#5442bd", + "text" = "Players playing as [MAIN_SHIP_NAME] Personnel", )) new_list_data["additional_info"] += list(list( "content" = "Marines: [additional_data["uscm_marines"]]", - "color" = "#3e26c8", + "color" = "#5442bd", "text" = "Players playing as Marines", )) new_list_data["additional_info"] += list(list( - "content" = "Yautjes: [additional_data["yautja"]]", + "content" = "Yautjas: [additional_data["yautja"]]", "color" = "#7ABA19", "text" = "Players playing as Yautja", )) @@ -157,7 +163,7 @@ SUBSYSTEM_DEF(who) "text" = "Players playing as Infected Yautja", )) - for(var/i = 1 to length(counted_factions)) + for(var/i in 1 to length(counted_factions)) if(counted_factions[counted_factions[i]]) new_list_data["factions"] += list(list( "content" = "[counted_factions[i]]: [counted_factions[counted_factions[i]]]", @@ -301,6 +307,6 @@ SUBSYSTEM_DEF(who) /mob/verb/staffwho() set category = "Admin" - set name = "Staff Who" + set name = "StaffWho" SSwho.staff_who.tgui_interact(src) From c633dfeb9c5e3734dc703b136193c211a3e6baec Mon Sep 17 00:00:00 2001 From: Deleted user Date: Wed, 17 Jul 2024 11:32:55 +0500 Subject: [PATCH 4/4] womp womp --- code/controllers/subsystem/who.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/who.dm b/code/controllers/subsystem/who.dm index 12e24b802bf2..43ecbb435587 100644 --- a/code/controllers/subsystem/who.dm +++ b/code/controllers/subsystem/who.dm @@ -1,7 +1,7 @@ SUBSYSTEM_DEF(who) name = "Who" flags = SS_BACKGROUND - runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY + runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY init_order = SS_INIT_WHO wait = 5 SECONDS