Streak und Siegbonus nur für PvP-Runden; PvE friert die Streak ein

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
team3
2026-07-23 07:01:56 +02:00
parent 0d5c116da3
commit f2eafe824d
2 changed files with 15 additions and 2 deletions

View File

@@ -184,3 +184,11 @@ def test_ghost_source_takes_no_damage(art, cfg):
game.step()
drops = sum(1 for p in game.players if p.hp < hp_before[p.name])
assert drops <= 4 # max. 3 Paar-Verlierer + 1 Ghost-Verlierer
def test_pve_freezes_streak_and_pays_no_win_bonus(art, cfg):
game = Game(art, cfg, seed=4)
# Stage 1: drei PvE-Runden -> Streak bleibt 0
while game.round["stage"] == 1 and not game.over:
game.step()
assert game.player.streak == 0

View File

@@ -141,10 +141,15 @@ class Game:
if self.over:
return
is_pvp = rnd["kind"] == "pvp"
for p in self._alive():
won = results.get(p.name, False)
p.streak = max(p.streak, 0) + 1 if won else min(p.streak, 0) - 1
p.gold += economy.round_income(p.gold, p.streak, won, rnd["label"], self.cfg)
# Nur PvP zählt für Streak und Siegbonus; PvE friert die Streak ein.
if is_pvp:
p.streak = max(p.streak, 0) + 1 if won else min(p.streak, 0) - 1
p.gold += economy.round_income(
p.gold, p.streak, is_pvp and won, rnd["label"], self.cfg
)
p.level, p.xp = economy.apply_xp(
p.level, p.xp, self.cfg["xp"]["passive_per_round"], self.cfg
)