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")}}
+ {
+ this.$socket.emit('chat_message', '/set_chars 1');
+ e.preventDefault();
+ }
+ "
+ />
+ {
+ this.$socket.emit('chat_message', '/set_chars 2');
+ e.preventDefault();
+ }
+ "
+ />
+ {
+ this.$socket.emit('chat_message', '/set_chars 3');
+ e.preventDefault();
+ }
+ "
+ />
+ {
+ this.$socket.emit('chat_message', '/set_chars 4');
+ e.preventDefault();
+ }
+ "
+ />