From 32fd9a0cbb81dec0761007dfcc32d86a67b599e6 Mon Sep 17 00:00:00 2001 From: David Kertzscher Date: Wed, 15 Jul 2026 15:10:07 +0000 Subject: [PATCH] Finale: Polizei-Kontrolle vor Tresor; Fuehrerschein erst per Drag&Drop vorzeigen, dann misstrauische Ansage, dann Theoriepruefung --- app.py | 74 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 60 insertions(+), 14 deletions(-) diff --git a/app.py b/app.py index 8fb620b..54fce8d 100644 --- a/app.py +++ b/app.py @@ -933,18 +933,61 @@ def _blaulicht_intro(): 🚔 POLIZEI · VERKEHRSKONTROLLE

Anhalten – Fahrzeugkontrolle!

Kurz vor dem Kragle-Tresor stoppt dich eine Streife. - Die Beamten mustern deinen FĂŒhrerschein misstrauisch: + Ein Beamter tritt ans Fenster: „Guten Tag. Fahrzeugkontrolle – + Ihren FĂŒhrerschein bitte!“

+
+ đŸȘȘ + Zieh deinen FĂŒhrerschein aus dem Inventar (links) hierher, + um ihn den Beamten vorzuzeigen. +
+ """ + return adventure_seite(inhalt, akzent="#1e50ff") + + +def _fs_ansage(): + """Nach dem Vorzeigen des FĂŒhrerscheins: misstrauische Ansage der Beamten.""" + inhalt = """ + +
+
+
🚹
+ 🚔 POLIZEI · FÜHRERSCHEIN-PRÜFUNG +

„Der ist doch nie echt!“

+

Die Beamten mustern deinen FĂŒhrerschein misstrauisch: „Diesen Lappen haben Sie doch nie im Leben ehrlich bestanden! Wenn er echt ist, beweisen Sie es: Lösen Sie diese drei Aufgaben aus der TheorieprĂŒfung – dann dĂŒrfen Sie weiter.“

🚩 Achtung: Bei manchen Fragen ist mehr als eine Antwort richtig. Kreuze alle zutreffenden an – ein falsches Kreuz und du fĂ€llst durch.

-
- đŸȘȘ - Zieh deinen FĂŒhrerschein aus dem Inventar (links) hierher, - um ihn den Beamten vorzuzeigen. -
+ TheorieprĂŒfung starten ▶
""" return adventure_seite(inhalt, akzent="#1e50ff") @@ -1038,13 +1081,15 @@ def _fs_frage_screen(idx, feedback=""): def fuehrerschein_kontrolle(): """Steuert die dreiteilige Polizei-FĂŒhrerschein-Kontrolle vor dem Finale.""" - # Noch nicht gestartet → Blaulicht-Intro (oder Start per ?fs=1) + # Ablauf: Blaulicht + FĂŒhrerschein droppen → misstrauische Ansage → 3 Fragen if FS_IDX_KEY not in session: if request.args.get("fs") == "1": session[FS_IDX_KEY] = 0 session.modified = True return redirect("/app/raum/40") - return _blaulicht_intro() + if request.args.get("fs") == "gezeigt": + return _fs_ansage() # FĂŒhrerschein vorgezeigt → Ansage + return _blaulicht_intro() # Kontrolle: FĂŒhrerschein hierher ziehen idx = session.get(FS_IDX_KEY, 0) feedback = "" @@ -1107,9 +1152,14 @@ def raum(id): # ═══ RĂ€ume mit Fragen: thema (PrĂŒf-Weg) · ziel (Finale) ═══ if typ in ("thema", "ziel"): - # ── Finale (Raum 40): Tresor-Schloss → Polizei-Kontrolle → Frage ── + # ── Finale (Raum 40): erst Polizei-Kontrolle, dann Tresor-Schloss ── if typ == "ziel" and id == 40: - # ZugangsschlĂŒssel einsetzen (per Drag&Drop ausgelöst) + # 1) Polizei-FĂŒhrerschein-Kontrolle zuerst + if not session.get(FS_DONE_KEY): + _stage_start(40) # Polizei-Kontrolle Zeitmessung + db.close() + return fuehrerschein_kontrolle() + # 2) Danach: ZugangsschlĂŒssel in den Kragle-Tresor (per Drag&Drop) if request.args.get("unlock") == "1" and not session.get("vault_unlocked"): used = next((k for k in ACCESS_KEYS if _inv_has(k)), None) if used: @@ -1121,10 +1171,6 @@ def raum(id): if not session.get("vault_unlocked"): db.close() return _tresor_schloss() - if not session.get(FS_DONE_KEY): - _stage_start(40) # Polizei-Kontrolle Zeitmessung - db.close() - return fuehrerschein_kontrolle() # ── PrĂŒf-Weg-RĂ€ume: Zeitmessung dieses Abschnitts startet ── if typ == "thema": _stage_start(id)