diff --git a/.tgs.yml b/.tgs.yml index 2041d0f80e..59dbf3d762 100644 --- a/.tgs.yml +++ b/.tgs.yml @@ -3,7 +3,7 @@ version: 1 # The BYOND version to use (kept in sync with dependencies.sh by the "TGS Test Suite" CI job) # Must be interpreted as a string, keep quoted -byond: "516.1657" +byond: "516.1662" # Folders to create in "/Configuration/GameStaticFiles/" static_files: # Config directory should be static diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 28a4e27f93..5957e867c8 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -121,6 +121,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G // The numbers just define the ordering, they are meaningless otherwise. #define INIT_ORDER_SERVER_MAINT 93 #define INIT_ORDER_ADMIN_VERBS 84 // needs to be pretty high, admins can't do much without it +#define INIT_ORDER_LOBBY 82 #define INIT_ORDER_WEBHOOKS 50 #define INIT_ORDER_SQLITE 41 #define INIT_ORDER_GARBAGE 40 diff --git a/code/_global_vars/lists/mob.dm b/code/_global_vars/lists/mob.dm new file mode 100644 index 0000000000..557e22b52b --- /dev/null +++ b/code/_global_vars/lists/mob.dm @@ -0,0 +1 @@ +GLOBAL_LIST_EMPTY(new_player_list) //all /mob/new_player, in theory all should have clients and those that don't are in the process of spawning and get deleted when done. diff --git a/code/controllers/subsystems/lobby_monitor.dm b/code/controllers/subsystems/lobby_monitor.dm new file mode 100644 index 0000000000..d63077299a --- /dev/null +++ b/code/controllers/subsystems/lobby_monitor.dm @@ -0,0 +1,49 @@ +SUBSYSTEM_DEF(lobby_monitor) + name = "Lobby Art" + init_order = INIT_ORDER_LOBBY + // init_stage = INITSTAGE_EARLY + flags = SS_NO_INIT + wait = 1 SECOND + runlevels = ALL + + /// The clients who we've waited a [wait] duration to start working. If they haven't, we reboot them + var/to_reinitialize = list() + +/datum/controller/subsystem/lobby_monitor/fire(resumed) + var/list/new_players = GLOB.new_player_list + + for(var/mob/new_player/player as anything in to_reinitialize) + if(!player.client) + continue + + var/datum/tgui/ui = SStgui.get_open_ui(player, player) + if(ui && player.lobby_window && player.lobby_window.status > TGUI_WINDOW_CLOSED) + continue + + log_tgui(player, "Reinitialized [player.client.ckey]'s lobby window: [ui ? "ui" : "no ui"], status: [player.lobby_window?.status].", "lobby_monitor/Fire") + INVOKE_ASYNC(player, TYPE_PROC_REF(/mob/new_player, initialize_lobby_screen)) + + var/initialize_queue = list() + for(var/mob/new_player/player as anything in new_players) + if(!player.client) + continue + + if(player in to_reinitialize) + continue + + var/datum/tgui/ui = SStgui.get_open_ui(player, player) + if(ui && player.lobby_window && player.lobby_window.status > TGUI_WINDOW_CLOSED) + continue + + initialize_queue += player + + to_reinitialize = initialize_queue + +/datum/controller/subsystem/lobby_monitor/Shutdown() + var/datum/asset/our_asset = get_asset_datum(/datum/asset/simple/restart_animation) + var/to_send = "
" + + for(var/client/client as anything in GLOB.clients) + winset(client, "lobby_browser", "is-disabled=false;is-visible=true") + + client << browse(to_send, "window=lobby_browser") diff --git a/code/modules/asset_cache/assets/lobby.dm b/code/modules/asset_cache/assets/lobby.dm index 9bec9203c5..3feeb97b3f 100644 --- a/code/modules/asset_cache/assets/lobby.dm +++ b/code/modules/asset_cache/assets/lobby.dm @@ -9,3 +9,8 @@ // not actually a gif assets["lobby_bg.gif"] = pick(using_map.lobby_screens) . = ..() + +/datum/asset/simple/restart_animation + assets = list( + "loading" = 'html/lobby/loading.gif' + ) diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index f344e192a7..3cd7424290 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -1,6 +1,6 @@ /mob/Logout() - SStgui.on_logout(src) // Cleanup any TGUIs the user has open SEND_SIGNAL(src, COMSIG_MOB_LOGOUT) + SStgui.on_logout(src) // Cleanup any TGUIs the user has open player_list -= src disconnect_time = world.realtime //VOREStation Addition: logging when we disappear. update_client_z(null) diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index c4befc15e8..7823dbbcde 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -22,6 +22,7 @@ initialize_lobby_screen() player_list |= src + GLOB.new_player_list += src created_for = ckey diff --git a/code/modules/mob/new_player/logout.dm b/code/modules/mob/new_player/logout.dm index 7f677f3c40..9b325e24cf 100644 --- a/code/modules/mob/new_player/logout.dm +++ b/code/modules/mob/new_player/logout.dm @@ -1,6 +1,7 @@ /mob/new_player/Logout() ready = 0 + GLOB.new_player_list -= src QDEL_NULL(lobby_window) disable_lobby_browser() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index cbb295fb70..1e153e2a5a 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -26,6 +26,7 @@ add_verb(src, /mob/proc/insidePanel) /mob/new_player/Destroy() + GLOB.new_player_list -= src if(manifest_dialog) QDEL_NULL(manifest_dialog) if(late_choices_dialog) diff --git a/dependencies.sh b/dependencies.sh index f470941813..90030b1f4d 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -5,7 +5,7 @@ # byond version export BYOND_MAJOR=516 -export BYOND_MINOR=1657 +export BYOND_MINOR=1662 # Macro Count export MACRO_COUNT=8 diff --git a/tgui/packages/tgui-bench/package.json b/tgui/packages/tgui-bench/package.json index 8e5eadcbe9..e83adee3cb 100644 --- a/tgui/packages/tgui-bench/package.json +++ b/tgui/packages/tgui-bench/package.json @@ -11,7 +11,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "tgui": "workspace:*", - "tgui-core": "^3.1.4" + "tgui-core": "^3.1.5" }, "devDependencies": { "@types/react": "^19.1.0", diff --git a/tgui/packages/tgui-panel/package.json b/tgui/packages/tgui-panel/package.json index d014f0a2b3..b32da95d3a 100644 --- a/tgui/packages/tgui-panel/package.json +++ b/tgui/packages/tgui-panel/package.json @@ -8,7 +8,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "tgui": "workspace:*", - "tgui-core": "^3.1.4", + "tgui-core": "^3.1.5", "tgui-dev-server": "workspace:*" }, "devDependencies": { diff --git a/tgui/packages/tgui-say/package.json b/tgui/packages/tgui-say/package.json index 1570d22290..f452db5795 100644 --- a/tgui/packages/tgui-say/package.json +++ b/tgui/packages/tgui-say/package.json @@ -7,7 +7,7 @@ "react": "^19.1.0", "react-dom": "^19.1.0", "tgui": "workspace:*", - "tgui-core": "^3.1.4" + "tgui-core": "^3.1.5" }, "devDependencies": { "@types/react": "^19.1.0", diff --git a/tgui/packages/tgui/interfaces/ICAssembly/CircuitComponent.tsx b/tgui/packages/tgui/interfaces/ICAssembly/CircuitComponent.tsx index 74f77b9f39..e792866278 100644 --- a/tgui/packages/tgui/interfaces/ICAssembly/CircuitComponent.tsx +++ b/tgui/packages/tgui/interfaces/ICAssembly/CircuitComponent.tsx @@ -152,7 +152,7 @@ export class CircuitComponent extends Component { } return ( - className="ObjectComponent" position="absolute" left={x_pos + 'px'} diff --git a/tgui/packages/tgui/interfaces/ListInputModal.tsx b/tgui/packages/tgui/interfaces/ListInputModal.tsx index 67250a29c5..246bc6f2b4 100644 --- a/tgui/packages/tgui/interfaces/ListInputModal.tsx +++ b/tgui/packages/tgui/interfaces/ListInputModal.tsx @@ -102,7 +102,7 @@ export const ListInputModal = (props) => { setTimeout(() => document!.getElementById(selected.toString())?.focus(), 1); } - function handleKeyDown(event: React.KeyboardEvent) { + function handleKeyDown(event: React.KeyboardEvent) { const key = event.key; if (key === KEY.Down || key === KEY.Up) { event.preventDefault(); diff --git a/tgui/packages/tgui/interfaces/Wires.tsx b/tgui/packages/tgui/interfaces/Wires.tsx index bdd9887b51..23c93e95d2 100644 --- a/tgui/packages/tgui/interfaces/Wires.tsx +++ b/tgui/packages/tgui/interfaces/Wires.tsx @@ -38,12 +38,12 @@ export const Wires = (props) => { ); }; -export const standardizeColor = (color: any): string => { +export const standardizeColor = (color: string): string => { const canvas = new OffscreenCanvas(1, 1); const ctx = canvas.getContext('2d'); if (ctx) { ctx.fillStyle = color; - return ctx.fillStyle as string; + return ctx.fillStyle; } else { return '#000000'; } diff --git a/tgui/packages/tgui/package.json b/tgui/packages/tgui/package.json index 890a601690..b0a352c9e9 100644 --- a/tgui/packages/tgui/package.json +++ b/tgui/packages/tgui/package.json @@ -14,7 +14,7 @@ "marked": "^4.3.0", "react": "^19.1.0", "react-dom": "^19.1.0", - "tgui-core": "^3.1.4", + "tgui-core": "^3.1.5", "tgui-dev-server": "workspace:*" }, "devDependencies": { diff --git a/tgui/yarn.lock b/tgui/yarn.lock index f1baa8a35e..0ae8f04161 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -19904,19 +19904,19 @@ __metadata: react: "npm:^19.1.0" react-dom: "npm:^19.1.0" tgui: "workspace:*" - tgui-core: "npm:^3.1.4" + tgui-core: "npm:^3.1.5" languageName: unknown linkType: soft -"tgui-core@npm:^3.1.4": - version: 3.1.4 - resolution: "tgui-core@npm:3.1.4" +"tgui-core@npm:^3.1.5": + version: 3.1.5 + resolution: "tgui-core@npm:3.1.5" dependencies: "@floating-ui/react": "npm:^0.27.6" peerDependencies: react: ^19.1.0 react-dom: ^19.1.0 - checksum: 10c0/1f0caef121de74275c08dceef926d4d1e6260eaee32cbe1ee5614456d339de4c887ce13b7b2774674feba37b56bd99204519d3eadcc57b0df3f172aa37644704 + checksum: 10c0/fdaa2c55b323f51609e8207e0d58859ff757de9b98464d44f67fbc5237f94e8eb03c9995933a92cb33a02c109c53d4937088a77b8da0395376b8a911eac9d6e8 languageName: node linkType: hard @@ -19944,7 +19944,7 @@ __metadata: react: "npm:^19.1.0" react-dom: "npm:^19.1.0" tgui: "workspace:*" - tgui-core: "npm:^3.1.4" + tgui-core: "npm:^3.1.5" tgui-dev-server: "workspace:*" languageName: unknown linkType: soft @@ -19959,7 +19959,7 @@ __metadata: react: "npm:^19.1.0" react-dom: "npm:^19.1.0" tgui: "workspace:*" - tgui-core: "npm:^3.1.4" + tgui-core: "npm:^3.1.5" vitest: "npm:^3.1.1" languageName: unknown linkType: soft @@ -20021,7 +20021,7 @@ __metadata: marked: "npm:^4.3.0" react: "npm:^19.1.0" react-dom: "npm:^19.1.0" - tgui-core: "npm:^3.1.4" + tgui-core: "npm:^3.1.5" tgui-dev-server: "workspace:*" vitest: "npm:^3.1.1" languageName: unknown diff --git a/vorestation.dme b/vorestation.dme index b14f9dee5a..a7b22538cb 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -216,6 +216,7 @@ #include "code\_global_vars\lists\logging.dm" #include "code\_global_vars\lists\mapping.dm" #include "code\_global_vars\lists\misc.dm" +#include "code\_global_vars\lists\mob.dm" #include "code\_global_vars\lists\species.dm" #include "code\_global_vars\traits\_traits.dm" #include "code\_helpers\_global_objects.dm" @@ -412,6 +413,7 @@ #include "code\controllers\subsystems\internal_wiki.dm" #include "code\controllers\subsystems\job.dm" #include "code\controllers\subsystems\lighting.dm" +#include "code\controllers\subsystems\lobby_monitor.dm" #include "code\controllers\subsystems\machines.dm" #include "code\controllers\subsystems\mail.dm" #include "code\controllers\subsystems\mapping.dm"