diff --git a/repo/js/尘歌壶洞天百宝购买/items_coord.json b/repo/js/尘歌壶洞天百宝购买/items_coord.json new file mode 100644 index 00000000..34ed1b3c --- /dev/null +++ b/repo/js/尘歌壶洞天百宝购买/items_coord.json @@ -0,0 +1,42 @@ +{ + "cloth": { + "x": 670, + "y": 170, + "_name": "布匹" + }, + "transientResin": { + "x": 670, + "y": 290, + "_name": "须臾树脂" + }, + "heroExp": { + "x": 670, + "y": 410, + "_name": "大英雄的经验" + }, + "wandererExp": { + "x": 670, + "y": 530, + "_name": "流浪者的经验" + }, + "magicOre": { + "x": 670, + "y": 650, + "_name": "精锻用魔矿" + }, + "mora": { + "x": 670, + "y": 770, + "_name": "摩拉" + }, + "sacredEssence": { + "x": 670, + "y": 870, + "_name": "祝圣精华" + }, + "sacredOintment": { + "x": 670, + "y": 943, + "_name": "祝圣油膏" + } +} \ No newline at end of file diff --git a/repo/js/尘歌壶洞天百宝购买/main.js b/repo/js/尘歌壶洞天百宝购买/main.js new file mode 100644 index 00000000..129e1840 --- /dev/null +++ b/repo/js/尘歌壶洞天百宝购买/main.js @@ -0,0 +1,117 @@ +// main.js +(async function () { + // ==================== 初始化日志 ==================== + log.info("======== 脚本启动 ========"); + + //设置脚本环境的游戏分辨率和DPI缩放 + setGameMetrics(1920, 1080, 1.5); + + let purchasedCount = 0; // 已成功购买的商品种类 + + function getDynamicY(y) { + return y - (purchasedCount * 120); // 每个已购商品使后续商品Y-20 + } + + // ==================== 2. 加载商品坐标 ==================== + let items = {}; + try { + const itemsText = file.readTextSync("items_coord.json"); + items = JSON.parse(itemsText); + log.info("[成功] 商品坐标加载完成"); + } catch (e) { + log.error("[致命错误] 商品坐标文件损坏,脚本终止"); + return; + } + + // ==================== 3. 定义固定按钮坐标 ==================== + const FIXED_POS = { + buyCategory: { x: 140, y: 162 }, // 购买类目入口y洞天宝货162,摆设,253,摆设图纸344,洞天珍物435,洞天种物526,木材617 + exchangeBtn: { x: 1750, y: 1020 }, // 兑换按钮 + maxQuantity: { x: 1180, y: 602 }, // 数量按钮x(747,1180) + confirmBtn: { x: 1170, y: 780 }, // 确认兑换 + closePopup: { x: 1700, y: 200 } // 关闭弹窗 + }; + + // ==================== 5. 核心购买逻辑 ==================== + async function purchaseItem(itemKey) { + const itemConfig = items[itemKey]; + if (!itemConfig) { + log.error(`[配置错误] 未找到 ${itemKey} 的坐标配置`); + return; + } + //log.info(`自定义配置为 ${settings[itemKey]}`); + // 检查购买开关 + if (settings[itemKey] !== "是") { + //log.info(`[跳过] ${itemConfig._name || itemKey}`); + return; + } + + try { + log.info(`[开始] 正在购买 ${itemConfig._name}`); + + // 1. 进入购买类目 + click(FIXED_POS.buyCategory.x, FIXED_POS.buyCategory.y); + await sleep(500); + + // 动态计算坐标 + const targetY = getDynamicY(itemConfig.y); + + // 2. 选择商品 + click(itemConfig.x, targetY); + await sleep(500); + + // 3. 点击兑换 + click(FIXED_POS.exchangeBtn.x, FIXED_POS.exchangeBtn.y); + await sleep(500); + + // 4. 选择最大数量 + click(FIXED_POS.maxQuantity.x, FIXED_POS.maxQuantity.y); + await sleep(500); + + // 5. 确认兑换 + click(FIXED_POS.confirmBtn.x, FIXED_POS.confirmBtn.y); + await sleep(1000); + + // 6. 关闭弹窗 + click(FIXED_POS.closePopup.x, FIXED_POS.closePopup.y); + await sleep(500); + + purchasedCount++; + log.info(`已购买商品数量: ${purchasedCount}`); + // 输出示例: "已购买商品数量: 3" + log.info(`[成功] ${itemConfig._name} 购买完成`); + } catch (e) { + log.error(`[失败] ${itemConfig._name} 操作异常: ${e.message}`); + // 异常时强制关闭弹窗 + click(FIXED_POS.closePopup.x, FIXED_POS.closePopup.y); + await sleep(3000); + } + } + + // ==================== 6. 主执行流程 ==================== + try { + // 前置操作 + keyPress("F"); + await sleep(2000); + keyPress("F"); + await sleep(1000); + click(1350, 655); // 打开洞天百宝界面 + await sleep(500); + + // 遍历所有商品 + for (const itemKey of Object.keys(items)) { + await purchaseItem(itemKey); + await sleep(500); // 商品间操作间隔 + } + } catch (e) { + log.error(`[全局异常] ${e.message}`); + } finally { + keyPress("Escape"); + await sleep(2000); + click(1360, 810);//再见 + await sleep(1000); + click(1360, 810);//退出对话 + await sleep(1000); + log.info("======== 脚本执行结束 ========"); + } +})(); \ No newline at end of file diff --git a/repo/js/尘歌壶洞天百宝购买/manifest.json b/repo/js/尘歌壶洞天百宝购买/manifest.json new file mode 100644 index 00000000..91230a11 --- /dev/null +++ b/repo/js/尘歌壶洞天百宝购买/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "尘歌壶洞天百宝购买", + "version": "1.0", + "bgi_version": "0.36.0", + "description": "用于每周一尘歌壶洞天百宝购买,可自定义配置购买须臾树脂,大英雄的经验,流浪者的经验,精锻用魔矿,摩拉,祝圣精华,祝圣油膏", + "authors": [ + { + "name": "miludelongwang" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} \ No newline at end of file diff --git a/repo/js/尘歌壶洞天百宝购买/readme.txt b/repo/js/尘歌壶洞天百宝购买/readme.txt new file mode 100644 index 00000000..33ea06f6 --- /dev/null +++ b/repo/js/尘歌壶洞天百宝购买/readme.txt @@ -0,0 +1,9 @@ +用于每周一尘歌壶洞天百宝购买,可自定义配置购买须臾树脂,大英雄的经验,流浪者的经验,精锻用魔矿,摩拉,祝圣精华,祝圣油膏 + +请于阿园附近(显示有对话交互)开始脚本 + +由于自定义配置表单7个之后不显示,所以布匹的配置为空,无法购买 + +后面可能会添加摆设,摆设图纸,洞天珍物,洞天种物,木材的购买 + +默认购买最大数量,暂时不支持自定义数量购买 \ No newline at end of file diff --git a/repo/js/尘歌壶洞天百宝购买/settings.json b/repo/js/尘歌壶洞天百宝购买/settings.json new file mode 100644 index 00000000..b687588b --- /dev/null +++ b/repo/js/尘歌壶洞天百宝购买/settings.json @@ -0,0 +1,58 @@ +[ +// { +// "name": "cloth", +// "type": "select", +// "label": "布匹", +// "options": ["是", "否"], +// "default": "否" +// }, + { + "name": "transientResin", + "type": "select", + "label": "须臾树脂", + "options": ["是", "否"], + "default": "否" + }, + { + "name": "heroExp", + "type": "select", + "label": "大英雄的经验", + "options": ["是", "否"], + "default": "否" + }, + { + "name": "wandererExp", + "type": "select", + "label": "流浪者的经验", + "options": ["是", "否"], + "default": "否" + }, + { + "name": "magicOre", + "type": "select", + "label": "精锻用魔矿", + "options": ["是", "否"], + "default": "否" + }, + { + "name": "mora", + "type": "select", + "label": "摩拉", + "options": ["是", "否"], + "default": "否" + }, + { + "name": "sacredEssence", + "type": "select", + "label": "祝圣精华", + "options": ["是", "否"], + "default": "否" + }, + { + "name": "sacredOintment", + "type": "select", + "label": "祝圣油膏", + "options": ["是", "否"], + "default": "是" + } +] \ No newline at end of file