From 28555509a31a60b015c9ca8b505d3c9f131d0007 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Thu, 17 Jun 2021 15:45:20 +0200 Subject: [PATCH] Dutch Will --- backend/bang/characters.py | 3 +++ backend/bang/expansions/__init__.py | 5 +++++ backend/bang/players.py | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/backend/bang/characters.py b/backend/bang/characters.py index 374a242..0962555 100644 --- a/backend/bang/characters.py +++ b/backend/bang/characters.py @@ -1,4 +1,5 @@ from abc import ABC, abstractmethod +from bang.expansions import * from typing import List class Character(ABC): @@ -158,4 +159,6 @@ def all_characters(expansions: List[str]): ] if 'dodge_city' in expansions: base_chars.extend(DodgeCity.get_characters()) + if 'gold_rush' in expansions: + base_chars.extend(GoldRush.get_characters()) return base_chars \ No newline at end of file diff --git a/backend/bang/expansions/__init__.py b/backend/bang/expansions/__init__.py index eab027e..07b515a 100644 --- a/backend/bang/expansions/__init__.py +++ b/backend/bang/expansions/__init__.py @@ -7,3 +7,8 @@ class DodgeCity(): def get_cards(): from bang.expansions.dodge_city import cards return cards.get_starting_deck() + +class GoldRush(): + def get_characters(): + from bang.expansions.gold_rush import characters + return characters.all_characters() diff --git a/backend/bang/players.py b/backend/bang/players.py index ba0e590..4be80f3 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -401,6 +401,12 @@ class Player: self.choose_text = 'choose_card_to_get' self.pending_action = PendingAction.CHOOSE self.notify_self() + elif self.character.check(self.game, grch.DutchWill): + self.is_drawing = True + self.available_cards = [self.game.deck.draw() for i in range(2)] + self.choose_text = 'choose_card_to_get' + self.pending_action = PendingAction.CHOOSE + self.notify_self() elif self.character.check(self.game, chd.PatBrennan) and type(pile) == str and pile != self.name and pile in self.game.players_map and len(self.game.get_player_named(pile).equipment) > 0: self.is_drawing = True self.available_cards = self.game.get_player_named(pile).equipment @@ -747,6 +753,16 @@ class Player: self.pending_action = PendingAction.PLAY self.manette() self.notify_self() + elif self.is_drawing and self.character.check(self.game, grch.DutchWill): + self.hand.append(self.available_cards.pop(card_index)) + if self.game.check_event(ceh.IlTreno) or len([c for c in self.gold_rush_equipment if isinstance(c, grc.Piccone)]) > 0: + self.hand.append(self.available_cards.pop(0)) + else: + self.game.deck.scrap(self.available_cards.pop(0), True) + self.gold_nuggets += 1 + self.is_drawing = False + self.pending_action = PendingAction.PLAY + self.notify_self() elif self.is_drawing and self.character.check(self.game, chd.PatBrennan): self.is_drawing = False card = self.available_cards.pop(card_index)