reduce allocations

This commit is contained in:
Alberto Xamin 2023-01-09 12:52:47 +00:00
parent 0470e20cbb
commit e03883bf7c
5 changed files with 59 additions and 59 deletions

View File

@ -75,7 +75,7 @@ class Rissa(CatBalou):
def play_card(self, player, against, _with): def play_card(self, player, against, _with):
if _with != None: if _with != None:
if len([p for p in player.game.players if p != player and (len(p.hand)+len(p.equipment)) > 0]) == 0: if not any((p != player and (len(p.hand)+len(p.equipment)) > 0 for p in player.game.players)):
return False return False
#se sono qui vuol dire che ci sono giocatori con carte in mano oltre a me #se sono qui vuol dire che ci sono giocatori con carte in mano oltre a me
player.rissa_targets = [] player.rissa_targets = []

View File

@ -90,9 +90,9 @@ class ChuckWengam(Character):
if player.lives > 1 and player.is_my_turn: if player.lives > 1 and player.is_my_turn:
import bang.expansions.gold_rush.shop_cards as grc import bang.expansions.gold_rush.shop_cards as grc
player.lives -= 1 player.lives -= 1
if len([c for c in player.gold_rush_equipment if isinstance(c, grc.Talismano)]) > 0: if any((isinstance(c, grc.Talismano) for c in player.gold_rush_equipment)):
player.gold_nuggets += 1 player.gold_nuggets += 1
if len([c for c in player.gold_rush_equipment if isinstance(c, grc.Stivali)]) > 0: if any((isinstance(c, grc.Stivali) for c in player.gold_rush_equipment)):
player.hand.append(player.game.deck.draw(True)) player.hand.append(player.game.deck.draw(True))
player.hand.append(player.game.deck.draw(True)) player.hand.append(player.game.deck.draw(True))
player.hand.append(player.game.deck.draw(True)) player.hand.append(player.game.deck.draw(True))

View File

@ -173,7 +173,7 @@ class Game:
def notify_room(self, sid=None): def notify_room(self, sid=None):
if len([p for p in self.players if p.character == None]) != 0 or sid: if any((p.character == None for p in self.players)) or sid:
self.sio.emit('room', room=self.name if not sid else sid, data={ self.sio.emit('room', room=self.name if not sid else sid, data={
'name': self.name, 'name': self.name,
'started': self.started, 'started': self.started,
@ -243,7 +243,7 @@ class Game:
def notify_character_selection(self): def notify_character_selection(self):
self.notify_room() self.notify_room()
if len([p for p in self.players if p.character == None]) == 0: if not any((p.character == None for p in self.players)):
for i in range(len(self.players)): for i in range(len(self.players)):
print(self.name, self.players[i].name, self.players[i].character) print(self.name, self.players[i].name, self.players[i].character)
self.sio.emit('chat_message', room=self.name, data=f'_choose_character|{self.players[i].name}|{self.players[i].character.name}') self.sio.emit('chat_message', room=self.name, data=f'_choose_character|{self.players[i].name}|{self.players[i].character.name}')
@ -443,11 +443,11 @@ class Game:
print(f'{self.name}: stop roulette') print(f'{self.name}: stop roulette')
target_pl.lives -= 1 target_pl.lives -= 1
target_pl.heal_if_needed() target_pl.heal_if_needed()
if len([c for c in target_pl.gold_rush_equipment if isinstance(c, grc.Talismano)]) > 0: if any((isinstance(c, grc.Talismano) for c in target_pl.gold_rush_equipment)):
target_pl.gold_nuggets += 1 target_pl.gold_nuggets += 1
if target_pl.character.check(self, grch.SimeonPicos): if target_pl.character.check(self, grch.SimeonPicos):
target_pl.gold_nuggets += 1 target_pl.gold_nuggets += 1
if len([c for c in target_pl.gold_rush_equipment if isinstance(c, grc.Stivali)]) > 0: if any((isinstance(c, grc.Stivali) for c in target_pl.gold_rush_equipment)):
target_pl.hand.append(self.deck.draw(True)) target_pl.hand.append(self.deck.draw(True))
target_pl.notify_self() target_pl.notify_self()
self.is_russian_roulette_on = False self.is_russian_roulette_on = False
@ -617,9 +617,9 @@ class Game:
player.game = None player.game = None
if self.disconnect_bot and self.started: if self.disconnect_bot and self.started:
player.is_bot = True player.is_bot = True
if len([p for p in self.players if not p.is_bot]) == 0: if not any((not p.is_bot for p in self.players)):
eventlet.sleep(5) eventlet.sleep(5)
if len([p for p in self.players if not p.is_bot]) == 0: if not any((not p.is_bot for p in self.players)):
print(f'{self.name}: no players left in game, shutting down') print(f'{self.name}: no players left in game, shutting down')
self.shutting_down = True self.shutting_down = True
self.players = [] self.players = []
@ -637,7 +637,7 @@ class Game:
# else: # else:
# player.lives = 0 # player.lives = 0
# self.players.remove(player) # self.players.remove(player)
if len([p for p in self.players if not p.is_bot]) == 0: if not any((not p.is_bot for p in self.players)):
print(f'{self.name}: no players left in game, shutting down') print(f'{self.name}: no players left in game, shutting down')
self.shutting_down = True self.shutting_down = True
self.players = [] self.players = []
@ -654,7 +654,7 @@ class Game:
if player.character and player.role: if player.character and player.role:
if not self.is_replay: if not self.is_replay:
Metrics.send_metric('player_death', points=[1], tags=[f"char:{player.character.name}", f"role:{player.role.name}"]) Metrics.send_metric('player_death', points=[1], tags=[f"char:{player.character.name}", f"role:{player.role.name}"])
if len([c for c in player.gold_rush_equipment if isinstance(c, grc.Ricercato)]) > 0 and player.attacker and player.attacker in self.players: if any((isinstance(c, grc.Ricercato) for c in player.gold_rush_equipment)) and player.attacker and player.attacker in self.players:
player.attacker.gold_nuggets += 1 player.attacker.gold_nuggets += 1
player.attacker.hand.append(self.deck.draw(True)) player.attacker.hand.append(self.deck.draw(True))
player.attacker.hand.append(self.deck.draw(True)) player.attacker.hand.append(self.deck.draw(True))

View File

@ -237,7 +237,7 @@ class Player:
self.hand.append(self.game.deck.draw(True)) self.hand.append(self.game.deck.draw(True))
if self.lives <= 0 and self.max_lives > 0 and not self.is_dead: if self.lives <= 0 and self.max_lives > 0 and not self.is_dead:
print('dying, attacker', self.attacker) print('dying, attacker', self.attacker)
if self.gold_nuggets >= 2 and len([c for c in self.gold_rush_equipment if isinstance(c, grc.Zaino)]) > 0: if self.gold_nuggets >= 2 and any((isinstance(c, grc.Zaino) for c in self.gold_rush_equipment)):
for i in range(len(self.gold_rush_equipment)): for i in range(len(self.gold_rush_equipment)):
if isinstance(self.gold_rush_equipment[i], grc.Zaino): if isinstance(self.gold_rush_equipment[i], grc.Zaino):
self.gold_rush_equipment[i].play_card(self, None) self.gold_rush_equipment[i].play_card(self, None)
@ -266,7 +266,7 @@ class Player:
ser['attacker'] = self.attacker.name ser['attacker'] = self.attacker.name
ser['sight'] = self.get_sight() ser['sight'] = self.get_sight()
ser['sight_extra'] = self.get_sight(False) -1 ser['sight_extra'] = self.get_sight(False) -1
ser['can_gold_rush_discard'] = len([p for p in self.game.get_alive_players() if p != self and len([e for e in p.gold_rush_equipment if e.number <= self.gold_nuggets + 1]) > 0]) > 0 ser['can_gold_rush_discard'] = any((p != self and any((e.number <= self.gold_nuggets + 1 for e in p.gold_rush_equipment)) for p in self.game.get_alive_players()))
if self.character: if self.character:
ser['gold_rush_discount'] = 1 if self.character.check(self.game, grch.PrettyLuzena) and self.special_use_count < 1 else 0 ser['gold_rush_discount'] = 1 if self.character.check(self.game, grch.PrettyLuzena) and self.special_use_count < 1 else 0
ser['lives'] = max(ser['lives'], 0) ser['lives'] = max(ser['lives'], 0)
@ -368,7 +368,7 @@ class Player:
return return
break break
maxcards = self.lives if not self.character.check(self.game, chd.SeanMallory) else 10 maxcards = self.lives if not self.character.check(self.game, chd.SeanMallory) else 10
if maxcards == self.lives and len([c for c in self.gold_rush_equipment if isinstance(c, grc.Cinturone)]) > 0: if maxcards == self.lives and any((isinstance(c, grc.Cinturone) for c in self.gold_rush_equipment)):
maxcards = 8 maxcards = 8
if len(self.hand) > maxcards: if len(self.hand) > maxcards:
self.game.rpc_log.append(f'{self.name};scrap;{0}') self.game.rpc_log.append(f'{self.name};scrap;{0}')
@ -434,11 +434,11 @@ class Player:
self.bang_used = 0 self.bang_used = 0
if self.game.check_event(ceh.MezzogiornoDiFuoco): if self.game.check_event(ceh.MezzogiornoDiFuoco):
self.lives -= 1 self.lives -= 1
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Talismano)]) > 0: if any((isinstance(c, grc.Talismano) for c in self.gold_rush_equipment)):
self.gold_nuggets += 1 self.gold_nuggets += 1
if self.character.check(self.game, grch.SimeonPicos): if self.character.check(self.game, grch.SimeonPicos):
self.gold_nuggets += 1 self.gold_nuggets += 1
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Stivali)]) > 0: if any((isinstance(c, grc.Stivali) for c in self.gold_rush_equipment)):
self.hand.append(self.game.deck.draw(True)) self.hand.append(self.game.deck.draw(True))
if self.character.check(self.game, chars.BartCassidy) and self.lives > 0: if self.character.check(self.game, chars.BartCassidy) and self.lives > 0:
self.hand.append(self.game.deck.draw(True)) self.hand.append(self.game.deck.draw(True))
@ -490,7 +490,7 @@ class Player:
self.choose_text = 'choose_cecchino' self.choose_text = 'choose_cecchino'
self.pending_action = PendingAction.CHOOSE self.pending_action = PendingAction.CHOOSE
self.notify_self() self.notify_self()
elif self.is_my_turn and self.pending_action == PendingAction.PLAY and pile == 'event' and self.game.check_event(ce.Rimbalzo) and len([c for c in self.hand if c.name == cs.Bang(0,0).name]) > 0: elif self.is_my_turn and self.pending_action == PendingAction.PLAY and pile == 'event' and self.game.check_event(ce.Rimbalzo) and any((c.name == cs.Bang(0,0).name for c in self.hand)):
self.available_cards = [{ self.available_cards = [{
'name': p.name, 'name': p.name,
'icon': p.role.icon if(self.game.initial_players == 3) else '⭐️' if isinstance(p.role, r.Sheriff) else '🤠', 'icon': p.role.icon if(self.game.initial_players == 3) else '⭐️' if isinstance(p.role, r.Sheriff) else '🤠',
@ -532,7 +532,7 @@ class Player:
self.pending_action = PendingAction.PLAY self.pending_action = PendingAction.PLAY
num = 2 if not self.character.check(self.game, chd.BillNoface) else self.max_lives-self.lives+1 num = 2 if not self.character.check(self.game, chd.BillNoface) else self.max_lives-self.lives+1
if self.character.check(self.game, chd.PixiePete): num += 1 if self.character.check(self.game, chd.PixiePete): num += 1
if (len([c for c in self.gold_rush_equipment if isinstance(c, grc.Piccone)]) > 0): num += 1 if (any((isinstance(c, grc.Piccone) for c in self.gold_rush_equipment))): num += 1
if self.game.check_event(ceh.IlTreno) or (self.is_ghost and self.game.check_event(ceh.CittaFantasma)): num += 1 if self.game.check_event(ceh.IlTreno) or (self.is_ghost and self.game.check_event(ceh.CittaFantasma)): num += 1
elif self.game.check_event(ceh.Sete): num -= 1 elif self.game.check_event(ceh.Sete): num -= 1
for i in range(num): for i in range(num):
@ -574,7 +574,7 @@ class Player:
if self.pending_action != PendingAction.PICK: if self.pending_action != PendingAction.PICK:
return return
pickable_cards = 1 + self.character.pick_mod pickable_cards = 1 + self.character.pick_mod
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.FerroDiCavallo)]) > 0: if any((isinstance(c, grc.FerroDiCavallo) for c in self.gold_rush_equipment)):
pickable_cards += 1 pickable_cards += 1
if self.is_my_turn and self.attacker == None: if self.is_my_turn and self.attacker == None:
for i in range(len(self.equipment)): for i in range(len(self.equipment)):
@ -587,11 +587,11 @@ class Player:
data=f'_flipped|{self.name}|{picked.name}|{picked.num_suit()}') data=f'_flipped|{self.name}|{picked.name}|{picked.num_suit()}')
if picked.check_suit(self.game, [cs.Suit.SPADES]) and 2 <= picked.number <= 9 and pickable_cards == 0: if picked.check_suit(self.game, [cs.Suit.SPADES]) and 2 <= picked.number <= 9 and pickable_cards == 0:
self.lives -= 3 self.lives -= 3
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Talismano)]) > 0: if any((isinstance(c, grc.Talismano) for c in self.gold_rush_equipment)):
self.gold_nuggets += 3 self.gold_nuggets += 3
if self.character.check(self.game, grch.SimeonPicos): if self.character.check(self.game, grch.SimeonPicos):
self.gold_nuggets += 3 self.gold_nuggets += 3
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Stivali)]) > 0: if any((isinstance(c, grc.Stivali) for c in self.gold_rush_equipment)):
self.hand.append(self.game.deck.draw()) self.hand.append(self.game.deck.draw())
self.hand.append(self.game.deck.draw()) self.hand.append(self.game.deck.draw())
self.hand.append(self.game.deck.draw()) self.hand.append(self.game.deck.draw())
@ -694,7 +694,7 @@ class Player:
print(self.name, 'is playing ', card, ' against:', against, ' with:', _with) print(self.name, 'is playing ', card, ' against:', against, ' with:', _with)
did_play_card = False did_play_card = False
event_blocks_card = (self.game.check_event(ce.IlGiudice) and (card.is_equipment or (card.usable_next_turn and not card.can_be_used_now))) or (self.game.check_event(ce.Lazo) and card.usable_next_turn and card.can_be_used_now) or ((self.game.check_event(ceh.Manette) and card.suit != self.committed_suit_manette) and not (card.usable_next_turn and card.can_be_used_now)) event_blocks_card = (self.game.check_event(ce.IlGiudice) and (card.is_equipment or (card.usable_next_turn and not card.can_be_used_now))) or (self.game.check_event(ce.Lazo) and card.usable_next_turn and card.can_be_used_now) or ((self.game.check_event(ceh.Manette) and card.suit != self.committed_suit_manette) and not (card.usable_next_turn and card.can_be_used_now))
if not(against != None and (self.game.get_player_named(against).character.check(self.game, chd.ApacheKid) or len([c for c in self.game.get_player_named(against).gold_rush_equipment if isinstance(c, grc.Calumet)]) > 0) and card.check_suit(self.game, [cs.Suit.DIAMONDS])) or (isinstance(card, grc.ShopCard) and card.kind == grc.ShopCardKind.BLACK) and not event_blocks_card: if not(against != None and (self.game.get_player_named(against).character.check(self.game, chd.ApacheKid) or any((isinstance(c, grc.Calumet) for c in self.game.get_player_named(against).gold_rush_equipment))) and card.check_suit(self.game, [cs.Suit.DIAMONDS])) or (isinstance(card, grc.ShopCard) and card.kind == grc.ShopCardKind.BLACK) and not event_blocks_card:
if (against == self.name and not isinstance(card, csd.Tequila) and not isinstance(card, cs.Panico) and not isinstance(card, cs.CatBalou)) or event_blocks_card: if (against == self.name and not isinstance(card, csd.Tequila) and not isinstance(card, cs.Panico) and not isinstance(card, cs.CatBalou)) or event_blocks_card:
did_play_card = False did_play_card = False
else: else:
@ -754,7 +754,7 @@ class Player:
elif self.choose_text == 'choose_ricercato': elif self.choose_text == 'choose_ricercato':
player = self.game.get_player_named(self.available_cards[card_index]['name']) player = self.game.get_player_named(self.available_cards[card_index]['name'])
player.sio.emit('chat_message', room=player.game.name, data=f'_play_card_against|{self.name}|Ricercato|{player.name}') player.sio.emit('chat_message', room=player.game.name, data=f'_play_card_against|{self.name}|Ricercato|{player.name}')
if len([c for c in player.gold_rush_equipment if isinstance(c, grc.Ricercato)]) > 0: if any((isinstance(c, grc.Ricercato) for c in player.gold_rush_equipment)):
self.game.deck.shop_deck.append(grc.Ricercato()) self.game.deck.shop_deck.append(grc.Ricercato())
else: else:
player.gold_rush_equipment.append(grc.Ricercato()) player.gold_rush_equipment.append(grc.Ricercato())
@ -846,11 +846,11 @@ class Player:
player = self.game.get_player_named(self.available_cards[card_index]['name']) player = self.game.get_player_named(self.available_cards[card_index]['name'])
player.lives += 1 player.lives += 1
self.lives -= 1 self.lives -= 1
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Talismano)]) > 0: if any((isinstance(c, grc.Talismano) for c in self.gold_rush_equipment)):
self.gold_nuggets += 1 self.gold_nuggets += 1
if self.character.check(self.game, grch.SimeonPicos): if self.character.check(self.game, grch.SimeonPicos):
self.gold_nuggets += 1 self.gold_nuggets += 1
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Stivali)]) > 0: if any((isinstance(c, grc.Stivali) for c in self.gold_rush_equipment)):
self.hand.append(self.game.deck.draw()) self.hand.append(self.game.deck.draw())
player.notify_self() player.notify_self()
self.sio.emit('chat_message', room=self.game.name, data=f'_fratelli_sangue|{self.name}|{player.name}') self.sio.emit('chat_message', room=self.game.name, data=f'_fratelli_sangue|{self.name}|{player.name}')
@ -930,7 +930,7 @@ class Player:
self.hand.append(card) self.hand.append(card)
pickable_stop = 1 pickable_stop = 1
if self.game.check_event(ceh.Sete): pickable_stop += 1 if self.game.check_event(ceh.Sete): pickable_stop += 1
if self.game.check_event(ceh.IlTreno) or len([c for c in self.gold_rush_equipment if isinstance(c, grc.Piccone)]) > 0: if self.game.check_event(ceh.IlTreno) or any((isinstance(c, grc.Piccone) for c in self.gold_rush_equipment)):
pickable_stop -= 1 pickable_stop -= 1
if len(self.available_cards) == pickable_stop: if len(self.available_cards) == pickable_stop:
if len(self.available_cards) > 0: #la carta non scelta la rimettiamo in cima al mazzo if len(self.available_cards) > 0: #la carta non scelta la rimettiamo in cima al mazzo
@ -938,7 +938,7 @@ class Player:
if len(self.available_cards) > 0: #se sono rimaste carte le scartiamo if len(self.available_cards) > 0: #se sono rimaste carte le scartiamo
self.game.deck.scrap(self.available_cards.pop()) self.game.deck.scrap(self.available_cards.pop())
#se c'è sia treno che piccone pesco un'altra carta #se c'è sia treno che piccone pesco un'altra carta
if self.game.check_event(ceh.IlTreno) and len([c for c in self.gold_rush_equipment if isinstance(c, grc.Piccone)]) > 0: if self.game.check_event(ceh.IlTreno) and any((isinstance(c, grc.Piccone) for c in self.gold_rush_equipment)):
self.hand.append(self.game.deck.draw()) self.hand.append(self.game.deck.draw())
self.is_drawing = False self.is_drawing = False
self.pending_action = PendingAction.PLAY self.pending_action = PendingAction.PLAY
@ -954,7 +954,7 @@ class Player:
#legge del west non si applica perchè la seconda carta viene scartata #legge del west non si applica perchè la seconda carta viene scartata
if self.game.check_event(ceh.IlTreno): if self.game.check_event(ceh.IlTreno):
self.hand.append(self.game.deck.draw()) self.hand.append(self.game.deck.draw())
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Piccone)]) > 0: if any((isinstance(c, grc.Piccone) for c in self.gold_rush_equipment)):
self.hand.append(self.game.deck.draw()) self.hand.append(self.game.deck.draw())
self.gold_nuggets += 1 self.gold_nuggets += 1
self.is_drawing = False self.is_drawing = False
@ -978,9 +978,9 @@ class Player:
def barrel_pick(self): def barrel_pick(self):
pickable_cards = 1 + self.character.pick_mod pickable_cards = 1 + self.character.pick_mod
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.FerroDiCavallo)]) > 0: if any((isinstance(c, grc.FerroDiCavallo) for c in self.gold_rush_equipment)):
pickable_cards += 1 pickable_cards += 1
if len([c for c in self.equipment if isinstance(c, cs.Barile)]) > 0 and self.character.check(self.game, chars.Jourdonnais): if any((isinstance(c, cs.Barile) for c in self.equipment)) and self.character.check(self.game, chars.Jourdonnais):
pickable_cards = 2 pickable_cards = 2
while pickable_cards > 0: while pickable_cards > 0:
pickable_cards -= 1 pickable_cards -= 1
@ -994,8 +994,8 @@ class Player:
if self.mancato_needed <= 0: if self.mancato_needed <= 0:
self.game.responders_did_respond_resume_turn(did_lose=False) self.game.responders_did_respond_resume_turn(did_lose=False)
return return
if not self.game.is_competitive and len([c for c in self.hand if isinstance(c, cs.Mancato) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Bang)) or self.character.check(self.game, chd.ElenaFuente)]) == 0\ if not self.game.is_competitive and not any((isinstance(c, cs.Mancato) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Bang)) or self.character.check(self.game, chd.ElenaFuente) for c in self.hand))\
and len([c for c in self.equipment if c.can_be_used_now and isinstance(c, cs.Mancato)]) == 0: and not any((c.can_be_used_now and isinstance(c, cs.Mancato) for c in self.equipment)):
self.take_damage_response() self.take_damage_response()
self.game.responders_did_respond_resume_turn(did_lose=True) self.game.responders_did_respond_resume_turn(did_lose=True)
else: else:
@ -1008,9 +1008,9 @@ class Player:
def barrel_pick_no_dmg(self): def barrel_pick_no_dmg(self):
pickable_cards = 1 + self.character.pick_mod pickable_cards = 1 + self.character.pick_mod
if len([c for c in self.equipment if isinstance(c, cs.Barile)]) > 0 and self.character.check(self.game, chars.Jourdonnais): if any((isinstance(c, cs.Barile) for c in self.equipment)) and self.character.check(self.game, chars.Jourdonnais):
pickable_cards = 2 pickable_cards = 2
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.FerroDiCavallo)]) > 0: if any((isinstance(c, grc.FerroDiCavallo) for c in self.gold_rush_equipment)):
pickable_cards += 1 pickable_cards += 1
while pickable_cards > 0: while pickable_cards > 0:
pickable_cards -= 1 pickable_cards -= 1
@ -1024,8 +1024,8 @@ class Player:
if self.mancato_needed <= 0: if self.mancato_needed <= 0:
self.game.responders_did_respond_resume_turn(did_lose=False) self.game.responders_did_respond_resume_turn(did_lose=False)
return return
if not self.game.is_competitive and len([c for c in self.hand if isinstance(c, cs.Mancato) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Bang)) or self.character.check(self.game, chd.ElenaFuente)]) == 0\ if not self.game.is_competitive and not any((isinstance(c, cs.Mancato) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Bang)) or self.character.check(self.game, chd.ElenaFuente) for c in self.hand))\
and len([c for c in self.equipment if c.can_be_used_now and isinstance(c, cs.Mancato)]) == 0: and not any((c.can_be_used_now and isinstance(c, cs.Mancato) for c in self.equipment)):
self.take_no_damage_response() self.take_no_damage_response()
self.game.responders_did_respond_resume_turn(did_lose=True) self.game.responders_did_respond_resume_turn(did_lose=True)
else: else:
@ -1048,9 +1048,9 @@ class Player:
for i in range(len(self.equipment)): for i in range(len(self.equipment)):
if self.equipment[i].can_be_used_now: if self.equipment[i].can_be_used_now:
print('usable', self.equipment[i]) print('usable', self.equipment[i])
if not self.game.is_competitive and len([c for c in self.equipment if isinstance(c, cs.Barile)]) == 0 and not self.character.check(self.game, chars.Jourdonnais)\ if not self.game.is_competitive and not any((isinstance(c, cs.Barile) for c in self.equipment)) and not self.character.check(self.game, chars.Jourdonnais)\
and len([c for c in self.hand if (isinstance(c, cs.Mancato) and c.can_be_used_now) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Bang)) or self.character.check(self.game, chd.ElenaFuente)]) == 0\ and not any(((isinstance(c, cs.Mancato) and c.can_be_used_now) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Bang)) or self.character.check(self.game, chd.ElenaFuente) for c in self.hand))\
and len([c for c in self.equipment if c.can_be_used_now and isinstance(c, cs.Mancato)]) == 0: and not any((c.can_be_used_now and isinstance(c, cs.Mancato) for c in self.equipment)):
print('Cant defend') print('Cant defend')
if not no_dmg: if not no_dmg:
self.take_damage_response() self.take_damage_response()
@ -1058,7 +1058,7 @@ class Player:
self.take_no_damage_response() self.take_no_damage_response()
return False return False
else: else:
if ((not self.game.check_event(ce.Lazo) and len([c for c in self.equipment if isinstance(c, cs.Barile)]) > 0) \ if ((not self.game.check_event(ce.Lazo) and any((isinstance(c, cs.Barile) for c in self.equipment))) \
and not (self.game.players[self.game.turn].character.check(self.game, chd.BelleStar) and isinstance(attacker, Player))) \ and not (self.game.players[self.game.turn].character.check(self.game, chd.BelleStar) and isinstance(attacker, Player))) \
or self.character.check(self.game, chars.Jourdonnais): #se ho un barile e non c'è lazo e non mi sta attaccando Belle Star o se sono Jourdonnais or self.character.check(self.game, chars.Jourdonnais): #se ho un barile e non c'è lazo e non mi sta attaccando Belle Star o se sono Jourdonnais
print('has barrel') print('has barrel')
@ -1094,8 +1094,8 @@ class Player:
def get_indians(self, attacker): def get_indians(self, attacker):
self.attacker = attacker self.attacker = attacker
self.attacking_card = "Indiani!" self.attacking_card = "Indiani!"
if self.character.check(self.game, chd.ApacheKid) or len([c for c in self.gold_rush_equipment if isinstance(c, grc.Calumet)]) > 0: return False if self.character.check(self.game, chd.ApacheKid) or any((isinstance(c, grc.Calumet) for c in self.gold_rush_equipment)): return False
if not self.game.is_competitive and len([c for c in self.hand if isinstance(c, cs.Bang) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Mancato))]) == 0: if not self.game.is_competitive and not any((isinstance(c, cs.Bang) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Mancato)) for c in self.hand)):
print('Cant defend') print('Cant defend')
self.take_damage_response() self.take_damage_response()
return False return False
@ -1112,7 +1112,7 @@ class Player:
def get_dueled(self, attacker): def get_dueled(self, attacker):
self.attacker = attacker self.attacker = attacker
self.attacking_card = "Duello" self.attacking_card = "Duello"
if (self.game.check_event(ceh.Sermone) and self.is_my_turn) or (not self.game.is_competitive and len([c for c in self.hand if isinstance(c, cs.Bang) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Mancato))]) == 0): if (self.game.check_event(ceh.Sermone) and self.is_my_turn) or (not self.game.is_competitive and not any((isinstance(c, cs.Bang) or (self.character.check(self.game, chars.CalamityJanet) and isinstance(c, cs.Mancato)) for c in self.hand))):
print('Cant defend') print('Cant defend')
self.take_damage_response() self.take_damage_response()
self.game.responders_did_respond_resume_turn(did_lose=True) self.game.responders_did_respond_resume_turn(did_lose=True)
@ -1127,7 +1127,7 @@ class Player:
return True return True
def heal_if_needed(self): def heal_if_needed(self):
while self.lives <= 0 and len(self.game.get_alive_players()) > 2 and len([c for c in self.hand if isinstance(c, cs.Birra)]) > 0 and not self.game.check_event(ceh.IlReverendo): while self.lives <= 0 and len(self.game.get_alive_players()) > 2 and any((isinstance(c, cs.Birra) for c in self.hand)) and not self.game.check_event(ceh.IlReverendo):
for i in range(len(self.hand)): for i in range(len(self.hand)):
if isinstance(self.hand[i], cs.Birra): if isinstance(self.hand[i], cs.Birra):
if self.character.check(self.game, chd.MollyStark) and not self.is_my_turn: if self.character.check(self.game, chd.MollyStark) and not self.is_my_turn:
@ -1165,11 +1165,11 @@ class Player:
if (isinstance(self.attacker, Player)): if (isinstance(self.attacker, Player)):
self.attacker.gold_nuggets += 1 self.attacker.gold_nuggets += 1
self.attacker.notify_self() self.attacker.notify_self()
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Talismano)]) > 0: if any((isinstance(c, grc.Talismano) for c in self.gold_rush_equipment)):
self.gold_nuggets += 1 self.gold_nuggets += 1
if self.character.check(self.game, grch.SimeonPicos): if self.character.check(self.game, grch.SimeonPicos):
self.gold_nuggets += 1 self.gold_nuggets += 1
if len([c for c in self.gold_rush_equipment if isinstance(c, grc.Stivali)]) > 0: if any((isinstance(c, grc.Stivali) for c in self.gold_rush_equipment)):
self.hand.append(self.game.deck.draw(True)) self.hand.append(self.game.deck.draw(True))
self.heal_if_needed() self.heal_if_needed()
self.mancato_needed = 0 self.mancato_needed = 0
@ -1300,7 +1300,7 @@ class Player:
'avatar': p.avatar, 'avatar': p.avatar,
'alt_text': ''.join(['🎴️'] * len(p.gold_rush_equipment)), 'alt_text': ''.join(['🎴️'] * len(p.gold_rush_equipment)),
'noDesc': True 'noDesc': True
} for p in self.game.get_alive_players() if p != self and len([e for e in p.gold_rush_equipment if e.number + 1 <= self.gold_nuggets]) > 0] } for p in self.game.get_alive_players() if p != self and any((e.number + 1 <= self.gold_nuggets for e in p.gold_rush_equipment))]
self.available_cards.append({'icon': '', 'noDesc': True}) self.available_cards.append({'icon': '', 'noDesc': True})
self.choose_text = 'gold_rush_discard' self.choose_text = 'gold_rush_discard'
self.pending_action = PendingAction.CHOOSE self.pending_action = PendingAction.CHOOSE
@ -1328,22 +1328,22 @@ class Player:
card = must_be_used_cards[0] card = must_be_used_cards[0]
print(f'Legge del west card: {card.name}') print(f'Legge del west card: {card.name}')
print(self.has_played_bang and not (any((isinstance(c, cs.Volcanic) for c in self.equipment)) and type(card) == type(cs.Bang))) print(self.has_played_bang and not (any((isinstance(c, cs.Volcanic) for c in self.equipment)) and type(card) == type(cs.Bang)))
if card.suit == cs.Suit.DIAMONDS and card.need_target and len([p for p in self.game.get_alive_players() if (not p.character.check(self.game, chd.ApacheKid) and not any((isinstance(c, grc.Calumet) for c in p.gold_rush_equipment)))]) == 0: if card.suit == cs.Suit.DIAMONDS and card.need_target and not any(((not p.character.check(self.game, chd.ApacheKid) and not any((isinstance(c, grc.Calumet) for c in p.gold_rush_equipment))) for p in self.game.get_alive_players())):
if isinstance(card, cs.Bang): if isinstance(card, cs.Bang):
return True return True
else: else:
return len(self.equipment) == 0 # se non ho carte equipaggiamento return len(self.equipment) == 0 # se non ho carte equipaggiamento
elif (isinstance(card, cs.Bang) or (isinstance(card, cs.Mancato) and self.character.check(self.game, chars.CalamityJanet))) and self.has_played_bang and not any((isinstance(c, cs.Volcanic) for c in self.equipment)) or len([p for p in self.game.get_visible_players(self) if self.get_sight() >= p['dist']]) == 0: elif (isinstance(card, cs.Bang) or (isinstance(card, cs.Mancato) and self.character.check(self.game, chars.CalamityJanet))) and self.has_played_bang and not any((isinstance(c, cs.Volcanic) for c in self.equipment)) or not any((self.get_sight() >= p['dist'] for p in self.game.get_visible_players(self))):
return True return True
elif isinstance(card, cs.Mancato) or (card.need_with and len(self.hand) < 2): elif isinstance(card, cs.Mancato) or (card.need_with and len(self.hand) < 2):
return True return True
elif isinstance(card, cs.Panico) and len([p for p in self.game.get_visible_players(self) if self.get_sight(False) >= p['dist']]) == 0 and len(self.equipment) == 0: elif isinstance(card, cs.Panico) and not any((self.get_sight(False) >= p['dist'] for p in self.game.get_visible_players(self))) and len(self.equipment) == 0:
return True return True
elif isinstance(card, csd.Pugno) and len([p for p in self.game.get_visible_players(self) if self.get_sight(False) >= p['dist']]) == 0: elif isinstance(card, csd.Pugno) and not any((self.get_sight(False) >= p['dist'] for p in self.game.get_visible_players(self))):
return True return True
elif isinstance(card, cs.Prigione) and len([p for p in self.game.get_visible_players(self) if not p['is_sheriff']]) == 0: elif isinstance(card, cs.Prigione) and not any((not p['is_sheriff'] for p in self.game.get_visible_players(self))):
return True return True
elif not card.is_weapon and len([c for c in self.equipment if c.name == card.name]) > 0: elif not card.is_weapon and any((c.name == card.name for c in self.equipment)):
return True return True
return False return False
return True return True
@ -1353,7 +1353,7 @@ class Player:
if not self.is_my_turn and not forced: if not self.is_my_turn and not forced:
return return
maxcards = self.lives if not self.character.check(self.game, chd.SeanMallory) else 10 maxcards = self.lives if not self.character.check(self.game, chd.SeanMallory) else 10
if maxcards == self.lives and len([c for c in self.gold_rush_equipment if isinstance(c, grc.Cinturone)]) > 0: if maxcards == self.lives and any((isinstance(c, grc.Cinturone) for c in self.gold_rush_equipment)):
maxcards = 8 maxcards = 8
if len(self.hand) > maxcards and not forced: if len(self.hand) > maxcards and not forced:
print(f"{self.name}: I have to many cards in my hand and I can't end the turn") print(f"{self.name}: I have to many cards in my hand and I can't end the turn")

View File

@ -121,7 +121,7 @@ def set_username(sid, username):
username = username["name"] username = username["name"]
print(f'{sid} changed username to {username}') print(f'{sid} changed username to {username}')
prev = ses.name prev = ses.name
if ses.game and len([p for p in ses.game.players if p.name == username]) > 0: if ses.game and any((p.name == username for p in ses.game.players)):
ses.name = f"{username}_{random.randint(0,100)}" ses.name = f"{username}_{random.randint(0,100)}"
else: else:
ses.name = username ses.name = username
@ -157,7 +157,7 @@ def get_me(sid, room):
join_room(sid, room) join_room(sid, room)
elif len(de_games) == 1 and de_games[0].started: elif len(de_games) == 1 and de_games[0].started:
print('room exists') print('room exists')
if room['username'] != None and any((p.name == room['username'] for p in de_games[0].players if p.is_bot)): if room['username'] != None and any((p.name == room['username'] for p in de_games[0].players if (p.is_bot or (dt != None and p.discord_token == dt)))):
print('getting inside the bot') print('getting inside the bot')
bot = [p for p in de_games[0].players if p.is_bot and p.name == room['username'] ][0] bot = [p for p in de_games[0].players if p.is_bot and p.name == room['username'] ][0]
bot.sid = sid bot.sid = sid
@ -217,7 +217,7 @@ def disconnect(sid):
@bang_handler @bang_handler
def create_room(sid, room_name): def create_room(sid, room_name):
if sio.get_session(sid).game == None: if sio.get_session(sid).game == None:
while len([g for g in games if g.name == room_name]): while any((g.name == room_name for g in games)):
room_name += f'_{random.randint(0,100)}' room_name += f'_{random.randint(0,100)}'
sio.leave_room(sid, 'lobby') sio.leave_room(sid, 'lobby')
sio.enter_room(sid, room_name) sio.enter_room(sid, room_name)
@ -263,7 +263,7 @@ def join_room(sid, room):
print(f'{sid} joined a room named {room_name}') print(f'{sid} joined a room named {room_name}')
sio.leave_room(sid, 'lobby') sio.leave_room(sid, 'lobby')
sio.enter_room(sid, room_name) sio.enter_room(sid, room_name)
while len([p for p in games[i].players if p.name == sio.get_session(sid).name]): while any((p.name == sio.get_session(sid).name and not p.is_bot for p in games[i].players)):
sio.get_session(sid).name += f'_{random.randint(0,100)}' sio.get_session(sid).name += f'_{random.randint(0,100)}'
sio.emit('me', data=sio.get_session(sid).name, room=sid) sio.emit('me', data=sio.get_session(sid).name, room=sid)
games[i].add_player(sio.get_session(sid)) games[i].add_player(sio.get_session(sid))
@ -639,7 +639,7 @@ def chat_message(sid, msg, pl=None):
ses.was_player = True ses.was_player = True
ses.bot_spin() ses.bot_spin()
elif '/arcadekick' in msg and ses.game.started: elif '/arcadekick' in msg and ses.game.started:
if len([p for p in ses.game.players if p.pending_action != PendingAction.WAIT]) == 0: if not any((p.pending_action != PendingAction.WAIT for p in ses.game.players)):
sio.emit('chat_message', room=ses.game.name, data={'color': f'','text':f'KICKING THE ARCADE CABINET'}) sio.emit('chat_message', room=ses.game.name, data={'color': f'','text':f'KICKING THE ARCADE CABINET'})
ses.game.next_turn() ses.game.next_turn()
else: else: