feat: sync worldstate on config change #2986

Merged
Sainan merged 2 commits from AMelonInsideLemon/SpaceNinjaServer:sync-world-state into main 2025-11-05 01:10:42 -08:00
2 changed files with 5 additions and 1 deletions

View File

@@ -2,7 +2,7 @@ import type { RequestHandler } from "express";
import { config, syncConfigWithDatabase } from "../../services/configService.ts";
import { getAccountForRequest, isAdministrator } from "../../services/loginService.ts";
import { saveConfig } from "../../services/configWriterService.ts";
import { sendWsBroadcastEx } from "../../services/wsService.ts";
import { sendWsBroadcastEx, sendWsBroadcast } from "../../services/wsService.ts";
export const getConfigController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
@@ -21,11 +21,14 @@ export const getConfigController: RequestHandler = async (req, res) => {
export const setConfigController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
if (isAdministrator(account)) {
let isWorldStateUpdate = false;
for (const [id, value] of Object.entries(req.body as Record<string, boolean | string | number>)) {
if (id.startsWith("worldState")) isWorldStateUpdate = true;
const [obj, idx] = configIdToIndexable(id);
obj[idx] = value;
}
sendWsBroadcastEx({ config_reloaded: true }, undefined, parseInt(String(req.query.wsid)));
if (isWorldStateUpdate) sendWsBroadcast({ sync_world_state: true });
syncConfigWithDatabase();
await saveConfig();
res.end();

View File

@@ -92,6 +92,7 @@ interface IWsMsgToClient {
// to game/bootstrapper (https://openwf.io/bootstrapper-manual)
sync_inventory?: boolean;
sync_world_state?: boolean;
tunables?: ITunables;
}