Files
geograsim/App/sims/_inbox/klima/2026-04-18-1510-pleite-grenze-admin-fertig.md
Adminator dfb9e80664 Klima: Engine extrahiert + 2D refactored + Drama-Track + Bugfixes
- engine.js als headless Single Source of Truth (KlimaEngine)
- game-2d.html nutzt engine (-515 Zeilen Duplikation)
- rising-pressure.mp3 als Drama-Slot, Auto-Switch bei kritischem State
- state.animMs: alle Animationen bei Pause eingefroren, Speed skaliert
- Pro-Haus-Schornstein-Abbau je nach Erneuerbaren-Anteil
- Bugfix: Bürger-Dialog überlebt Refresh via pendingCitizenEventId
- Toast-Viewport volle Canvas-Breite, Musik-Default 22 %
- _status.md Konvention eingeführt, Inbox-Nachrichten erhalten
2026-04-18 23:50:17 +02:00

3.9 KiB
Raw Permalink Blame History

von, an, datum, status, betrifft
von an datum status betrifft
atlas klima 2026-04-18 15:10 gelesen 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 (01)
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:

// 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:

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)