diff --git a/src/components/HeaderProgress.vue b/src/components/HeaderProgress.vue index 522f75c..a4803b6 100644 --- a/src/components/HeaderProgress.vue +++ b/src/components/HeaderProgress.vue @@ -60,8 +60,8 @@ async function onReceiveMessage(message) { audioManager.play("比赛结束", false); } else if (type === MESSAGETYPESV2.ShootResult) { if (melee.value && current.playerId !== user.value.id) return; - // 仅计用户自己的命中箭,并加上限防护,防止超过 totalShot(如重入时 currentShot 初始值偏高) - if (current.playerId === user.value.id && currentShot.value < totalShot.value) currentShot.value++; + // 直接使用后端返回的 myIndex(当前用户已射箭数),不在前端自增 + if (current.playerId === user.value.id) currentShot.value = current.myIndex ?? currentShot.value; if (message.shootData) { let key = []; key.push( diff --git a/src/pages/team-battle.vue b/src/pages/team-battle.vue index 56ae0b6..ffb55eb 100644 --- a/src/pages/team-battle.vue +++ b/src/pages/team-battle.vue @@ -196,9 +196,9 @@ function onBattleEnd() { function onNewRound(msg, prevRound) { showRoundTip.value = true; isFinalShoot.value = msg.current.goldRound; - // 决金箭轮每人只射一箭,重置箭数显示为 (0/1) + // 决金轮箭数不确定(平局后可能再加一箭),清零 totalShot 隐藏箭数显示 if (msg.current.goldRound) { - store.updateShotInfo(0, 1); + store.updateShotInfo(0, 0); } // 用传入的 prevRound(捕获时刻的旧轮次)展示结算 Tip,与进度条 currentRound 解耦 roundTipRound.value = prevRound; @@ -290,10 +290,9 @@ onShow(async () => { } else { if (result.status !== 0) { // 比赛进行中,从后端恢复箭数(测距阶段不展示) - if (result.shootNumber) { - // current.index 为 0 基的已射箭数(0=尚未射出),与 ShootResult 累加语义一致 - // 注意:不再 +1,避免重进时与后续 ShootResult 自增形成双重计数导致超出 totalShot - store.updateShotInfo(result.current?.index ?? 0, result.shootNumber); + // 决金轮不展示箭数;其余轮次使用后端 myIndex 恢复已射箭数 + if (result.shootNumber && !result.current?.goldRound) { + store.updateShotInfo(result.current?.myIndex ?? 0, result.shootNumber); } } else { // 测距阶段重置箭数,防止 ImmediateWatcher 读取 Pinia 保留的旧值