add disableAI to config

This commit is contained in:
SowinskiBraeden committed 2026-07-10 10:51:04 -07:00
1 parent 0d61329e7c
commit ce3008451d
13 files changed
+24 -6

No files matched your search

@@ -21,6 +21,7 @@ const FIELD_LOCATIONS: Record<
disableThirdPerson: ['gameProperties', 'disableThirdPerson'],
fastValidation: ['gameProperties', 'fastValidation'],
battlEye: ['gameProperties', 'battlEye'],
disableAI: ['operating', 'disableAI'],
aiLimit: ['operating', 'aiLimit'],
playerSaveTime: ['operating', 'playerSaveTime'],
slotReservationTimeout: ['operating', 'slotReservationTimeout'],
@@ -11,7 +11,7 @@ const REAL_SHAPE = {
a2s: { address: '0.0.0.0', port: 17777 },
rcon: { address: '127.0.0.1', port: 19999, password: 'hunter2', permission: 'admin' },
game: {
name: 'DazzledCorp Training Grounds',
name: 'DZR Training Grounds',
password: '',
passwordAdmin: 'secret',
admins: ['76561198000000000'],
@@ -34,7 +34,12 @@ const REAL_SHAPE = {
{ modId: '5AAF0CCE3F001FB5' },
],
},
operating: { lobbyPlayerSynchronise: true, aiLimit: -1, playerSaveTime: 120 },
operating: {
lobbyPlayerSynchronise: true,
disableAI: false,
aiLimit: -1,
playerSaveTime: 120
},
};
describe('parseReforgerConfigJson', () => {
@@ -44,6 +49,7 @@ describe('parseReforgerConfigJson', () => {
serverName: 'DazzledCorp Training Grounds',
maxPlayers: 16,
scenarioId: '{ECC61978EDCC2B5A}Missions/23_Campaign.conf',
disableAI: false,
aiLimit: -1,
serverMaxViewDistance: 2500,
networkViewDistance: 1000,
@@ -66,6 +72,7 @@ describe('parseReforgerConfigJson', () => {
const config = parseReforgerConfigJson('{"game":{"name":"Bare"}}');
expect(config.serverName).toBe('Bare');
expect(config.maxPlayers).toBe(0);
expect(config.disableAI).toBe(false);
expect(config.aiLimit).toBe(-1);
expect(config.mods).toEqual([]);
});
@@ -52,6 +52,7 @@ export function mapReforgerConfig(raw: unknown): ReforgerServerConfig {
serverName: str(game.name, 'Unnamed server'),
maxPlayers: num(game.maxPlayers, 0),
scenarioId: str(game.scenarioId),
disableAI: bool(operating.disableAI, false),
// -1 means "no limit" in Reforger's operating.aiLimit.
aiLimit: num(operating.aiLimit, -1),
serverMaxViewDistance: num(gameProperties.serverMaxViewDistance, 0),
@@ -126,7 +126,7 @@ export class MockGameServerProvider implements GameServerProvider {
},
mods: [{ modId: '591AF5BDA9F7CE8B', name: 'Mock Sample Mod', version: '1.0.2' }],
},
operating: { aiLimit: 40 },
operating: { disableAI: false, aiLimit: 40 },
},
null,
2,
@@ -64,6 +64,7 @@ const performanceBodySchema = z
disableThirdPerson: z.boolean().nullable(),
fastValidation: z.boolean().nullable(),
battlEye: z.boolean().nullable(),
disableAI: z.boolean().nullable(),
aiLimit: z.number().int().min(-1).max(1000).nullable(),
playerSaveTime: z.number().int().min(1).max(3600).nullable(),
slotReservationTimeout: z.number().int().min(5).max(300).nullable(),
+1
View File
@@ -343,6 +343,7 @@ describe('performance config by role', () => {
disableThirdPerson: null,
fastValidation: null,
battlEye: null,
disableAI: null,
aiLimit: null,
playerSaveTime: null,
slotReservationTimeout: null,
+1
View File
@@ -69,6 +69,7 @@ describe('ServerModsService', () => {
expect(parsed.bindPort).toBe(2001);
expect(parsed.game.name).toBe('Mock Reforger Server');
expect(parsed.game.maxPlayers).toBe(16);
expect(parsed.operating.disableAI).toBe(false);
expect(parsed.operating.aiLimit).toBe(40);
});
+3 -1
View File
@@ -37,6 +37,7 @@ describe('PerformanceSettingsService', () => {
// Present in the mock config.json:
expect(settings.maxPlayers).toBe(16);
expect(settings.serverMaxViewDistance).toBe(2500);
expect(settings.disableAI).toBe(false);
expect(settings.aiLimit).toBe(40);
expect(settings.disableThirdPerson).toBe(false);
// Absent keys:
@@ -50,10 +51,11 @@ describe('PerformanceSettingsService', () => {
...settings,
maxPlayers: 32,
playerSaveTime: 180, // new key
disableAI: null,
aiLimit: null, // remove key → game default
});
expect(result.changedFields.sort()).toEqual(['aiLimit', 'maxPlayers', 'playerSaveTime']);
expect(result.changedFields.sort()).toEqual(['aiLimit', 'disableAI', 'maxPlayers', 'playerSaveTime']);
expect(result.requiresRestart).toBe(true);
const written = JSON.parse(provider.writtenFiles.get('/config.json')!);