+
+ Resultado de Misión
+
+
+
{votes.map((vote, idx) => (
{vote ? '✓' : '✗'}
))}
-
Procesando resultado...
+
+
+ Analizando resultado estratégico...
+
);
}
diff --git a/server/src/index.ts b/server/src/index.ts
index 4bde9ca..5d364d6 100644
--- a/server/src/index.ts
+++ b/server/src/index.ts
@@ -149,18 +149,18 @@ io.on('connection', (socket) => {
}
});
- // 2.3 FINALIZAR ROLL CALL -> PRIMER TURNO DE JUEGO (TEAM_BUILDING)
+ // 2.3 FINALIZAR ROLL CALL -> PRIMER TURNO DE JUEGO
socket.on('finish_roll_call', ({ roomId }) => {
const game = games[roomId];
if (game && game.hostId === socket.id && game.state.phase === 'roll_call') {
- // Ir a VOTE_LEADER (ya que startGame lo inicializa a VOTE_LEADER en el modelo, y nextLeader tambien)
- // Solo debemos asegurarnos que el GameState se sincronice.
- if (game.startGame()) {
- io.to(roomId).emit('game_state', game.state);
- }
+ // ERROR CORREGIDO: No llamar a startGame() de nuevo porque re-baraja los roles.
+ // Simplemente avanzamos a la fase de votación de líder que ya estaba configurada.
+ game.state.phase = 'vote_leader' as any;
+ io.to(roomId).emit('game_state', game.state);
}
});
+
// 2.4 VOTAR LÍDER
socket.on('vote_leader', ({ roomId, approve }) => {
const game = games[roomId];
@@ -200,12 +200,14 @@ io.on('connection', (socket) => {
// 5.1 FINALIZAR REVELACIÓN DE CARTAS
socket.on('finish_reveal', ({ roomId }) => {
const game = games[roomId];
- if (game && game.hostId === socket.id && game.state.phase === 'mission_reveal') {
+ // Permitir a cualquiera avanzar para evitar bloqueos
+ if (game && game.state.phase === 'mission_reveal') {
game.finishReveal();
io.to(roomId).emit('game_state', game.state);
}
});
+
// 5.2 FINALIZAR PANTALLA DE RESULTADO
socket.on('finish_mission_result', ({ roomId }) => {
const game = games[roomId];