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 00000000..c424325b Binary files /dev/null and b/repo/js/AutoTranscribePathing/assets/RecognitionObject/paimon_menu.png differ diff --git a/repo/js/AutoTranscribePathing/assets/process.json b/repo/js/AutoTranscribePathing/assets/process.json new file mode 100644 index 00000000..5c8919d8 --- /dev/null +++ b/repo/js/AutoTranscribePathing/assets/process.json @@ -0,0 +1,4 @@ +-1.json +F +-2.json +F \ No newline at end of file diff --git a/repo/js/AutoTranscribePathing/main.js b/repo/js/AutoTranscribePathing/main.js new file mode 100644 index 00000000..0e7c9601 --- /dev/null +++ b/repo/js/AutoTranscribePathing/main.js @@ -0,0 +1,159 @@ +// 定义识别对象 +const paimonMenuRo = RecognitionObject.TemplateMatch( + file.ReadImageMatSync("assets/RecognitionObject/paimon_menu.png"), + 0, + 0, + genshin.width / 3.0, + genshin.width / 5.0 +); + +// 判断是否在主界面的函数 +const isInMainUI = () => { + 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 00000000..4f5ea25c --- /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 00000000..dd127462 --- /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