From 17f5b606cc94fe411dd7cb7c87228a65e1e4b966 Mon Sep 17 00:00:00 2001 From: legonzaur Date: Thu, 16 May 2024 14:46:46 +0200 Subject: [PATCH] [fix] : add additional checks on stun champion This is very ugly Closes legonzaur/heron-realms-front#46 --- src/model/card_behaviour.py | 2 +- src/model/turn.py | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/model/card_behaviour.py b/src/model/card_behaviour.py index dd2000f..910bdc2 100644 --- a/src/model/card_behaviour.py +++ b/src/model/card_behaviour.py @@ -63,7 +63,7 @@ async def effect_prepare(effect: Effect, turn: "Turn", target: str): async def effect_stun(effect: Effect, turn: "Turn", target: str): - return await turn.player.stun(target) + return await turn.stun_champion(target) async def effect_sacrifice(effect: Effect, turn: "Turn", target: str): diff --git a/src/model/turn.py b/src/model/turn.py index f981f38..7fc33dc 100644 --- a/src/model/turn.py +++ b/src/model/turn.py @@ -307,6 +307,30 @@ class Turn(Serializable): await self.player.game.notify_controller(MessageType.UPDATE, self.serialize()) await self.player.game.notify_controller(MessageType.UPDATE, team.serialize()) + async def stun_champion(self, target: str): + for p in self.player.game.players: + if self.player.team == p.team: + continue + for c in p.board: + if str(c.uuid) != target: + continue + if c.card_type != CardType.CHAMPION: + continue + if not c.guard and self.check_for_guard(p.team): + print("You cannot stun this champion if a guard is present") + return + + await self.player.stun(str(c.uuid)) + await self.player.game.notify_controller( + MessageType.UPDATE, self.serialize() + ) + await self.player.game.notify_controller( + MessageType.UPDATE, p.turn.serialize() + ) + return + + print("card not found") + async def damage_champion(self, target: str): if self.damage_reserve <= 0: print("No damage left to attack")