diff --git a/backend/bang/cards.py b/backend/bang/cards.py index 95f3a4e..c638b02 100644 --- a/backend/bang/cards.py +++ b/backend/bang/cards.py @@ -39,6 +39,7 @@ class Card(ABC): self.can_be_used_now = True self.usable_next_turn = False self.need_with = False + self.must_be_used = False def __str__(self): char = ['♦️', '♣️', '♥️', '♠️'][int(self.suit)] @@ -48,6 +49,12 @@ class Card(ABC): def num_suit(self): return f"{['♦️', '♣️', '♥️', '♠️'][int(self.suit)]}{self.number}" + def reset_card(self): + if self.usable_next_turn: + self.can_be_used_now = False + if self.must_be_used: + self.must_be_used = False + def play_card(self, player, against=None, _with=None):#self --> carta if self.is_equipment: if self.is_weapon: @@ -70,6 +77,7 @@ class Card(ABC): else: player.sio.emit('chat_message', room=player.game.name, data=f'_play_card|{player.name}|{self.name}') + self.reset_card() return True def use_card(self, player): diff --git a/backend/bang/deck.py b/backend/bang/deck.py index 7c5a84b..57aa884 100644 --- a/backend/bang/deck.py +++ b/backend/bang/deck.py @@ -85,8 +85,7 @@ class Deck: return self.draw() def scrap(self, card: cs.Card, ignore_event = False): - if card.usable_next_turn: - card.can_be_used_now = False + card.reset_card() if self.game.check_event(ce.MinieraAbbandonata) and not ignore_event: self.put_on_top(card) else: diff --git a/backend/bang/game.py b/backend/bang/game.py index 13c14a2..d46e369 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -516,8 +516,10 @@ class Game: elif len(vulture) == 2: for i in range(len(player.hand)): vulture[i%2].hand.append(player.hand.pop()) + vulture[i%2].hand[-1].reset_card() for i in range(len(player.equipment)): vulture[i%2].hand.append(player.equipment.pop()) + vulture[i%2].hand[-1].reset_card() vulture[0].notify_self() vulture[1].notify_self() else: diff --git a/backend/bang/players.py b/backend/bang/players.py index 5530e73..3c0fbcd 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -579,8 +579,7 @@ class Player: card = target.hand.pop(card_index) target.notify_self() if self.choose_action == 'steal': - if card.usable_next_turn: - card.can_be_used_now = False + card.reset_card() self.hand.append(card) else: self.game.deck.scrap(card, True) @@ -683,8 +682,7 @@ class Player: elif self.is_drawing and self.character.check(self.game, chd.PatBrennan): self.is_drawing = False card = self.available_cards.pop(card_index) - if card.usable_next_turn: - card.can_be_used_now = False + card.reset_card() self.hand.append(card) self.available_cards = [] self.game.get_player_named(self.pat_target).notify_self()