diff --git a/repo/js/AutoRefinedCondensationResin/README.md b/repo/js/AutoRefinedCondensationResin/README.md
index a95a7d43b..8f969840e 100644
--- a/repo/js/AutoRefinedCondensationResin/README.md
+++ b/repo/js/AutoRefinedCondensationResin/README.md
@@ -7,26 +7,10 @@
- 自动适应游戏内时间机制
3. **灵活执行设置**:
- 支持每日自动执行
- - 可指定每周特定日期执行
-4. **精准识别技术**:
- - 使用OCR确保操作准确性
- - 仅支持中文游戏界面
+ - 可指定每星期特定星期几执行
## 参数说明
| 参数名 | 类型 | 说明 |
|------------|------------|----------------------------------------------------------------------|
| **合成台位置** | 下拉选择 | 可选:蒙德/璃月/稻妻/枫丹
默认:璃月合成台 |
-| **每日执行开关** | 复选框 | 开启后无视星期设置,每日自动执行 |
-| **指定执行星期** | 文本输入 | 格式:逗号分隔数字(1=周一,7=周日)
例:`2,3,4,5,6,7` |
-
-
-### 更新日志
-### 1.3
-1. 更改默认合成台為蒙德合成台
-### 1.2
-1. 合成树脂前先解除筛选状态
-### 1.1
-1. 修正指定执行星期只输入1个数字时执行错误
-### 1.0
-
-1. 初始版本发布
+| **指定执行星期** | 勾选 | 勾选星期一~星期日 |
diff --git a/repo/js/AutoRefinedCondensationResin/main.js b/repo/js/AutoRefinedCondensationResin/main.js
index d86babce9..f1d657920 100644
--- a/repo/js/AutoRefinedCondensationResin/main.js
+++ b/repo/js/AutoRefinedCondensationResin/main.js
@@ -4,8 +4,44 @@ const CondensedResin = RecognitionObject.TemplateMatch(file.ReadImageMatSync("as
const Clear = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/Clear.png"));
// 读取配置文件
let location = settings.location;
-const settingsWeek = settings.week;
-const everyDay = settings.everyDay;
+
+/**
+ * 根据星期配置判断是否运行脚本
+ * @param {Array} weekSelection - 用户选择的星期数组
+ * @returns {boolean} 是否符合运行条件
+ */
+function shouldRunByWeekConfig(weekSelection) {
+ const weekDays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
+
+ // 检查配置是否为空
+ if (!Array.isArray(weekSelection) || weekSelection.length === 0) {
+ return false;
+ }
+
+ // 取得调整后的星期(0-6,0=星期日)
+ const getAdjustedDayOfWeek = () => {
+ const now = new Date();
+ let dayOfWeek = now.getDay(); // 0-6
+ const hours = now.getHours();
+
+ // 凌晨 00:00~04:00 视为前一天
+ if (hours < 4) {
+ dayOfWeek = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
+ log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},视为前一天(${weekDays[dayOfWeek]})`);
+ } else {
+ log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},使用当天(${weekDays[dayOfWeek]})`);
+ }
+
+ return dayOfWeek;
+ };
+
+ const adjustedDayOfWeek = getAdjustedDayOfWeek();
+ const currentChineseDay = weekDays[adjustedDayOfWeek];
+
+ // 检查是否在允许的星期范围内
+ const shouldRun = weekSelection.includes(currentChineseDay);
+ return shouldRun;
+}
// 执行路径
async function AutoPath(locationName) {
@@ -110,110 +146,37 @@ async function condensedResin() {
}
(async function () {
- // 获取
- function validateAndStoreNumbers(input) {
- // 去除所有空格
- const cleanedInput = input.replace(/\s/g, '');
-
- // 使用正则表达式检测是否符合期望格式
- const regex = /^([1-7])(,([1-7]))*$/;
-
- // 检测输入字符串是否符合正则表达式
- if (regex.test(cleanedInput)) {
- // 将输入字符串按逗号分割成数组
- const numbers = cleanedInput.split(',');
- return numbers.map(Number);
- } else {
- return false;
- }
+ // 检查配置是否存在
+ if (!Object.keys(settings).includes("execute_Week")) {
+ log.error("首次运行前请编辑JS脚本自定义配置");
+ return;
}
- // 获取调整后的星期几(考虑00:00~04:00视为前一天)
- function getAdjustedDayOfWeek() {
- const now = new Date();
- let dayOfWeek = now.getDay(); // 0-6 (0是周日)
- const hours = now.getHours();
-
- // 如果时间在00:00~04:00之间,视为前一天
- if (hours < 4) {
- dayOfWeek = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // 前一天
- log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},视为前一天(星期 ${dayOfWeek === 0 ? 7 : dayOfWeek})`);
- } else {
- log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},使用当天(星期 ${dayOfWeek === 0 ? 7 : dayOfWeek})`);
- }
-
- // 转换为1-7格式(7代表周日)
- return dayOfWeek === 0 ? 7 : dayOfWeek;
+ // 检查是否应该运行
+ const executeWeek = Array.from(settings.execute_Week || []);
+ if (!shouldRunByWeekConfig(executeWeek)) {
+ log.info(`交互或拾取:"不运行"`);
+ return;
}
//main/======================================================================================
setGameMetrics(1920, 1080, 1)
await genshin.returnMainUi();
-
- // 判断设置合法性
- var items = [];
-
- // 每天都合成体力,开启后无视星期设定,运行完直接return跳出
- if (everyDay) {
- log.info("已开启每天都合成体力,无视星期设置");
- try {
- if (!location) {
- location = "蒙德合成台";
- log.info(`未设置传送位置,默认前往 ${location}...`);
- }
- log.info(`正在前往 ${location} 合成浓缩树脂`);
- await AutoPath(location);
- await sleep(1000);
- log.info("寻找合成台");
- await condensedResin();
- await sleep(1000);
- await genshin.returnMainUi();
- return;
- } catch (e) {
- log.error("传送失败,请检查设置");
- return;
+ try {
+ if (!location) {
+ location = "蒙德合成台";
+ log.info(`未设置传送位置,默认前往 ${location}...`);
}
- }
-
- if (settingsWeek && !everyDay) {
- items = validateAndStoreNumbers(settingsWeek);
- if (!items) {
- log.error("星期设置格式错误,请使用类似'1,3,5,7'的格式");
- return;
- }
-
- // 获取调整后的星期几(考虑00:00~04:00视为前一天)
- const dayOfWeek = getAdjustedDayOfWeek();
-
- // 检查当前星期是否在用户设置的范围内
- if (items.includes(dayOfWeek)) {
- try {
- // 读取配置文件
- if (!location) {
- location = "璃月合成台";
- log.info(`未设置传送位置,默认前往 ${location}...`);
- }
- log.info(`今天是星期 ${dayOfWeek},正在前往 ${location} 合成浓缩树脂`);
- await AutoPath(location);
- await sleep(1000);
- log.info("寻找合成台");
- await condensedResin();
- await sleep(1000);
- await genshin.returnMainUi();
- } catch (e) {
- log.error("传送失败,请检查设置");
- return;
- }
- } else {
- log.info(`今天是星期 ${dayOfWeek},不需要合成体力`);
- return;
- }
- } else if (!everyDay) {
- log.error("还没有设置需要在星期几合成体力呢");
- log.error("请在调试器里添加本脚本->右键JS脚本->修改JS脚本自定义配置.");
+ log.info(`正在前往 ${location} 合成浓缩树脂`);
+ await AutoPath(location);
+ await sleep(1000);
+ log.info("寻找合成台");
+ await condensedResin();
+ await sleep(1000);
+ await genshin.returnMainUi();
+ return;
+ } catch (e) {
+ log.error("传送失败,请检查设置");
return;
}
-
- //main/**======================================================================================
-
})();
\ No newline at end of file
diff --git a/repo/js/AutoRefinedCondensationResin/manifest.json b/repo/js/AutoRefinedCondensationResin/manifest.json
index 0b97447d2..bf06bd059 100644
--- a/repo/js/AutoRefinedCondensationResin/manifest.json
+++ b/repo/js/AutoRefinedCondensationResin/manifest.json
@@ -1,9 +1,9 @@
{
"manifest_version": 1,
"name": "自动合成浓缩树脂",
- "version": "1.3",
- "bgi_version": "0.47.0",
- "description": "\n可前往多国合成台自动合成浓缩树脂(仅支持中文语言)。\n通过OCR技术确保准确进入合成台并完成合成操作。\n可设置特定星期执行任务(例:输入\"1,3,5,7\"在周一/三/五/日执行)。\n特殊时间处理:00:00~04:00视为前一天。",
+ "version": "1.4",
+ "bgi_version": "0.55.0",
+ "description": "\n可前往多国合成台自动合成浓缩树脂(仅支持中文语言)。\n可设置特定星期几执行任务。\n特殊时间处理:00:00~04:00视为前一天。",
"tags": [
"OCR",
"合成树脂"
diff --git a/repo/js/AutoRefinedCondensationResin/settings.json b/repo/js/AutoRefinedCondensationResin/settings.json
index 7a0a403d5..dff03613b 100644
--- a/repo/js/AutoRefinedCondensationResin/settings.json
+++ b/repo/js/AutoRefinedCondensationResin/settings.json
@@ -14,15 +14,26 @@
"default": "蒙德合成台"
},
{
- "name": "everyDay",
- "type": "checkbox",
- "label": "每日合成开关(开启后无视下方设定)",
- "default": true
- },
- {
- "name": "week",
- "type": "input-text",
- "label": "指定执行星期\n(使用\",\"分割多个星期几)\n例:输入\"2,3,4,5,6,7\",会在星期2,3,4,5,6,日才合成体力",
- "default": "2,3,4,5,6,7"
+ "name": "execute_Week",
+ "type": "multi-checkbox",
+ "label": "指定星期几运行",
+ "default": [
+ "星期一",
+ "星期二",
+ "星期三",
+ "星期四",
+ "星期五",
+ "星期六",
+ "星期日"
+ ],
+ "options": [
+ "星期一",
+ "星期二",
+ "星期三",
+ "星期四",
+ "星期五",
+ "星期六",
+ "星期日"
+ ]
}
]
\ No newline at end of file
diff --git a/repo/js/尘歌壶一条龙/README.md b/repo/js/尘歌壶一条龙/README.md
index dbfd63527..742e6424e 100644
--- a/repo/js/尘歌壶一条龙/README.md
+++ b/repo/js/尘歌壶一条龙/README.md
@@ -5,7 +5,6 @@
- 自动找阿圆领取奖励(宝钱+好感)
- 自动购买物品
- 自动做饭、锻造
-- 智能安排执行时间
## ⚙️ 设置说明
@@ -24,7 +23,7 @@
**格式同上**
- 锻造路径示例:`D 2000`
- 烹饪路径示例:`W 1000`
-- 只在指定日期执行
+- 只在指定星期几执行
### 4. 奖励领取设置
- ✅ 不领取角色好感
@@ -32,13 +31,8 @@
- 勾选=跳过,不勾选=领取
### 5. 执行时间设置
-- **周几执行尘歌壶**:默认`1,3,6`(周一、三、六)
- - 输入0=每天,输入1-7=周一到周日
- - 7代表周日
-
-- **周几购买物品/做饭/锻造**:默认`1`(仅周一)
- - 输入0=每天执行
- - 可设置多天:`1,3,5`(周一、三、五)
+- 勾选星期几执行尘歌壶
+- 勾选星期几购买物品/做饭/锻造
## 🚀 快速开始
1. 游戏分辨率设为:1920×1080
diff --git a/repo/js/尘歌壶一条龙/main.js b/repo/js/尘歌壶一条龙/main.js
index d75c49a2b..e31d94aa5 100644
--- a/repo/js/尘歌壶一条龙/main.js
+++ b/repo/js/尘歌壶一条龙/main.js
@@ -1,43 +1,33 @@
+// 尘歌壶一条龙-领取洞天宝钱、角色好感和购买物品
async function main() {
setGameMetrics(1920, 1080, 1);
- // 获取调整后的周几
- const dayOfWeek = getAdjustedDayOfWeek();
-
- // 检查是否需要跳过整个尘歌壶流程
- if (settings.week) {
- const weekArray = validateAndStoreNumbers(settings.week);
-
- if (!weekArray) {
- log.error("周设置格式错误,请使用类似'0,1,3,5,7'的格式(0表示每天运行),将跳过周检查");
- } else if (weekArray.length > 0) {
- // 如果设置了0,表示每天运行,跳过周检查
- if (weekArray.includes(0)) {
- log.info("周设置中包含0,每天运行尘歌壶流程");
- } else if (!weekArray.includes(dayOfWeek)) {
- log.info(`今天是周 ${dayOfWeek},不在设置的周 ${settings.week} 中,跳过尘歌壶流程`);
- return;
- }
- }
+ // 检查配置是否存在
+ if (!Object.keys(settings).includes("execute_Week")) {
+ log.error("首次运行前请编辑JS脚本自定义配置");
+ return;
}
- // 解析exchangeWeek设置,判断今天是否兑换物品
- let exchangeWeekArray = [1]; // 默认周一
- if (settings.exchangeWeek) {
- const result = validateAndStoreNumbers(settings.exchangeWeek);
- if (result) {
- exchangeWeekArray = result;
- } else {
- log.error("exchangeWeek设置格式错误,将使用默认值(周一)");
- }
+ // 检查是否应该运行
+ const executeWeek = Array.from(settings.execute_Week || []);
+ if (!shouldRunByWeekConfig(executeWeek)) {
+ log.info(`交互或拾取:"不运行"`);
+ return;
}
-
+
+ // 检查是否应该执行 购买物品、锻造、烹饪
let shouldExchange = false;
- if (exchangeWeekArray.includes(0)) {
- shouldExchange = true;
- log.info("exchangeWeek设置为0,每天兑换物品");
- } else if (exchangeWeekArray.includes(dayOfWeek)) {
- shouldExchange = true;
+ const exchange_Week = Array.from(settings.exchange_Week || []);
+
+ // 先检查配置是否为空
+ if (exchange_Week.length === 0) {
+ log.info("额外流程未选择任何星期,不执行购买物品、烹饪、锻造");
+ shouldExchange = false;
+ } else {
+ shouldExchange = shouldRunByWeekConfig(exchange_Week);
+ if (shouldExchange) {
+ log.info("额外流程执行日,将执行购买物品、锻造、烹饪");
+ }
}
// 检查配置
@@ -66,9 +56,8 @@ async function main() {
// 领取好感度以及洞天宝钱
await collectRewards();
-
+
if (shouldExchange) {
- log.info(`今天是周 ${dayOfWeek},兑换物品`);
// 兑换物品
await exchangeItems();
}
@@ -79,11 +68,205 @@ async function main() {
await sleep(1000);
click(960, 540);
- // 周N执行锻造任务和烹饪任务
+/**
+ * 根据星期配置判断是否运行脚本
+ * @param {Array} weekSelection - 用户选择的星期数组(中文格式)
+ * @returns {boolean} 是否符合运行条件
+ */
+function shouldRunByWeekConfig(weekSelection) {
+ const weekDays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
+
+ // 检查配置是否为空
+ if (!Array.isArray(weekSelection) || weekSelection.length === 0) {
+ return false;
+ }
+
+ // 取得调整后的星期(0-6,0=星期日)
+ const getAdjustedDayOfWeek = () => {
+ const now = new Date();
+ let dayOfWeek = now.getDay(); // 0-6
+ const hours = now.getHours();
+
+ // 凌晨 00:00~04:00 视为前一天
+ if (hours < 4) {
+ dayOfWeek = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
+ log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},视为前一天(${weekDays[dayOfWeek]})`);
+ } else {
+ log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},使用当天(${weekDays[dayOfWeek]})`);
+ }
+
+ return dayOfWeek;
+ };
+
+ const adjustedDayOfWeek = getAdjustedDayOfWeek();
+ const currentChineseDay = weekDays[adjustedDayOfWeek];
+
+ // 检查是否在允许的星期范围内
+ const shouldRun = weekSelection.includes(currentChineseDay);
+ return shouldRun;
+}
+
+// 检查配置
+function checkSettings() {
+ if (!settings.route) {
+ log.warn("当前未配置进入尘歌壶以后的路线,脚本可能无法正常运行");
+ }
+
+ // 记录是否跳过领取角色好感和洞天宝钱
+ if (settings.skipCharacterReward) {
+ log.info("当前配置:不领取角色好感");
+ }
+
+ if (settings.skipTreasureReward) {
+ log.info("当前配置:不领取洞天宝钱");
+ }
+}
+
+// 打开背包并切换到小道具
+async function openBackpack() {
+ keyPress("B");
+ await sleep(1000);
+ click(1048, 50);
+ await sleep(1000);
+}
+
+// 查找并使用尘歌壶
+async function findAndUseSereniteaPot() {
+ await findSereniteaPot();
+ await sleep(1000);
+ keyPress("F");
+}
+
+// 等待进入尘歌壶
+async function waitForEnteringSereniteaPot() {
+ // 先等待5秒,应该不会比这快
+ await sleep(5000);
+
+ // 等待传送完成
+ let isEntering = true;
+ while (isEntering) {
+ let screen = captureGameRegion();
+ let targetRegion = screen.DeriveCrop(85, 1025, 69, 28);
+ let ocrRo = RecognitionObject.Ocr(0, 0, targetRegion.Width, targetRegion.Height);
+ let ocrResult = targetRegion.find(ocrRo);
+ screen.dispose();
+ targetRegion.dispose();
+ if (ocrResult.Text.toLowerCase().includes("enter")) {
+ isEntering = false;
+ }
+ await sleep(1000);
+ }
+
+ // 进入尘歌壶以后,等待1秒
+ await sleep(1000);
+}
+
+// 移动到阿圆并领取奖励
+async function collectRewards() {
+ log.info("开始领取好感度以及洞天宝钱");
+
+ click(1370, 432);
+ await sleep(1000);
+
+ // 领取好感度
+ if (!settings.skipCharacterReward) {
+ log.info("领取角色好感度");
+ click(1810, 715);
+ log.info(`交互或拾取:"好感"`);
+ await sleep(1000);
+
+ // 关闭洞天赠礼弹窗
+ click(1346, 300);
+ await sleep(1000);
+ } else {
+ log.info("根据自定义配置,跳过领取角色好感度");
+ }
+
+ // 领取洞天宝钱
+ if (!settings.skipTreasureReward) {
+ log.info("领取洞天宝钱");
+ click(1080, 929);
+ log.info(`交互或拾取:"洞天宝钱"`);
+ await sleep(1000);
+
+ // 关闭洞天财瓮弹窗
+ click(1346, 300);
+ await sleep(1000);
+ } else {
+ log.info("根据自定义配置,跳过领取洞天宝钱");
+ }
+
+ // 关闭对话
+ click(1864, 47);
+ await sleep(3000);
+}
+
+async function findSereniteaPot() {
+ let currentX = 178; // 起始X坐标
+ let searchCount = 0; // 添加查找次数计数器
+ const MAX_SEARCH_COUNT = 5; // 最大查找次数
+
+ while (searchCount < MAX_SEARCH_COUNT) {
+ searchCount++;
+ // 点击当前坐标的小道具
+ click(currentX, 188);
+ await sleep(1000);
+
+ // 获取游戏区域截图
+ let screen = captureGameRegion();
+
+ // 根据指定区域进行剪裁
+ let targetRegion = screen.DeriveCrop(1307, 119, 493, 55);
+
+ // 使用OCR识别
+ let ocrRo = RecognitionObject.Ocr(0, 0, targetRegion.Width, targetRegion.Height);
+ let ocrResult = targetRegion.find(ocrRo);
+ screen.dispose();
+ targetRegion.dispose();
+
+ if (!ocrResult.isEmpty() && ocrResult.Text.includes("尘歌壶")) {
+ // 点击指定坐标
+ click(1690, 1020);
+ await sleep(1000);
+ // 检查一下背包页面是否退出了,有可能当前角色状态没法放置尘歌壶,直接再判断一次截图区域文本是不是尘歌壶就行
+ let screen2 = captureGameRegion();
+ // 根据指定区域进行剪裁
+ let targetRegion2 = screen2.DeriveCrop(1307, 119, 493, 55);
+ let ocrRo2 = RecognitionObject.Ocr(0, 0, targetRegion2.Width, targetRegion2.Height);
+ let ocrResult2 = targetRegion2.find(ocrRo2);
+ screen2.dispose();
+ targetRegion2.dispose();
+ if (!ocrResult2.isEmpty() && ocrResult2.Text.includes("尘歌壶")) {
+ throw new Error("当前无法放置尘歌壶,请检查具体原因");
+ }
+ return;
+ } else {
+ currentX += 145; // 向右移动145像素,查找下一个格子的小道具
+ await sleep(100);
+ }
+ }
+
+ throw new Error(`查找尘歌壶次数超过${MAX_SEARCH_COUNT}次,请检查背包是否存在尘歌壶`);
+}
+
+async function moveToTarget(routeConfig) {
+ if (!routeConfig) return;
+
+ const routes = routeConfig.split(',').map(r => r.trim());
+ for (const route of routes) {
+ const [direction, time] = route.split(' ');
+ if (!direction || !time) continue;
+
+ keyDown(direction);
+ await sleep(parseInt(time));
+ keyUp(direction);
+ await sleep(500);
+ }
+}
+
+ // 星期几N执行锻造任务和烹饪任务
if (shouldExchange) {
- log.info(`今天是周 ${dayOfWeek},执行锻造任务`);
if (settings.forgingRoute) await handleForging();
- log.info(`今天是周 ${dayOfWeek},执行烹饪任务`);
if (settings.cookingRoute) await handleCooking();
keyDown("a");
await sleep(2000);
@@ -147,44 +330,6 @@ async function handleForging() {
}
}
-// 获取当前周(考虑00:00~04:00视为前一天)
- function getAdjustedDayOfWeek() {
- const now = new Date();
- let dayOfWeek = now.getDay(); // 0-6 (0是周日)
- const hours = now.getHours();
-
- // 如果时间在00:00~04:00之间,视为前一天
- if (hours < 4) {
- dayOfWeek = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // 前一天
- log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},视为前一天(周 ${dayOfWeek === 0 ? 7 : dayOfWeek})`);
- } else {
- log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},使用当天(周 ${dayOfWeek === 0 ? 7 : dayOfWeek})`);
- }
-
- // 转换为1-7格式(7代表周日)
- return dayOfWeek === 0 ? 7 : dayOfWeek;
- }
-
- // 验证周设置格式
- function validateAndStoreNumbers(input) {
- if (!input) return false;
-
- // 去除所有空格
- const cleanedInput = input.replace(/\s/g, '');
-
- // 使用正则表达式检测是否符合期望格式
- const regex = /^([0-7])(,([0-7]))*$/;
-
- // 检测输入字符串是否符合正则表达式
- if (regex.test(cleanedInput)) {
- // 将输入字符串按逗号分割成数组
- const numbers = cleanedInput.split(',');
- return numbers.map(Number);
- } else {
- return false;
- }
- }
-
async function exchangeItems() {
if (!settings.itemsToBuy) {
log.warn("未配置要购买的物品");
@@ -276,7 +421,7 @@ async function exchangeItems() {
log.info(`开始购买物品: ${itemName}`);
- // 执行购买流程
+ // 运行购买流程
// 1. 鼠标移动到起始位置
moveMouseTo(1448, 693);
await sleep(300);
@@ -302,6 +447,7 @@ async function exchangeItems() {
await sleep(1000);
log.info(`成功购买物品: ${itemName}`);
+ log.info(`交互或拾取:"${itemName}"`);
// 检查是否已找到所有物品
if (foundItems.length === itemsToBuy.length) {
@@ -329,160 +475,4 @@ async function exchangeItems() {
}
-// 检查配置
-function checkSettings() {
- if (!settings.route) {
- log.warn("当前未配置进入尘歌壶以后的路线,脚本可能无法正常运行");
- }
-
- // 记录是否跳过领取角色好感和洞天宝钱
- if (settings.skipCharacterReward) {
- log.info("当前配置:不领取角色好感");
- }
-
- if (settings.skipTreasureReward) {
- log.info("当前配置:不领取洞天宝钱");
- }
-}
-
-// 打开背包并切换到小道具
-async function openBackpack() {
- keyPress("B");
- await sleep(1000);
- click(1048, 50);
- await sleep(1000);
-}
-
-// 查找并使用尘歌壶
-async function findAndUseSereniteaPot() {
- await findSereniteaPot();
- await sleep(1000);
- keyPress("F");
-}
-
-// 等待进入尘歌壶
-async function waitForEnteringSereniteaPot() {
- // 先等待5秒,应该不会比这快
- await sleep(5000);
-
- // 等待传送完成
- let isEntering = true;
- while (isEntering) {
- let screen = captureGameRegion();
- let targetRegion = screen.DeriveCrop(85, 1025, 69, 28);
- let ocrRo = RecognitionObject.Ocr(0, 0, targetRegion.Width, targetRegion.Height);
- let ocrResult = targetRegion.find(ocrRo);
- screen.dispose();
- targetRegion.dispose();
- if (ocrResult.Text.toLowerCase().includes("enter")) {
- isEntering = false;
- }
- await sleep(1000);
- }
-
- // 进入尘歌壶以后,等待1秒
- await sleep(1000);
-}
-
-// 移动到阿圆并领取奖励
-async function collectRewards() {
- log.info("开始领取好感度以及洞天宝钱");
-
- click(1370, 432);
- await sleep(1000);
-
- // 领取好感度
- if (!settings.skipCharacterReward) {
- log.info("领取角色好感度");
- click(1810, 715);
- await sleep(1000);
-
- // 关闭洞天赠礼弹窗
- click(1346, 300);
- await sleep(1000);
- } else {
- log.info("根据自定义配置,跳过领取角色好感度");
- }
-
- // 领取洞天宝钱
- if (!settings.skipTreasureReward) {
- log.info("领取洞天宝钱");
- click(1080, 929);
- await sleep(1000);
-
- // 关闭洞天财瓮弹窗
- click(1346, 300);
- await sleep(1000);
- } else {
- log.info("根据自定义配置,跳过领取洞天宝钱");
- }
-
- // 关闭对话
- click(1864, 47);
- await sleep(3000);
-}
-
-async function findSereniteaPot() {
- let currentX = 178; // 起始X坐标
- let searchCount = 0; // 添加查找次数计数器
- const MAX_SEARCH_COUNT = 5; // 最大查找次数
-
- while (searchCount < MAX_SEARCH_COUNT) {
- searchCount++;
- // 点击当前坐标的小道具
- click(currentX, 188);
- await sleep(1000);
-
- // 获取游戏区域截图
- let screen = captureGameRegion();
-
- // 根据指定区域进行剪裁
- let targetRegion = screen.DeriveCrop(1307, 119, 493, 55);
-
- // 使用OCR识别
- let ocrRo = RecognitionObject.Ocr(0, 0, targetRegion.Width, targetRegion.Height);
- let ocrResult = targetRegion.find(ocrRo);
- screen.dispose();
- targetRegion.dispose();
-
- if (!ocrResult.isEmpty() && ocrResult.Text.includes("尘歌壶")) {
- // 点击指定坐标
- click(1690, 1020);
- await sleep(1000);
- // 检查一下背包页面是否退出了,有可能当前角色状态没法放置尘歌壶,直接再判断一次截图区域文本是不是尘歌壶就行
- let screen2 = captureGameRegion();
- // 根据指定区域进行剪裁
- let targetRegion2 = screen2.DeriveCrop(1307, 119, 493, 55);
- let ocrRo2 = RecognitionObject.Ocr(0, 0, targetRegion2.Width, targetRegion2.Height);
- let ocrResult2 = targetRegion2.find(ocrRo2);
- screen2.dispose();
- targetRegion2.dispose();
- if (!ocrResult2.isEmpty() && ocrResult2.Text.includes("尘歌壶")) {
- throw new Error("当前无法放置尘歌壶,请检查具体原因");
- }
- return;
- } else {
- currentX += 145; // 向右移动145像素,查找下一个格子的小道具
- await sleep(100);
- }
- }
-
- throw new Error(`查找尘歌壶次数超过${MAX_SEARCH_COUNT}次,请检查背包是否存在尘歌壶`);
-}
-
-async function moveToTarget(routeConfig) {
- if (!routeConfig) return;
-
- const routes = routeConfig.split(',').map(r => r.trim());
- for (const route of routes) {
- const [direction, time] = route.split(' ');
- if (!direction || !time) continue;
-
- keyDown(direction);
- await sleep(parseInt(time));
- keyUp(direction);
- await sleep(500);
- }
-}
-
-main();
+main();
\ No newline at end of file
diff --git a/repo/js/尘歌壶一条龙/manifest.json b/repo/js/尘歌壶一条龙/manifest.json
index 441e1ebf1..81e5cf39a 100644
--- a/repo/js/尘歌壶一条龙/manifest.json
+++ b/repo/js/尘歌壶一条龙/manifest.json
@@ -1,7 +1,8 @@
{
"manifest_version": 1,
"name": "尘歌壶一条龙",
- "version": "1.2",
+ "version": "1.3",
+ "bgi_version": "0.55.0",
"description": "自动放置并进入尘歌壶,寻找阿圆,领取洞天宝钱和好感,做饭,锻造(需要配置进入尘歌壶以后的路线),支持自动购买指定物品。推荐洞天摹数81708444664",
"tags": ["尘歌壶","模拟点击","周计划"],
"authors": [
diff --git a/repo/js/尘歌壶一条龙/settings.json b/repo/js/尘歌壶一条龙/settings.json
index fd78e6b25..f2eec6982 100644
--- a/repo/js/尘歌壶一条龙/settings.json
+++ b/repo/js/尘歌壶一条龙/settings.json
@@ -12,12 +12,12 @@
{
"name": "forgingRoute",
"type": "input-text",
- "label": "锻造路径(格式同上),示例:D 2000\n周一自动执行"
+ "label": "锻造路径(格式同上),示例:D 2000"
},
{
"name": "cookingRoute",
"type": "input-text",
- "label": "烹饪路径(格式同上),示例:W 1000\n周一自动执行"
+ "label": "烹饪路径(格式同上),示例:W 1000"
},
{
"name": "skipCharacterReward",
@@ -30,15 +30,39 @@
"label": "不领取洞天宝钱(注意是不领取)"
},
{
- "name": "week",
- "type": "input-text",
- "label": "指定周几执行\n(使用\",\"分割多个周几)\n例:输入\"2,3,4,5,6,7\",会在周2,3,4,5,6,日才运行尘歌壶流程",
- "default": "1,3,6"
+ "name": "execute_Week",
+ "type": "multi-checkbox",
+ "label": "指定星期几运行",
+ "default": [
+ "星期一",
+ "星期三",
+ "星期六"
+ ],
+ "options": [
+ "星期一",
+ "星期二",
+ "星期三",
+ "星期四",
+ "星期五",
+ "星期六",
+ "星期日"
+ ]
},
{
- "name": "exchangeWeek",
- "type": "input-text",
- "label": "指定在周几购买物品、烹饪、锻造\n(使用\",\"分割多个周几,0表示每天)\n例:输入\"1,3,5\",会在周一、三、五购买物品、烹饪、锻造\n默认:1(周一)",
- "default": "1"
+ "name": "exchange_Week",
+ "type": "multi-checkbox",
+ "label": "额外流程\n指定在星期几 购买物品、烹饪、锻造",
+ "default": [
+ "星期一"
+ ],
+ "options": [
+ "星期一",
+ "星期二",
+ "星期三",
+ "星期四",
+ "星期五",
+ "星期六",
+ "星期日"
+ ]
}
]
diff --git a/repo/js/纪行周常-10个boss一条龙/main.js b/repo/js/纪行周常-10个boss一条龙/main.js
index 8f1ad0e52..66bfcf897 100644
--- a/repo/js/纪行周常-10个boss一条龙/main.js
+++ b/repo/js/纪行周常-10个boss一条龙/main.js
@@ -1,4 +1,56 @@
+/**
+ * 根据星期配置判断是否运行脚本
+ * @param {Array} weekSelection - 用户选择的星期数组
+ * @returns {boolean} 是否符合运行条件
+ */
+function shouldRunByWeekConfig(weekSelection) {
+ const weekDays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
+
+ // 检查配置是否为空
+ if (!Array.isArray(weekSelection) || weekSelection.length === 0) {
+ return false;
+ }
+
+ // 取得调整后的星期(0-6,0=星期日)
+ const getAdjustedDayOfWeek = () => {
+ const now = new Date();
+ let dayOfWeek = now.getDay(); // 0-6
+ const hours = now.getHours();
+
+ // 凌晨 00:00~04:00 视为前一天
+ if (hours < 4) {
+ dayOfWeek = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
+ log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},视为前一天(${weekDays[dayOfWeek]})`);
+ } else {
+ log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},使用当天(${weekDays[dayOfWeek]})`);
+ }
+
+ return dayOfWeek;
+ };
+
+ const adjustedDayOfWeek = getAdjustedDayOfWeek();
+ const currentChineseDay = weekDays[adjustedDayOfWeek];
+
+ // 检查是否在允许的星期范围内
+ const shouldRun = weekSelection.includes(currentChineseDay);
+ return shouldRun;
+}
+
(async function () {
+ // 检查配置是否存在
+ if (!Object.keys(settings).includes("execute_Week")) {
+ log.error("首次运行前请编辑JS脚本自定义配置");
+ return;
+ }
+
+ // 检查是否应该运行
+ const executeWeek = Array.from(settings.execute_Week || []);
+ if (!shouldRunByWeekConfig(executeWeek)) {
+ log.info(`交互或拾取:"不运行"`);
+ return;
+ }
+ // ------------------------------------
+
try {
log.info(`请设置较长的战斗超时时间,否则超时后判定为战斗结束`);
await sleep(1000);
diff --git a/repo/js/纪行周常-10个boss一条龙/manifest.json b/repo/js/纪行周常-10个boss一条龙/manifest.json
index 46afa8be8..df3bce7cd 100644
--- a/repo/js/纪行周常-10个boss一条龙/manifest.json
+++ b/repo/js/纪行周常-10个boss一条龙/manifest.json
@@ -1,7 +1,8 @@
{
"manifest_version": 1,
"name": "纪行周常-10个boss一条龙",
- "version": "6.1",
+ "version": "6.1.1",
+ "bgi_version": "0.55.0",
"description": "请看一看readme文件",
"authors": [
{
diff --git a/repo/js/纪行周常-10个boss一条龙/settings.json b/repo/js/纪行周常-10个boss一条龙/settings.json
index 12dc530a8..2310446c2 100644
--- a/repo/js/纪行周常-10个boss一条龙/settings.json
+++ b/repo/js/纪行周常-10个boss一条龙/settings.json
@@ -1,4 +1,21 @@
[
+ {
+ "name": "execute_Week",
+ "type": "multi-checkbox",
+ "label": "指定星期几运行",
+ "default": [
+ "星期一"
+ ],
+ "options": [
+ "星期一",
+ "星期二",
+ "星期三",
+ "星期四",
+ "星期五",
+ "星期六",
+ "星期日"
+ ]
+ },
{
"name": "switchPartyName",
"type": "input-text",
@@ -16,44 +33,44 @@
"type": "select",
"label": "选择讨伐BOSS(挂机打不过概不负责)",
"options": [
- "爆炎树",
- "半永恒统辖矩阵",
- "掣电树",
- "纯水精灵",
- "翠翎恐蕈",
- "深罪浸礼者",
- "深邃摹结株",
- "风蚀沙虫",
- "冰风组曲-歌裴莉娅的葬送",
- "冰风组曲-科培琉司的劫罚",
- "古岩龙蜥",
- "恒常机关阵列",
- "急冻树",
- "金焰绒翼龙暴君",
- "雷音权现",
- "灵觉隐修的迷者",
- "魔像督军",
- "秘源机兵·统御械",
- "秘源机兵·构型械",
- "魔偶剑鬼",
- "千年珍珠骏麟",
- "熔岩辉龙像",
- "贪食匿叶龙山王",
- "铁甲熔火帝皇",
- "无相之草",
- "无相之火",
- "无相之雷",
- "无相之水",
- "无相之岩",
- "水形幻人",
- "实验性场力发生装置",
- "霜夜巡天灵主",
- "遗迹巨蛇",
- "隐山猊兽",
- "蕴光月幻蝶",
- "兆载永劫龙兽",
- "重拳出击鸭"
- ]
+ "爆炎树",
+ "半永恒统辖矩阵",
+ "掣电树",
+ "纯水精灵",
+ "翠翎恐蕈",
+ "深罪浸礼者",
+ "深邃摹结株",
+ "风蚀沙虫",
+ "冰风组曲-歌裴莉娅的葬送",
+ "冰风组曲-科培琉司的劫罚",
+ "古岩龙蜥",
+ "恒常机关阵列",
+ "急冻树",
+ "金焰绒翼龙暴君",
+ "雷音权现",
+ "灵觉隐修的迷者",
+ "魔像督军",
+ "秘源机兵·统御械",
+ "秘源机兵·构型械",
+ "魔偶剑鬼",
+ "千年珍珠骏麟",
+ "熔岩辉龙像",
+ "贪食匿叶龙山王",
+ "铁甲熔火帝皇",
+ "无相之草",
+ "无相之火",
+ "无相之雷",
+ "无相之水",
+ "无相之岩",
+ "水形幻人",
+ "实验性场力发生装置",
+ "霜夜巡天灵主",
+ "遗迹巨蛇",
+ "隐山猊兽",
+ "蕴光月幻蝶",
+ "兆载永劫龙兽",
+ "重拳出击鸭"
+ ]
},
{
"name": "rounds",
diff --git a/repo/js/纪行周常-10次秘境一条龙/main.js b/repo/js/纪行周常-10次秘境一条龙/main.js
index f58dda72e..a99d523a3 100644
--- a/repo/js/纪行周常-10次秘境一条龙/main.js
+++ b/repo/js/纪行周常-10次秘境一条龙/main.js
@@ -1,4 +1,56 @@
+/**
+ * 根据星期配置判断是否运行脚本
+ * @param {Array} weekSelection - 用户选择的星期数组
+ * @returns {boolean} 是否符合运行条件
+ */
+function shouldRunByWeekConfig(weekSelection) {
+ const weekDays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
+
+ // 检查配置是否为空
+ if (!Array.isArray(weekSelection) || weekSelection.length === 0) {
+ return false;
+ }
+
+ // 取得调整后的星期(0-6,0=星期日)
+ const getAdjustedDayOfWeek = () => {
+ const now = new Date();
+ let dayOfWeek = now.getDay(); // 0-6
+ const hours = now.getHours();
+
+ // 凌晨 00:00~04:00 视为前一天
+ if (hours < 4) {
+ dayOfWeek = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
+ log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},视为前一天(${weekDays[dayOfWeek]})`);
+ } else {
+ log.info(`当前时间 ${now.getHours()}:${now.getMinutes()},使用当天(${weekDays[dayOfWeek]})`);
+ }
+
+ return dayOfWeek;
+ };
+
+ const adjustedDayOfWeek = getAdjustedDayOfWeek();
+ const currentChineseDay = weekDays[adjustedDayOfWeek];
+
+ // 检查是否在允许的星期范围内
+ const shouldRun = weekSelection.includes(currentChineseDay);
+ return shouldRun;
+}
+
(async function () {
+ // 检查配置是否存在
+ if (!Object.keys(settings).includes("execute_Week")) {
+ log.error("首次运行前请编辑JS脚本自定义配置");
+ return;
+ }
+
+ // 检查是否应该运行
+ const executeWeek = Array.from(settings.execute_Week || []);
+ if (!shouldRunByWeekConfig(executeWeek)) {
+ log.info(`交互或拾取:"不运行"`);
+ return;
+ }
+ // ------------------------------------
+
// 1. 基础设置
setGameMetrics(1920, 1080, 1);
diff --git a/repo/js/纪行周常-10次秘境一条龙/manifest.json b/repo/js/纪行周常-10次秘境一条龙/manifest.json
index 7df5c35f9..bb8dc5098 100644
--- a/repo/js/纪行周常-10次秘境一条龙/manifest.json
+++ b/repo/js/纪行周常-10次秘境一条龙/manifest.json
@@ -1,7 +1,8 @@
{
"manifest_version": 1,
"name": "纪行周常-10次秘境一条龙",
- "version": "1.4",
+ "version": "1.5",
+ "bgi_version": "0.55.0",
"description": "",
"authors": [
{
diff --git a/repo/js/纪行周常-10次秘境一条龙/settings.json b/repo/js/纪行周常-10次秘境一条龙/settings.json
index 18714e2d7..27023544c 100644
--- a/repo/js/纪行周常-10次秘境一条龙/settings.json
+++ b/repo/js/纪行周常-10次秘境一条龙/settings.json
@@ -1,5 +1,21 @@
[
{
+ "name": "execute_Week",
+ "type": "multi-checkbox",
+ "label": "指定星期几运行",
+ "default": [
+ "星期一"
+ ],
+ "options": [
+ "星期一",
+ "星期二",
+ "星期三",
+ "星期四",
+ "星期五",
+ "星期六",
+ "星期日"
+ ]
+ },{
"name": "partyName",
"type": "input-text",
"label": "队伍名称(默认不切换)"