diff --git a/backend/bang/expansions/dodge_city/cards.py b/backend/bang/expansions/dodge_city/cards.py index ecc0b68..56a1e40 100644 --- a/backend/bang/expansions/dodge_city/cards.py +++ b/backend/bang/expansions/dodge_city/cards.py @@ -75,12 +75,18 @@ class Rissa(CatBalou): def play_card(self, player, against, _with): if _with != None: - players_with_cards = [p.name for p in player.game.players if p != player and (len(p.hand)+len(p.equipment)) > 0] - if len(players_with_cards) == 0: + if len([p.name for p in player.game.players if p != player and (len(p.hand)+len(p.equipment)) > 0]) == 0: return False + #se sono qui vuol dire che ci sono giocatori con carte in mano oltre a me + self.rissa_targets = [] + target = player.game.get_player(player.name, next=True) + while target != player: + if len(target.hand) + len(target.equipment) > 0: + self.rissa_target.append(target) + target = player.game.get_player(target.name, next=True) player.game.deck.scrap(_with) player.event_type = 'rissa' - super().play_card(player, against=players_with_cards[0]) + super().play_card(player, against=self.rissa_targets.pop(0)) player.sio.emit('chat_message', room=player.game.name, data=f'_play_card|{player.name}|{self.name}') return True return False diff --git a/backend/bang/game.py b/backend/bang/game.py index e93e8a5..152ff6d 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -396,7 +396,9 @@ class Game: {'name':nextPlayer.name,'cards': self.available_cards}, default=lambda o: o.__dict__)) nextPlayer.notify_self() - def get_player_named(self, name:str): + def get_player_named(self, name:str, next=False): + if next: + return self.players[(self.players_map[name]+1) % len(self.players)] return self.players[self.players_map[name]] def responders_did_respond_resume_turn(self, did_lose=False): diff --git a/backend/bang/players.py b/backend/bang/players.py index d5e413f..7887cd1 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -61,6 +61,7 @@ class Player: self.target_p: str = None self.is_drawing = False self.special_use_count = 0 + self.rissa_targets = [] self.committed_suit_manette = None self.not_chosen_character = None try: @@ -657,7 +658,7 @@ class Player: def choose(self, card_index): if self.pending_action != PendingAction.CHOOSE: return - if self.target_p and self.target_p != '': # panico, cat balou + if self.target_p and self.target_p != '': # panico, cat balou, rissa target = self.game.get_player_named(self.target_p) card = None if (target.name == self.name): @@ -672,15 +673,13 @@ class Player: self.hand.append(card) else: self.game.deck.scrap(card, True) - if self.event_type != 'rissa' or (self.event_type == 'rissa' and (len([p.name for p in self.game.get_alive_players() if p != self and (len(p.hand)+len(p.equipment)) > 0]) == 0 or self.target_p == [p.name for p in self.game.get_alive_players() if p != self and (len(p.hand)+len(p.equipment)) > 0][-1])): + if self.event_type != 'rissa' or len(self.rissa_targets) == 0: self.event_type = '' self.target_p = '' self.choose_action = '' self.pending_action = PendingAction.PLAY else: - self.target_p = self.game.players[(self.game.players_map[self.target_p]+1)%len(self.game.players)].name - while self.target_p == self.name or len(self.game.players[self.game.players_map[self.target_p]].hand) + len(self.game.players[self.game.players_map[self.target_p]].equipment) == 0: - self.target_p = self.game.players[(self.game.players_map[self.target_p]+1)%len(self.game.players)].name + self.target_p = self.rissa_targets.pop(0).name self.notify_self() elif self.choose_text == 'choose_ricercato': player = self.game.get_player_named(self.available_cards[card_index]['name'])