fix rissa

This commit is contained in:
Giulio 2022-03-30 12:29:46 +02:00
parent f985d84483
commit 4bed4484b5
3 changed files with 16 additions and 9 deletions

View File

@ -75,12 +75,18 @@ class Rissa(CatBalou):
def play_card(self, player, against, _with): def play_card(self, player, against, _with):
if _with != None: 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([p.name for p in player.game.players if p != player and (len(p.hand)+len(p.equipment)) > 0]) == 0:
if len(players_with_cards) == 0:
return False 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.game.deck.scrap(_with)
player.event_type = 'rissa' 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}') player.sio.emit('chat_message', room=player.game.name, data=f'_play_card|{player.name}|{self.name}')
return True return True
return False return False

View File

@ -396,7 +396,9 @@ class Game:
{'name':nextPlayer.name,'cards': self.available_cards}, default=lambda o: o.__dict__)) {'name':nextPlayer.name,'cards': self.available_cards}, default=lambda o: o.__dict__))
nextPlayer.notify_self() 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]] return self.players[self.players_map[name]]
def responders_did_respond_resume_turn(self, did_lose=False): def responders_did_respond_resume_turn(self, did_lose=False):

View File

@ -61,6 +61,7 @@ class Player:
self.target_p: str = None self.target_p: str = None
self.is_drawing = False self.is_drawing = False
self.special_use_count = 0 self.special_use_count = 0
self.rissa_targets = []
self.committed_suit_manette = None self.committed_suit_manette = None
self.not_chosen_character = None self.not_chosen_character = None
try: try:
@ -657,7 +658,7 @@ class Player:
def choose(self, card_index): def choose(self, card_index):
if self.pending_action != PendingAction.CHOOSE: if self.pending_action != PendingAction.CHOOSE:
return 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) target = self.game.get_player_named(self.target_p)
card = None card = None
if (target.name == self.name): if (target.name == self.name):
@ -672,15 +673,13 @@ class Player:
self.hand.append(card) self.hand.append(card)
else: else:
self.game.deck.scrap(card, True) 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.event_type = ''
self.target_p = '' self.target_p = ''
self.choose_action = '' self.choose_action = ''
self.pending_action = PendingAction.PLAY self.pending_action = PendingAction.PLAY
else: else:
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
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.notify_self() self.notify_self()
elif self.choose_text == 'choose_ricercato': elif self.choose_text == 'choose_ricercato':
player = self.game.get_player_named(self.available_cards[card_index]['name']) player = self.game.get_player_named(self.available_cards[card_index]['name'])