Skip to content

Commit

Permalink
who
Browse files Browse the repository at this point in the history
  • Loading branch information
Ssshizoprenia authored Jul 2, 2023
1 parent cb87637 commit a57bf64
Showing 1 changed file with 325 additions and 0 deletions.
325 changes: 325 additions & 0 deletions code/controllers/subsystem/who.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,325 @@
SUBSYSTEM_DEF(who)
name = "Who"
flags = SS_NO_INIT|SS_BACKGROUND
runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY
wait = 5 SECONDS //smooth update

//make it global, good for CPU, no per player UI update
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/additiona_data = list(
"lobby" = 0,
"admin_observers" = 0,
"observers" = 0,
"yautja" = 0,
"infected_preds" = 0,
"humans" = 0,
"infected_humans" = 0,
"uscm" = 0,
"uscm_marines" = 0,
)
var/list/mobs_by_faction = list()
new_list_data["additional_info"] = list()

for(var/client/client in GLOB.clients)
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"// change it if want! for byond supporters maybe? (client.player_data?.donator_info.patreon_function_available("ooc_color") ? "#D4AF37" : "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"
additiona_data["lobby"]++
new_list_data["total_players"] += list(client_payload)
continue

if(isobserver(client_mob))
client_payload["text"] += " - Playing as [client_mob.real_name]"
if(CLIENT_IS_STAFF(client))
additiona_data["admin_observers"]++
else
additiona_data["observers"]++

var/mob/dead/observer/observer = client_mob
if(observer.started_as_observer)
client_payload["color"] += "#808080"
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)
client_payload["color"] += "#2DACB1"
client_payload["text"] += " - Zombie"
else if(client_mob.faction == FACTION_YAUTJA)
client_payload["color"] += "#7ABA19"
client_payload["text"] += " - Yautja"
additiona_data["yautja"]++
if(client_mob.status_flags & XENO_HOST)
additiona_data["infected_preds"]++
else
additiona_data["humans"]++
if(client_mob.status_flags & XENO_HOST)
additiona_data["infected_humans"]++
if(client_mob.faction == FACTION_MARINE)
additiona_data["uscm"]++
if(client_mob.job in (ROLES_MARINES))
additiona_data["uscm_marines"]++

mobs_by_faction[client_mob.faction]++

new_list_data["total_players"] += list(client_payload)

// Case - no shit code in UI... backend...
new_list_data["additional_info"] += list(list(
"content" = "in Lobby: [additiona_data["lobby"]]",
"color" = "#777",
"text" = "Player in lobby",
))

new_list_data["additional_info"] += list(list(
"content" = "Spectators: [additiona_data["observers"]] Players",
"color" = "#777",
"text" = "Spectating players",
))

new_list_data["additional_info"] += list(list(
"content" = "Spectators: [additiona_data["admin_observers"]] Administrators",
"color" = "#777",
"text" = "Spectating administrators",
))

new_list_data["additional_info"] += list(list(
"content" = "Humans: [additiona_data["humans"]]",
"color" = "#2C7EFF",
"text" = "Players playing as Human",
))

new_list_data["additional_info"] += list(list(
"content" = "Infected Humans: [additiona_data["infected_humans"]]",
"color" = "#F00",
"text" = "Players playing as Infected Human",
))

new_list_data["additional_info"] += list(list(
"content" = "USS `Almayer` Personnel: [additiona_data["uscm"]]",
"color" = "#2d199b",
"text" = "Players playing as USS `Almayer` Personnel",
))

new_list_data["additional_info"] += list(list(
"content" = "Marines: [additiona_data["uscm_marines"]]",
"color" = "#2d199b",
"text" = "Players playing as Marines",
))

new_list_data["additional_info"] += list(list(
"content" = "Yautjes: [additiona_data["yautja"]]",
"color" = "#7ABA19",
"text" = "Players playing as Yautja",
))

new_list_data["additional_info"] += list(list(
"content" = "Infected Yautjes: [additiona_data["infected_preds"]])",
"color" = "#7ABA19",
"text" = "Players playing as Infected Yautja",
))

for(var/faction_to_get in FACTION_LIST_HUMANOID - FACTION_YAUTJA - FACTION_MARINE)
var/datum/faction/faction = GLOB.faction_datums[faction_to_get]
if(!length(mobs_by_faction[faction_to_get]))
continue
new_list_data["factions"] += list(list(
"content" = "[faction.name]: [length(mobs_by_faction[faction_to_get])]",
"color" = "#43397b",//https://cdn.discordapp.com/attachments/972351753691484260/1125177717751554068/video_2023-03-23_21-38-07.mov
"text" = "NO NUKES? https://cdn.discordapp.com/attachments/800784806383976508/1125146089759195146/trim.13BC96E2-6A10-40AA-B0B1-3D22024D1E8F.mp4",
))// WHY YOU CHECK THAT BROTHA? YOU NOT SUPPOSED TO SEE SECRET DANGEON OF DEVELOPING!!!
for(var/faction_to_get in FACTION_LIST_XENOMORPH)
var/datum/hive_status/faction = GLOB.hive_datum[faction_to_get]
if(!length(mobs_by_faction[faction_to_get]))
continue
new_list_data["xenomorphs"] += list(list(
"content" = "[faction.name]: [length(mobs_by_faction[faction_to_get])]",
"color" = faction.color,
"text" = "Queen: [faction.living_xeno_queen ? "Alive" : "Dead"]",
))// XENO BIOS

/* in future...
for(var/faction_to_get in FACTION_LIST_HUMANOID - FACTION_YAUTJA - FACTION_MARINE)
var/datum/faction/faction = GLOB.faction_datum[faction_to_get]
if(!length(faction.totalMobs))
continue
new_list_data["factions"] += list(list(
"content" = "[faction.name]: [length(faction.totalMobs)]",
"color" = faction.color,
"text" = "[faction.desc]",
))
for(var/faction_to_get in FACTION_LIST_XENOMORPH)
var/datum/faction/faction = GLOB.faction_datum[faction_to_get]
if(!length(faction.totalMobs))
continue
new_list_data["xenomorphs"] += list(list(
"content" = "[faction.name]: [length(faction.totalMobs)]",
"color" = faction.color,
"text" = "Queen: [faction.living_xeno_queen ? "Alive" : "Dead"] [faction.desc]",
))
*/

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")
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_HOST)
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)

0 comments on commit a57bf64

Please sign in to comment.