From e7f073ed7c2f14b316dbc7eb93cb147f4e4edb36 Mon Sep 17 00:00:00 2001 From: zhangyibo95 <690096405@qq.com> Date: Fri, 14 Aug 2026 17:13:23 +0800 Subject: [PATCH] =?UTF-8?q?update:=E4=B8=AA=E4=BA=BA=E8=AE=AD=E7=BB=83?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis.js | 15 +- src/audioManager.js | 9 ++ src/components/BowTarget.vue | 16 +- src/components/HeaderProgress.vue | 4 +- src/components/ShootProgress.vue | 4 +- src/components/TargetCanvas.vue | 153 ++++++++++++++++-- .../TrainingScorePanel.vue} | 46 +++++- src/matchWebsocket.js | 4 +- src/mock/index.js | 104 ------------ src/mock/trainingDifficulty.js | 113 ------------- src/pages/audio-test.vue | 20 ++- src/pages/mine-bow-data.vue | 98 +++++++++-- src/pages/my-growth.vue | 25 ++- src/pages/team-battle/index.vue | 6 +- src/pages/training/components/BowTarget.vue | 5 + .../training/components/ShootProgress.vue | 4 +- .../training/components/TestDistance.vue | 11 +- src/pages/training/difficulty.vue | 27 ++-- src/pages/training/index.vue | 18 +-- src/pages/training/practise-one.vue | 111 +++++++++---- src/static/my-practise.png | Bin 21120 -> 22952 bytes src/static/training-home/img_22.png | Bin 28444 -> 27666 bytes src/util.js | 12 ++ src/utils/match.min.js | 2 +- src/utils/matchProtocol.js | 18 ++- 25 files changed, 481 insertions(+), 344 deletions(-) rename src/{pages/training/components/ScorePanel2.vue => components/TrainingScorePanel.vue} (59%) delete mode 100644 src/mock/index.js delete mode 100644 src/mock/trainingDifficulty.js diff --git a/src/apis.js b/src/apis.js index 9651c7c..9f7f8bc 100644 --- a/src/apis.js +++ b/src/apis.js @@ -311,6 +311,13 @@ export const getPractiseAPI = async (id) => { return request("GET", `/user/practice/get?id=${id}`); }; +export const getPractiseDetailAPI = async (id) => { + return request( + "GET", + `/user/practice/detail?id=${encodeURIComponent(id)}` + ); +}; + export const createRoomAPI = (gameType, teamSize, targetType) => { return request("POST", "/user/createroom", { gameType, @@ -344,12 +351,12 @@ export const startRoomAPI = (number) => { return request("POST", "/user/room/start", {number}); }; -export const getPractiseResultListAPI = async (page = 1, page_size = 15) => { - const reuslt = await request( +export const getPractiseResultListAPI = async (page = 1, pageSize = 15) => { + const result = await request( "GET", - `/user/practice/list?page=${page}&page_size=${page_size}` + `/user/practice/mylist?page=${page}&pageSize=${pageSize}&status=0` ); - return reuslt.list; + return Array.isArray(result?.list) ? result.list : []; }; export const matchGameAPI = (match, gameType, teamSize) => { diff --git a/src/audioManager.js b/src/audioManager.js index 1bf8f31..35d9de5 100644 --- a/src/audioManager.js +++ b/src/audioManager.js @@ -52,6 +52,12 @@ export const audioFils = { "https://static.shelingxingqiu.com/attachment/2025-09-17/dcutzdrl5u0iromqhf.mp3", 射击无效: "https://static.shelingxingqiu.com/shootmini/static/audio/%E5%B0%84%E7%AE%AD%E6%97%A0%E6%95%88%E6%A3%80%E6%9F%A5%E8%B7%9D%E7%A6%BB%E5%92%8C%E9%9D%B6%E7%BA%B8.mp3", + "射箭无效,距离不足": + "https://static.shelingxingqiu.com/shootmini/static/audio/%E5%B0%84%E7%AE%AD%E6%97%A0%E6%95%88%EF%BC%8C%E8%B7%9D%E7%A6%BB%E4%B8%8D%E8%B6%B3.MP3", + "射箭无效,未识别到靶纸": + "https://static.shelingxingqiu.com/shootmini/static/audio/%E5%B0%84%E7%AE%AD%E6%97%A0%E6%95%88%EF%BC%8C%E6%9C%AA%E8%AF%86%E5%88%AB%E5%88%B0%E9%9D%B6%E7%BA%B8.MP3", + "射箭无效,靶纸错误": + "https://static.shelingxingqiu.com/shootmini/static/audio/%E5%B0%84%E7%AE%AD%E6%97%A0%E6%95%88%EF%BC%8C%E9%9D%B6%E7%BA%B8%E9%94%99%E8%AF%AF.mp3.MP3", 未上靶: "https://static.shelingxingqiu.com/attachment/2025-11-12/de6n45o3tsm1v4unam.mp3", "1环": @@ -117,6 +123,9 @@ const AUDIO_WARM_PRIORITY_KEYS = [ "轮到你了", "比赛结束", "射击无效", + "射箭无效,距离不足", + "射箭无效,未识别到靶纸", + "射箭无效,靶纸错误", "中场休息", "下半场开始", "决金箭轮", diff --git a/src/components/BowTarget.vue b/src/components/BowTarget.vue index f3801e6..ebd37d2 100644 --- a/src/components/BowTarget.vue +++ b/src/components/BowTarget.vue @@ -67,6 +67,10 @@ const props = defineProps({ type: Boolean, default: false, }, + enableShotEffect: { + type: Boolean, + default: true, + }, }); const pMode = ref(true); @@ -113,7 +117,13 @@ function hasShotPoint(shot) { } function shouldPlayShotEffect(shot) { - return props.isSvip && !!shot && Number(shot.ring) > 0 && hasShotPoint(shot); + return ( + props.enableShotEffect && + props.isSvip && + !!shot && + Number(shot.ring) > 0 && + hasShotPoint(shot) + ); } function clearTipTimer() { @@ -276,7 +286,7 @@ watch( const latestShot = props.scores[newLen - 1]; if (shouldPlayShotEffect(latestShot)) { void prepareShotEffect("red", latestShot, newLen - 1); - } else { + } else if (props.enableShotEffect) { shotEffectRequestGeneration += 1; pendingShotEffect.value = null; showShotTip("red", latestShot); @@ -301,7 +311,7 @@ watch( const latestShot = props.blueScores[newLen - 1]; if (shouldPlayShotEffect(latestShot)) { void prepareShotEffect("blue", latestShot, newLen - 1); - } else { + } else if (props.enableShotEffect) { shotEffectRequestGeneration += 1; pendingShotEffect.value = null; showShotTip("blue", latestShot); diff --git a/src/components/HeaderProgress.vue b/src/components/HeaderProgress.vue index 464d31d..b01472b 100644 --- a/src/components/HeaderProgress.vue +++ b/src/components/HeaderProgress.vue @@ -2,7 +2,7 @@ import { ref, watch, onMounted, onBeforeUnmount } from "vue"; import audioManager from "@/audioManager"; import { MESSAGETYPESV2 } from "@/constants"; -import { getDirectionText } from "@/util"; +import { getDirectionText, getInvalidShotAudioKey } from "@/util"; import useStore from "@/store"; import { storeToRefs } from "pinia"; @@ -91,7 +91,7 @@ async function onReceiveMessage(message) { title: "距离不足,无效", icon: "none", }); - audioManager.play("射击无效"); + audioManager.play(getInvalidShotAudioKey(shootData)); } } diff --git a/src/components/ShootProgress.vue b/src/components/ShootProgress.vue index 6f4f91c..cd0912b 100644 --- a/src/components/ShootProgress.vue +++ b/src/components/ShootProgress.vue @@ -2,7 +2,7 @@ import { ref, watch, onMounted, onBeforeUnmount, computed } from "vue"; import audioManager from "@/audioManager"; import { MESSAGETYPESV2 } from "@/constants"; -import { getDirectionText } from "@/util"; +import { getDirectionText, getInvalidShotAudioKey } from "@/util"; import useStore from "@/store"; import { storeToRefs } from "pinia"; @@ -174,7 +174,7 @@ async function onReceiveMessage(msg) { title: "距离不足,无效", icon: "none", }); - audioManager.play("射击无效"); + audioManager.play(getInvalidShotAudioKey(msg.shootData)); } } diff --git a/src/components/TargetCanvas.vue b/src/components/TargetCanvas.vue index f699158..fd3478a 100644 --- a/src/components/TargetCanvas.vue +++ b/src/components/TargetCanvas.vue @@ -1,8 +1,18 @@ diff --git a/src/pages/training/components/ScorePanel2.vue b/src/components/TrainingScorePanel.vue similarity index 59% rename from src/pages/training/components/ScorePanel2.vue rename to src/components/TrainingScorePanel.vue index fe96acd..30636f6 100644 --- a/src/pages/training/components/ScorePanel2.vue +++ b/src/components/TrainingScorePanel.vue @@ -10,6 +10,14 @@ const props = defineProps({ type: Number, default: 0, }, + trainingType: { + type: String, + default: "", + }, + recordMode: { + type: Boolean, + default: false, + }, }); const getDisplayText = (arrow = {}) => { @@ -18,15 +26,16 @@ const getDisplayText = (arrow = {}) => { return arrow.ringX ? "X" : String(arrow.ring); }; -const isLowScore = (arrow = {}) => { - if (!arrow || arrow.ringX) return false; - return Number(arrow.ring) < 6; +const isFailed = (arrow = {}) => { + if (!arrow) return false; + if (props.recordMode && props.trainingType !== "precision") return false; + return arrow.ok !== true; }; const displayArrows = computed(() => { const list = [...props.arrows]; // total 是达标箭数,不是实际射箭上限;训练中始终预留下一箭空框。 - list.push(null); + if (!props.recordMode) list.push(null); return list; }); @@ -39,10 +48,28 @@ const displayArrows = computed(() => { :key="index" class="score-card" > - + + {{ getDisplayText(arrow) }} @@ -87,6 +114,13 @@ const displayArrows = computed(() => { height: 56rpx; } +.score-result-icon { + position: relative; + z-index: 1; + width: 30rpx; + height: 30rpx; +} + .score-value { position: relative; z-index: 1; diff --git a/src/matchWebsocket.js b/src/matchWebsocket.js index dd86531..73ebe9c 100644 --- a/src/matchWebsocket.js +++ b/src/matchWebsocket.js @@ -9,7 +9,7 @@ import { getServerMessageTypeName, } from "@/utils/matchProtocol"; import { MESSAGETYPESV2 } from "@/constants"; -import { getDirectionText } from "@/util"; +import { getDirectionText, getInvalidShotAudioKey } from "@/util"; import { normalizeId, normalizeMatchInfo, @@ -378,7 +378,7 @@ function getAckAudioKeys(message, businessMessage) { case ServerMessageType.SERVER_MSG_CHECK: return getTestDistanceAudioKeys(businessMessage?.shootData); case ServerMessageType.SERVER_MSG_NOT_ENOUGH_DISTANCE: - return ["射击无效"]; + return [getInvalidShotAudioKey(businessMessage?.shootData)]; default: return []; } diff --git a/src/mock/index.js b/src/mock/index.js deleted file mode 100644 index c716202..0000000 --- a/src/mock/index.js +++ /dev/null @@ -1,104 +0,0 @@ -// 首页一周打卡展示数据,直接对应顶部 7 个日期卡片。 -export const trainingHomeWeekSchedule = [ - { - key: "mon", - label: "周一", - status: "done", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/done.png", - }, - { - key: "tue", - label: "周二", - status: "done", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/done.png", - }, - { - key: "wed", - label: "周三", - status: "missed", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/missed.png", - }, - { - key: "thu", - label: "周四", - status: "missed", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/missed.png", - }, - { - key: "fri", - label: "周五", - status: "done", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/done.png", - }, - { - key: "sat", - label: "周六", - status: "done", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/done.png", - }, - { - key: "sun", - label: "周日", - status: "missed", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/missed.png", - }, -]; - -// 首页统计卡数据,按设计稿从左到右展示。 -export const trainingHomeStats = [ - { key: "days", value: "12", unit: "天", label: "共训练" }, - { key: "shots", value: "112", unit: "支", label: "累计射箭" }, - { key: "hitRate", value: "30", unit: "%", label: "命中率" }, - { key: "endurance", value: "6", unit: "支/分钟", label: "耐力射击" }, - { key: "calories", value: "31W", unit: "卡路里", label: "共消耗" }, -]; - -// 雷达图区文案与数值配置。 -export const trainingHomeRadar = { - labels: ["基础", "精准", "力量", "节奏", "耐力"], - values: [5.5, 6.3, 10, 4.5, 6], - maxValue: 10, - surpassValue: '80%' -}; - -// 首页主推荐训练卡数据。 -export const trainingHomeFeatured = { - title: "基础训练", - progressText: "当前进度 LV7 >", -}; - -// 首页四个训练入口卡片数据。 -export const trainingHomeModes = [ - { - key: "endurance", - title: "耐力训练", - progressText: "当前进度 LV5 >", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/img_3.png", - recommended: true, - disabled: false, - }, - { - key: "precision", - title: "精准训练", - progressText: "当前进度 LV3 >", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/img_4.png", - recommended: false, - disabled: false, - }, - { - key: "rhythm", - title: "节奏训练", - progressText: "当前进度 LV6 >", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/img_5.png", - recommended: false, - disabled: false, - }, - { - key: "power", - title: "力量训练", - progressText: "Coming! LV10", - icon: "https://static.shelingxingqiu.com/shootmini/static/training-home/img_6.png", - recommended: false, - disabled: true, - }, -]; diff --git a/src/mock/trainingDifficulty.js b/src/mock/trainingDifficulty.js deleted file mode 100644 index f6bd42d..0000000 --- a/src/mock/trainingDifficulty.js +++ /dev/null @@ -1,113 +0,0 @@ -// 难度页当前用于保存“开始训练前上下文”的本地存储 key。 -export const trainingDifficultyStorageKey = "training-selection"; - -// 当前是页面联调用的模拟数据: -// 1. 总难度 20 级 -// 2. 已解锁到 Lv3 -// 3. 前三关展示不同完成进度 -const totalDifficultyLevel = 20; -const mockedUnlockedDifficultyId = "lv3"; -const mockedDifficultyProgressMap = { - lv1: 100, - lv2: 90, - lv3: 70, -}; - -const modeList = [ - { - key: "endurance", - title: "耐力训练", - }, - { - key: "precision", - title: "精准训练", - }, - { - key: "rhythm", - title: "节奏训练", - }, - { - key: "basic", - title: "基础训练", - }, - { - key: "power", - title: "力量训练", - }, - { - key: "focus", - title: "专注训练", - }, -]; - -const createDifficultyId = (level) => `lv${level}`; - -const createDifficultyLabel = (level) => `Lv${level}`; - -// 根据等级生成模拟文案,方便一次性扩展到更多关卡。 -const createDifficultySummary = (level) => { - return [ - `箭靶划分为${Math.min(1 + Math.floor((level - 1) / 5), 4)}个区域`, - `需${4 + level}次命中目标`, - `${100 + Math.floor((level - 1) / 2) * 10}秒内完成所有射击`, - "需使用20CM全环靶", - ]; -}; - -// 难度页的节点位置已经在页面内统一计算, -// 这里保留最核心的 id / label 即可,不再维护无效的 left / top / style 字段。 -const createDifficultyNode = (level) => { - return { - id: createDifficultyId(level), - label: createDifficultyLabel(level), - }; -}; - -const createDifficultyDetail = (level) => { - const id = createDifficultyId(level); - const label = createDifficultyLabel(level); - - return { - id, - label, - title: `${label}难度`, - summary: createDifficultySummary(level), - startText: "开始", - targetPaperType: "20CM全环靶", - }; -}; - -// 所有训练模式当前共用同一套难度定义。 -const sharedDifficultyNodes = Array.from( - { length: totalDifficultyLevel }, - (_, index) => createDifficultyNode(index + 1) -); - -const sharedDifficultyDetails = Object.fromEntries( - Array.from({ length: totalDifficultyLevel }, (_, index) => { - const detail = createDifficultyDetail(index + 1); - return [detail.id, detail]; - }) -); - -const createModeConfig = ({ key, title, reward = null }) => { - return { - key, - title, - nodes: sharedDifficultyNodes, - details: sharedDifficultyDetails, - activeDifficultyId: mockedUnlockedDifficultyId, - progressMap: mockedDifficultyProgressMap, - reward, - }; -}; - -// 难度页数据源入口: -// 页面通过 getTrainingDifficultyModeConfig(modeKey) 获取当前模式完整配置。 -export const trainingDifficultyModeMap = Object.fromEntries( - modeList.map((mode) => [mode.key, createModeConfig(mode)]) -); - -export const getTrainingDifficultyModeConfig = (modeKey) => { - return trainingDifficultyModeMap[modeKey] || trainingDifficultyModeMap.precision; -}; diff --git a/src/pages/audio-test.vue b/src/pages/audio-test.vue index 2bef875..31c6f55 100644 --- a/src/pages/audio-test.vue +++ b/src/pages/audio-test.vue @@ -9,17 +9,23 @@ const playAudio = (key) => { audioManager.play(key); }; +const onAudioLoaded = (key) => { + loaded.value = { + ...loaded.value, + [key]: true, + }; +}; + onMounted(() => { const loadedAudioKeys = uni.getStorageSync("loadedAudioKeys") || {}; loaded.value = loadedAudioKeys; - uni.$on("audioLoaded", (key) => { - loaded.value[key] = true; - }); + uni.$on("audioLoaded", onAudioLoaded); + void audioManager.initAudios(); }); onBeforeUnmount(() => { - uni.$off("audioLoaded"); + uni.$off("audioLoaded", onAudioLoaded); }); @@ -40,8 +46,10 @@ onBeforeUnmount(() => { {{ key }} - 未加载 - + {{ loaded[key] ? "已加载" : "未加载" }} + diff --git a/src/pages/mine-bow-data.vue b/src/pages/mine-bow-data.vue index 22a57cb..1217819 100644 --- a/src/pages/mine-bow-data.vue +++ b/src/pages/mine-bow-data.vue @@ -1,25 +1,70 @@ @@ -35,22 +80,29 @@ onLoad(async (options) => { --> + + {{ targetTypeText }} + {{ trainingTypeName }} + {{ difficultyText }} + - + {{ arrows.length }} 支箭,共 - {{ arrows.reduce((a, b) => a + b.ring, 0) }} + {{ totalRings }} - @@ -63,6 +115,20 @@ onLoad(async (options) => { justify-content: center; align-items: center; } +.practice-meta { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + color: #fff; + font-size: 26rpx; + font-weight: 600; + line-height: 40rpx; + padding: 16rpx 0; +} +.practice-meta > text + text { + margin-left: 24rpx; +} .header { display: flex; justify-content: space-between; diff --git a/src/pages/my-growth.vue b/src/pages/my-growth.vue index 5a2e3b8..35f4e3d 100644 --- a/src/pages/my-growth.vue +++ b/src/pages/my-growth.vue @@ -15,6 +15,25 @@ const selectedIndex = ref(0); const matchList = ref([]); const battleList = ref([]); const practiseList = ref([]); +const trainingTypeNameMap = Object.freeze({ + base: "基础训练", + endurance: "耐力训练", + precision: "精准训练", + rhythm: "节奏训练", +}); + +const getTrainingTypeName = (trainingType) => { + const normalizedType = String(trainingType || "").trim().toLowerCase(); + return trainingTypeNameMap[normalizedType] || "自由训练"; +}; + +const formatPractiseTime = (value) => { + const normalizedTime = String(value || "").trim(); + const matchedTime = normalizedTime.match( + /^(\d{4}-\d{2}-\d{2})[T\s](\d{2}:\d{2}:\d{2})/ + ); + return matchedTime ? `${matchedTime[1]} ${matchedTime[2]}` : normalizedTime; +}; const toMatchDetail = (id) => { uni.navigateTo({ @@ -81,7 +100,7 @@ onLoad((options) => { getPractiseDetail(item.id)" > {{ item.completed_arrows === 36 ? "耐力挑战" : "单组练习" }} - {{ item.createTime }}{{ getTrainingTypeName(item.trainingType) }} + {{ formatPractiseTime(item.createTime) }} diff --git a/src/pages/team-battle/index.vue b/src/pages/team-battle/index.vue index 65998e4..239cad1 100644 --- a/src/pages/team-battle/index.vue +++ b/src/pages/team-battle/index.vue @@ -20,7 +20,7 @@ import { MATCH_WS_STATE_EVENT, } from "@/matchWebsocket"; import { MESSAGETYPESV2 } from "@/constants"; -import { getDirectionText } from "@/util"; +import { getDirectionText, getInvalidShotAudioKey } from "@/util"; import { takeMatchReturnSnapshot } from "@/utils/matchReturn"; import audioManager, { AUDIO_INTERRUPTION_BEGIN_EVENT, @@ -1136,7 +1136,9 @@ async function runInvalidShotTask(task, runId) { title: "距离不足,无效", icon: "none", }); - await playAudioKeys("射击无效", { interrupt: false }); + await playAudioKeys(getInvalidShotAudioKey(task.message?.shootData), { + interrupt: false, + }); notifyMatchAudioAck(task); } diff --git a/src/pages/training/components/BowTarget.vue b/src/pages/training/components/BowTarget.vue index 550a43d..719a150 100644 --- a/src/pages/training/components/BowTarget.vue +++ b/src/pages/training/components/BowTarget.vue @@ -44,6 +44,10 @@ const props = defineProps({ type: Number, default: 0, }, + highlightRefreshToken: { + type: Number, + default: 0, + }, mode: { type: String, default: "solo", // solo 单排,team 双排 @@ -530,6 +534,7 @@ onBeforeUnmount(() => { :sectorCount="sectorCount" :activeSector="activeSector" :activeRing="activeRing" + :highlightRefreshToken="highlightRefreshToken" :showSectorLabels="showSectorLabels" /> diff --git a/src/pages/training/components/ShootProgress.vue b/src/pages/training/components/ShootProgress.vue index bba3816..7de4571 100644 --- a/src/pages/training/components/ShootProgress.vue +++ b/src/pages/training/components/ShootProgress.vue @@ -2,7 +2,7 @@ import { ref, watch, onMounted, onBeforeUnmount, computed } from "vue"; import audioManager from "@/audioManager"; import { MESSAGETYPESV2 } from "@/constants"; -import { getDirectionText } from "@/util"; +import { getDirectionText, getInvalidShotAudioKey } from "@/util"; import Avatar from "@/components/Avatar.vue"; import useStore from "@/store"; @@ -241,7 +241,7 @@ async function onReceiveMessage(msg) { title: "距离不足,无效", icon: "none", }); - audioManager.play("射击无效"); + audioManager.play(getInvalidShotAudioKey(msg.shootData)); } } diff --git a/src/pages/training/components/TestDistance.vue b/src/pages/training/components/TestDistance.vue index 2c43ade..75e893b 100644 --- a/src/pages/training/components/TestDistance.vue +++ b/src/pages/training/components/TestDistance.vue @@ -55,8 +55,13 @@ onBeforeUnmount(() => { async function onReceiveMessage(msg) { if (Array.isArray(msg)) return; if (msg.type === MESSAGETYPESV2.TestDistance) { - distance.value = Number((msg.shootData.distance / 100).toFixed(2)); - if (distance.value >= 5) audioManager.play("距离合格"); + const rawDistance = Number(msg.shootData?.distance); + distance.value = Number.isFinite(rawDistance) + ? Number((rawDistance / 100).toFixed(2)) + : 0; + if (rawDistance === 0) { + audioManager.play("未发现靶纸,请瞄准靶纸射箭"); + } else if (distance.value >= 5) audioManager.play("距离合格"); else audioManager.play("距离不足"); } } @@ -94,7 +99,7 @@ onBeforeUnmount(() => { 模拟射箭 - 当前靶子为{{ targetType }}cm全环靶,请更换靶子 + 当前靶纸为{{ targetType }}cm全环靶 当前距离{{ distance }} 已达到距离要求 diff --git a/src/pages/training/difficulty.vue b/src/pages/training/difficulty.vue index fb6b9d2..6320012 100644 --- a/src/pages/training/difficulty.vue +++ b/src/pages/training/difficulty.vue @@ -107,30 +107,27 @@ const createDifficultySummary = (item = {}) => { const timeLimit = toNumber(item.time_limit); const hitReq = toNumber(item.hit_req); const totalReq = toNumber(item.total_req); - const blocks = toNumber(item.blocks); const promoteCnt = toNumber(item.promote_cnt); - const timeText = timeLimit > 0 ? `${timeLimit}秒内完成` : "不限时完成"; + const shootingTimeText = + timeLimit > 0 ? `在${timeLimit}秒内进行射箭` : "不限时进行射箭"; + const enduranceTimeText = + timeLimit > 0 + ? `在${timeLimit}秒内完成${arrows}箭` + : `不限时完成${arrows}箭`; const promoteText = promoteCnt > 0 ? `完成${promoteCnt}次晋级` : ""; const summaryMap = { base: [ - desc || (hitReq > 0 ? `每箭命中${hitReq}环以上` : "上靶即可"), - [`${arrows}箭`, promoteText].filter(Boolean).join(" · "), + shootingTimeText, + `需要有${arrows}箭命中${hitReq}环内`, ], endurance: [ - desc || `${timeText}${arrows}箭`, - [`累计${totalReq}环`, promoteText].filter(Boolean).join(" · "), + enduranceTimeText, + `且累计环数大于${totalReq}环`, ], precision: [ - desc || `命中${blocks}个指定区域`, - [ - `${arrows}箭`, - timeText, - getDifficultyModeText(item.mode), - promoteText, - ] - .filter(Boolean) - .join(" · "), + shootingTimeText, + `需要有${arrows}箭命中高亮区域`, ], rhythm: [ desc || `间隔${timeLimit}秒射击`, diff --git a/src/pages/training/index.vue b/src/pages/training/index.vue index 3687fe0..50f7e4b 100644 --- a/src/pages/training/index.vue +++ b/src/pages/training/index.vue @@ -64,8 +64,8 @@ const createDefaultTrainingData = () => ({ stats: { total_training_days: 0, total_arrows: 0, - hit_rate: 0, - endurance_shoot_speed: 0, + target_rate: 0, + ten_ring_count: 0, total_calories: 0, }, beat_percent: 0, @@ -286,8 +286,8 @@ const loadPersonalTrainingData = async () => { stats: { total_training_days: result?.stats?.total_training_days ?? 0, total_arrows: result?.stats?.total_arrows ?? 0, - hit_rate: result?.stats?.hit_rate ?? 0, - endurance_shoot_speed: result?.stats?.endurance_shoot_speed ?? 0, + target_rate: result?.stats?.target_rate ?? 0, + ten_ring_count: result?.stats?.ten_ring_count ?? 0, total_calories: result?.stats?.total_calories ?? 0, }, beat_percent: result?.beat_percent ?? 0, @@ -431,26 +431,26 @@ onShow(async () => { - {{ formatValue(trainingData.stats.hit_rate) }} + {{ formatValue(trainingData.stats.target_rate) }} % - 命中率 + 上靶率 - {{ formatValue(trainingData.stats.endurance_shoot_speed, 0) }} + {{ formatValue(trainingData.stats.ten_ring_count, 0) }} - 支/分钟 + - 耐力射击 + 10环数 diff --git a/src/pages/training/practise-one.vue b/src/pages/training/practise-one.vue index d91e292..ed17c61 100644 --- a/src/pages/training/practise-one.vue +++ b/src/pages/training/practise-one.vue @@ -4,7 +4,7 @@ import { onHide, onLoad, onShow, onUnload } from "@dcloudio/uni-app"; import Container from "@/components/Container.vue"; import ShootProgress from "./components/ShootProgress.vue"; import BowTarget from "./components/BowTarget.vue"; -import ScorePanel2 from "./components/ScorePanel2.vue"; +import ScorePanel2 from "@/components/TrainingScorePanel.vue"; import ScoreResult from "./components/ScoreResult.vue"; import Avatar from "@/components/Avatar.vue"; import BowPower from "@/components/BowPower.vue"; @@ -48,6 +48,8 @@ const pageStage = ref(pageStages.LOADING); const scores = ref([]); // 只在实时 ShootResult 新增一箭时递增,避免同步快照重播飞箭特效。 const shotEffectToken = ref(0); +// 可见区域每次正式提交都递增,同一区域连续刷新也能触发动效。 +const precisionTargetRefreshToken = ref(0); const defaultTotal = 12; const defaultTargetType = 1; const total = ref(defaultTotal); @@ -253,17 +255,23 @@ const trainingCopy = computed(() => { practiceInfo.value.hitReq, trainingParams.value.hitReq ); - const arrowsLeft = getPracticeNumber( - practiceInfo.value.arrowsLeft, - total.value + const targetArrows = getPositiveInteger(total.value); + const arrowsLeft = Math.min( + targetArrows, + Math.max( + 0, + getPracticeNumber(practiceInfo.value.arrowsLeft, targetArrows) + ) ); + const completedArrows = targetArrows - arrowsLeft; return { - title: `每箭命中${hitReq}环之上`, + inline: true, details: [ - { text: "剩余" }, - { text: arrowsLeft, highlight: true }, - { text: "箭达到条件" }, + { text: "计时结束前需要有" }, + { text: `(${completedArrows}/${targetArrows})`, highlight: true }, + { text: "箭命中" }, + { text: `${hitReq}环`, highlight: true }, ], }; } @@ -281,35 +289,33 @@ const trainingCopy = computed(() => { const currentRings = getPracticeNumber(practiceInfo.value.currentRings); return { - title: `完成${targetArrows}箭并累计${targetRings}环`, + inline: true, details: [ - { text: "已完成" }, - { text: currentArrows, highlight: true }, - { text: "箭,累计" }, - { text: currentRings, highlight: true }, + { text: "计时结束前完成" }, + { text: `(${currentArrows}/${targetArrows})`, highlight: true }, + { text: "箭且累计命中" }, + { text: `(${currentRings}/${targetRings})`, highlight: true }, { text: "环" }, ], }; } if (trainingType.value === "precision") { - const block = precisionRandomBlock.value; - const ring = precisionRandomRingArea.value; - const arrowsLeft = getPracticeNumber( - practiceInfo.value.arrowsLeft, - total.value + const targetArrows = getPositiveInteger(total.value); + const arrowsLeft = Math.min( + targetArrows, + Math.max( + 0, + getPracticeNumber(practiceInfo.value.arrowsLeft, targetArrows) + ) ); - const title = block - ? ring - ? `请命中区域${block}的${ring}环` - : `请命中区域${block}` - : "等待目标区域"; + const completedArrows = targetArrows - arrowsLeft; return { - title, + inline: true, details: [ - { text: "剩余" }, - { text: arrowsLeft, highlight: true }, + { text: "射箭命中高亮区域需完成" }, + { text: `(${completedArrows}/${targetArrows})`, highlight: true }, { text: "箭" }, ], }; @@ -563,7 +569,10 @@ const commitPrecisionTargetAfterPresentation = async ({ ) { return; } - visiblePrecisionTarget.value = target; + applyVisiblePrecisionTarget(target); + if (precisionRandomBlock.value > 0) { + precisionTargetRefreshToken.value += 1; + } }; const createPracticeEndSnapshot = (message = {}) => { @@ -1329,6 +1338,7 @@ onBeforeUnmount(() => { :sectorCount="precisionBlocks" :activeSector="precisionRandomBlock" :activeRing="precisionRandomRingArea" + :highlightRefreshToken="precisionTargetRefreshToken" :showSectorLabels="precisionBlocks > 0" stable-shot-effect @shot-effect-complete="onShotEffectComplete" @@ -1349,7 +1359,7 @@ onBeforeUnmount(() => { 重置高亮 --> - + + + { - {{ trainingCopy.title }} - + {{ part.text }} + + {{ trainingCopy.title }} + + {{ part.text }} + + @@ -1386,7 +1407,11 @@ onBeforeUnmount(() => { :enhanced="true" :show-scrollbar="false" > - + { margin-left: 16rpx; } +.sound-row { + height: 70rpx; + padding: 0 56rpx; + display: flex; + align-items: center; +} .sound-text-box{ height: 125rpx; padding: 0 56rpx; @@ -1503,6 +1534,9 @@ onBeforeUnmount(() => { .sound-btn { width: 76rpx; height: 70rpx; + padding: 0; + margin: 0; + background: transparent; border: none; } @@ -1515,7 +1549,7 @@ onBeforeUnmount(() => { height: 70rpx; } .bat-text-big-box{ - flex: 1; + width: 100%; position: relative; } .dao-icon{ @@ -1530,11 +1564,13 @@ onBeforeUnmount(() => { } .bat-text-box{ display: flex; + width: 100%; } .bat-text-small-box{ background: rgba(0, 0, 0, 0.5); - width: auto; + width: 100%; min-width: 100rpx; + box-sizing: border-box; border-radius: 16rpx 60rpx 60rpx 16rpx; display: flex; flex-direction: column; @@ -1545,6 +1581,15 @@ onBeforeUnmount(() => { font-size: 30rpx; color: #E7BA80; } +.training-copy-inline { + width: 100%; + color: #FFFFFF; + font-size: 26rpx; + font-weight: 400; + line-height: 40rpx; + white-space: normal; + word-break: break-all; +} .text1{ font-size: 30rpx; font-weight: 400; diff --git a/src/static/my-practise.png b/src/static/my-practise.png index cc608ceaf62969e498d2dc3dff75fb1f1d37dd5d..a6a072254aec1cb1deffe3767b34ada15100b52f 100644 GIT binary patch literal 22952 zcmV)UK(N1wP)!ZK9zQZ9nSU#mc_f*79-43z zk9Q=Waub+$6-78Cn}RNmbR3Lv7fnAWq>DLaO&eB6D!7OhLNz3ibs&vt7MFb}TTClk zMjM-V9I}NLY*HCuNgAGoF!f*1Jf-jsSJQ9~(~dnjN~ES78(mv$RtOB!!f z7@>$Xy^9ozWfi7&6R3|ooOu*vR4t!}I;wdRl5G~He;R{f7NB_-k!cikR~T|u8EH`) zqjVFff*F8d7lvXMka{+Xbv9N-BWYMJU```YK_r}e9c^1Lu6q)9SQmO`8T^5vkFotn6cv~2DWHPsb z5&rVVqACHC zLwsN#|M}qkqBZ>Hr~TDs47@(vSDNPWYHX?a!b8;A-}!O#PKI zhI?xCj6VO}S@^I{{@iu-;=#SSv;Mj{_NZU;nONXnHTLGr;LNZ7?y%;@mFvTT`^R(c z+q&>;F!OdZ^nf^1NI3h!gZQ;{kBEQyx@5bpi|D#^v#zJtQZ1^aoVucJVpvJfy_lbr ze*J|iac5egnvm33-mQ8ammlX2Ro(9MnmKgn;K36|puf2^pFs8h|FA zh!Q76n!u?dOiS~Lh%_O`604!P{nt~J2hx3eI?Zc{KoskzfXtX;eLFDI4fD$E?2*}w zCW1IsRh;B`%;5CyB+Ve_PW2{vzG-+`njb$}Z@xt&ZNJ@Kmxaf|j6n^-Y;b!psGP?7w{xPz|qcDjx7R>e5EFWUYJ{%56lTZ;#Re1K2Qz5*6<|Pyns2->_ zAkd6zXx3^c!kN?Y^yWMzFcGeDvUDbM-Um(P`35i*XVHb|%%q6&FKwB#EHw<6?m^1+;ScoZKGwA*kWJy_?Si-Zjb{d-EPv_1{9w+-yYgcEcvu?VMz8=&3U53)+ zx0+I4i=dQ*WmM5{E}iR$J= zC{C5a>~?2_$xdWb-4;&YglJ8niKxR|9O8lGjW{##IOm8{7b4Qs#uU72LF$|SWEY}6 ztF4HgoisgAo9fKOXKZlp~>Riw0 zniv$D)BA!Z)ik26Imy7ZgFJce4JXGWQ#h3-qQPl;deC<|6FBptNs**Hc)bA4RcH_b zNc;UkAA8Us!zrs*0tL;Q*x&bGoSj9`oK=5Lt(_`MlQ5a<{)FjfP92ea7b4BCHqnJ< z-hdoRP{eu>bw)v|zz_?HKqbj#VGGfl!^*@~WRrd-ne$@i%#J|`;dpwSDvQ$}Fj+V+ zn>NG&{Nj%?S}_M8_y$M;GU&Wh>Q)z-_RI4qi zRizn7LJLc}FDxtoA~r)*ca!pj>Uc`^JVcsoM!vPvo!vO;O~~Ukxz4uETvwXz8i_F3 zhH`JdtI~X#qdX(enO{p@3y6hPERnIO<=I2z)f1a*?kBWx66S2j6$mutK1q4T6FZ{& zfXNBowsn7FoQ{@Xzy1mCB+N7(J$*`=K;L3$+l< z{rPBrz-d~$Wl1T`u3Yzr%*>oEQ>VqLUHwgN&XnoR(UK!lq`CbRGBn{#M2=ElHO$(GzP4PTPn)VLFPo2|CCuyq6A>Lhnw40MnJ@$05r-wd*5N_JtZ#i1<;Z*i8zllHVKaZ(;A(hnVL~^c5wkEN|dh z%2*=wr7S1%5Aqgyoc*x*si|j8nz<8E&GuSr@1$ASlQd1TbBOonANHS7ktPT#yIriParP!qLzEsB`4cC{CAyRH)}%c>O~{*5)n!hW&ifDS zfvA4Cl)8ybHv`hPc+)s@WhEICQl!E&_;7a@#G>#AkTx)hb`st|aoHpO< zXH4e0r>WXou9GHjI)ebyTyrW-ZR!yxyU+f2@^E0 z2bMR4<~Y!VC8K~;mm(e29cpnh=cOUlZkZC!wpP^fd&D};2(;^R&i^nerBLEzD?(G7c@$ti!=v5|FoQ<&B=M7nI)NNe-jCF?eV^v~#k_D*dpZ+Mxr*-^;ww`U z@8wuI)tk|rteZRsC2tbtGx250^qt+E5q5Rt&dz9OB!PcuU?Q+ahH1?AiLare>h~U< z?mUd}I8~jU$dyjgR4Gi4lgCTa{Fu-0iKeK5Dc-cs)S3x%Zj1v=MA)!E658Cv3lg}6 zygw(AC*>}c4Nh}C*EV;$ui2^2pL?~8NyRTe+%;#B>JZ0wnlsIsP}9t>E6Q=`=)2HP zsZDt{n?LE%_$q+1(dR(t=jO9v3DM@x*{<5j#_n+;>)%diE6u8=0332TlwHpXk@=-er>j3sYDYk~TnWZXHAMViFf+lNd? z>|s)}G!Zp(s%XygKFQNmoTO<}y`0}cQ>8S^7IYoMrdks)H}BCROPr)xnv*y|6Efy}SEjo2=7z%DSX*0r9%1eXGyqk7!KzE@CwbDN%y$xP zy3rhn=Kf6Xbd7!5)Y^H%Q>2peVuKcxgKG9nlCI&#R+GU zW|rZ1m+xW=JKmxiRjTkOiQ4mKak(_qR^&SS)HCMssh!B5*qQ3qo&NH}(zM=$G|}lz z3llUo&7ovWaBTDiDDl*pk|&~Q@VpA8Js@48TOUkS6V1EhYfobhv0U}W7DS5B3qnSegt)RKVo7jeO9+EZW1X~# zL?SM(6n-%^C<1lGG9u}CB-w*KD|87 zL-#W{dAOm^*;N!}M3_ZmXQFimID?Bc*_o3xgKZ>w6SB)n7CKm>(BaK1q|C2|F9FfK z%YyG1d>nHOzT<7aQn5uzGwn~N(ed!-K2q?YDL4hCAWgPTjkEWni0;(ub%;25S%Fg$ zkK1(PWT=y-Zku9Epae|$V0GgI07218z{(R!chC^0OCwwEcyXEsP4CY9WxERY!i({W zCT}7VXRj3z%_%fl>P9h5T9e*HyR?sSrIYuigIIP*>CtZ56KLenxZZuZ%gfW$IC)z( zfT?j(+MW734QcAB^D2>E5Ye2V>Dx!sOPRlsc4?LwZCaOrZ≻HLhF(KhcphQZl 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

6xTss+OQnU!1B$yNB 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™ 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 { } }; +// 正式射箭阶段的距离单位为厘米,按距离异常类型选择对应语音。 +export const getInvalidShotAudioKey = (shootData) => { + if (!shootData || typeof shootData !== "object") return "射击无效"; + // protobuf 会省略值为 0 的标量字段;消息体存在且距离缺失时按 0 处理。 + const rawDistance = Number(shootData.distance ?? shootData.dst ?? 0); + if (!Number.isFinite(rawDistance)) return "射击无效"; + if (rawDistance < 0) return "射箭无效,靶纸错误"; + if (rawDistance === 0) return "射箭无效,未识别到靶纸"; + if (rawDistance / 100 < 5) return "射箭无效,距离不足"; + return "射击无效"; +}; + export const wxLogin = () => { return new Promise((resolve, reject) => { uni.login({ diff --git a/src/utils/match.min.js b/src/utils/match.min.js index 4803dfe..87f6493 100644 --- a/src/utils/match.min.js +++ b/src/utils/match.min.js @@ -1,4 +1,4 @@ /* eslint-disable */ import * as $protobuf from "protobufjs"; -const $root=$protobuf.Root.create({"nested":{"rpc":{"nested":{"ServerMessageType":{"SERVER_MSG_UNKNOWN":0,"SERVER_MSG_MATCH_READY":1,"SERVER_MSG_MATCH_START":2,"SERVER_MSG_NOW_YOU":3,"SERVER_MSG_SHOT":4,"SERVER_MSG_NEW_ROUND":5,"SERVER_MSG_MATCH_END":6,"SERVER_MSG_TIMEOUT":7,"SERVER_MSG_CHECK":8,"SERVER_MSG_RAND":9,"SERVER_MSG_NOT_ENOUGH_DISTANCE":10,"SERVER_MSG_PLAYER_LEFT":11,"SERVER_MSG_HEARTBEAT":12,"SERVER_MSG_PRACTICE_END":13,"SERVER_MSG_SYNC_PRACTICE_INFO":14,"SERVER_MSG_SYNC_MATCH_INFO":15},"ClientMessageType":{"CLIENT_MSG_UNKNOWN":0,"CLIENT_MSG_HEARTBEAT_ACK":1,"CLIENT_MSG_SHOOT_DATA":2,"CLIENT_MSG_ACK":3,"CLIENT_MSG_LEAVE":4,"CLIENT_MSG_SYNC_PRACTICE_INFO":5,"CLIENT_MSG_SYNC_MATCH_INFO":6},"MatchStatus":{"MATCH_STATUS_READY":0,"MATCH_STATUS_STARTED":1,"MATCH_STATUS_END":2,"MATCH_STATUS_TIMEOUT":3,"MATCH_STATUS_UNEXPECTEDLY":4},"MatchPlayerStatus":{"MATCH_PLAYER_STATUS_READY":0,"MATCH_PLAYER_STATUS_STARTED":1,"MATCH_PLAYER_STATUS_END":2},"MatchShoot":{"fields":{"playerId":{"type":"int64","id":1,"protoName":"player_id"},"status":{"type":"int32","id":2},"x":{"type":"float","id":3},"y":{"type":"float","id":4},"ring":{"type":"int32","id":5},"ringX":{"type":"bool","id":6,"protoName":"ring_x"},"angle":{"type":"float","id":7},"distance":{"type":"float","id":8},"threeConsecutive_10Rings":{"type":"bool","id":9,"protoName":"three_consecutive_10_rings"}}},"MatchShootList":{"fields":{"items":{"type":"MatchShoot","id":1,"rule":"repeated"}}},"RoundScore":{"fields":{"totalRing":{"type":"int32","id":1,"protoName":"total_ring"},"score":{"type":"int32","id":2},"ifWin":{"type":"bool","id":3,"protoName":"if_win"}}},"MatchRound":{"fields":{"shoots":{"type":"MatchShootList","id":1,"keyType":"int64"},"scores":{"type":"RoundScore","id":2,"keyType":"int32"},"round":{"type":"int32","id":3},"ifGold":{"type":"bool","id":4,"protoName":"if_gold"},"status":{"type":"int32","id":5},"goldRound":{"type":"int32","id":6,"protoName":"gold_round"}}},"PlayerMatchResult":{"fields":{"totalRing":{"type":"int32","id":1,"protoName":"total_ring"},"userId":{"type":"int64","id":2,"protoName":"user_id"},"tenRingCount":{"type":"int32","id":3,"protoName":"ten_ring_count"},"averageRing":{"type":"float","id":4,"protoName":"average_ring"}}},"PlayerFull":{"fields":{"id":{"type":"int64","id":1},"name":{"type":"string","id":2},"avatar":{"type":"string","id":3},"exp":{"type":"int32","id":4},"score":{"type":"int32","id":5},"level":{"type":"int32","id":6},"beforeLevel":{"type":"int32","id":7,"protoName":"before_level"},"beforeExp":{"type":"int32","id":8,"protoName":"before_exp"},"currentExp":{"type":"int32","id":9,"protoName":"current_exp"},"upgradeExp":{"type":"int32","id":10,"protoName":"upgrade_exp"},"active":{"type":"int32","id":11},"deviceId":{"type":"string","id":12,"protoName":"device_id"},"sVip":{"type":"bool","id":13,"protoName":"s_vip"},"vip":{"type":"bool","id":14},"playerMatchResult":{"type":"PlayerMatchResult","id":15,"protoName":"player_match_result"}}},"TeamInfo":{"fields":{"players":{"type":"PlayerFull","id":1,"rule":"repeated"},"id":{"type":"int32","id":2},"name":{"type":"string","id":3},"score":{"type":"int32","id":4}}},"CurrentShoot":{"fields":{"round":{"type":"int32","id":1},"roundId":{"type":"int64","id":2,"protoName":"round_id"},"index":{"type":"int32","id":3},"startTime":{"type":"int64","id":4,"protoName":"start_time"},"playerId":{"type":"int64","id":5,"protoName":"player_id"},"goldRound":{"type":"bool","id":6,"protoName":"gold_round"},"startTimeText":{"type":"string","id":7,"protoName":"start_time_text"},"myIndex":{"type":"int32","id":8,"protoName":"my_index"},"indexMap":{"type":"int32","id":9,"keyType":"int64","protoName":"index_map"},"ackTime":{"type":"int64","id":10,"protoName":"ack_time"}}},"ShootData":{"fields":{"x":{"type":"float","id":1},"y":{"type":"float","id":2},"r":{"type":"float","id":3},"dst":{"type":"float","id":4},"m":{"type":"string","id":5},"adc":{"type":"float","id":6},"deviceId":{"type":"string","id":7,"protoName":"device_id"},"shootId":{"type":"string","id":8,"protoName":"shoot_id"},"threeConsecutive_10Rings":{"type":"bool","id":9,"protoName":"three_consecutive_10_rings"}}},"PracticeInfo":{"fields":{"id":{"type":"int64","id":1},"userId":{"type":"int64","id":2,"protoName":"user_id"},"status":{"type":"int32","id":3},"statusText":{"type":"string","id":4,"protoName":"status_text"},"startTime":{"type":"int64","id":5,"protoName":"start_time"},"targetType":{"type":"int32","id":6,"protoName":"target_type"},"vip":{"type":"bool","id":7},"sVip":{"type":"bool","id":8,"protoName":"s_vip"},"deviceId":{"type":"string","id":9,"protoName":"device_id"},"shootData":{"type":"MatchShoot","id":10,"protoName":"shoot_data"},"details":{"type":"MatchShoot","id":11,"rule":"repeated"},"trainingType":{"type":"string","id":12,"protoName":"training_type"},"difficultyLevel":{"type":"int32","id":13,"protoName":"difficulty_level"},"hitReq":{"type":"int32","id":14,"protoName":"hit_req"},"arrowsLeft":{"type":"int32","id":15,"protoName":"arrows_left"},"targetArrows":{"type":"int32","id":16,"protoName":"target_arrows"},"targetRings":{"type":"int32","id":17,"protoName":"target_rings"},"currentArrows":{"type":"int32","id":18,"protoName":"current_arrows"},"currentRings":{"type":"int32","id":19,"protoName":"current_rings"},"blocks":{"type":"int32","id":20},"randomBlock":{"type":"int32","id":21,"protoName":"random_block"},"randomRingArea":{"type":"int32","id":22,"protoName":"random_ring_area"},"timeLimit":{"type":"int32","id":23,"protoName":"time_limit"},"completed":{"type":"bool","id":24},"totalArrows":{"type":"int32","id":25,"protoName":"total_arrows"},"duration":{"type":"int32","id":26},"averageRing":{"type":"float","id":27,"protoName":"average_ring"},"stability":{"type":"float","id":28},"maxCombo":{"type":"int32","id":29,"protoName":"max_combo"},"totalHits":{"type":"int32","id":30,"protoName":"total_hits"},"deltaTotalHits":{"type":"int32","id":31,"protoName":"delta_total_hits"},"deltaDuration":{"type":"int32","id":32,"protoName":"delta_duration"},"deltaMaxCombo":{"type":"int32","id":33,"protoName":"delta_max_combo"},"deltaTotalRings":{"type":"int32","id":34,"protoName":"delta_total_rings"},"deltaTotalArrows":{"type":"int32","id":35,"protoName":"delta_total_arrows"},"deltaAverageRing":{"type":"float","id":36,"protoName":"delta_average_ring"},"deltaStability":{"type":"float","id":37,"protoName":"delta_stability"},"beforeExp":{"type":"int32","id":38,"protoName":"before_exp"},"beforeLevel":{"type":"int32","id":39,"protoName":"before_level"},"currentExp":{"type":"int32","id":40,"protoName":"current_exp"},"level":{"type":"int32","id":41},"upgradeExp":{"type":"int32","id":42,"protoName":"upgrade_exp"},"calories":{"type":"double","id":43}}},"MatchInfo":{"fields":{"matchId":{"type":"string","id":1,"protoName":"match_id"},"createTime":{"type":"int64","id":2,"protoName":"create_time"},"startTime":{"type":"int64","id":3,"protoName":"start_time"},"serverTime":{"type":"int64","id":4,"protoName":"server_time"},"shootTime":{"type":"int32","id":5,"protoName":"shoot_time"},"shootNumber":{"type":"int32","id":6,"protoName":"shoot_number"},"readyTime":{"type":"int32","id":7,"protoName":"ready_time"},"way":{"type":"int32","id":8},"mode":{"type":"int32","id":9},"status":{"type":"MatchStatus","id":10},"statusText":{"type":"string","id":11,"protoName":"status_text"},"rounds":{"type":"MatchRound","id":12,"rule":"repeated"},"teams":{"type":"TeamInfo","id":13,"keyType":"int32"},"current":{"type":"CurrentShoot","id":14},"next":{"type":"CurrentShoot","id":15},"shootData":{"type":"MatchShoot","id":16,"protoName":"shoot_data"},"winTeam":{"type":"int32","id":17,"protoName":"win_team"},"mvp":{"type":"PlayerFull","id":18},"roomId":{"type":"string","id":19,"protoName":"room_id"},"resultList":{"type":"PlayerMatchResult","id":20,"rule":"repeated","protoName":"result_list"},"timeoutTime":{"type":"int64","id":21,"protoName":"timeout_time"},"targetType":{"type":"int32","id":22,"protoName":"target_type"},"eventType":{"type":"int32","id":23,"protoName":"event_type"},"timeout":{"type":"int32","id":24},"serverAddr":{"type":"string","id":25,"protoName":"server_addr"},"countdownStartTime":{"type":"int64","id":26,"protoName":"countdown_start_time"}}},"ServerMessage":{"fields":{"type":{"type":"ServerMessageType","id":1},"matchId":{"type":"string","id":2,"protoName":"match_id"},"timestamp":{"type":"int64","id":3},"matchInfo":{"type":"MatchInfo","id":4,"protoName":"match_info"},"shootData":{"type":"ShootData","id":5,"protoName":"shoot_data"},"practiceInfo":{"type":"PracticeInfo","id":6,"protoName":"practice_info"},"sequence":{"type":"int64","id":7}}},"ClientMessage":{"fields":{"type":{"type":"ClientMessageType","id":1},"matchId":{"type":"string","id":2,"protoName":"match_id"},"userId":{"type":"int64","id":3,"protoName":"user_id"},"sequence":{"type":"int64","id":4},"data":{"type":"bytes","id":5}}}}}}}); +const $root=$protobuf.Root.create({"nested":{"rpc":{"ServerMessageType":{"SERVER_MSG_UNKNOWN":0,"SERVER_MSG_MATCH_READY":1,"SERVER_MSG_MATCH_START":2,"SERVER_MSG_NOW_YOU":3,"SERVER_MSG_SHOT":4,"SERVER_MSG_NEW_ROUND":5,"SERVER_MSG_MATCH_END":6,"SERVER_MSG_TIMEOUT":7,"SERVER_MSG_CHECK":8,"SERVER_MSG_RAND":9,"SERVER_MSG_NOT_ENOUGH_DISTANCE":10,"SERVER_MSG_PLAYER_LEFT":11,"SERVER_MSG_HEARTBEAT":12,"SERVER_MSG_PRACTICE_END":13,"SERVER_MSG_SYNC_PRACTICE_INFO":14,"SERVER_MSG_SYNC_MATCH_INFO":15},"ClientMessageType":{"CLIENT_MSG_UNKNOWN":0,"CLIENT_MSG_HEARTBEAT_ACK":1,"CLIENT_MSG_SHOOT_DATA":2,"CLIENT_MSG_ACK":3,"CLIENT_MSG_LEAVE":4,"CLIENT_MSG_SYNC_PRACTICE_INFO":5,"CLIENT_MSG_SYNC_MATCH_INFO":6},"MatchStatus":{"MATCH_STATUS_READY":0,"MATCH_STATUS_STARTED":1,"MATCH_STATUS_END":2,"MATCH_STATUS_TIMEOUT":3,"MATCH_STATUS_UNEXPECTEDLY":4},"MatchPlayerStatus":{"MATCH_PLAYER_STATUS_READY":0,"MATCH_PLAYER_STATUS_STARTED":1,"MATCH_PLAYER_STATUS_END":2},"MatchShoot":{"fields":{"player_id":{"type":"int64","id":1},"status":{"type":"int32","id":2},"x":{"type":"float","id":3},"y":{"type":"float","id":4},"ring":{"type":"int32","id":5},"ring_x":{"type":"bool","id":6},"angle":{"type":"float","id":7},"distance":{"type":"float","id":8},"three_consecutive_10_rings":{"type":"bool","id":9},"ok":{"type":"bool","id":10}}},"MatchShootList":{"fields":{"items":{"type":"MatchShoot","id":1,"rule":"repeated"}}},"RoundScore":{"fields":{"total_ring":{"type":"int32","id":1},"score":{"type":"int32","id":2},"if_win":{"type":"bool","id":3}}},"MatchRound":{"fields":{"shoots":{"type":"MatchShootList","id":1,"keytype":"int64"},"scores":{"type":"RoundScore","id":2,"keytype":"int32"},"round":{"type":"int32","id":3},"if_gold":{"type":"bool","id":4},"status":{"type":"int32","id":5},"gold_round":{"type":"int32","id":6}}},"PlayerMatchResult":{"fields":{"total_ring":{"type":"int32","id":1},"user_id":{"type":"int64","id":2},"ten_ring_count":{"type":"int32","id":3},"average_ring":{"type":"float","id":4}}},"PlayerFull":{"fields":{"id":{"type":"int64","id":1},"name":{"type":"string","id":2},"avatar":{"type":"string","id":3},"exp":{"type":"int32","id":4},"score":{"type":"int32","id":5},"level":{"type":"int32","id":6},"before_level":{"type":"int32","id":7},"before_exp":{"type":"int32","id":8},"current_exp":{"type":"int32","id":9},"upgrade_exp":{"type":"int32","id":10},"active":{"type":"int32","id":11},"device_id":{"type":"string","id":12},"s_vip":{"type":"bool","id":13},"vip":{"type":"bool","id":14},"player_match_result":{"type":"PlayerMatchResult","id":15},"rank_lvl":{"type":"int32","id":16},"rank_name":{"type":"string","id":17},"rank_icon":{"type":"string","id":18}}},"TeamInfo":{"fields":{"players":{"type":"PlayerFull","id":1,"rule":"repeated"},"id":{"type":"int32","id":2},"name":{"type":"string","id":3},"score":{"type":"int32","id":4}}},"CurrentShoot":{"fields":{"round":{"type":"int32","id":1},"round_id":{"type":"int64","id":2},"index":{"type":"int32","id":3},"start_time":{"type":"int64","id":4},"player_id":{"type":"int64","id":5},"gold_round":{"type":"bool","id":6},"start_time_text":{"type":"string","id":7},"my_index":{"type":"int32","id":8},"index_map":{"type":"int32","id":9,"keytype":"int64"},"ack_time":{"type":"int64","id":10}}},"ShootData":{"fields":{"x":{"type":"float","id":1},"y":{"type":"float","id":2},"r":{"type":"float","id":3},"dst":{"type":"float","id":4},"m":{"type":"string","id":5},"adc":{"type":"float","id":6},"device_id":{"type":"string","id":7},"shoot_id":{"type":"string","id":8},"three_consecutive_10_rings":{"type":"bool","id":9}}},"PracticeInfo":{"fields":{"id":{"type":"int64","id":1},"user_id":{"type":"int64","id":2},"status":{"type":"int32","id":3},"status_text":{"type":"string","id":4},"start_time":{"type":"int64","id":5},"target_type":{"type":"int32","id":6},"vip":{"type":"bool","id":7},"s_vip":{"type":"bool","id":8},"device_id":{"type":"string","id":9},"shoot_data":{"type":"MatchShoot","id":10},"details":{"type":"MatchShoot","id":11,"rule":"repeated"},"training_type":{"type":"string","id":12},"difficulty_level":{"type":"int32","id":13},"hit_req":{"type":"int32","id":14},"arrows_left":{"type":"int32","id":15},"target_arrows":{"type":"int32","id":16},"target_rings":{"type":"int32","id":17},"current_arrows":{"type":"int32","id":18},"current_rings":{"type":"int32","id":19},"blocks":{"type":"int32","id":20},"random_block":{"type":"int32","id":21},"random_ring_area":{"type":"int32","id":22},"score_slot":{"type":"int32","id":44},"current_energy":{"type":"int32","id":45},"energy_cost_per_sec":{"type":"int32","id":46},"energy_per_hit":{"type":"int32","id":47},"energy_req_percent":{"type":"int32","id":48},"round_time":{"type":"int32","id":50},"shoot_time":{"type":"int32","id":53},"shoot_window_start":{"type":"int64","id":51},"in_shoot_window":{"type":"bool","id":52},"time_limit":{"type":"int32","id":23},"completed":{"type":"bool","id":24},"total_arrows":{"type":"int32","id":25},"duration":{"type":"int32","id":26},"average_ring":{"type":"float","id":27},"stability":{"type":"float","id":28},"max_combo":{"type":"int32","id":29},"total_hits":{"type":"int32","id":30},"delta_total_hits":{"type":"int32","id":31},"delta_duration":{"type":"int32","id":32},"delta_max_combo":{"type":"int32","id":33},"delta_total_rings":{"type":"int32","id":34},"delta_total_arrows":{"type":"int32","id":35},"delta_average_ring":{"type":"float","id":36},"delta_stability":{"type":"float","id":37},"delta_current_energy":{"type":"int32","id":49},"before_exp":{"type":"int32","id":38},"before_level":{"type":"int32","id":39},"current_exp":{"type":"int32","id":40},"level":{"type":"int32","id":41},"upgrade_exp":{"type":"int32","id":42},"calories":{"type":"double","id":43}}},"MatchInfo":{"fields":{"match_id":{"type":"string","id":1},"create_time":{"type":"int64","id":2},"start_time":{"type":"int64","id":3},"server_time":{"type":"int64","id":4},"shoot_time":{"type":"int32","id":5},"shoot_number":{"type":"int32","id":6},"ready_time":{"type":"int32","id":7},"way":{"type":"int32","id":8},"mode":{"type":"int32","id":9},"status":{"type":"MatchStatus","id":10},"status_text":{"type":"string","id":11},"rounds":{"type":"MatchRound","id":12,"rule":"repeated"},"teams":{"type":"TeamInfo","id":13,"keytype":"int32"},"current":{"type":"CurrentShoot","id":14},"next":{"type":"CurrentShoot","id":15},"shoot_data":{"type":"MatchShoot","id":16},"win_team":{"type":"int32","id":17},"mvp":{"type":"PlayerFull","id":18},"room_id":{"type":"string","id":19},"result_list":{"type":"PlayerMatchResult","id":20,"rule":"repeated"},"timeout_time":{"type":"int64","id":21},"target_type":{"type":"int32","id":22},"event_type":{"type":"int32","id":23},"timeout":{"type":"int32","id":24},"server_addr":{"type":"string","id":25},"countdown_start_time":{"type":"int64","id":26}}},"ServerMessage":{"fields":{"type":{"type":"ServerMessageType","id":1},"match_id":{"type":"string","id":2},"timestamp":{"type":"int64","id":3},"match_info":{"type":"MatchInfo","id":4},"shoot_data":{"type":"ShootData","id":5},"practice_info":{"type":"PracticeInfo","id":6},"sequence":{"type":"int64","id":7}}},"ClientMessage":{"fields":{"type":{"type":"ClientMessageType","id":1},"match_id":{"type":"string","id":2},"user_id":{"type":"int64","id":3},"sequence":{"type":"int64","id":4},"data":{"type":"bytes","id":5}}}}}}); export default $root; diff --git a/src/utils/matchProtocol.js b/src/utils/matchProtocol.js index c6134a4..68fadfb 100644 --- a/src/utils/matchProtocol.js +++ b/src/utils/matchProtocol.js @@ -7,8 +7,8 @@ const { Reader, Writer } = protobuf; // 所以这里使用 minimal Reader/Writer 做静态字段解码和客户端消息编码。 // // 此区块由 scripts/generate-match-schema.mjs 自动生成,请勿手动修改。 -// 来源:src/utils/match.min.js(sha256: b4f272aad40fb951) -// 协议命名空间:rpc;消息数:12;字段数:137 +// 来源:src/utils/match.min.js(sha256: 150812589c2e6f7a) +// 协议命名空间:rpc;消息数:12;字段数:151 export const ServerMessageType = { SERVER_MSG_UNKNOWN: 0, @@ -50,6 +50,7 @@ const SCHEMAS = { 7: { name: "angle", kind: "float" }, 8: { name: "distance", kind: "float" }, 9: { name: "three_consecutive_10_rings", kind: "bool" }, + 10: { name: "ok", kind: "bool" }, }, MatchShootList: { 1: { name: "items", kind: "message", type: "MatchShoot", repeated: true }, @@ -101,6 +102,9 @@ const SCHEMAS = { 13: { name: "s_vip", kind: "bool" }, 14: { name: "vip", kind: "bool" }, 15: { name: "player_match_result", kind: "message", type: "PlayerMatchResult" }, + 16: { name: "rank_lvl", kind: "int32" }, + 17: { name: "rank_name", kind: "string" }, + 18: { name: "rank_icon", kind: "string" }, }, TeamInfo: { 1: { name: "players", kind: "message", type: "PlayerFull", repeated: true }, @@ -180,6 +184,16 @@ const SCHEMAS = { 41: { name: "level", kind: "int32" }, 42: { name: "upgrade_exp", kind: "int32" }, 43: { name: "calories", kind: "double" }, + 44: { name: "score_slot", kind: "int32" }, + 45: { name: "current_energy", kind: "int32" }, + 46: { name: "energy_cost_per_sec", kind: "int32" }, + 47: { name: "energy_per_hit", kind: "int32" }, + 48: { name: "energy_req_percent", kind: "int32" }, + 49: { name: "delta_current_energy", kind: "int32" }, + 50: { name: "round_time", kind: "int32" }, + 51: { name: "shoot_window_start", kind: "int64" }, + 52: { name: "in_shoot_window", kind: "bool" }, + 53: { name: "shoot_time", kind: "int32" }, }, MatchInfo: { 1: { name: "match_id", kind: "string" },