From 5337910b34d9c04ffb6ea5797e9c1121cf809fb1 Mon Sep 17 00:00:00 2001 From: arch_agent Date: Sat, 25 Jul 2026 20:23:51 +0200 Subject: [PATCH] feat: Eigenes Loot-Log Panel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Separates loot_log für Loot, Ausrüstung, Verkäufe - Neues Panel 'Loot-Log' zwischen Ausrüstung und Quest - max 30 Einträge, in Save/Load integriert --- src/engine.py | 17 +++++++++++++---- src/main.py | 9 +++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/engine.py b/src/engine.py index 6ffd047..a21e1f6 100644 --- a/src/engine.py +++ b/src/engine.py @@ -29,12 +29,19 @@ class GameEngine: self.quest_target = random.randint(3, 8) self.log = [] self.max_log = 30 + self.loot_log = [] + self.max_loot_log = 30 def _add_log(self, msg: str): self.log.insert(0, msg) if len(self.log) > self.max_log: self.log = self.log[:self.max_log] + def _add_loot_log(self, msg: str): + self.loot_log.insert(0, msg) + if len(self.loot_log) > self.max_loot_log: + self.loot_log = self.loot_log[:self.max_loot_log] + def _spawn_monster(self) -> Monster: name = self.cache.get_monster(self.character.level, self.current_location) level = max(1, self.character.level + random.randint(-1, 1)) @@ -153,7 +160,7 @@ class GameEngine: # Loot drop if random.randint(1, 100) <= 70: # 70% drop chance item = self._generate_loot(monster) - self._add_log(f"[magenta]📦 Loot: {item}[/]") + self._add_loot_log(f"[magenta]📦 {item}[/]") events.append(("loot", f"[magenta]📦 {item}[/]", item)) self._auto_equip(item) else: @@ -191,7 +198,7 @@ class GameEngine: if current: self.character.inventory.append(current) self.character.equipped[slot] = item - self._add_log(f"[cyan]🎽 Ausgerüstet: {item}[/]") + self._add_loot_log(f"[cyan]🎽 Ausgerüstet: {item}[/]") else: self.character.inventory.append(item) else: @@ -202,7 +209,7 @@ class GameEngine: self.character.gold += item.value if item in self.character.inventory: self.character.inventory.remove(item) - self._add_log(f"[dim]💰 Verkauft: {item.name} (+{item.value} Gold)[/]") + self._add_loot_log(f"[dim]💰 Verkauft: {item.name} (+{item.value}G)[/]") def _sell_junk(self): """Verkauft alle Schrott-Items.""" @@ -215,7 +222,7 @@ class GameEngine: total_gold += item.value sold += 1 if sold > 0: - self._add_log(f"[dim]💰 {sold} Schrott verkauft (+{total_gold} Gold)[/]") + self._add_loot_log(f"[dim]💰 {sold} Schrott verkauft (+{total_gold}G)[/]") def get_state(self) -> dict: return { @@ -225,6 +232,7 @@ class GameEngine: "quest_progress": self.quest_progress, "quest_target": self.quest_target, "log": self.log, + "loot_log": self.loot_log, } def save(self, path: str): @@ -244,4 +252,5 @@ class GameEngine: engine.quest_progress = d.get("quest_progress", 0) engine.quest_target = d.get("quest_target", 5) engine.log = d.get("log", []) + engine.loot_log = d.get("loot_log", []) return engine \ No newline at end of file diff --git a/src/main.py b/src/main.py index 8a39012..7086dbd 100644 --- a/src/main.py +++ b/src/main.py @@ -141,6 +141,14 @@ def render_game(engine: GameEngine) -> Panel: log_text.append(t) log_text.append("\n") + # === Loot Log Panel === + loot_text = Text() + for entry in engine.loot_log: + if isinstance(entry, str): + t = Text.from_markup(entry) + loot_text.append(t) + loot_text.append("\n") + # === Location === loc_text = f"🌍 {engine.current_location}" @@ -164,6 +172,7 @@ def render_game(engine: GameEngine) -> Panel: layout["right"].split_column( Layout(Panel(equip_table), name="equip"), + Layout(Panel(loot_text, title="[bold]Loot-Log[/]"), name="loot"), Layout(Panel(quest_text, title="[bold]Aktuelle Quest[/]"), name="quest"), )