diff --git a/backend/bang/cards.py b/backend/bang/cards.py index 91faeac..b1553fd 100644 --- a/backend/bang/cards.py +++ b/backend/bang/cards.py @@ -58,12 +58,7 @@ class Card(ABC): if not has_weapon: player.equipment.append(self) elif self.name in [c.name for c in player.equipment if not isinstance(c, Dinamite)]: - for i in range(len(player.equipment)): - print('tipo',type(self)) - if type(player.equipment[i]) == type(self): - player.game.deck.scrap(player.equipment[i]) - player.equipment[i] = self - break + return False else: player.equipment.append(self) if against: @@ -77,6 +72,9 @@ class Card(ABC): def use_card(self, player): pass + def is_duplicate_card(self, player): + return self.name in [c.name for c in player.equipment] + class Barile(Card): def __init__(self, suit, number): diff --git a/backend/bang/expansions/dodge_city/cards.py b/backend/bang/expansions/dodge_city/cards.py index 981a48d..051ada6 100644 --- a/backend/bang/expansions/dodge_city/cards.py +++ b/backend/bang/expansions/dodge_city/cards.py @@ -152,8 +152,11 @@ class Bibbia(Schivata): pass return False else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False class Cappello(Mancato): def __init__(self, suit, number): @@ -168,8 +171,11 @@ class Cappello(Mancato): pass return False else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False class PlaccaDiFerro(Cappello): def __init__(self, suit, number): @@ -195,8 +201,11 @@ class Pugnale(Pugno): if self.can_be_used_now: return super().play_card(player, against=against) else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False class Derringer(Pugnale): def __init__(self, suit, number): @@ -212,8 +221,11 @@ class Derringer(Pugnale): player.hand.append(player.game.deck.draw()) return super().play_card(player, against=against) else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False def use_card(self, player): player.hand.append(player.game.deck.draw()) @@ -235,8 +247,11 @@ class Borraccia(Card): player.notify_self() return True else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False class PonyExpress(WellsFargo): def __init__(self, suit, number): @@ -250,8 +265,11 @@ class PonyExpress(WellsFargo): if self.can_be_used_now: return super().play_card(player, against) else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False class Howitzer(Gatling): def __init__(self, suit, number): @@ -265,8 +283,11 @@ class Howitzer(Gatling): if self.can_be_used_now: return super().play_card(player, against) else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False class CanCan(CatBalou): def __init__(self, suit, number): @@ -280,8 +301,11 @@ class CanCan(CatBalou): if self.can_be_used_now: return super().play_card(player, against) else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False class Conestoga(Panico): def __init__(self, suit, number): @@ -297,8 +321,11 @@ class Conestoga(Panico): if self.can_be_used_now: return super().play_card(player, against) else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False class Pepperbox(Bang): def __init__(self, suit, number): @@ -316,8 +343,11 @@ class Pepperbox(Bang): return True return False else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False class FucileDaCaccia(Card): def __init__(self, suit, number): @@ -336,8 +366,11 @@ class FucileDaCaccia(Card): return True return False else: - player.equipment.append(self) - return True + if not self.is_duplicate_card(player): + player.equipment.append(self) + return True + else: + return False def get_starting_deck() -> List[Card]: return [ diff --git a/backend/bang/players.py b/backend/bang/players.py index 7edf092..7a787f6 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -503,6 +503,10 @@ class Player: self.game.deck.scrap(card) else: self.equipment.insert(hand_index-len(self.hand), card) + elif card.is_equipment or (card.usable_next_turn and not card.can_be_used_now): + if not did_play_card: + self.hand.insert(hand_index, card) + print("did play card:", did_play_card) self.notify_self() def choose(self, card_index):