Backend: Match-Lobbys, Map-Veto, Echtzeit und CS2-Serveradapter

Express + Socket.IO + SQLite. Veto-Engine mit konfigurierbaren Map-Pools
und validierten Abläufen, rollenbasierte Berechtigungen, Server-Lebenszyklus
mit Demo-, Docker- und Static-Pool-Adapter (RCON), automatisches Herunterfahren.
This commit is contained in:
mregosar committed 2026-10-25 16:50:22 +01:00
commit f08297dd0d
27 files changed
+6355

No files matched your search

+41
View File
@@ -0,0 +1,41 @@
{
"$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.",
"pools": {
"competitive": {
"label": "Competitive 5 gegen 5",
"teamSize": 5,
"gameType": 0,
"gameMode": 1,
"maps": [
{ "id": "de_ancient", "name": "Ancient", "color": "#3f8f5a" },
{ "id": "de_anubis", "name": "Anubis", "color": "#c79a3d" },
{ "id": "de_dust2", "name": "Dust II", "color": "#d3a45c" },
{ "id": "de_inferno", "name": "Inferno", "color": "#c4573a" },
{ "id": "de_mirage", "name": "Mirage", "color": "#b98a4a" },
{ "id": "de_nuke", "name": "Nuke", "color": "#4a8fbf" },
{ "id": "de_train", "name": "Train", "color": "#7a7f8a" }
],
"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"]
}
},
"wingman": {
"label": "Wingman 2 gegen 2",
"teamSize": 2,
"gameType": 0,
"gameMode": 2,
"maps": [
{ "id": "de_inferno", "name": "Inferno", "color": "#c4573a" },
{ "id": "de_nuke", "name": "Nuke", "color": "#4a8fbf" },
{ "id": "de_overpass", "name": "Overpass", "color": "#5f8f7a" },
{ "id": "de_vertigo", "name": "Vertigo", "color": "#8a74b8" }
],
"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"]
}
}
}
}