fix no players in range

This commit is contained in:
Alberto Xamin 2023-02-09 16:39:29 +00:00
parent 005ec8dd3c
commit d3f70454be
5 changed files with 18 additions and 8 deletions

View File

@ -1,8 +1,13 @@
from __future__ import annotations
from abc import ABC, abstractmethod
from bang.expansions import *
from typing import List
from typing import List, TYPE_CHECKING
from globals import G
if TYPE_CHECKING:
from bang.players import Player
from bang.game import Game
class Character(ABC):
def __init__(self, name: str, max_lives: int, sight_mod: int = 0, visibility_mod: int = 0, pick_mod: int = 0, desc: str = ''):
super().__init__()
@ -16,13 +21,13 @@ class Character(ABC):
self.icon = '🤷‍♂️'
self.number = ''.join(['❤️']*self.max_lives)
def check(self, game, character):
def check(self, game:Game, character:Character):
import bang.expansions.high_noon.card_events as ceh
if game.check_event(ceh.Sbornia):
return False
return isinstance(self, character)
def special(self, player, data):
def special(self, player:Player, data):
import bang.expansions.high_noon.card_events as ceh
if player.game.check_event(ceh.Sbornia):
return False

View File

@ -59,6 +59,8 @@ class Bottiglia(ShopCard):
def play_card(self, player, against=None, _with=None):
# bang, birra, panico
player.available_cards = [Bang(4,42), Birra(4,42), Panico(4,42)]
if not any((player.get_sight() >= p['dist'] for p in player.game.get_visible_players(player))):
player.available_cards.pop(0)
for i in range(len(player.available_cards)):
player.available_cards[i].must_be_used = True
player.choose_text = 'choose_bottiglia'

View File

@ -44,7 +44,7 @@ class Lemat(Card):
player.equipment.append(self)
player.notify_self()
return True
elif not player.has_played_bang:
elif not player.has_played_bang and any((player.get_sight() >= p['dist'] for p in player.game.get_visible_players(player))):
from bang.players import PendingAction
player.available_cards = player.hand.copy()
player.pending_action = PendingAction.CHOOSE

View File

@ -11,7 +11,7 @@ class BlackFlower(Character):
def special(self, player, data): #fiori = suit.Clubs
if player.special_use_count > 0 or not any((c.suit == cs.Suit.CLUBS for c in player.hand)):
return False
if super().special(player, data):
if any((player.get_sight() >= p['dist'] for p in player.game.get_visible_players(player))) and super().special(player, data):
from bang.players import PendingAction
player.available_cards = [c for c in player.hand if c.suit == cs.Suit.CLUBS]
player.special_use_count += 1

View File

@ -1,3 +1,4 @@
from __future__ import annotations
from enum import IntEnum
import json
from random import random, randrange, sample, uniform
@ -14,11 +15,14 @@ import bang.expansions.gold_rush.shop_cards as grc
import bang.expansions.gold_rush.characters as grch
import bang.expansions.the_valley_of_shadows.cards as tvosc
import bang.expansions.the_valley_of_shadows.characters as tvosch
from typing import List
from typing import List, TYPE_CHECKING
from metrics import Metrics
from globals import G
import sys
if TYPE_CHECKING:
from bang.game import Game
robot_pictures = [
'https://i.imgur.com/40rAFIb.jpg',
'https://i.imgur.com/gG77VRR.jpg',
@ -78,7 +82,6 @@ class Player:
print(r)
def __init__(self, name, sid, bot=False, discord_token=None):
import bang.game as g
super().__init__()
self.name = name
self.sid = sid
@ -90,7 +93,7 @@ class Player:
self.avatar = robot_pictures[randrange(len(robot_pictures))]
if self.discord_token:
G.sio.start_background_task(self._get_avatar)
self.game: g = None
self.game: Game = None
self.reset()
def reset(self):