diff --git a/server/src/servers/cs2Config.js b/server/src/servers/cs2Config.js index 07c55d9..5306f8c 100644 --- a/server/src/servers/cs2Config.js +++ b/server/src/servers/cs2Config.js @@ -61,6 +61,8 @@ export function buildMapCommands({ match, pool, seriesMap, secrets, settings, lo 'mp_match_can_clinch 1', // Keine Map-Abstimmung nach Spielende: die nächste Map legt das Veto fest 'mp_endmatch_votenextmap 0', + // Strenge Prüfung der Delta-Ticks (Standard 2) trennt Spieler und CSTV ohne echten Grund + 'sv_deltaticks_enforce 0', 'mp_autoteambalance 0', 'mp_limitteams 0', // Aufwärmphase läuft, bis der Organisator das Match startet (mp_warmup_end) diff --git a/server/src/servers/dockerAdapter.js b/server/src/servers/dockerAdapter.js index 5a66042..1bf6abb 100644 --- a/server/src/servers/dockerAdapter.js +++ b/server/src/servers/dockerAdapter.js @@ -266,8 +266,9 @@ export class DockerServerAdapter { CS2_GAMETYPE: '0', CS2_GAMEMODE: mode === 'wingman' ? '2' : '1', CS2_SERVER_HIBERNATE: '0', - // Ohne diesen Startparameter legt CS2 keine Rundensicherungen an (Rollback) - CS2_ADDITIONAL_ARGS: '-allow_round_backup_files', + // -allow_round_backup_files: ohne ihn legt CS2 keine Rundensicherungen an (Rollback). + // sv_deltaticks_enforce 0: sonst trennt CS2 Spieler und CSTV mit NETWORK_DISCONNECT_BADDELTATICK + CS2_ADDITIONAL_ARGS: '-allow_round_backup_files +sv_deltaticks_enforce 0', TV_ENABLE: '1', TV_PORT: String(tvPort), TV_PW: secrets.tvPassword, diff --git a/server/src/servers/knifeServers.js b/server/src/servers/knifeServers.js index 847d2a0..18002c2 100644 --- a/server/src/servers/knifeServers.js +++ b/server/src/servers/knifeServers.js @@ -32,6 +32,8 @@ export function buildKnifeCommands({ map, pool = { gameType: 0, gameMode: 1 }, w 'mp_match_can_clinch 1', // Keine Map-Abstimmung nach Spielende: die nächste Map legt das Veto fest 'mp_endmatch_votenextmap 0', + // Strenge Prüfung der Delta-Ticks (Standard 2) trennt Spieler und CSTV ohne echten Grund + 'sv_deltaticks_enforce 0', 'mp_match_end_restart 1', 'mp_match_restart_delay 10', 'mp_halftime 0', diff --git a/server/test/dockerAdapter.test.js b/server/test/dockerAdapter.test.js index 449ca3d..5aaae9f 100644 --- a/server/test/dockerAdapter.test.js +++ b/server/test/dockerAdapter.test.js @@ -37,7 +37,7 @@ test('Ohne GSLT startet der Container im LAN-Modus, mit GSLT mit Token', async ( assert.equal(env.SRCDS_TOKEN, undefined); assert.equal(env.CS2_GAMEMODE, '2'); assert.equal(env.CS2_MAXPLAYERS, '6', '4 Spieler + CSTV + Reserve'); - assert.equal(env.CS2_ADDITIONAL_ARGS, '-allow_round_backup_files', 'Rundensicherung für Rollback'); + assert.equal(env.CS2_ADDITIONAL_ARGS, '-allow_round_backup_files +sv_deltaticks_enforce 0', 'Rundensicherung für Rollback, keine Trennung wegen Delta-Ticks'); assert.equal(env.CS2_PORT, '27100'); assert.equal(env.TV_PORT, '27200'); assert.ok(runArgs.includes('cs2-mapveto-gamefiles:/home/steam/cs2-dedicated')); diff --git a/server/test/rcon.test.js b/server/test/rcon.test.js index 7abddd8..9feaccb 100644 --- a/server/test/rcon.test.js +++ b/server/test/rcon.test.js @@ -79,6 +79,7 @@ test('Log-Weiterleitung wird vor dem Mapwechsel gesetzt, unsichere URLs nicht', const ok = buildMapCommands({ ...base, logUrl: 'http://192.168.178.31:3000/api/logs/abc_D-1/KEY123' }).beforeMapChange; assert.ok(ok.includes('logaddress_add_http "http://192.168.178.31:3000/api/logs/abc_D-1/KEY123"')); assert.ok(buildMapCommands({ ...base, logUrl: 'http://x/api/logs/a/b' }).afterMapChange.includes('mp_endmatch_votenextmap 0'), 'keine Map-Abstimmung nach dem Match'); + assert.ok(buildMapCommands({ ...base, logUrl: 'http://x/api/logs/a/b' }).afterMapChange.includes('sv_deltaticks_enforce 0'), 'keine Trennung wegen Delta-Ticks'); assert.ok(ok.indexOf('log on') < ok.indexOf('changelevel de_nuke')); const bad = buildMapCommands({ ...base, logUrl: 'http://x"; quit' }).beforeMapChange; assert.ok(!bad.some((c) => c.startsWith('logaddress')));