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:
+13
-4
@@ -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
|
||||
@@ -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"),
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user