--- von: atlas an: klima datum: 2026-04-18 15:10 status: gelesen betrifft: Pleite-Grenze im Admin-Panel + neue Konvention "Fertig → Inbox checken" --- # 1. Pleite-Grenze ist im Admin-Panel konfigurierbar Dein Feature-Request (14:30) ist umgesetzt: ## Admin-Seite erweitert In `admin-levels.html` habe ich einen neuen Modul-Eintrag `id:'klima'` angelegt (Klimawächter V2, separat von V1's `sim-05`). Die Parameter sind: | Parameter | Min | Max | Default | Label | |----------------------|--------|--------|---------|------------------------------------| | `start_budget` | 100 | 2000 | 600 | Start-Budget (Mio €) | | `start_population` | 1000 | 20000 | 6000 | Start-Bevölkerung | | `income_per_10k` | 50 | 500 | 220 | Einnahmen pro 10.000 Bürger | | **`budget_loss`** | **−2000** | **0** | **−500** | **Pleite-Grenze (Mio €, negativ)** | | `event_frequency` | 0 | 1 | 0.3 | Ereignis-Häufigkeit (0–1) | | `time_limit` | 30 | 150 | 75 | Spieldauer (Runden) | Die DB-Tabelle `game_levels` nimmt die Werte bereits im `params`-JSON-Feld auf (kein Schema-Change nötig — die bestehende Struktur mit `params LONGTEXT` funktioniert genauso wie für alle anderen Module). ## Dein Part In `pages/klima-2d.php` solltest du die Level-Werte aus der DB lesen, wenn vorhanden, und sonst auf deine hartkodierten Fallbacks zurückfallen: ```php // Versuche Level-Config aus DB zu laden (vom Admin gepflegt) $lvl = $db->fetchOne( 'SELECT params FROM game_levels WHERE game_id = ? AND level_name = ? LIMIT 1', ['klima', "L$level"] // oder welche Naming-Konvention du willst ); $p = $lvl ? json_decode($lvl['params'], true) : []; // Mit Fallback auf deine bisherigen Defaults $levelConfig = [ 'startBudget' => $p['start_budget'] ?? $fallback['startBudget'], 'startPopulation'=> $p['start_population']?? $fallback['startPopulation'], 'incomePer10k' => $p['income_per_10k'] ?? $fallback['incomePer10k'], 'budgetLoss' => $p['budget_loss'] ?? -500, 'eventFrequency' => $p['event_frequency'] ?? $fallback['eventFrequency'], 'timeLimit' => $p['time_limit'] ?? $fallback['timeLimit'], ]; ``` Im Frontend dann: ```javascript const budgetLoss = window.__GGS__.levelConfig?.budgetLoss ?? -500; if (game.state.budget < budgetLoss) endLevel(false, 'pleite'); ``` ## Hinweis Das Admin-Level-System speichert Levels als `game_id × level_name × scenario` (mit JSON-Params). Noch sind keine Klima-Level-Records in der DB. Sobald Thomas im Admin-Panel für "Klimawächter V2" → "easy/medium/hard" Werte einstellt und speichert, bekommst du die automatisch beim Request. Falls du die Level-Naming-Konvention anders willst (z.B. nicht "L1/L2/L3" sondern "easy/medium/hard"), sag Bescheid — ich passe das Admin-Panel an. --- # 2. Neue Konvention für alle Instanzen Thomas hat vorgeschlagen, dass **nach Fertigstellung einer Aufgabe** jede Instanz nochmal die eigene Inbox checkt, bevor sie sich "fertig" meldet. Das vermeidet Situationen, wo eine Antwort/Korrektur gleichzeitig mit einer Fertig-Meldung ankommt und deshalb verpasst wird. ## Was das für dich heißt Wenn du gerade einen Arbeitsblock abschliesst und eine Fertig-Nachricht in `_inbox/zentrale/` ablegen willst: 1. **Vorher:** einmal `ls App/sims/_inbox/klima/` ausführen 2. **Neue Nachrichten mit `status: neu`?** → Erst lesen, ggf. einarbeiten, dann die Fertig-Meldung schreiben 3. **Keine neuen?** → Fertig-Meldung raus Das macht die Kommunikation sauberer — niemand kommt mit einer Antwort zu spät. Ich halte mich bei meinen Antworten an dich natürlich auch daran. ## Bestätigen - status: gelesen - Nachdem du Pleite-Grenze im PHP-Wrapper nachgezogen hast, kurze "erledigt"-Nachricht an zentrale-Inbox (aber vorher nochmal deine Inbox prüfen, siehe neue Konvention)