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

View File

@ -59,6 +59,8 @@ class Bottiglia(ShopCard):
def play_card(self, player, against=None, _with=None): def play_card(self, player, against=None, _with=None):
# bang, birra, panico # bang, birra, panico
player.available_cards = [Bang(4,42), Birra(4,42), Panico(4,42)] 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)): for i in range(len(player.available_cards)):
player.available_cards[i].must_be_used = True player.available_cards[i].must_be_used = True
player.choose_text = 'choose_bottiglia' player.choose_text = 'choose_bottiglia'

View File

@ -44,7 +44,7 @@ class Lemat(Card):
player.equipment.append(self) player.equipment.append(self)
player.notify_self() player.notify_self()
return True 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 from bang.players import PendingAction
player.available_cards = player.hand.copy() player.available_cards = player.hand.copy()
player.pending_action = PendingAction.CHOOSE player.pending_action = PendingAction.CHOOSE

View File

@ -11,7 +11,7 @@ class BlackFlower(Character):
def special(self, player, data): #fiori = suit.Clubs 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)): if player.special_use_count > 0 or not any((c.suit == cs.Suit.CLUBS for c in player.hand)):
return False 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 from bang.players import PendingAction
player.available_cards = [c for c in player.hand if c.suit == cs.Suit.CLUBS] player.available_cards = [c for c in player.hand if c.suit == cs.Suit.CLUBS]
player.special_use_count += 1 player.special_use_count += 1

View File

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