update:新增乱斗语音,排位赛界面新增统计

This commit is contained in:
2026-11-06 10:29:48 +08:00
parent 419cefd00e
commit 4435553c60
8 changed files with 324 additions and 35 deletions
+21 -2
View File
@@ -9,6 +9,7 @@ import {
getServerMessageTypeName,
} from "@/utils/matchProtocol";
import { MESSAGETYPESV2 } from "@/constants";
import meleeCompletionTracker from "@/utils/meleeCompletionAudio";
import {
getDirectionText,
getDistanceCheckAudioKey,
@@ -597,7 +598,10 @@ function getAckAudioKeys(message, businessMessage) {
stabilityMilestoneAudioKey,
].filter(Boolean);
}
return getShootResultAudioKeys(businessMessage?.shootData);
return [
...getShootResultAudioKeys(businessMessage?.shootData),
businessMessage?.meleeCompletionAudioKey,
].filter(Boolean);
case ServerMessageType.SERVER_MSG_MATCH_END:
return ["比赛结束"];
case ServerMessageType.SERVER_MSG_TIMEOUT:
@@ -1001,7 +1005,7 @@ function queueAckAfterAudio(message, businessMessage) {
task.expectedAudioKey
);
completeAckTask(task);
}, ACK_AUDIO_TIMEOUT_MS);
}, businessMessage?.meleeCompletionAudioKey ? 20000 : ACK_AUDIO_TIMEOUT_MS);
pendingAcks.push(task);
console.log(
`[match-ws] ${actionLabel} queued until audioEnded`,
@@ -1064,6 +1068,21 @@ function handleMessage(data) {
}
// 阈值事件必须先于 ACK 判断生成,确保无 sequence 的状态推送也能播放。
attachStabilityAudioContext(message, businessMessage);
if (businessMessage && isMeleeMessage(message, businessMessage)) {
const info = {
...businessMessage,
mode: getCurrentMode(message, businessMessage),
};
if (businessMessage.type === MESSAGETYPESV2.ShootResult) {
businessMessage.meleeCompletionAudioKey =
meleeCompletionTracker.getShotAudio(info, currentContext?.userId);
} else {
// 中场/结束消息即使不带完整成绩,也关闭已经结束的半场。
if (businessMessage.type === MESSAGETYPESV2.HalfRest) info.status = 3;
if (businessMessage.type === MESSAGETYPESV2.BattleEnd) info.status = 2;
meleeCompletionTracker.observe(info, currentContext?.userId);
}
}
queueAckAfterAudio(message, businessMessage);
emitBusinessMessage(businessMessage);
}