feat: sync worldstate on config change (#2986)
All checks were successful
Build / build (push) Successful in 1m57s
Build Docker image / docker (push) Successful in 2m0s

Reviewed-on: https://www.onlyg.it/OpenWF/SpaceNinjaServer/pulls/2986
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
This commit was merged in pull request #2986.
This commit is contained in:
2025-11-05 01:10:39 -08:00
committed by Sainan
parent ebda91f517
commit 4be7a9e6c6
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;
}