From 57b9520eeddb0304fd299af44ea119901359fa2b Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Wed, 23 Dec 2020 16:37:18 +0100 Subject: [PATCH] i dalton --- .../bang/expansions/high_noon/card_events.py | 11 ++++++++--- backend/bang/game.py | 12 ++++++++++++ backend/bang/players.py | 17 +++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/backend/bang/expansions/high_noon/card_events.py b/backend/bang/expansions/high_noon/card_events.py index 42dcf2c..c181bc6 100644 --- a/backend/bang/expansions/high_noon/card_events.py +++ b/backend/bang/expansions/high_noon/card_events.py @@ -43,7 +43,6 @@ class IlDottore(CardEvent): self.desc = "Il giocatore con meno vite recupera 1 vita" self.desc_eng = "" - class Sermone(CardEvent): def __init__(self): super().__init__("Sermone", "✝️") @@ -58,10 +57,16 @@ class Sparatoria(CardEvent): class CorsaAllOro(CardEvent): def __init__(self): - super().__init__("Corsa All'Oro", "‼️") + super().__init__("Corsa All'Oro", "🌟") self.desc = "Si gioca in senso antiorario!" self.desc_eng = "" +class IDalton(CardEvent): + def __init__(self): + super().__init__("I Dalton", "🙇‍♂️") + self.desc = "Chi ha carte blu in gioco ne scarta 1 a sua scelta" + self.desc_eng = "" + class MezzogiornoDiFuoco(CardEvent): def __init__(self): super().__init__("Mezzogiorno di Fuoco", "🔥") @@ -74,7 +79,7 @@ def get_all_events(): Maledizione(), # CittaFantasma(), CorsaAllOro(), - # IDalton(), + IDalton(), IlDottore(), IlReverendo(), IlTreno(), diff --git a/backend/bang/game.py b/backend/bang/game.py index 0ce42b1..1576eae 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -32,6 +32,7 @@ class Game: self.disconnect_bot = True self.player_bangs = 0 self.is_russian_roulette_on = False + self.dalton_on = False self.bot_speed = 1.5 def notify_room(self, sid=None): @@ -289,6 +290,17 @@ class Game: p.lives += 1 self.sio.emit('chat_message', room=self.name, data=f'_doctor_heal|{p.name}') p.notify_self() + elif self.check_event(ceh.IDalton): + self.waiting_for = 0 + self.readyCount = 0 + self.dalton_on = True + for p in self.players: + if p.get_dalton(): + self.waiting_for += 1 + p.notify_self() + if self.waiting_for != 0: + return + self.dalton_on = False if self.check_event(ce.PerUnPugnoDiCarte) and len(self.players[self.turn].hand) > 0: self.player_bangs = len(self.players[self.turn].hand) diff --git a/backend/bang/players.py b/backend/bang/players.py index 3642c1a..f7b0f73 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -623,6 +623,13 @@ class Player: else: self.discarded_cards.append(self.available_cards.pop(card_index)) self.notify_self() + elif self.game.dalton_on and self.game.check_event(ceh.IDalton): + card = next(c for c in self.equipment if c == self.available_cards[card_index]) + self.equipment.remove(card) + self.game.deck.scrap(card, True) + self.pending_action = PendingAction.WAIT + self.notify_self() + self.game.responders_did_respond_resume_turn() elif self.is_drawing and self.game.check_event(ce.Peyote): self.is_drawing = False card = self.game.deck.draw() @@ -762,6 +769,16 @@ class Player: self.on_failed_response_cb = self.take_no_damage_response return True + def get_dalton(self): + equipments = [c for c in self.equipment if not c.usable_next_turn] + if len(equipments) == 0: + return False + else: + self.sio.emit('chat_message', room=self.game.name, data=f"_dalton|{self.name}") + self.pending_action = PendingAction.CHOOSE + self.available_cards = equipments + return True + def get_indians(self, attacker): self.attacker = attacker if self.character.check(self.game, chd.ApacheKid): return False