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:
@@ -184,3 +184,11 @@ def test_ghost_source_takes_no_damage(art, cfg):
|
|||||||
game.step()
|
game.step()
|
||||||
drops = sum(1 for p in game.players if p.hp < hp_before[p.name])
|
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
|
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
|
||||||
|
|||||||
@@ -141,10 +141,15 @@ class Game:
|
|||||||
if self.over:
|
if self.over:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
is_pvp = rnd["kind"] == "pvp"
|
||||||
for p in self._alive():
|
for p in self._alive():
|
||||||
won = results.get(p.name, False)
|
won = results.get(p.name, False)
|
||||||
|
# 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.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)
|
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 = economy.apply_xp(
|
||||||
p.level, p.xp, self.cfg["xp"]["passive_per_round"], self.cfg
|
p.level, p.xp, self.cfg["xp"]["passive_per_round"], self.cfg
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user