From 2d65634d6e2c6be74802e53e9803b384bdedaba8 Mon Sep 17 00:00:00 2001 From: MrEgosar Date: Thu, 29 Oct 2026 21:01:27 +0100 Subject: [PATCH] =?UTF-8?q?Map-Pools:=20Overpass,=20Vertigo=20und=20Cache?= =?UTF-8?q?=20f=C3=BCr=20Competitive,=20Map-Auswahl=20im=20Admin,=20Veto-A?= =?UTF-8?q?blauf=20passend=20zur=20Map-Anzahl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 ++++- client/public/maps/de_cache.webp | Bin 0 -> 130512 bytes client/src/pages/AdminPage.jsx | 95 +++++++++++++++++++ client/src/styles.css | 14 +++ server/config/map-pools.json | 154 +++++++++++++++++++++++++++---- server/src/adminRoutes.js | 17 +++- server/src/app.js | 2 + server/src/http.js | 2 +- server/src/mapPools.js | 56 +++++++---- server/src/serverSettings.js | 29 ++++++ server/src/veto.js | 29 ++++++ server/test/api.test.js | 33 +++++++ server/test/veto.test.js | 49 ++++++++-- 13 files changed, 459 insertions(+), 45 deletions(-) create mode 100644 client/public/maps/de_cache.webp diff --git a/README.md b/README.md index 0a807b0..6d525d3 100644 --- a/README.md +++ b/README.md @@ -148,13 +148,28 @@ Beim Start wird jeder Ablauf geprüft: - genau eine Entscheidungsmap - Seitenwahl nur direkt nach einem Pick oder der Entscheidungsmap -Ungültige oder fehlende Abläufe machen nur dieses Format unauswählbar (mit Begründung in der Oberfläche). +Passt kein hinterlegter Ablauf zur Map-Anzahl, erzeugt die Anwendung einen (siehe unten). Unauswählbar ist ein Format nur, wenn es zu wenige Maps gibt (mit Begründung in der Oberfläche). + +### Maps im Admin-Bereich wählen + +Unter Einstellungen → **Map-Pools** wählt der Admin pro Modus, welche Maps im Veto stehen (mindestens 2). Die Auswahl steht in der Datenbank und gilt für neue Matches. Laufende Matches behalten ihre Maps und ihren Ablauf. Maps mit `"active": false` in der Konfiguration stehen im Katalog, sind aber erst nach Auswahl aktiv. + +**Ablauf passend zur Map-Anzahl:** Passt ein hinterlegter Ablauf zur Anzahl der gewählten Maps, gilt er. Sonst erzeugt die Anwendung einen Ablauf: + +1. bis zu zwei Bans (X, dann Y), +2. die Picks der Serie im Wechsel, die Seite wählt jeweils das andere Team, +3. die restlichen Bans im Wechsel, +4. die letzte Map ist die Entscheidungsmap, ihre Seite wählt das Team, das nicht zuletzt dran war. + +Jede weitere Map bedeutet also einen Ban mehr. BO3 braucht mindestens 3 Maps, BO5 mindestens 5. Der Admin-Bereich zeigt nach dem Speichern den Ablauf für jedes Format. + +Beispiel Competitive mit allen 10 Maps, BO3: X bannt, Y bannt, X pickt (Y Seite), Y pickt (X Seite), X, Y, X, Y, X bannen → Entscheidungsmap, Y wählt Seite. ### Mitgelieferte Abläufe -**Competitive (7 Maps):** Ancient, Anubis, Dust II, Inferno, Mirage, Nuke, Train +**Competitive (Katalog mit 10 Maps):** Ancient, Anubis, Cache, Dust II, Inferno, Mirage, Nuke, Overpass, Train, Vertigo. Alle 10 sind aktiv. Die festen Abläufe unten gelten für die klassischen 7 Maps (Ancient, Anubis, Dust II, Inferno, Mirage, Nuke, Train), bei jeder anderen Auswahl erzeugt die Anwendung den Ablauf. -| Format | Ablauf | +| Format (7 Maps) | Ablauf | |---|---| | BO1 | X bannt, Y bannt, X bannt, Y bannt, X bannt, Y bannt → Entscheidungsmap, X wählt Seite | | BO3 | X bannt, Y bannt, X pickt (Y wählt Seite), Y pickt (X wählt Seite), X bannt, Y bannt → Entscheidungsmap, X wählt Seite | @@ -166,7 +181,7 @@ Ungültige oder fehlende Abläufe machen nur dieses Format unauswählbar (mit Be |---|---| | BO1 | X bannt, Y bannt, X bannt → Entscheidungsmap, Y wählt Seite | | BO3 | X bannt, Y pickt (X Seite), X pickt (Y Seite) → Entscheidungsmap, X wählt Seite | -| BO5 | **nicht unterstützt:** Mit 4 Maps sind keine 5 Karten möglich. Mit einem Pool von mindestens 5 Maps und einem `bo5`-Ablauf wird es automatisch auswählbar. | +| BO5 | **nicht unterstützt:** Mit 4 Maps sind keine 5 Karten möglich. Mit mindestens 5 Maps wird es automatisch auswählbar. | ### Regel für Startseiten @@ -456,6 +471,7 @@ Startet man den Server eines laufenden Matches neu, lädt die Anwendung danach d ### Reiter „Einstellungen“ +- **Map-Pools:** pro Modus wählen, welche Maps im Veto stehen. Der Veto-Ablauf passt sich der Anzahl an, siehe „Maps im Admin-Bereich wählen“. - **Gameserver:** Runden Competitive und Wingman, Verlängerung, zusätzliche Konsolenbefehle, CSTV an/aus und Verzögerung, Zeit pro Veto-Schritt, Leerlauf-Frist, maximale Laufzeit, Startzeit (inklusive Download) und Archiv-Frist. Die Werte aus der `.env` sind die Vorgabe. Was hier geändert wird, steht in der Datenbank und gilt auch nach einem Neustart. Mit „live“ markierte Werte gehen beim Speichern sofort per RCON an alle laufenden Server. Befehle, die Passwörter ändern oder den Server beenden, sind gesperrt. - **Docker-Hosts:** Hosts hinzufügen, entfernen und bearbeiten (Name, Docker-Ziel, Adresse, Portbereich, LAN-Ports, Volume). Die Liste ersetzt `CS2_DOCKER_HOSTS`. „Liste aus .env verwenden“ schaltet zurück. Hosts mit laufenden Servern lassen sich nicht entfernen und ihre Adresse nicht ändern. - **Image aktualisieren:** lädt das CS2-Image auf allen Hosts gleichzeitig neu (per SSH direkt auf dem Host). Laufende Server laufen weiter. diff --git a/client/public/maps/de_cache.webp b/client/public/maps/de_cache.webp new file mode 100644 index 0000000000000000000000000000000000000000..5e8c37b2b950eb9a51b82560ac8290067f42038b GIT binary patch literal 130512 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 literal 0 HcmV?d00001 diff --git a/client/src/pages/AdminPage.jsx b/client/src/pages/AdminPage.jsx index 3cf3580..e7b7913 100644 --- a/client/src/pages/AdminPage.jsx +++ b/client/src/pages/AdminPage.jsx @@ -3,6 +3,7 @@ import { Link } from 'react-router-dom'; import { api } from '../lib/api.js'; import { FORMAT_LABEL, serverLabel } from '../lib/labels.js'; import CopyField from '../components/CopyField.jsx'; +import MapImage from '../components/MapImage.jsx'; const KEY = 'cs2mv:admin'; const FILTER_KEY = 'cs2mv:admin:filter'; @@ -146,6 +147,7 @@ export default function AdminPage() { + {tab === 'settings' && token && } {tab === 'settings' && token && } {tab === 'settings' && token && } {tab === 'settings' && token && } @@ -905,3 +907,96 @@ function KnifePanel({ token, setNotice }) { ); } +const STEP_LABEL = { ban: 'Ban', pick: 'Pick', side: 'Seite' }; + +/** Veto-Ablauf als kurze Schrittfolge; X = Team, das das Veto beginnt, Y = das andere Team. */ +function FlowSteps({ flow }) { + return ( +

    + {flow.map((raw, i) => { + if (raw === 'decider') return
  1. Entscheidung
  2. ; + const [type, actor] = raw.split(':'); + return
  3. {STEP_LABEL[type]} {actor === 'X' ? '1' : '2'}
  4. ; + })} +
+ ); +} + +/** Welche Maps gespielt werden, pro Modus. Gilt für neue Matches, laufende behalten ihre Maps. */ +function MapPoolsPanel({ token, setNotice }) { + const [pools, setPools] = useState(null); + const [selection, setSelection] = useState({}); + const [busy, setBusy] = useState(false); + + const apply = (res) => { + setPools(res.pools); + setSelection(Object.fromEntries(res.pools.map((p) => [p.mode, p.maps.filter((m) => m.active).map((m) => m.id)]))); + }; + useEffect(() => { + api('/admin/map-pools', { token }).then(apply).catch((err) => setNotice({ tone: 'error', text: err.message })); + }, [token, setNotice]); + if (!pools) return null; + + const toggle = (mode, id) => { + const cur = new Set(selection[mode]); + if (cur.has(id)) cur.delete(id); + else cur.add(id); + setSelection({ ...selection, [mode]: [...cur] }); + }; + const save = async (mode) => { + setBusy(true); + try { + apply(await api('/admin/map-pools', { method: 'PUT', body: { mode, maps: selection[mode] }, token })); + setNotice({ tone: 'ok', text: 'Maps gespeichert – gilt für neue Matches' }); + } catch (err) { + setNotice({ tone: 'error', text: err.message }); + } finally { + setBusy(false); + } + }; + + return ( +
+

Map-Pools

+

+ Welche Maps im Veto stehen. Der Veto-Ablauf passt sich der Anzahl an: Für jede weitere Map gibt es einen Ban mehr. + Laufende Matches behalten ihre Maps. „1“ ist das Team, das das Veto beginnt. +

+ {pools.map((p) => { + const chosen = new Set(selection[p.mode]); + const saved = new Set(p.maps.filter((m) => m.active).map((m) => m.id)); + const dirty = chosen.size !== saved.size || [...chosen].some((id) => !saved.has(id)); + return ( +
+

{p.label} {chosen.size} von {p.maps.length} Maps

+
+ {p.maps.map((m) => ( + + ))} +
+ {!dirty && ( +
+ {Object.entries(p.formats).map(([f, info]) => ( +
+ {f.toUpperCase()} + {info.supported ? : {info.reason}} +
+ ))} +
+ )} +
+ + {dirty && } + {chosen.size < 2 && Mindestens 2 Maps} + {dirty && chosen.size >= 2 && Nach dem Speichern steht hier der neue Veto-Ablauf.} +
+
+ ); + })} +
+ ); +} diff --git a/client/src/styles.css b/client/src/styles.css index fd1367b..fc140cb 100644 --- a/client/src/styles.css +++ b/client/src/styles.css @@ -612,3 +612,17 @@ input:focus, select:focus { border-color: var(--link); outline: none; } .knife-list code { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: .85rem; } .knife-list .btn { margin-left: auto; } .knife-mode { display: inline-block; margin: 0; padding: 1px 8px; border-radius: 999px; font-size: .75rem; font-weight: 700; color: var(--primary); border: 1px solid var(--primary); background: transparent; } +.pool-maps { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 8px; margin-bottom: 10px; } +.pool-map { position: relative; display: flex; flex-direction: column; justify-content: flex-end; min-height: 78px; isolation: isolate; border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; cursor: pointer; opacity: .45; transition: opacity .15s ease, border-color .15s ease; } +.pool-map.is-on { opacity: 1; border-color: var(--primary); } +.pool-map input { position: absolute; top: 6px; left: 6px; z-index: 2; } + +.pool-map-name { position: relative; z-index: 1; padding: 5px 8px; font-size: .9rem; font-weight: 700; text-shadow: 0 1px 6px rgba(0, 0, 0, .7); } +.pool-flows { display: flex; flex-direction: column; gap: 6px; margin-bottom: 10px; } +.pool-flow { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: baseline; } +.pool-flow strong { min-width: 36px; font-size: .85rem; } +.flow-steps { display: flex; flex-wrap: wrap; gap: 4px; list-style: none; margin: 0; padding: 0; } +.flow-steps li { font-size: .75rem; padding: 1px 7px; border-radius: 999px; border: 1px solid var(--line); color: var(--muted); } +.flow-steps .flow-ban { color: var(--error); border-color: color-mix(in srgb, var(--error) 50%, transparent); } +.flow-steps .flow-pick { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 50%, transparent); } +.flow-steps .flow-decider { color: var(--text); border-color: var(--primary); } diff --git a/server/config/map-pools.json b/server/config/map-pools.json index fa1056a..bdec50b 100644 --- a/server/config/map-pools.json +++ b/server/config/map-pools.json @@ -1,5 +1,5 @@ { - "$comment": "Map-Pools und Veto-Abläufe. Schritte: ban:X, pick:X, side:X, decider. X = erstes Team (startet das Veto), Y = zweites Team. 'side' folgt immer auf einen Pick bzw. auf 'decider' und bezieht sich auf diese Map. Ungültige Abläufe werden beim Start gemeldet und das Format ist dann nicht auswählbar. Optional pro Map: image = Bild-URL oder Pfad (z. B. /maps/de_dust2.jpg aus client/public). Standardbilder: github.com/ghostcap-gaming/cs2-map-images (Bilder aus dem Spiel, Rechte bei Valve).", + "$comment": "Map-Pools und Veto-Abläufe. Schritte: ban:X, pick:X, side:X, decider. X = erstes Team (startet das Veto), Y = zweites Team. 'side' folgt immer auf einen Pick bzw. auf 'decider' und bezieht sich auf diese Map. Welche Maps gespielt werden, wählt der Admin im Admin-Bereich (Einstellungen → Map-Pools); 'active': false = nur im Katalog. Die hier hinterlegten Abläufe gelten, wenn sie zur Anzahl der aktiven Maps passen, sonst erzeugt die Anwendung einen passenden Ablauf. Optional pro Map: image = Bild-URL oder Pfad (z. B. /maps/de_dust2.jpg aus client/public). Standardbilder: github.com/ghostcap-gaming/cs2-map-images (Bilder aus dem Spiel, Rechte bei Valve).", "pools": { "competitive": { "label": "Competitive 5 gegen 5", @@ -7,18 +7,104 @@ "gameType": 0, "gameMode": 1, "maps": [ - { "id": "de_ancient", "name": "Ancient", "color": "#3f8f5a", "image": "/maps/de_ancient.webp" }, - { "id": "de_anubis", "name": "Anubis", "color": "#c79a3d", "image": "/maps/de_anubis.webp" }, - { "id": "de_dust2", "name": "Dust II", "color": "#d3a45c", "image": "/maps/de_dust2.webp" }, - { "id": "de_inferno", "name": "Inferno", "color": "#c4573a", "image": "/maps/de_inferno.webp" }, - { "id": "de_mirage", "name": "Mirage", "color": "#b98a4a", "image": "/maps/de_mirage.webp" }, - { "id": "de_nuke", "name": "Nuke", "color": "#4a8fbf", "image": "/maps/de_nuke.webp" }, - { "id": "de_train", "name": "Train", "color": "#7a7f8a", "image": "/maps/de_train.webp" } + { + "id": "de_ancient", + "name": "Ancient", + "color": "#3f8f5a", + "image": "/maps/de_ancient.webp" + }, + { + "id": "de_anubis", + "name": "Anubis", + "color": "#c79a3d", + "image": "/maps/de_anubis.webp" + }, + { + "id": "de_cache", + "name": "Cache", + "color": "#6f8a4a", + "image": "/maps/de_cache.webp" + }, + { + "id": "de_dust2", + "name": "Dust II", + "color": "#d3a45c", + "image": "/maps/de_dust2.webp" + }, + { + "id": "de_inferno", + "name": "Inferno", + "color": "#c4573a", + "image": "/maps/de_inferno.webp" + }, + { + "id": "de_mirage", + "name": "Mirage", + "color": "#b98a4a", + "image": "/maps/de_mirage.webp" + }, + { + "id": "de_nuke", + "name": "Nuke", + "color": "#4a8fbf", + "image": "/maps/de_nuke.webp" + }, + { + "id": "de_overpass", + "name": "Overpass", + "color": "#5f8f7a", + "image": "/maps/de_overpass.webp" + }, + { + "id": "de_train", + "name": "Train", + "color": "#7a7f8a", + "image": "/maps/de_train.webp" + }, + { + "id": "de_vertigo", + "name": "Vertigo", + "color": "#8a74b8", + "image": "/maps/de_vertigo.webp" + } ], "flows": { - "bo1": ["ban:X", "ban:Y", "ban:X", "ban:Y", "ban:X", "ban:Y", "decider", "side:X"], - "bo3": ["ban:X", "ban:Y", "pick:X", "side:Y", "pick:Y", "side:X", "ban:X", "ban:Y", "decider", "side:X"], - "bo5": ["ban:X", "ban:Y", "pick:X", "side:Y", "pick:Y", "side:X", "pick:X", "side:Y", "pick:Y", "side:X", "decider", "side:Y"] + "bo1": [ + "ban:X", + "ban:Y", + "ban:X", + "ban:Y", + "ban:X", + "ban:Y", + "decider", + "side:X" + ], + "bo3": [ + "ban:X", + "ban:Y", + "pick:X", + "side:Y", + "pick:Y", + "side:X", + "ban:X", + "ban:Y", + "decider", + "side:X" + ], + "bo5": [ + "ban:X", + "ban:Y", + "pick:X", + "side:Y", + "pick:Y", + "side:X", + "pick:X", + "side:Y", + "pick:Y", + "side:X", + "decider", + "side:Y" + ] } }, "wingman": { @@ -27,14 +113,48 @@ "gameType": 0, "gameMode": 2, "maps": [ - { "id": "de_inferno", "name": "Inferno", "color": "#c4573a", "image": "/maps/de_inferno.webp" }, - { "id": "de_nuke", "name": "Nuke", "color": "#4a8fbf", "image": "/maps/de_nuke.webp" }, - { "id": "de_overpass", "name": "Overpass", "color": "#5f8f7a", "image": "/maps/de_overpass.webp" }, - { "id": "de_vertigo", "name": "Vertigo", "color": "#8a74b8", "image": "/maps/de_vertigo.webp" } + { + "id": "de_inferno", + "name": "Inferno", + "color": "#c4573a", + "image": "/maps/de_inferno.webp" + }, + { + "id": "de_nuke", + "name": "Nuke", + "color": "#4a8fbf", + "image": "/maps/de_nuke.webp" + }, + { + "id": "de_overpass", + "name": "Overpass", + "color": "#5f8f7a", + "image": "/maps/de_overpass.webp" + }, + { + "id": "de_vertigo", + "name": "Vertigo", + "color": "#8a74b8", + "image": "/maps/de_vertigo.webp" + } ], "flows": { - "bo1": ["ban:X", "ban:Y", "ban:X", "decider", "side:Y"], - "bo3": ["ban:X", "pick:Y", "side:X", "pick:X", "side:Y", "decider", "side:X"] + "bo1": [ + "ban:X", + "ban:Y", + "ban:X", + "decider", + "side:Y" + ], + "bo3": [ + "ban:X", + "pick:Y", + "side:X", + "pick:X", + "side:Y", + "decider", + "side:X" + ] } } } diff --git a/server/src/adminRoutes.js b/server/src/adminRoutes.js index c65b8b5..9244729 100644 --- a/server/src/adminRoutes.js +++ b/server/src/adminRoutes.js @@ -15,7 +15,7 @@ function bearer(req) { * (nur im Speicher, verfällt nach 12 Stunden oder beim Neustart). Admin-Aktionen nutzen die bestehenden * Organisator-Funktionen mit einem Admin-Zugang, die Berechtigungen bleiben also an einer Stelle. */ -export function createAdminRouter({ service, manager, config, settings, knife }) { +export function createAdminRouter({ service, manager, config, settings, knife, pools }) { const router = express.Router(); const sessions = new Map(); // Token -> Ablaufzeit (ms) const loginLimit = createRateLimiter({ windowMs: 60_000, max: 5 }); @@ -125,6 +125,21 @@ export function createAdminRouter({ service, manager, config, settings, knife }) return hostView(); })); + // Map-Pools: welche Maps gespielt werden. Der Veto-Ablauf passt sich der Anzahl an. + const poolView = () => ({ + pools: Object.values(pools).map((p) => ({ + mode: p.mode, + label: p.label, + maps: p.allMaps.map((m) => ({ ...m, active: p.maps.some((a) => a.id === m.id) })), + formats: p.formats, + })), + }); + router.get('/map-pools', requireAdmin, wrap(() => poolView())); + router.put('/map-pools', requireAdmin, wrap((req) => { + settings.saveMapSelection(pools, req.body?.mode, req.body?.maps); + return poolView(); + })); + // Messer-Server für die Seitenwahl router.get('/knife', requireAdmin, wrap(() => ({ servers: knife.list(), diff --git a/server/src/app.js b/server/src/app.js index f15f0a7..82675a8 100644 --- a/server/src/app.js +++ b/server/src/app.js @@ -21,6 +21,8 @@ export function createApp(config, { adapter: adapterOverride, logger = console } const settings = new ServerSettings({ db, config }); settings.load(); const pools = loadMapPools(config.mapPoolFile); + // Im Admin-Bereich gewählte Maps (Einstellungen → Map-Pools) + settings.applyMapSelection(pools); const notifier = createDiscordNotifier(config.discordWebhookUrl, { logger }); const service = new MatchService({ db, pools, config, notifier }); diff --git a/server/src/http.js b/server/src/http.js index 8d9807d..74d61cc 100644 --- a/server/src/http.js +++ b/server/src/http.js @@ -32,7 +32,7 @@ export function createApiRouter({ service, manager, config, pools, adapter, sett }); router.use(express.json({ limit: '32kb' })); - router.use('/admin', createAdminRouter({ service, manager, config, settings, knife })); + router.use('/admin', createAdminRouter({ service, manager, config, settings, knife, pools })); const limiters = { create: createRateLimiter({ windowMs: 60_000, max: 10 }), diff --git a/server/src/mapPools.js b/server/src/mapPools.js index 0f4bdb4..bccc799 100644 --- a/server/src/mapPools.js +++ b/server/src/mapPools.js @@ -1,5 +1,5 @@ import fs from 'node:fs'; -import { BEST_OF, validateFlow } from './veto.js'; +import { BEST_OF, generateFlow, validateFlow } from './veto.js'; /** * Lädt die Map-Pools und markiert jede Kombination aus Modus und Format als unterstützt oder nicht. @@ -22,32 +22,56 @@ export function buildMapPools(raw) { } ids.add(map.id); } - const formats = {}; - for (const format of Object.keys(BEST_OF)) { - const flow = pool.flows?.[format]; - if (!flow) { - formats[format] = { supported: false, reason: 'Kein Veto-Ablauf für dieses Format hinterlegt' }; - continue; - } - const errors = validateFlow(flow, pool.maps.length, format); - formats[format] = errors.length - ? { supported: false, reason: errors.join('; ') } - : { supported: true, flow }; - if (errors.length) console.warn(`[map-pools] ${mode}/${format} deaktiviert: ${errors.join('; ')}`); - } + // "active": false = Map ist im Katalog, wird aber erst nach Auswahl im Admin-Bereich gespielt + const active = pool.maps.filter((m) => m.active !== false).map((m) => m.id); pools[mode] = { mode, label: pool.label ?? mode, teamSize: pool.teamSize, gameType: pool.gameType, gameMode: pool.gameMode, - maps: pool.maps, - formats, + allMaps: pool.maps.map(({ active: _ignored, ...m }) => m), + flows: pool.flows ?? {}, + maps: [], + formats: {}, }; + setActiveMaps(pools[mode], active, { warn: true }); } return pools; } +/** + * Veto-Abläufe für die aktiven Maps: Ein in der Konfiguration hinterlegter Ablauf gilt, wenn er zur Map-Anzahl passt, + * sonst erzeugt die Anwendung einen passenden Ablauf. + */ +export function formatsFor(pool, mapCount, { warn = false } = {}) { + const formats = {}; + for (const format of Object.keys(BEST_OF)) { + const configured = pool.flows?.[format]; + if (configured && validateFlow(configured, mapCount, format).length === 0) { + formats[format] = { supported: true, flow: configured, generated: false }; + continue; + } + const flow = generateFlow(mapCount, format); + if (!flow) { + formats[format] = { supported: false, reason: `${format.toUpperCase()} braucht mindestens ${Math.max(BEST_OF[format], 2)} Maps` }; + continue; + } + const errors = validateFlow(flow, mapCount, format); + formats[format] = errors.length ? { supported: false, reason: errors.join('; ') } : { supported: true, flow, generated: true }; + if (errors.length && warn) console.warn(`[map-pools] ${pool.mode}/${format} deaktiviert: ${errors.join('; ')}`); + } + return formats; +} + +/** Aktive Maps eines Pools setzen (Reihenfolge wie im Katalog) und die Formate neu berechnen. */ +export function setActiveMaps(pool, ids, options) { + const wanted = new Set(ids); + pool.maps = pool.allMaps.filter((m) => wanted.has(m.id)); + pool.formats = formatsFor(pool, pool.maps.length, options); + return pool; +} + export function publicPools(pools) { return Object.values(pools).map((p) => ({ mode: p.mode, diff --git a/server/src/serverSettings.js b/server/src/serverSettings.js index e4dac10..0301da7 100644 --- a/server/src/serverSettings.js +++ b/server/src/serverSettings.js @@ -3,9 +3,11 @@ import { HttpError } from './matchService.js'; import { parseDockerHosts } from './config.js'; +import { setActiveMaps } from './mapPools.js'; const SETTINGS_KEY = 'server_settings'; const HOSTS_KEY = 'docker_hosts'; +const MAPS_KEY = 'map_selection'; /** * Änderbare Felder. `get`/`set` greifen auf das gemeinsame config-Objekt zu, das Match-Service, @@ -192,4 +194,31 @@ export class ServerSettings { hostsOverridden() { return this.readJson(HOSTS_KEY) != null; } + + /** Beim Start: im Admin-Bereich gewählte Maps auf die Pools legen. Unbekannte Maps werden ignoriert. */ + applyMapSelection(pools) { + const saved = this.readJson(MAPS_KEY) ?? {}; + for (const [mode, ids] of Object.entries(saved)) { + const pool = pools[mode]; + if (!pool || !Array.isArray(ids)) continue; + const known = ids.filter((id) => pool.allMaps.some((m) => m.id === id)); + if (known.length >= 2) setActiveMaps(pool, known); + } + } + + /** Aktive Maps eines Modus setzen und speichern. Gilt für neue Matches, laufende behalten ihre Maps. */ + saveMapSelection(pools, mode, ids) { + const pool = pools[mode]; + if (!pool) throw new HttpError(400, `Unbekannter Modus: ${mode}`, 'invalid'); + if (!Array.isArray(ids)) throw new HttpError(400, 'Map-Liste erwartet', 'invalid'); + const unique = [...new Set(ids.map(String))]; + const unknown = unique.filter((id) => !pool.allMaps.some((m) => m.id === id)); + if (unknown.length) throw new HttpError(400, `Unbekannte Map: ${unknown.join(', ')}`, 'invalid'); + if (unique.length < 2) throw new HttpError(400, 'Mindestens 2 Maps auswählen', 'invalid'); + setActiveMaps(pool, unique); + const saved = this.readJson(MAPS_KEY) ?? {}; + saved[mode] = pool.maps.map((m) => m.id); + this.writeJson(MAPS_KEY, saved); + return pool; + } } diff --git a/server/src/veto.js b/server/src/veto.js index 1d1e726..0b0dd27 100644 --- a/server/src/veto.js +++ b/server/src/veto.js @@ -54,6 +54,35 @@ export function validateFlow(flow, mapCount, format) { return errors; } +/** + * Erzeugt einen Veto-Ablauf für eine beliebige Anzahl Maps. Bans und Picks wechseln sich zwischen den Teams ab: + * erst bis zu zwei Bans, dann die Picks (die Seite wählt jeweils das andere Team), dann die restlichen Bans. + * Die letzte Map ist die Entscheidungsmap, ihre Seite wählt das Team, das nicht zuletzt dran war. + * Liefert null, wenn es für das Format zu wenige Maps gibt. + */ +export function generateFlow(mapCount, format) { + const bestOf = BEST_OF[format]; + if (!bestOf || mapCount < Math.max(bestOf, 2)) return null; + const picks = bestOf - 1; + const bans = mapCount - bestOf; + const before = Math.min(2, bans); + const steps = []; + let actor = 'X'; + const next = () => { + const current = actor; + actor = actor === 'X' ? 'Y' : 'X'; + return current; + }; + for (let i = 0; i < before; i += 1) steps.push(`ban:${next()}`); + for (let i = 0; i < picks; i += 1) { + const picker = next(); + steps.push(`pick:${picker}`, `side:${picker === 'X' ? 'Y' : 'X'}`); + } + for (let i = before; i < bans; i += 1) steps.push(`ban:${next()}`); + steps.push('decider', `side:${actor}`); + return steps; +} + function teamFor(actor, firstTeam) { const second = firstTeam === 'A' ? 'B' : 'A'; return actor === 'X' ? firstTeam : second; diff --git a/server/test/api.test.js b/server/test/api.test.js index f157f4f..0c3cf9e 100644 --- a/server/test/api.test.js +++ b/server/test/api.test.js @@ -574,3 +574,36 @@ test('Messer-Server: nur Admin startet, Startseite sieht laufende, Ports zählen await close(); } }); +test('Map-Pools im Admin: Auswahl gilt für neue Matches, Veto passt sich an, laufende Matches behalten ihre Maps', async () => { + const { app, call, close } = await setup({ adminPassword: 'admin-geheim' }); + try { + const token = (await call('POST', '/admin/login', { body: { password: 'admin-geheim' } })).body.token; + const before = (await call('POST', '/matches', { body: { teamA: 'Vorher A', teamB: 'Vorher B', mode: 'competitive', format: 'bo3' } })).body; + const view = (await call('GET', '/admin/map-pools', { token })).body; + const comp = view.pools.find((p) => p.mode === 'competitive'); + assert.ok(['de_overpass', 'de_vertigo', 'de_cache'].every((id) => comp.maps.some((m) => m.id === id && m.active))); + + // Nur 5 Maps: BO5 geht noch, BO3 hat dann 2 Bans + const five = ['de_cache', 'de_dust2', 'de_inferno', 'de_mirage', 'de_nuke']; + const saved = await call('PUT', '/admin/map-pools', { token, body: { mode: 'competitive', maps: five } }); + assert.equal(saved.status, 200, JSON.stringify(saved.body)); + const pool = saved.body.pools.find((p) => p.mode === 'competitive'); + assert.equal(pool.maps.filter((m) => m.active).length, 5); + assert.deepEqual(pool.formats.bo3.flow, ['ban:X', 'ban:Y', 'pick:X', 'side:Y', 'pick:Y', 'side:X', 'decider', 'side:X']); + + // Neue Matches bekommen die neue Auswahl, das alte behält seine 10 Maps + const after = (await call('POST', '/matches', { body: { teamA: 'Nachher A', teamB: 'Nachher B', mode: 'competitive', format: 'bo3' } })).body; + assert.equal(JSON.parse(app.service.getMatch(after.id).maps).length, 5); + assert.equal(JSON.parse(app.service.getMatch(before.id).maps).length, 10); + // Öffentliche Konfiguration (Match erstellen) zeigt die neuen Formate + const cfg = (await call('GET', '/config')).body; + assert.equal(cfg.pools.find((p) => p.mode === 'competitive').maps.length, 5); + + // Ungültig: zu wenige oder unbekannte Maps + assert.equal((await call('PUT', '/admin/map-pools', { token, body: { mode: 'competitive', maps: ['de_cache'] } })).status, 400); + assert.equal((await call('PUT', '/admin/map-pools', { token, body: { mode: 'competitive', maps: ['de_cache', 'de_foo'] } })).status, 400); + assert.equal((await call('PUT', '/admin/map-pools', { body: { mode: 'competitive', maps: five } })).status, 401); + } finally { + await close(); + } +}); diff --git a/server/test/veto.test.js b/server/test/veto.test.js index 678191d..7d5cc07 100644 --- a/server/test/veto.test.js +++ b/server/test/veto.test.js @@ -2,11 +2,14 @@ import { test } from 'node:test'; import assert from 'node:assert/strict'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import { computeVetoState, resolveAction, validateFlow } from '../src/veto.js'; -import { buildMapPools, loadMapPools } from '../src/mapPools.js'; +import { computeVetoState, generateFlow, resolveAction, validateFlow } from '../src/veto.js'; +import { buildMapPools, loadMapPools, setActiveMaps } from '../src/mapPools.js'; const here = path.dirname(fileURLToPath(import.meta.url)); const pools = loadMapPools(path.join(here, '..', 'config', 'map-pools.json')); +// Die klassischen 7 Competitive-Maps: dafür gilt der fest hinterlegte Ablauf +const SEVEN = ['de_ancient', 'de_anubis', 'de_dust2', 'de_inferno', 'de_mirage', 'de_nuke', 'de_train']; +const competitive7 = () => setActiveMaps(structuredClone(pools.competitive), SEVEN); test('alle ausgelieferten Abläufe sind gültig, Wingman-BO5 ist nicht unterstützt', () => { assert.equal(pools.competitive.formats.bo1.supported, true); @@ -37,8 +40,42 @@ test('ungültiger Ablauf in der Konfiguration deaktiviert nur dieses Format', () }, }); assert.equal(custom.mini.formats.bo1.supported, true); - assert.equal(custom.mini.formats.bo3.supported, false); - assert.match(custom.mini.formats.bo5.reason, /Kein Veto-Ablauf/); + assert.equal(custom.mini.formats.bo1.generated, false, 'passender fester Ablauf wird genommen'); + // Ungültiger fester Ablauf: die Anwendung erzeugt einen passenden + assert.equal(custom.mini.formats.bo3.supported, true); + assert.equal(custom.mini.formats.bo3.generated, true); + assert.match(custom.mini.formats.bo5.reason, /mindestens 5 Maps/); +}); + +test('Erzeugte Abläufe sind für jede Map-Anzahl gültig', () => { + for (let n = 2; n <= 12; n += 1) { + for (const format of ['bo1', 'bo3', 'bo5']) { + const flow = generateFlow(n, format); + const need = { bo1: 2, bo3: 3, bo5: 5 }[format]; + if (n < need) { + assert.equal(flow, null, `${format} mit ${n} Maps`); + continue; + } + assert.deepEqual(validateFlow(flow, n, format), [], `${format} mit ${n} Maps: ${flow.join(' ')}`); + } + } + // Bans und Picks wechseln sich ab, die Seite der Entscheidungsmap wählt das Team, das nicht zuletzt dran war + assert.deepEqual(generateFlow(5, 'bo3'), ['ban:X', 'ban:Y', 'pick:X', 'side:Y', 'pick:Y', 'side:X', 'decider', 'side:X']); + assert.deepEqual(generateFlow(3, 'bo1'), ['ban:X', 'ban:Y', 'decider', 'side:X']); +}); + +test('Aktive Maps wählen: Formate passen sich an, Reihenfolge bleibt wie im Katalog', () => { + const pool = structuredClone(pools.competitive); + setActiveMaps(pool, ['de_vertigo', 'de_cache', 'de_mirage', 'de_unbekannt']); + assert.deepEqual(pool.maps.map((m) => m.id), ['de_cache', 'de_mirage', 'de_vertigo']); + assert.equal(pool.formats.bo1.supported, true); + assert.equal(pool.formats.bo3.supported, true); + assert.equal(pool.formats.bo5.supported, false); + // 10 Maps (alle): kein fester Ablauf passt, es wird erzeugt + assert.equal(pools.competitive.maps.length, 10); + assert.equal(pools.competitive.formats.bo3.generated, true); + // 7 klassische Maps: fester Ablauf aus der Konfiguration + assert.equal(competitive7().formats.bo3.generated, false); }); function play(pool, format, firstTeam, choices) { @@ -52,7 +89,7 @@ function play(pool, format, firstTeam, choices) { } test('BO3 Competitive: kompletter Ablauf mit Seitenwahl und Entscheidungsmap', () => { - const state = play(pools.competitive, 'bo3', 'B', [ + const state = play(competitive7(), 'bo3', 'B', [ { map: 'de_train' }, // B bannt { map: 'de_nuke' }, // A bannt { map: 'de_mirage' }, // B pickt @@ -82,7 +119,7 @@ test('BO1 Wingman: Entscheidungsmap wird automatisch übernommen', () => { }); test('falsches Team, veraltete Schritte und vergebene Maps werden abgelehnt', () => { - const pool = pools.competitive; + const pool = competitive7(); const ctx = { maps: pool.maps, flow: pool.formats.bo1.flow, firstTeam: 'A', actions: [] }; assert.throws(() => resolveAction(ctx, { team: 'B', stepIndex: 0, map: 'de_nuke' }), { code: 'not_your_turn' }); assert.throws(() => resolveAction(ctx, { team: 'A', stepIndex: 1, map: 'de_nuke' }), { code: 'stale_step' });