From 7ae0ee95350f97704b281aaf74760f632a2e4826 Mon Sep 17 00:00:00 2001 From: LX666-666 Date: Sun, 15 Jun 2025 14:56:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=9C=B0=E5=9B=BE=E8=BF=BD?= =?UTF-8?q?=E8=B8=AA=E5=BD=95=E5=88=B6=20(#1102)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/RecognitionObject/paimon_menu.png | Bin 0 -> 2372 bytes .../AutoTranscribePathing/assets/process.json | 4 + repo/js/AutoTranscribePathing/main.js | 159 ++++++++++++++++++ repo/js/AutoTranscribePathing/manifest.json | 19 +++ repo/js/AutoTranscribePathing/settings.json | 48 ++++++ 5 files changed, 230 insertions(+) create mode 100644 repo/js/AutoTranscribePathing/assets/RecognitionObject/paimon_menu.png create mode 100644 repo/js/AutoTranscribePathing/assets/process.json create mode 100644 repo/js/AutoTranscribePathing/main.js create mode 100644 repo/js/AutoTranscribePathing/manifest.json create mode 100644 repo/js/AutoTranscribePathing/settings.json diff --git a/repo/js/AutoTranscribePathing/assets/RecognitionObject/paimon_menu.png b/repo/js/AutoTranscribePathing/assets/RecognitionObject/paimon_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..c424325b17a4956f7802352e7609bfcff2721afa GIT binary patch literal 2372 zcmV-K3A^@*P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2-!(QK~z{rt(SRF zR96@7{OrIrs3OB6ST- zP@DTTKA&cd-_x`4ifbQ;v^!UEWYd=r=ft5o>jaWdZ$#*F1Dp=`Lw#i>UdiRG$$NWQ zlS!qJbxWbLunJ)v#?D#+4Ko*L&U1#Kww~+hpIblw8}X6L@I3V>qTOd=&jwpmmE@tP zN6PlU71k%NS0-b{sVwYPN+w3?*E%@$g9jWc1ShNWOUqVas)}Z=D&g zor^(ddmGo&$7^Bli&I(H`jA5yHPeBFc|eOy)65lLn65z7v3Rt#cd}#T%%3oS_UaWY zP8XsoYg`}%_!_r5rlgw?!gfco5(B+3n1mL!af6==BzpXu8{&uT3qW6mS~El zkk8E=nsSFID@2ckOt;?zeTP8kFWU_L<(r{v?++`_P}J1FJ zrGzD=Wn-M71IC)Hz~luUn6cEC1O>prF&HzQw!v`aH!xiFElga#ftK|K6j!LeQ~fcd zu+pkpT)duyod@HvcufdKo4P~8+8;*FJ6JPb9Y(ejI`+W`*mDLlI_jSS1!4JxCG0UD zjGX)uI0x;=R2zR7yM)5TEgZ8vA~DL$8>v}OxltdFg0S1arJ|~;ihCNEj?QkRP&zVj z41%F+IE+Xf^I2P(TeuM)kAkquN&(Ks|A_jR&0Ndi6qZ$E%2INE=P)evj^tWD4GO}l zs|660<>Kz0L`bDQTlvJ_ zd*fhAC$o!g1)mB9VKP}S5-webP*{r6(tI2{eg@gOg$bAczCL=vv$<53XC zkeQu}q9VFy$(tdpeg^M=ojCvFHMF#d*ud8xObT(KlbXT*a1qj;9&~keb5F|ifiUJp zNhv9icK(5G$#b-d>yYrnMFa##prLW#L-Bw@#s88sxTm*NR@Wfn@W}xeH4txvNhA_- zcq#jW+`Iw^Y1d>OFVNK}fV`&#XU@hWEkpUF{2C@MnmesS7C)bBQI0pl_)qhZ`REaH zbDpBOT!@R8ZXho^3q6ur^t9F?BQ1rEbE?8D^!SPMuy^t0T9ku#bS|6c^{Bu}MgWpb_a$GGT7-OE0cORWTp;=~E8}W|#CW zR${z~Eqp`wL7jee<~rcixt~x{E}+8X!^F>HL`^VR!V1gg=di+jLJq*rB>)Q@{g7Lj zN99xl$_gIiNnRc|O*L9+cNVVl#e~`R*dBe9y@5R87vNS>8Xjb1<5}5<`I$FqjvfA{ zJ{#fD2dJ13WAB0QFoW(@F(=Q`N}ACvu7 z94CBkV1wTuWpOIxN6it998EI_F8V*b>3*K`Kbcg3(3`{ZXAAT4bR7q)3 zi8tS63pzXdYS4k;sTtc~=+|VZ=M}SYR<;_3-Qba3-?kI z@t^~J`z(Eg++aT0lFm2#AOF&x$eXiTPDp7 z;rzyS?wDrzH8d>N!Q5>Jw(UO$fv{#+$=c8<2qR6M$*06z3(!p0ZLKAKm_<8f>KcaW zD?;EHxOd1!^DJDqu(_;R)XLV2!$I8I4&R6q7;oW)^}CL8txPKF!PbNS!W0rV$88s8 zyGKB6kw0#xq;n$%hBwJN2#F7dP7#9<6del#`#`8ISPy>D+c2;{HUVl@8(`$M2PW>3 z7-Q~*9Wn7r`7O`VI~H~U2hk!@J|r+OaV_~#E-csV!lVV>RK9J;^`s2e1q2j4nK*SX zGZ)dZKfxvV0K9gdz}34C(5Yl$!kg!F3Wgp>VC)%%!qQ5vd2ljv^5GwL7@MQMN9={` zxc~SmS}1mjByBi&DgoNon-Ca%l1BE@0_1GH$rL%t!bs { + let captureRegion = captureGameRegion(); + let res = captureRegion.Find(paimonMenuRo); + return !res.isEmpty(); +}; + + +// 获取设置 +/*const settings = { + questName: "默认委托", + questLocation: "默认地点", + trackNumber: "1" + //runMode: "录制模式", +};*/ +const questName = settings.questName +const questLocation = settings.questLocation +const trackNumber = settings.trackNumber +const runMode = settings.runMode + + +// 初始化追踪数据 +let trackData = { + "info": { + "name": `${settings.questName}-${settings.trackNumber}`, + "type": "collect", + "author": settings.author, + "version": settings.version, + "description": settings.description, + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [] +}; + +// 检查是否需要创建新文件夹 +function checkOrCreateFolder() { + const folderName = `assets/${settings.questLocation}-${settings.questName}`; + /*if (!file.existsSync(folderName)) { + file.writeTextSync(folderName, { recursive: true }); + log.info(`创建文件夹: ${folderName}`); + }*/ +} + +// 保存追踪数据 +async function saveTrackData() { + const filePath = `assets/${settings.questLocation}-${settings.questName}/${settings.questName}-${settings.trackNumber}.json`; + //const fileName = `${settings.questName}-${settings.trackNumber}.json`; + + try { + await file.writeTextSync(filePath, JSON.stringify(trackData, null, 2)); + log.info(`追踪数据已保存到: ${filePath}`); + } catch (error) { + log.error(`保存追踪数据失败: ${error}`); + } +} + +// 获取当前位置并添加到追踪数据 +async function recordPosition() { + if (isInMainUI()) { + try { + const position = genshin.getPositionFromMap(); + log.info(`从小地图获取坐标: X=${position.X}, Y=${position.Y}`); + trackData.positions.push({ + "id": trackData.positions.length + 1, + "x": position.X, + "y": position.Y, + "action": "", + "move_mode": "dash", + "action_params": "", + "type": "path" + }); + } + catch (error) { + log.error(`获取坐标失败: ${error.message}`); + await sleep(500); + return await recordPosition();; + } + } else { + try { + await genshin.setBigMapZoomLevel(1.0); + const position = genshin.getPositionFromBigMap(); + log.info(`从大地图获取坐标: X=${position.X}, Y=${position.Y}`); + trackData.positions.push({ + "id": trackData.positions.length + 1, + "x": position.X, + "y": position.Y, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "target" + }); + log.info("已在大地图界面,已生成地图追踪,脚本结束"); + await saveTrackData(); + return false; + } + catch (error) { + log.error(`获取坐标失败: ${error.message}`); + await sleep(500); + return await recordPosition();; + } + } + return true; +} + +// 主逻辑 +async function main() { + log.info("委托地图追踪录制开始"); + + checkOrCreateFolder(); + + if (settings.runMode === "运行模式") { + const filePath = `assets/${settings.questLocation}-${settings.questName}/${settings.questName}-${settings.trackNumber}.json`; + log.info(`正在运行地图追踪任务文件: ${filePath}`); + await pathingScript.runFile(filePath); + return; + } + + let continueRecording = true; + let recordCount = 0; + if (isInMainUI()) { + const position = genshin.getPositionFromMap(); + log.info(`从小地图获取坐标: X=${position.X}, Y=${position.Y}`); + + trackData.positions.push({ + "id": trackData.positions.length + 1, + "x": position.X, + "y": position.Y, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }); + } else { + log.info("不在主界面,请返回主界面后重新启动脚本"); + return; + } + await sleep(3000); + while (continueRecording && recordCount < 999) { // 限制最大录制次数,避免无限循环 + continueRecording = await recordPosition(); + if (continueRecording) { + recordCount++; + await sleep(3000); // 每3秒录制一次 + } + } + + log.info("委托地图追踪录制结束"); +} + +main(); \ No newline at end of file diff --git a/repo/js/AutoTranscribePathing/manifest.json b/repo/js/AutoTranscribePathing/manifest.json new file mode 100644 index 000000000..4f5ea25cb --- /dev/null +++ b/repo/js/AutoTranscribePathing/manifest.json @@ -0,0 +1,19 @@ +{ + "manifest_version": 1, + "name": "地图追踪录制", + "version": "1.0", + "bgi_version": "0.45.0", + "description": "自动地图追踪录制,每3秒从小地图获取一次当前坐标,打开大地图结束录制", + "tags": [ + "工具", + "委托" + ], + "authors": [ + { + "name": "星野", + "link": "https://github.com/LX666-666" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} \ No newline at end of file diff --git a/repo/js/AutoTranscribePathing/settings.json b/repo/js/AutoTranscribePathing/settings.json new file mode 100644 index 000000000..dd127462e --- /dev/null +++ b/repo/js/AutoTranscribePathing/settings.json @@ -0,0 +1,48 @@ +[ + { + "name": "questName", + "type": "input-text", + "label": "委托名称", + "default": "默认委托" + }, + { + "name": "questLocation", + "type": "input-text", + "label": "委托地点", + "default": "默认地点" + }, + { + "name": "trackNumber", + "type": "input-text", + "label": "地图追踪编号", + "default": 1 + }, + { + "name": "runMode", + "type": "select", + "label": "运行模式", + "options": [ + "录制模式", + "运行模式" + ], + "default": "录制模式" + }, + { + "name": "author", + "type": "input-text", + "label": "作者", + "default": "星野工具箱" + }, + { + "name": "description", + "type": "input-text", + "label": "描述", + "default": "自动地图追踪录制" + }, + { + "name": "version", + "type": "input-text", + "label": "版本", + "default": "1.0" + } +] \ No newline at end of file