提交 8eb3a4a9 authored 作者: lidongxu's avatar lidongxu

修复:尝试等待其他玩家但是实际都结束的问题

上级 f10eea57
...@@ -252,10 +252,6 @@ function registerRoomHandlers(ws, { broadcastToRoom, joinRoom, leaveAllRooms, ro ...@@ -252,10 +252,6 @@ function registerRoomHandlers(ws, { broadcastToRoom, joinRoom, leaveAllRooms, ro
_clearRoomTimer(roomId); _clearRoomTimer(roomId);
await _finishSession(ws, roomId, sessionId, score); await _finishSession(ws, roomId, sessionId, score);
await prisma.room.update({
where: { roomId },
data: { status: 'finished' },
});
// 收集该玩家的分数和队伍 // 收集该玩家的分数和队伍
if (!gameOverScores.has(roomId)) { if (!gameOverScores.has(roomId)) {
...@@ -283,9 +279,24 @@ function registerRoomHandlers(ws, { broadcastToRoom, joinRoom, leaveAllRooms, ro ...@@ -283,9 +279,24 @@ function registerRoomHandlers(ws, { broadcastToRoom, joinRoom, leaveAllRooms, ro
} }
broadcastToRoom(roomId, 'room:gameOver', { roomId, scores: scoresObj, nicknames: nicknamesObj, teams: teamsObj, playerId, nickname }); broadcastToRoom(roomId, 'room:gameOver', { roomId, scores: scoresObj, nicknames: nicknamesObj, teams: teamsObj, playerId, nickname });
// 如果所有玩家都已上报分数,清理收集表 // 广播玩家完成进度给所有人(broadcastToRoom 不传 excludeWs 时包含发送者)
const progressPayload = { roomId, finishedCount: reportedPlayers, totalCount: totalPlayers, playerId };
broadcastToRoom(roomId, 'room:playerFinished', progressPayload);
// 如果所有玩家都已上报分数,广播 allFinished 并清理
if (reportedPlayers >= totalPlayers) { if (reportedPlayers >= totalPlayers) {
console.log(`[Room] 所有玩家分数收集完成 roomId=${roomId}`); console.log(`[Room] 所有玩家分数收集完成 roomId=${roomId}`);
// 广播全员完成事件(含最终分数),通知客户端显示结果
const allFinishedPayload = { roomId, scores: scoresObj, nicknames: nicknamesObj, teams: teamsObj };
broadcastToRoom(roomId, 'room:allFinished', allFinishedPayload);
// 房间状态标记为 finished(所有玩家都完成后才更新)
await prisma.room.update({
where: { roomId },
data: { status: 'finished' },
});
gameOverScores.delete(roomId); gameOverScores.delete(roomId);
} }
} catch (err) { } catch (err) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论