@@ -68,18 +68,35 @@ const lobbyInfoAction = (client: Client) => {
6868 client . lobby ?. broadcastLobbyInfo ( ) ;
6969} ;
7070
71+ const readyLobbyAction = ( client : Client ) => {
72+ client . isReadyLobby = true ;
73+ client . lobby ?. broadcastLobbyInfo ( ) ;
74+ }
75+
76+ const unreadyLobbyAction = ( client : Client ) => {
77+ client . isReadyLobby = false ;
78+ client . lobby ?. broadcastLobbyInfo ( ) ;
79+ }
80+
7181const keepAliveAction = ( client : Client ) => {
7282 // Send an ack back to the received keepAlive
7383 client . sendAction ( { action : "keepAliveAck" } ) ;
7484} ;
7585
7686const startGameAction = ( client : Client ) => {
7787 const lobby = client . lobby ;
88+
7889 // Only allow the host to start the game
7990 if ( ! lobby || lobby . host ?. id !== client . id ) {
8091 return ;
8192 }
8293
94+ // Only start the game if guest is ready
95+ // TODO: Uncomment this when Client ready is released in the mod
96+ // if (!lobby.guest?.isReadyLobby) {
97+ // return;
98+ // }
99+
83100 const lives = lobby . options . starting_lives
84101 ? Number . parseInt ( lobby . options . starting_lives )
85102 : GameModes [ lobby . gameMode ] . startingLives ;
@@ -89,8 +106,14 @@ const startGameAction = (client: Client) => {
89106 deck : "c_multiplayer_1" ,
90107 seed : lobby . options . different_seeds ? undefined : generateSeed ( ) ,
91108 } ) ;
109+
92110 // Reset players' lives
93111 lobby . setPlayersLives ( lives ) ;
112+
113+ // Unready guest for next game
114+ if ( lobby . guest ) {
115+ lobby . guest . isReadyLobby = false ;
116+ }
94117} ;
95118
96119const readyBlindAction = ( client : Client ) => {
@@ -494,6 +517,8 @@ export const actionHandlers = {
494517 joinLobby : joinLobbyAction ,
495518 lobbyInfo : lobbyInfoAction ,
496519 leaveLobby : leaveLobbyAction ,
520+ readyLobby : readyLobbyAction ,
521+ unreadyLobby : unreadyLobbyAction ,
497522 keepAlive : keepAliveAction ,
498523 startGame : startGameAction ,
499524 readyBlind : readyBlindAction ,
0 commit comments