From 8119ff2e453650b041a35e57188ee6326bf7c3e1 Mon Sep 17 00:00:00 2001 From: Giulio Date: Mon, 24 May 2021 00:47:08 +0200 Subject: [PATCH 1/3] fix molly stark with Slab The Killer --- backend/__init__.py | 2 +- backend/bang/players.py | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/backend/__init__.py b/backend/__init__.py index f3660bc..7eed5be 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -308,7 +308,7 @@ def chat_message(sid, msg): ses.character = [c for c in chs if c.name == ' '.join(cmd[1:])][0] ses.real_character = ses.character ses.notify_self() - elif '/setevent' in msg and ses.game and ses.game.deck: # /setevent (position) 0 (name) Peyote + elif '/setevent' in msg and ses.game and ses.game.deck: #add event before the position /setevent (position) 0 (name) Peyote cmd = msg.split() if len(cmd) >= 3: sio.emit('chat_message', room=ses.game.name, data={'color': f'red','text':f'🚨 {ses.name} is in debug mode and changed event'}) diff --git a/backend/bang/players.py b/backend/bang/players.py index fda8050..ee2bdcb 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -882,8 +882,11 @@ class Player: ((hand_index < len(self.hand) and self.hand[hand_index].name in self.expected_response) or self.character.check(self.game, chd.ElenaFuente)) or (hand_index-len(self.hand) < len(self.equipment) and self.equipment[hand_index-len(self.hand)].name in self.expected_response)): card = self.hand.pop(hand_index) if hand_index < len(self.hand) else self.equipment.pop(hand_index-len(self.hand)) - if self.character.check(self.game, chd.MollyStark) and hand_index < len(self.hand)+1 and not self.is_my_turn and self.event_type != 'duel': - self.hand.append(self.game.deck.draw(True)) + if self.character.check(self.game, chd.MollyStark) and hand_index < len(self.hand) and not self.is_my_turn and self.event_type != 'duel': + if self.attacker.character.check(self.game, chars.SlabTheKiller) and isinstance(self.hand[hand_index], cs.Mancato): + self.molly_discarded_cards += 1 + else: + self.hand.append(self.game.deck.draw(True)) card.use_card(self) self.sio.emit('chat_message', room=self.game.name, data=f'_respond|{self.name}|{card.name}') self.game.deck.scrap(card, True) @@ -892,9 +895,14 @@ class Player: if self.mancato_needed <= 0: if self.event_type == 'duel': self.game.duel(self, self.attacker.name) - if self.character.check(self.game, chd.MollyStark) and hand_index < len(self.hand)+1 and not self.is_my_turn: + if self.character.check(self.game, chd.MollyStark) and hand_index < len(self.hand) and not self.is_my_turn: self.molly_discarded_cards += 1 else: + if self.character.check(self.game, chd.MollyStark) and not self.is_my_turn: + for i in range(self.molly_discarded_cards): + self.hand.append(self.game.deck.draw(True)) + self.molly_discarded_cards = 0 + self.notify_self() self.game.responders_did_respond_resume_turn(did_lose=False) self.event_type = '' else: @@ -906,7 +914,7 @@ class Player: self.hand.append(self.game.deck.draw(True)) self.molly_discarded_cards = 0 self.notify_self() - elif self.attacker and self.attacker in self.game.get_alive_players() and isinstance(self.attacker.character, chd.MollyStark) and self.is_my_turn: + elif self.attacker and self.attacker in self.game.get_alive_players() and self.attacker.character.check(self.game, chd.MollyStark) and self.is_my_turn: for i in range(self.attacker.molly_discarded_cards): self.attacker.hand.append(self.attacker.game.deck.draw(True)) self.attacker.molly_discarded_cards = 0 From 20f09a25592468fb7c357c0f9945e4c1aeb75151 Mon Sep 17 00:00:00 2001 From: Giulio Date: Tue, 25 May 2021 14:57:42 +0200 Subject: [PATCH 2/3] fix belle star ability with barile and visibility Co-authored-by: Alberto Xamin --- backend/bang/players.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/bang/players.py b/backend/bang/players.py index ee2bdcb..867a15a 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -769,7 +769,8 @@ class Player: self.take_no_damage_response() return False else: - if (not self.game.check_event(ce.Lazo) and len([c for c in self.equipment if isinstance(c, cs.Barile)]) > 0) or self.character.check(self.game, chars.Jourdonnais): + if (not self.game.check_event(ce.Lazo) and len([c for c in self.equipment if isinstance(c, cs.Barile)]) > 0) and not self.game.players[self.game.turn].character.check(self.game, chd.BelleStar)\ + or self.character.check(self.game, chars.Jourdonnais): print('has barrel') self.pending_action = PendingAction.PICK if not no_dmg: @@ -942,10 +943,10 @@ class Player: if not self.character: return 0 covers = 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 for card in self.equipment: covers += card.vis_mod - if self.game.check_event(ce.Lazo): - return self.character.visibility_mod return self.character.visibility_mod + covers def scrap(self, card_index): From f68c9b2cec1ec765624e223489d8f990ecbdf232 Mon Sep 17 00:00:00 2001 From: Giulio Date: Tue, 25 May 2021 15:21:10 +0200 Subject: [PATCH 3/3] minor fix on reset --- backend/bang/players.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/bang/players.py b/backend/bang/players.py index 867a15a..5530e73 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -220,7 +220,7 @@ class Player: self.sio.emit('self', room=self.sid, data=json.dumps( ser, default=lambda o: o.__dict__)) self.game.player_death(self) - if self.game: # falso quando un bot viene eliminato dalla partita + if self.game and self.game.started: # falso quando un bot viene eliminato dalla partita self.sio.emit('self_vis', room=self.sid, data=json.dumps(self.game.get_visible_players(self), default=lambda o: o.__dict__)) self.game.notify_all() self.sio.emit('self', room=self.sid, data=json.dumps(