feat: Eigenes Loot-Log Panel

- 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
This commit is contained in:
arch_agent
2026-07-25 20:23:51 +02:00
parent bba2458eea
commit 5337910b34
2 changed files with 22 additions and 4 deletions
+13 -4
View File
@@ -29,12 +29,19 @@ class GameEngine:
self.quest_target = random.randint(3, 8) self.quest_target = random.randint(3, 8)
self.log = [] self.log = []
self.max_log = 30 self.max_log = 30
self.loot_log = []
self.max_loot_log = 30
def _add_log(self, msg: str): def _add_log(self, msg: str):
self.log.insert(0, msg) self.log.insert(0, msg)
if len(self.log) > self.max_log: if len(self.log) > self.max_log:
self.log = 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: def _spawn_monster(self) -> Monster:
name = self.cache.get_monster(self.character.level, self.current_location) name = self.cache.get_monster(self.character.level, self.current_location)
level = max(1, self.character.level + random.randint(-1, 1)) level = max(1, self.character.level + random.randint(-1, 1))
@@ -153,7 +160,7 @@ class GameEngine:
# Loot drop # Loot drop
if random.randint(1, 100) <= 70: # 70% drop chance if random.randint(1, 100) <= 70: # 70% drop chance
item = self._generate_loot(monster) 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)) events.append(("loot", f"[magenta]📦 {item}[/]", item))
self._auto_equip(item) self._auto_equip(item)
else: else:
@@ -191,7 +198,7 @@ class GameEngine:
if current: if current:
self.character.inventory.append(current) self.character.inventory.append(current)
self.character.equipped[slot] = item self.character.equipped[slot] = item
self._add_log(f"[cyan]🎽 Ausgerüstet: {item}[/]") self._add_loot_log(f"[cyan]🎽 Ausgerüstet: {item}[/]")
else: else:
self.character.inventory.append(item) self.character.inventory.append(item)
else: else:
@@ -202,7 +209,7 @@ class GameEngine:
self.character.gold += item.value self.character.gold += item.value
if item in self.character.inventory: if item in self.character.inventory:
self.character.inventory.remove(item) 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): def _sell_junk(self):
"""Verkauft alle Schrott-Items.""" """Verkauft alle Schrott-Items."""
@@ -215,7 +222,7 @@ class GameEngine:
total_gold += item.value total_gold += item.value
sold += 1 sold += 1
if sold > 0: 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: def get_state(self) -> dict:
return { return {
@@ -225,6 +232,7 @@ class GameEngine:
"quest_progress": self.quest_progress, "quest_progress": self.quest_progress,
"quest_target": self.quest_target, "quest_target": self.quest_target,
"log": self.log, "log": self.log,
"loot_log": self.loot_log,
} }
def save(self, path: str): def save(self, path: str):
@@ -244,4 +252,5 @@ class GameEngine:
engine.quest_progress = d.get("quest_progress", 0) engine.quest_progress = d.get("quest_progress", 0)
engine.quest_target = d.get("quest_target", 5) engine.quest_target = d.get("quest_target", 5)
engine.log = d.get("log", []) engine.log = d.get("log", [])
engine.loot_log = d.get("loot_log", [])
return engine return engine
+9
View File
@@ -141,6 +141,14 @@ def render_game(engine: GameEngine) -> Panel:
log_text.append(t) log_text.append(t)
log_text.append("\n") 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 === # === Location ===
loc_text = f"🌍 {engine.current_location}" loc_text = f"🌍 {engine.current_location}"
@@ -164,6 +172,7 @@ def render_game(engine: GameEngine) -> Panel:
layout["right"].split_column( layout["right"].split_column(
Layout(Panel(equip_table), name="equip"), 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"), Layout(Panel(quest_text, title="[bold]Aktuelle Quest[/]"), name="quest"),
) )