Skip to content

Commit

Permalink
Merge branch 'cmss13-devs:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
LC4492 committed Jul 29, 2024
2 parents 31e22ad + 71cd53b commit 82201a0
Show file tree
Hide file tree
Showing 45 changed files with 803 additions and 478 deletions.
1 change: 1 addition & 0 deletions code/__DEFINES/camera.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#define CAMERA_NET_CONTAINMENT "Containment"
#define CAMERA_NET_CONTAINMENT_HIDDEN "Containment Hidden"
#define CAMERA_NET_RESEARCH "Research"
#define CAMERA_NET_BRIG "Brig"
#define CAMERA_NET_ALAMO "Alamo"
#define CAMERA_NET_NORMANDY "Normandy"
#define CAMERA_NET_COLONY "Colony"
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/subsystems.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion code/__DEFINES/tgs.dm
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// tgstation-server DMAPI

#define TGS_DMAPI_VERSION "7.1.2"
#define TGS_DMAPI_VERSION "7.1.3"

// All functions and datums outside this document are subject to change with any version and should not be relied on.

Expand Down
2 changes: 1 addition & 1 deletion code/controllers/subsystem/init/lobby_art.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ SUBSYSTEM_DEF(lobby_art)
/datum/controller/subsystem/lobby_art/Initialize()
var/list/lobby_arts = CONFIG_GET(str_list/lobby_art_images)
if(length(lobby_arts))
force_lobby_art(rand(1,length(lobby_arts)))
force_lobby_art(rand(1, length(lobby_arts)))
return SS_INIT_SUCCESS
312 changes: 312 additions & 0 deletions code/controllers/subsystem/who.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,312 @@
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)
8 changes: 8 additions & 0 deletions code/datums/elements/strippable.dm
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,14 @@
to_chat(user, SPAN_WARNING("You can't do this right now."))
return FALSE

if (user.is_mob_incapacitated())
to_chat(user, SPAN_WARNING("You can't do this right now."))
return FALSE

if (HAS_TRAIT(user, TRAIT_IMMOBILIZED) || HAS_TRAIT(user, TRAIT_FLOORED))
to_chat(user, SPAN_WARNING("You can't do this right now."))
return FALSE

if ((item.flags_inventory & CANTSTRIP) || ((item.flags_item & NODROP) && !(item.flags_item & FORCEDROP_CONDITIONAL)) || (item.flags_item & ITEM_ABSTRACT))
return FALSE

Expand Down
2 changes: 1 addition & 1 deletion code/datums/quadtree.dm
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@

/// Returns TRUE if this shape's bounding box intersects the provided shape's bounding box, otherwise FALSE. Generally faster than a full intersection test.
/datum/shape/proc/intersects_aabb(datum/shape/aabb)
return (abs(src.center_x - aabb.center_x) <= (src.bounds_x + aabb.bounds_x) * 0.5) && (abs(src.center_y - aabb.center_y) <= (src.bounds_x + aabb.bounds_x) * 0.5)
return (abs(src.center_x - aabb.center_x) <= (src.bounds_x + aabb.bounds_x) * 0.5) && (abs(src.center_y - aabb.center_y) <= (src.bounds_y + aabb.bounds_y) * 0.5)

/// Returns TRUE if this shape intersects the provided rectangle shape, otherwise FALSE.
/datum/shape/proc/intersects_rect(datum/shape/rectangle/rect)
Expand Down
4 changes: 4 additions & 0 deletions code/game/machinery/camera/presets.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@
name = "ares core camera"
network = list(CAMERA_NET_ARES)

/obj/structure/machinery/camera/autoname/almayer/brig
name = "brig camera"
network = list(CAMERA_NET_BRIG)

//used by the landing camera dropship equipment. Do not place them right under where the dropship lands.
//Should place them near each corner of your LZs.
/obj/structure/machinery/camera/autoname/lz_camera
Expand Down
4 changes: 4 additions & 0 deletions code/game/machinery/computer/camera_console.dm
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,10 @@
/obj/structure/machinery/computer/cameras/almayer_network/vehicle
network = list(CAMERA_NET_ALMAYER, CAMERA_NET_VEHICLE)

/obj/structure/machinery/computer/cameras/almayer_brig
name = "Brig Cameras Console"
network = list(CAMERA_NET_BRIG)

/obj/structure/machinery/computer/cameras/mortar
name = "Mortar Camera Interface"
alpha = 0
Expand Down
Loading

0 comments on commit 82201a0

Please sign in to comment.