fixed duplicated turn
This commit is contained in:
parent
b197a4df81
commit
efced88876
1 changed files with 13 additions and 4 deletions
17
server.js
17
server.js
|
|
@ -910,13 +910,14 @@ io.on('connection', (socket) => {
|
||||||
board.version = (board.version || 0) + 1;
|
board.version = (board.version || 0) + 1;
|
||||||
|
|
||||||
// If the player was granted a free move by playing a card just now (room._freeMoveFor), consume it
|
// If the player was granted a free move by playing a card just now (room._freeMoveFor), consume it
|
||||||
// and treat it like a consumed 'double_move' (i.e. do NOT flip the turn). This allows the player to
|
// and mark that we should end the turn after this move. We DO NOT treat it like a 'double_move' —
|
||||||
// perform a single free piece move after playing a card without consuming their main turn.
|
// instead it is the player's one move for the turn and should cause normal end-of-turn bookkeeping.
|
||||||
let consumedDoubleMove = false;
|
let consumedDoubleMove = false;
|
||||||
|
let freeMoveConsumed = false;
|
||||||
try{
|
try{
|
||||||
if(room && room._freeMoveFor && room._freeMoveFor === senderId){
|
if(room && room._freeMoveFor && room._freeMoveFor === senderId){
|
||||||
// consume the free-move token
|
// consume the free-move token and remember to end the turn after this move
|
||||||
consumedDoubleMove = true;
|
freeMoveConsumed = true;
|
||||||
try{ delete room._freeMoveFor; }catch(_){ room._freeMoveFor = null; }
|
try{ delete room._freeMoveFor; }catch(_){ room._freeMoveFor = null; }
|
||||||
try{ io.to(room.id).emit('card:free_move_consumed', { roomId: room.id, playerId: senderId }); }catch(_){ }
|
try{ io.to(room.id).emit('card:free_move_consumed', { roomId: room.id, playerId: senderId }); }catch(_){ }
|
||||||
}
|
}
|
||||||
|
|
@ -1172,6 +1173,14 @@ io.on('connection', (socket) => {
|
||||||
// drawing consumes the player's turn: flip turn and decrement per-turn effects
|
// drawing consumes the player's turn: flip turn and decrement per-turn effects
|
||||||
// advance board version
|
// advance board version
|
||||||
board.version = (board.version || 0) + 1;
|
board.version = (board.version || 0) + 1;
|
||||||
|
|
||||||
|
// If the move consumed a free-move granted by a card, perform end-of-turn bookkeeping now
|
||||||
|
if(freeMoveConsumed){
|
||||||
|
const moved = { playerId: senderId, from, to };
|
||||||
|
try{ io.to(roomId).emit('move:moved', moved); }catch(_){ }
|
||||||
|
try{ endTurnAfterCard(room, senderId); }catch(e){ try{ sendRoomUpdate(room); }catch(_){ } }
|
||||||
|
return cb && cb({ ok: true, moved });
|
||||||
|
}
|
||||||
// flip turn
|
// flip turn
|
||||||
board.turn = (board.turn === 'w') ? 'b' : 'w';
|
board.turn = (board.turn === 'w') ? 'b' : 'w';
|
||||||
// decrement remainingTurns for time-limited effects that belong to the player who just finished their turn
|
// decrement remainingTurns for time-limited effects that belong to the player who just finished their turn
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue