提交 16ed8fb7 authored 作者: lidongxu's avatar lidongxu

修复大屏幕队伍人员名字不对的问题

上级 1064c573
......@@ -148,14 +148,16 @@ function _dispatch(event, data) {
/**
* 某个玩家游戏结束(正常结束/泡泡压底)
* data: { roomId, scores: {playerId: score, ...}, playerId, nickname }
* data: { roomId, scores: {playerId: score, ...}, nicknames: {playerId: nickname, ...}, playerId, nickname }
*/
case 'room:gameOver': {
console.log('[Socket] room:gameOver', data)
// 处理所有玩家的分数(新格式)
if (data?.scores) {
Object.entries(data.scores).forEach(([pid, score]) => {
setPlayerGameOver(Number(pid), score, data.nickname)
// 使用对应玩家的昵称,如果没有则使用广播中的昵称
const playerNickname = data.nicknames?.[pid] || data.nickname
setPlayerGameOver(Number(pid), score, playerNickname)
})
} else if (data?.playerId !== undefined) {
// 兼容旧格式:单个玩家分数
......
......@@ -254,10 +254,12 @@ function registerRoomHandlers(ws, { broadcastToRoom, joinRoom, leaveAllRooms, ro
// 广播当前收集到的分数给所有人(让客户端可以实时显示)
const scoresObj = {};
const nicknamesObj = {};
for (const [pid, data] of roomScores) {
scoresObj[pid] = data.score;
nicknamesObj[pid] = data.nickname;
}
broadcastToRoom(roomId, 'room:gameOver', { roomId, scores: scoresObj, playerId, nickname });
broadcastToRoom(roomId, 'room:gameOver', { roomId, scores: scoresObj, nicknames: nicknamesObj, playerId, nickname });
// 如果所有玩家都已上报分数,清理收集表
if (reportedPlayers >= totalPlayers) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论