Add server logging for eliminations and garbage transfers
- Log elimination reason: board full, garbage collision, garbage overflow, disconnect - Log garbage transfers: who cleared rows, how many, and recipients - Log when no opponents available to send garbage Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+26
-8
@@ -293,13 +293,13 @@ io.on('connection', (socket) => {
|
||||
socket.on('disconnect', () => {
|
||||
const player = lobby.players.get(socket.id);
|
||||
if (player) {
|
||||
console.log(`${player.name} disconnected (${lobby.players.size - 1} remaining)`);
|
||||
|
||||
if (lobby.gameStarted) {
|
||||
player.eliminated = true;
|
||||
console.log(`[ELIMINATION] ${player.name} eliminated - player disconnected during game`);
|
||||
broadcastState();
|
||||
checkGameOver();
|
||||
}
|
||||
console.log(`${player.name} disconnected (${lobby.players.size - 1} remaining)`);
|
||||
|
||||
lobby.players.delete(socket.id);
|
||||
|
||||
@@ -418,7 +418,11 @@ function lockPiece(player) {
|
||||
|
||||
const rowsCleared = clearRows(player);
|
||||
|
||||
if (!spawnPiece(player)) player.eliminated = true;
|
||||
const spawnResult = spawnPiece(player);
|
||||
if (!spawnResult) {
|
||||
player.eliminated = true;
|
||||
console.log(`[ELIMINATION] ${player.name} eliminated - piece could not spawn (board full at y=${player.currentPiece?.y})`);
|
||||
}
|
||||
|
||||
// Reset canHold for the new piece
|
||||
player.canHold = true;
|
||||
@@ -452,26 +456,40 @@ function clearRows(player) {
|
||||
function sendGarbage(sender, rowsCleared) {
|
||||
// Number of garbage rows equals number of lines cleared
|
||||
const opponents = Array.from(lobby.players.values()).filter(p => p.id !== sender.id && !p.eliminated);
|
||||
if (opponents.length === 0) return;
|
||||
if (opponents.length === 0) {
|
||||
console.log(`[GARBAGE] ${sender.name} cleared ${rowsCleared} row(s) but no opponents to send garbage to`);
|
||||
return;
|
||||
}
|
||||
|
||||
const garbageLog = [];
|
||||
for (let i = 0; i < rowsCleared; i++) {
|
||||
const target = opponents[Math.floor(Math.random() * opponents.length)];
|
||||
addGarbageToPlayer(target);
|
||||
garbageLog.push(target.name);
|
||||
addGarbageToPlayer(target, sender.name);
|
||||
}
|
||||
|
||||
console.log(`[GARBAGE] ${sender.name} cleared ${rowsCleared} row(s) -> sent garbage to: ${garbageLog.join(', ')}`);
|
||||
}
|
||||
|
||||
function addGarbageToPlayer(player) {
|
||||
function addGarbageToPlayer(player, senderName) {
|
||||
// Remove top row and add garbage to bottom
|
||||
player.board.shift();
|
||||
const garbageRow = Array(BOARD_WIDTH).fill(GARBAGE_COLOR);
|
||||
garbageRow[Math.floor(Math.random() * BOARD_WIDTH)] = 0;
|
||||
const gap = Math.floor(Math.random() * BOARD_WIDTH);
|
||||
garbageRow[gap] = 0;
|
||||
player.board.push(garbageRow);
|
||||
|
||||
// Push current piece up by 1 row if it exists (y decreases when moving up)
|
||||
if (player.currentPiece) {
|
||||
const oldY = player.currentPiece.y;
|
||||
player.currentPiece.y--;
|
||||
// Eliminate if the piece is pushed above the board or collides
|
||||
if (player.currentPiece.y < 0 || !isValidPosition(player.currentPiece, player.currentPiece.x, player.currentPiece.y, player.board)) {
|
||||
if (player.currentPiece.y < 0) {
|
||||
player.eliminated = true;
|
||||
console.log(`[ELIMINATION] ${player.name} eliminated by ${senderName} - piece pushed above board (y=${oldY} -> ${player.currentPiece.y})`);
|
||||
} else if (!isValidPosition(player.currentPiece, player.currentPiece.x, player.currentPiece.y, player.board)) {
|
||||
player.eliminated = true;
|
||||
console.log(`[ELIMINATION] ${player.name} eliminated by ${senderName} - piece collision after garbage (piece at x=${player.currentPiece.x}, y=${player.currentPiece.y})`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user