diff --git a/public/waiting.html b/public/waiting.html index ca63526..c16b020 100644 --- a/public/waiting.html +++ b/public/waiting.html @@ -104,8 +104,8 @@ socket.on('connect', ()=>{ log('socket connecté', socket.id); }); socket.on('room:update', (data)=>{ - console.log('room:update', data); - statusEl.textContent = data.status || '-'; + console.log('room:update', data); + if(statusEl) statusEl.textContent = data.status || '-'; const count = (data.players||[]).length; playerCountEl.textContent = `${count}/2`; // remember hostId from server updates; if missing, fall back to first player diff --git a/server.js b/server.js index a134cf6..587eb27 100644 --- a/server.js +++ b/server.js @@ -292,7 +292,7 @@ function buildDefaultDeck(){ ], [ 'Jouer deux fois', - 'Le joueur peut déplacer deux pièces', + 'Le joueur peut déplacer deux pièces. Ne peut pas capturer pendant son deuxième tour', 'double' ], [ @@ -361,7 +361,7 @@ function buildDefaultDeck(){ 'sniper' ], [ - 'Inversion', + 'Échange', "Échange la position d'une pièce avec une pièce adverse.\n\nCompte comme un mouvement", 'inversion' ], @@ -995,6 +995,18 @@ io.on('connection', (socket) => { } }catch(_){ } + // Second move of "double" + try{ + const effects = room.activeCardEffects || []; + const dbl = effects.find(e => e && (e.type === 'double') && e.playerId === senderId); + if(dbl && typeof dbl.remainingMoves === 'number' && dbl.remainingMoves === 1){ + const occupant = (pieces || []).find(p => p.square === to); + if(occupant){ + return cb && cb({ error: 'capture_forbidden_double', message: "Vous ne pouvez pas capturer lors du deuxième mouvement de 'Jouer deux fois'." }); + } + } + }catch(_){ } + const targetIndex = pieces.findIndex(p => p.square === to); let sniperTriggered = false; let capturedPieceForReactions = null; @@ -1163,7 +1175,7 @@ io.on('connection', (socket) => { room.activeCardEffects = room.activeCardEffects || []; for(let i = room.activeCardEffects.length - 1; i >= 0; i--){ const e = room.activeCardEffects[i]; - if(e.type === 'double' && e.playerId === senderId){ + if((e.type === 'double') && e.playerId === senderId){ const newRemaining = (typeof e.remainingMoves === 'number') ? (e.remainingMoves - 1) : ((e.remainingMoves || 2) - 1); if(newRemaining > 0){ e.remainingMoves = newRemaining; @@ -1178,7 +1190,7 @@ io.on('connection', (socket) => { break; } } - }catch(err){ console.error('double_move consume error', err); } + }catch(err){ console.error('double move consume error', err); } if(!consumedDoubleMove){ board.turn = (board.turn === 'w') ? 'b' : 'w'; @@ -2203,11 +2215,11 @@ io.on('connection', (socket) => { else if(cardId === 'double'){ try{ room.activeCardEffects = room.activeCardEffects || []; - const effect = { id: played.id, type: 'double_move', playerId: senderId, ts: Date.now(), remainingMoves: (payload && payload.moves) || 2 }; + const effect = { id: played.id, type: 'double', playerId: senderId, ts: Date.now(), remainingMoves: (payload && payload.moves) || 2 }; room.activeCardEffects.push(effect); try{ io.to(room.id).emit('card:effect:applied', { roomId: room.id, effect }); }catch(_){ } - played.payload = Object.assign({}, payload, { applied: 'double_move', moves: effect.remainingMoves }); - }catch(e){ console.error('double_move effect error', e); } + played.payload = Object.assign({}, payload, { applied: 'double', moves: effect.remainingMoves }); + }catch(e){ console.error('double effect error', e); } } // tous les même