diff --git a/repo/js/CrystalflyTrap/main.js b/repo/js/CrystalflyTrap/main.js index 161174a1..81236410 100644 --- a/repo/js/CrystalflyTrap/main.js +++ b/repo/js/CrystalflyTrap/main.js @@ -4,7 +4,6 @@ await genshin.returnMainUi(); let enable = settings.enable; - let type = settings.type; let ore = settings.ore; if (!enable) { @@ -13,11 +12,31 @@ if (!ore) { throw new Error("不是吧,哥们,你配置好了吗?用什么矿石啊?"); } - log.info(`当前动作: ${type}`); + + // 读取状态数据,如果文件不存在则创建默认状态 + let statusData = { isPlaced: false, collectionTime: 0 }; + try { + const statusContent = file.readTextSync("status.json"); + if (statusContent) { + statusData = JSON.parse(statusContent); + } + } catch (err) { + log.info("未找到状态文件或文件格式错误,创建默认状态"); + await file.WriteTextSync("status.json", JSON.stringify(statusData, null, 2)); + } + + // 根据当前状态决定操作类型 + const isPlaced = statusData.isPlaced; + const now = new Date().getTime(); + const operationType = isPlaced ? "收集" : "放置"; + + log.info(`当前动作: ${operationType}`); log.info("传送至枫丹冒险家协会锚点"); await genshin.tp(4509, 3631); await sleep(1000); - if (type == "放置") { + + if (!isPlaced) { + // 放置操作 log.info("放置晶蝶诱捕装置"); keyPress("B"); await sleep(1000); @@ -80,21 +99,28 @@ log.error(`未找到${ore},请检查背包内是否拥有该矿石!`); throw new Error(`未找到${ore}`); } + + // 更新状态信息 log.info(`当前时间: ${new Date().toLocaleString()}`); let collectionTime = new Date().getTime() + 7 * 24 * 60 * 60 * 1000; log.info(`领取时间: ${new Date(collectionTime).toLocaleString()}`); - await file.WriteTextSync("time.txt", collectionTime.toString()); - log.info("时间保存成功"); - } else if (type == "收集") { - const content = file.readTextSync("time.txt"); + + // 使用JSON格式保存状态 + statusData.isPlaced = true; + statusData.collectionTime = collectionTime; + await file.WriteTextSync("status.json", JSON.stringify(statusData, null, 2)); + log.info("状态保存成功"); + + } else { + // 收集操作 log.info(`读取领取时间成功`); - const readableTime = new Date(parseInt(content)).toLocaleString(); + const readableTime = new Date(statusData.collectionTime).toLocaleString(); log.info(`领取时间: ${readableTime}`); - const now = new Date().getTime(); - if (now < parseInt(content)) { + if (now < statusData.collectionTime) { log.error("还没到领取时间"); throw new Error(`还没到领取时间,领取时间: ${readableTime}`); } + let captureRegion = captureGameRegion(); let resList = captureRegion.findMulti(RecognitionObject.ocr(1210, 510, 210, 50)); for (let i = 0; i < resList.count; i++) { @@ -106,11 +132,14 @@ } log.info("收获晶蝶"); keyPress("F"); - await file.WriteTextSync("time.txt", ""); + + // 更新状态 + statusData.isPlaced = false; + statusData.collectionTime = 0; + await file.WriteTextSync("status.json", JSON.stringify(statusData, null, 2)); + await sleep(3000); keyPress("VK_ESCAPE"); - } else { - throw new Error("不是吧,哥们,你配置好了吗?放置还是收集啊?"); } } catch (e) { log.error(`执行脚本时出错:${e}`, e.message); diff --git a/repo/js/CrystalflyTrap/manifest.json b/repo/js/CrystalflyTrap/manifest.json index 732cebf5..47ee67cb 100644 --- a/repo/js/CrystalflyTrap/manifest.json +++ b/repo/js/CrystalflyTrap/manifest.json @@ -1,9 +1,9 @@ { "manifest_version": 1, "name": "晶蝶诱捕装置", - "version": "1.0", + "version": "2.0", "bgi_version": "0.44.3", - "description": "自动放置和收集晶蝶诱捕装置。\n\n----------使用说明----------\n●BetterGI 版本必须大于0.44.3,低于此版本无法使用!\n●请在调度器内添加两次脚本,一个收集,一个放置。\n●请确保背包内有「晶蝶诱捕装置」。\n●晶蝶诱捕装置放在枫丹冒险家协会锚点。\n●请确保背包内所选择的矿石数量大于30个。\n●请勿删除\"time.txt\"文件,里面保存的是收集奖励的时间,删除后将无法通过脚本领取晶核!", + "description": "自动放置和收集晶蝶诱捕装置。\n\n----------使用说明----------\n●BetterGI 版本必须大于0.44.3,低于此版本无法使用!\n●请确保背包内有「晶蝶诱捕装置」。\n●晶蝶诱捕装置放在枫丹冒险家协会锚点。\n●请确保背包内所选择的矿石数量大于30个。\n●请勿修改\"status.json\"文件,里面保存的是收集奖励的时间,否则将无法通过脚本领取晶核!\n\n----------更新说明----------\n●2.0版本改用json储存时间,如果你的晶核还没领取,请打开脚本所在的文件夹,复制\"time.txt\"中的所有内容,粘贴到\"status.json\"中\"collectionTime\": 后面(要把原来的0删掉!),并将false改为true。", "authors": [ { "name": "ddaodan", diff --git a/repo/js/CrystalflyTrap/settings.json b/repo/js/CrystalflyTrap/settings.json index 663d85b2..33e75cac 100644 --- a/repo/js/CrystalflyTrap/settings.json +++ b/repo/js/CrystalflyTrap/settings.json @@ -4,15 +4,6 @@ "type": "checkbox", "label": "是否启用\n防止不加调度器运行" }, - { - "name": "type", - "type": "select", - "label": "放置还是收集?", - "options": [ - "放置", - "收集" - ] - }, { "name": "ore", "type": "select", diff --git a/repo/js/CrystalflyTrap/status.json b/repo/js/CrystalflyTrap/status.json new file mode 100644 index 00000000..75737635 --- /dev/null +++ b/repo/js/CrystalflyTrap/status.json @@ -0,0 +1,4 @@ +{ + "isPlaced": false, + "collectionTime": 0 +} \ No newline at end of file diff --git a/repo/js/CrystalflyTrap/time.txt b/repo/js/CrystalflyTrap/time.txt deleted file mode 100644 index ad49f13b..00000000 --- a/repo/js/CrystalflyTrap/time.txt +++ /dev/null @@ -1 +0,0 @@ -1744916234293 \ No newline at end of file