add Flint Westwood

This commit is contained in:
Annalisa Xamin 2023-02-04 20:19:44 +00:00 committed by Alberto Xamin
parent 035fbb161d
commit d1bd07c717
3 changed files with 41 additions and 8 deletions

View File

@ -11,8 +11,19 @@ class FlintWestwood(Character):
def __init__(self): def __init__(self):
super().__init__("Flint Westwood", max_lives=4) 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. # 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 = '🔫' 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): class GaryLooter(Character):
def __init__(self): def __init__(self):
super().__init__("Gary Looter", max_lives=5) super().__init__("Gary Looter", max_lives=5)
@ -51,14 +62,14 @@ class YoulGrinner(Character):
def all_characters() -> List[Character]: def all_characters() -> List[Character]:
cards = [ cards = [
BigSpencer(), # BigSpencer(),
FlintWestwood(), FlintWestwood(),
GaryLooter(), # GaryLooter(),
GreygoryDeckard(), # GreygoryDeckard(),
JohnPain(), # JohnPain(),
LeeVanKliff(), # LeeVanKliff(),
TerenKill(), # TerenKill(),
YoulGrinner(), # YoulGrinner(),
] ]
for c in cards: for c in cards:
c.expansion_icon = '🎪' c.expansion_icon = '🎪'

View File

@ -1,7 +1,7 @@
from __future__ import annotations from __future__ import annotations
from enum import IntEnum from enum import IntEnum
import json import json
from random import random, randrange, sample, uniform from random import random, randrange, sample, uniform, randint
import socketio import socketio
import bang.deck as deck import bang.deck as deck
import bang.roles as r import bang.roles as r
@ -918,6 +918,27 @@ class Player:
self.pending_action = PendingAction.WAIT self.pending_action = PendingAction.WAIT
self.game.responders_did_respond_resume_turn() self.game.responders_did_respond_resume_turn()
self.notify_self() 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': elif self.game.check_event(ceh.NuovaIdentita) and self.choose_text == 'choose_nuova_identita':
if card_index == 1: # the other character if card_index == 1: # the other character
self.character = self.not_chosen_character self.character = self.not_chosen_character

View File

@ -36,6 +36,7 @@
<button :class="{'btn': true, 'cant-play':(pending_action != 2)}" :disabled="pending_action != 2" v-if="!(eventCard && eventCard.name == 'Sbornia') && is_my_turn && character.name === 'Raddie Snake' && special_use_count < 2 && gold_nuggets >=1" @click="()=>{$socket.emit('special', {})}">{{$t('special_ability')}}</button> <button :class="{'btn': true, 'cant-play':(pending_action != 2)}" :disabled="pending_action != 2" v-if="!(eventCard && eventCard.name == 'Sbornia') && is_my_turn && character.name === 'Raddie Snake' && special_use_count < 2 && gold_nuggets >=1" @click="()=>{$socket.emit('special', {})}">{{$t('special_ability')}}</button>
<button :class="{'btn': true, 'cant-play':(pending_action != 2)}" :disabled="pending_action != 2" v-if="!(eventCard && eventCard.name == 'Sbornia') && is_my_turn && character.name === 'Der Spot Burst Ringer' && special_use_count < 1" @click="()=>{$socket.emit('special', {})}">{{$t('special_ability')}}</button> <button :class="{'btn': true, 'cant-play':(pending_action != 2)}" :disabled="pending_action != 2" v-if="!(eventCard && eventCard.name == 'Sbornia') && is_my_turn && character.name === 'Der Spot Burst Ringer' && special_use_count < 1" @click="()=>{$socket.emit('special', {})}">{{$t('special_ability')}}</button>
<button :class="{'btn': true, 'cant-play':(pending_action != 2)}" :disabled="pending_action != 2" v-if="!(eventCard && eventCard.name == 'Sbornia') && is_my_turn && character.name === 'Black Flower' && special_use_count < 1" @click="()=>{$socket.emit('special', {})}">{{$t('special_ability')}}</button> <button :class="{'btn': true, 'cant-play':(pending_action != 2)}" :disabled="pending_action != 2" v-if="!(eventCard && eventCard.name == 'Sbornia') && is_my_turn && character.name === 'Black Flower' && special_use_count < 1" @click="()=>{$socket.emit('special', {})}">{{$t('special_ability')}}</button>
<button :class="{'btn': true, 'cant-play':(pending_action != 2)}" :disabled="pending_action != 2" v-if="!(eventCard && eventCard.name == 'Sbornia') && is_my_turn && character.name === 'Flint Westwood' && special_use_count < 1" @click="()=>{$socket.emit('special', {})}">{{$t('special_ability')}}</button>
</div> </div>
<div v-if="lives > 0 || is_ghost" style="position:relative"> <div v-if="lives > 0 || is_ghost" style="position:relative">
<span id="hand_text">{{$t('hand')}}</span> <span id="hand_text">{{$t('hand')}}</span>