fix: Log füllt volle Fläche + Quest-Abschluss mit Reise
- max_log 15→30, alle Einträge werden gerendert (nicht nur 12) - Quest-Abschluss: Belohnung → Reise → Ankunft → neue Quest - 'Du machst dich auf den Weg...' → 'Ankunft in: X' → 'Neue Quest' - 2 Sekunden Pause nach Quest-Abschluss zum Lesen
This commit is contained in:
+10
-4
@@ -28,7 +28,7 @@ class GameEngine:
|
||||
self.quest_progress = 0
|
||||
self.quest_target = random.randint(3, 8)
|
||||
self.log = []
|
||||
self.max_log = 15
|
||||
self.max_log = 30
|
||||
|
||||
def _add_log(self, msg: str):
|
||||
self.log.insert(0, msg)
|
||||
@@ -99,15 +99,21 @@ class GameEngine:
|
||||
quest_xp = 10 + self.character.level * 5 + random.randint(0, 10)
|
||||
self.character.gold += quest_gold
|
||||
leveled = self.character.gain_xp(quest_xp)
|
||||
self._add_log(f"[bold green]✅ Quest abgeschlossen: {self.current_quest} (+{quest_gold} Gold, +{quest_xp} XP)[/]")
|
||||
self._add_log(f"[bold green]✅ Quest abgeschlossen: {self.current_quest}[/]")
|
||||
self._add_log(f"[dim]Belohnung: +{quest_gold} Gold, +{quest_xp} XP[/]")
|
||||
if leveled:
|
||||
self._add_log(f"[bold yellow]⬆️ Stufe {self.character.level} erreicht![/]")
|
||||
self.character.heal()
|
||||
# Travel to new location before new quest
|
||||
self._add_log(f"[blue]🌍 Du machst dich auf den Weg...[/]")
|
||||
self.current_location = self.cache.get_location()
|
||||
self._add_log(f"[blue]🌍 Ankunft in: {self.current_location}[/]")
|
||||
# New quest
|
||||
self.current_quest = self.cache.get_quest(self.character.level)
|
||||
self.quest_progress = 0
|
||||
self.quest_target = random.randint(3, 8)
|
||||
self._add_log(f"[cyan]📜 Neue Quest: {self.current_quest} ({self.quest_target} Gegner)[/]")
|
||||
self._add_log(f"[cyan]📜 Neue Quest: {self.current_quest}[/]")
|
||||
self._add_log(f"[dim]Ziel: Besiege {self.quest_target} Gegner[/]")
|
||||
|
||||
def step(self) -> dict:
|
||||
"""Ein Schritt des Auto-Progress. Gibt Event-Info zurück."""
|
||||
@@ -159,7 +165,7 @@ class GameEngine:
|
||||
self.quest_progress += 1
|
||||
if self.quest_progress >= self.quest_target:
|
||||
self._complete_quest()
|
||||
events.append(("quest_done", f"[green]✅ Quest erfüllt![/]"))
|
||||
events.append(("quest_done", f"[green]✅ Quest erfüllt![/]", True)) # True = pause flag
|
||||
|
||||
elif result["result"] == "death":
|
||||
self.character.deaths += 1
|
||||
|
||||
+10
-1
@@ -135,7 +135,7 @@ def render_game(engine: GameEngine) -> Panel:
|
||||
|
||||
# === Log Panel ===
|
||||
log_text = Text()
|
||||
for entry in engine.log[-12:]:
|
||||
for entry in engine.log:
|
||||
if isinstance(entry, str):
|
||||
t = Text.from_markup(entry)
|
||||
log_text.append(t)
|
||||
@@ -188,6 +188,12 @@ def run_game(engine: GameEngine, save_path: str):
|
||||
# Game step
|
||||
result = engine.step()
|
||||
|
||||
# Check for quest completion pause
|
||||
quest_pause = False
|
||||
for ev in result.get("events", []):
|
||||
if isinstance(ev, tuple) and len(ev) > 2 and ev[0] == "quest_done" and ev[2]:
|
||||
quest_pause = True
|
||||
|
||||
# Refill cache occasionally
|
||||
if engine.character.steps % 5 == 0:
|
||||
engine.cache.refill_async()
|
||||
@@ -207,6 +213,9 @@ def run_game(engine: GameEngine, save_path: str):
|
||||
|
||||
# Speed — slower for readability, faster at higher levels
|
||||
speed = max(0.3, 1.5 - engine.character.level * 0.02)
|
||||
if quest_pause:
|
||||
time.sleep(2.0) # Pause after quest completion
|
||||
else:
|
||||
time.sleep(speed)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
|
||||
Reference in New Issue
Block a user