diff --git a/backend/__init__.py b/backend/__init__.py index 1b16036..dc5c098 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -166,10 +166,13 @@ def chat_message(sid, msg): if msg[0] == '/': if '/addbot' in msg and not ses.game.started: if len(msg.split()) > 1: - for _ in range(int(msg.split()[1])): - ses.game.add_player(Player(f'AI_{random.randint(0,1000)}', 'bot', sio, bot=True)) + # for _ in range(int(msg.split()[1])): + # ses.game.add_player(Player(f'AI_{random.randint(0,1000)}', 'bot', sio, bot=True)) + sio.emit('chat_message', room=ses.game.name, data={'color': f'red','text':f'Only 1 bot at the time'}) else: - ses.game.add_player(Player(f'AI_{random.randint(0,1000)}', 'bot', sio, bot=True)) + bot = Player(f'AI_{random.randint(0,1000)}', 'bot', sio, bot=True) + ses.game.add_player(bot) + bot.bot_spin() elif '/removebot' in msg and not ses.game.started: if any([p.is_bot for p in ses.game.players]): [p for p in ses.game.players if p.is_bot][-1].disconnect() @@ -260,7 +263,7 @@ def chat_message(sid, msg): sio.emit('chat_message', room=sid, data={'color': f'','text':f'info: {ses.__dict__}'}) elif '/mebot' in msg: ses.is_bot = not ses.is_bot - ses.notify_self() + ses.bot_spin() else: sio.emit('chat_message', room=sid, data={'color': f'','text':f'{msg} COMMAND NOT FOUND'}) else: diff --git a/backend/bang/game.py b/backend/bang/game.py index e26673e..738d4ee 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -369,10 +369,12 @@ class Game: if player in self.spectators: self.spectators.remove(player) return + if player.is_bot and not self.started: + player.game = None if self.disconnect_bot and self.started: player.is_bot = True eventlet.sleep(15) # he may reconnect - player.notify_self() + player.bot_spin() else: self.player_death(player=player, disconnected=True) # else: @@ -488,6 +490,8 @@ class Game: print('resetting lobby') self.players.extend(self.spectators) self.spectators = [] + for bot in [p for p in self.players if p.is_bot]: + bot.game = None self.players = [p for p in self.players if not p.is_bot] print(self.players) self.started = False diff --git a/backend/bang/players.py b/backend/bang/players.py index 10070e9..af31300 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -199,7 +199,6 @@ class Player: ser.pop('sid') ser.pop('on_pick_cb') ser.pop('on_failed_response_cb') - # ser.pop('expected_response') ser.pop('attacker') if self.attacker: ser['attacker'] = self.attacker.name @@ -213,22 +212,23 @@ class Player: self.sio.emit('self', room=self.sid, data=json.dumps( ser, default=lambda o: o.__dict__)) self.game.player_death(self) - elif not self.is_bot: - self.sio.emit('self_vis', room=self.sid, data=json.dumps( - self.game.get_visible_players(self), default=lambda o: o.__dict__)) - if not self.is_bot: - self.sio.emit('self', room=self.sid, data=json.dumps( - ser, default=lambda o: o.__dict__)) - self.game.notify_all() - else: - self.game.notify_all() - self.bot_logic() - self.game.notify_all() + if self.game: # 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.sio.emit('self', room=self.sid, data=json.dumps( + ser, default=lambda o: o.__dict__)) + self.game.notify_all() + + def bot_spin(self): + while self.is_bot and self.game != None and not self.game.shutting_down: + eventlet.sleep(uniform(self.game.bot_speed/2-0.1, self.game.bot_speed)) + if self.lives > 0 or self.is_ghost: + self.bot_logic() def bot_logic(self): if self.game.shutting_down: return if self.pending_action != None and self.pending_action != PendingAction.WAIT: - eventlet.sleep(uniform(self.game.bot_speed/2-0.1, self.game.bot_speed)) + # eventlet.sleep(uniform(self.game.bot_speed/2-0.1, self.game.bot_speed)) + pass else: return if self.pending_action == PendingAction.PICK: diff --git a/frontend/src/components/Lobby.vue b/frontend/src/components/Lobby.vue index 3f1aa11..eb8ce58 100644 --- a/frontend/src/components/Lobby.vue +++ b/frontend/src/components/Lobby.vue @@ -48,7 +48,7 @@
- +
diff --git a/frontend/src/components/Player.vue b/frontend/src/components/Player.vue index 72f7334..621045b 100644 --- a/frontend/src/components/Player.vue +++ b/frontend/src/components/Player.vue @@ -66,6 +66,7 @@ export default { name: 'Player', props: { chooseCardFromPlayer: Function, + cancelChooseCardFromPlayer: Function, isEndingTurn: Boolean, cancelEndingTurn: Function, }, @@ -147,6 +148,9 @@ export default { this.chooseCardFromPlayer(self.target_p) } else if (this.pending_action == 5) { this.shouldChooseCard = true + } else { + this.cancelChooseCardFromPlayer() + this.shouldChooseCard = false } }, self_vis(vis) {