From de303b7eb5602432613276d542348f8116e97997 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Wed, 16 Dec 2020 19:34:03 +0100 Subject: [PATCH] vera custer --- .../bang/expansions/dodge_city/characters.py | 9 ++++++ backend/bang/players.py | 32 ++++++++++++++----- backend/requirements.txt | 6 ++-- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/backend/bang/expansions/dodge_city/characters.py b/backend/bang/expansions/dodge_city/characters.py index 9a23a03..962c2e1 100644 --- a/backend/bang/expansions/dodge_city/characters.py +++ b/backend/bang/expansions/dodge_city/characters.py @@ -71,6 +71,14 @@ class BelleStar(Character): self.desc_eng = "During her turn the green cards of the other players do not work." self.icon = '❎' +class VeraCuster(Character): + def __init__(self): + super().__init__("Vera Custer", max_lives=3) + self.desc = "Prima di pescare le sue carte può scegliere l'abilità speciale di un altro giocatore fino al prossimo turno." + self.desc_eng = "Before drawing, she may choose the special ability on another alive player. This ability is used until next turn." + self.icon = '🎭' + + def all_characters() -> List[Character]: return [ PixiePete(), @@ -83,6 +91,7 @@ def all_characters() -> List[Character]: ApacheKid(), SeanMallory(), BelleStar(), + VeraCuster(), ] #Apache Kid: il suo effetto non conta nei duelli diff --git a/backend/bang/players.py b/backend/bang/players.py index d61dd3e..46a4afc 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -30,6 +30,7 @@ class Player: self.equipment: cs.Card = [] self.role: r.Role = None self.character: chars.Character = None + self.real_character: chars.Character = None self.lives = 0 self.max_lives = 0 self.game: g = None @@ -55,6 +56,7 @@ class Player: self.equipment: cs.Card = [] self.role: r.Role = None self.character: chars.Character = None + self.real_character: chars.Character = None self.lives = 0 self.max_lives = 0 self.is_my_turn = False @@ -92,13 +94,24 @@ class Player: def set_character(self, character: str): print(self.available_characters, character) - self.character = next( - x for x in self.available_characters if x.name == character) - self.available_characters = [] - print(f'I {self.name} chose character {self.character.name}') - self.sio.emit('chat_message', room=self.game.name, - data=f'_did_choose_character|{self.name}') - self.game.notify_character_selection() + if self.character == None: + self.character = next( + x for x in self.available_characters if x.name == character) + self.real_character = self.character + self.available_characters = [] + print(f'I {self.name} chose character {self.character.name}') + self.sio.emit('chat_message', room=self.game.name, + data=f'_did_choose_character|{self.name}') + self.game.notify_character_selection() + elif self.real_character and isinstance(self.real_character, chd.VeraCuster): + self.character = next( + x for x in self.available_characters if x.name == character) + self.available_characters = [] + self.sio.emit('chat_message', room=self.game.name, + data=f'_did_choose_character|{self.name}') + self.pending_action = PendingAction.DRAW + self.notify_self() + def prepare(self): self.max_lives = self.character.max_lives + self.role.health_mod @@ -281,7 +294,10 @@ class Player: if any([isinstance(c, cs.Dinamite) or isinstance(c, cs.Prigione) for c in self.equipment]): self.pending_action = PendingAction.PICK else: - self.pending_action = PendingAction.DRAW + if isinstance(self.real_character, chd.VeraCuster): + self.set_available_character([p.character for p in self.game.players if p != self]) + else: + self.pending_action = PendingAction.DRAW self.notify_self() def draw(self, pile): diff --git a/backend/requirements.txt b/backend/requirements.txt index 401095e..eb1853a 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,7 +1,7 @@ certifi==2020.11.8 dnspython==1.16.0 -eventlet==0.29.1 +eventlet==0.30.0 greenlet==0.4.17 -python-engineio==3.13.2 -python-socketio==4.6.0 +python-engineio==4.0.0 +python-socketio==5.0.3 six==1.15.0