feat: sync worldstate on config change #2986
@@ -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();
|
||||
|
||||
@@ -92,6 +92,7 @@ interface IWsMsgToClient {
|
||||
|
||||
// to game/bootstrapper (https://openwf.io/bootstrapper-manual)
|
||||
sync_inventory?: boolean;
|
||||
sync_world_state?: boolean;
|
||||
tunables?: ITunables;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user