diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 88496c79d630..47aa0e732c76 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -123,7 +123,6 @@ #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 deleted file mode 100644 index 43ecbb435587..000000000000 --- a/code/controllers/subsystem/who.dm +++ /dev/null @@ -1,312 +0,0 @@ -SUBSYSTEM_DEF(who) - name = "Who" - 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() - -//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 as anything 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"] += "#ec3535" - 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" = "Spectating Players: [additional_data["observers"]]", - "color" = "#777", - "text" = "Spectating players", - )) - - new_list_data["additional_info"] += list(list( - "content" = "Spectating Admins: [additional_data["admin_observers"]]", - "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" = "#ec3535", - "text" = "Players playing as Infected Human", - )) - - new_list_data["additional_info"] += list(list( - "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" = "#5442bd", - "text" = "Players playing as Marines", - )) - - new_list_data["additional_info"] += list(list( - "content" = "Yautjas: [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 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]]]", - "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 as anything 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 as anything 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 = "StaffWho" - - SSwho.staff_who.tgui_interact(src) diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm new file mode 100644 index 000000000000..3a9274dbec62 --- /dev/null +++ b/code/game/verbs/who.dm @@ -0,0 +1,209 @@ +/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: