diff --git a/backend/bang/game.py b/backend/bang/game.py index 5a5c9c8..632ea17 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -246,6 +246,7 @@ class Game: "expansions": self.expansions, "available_expansions": self.available_expansions, "is_replay": self.is_replay, + "characters_to_distribute": self.characters_to_distribute, }, ) G.sio.emit("debug", room=self.name, data=self.debug) @@ -293,14 +294,14 @@ class Game: return if player in self.players or len(self.players) >= 10: return - if len(self.players) > 7: - if "dodge_city" not in self.expansions: - self.expansions.append("dodge_city") player.join_game(self) if player.is_admin(): self.feature_flags() self.players.append(player) - print(f"{self.name}: Added player {player.name} to game") + if len(self.players) > 7: + if "dodge_city" not in self.expansions: + self.expansions.append("dodge_city") + print(f"{self.name}: Added player {player.name} to game; {len(self.players)=}") self.notify_room() G.sio.emit("chat_message", room=self.name, data=f"_joined|{player.name}") @@ -346,9 +347,10 @@ class Game: def choose_characters(self): n = self.characters_to_distribute - char_cards = self.rng.sample( - characters.all_characters(self.expansions), len(self.players) * n - ) + all_chars = characters.all_characters(self.expansions) + if len(all_chars) // len(self.players) < n: + n = len(all_chars) // len(self.players) + char_cards = self.rng.sample(all_chars, len(self.players) * n) for i, player in enumerate(self.players): player.set_available_character(char_cards[i * n : i * n + n]) diff --git a/backend/server.py b/backend/server.py index 947fdf1..4afd2ad 100644 --- a/backend/server.py +++ b/backend/server.py @@ -742,6 +742,12 @@ def chat_message(sid, msg, pl=None): if "/togglecomp" in msg and ses.game: ses.game.toggle_competitive() return + elif "/set_chars" in msg and not ses.game.started: + cmd = msg.split() + if len(cmd) == 2 and int(cmd[1]) > 0: + ses.game.characters_to_distribute = int(cmd[1]) + ses.game.notify_room() + return if "/debug" in msg: cmd = msg.split() if ( @@ -775,10 +781,6 @@ def chat_message(sid, msg, pl=None): "text": "debug mode is not active, only the owner of the room can enable it with /debug", }, ) - elif "/set_chars" in msg and not ses.game.started: - cmd = msg.split() - if len(cmd) == 2 and int(cmd[1]) > 0: - ses.game.characters_to_distribute = int(cmd[1]) elif "/suicide" in msg and ses.game.started and ses.lives > 0: ses.lives = 0 ses.notify_self() diff --git a/frontend/src/components/Lobby.vue b/frontend/src/components/Lobby.vue index b3b9062..9b9ddd8 100644 --- a/frontend/src/components/Lobby.vue +++ b/frontend/src/components/Lobby.vue @@ -220,6 +220,57 @@ style="margin-top: 5px; margin-bottom: 3px" >{{ $t("mod_comp") }} +
+
+ {{$t("characters_to_distribute")}} + + + +

{{ $t("bots") }}

{ return { name: x.name, @@ -836,6 +889,13 @@ export default { justify-content: space-evenly; margin-bottom: 12pt; } +.small-btn { + min-width: 28pt; +} +.small-btn.active { + color: var(--bg-color); + background: var(--font-color); +} #admin-status { position: absolute; width: 100%; diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index 1b9082d..501b041 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -19,6 +19,7 @@ "spectate_lobbies": "Spectate ongoing games:", "no_lobby_available": "No lobbies available", "create_lobby": "Open a lobby:", + "characters_to_distribute": "Characters to distribute: ", "lobby_name": "Name:", "leave_room": "Leave lobby", "warning": "Warning!", diff --git a/frontend/src/i18n/it.json b/frontend/src/i18n/it.json index a99182a..7e6df44 100644 --- a/frontend/src/i18n/it.json +++ b/frontend/src/i18n/it.json @@ -19,6 +19,7 @@ "spectate_lobbies": "Osserva le partite in corso:", "no_lobby_available": "Nessuna stanza disponibile", "create_lobby": "Crea una stanza:", + "characters_to_distribute": "Personaggi da distribuire: ", "lobby_name": "Nome:", "leave_room": "Esci dalla stanza", "warning": "Attenzione!",