From 99970d0df94881fad114598e524eb62bcb7b22e2 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Sun, 27 Mar 2022 14:33:54 +0200 Subject: [PATCH 1/4] add metric polling --- backend/server.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend/server.py b/backend/server.py index 791eb5d..0908df2 100644 --- a/backend/server.py +++ b/backend/server.py @@ -600,5 +600,12 @@ def get_goldrushcards(sid): cards = [cards_dict[i] for i in cards_dict] sio.emit('goldrushcards_info', room=sid, data=json.dumps(cards, default=lambda o: o.__dict__)) +def pool_metrics(): + sio.sleep(60) + Metrics.send_metric('lobbies', points=[len(games)]) + Metrics.send_metric('online_players', points=[online_players]) + pool_metrics() + if __name__ == '__main__': + sio.start_background_task(pool_metrics) eventlet.wsgi.server(eventlet.listen(('', 5001)), app) From b564b8e50497ef4267bd3363a2d98d9e38c27417 Mon Sep 17 00:00:00 2001 From: Giulio Date: Mon, 28 Mar 2022 14:11:12 +0200 Subject: [PATCH 2/4] herb hunter fix when sheriff kills deputy --- backend/bang/game.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/backend/bang/game.py b/backend/bang/game.py index 7c81491..9505245 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -695,12 +695,6 @@ class Game: vulture[0].hand[-1].reset_card() vulture[0].notify_self() - #se Vulture Sam è uno sceriffo e ha appena ucciso il suo Vice, deve scartare le carte che ha pescato con la sua abilità - if player.attacker and player.attacker in self.get_alive_players() and isinstance(player.attacker.role, roles.Sheriff) and isinstance(player.role, roles.Vice): - for i in range(len(player.attacker.hand)): - self.deck.scrap(player.attacker.hand.pop(), True) - player.attacker.notify_self() - greg = [p for p in self.get_alive_players() if p.character.check(self, chd.GregDigger)] for i in range(len(greg)): greg[i].lives = min(greg[i].lives+2, greg[i].max_lives) @@ -709,6 +703,13 @@ class Game: herb[i].hand.append(self.deck.draw(True)) herb[i].hand.append(self.deck.draw(True)) herb[i].notify_self() + + #se Vulture Sam o Herb Hounter è uno sceriffo e ha appena ucciso il suo Vice, deve scartare le carte che ha pescato con la sua abilità + if player.attacker and player.attacker in self.get_alive_players() and isinstance(player.attacker.role, roles.Sheriff) and isinstance(player.role, roles.Vice): + for i in range(len(player.attacker.hand)): + self.deck.scrap(player.attacker.hand.pop(), True) + player.attacker.notify_self() + self.is_handling_death = False if corpse.is_my_turn: From ff758c2a397b207b940bfe14c7e1aa8b5418b8df Mon Sep 17 00:00:00 2001 From: Giulio Date: Mon, 28 Mar 2022 15:31:43 +0200 Subject: [PATCH 3/4] fix end of replay --- backend/bang/game.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/bang/game.py b/backend/bang/game.py index 9505245..59cd8ef 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -53,6 +53,12 @@ class Game: self.is_replay = False def reset(self): + for p in self.players: + if (p.sid == p.name): + p.is_bot = True + if (self.is_replay): + self.is_replay = False + print('replay ended') print(f'{self.name}: resetting lobby') self.players.extend(self.spectators) self.spectators = [] @@ -84,7 +90,9 @@ class Game: for i in range(len(log)-1): print('replay:', i, 'of', len(log)-3, '->', log[i]) if (log[i] == "@@@"): - break + if self.is_replay: + self.reset() + return cmd = log[i].split(';') if cmd[1] == 'players': self.expansions = json.loads(cmd[4].replace("'",'"')) @@ -124,6 +132,10 @@ class Game: # if cmd[1] == 'chat_message': # chat_message(None, cmd[2], player) eventlet.sleep(max(self.replay_speed, 0.1)) + eventlet.sleep(6) + if self.is_replay: + self.reset() + def notify_room(self, sid=None): if len([p for p in self.players if p.character == None]) != 0 or sid: From d0159ea0e12d1300e508c522fa87c385ee7d69bd Mon Sep 17 00:00:00 2001 From: Giulio Date: Mon, 28 Mar 2022 15:33:26 +0200 Subject: [PATCH 4/4] fix ghost in player death check win status --- backend/bang/game.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/bang/game.py b/backend/bang/game.py index 59cd8ef..ad5dd2a 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -671,7 +671,7 @@ class Game: attacker_role = None if player.attacker and player.attacker in self.players: attacker_role = player.attacker.role - winners = [p for p in self.players if p.role != None and p.role.on_player_death(self.get_alive_players(), initial_players=self.initial_players, dead_role=player.role, attacker_role=attacker_role)] + winners = [p for p in self.players if p.role != None and p.role.on_player_death([p for p in self.get_alive_players() if not p.is_ghost], initial_players=self.initial_players, dead_role=player.role, attacker_role=attacker_role)] if not self.attack_in_progress and len(winners) > 0 and not self.someone_won: return self.announces_winners(winners) elif len(winners) > 0 and not self.someone_won: # non tutti hanno risposto, ma ci sono vincitori.