From cc8cd52c6b9ec14e4b4255d136bdcec77048da47 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Wed, 28 Dec 2022 13:38:40 +0000 Subject: [PATCH] add info about which card is attacking you --- backend/bang/cards.py | 6 +++--- backend/bang/expansions/dodge_city/cards.py | 8 ++++---- backend/bang/game.py | 8 ++++---- backend/bang/players.py | 8 +++++++- frontend/src/components/Player.vue | 5 ++++- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/backend/bang/cards.py b/backend/bang/cards.py index 3bdcd95..17970d9 100644 --- a/backend/bang/cards.py +++ b/backend/bang/cards.py @@ -226,7 +226,7 @@ class Bang(Card): player.has_played_bang = True if not player.game.check_event(ceh.Sparatoria) else player.bang_used > 1 if player.character.check(player.game, chars.WillyTheKid): player.has_played_bang = False - player.game.attack(player, against, double=player.character.check(player.game, chars.SlabTheKiller)) + player.game.attack(player, against, double=player.character.check(player.game, chars.SlabTheKiller), card_name=self.name) return True return False @@ -350,7 +350,7 @@ class Gatling(Card): def play_card(self, player, against, _with=None): super().play_card(player, against=against) - player.game.attack_others(player) + player.game.attack_others(player, card_name=self.name) return True @@ -385,7 +385,7 @@ class Mancato(Card): data=f'_special_calamity|{player.name}|{self.name}|{against}') player.bang_used += 1 player.has_played_bang = True if not player.game.check_event(ceh.Sparatoria) else player.bang_used > 1 - player.game.attack(player, against) + player.game.attack(player, against, card_name=self.name) return True return False diff --git a/backend/bang/expansions/dodge_city/cards.py b/backend/bang/expansions/dodge_city/cards.py index b62c0d2..8dd7b49 100644 --- a/backend/bang/expansions/dodge_city/cards.py +++ b/backend/bang/expansions/dodge_city/cards.py @@ -25,7 +25,7 @@ class Pugno(Card): def play_card(self, player, against, _with=None): if against != None: super().play_card(player, against=against) - player.game.attack(player, against) + player.game.attack(player, against, card_name=self.name) return True return False @@ -106,7 +106,7 @@ class SpringField(Card): if against != None and _with != None: player.game.deck.scrap(_with) super().play_card(player, against=against) - player.game.attack(player, against) + player.game.attack(player, against, card_name=self.name) return True return False @@ -367,7 +367,7 @@ class Pepperbox(Bang): if self.can_be_used_now: if against != None: Card.play_card(self, player, against=against) - player.game.attack(player, against) + player.game.attack(player, against, card_name=self.name) return True return False else: @@ -392,7 +392,7 @@ class FucileDaCaccia(Card): if self.can_be_used_now: if against != None: super().play_card(player, against=against) - player.game.attack(player, against) + player.game.attack(player, against, card_name=self.name) return True return False else: diff --git a/backend/bang/game.py b/backend/bang/game.py index 5dfde2e..3548454 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -303,7 +303,7 @@ class Game: self.players[i].notify_self() self.notify_event_card() - def attack_others(self, attacker: pl.Player): + def attack_others(self, attacker: pl.Player, card_name:str=None): self.attack_in_progress = True attacker.pending_action = pl.PendingAction.WAIT attacker.notify_self() @@ -311,7 +311,7 @@ class Game: self.ready_count = 0 for p in self.get_alive_players(): if p != attacker: - if p.get_banged(attacker=attacker): + if p.get_banged(attacker=attacker, card_name=card_name): self.waiting_for += 1 p.notify_self() if self.waiting_for == 0: @@ -339,8 +339,8 @@ class Game: if self.pending_winners and not self.someone_won: return self.announces_winners() - def attack(self, attacker: pl.Player, target_username:str, double:bool=False): - if self.get_player_named(target_username).get_banged(attacker=attacker, double=double): + def attack(self, attacker: pl.Player, target_username:str, double:bool=False, card_name:str=None): + if self.get_player_named(target_username).get_banged(attacker=attacker, double=double, card_name=card_name): self.ready_count = 0 self.waiting_for = 1 attacker.pending_action = pl.PendingAction.WAIT diff --git a/backend/bang/players.py b/backend/bang/players.py index 777fc41..8daf297 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -57,6 +57,7 @@ class Player: self.on_failed_response_cb = None self.event_type: str = None self.expected_response = [] + self.attacking_card = None self.attacker: Player = None self.target_p: str = None self.is_drawing = False @@ -960,8 +961,9 @@ class Player: self.on_failed_response_cb = self.take_no_damage_response self.notify_self() - def get_banged(self, attacker, double=False, no_dmg=False, card_index=None): + def get_banged(self, attacker, double=False, no_dmg=False, card_index=None, card_name=None): self.attacker = attacker + self.attacking_card = card_name print(f'attacker -> {attacker}') self.mancato_needed = 1 if not double else 2 if card_index != None: @@ -1016,6 +1018,7 @@ class Player: def get_indians(self, attacker): self.attacker = attacker + 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 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: print('Cant defend') @@ -1033,6 +1036,7 @@ class Player: def get_dueled(self, attacker): self.attacker = attacker + 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): print('Cant defend') self.take_damage_response() @@ -1086,6 +1090,7 @@ class Player: self.heal_if_needed() self.mancato_needed = 0 self.expected_response = [] + self.attacking_card = None self.event_type = '' self.notify_self() self.attacker = None @@ -1096,6 +1101,7 @@ class Player: self.dmg_card_index = -1 self.mancato_needed = 0 self.expected_response = [] + self.attacking_card = None self.event_type = '' self.notify_self() self.attacker = None diff --git a/frontend/src/components/Player.vue b/frontend/src/components/Player.vue index 926b7b1..15d1d8f 100644 --- a/frontend/src/components/Player.vue +++ b/frontend/src/components/Player.vue @@ -115,6 +115,7 @@ export default { can_target_sheriff: true, show_role: false, attacker: undefined, + attacking_card: undefined, notifycard: null, desc: '', scrapHand: [], @@ -175,6 +176,7 @@ export default { this.sight = self.sight this.sight_extra = self.sight_extra this.attacker = self.attacker + this.attacking_card = self.attacking_card this.mancato_needed = self.mancato_needed this.is_ghost = self.is_ghost if (this.pending_action == 5 && self.target_p) { @@ -215,7 +217,8 @@ export default { }, computed:{ respondText() { - return `${this.$t('choose_response')}${this.attacker?(this.$t('choose_response_to')+this.attacker):''}${(this.mancato_needed>1)?(` (${this.$t('choose_response_needed')} ` + this.mancato_needed + ')'):''}` + let attCard = this.attacking_card ? ' ('+this.$t('cards.'+this.attacking_card+'.name')+')' : ''; + return `${this.$t('choose_response')}${this.attacker?(this.$t('choose_response_to')+this.attacker+attCard):''}${(this.mancato_needed>1)?(` (${this.$t('choose_response_needed')} ` + this.mancato_needed + ')'):''}` }, showScrapScreen() { return this.isEndingTurn && !this.canEndTurn && this.is_my_turn;