From 1c95327b83e8020f6f6df921c034bba2df99bfbf Mon Sep 17 00:00:00 2001 From: Giulio Date: Wed, 2 Mar 2022 23:15:32 +0100 Subject: [PATCH] fix distance with sight_mod card also handled the hangover event --- backend/bang/game.py | 3 +-- backend/bang/players.py | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/backend/bang/game.py b/backend/bang/game.py index 2f67dc1..d608ae7 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -713,11 +713,10 @@ class Game: pls = self.get_alive_players() if len(pls) == 0 or player not in pls: return [] i = pls.index(player) - sight = player.get_sight() mindist = 99 if not self.check_event(ce.Agguato) else 1 return [{ 'name': pls[j].name, - 'dist': min([abs(i - j), (i+ abs(j-len(pls))), (j+ abs(i-len(pls))), mindist]) + pls[j].get_visibility() - (player.get_sight(countWeapon=False)-1), + 'dist': min([abs(i - j), (i+ abs(j-len(pls))), (j+ abs(i-len(pls))), mindist]) + pls[j].get_visibility(), 'lives': pls[j].lives, 'max_lives': pls[j].max_lives, 'is_sheriff': isinstance(pls[j].role, roles.Sheriff), diff --git a/backend/bang/players.py b/backend/bang/players.py index 642ffa3..c6879e8 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -1145,9 +1145,11 @@ class Player: if self.mancato_needed <= 0: self.attacker = None - def get_sight(self, countWeapon=True): + def get_sight(self, countWeapon=True): #come vedo io gli altri if not self.character: return 0 + if self.game.check_event(ce.Lazo): + return 1 + self.character.sight_mod aim = 0 range = 0 for card in self.equipment: @@ -1155,19 +1157,18 @@ class Player: range += card.range else: aim += card.sight_mod - if self.game.check_event(ce.Lazo): - return 1 + self.character.sight_mod - return max(1, range) + aim + self.character.sight_mod + return max(1,range) + aim + (self.character.sight_mod if not self.game.check_event(ceh.Sbornia) else 0) - def get_visibility(self): + def get_visibility(self): #come mi vedono gli altri if not self.character or not self.game or not self.game.players[self.game.turn].character: return 0 covers = 0 + ch_vis_mod = self.character.visibility_mod if not self.game.check_event(ceh.Sbornia) else 0 if self.game.check_event(ce.Lazo) or self.game.players[self.game.turn].character.check(self.game, chd.BelleStar): - return self.character.visibility_mod + return ch_vis_mod for card in self.equipment: covers += card.vis_mod - return self.character.visibility_mod + covers + return ch_vis_mod + covers def scrap(self, card_index): if self.is_my_turn or self.character.check(self.game, chars.SidKetchum): @@ -1230,9 +1231,9 @@ class Player: return True elif isinstance(card, cs.Mancato) or (card.need_with and len(self.hand) < 2): return True - elif isinstance(card, cs.Panico) and len([p for p in self.game.get_visible_players(self) if 1 >= p['dist']]) == 0 and len(self.equipment) == 0: + 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: return True - elif isinstance(card, csd.Pugno) and len([p for p in self.game.get_visible_players(self) if 1 >= p['dist']]) == 0: + 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: 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: return True