From d1bd07c717f7b75355e6aef8ed290e3e44cdd592 Mon Sep 17 00:00:00 2001 From: Annalisa Xamin <82664061+annalisaxamin@users.noreply.github.com> Date: Sat, 4 Feb 2023 20:19:44 +0000 Subject: [PATCH] add Flint Westwood --- .../expansions/wild_west_show/characters.py | 25 +++++++++++++------ backend/bang/players.py | 23 ++++++++++++++++- frontend/src/components/Player.vue | 1 + 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/backend/bang/expansions/wild_west_show/characters.py b/backend/bang/expansions/wild_west_show/characters.py index 2ec8e77..73c94a9 100644 --- a/backend/bang/expansions/wild_west_show/characters.py +++ b/backend/bang/expansions/wild_west_show/characters.py @@ -11,8 +11,19 @@ class FlintWestwood(Character): def __init__(self): super().__init__("Flint Westwood", max_lives=4) # Nel suo turno può scambiare una carta dalla mano con 2 carte a caso dalla mano di un altro giocatore. + # NOTE: La carta dalla tua mano è a scelta, non a caso. Se il giocatore bersaglio ha una sola carta, ne ricevi solo una. self.icon = '🔫' + def special(self, player, data): + if not player.is_my_turn or not any((len(p.hand) > 0 for p in player.game.get_alive_players())) or not super().special(player, data): + return False + from bang.players import PendingAction + player.available_cards = player.hand.copy() + player.choose_text = 'choose_flint_special' + player.pending_action = PendingAction.CHOOSE + player.special_use_count += 1 + player.notify_self() + class GaryLooter(Character): def __init__(self): super().__init__("Gary Looter", max_lives=5) @@ -51,14 +62,14 @@ class YoulGrinner(Character): def all_characters() -> List[Character]: cards = [ - BigSpencer(), + # BigSpencer(), FlintWestwood(), - GaryLooter(), - GreygoryDeckard(), - JohnPain(), - LeeVanKliff(), - TerenKill(), - YoulGrinner(), + # GaryLooter(), + # GreygoryDeckard(), + # JohnPain(), + # LeeVanKliff(), + # TerenKill(), + # YoulGrinner(), ] for c in cards: c.expansion_icon = '🎪' diff --git a/backend/bang/players.py b/backend/bang/players.py index 8bcd78f..034be39 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -1,7 +1,7 @@ from __future__ import annotations from enum import IntEnum import json -from random import random, randrange, sample, uniform +from random import random, randrange, sample, uniform, randint import socketio import bang.deck as deck import bang.roles as r @@ -918,6 +918,27 @@ class Player: self.pending_action = PendingAction.WAIT self.game.responders_did_respond_resume_turn() self.notify_self() + elif 'choose_flint_special' == self.choose_text: + if card_index < len(self.hand): + self.available_cards = [{ + 'name': p.name, + 'icon': p.role.icon if(self.game.initial_players == 3) else '⭐️' if p['is_sheriff'] else '🤠', + 'avatar': p.avatar, + 'is_character': True, + 'is_player': True + } for p in self.game.get_alive_players() if p.name != self.name and len(p.hand) > 0] + self.choose_text = f'choose_flint_special;{card_index}' + self.notify_self() + elif 'choose_flint_special' in self.choose_text: + if card_index < len(self.available_cards): + my_card = self.hand.pop(int(self.choose_text.split(';')[1])) + other_player = self.game.get_player_named(self.available_cards[card_index]['name']) + for i in range(min(2, len(other_player.hand))): + self.hand.append(other_player.hand.pop(randint(0, len(other_player.hand)-1))) + other_player.hand.append(my_card) + other_player.notify_self() + self.pending_action = PendingAction.PLAY + self.notify_self() elif self.game.check_event(ceh.NuovaIdentita) and self.choose_text == 'choose_nuova_identita': if card_index == 1: # the other character self.character = self.not_chosen_character diff --git a/frontend/src/components/Player.vue b/frontend/src/components/Player.vue index 685616e..c7ea4d7 100644 --- a/frontend/src/components/Player.vue +++ b/frontend/src/components/Player.vue @@ -36,6 +36,7 @@ +
{{$t('hand')}}