mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-04-03 06:35:14 +08:00
js:匹配拾取中滚轮改为仅在必要时触发 (#2930)
* js:AAA狗粮批发2.2.0 1.滚轮改为仅在必要时触发 2.更新readme * js:采集cd管理 滚轮仅在必要时触发 * js:锄地一条龙 移除材料图片zip 滚轮改为仅必要时触发 * js:联机团购 滚轮改为仅必要时触发 * js:锄地一条龙 优化吃药流程
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
- **强制收尾路线交替执行**:默认不开,用于一些用户想收集其他的调查材料,比如茶叶等。替换掉(替补收尾路线)内的文件,可以一天收尾狗粮,一天收尾茶叶。
|
||||
- **狗粮分解模式**:默认不分解,可选分解成(经验瓶/摩拉)
|
||||
- **账户名称**:**单账号无需更改。** 多账号使用时建多个配置组,一个账号使用一个配置组,填入游戏账号名称(自己取名),就可以按各自名称分别记录运行信息。
|
||||
- **芙宁娜** :狗粮队支持自动使用白芙作为生存位(汐佬逼的),当你狗粮队伍中含有芙宁娜时请勾选,将确保狗粮路线时芙宁娜为白芙状态,清怪和脚本结束时切回黑芙。
|
||||
- **芙宁娜** :狗粮队支持自动使用白芙作为生存位(汐姐姐逼的,非必要不要用,会慢很多),当你狗粮队伍中一定要含有芙宁娜时勾选,将确保狗粮路线时芙宁娜为白芙状态,清怪和脚本结束时切回黑芙。
|
||||
|
||||
## 二、调查点类型收益
|
||||
|
||||
@@ -71,8 +71,8 @@
|
||||
|
||||
## 六、队伍配置建议
|
||||
- **根据自己CPU配置选择合适的移速**:电脑性能较差以至于收益远不如及格线时,降低队伍移速(使用较矮小的体型,不使用双风,四风原典,迪西雅天赋等)。
|
||||
- **行走位:优先迪希雅;或芙宁娜等 E启动奶**
|
||||
- **钟剑迪希雅**:耐肘王/白天6-18点移速+10%(路径内置调时间到白天,全程100%吃满天赋)
|
||||
- **行走位:优先迪希雅;或芭芭拉等 E启动奶**
|
||||
- **钟剑迪希雅**:耐肘王/白天6-18点移速+10%(js自定义配置可选调时间到白天,全程100%吃满天赋)
|
||||
- **万叶:建议携带,路径内配有E吸狗粮策略(不带不影响运行)**,琴可作为备选项,不要同时携带琴和万叶
|
||||
- **双风BUFF**:移速+10% 体力消耗-15%
|
||||
|
||||
|
||||
BIN
repo/js/AAA-Artifacts-Bulk-Supply/assets/拾取滚轮.png
Normal file
BIN
repo/js/AAA-Artifacts-Bulk-Supply/assets/拾取滚轮.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
@@ -28,6 +28,7 @@ const doDecomposeRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("ass
|
||||
const doDecompose2Ro = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/doDecompose2.png"));
|
||||
|
||||
const outDatedRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/ConfirmButton.png"), 760, 700, 100, 100);
|
||||
const scrollRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/拾取滚轮.png"), 1017, 496, 1093 - 581, 581 - 496);
|
||||
|
||||
const normalPathA = settings.fastMode ? "" : "assets/ArtifactsPath/普通98点1号线";
|
||||
const normalPathB = settings.fastMode ? "" : "assets/ArtifactsPath/普通98点2号线";
|
||||
@@ -1197,10 +1198,10 @@ async function recognizeAndInteract() {
|
||||
gameRegion = captureGameRegion();
|
||||
let centerYF = await findFIcon();
|
||||
if (!centerYF) {
|
||||
if (await isMainUI()) {
|
||||
if (new Date() - lastRoll >= 200) {
|
||||
if (new Date() - lastRoll >= 200) {
|
||||
lastRoll = new Date();
|
||||
if (await hasScroll()) {
|
||||
await keyMouseScript.runFile(`assets/滚轮下翻.json`);
|
||||
lastRoll = new Date();
|
||||
}
|
||||
}
|
||||
continue;
|
||||
@@ -1295,25 +1296,6 @@ async function recognizeAndInteract() {
|
||||
return null;
|
||||
}
|
||||
|
||||
async function isMainUI() {
|
||||
const recognitionObject = RecognitionObject.TemplateMatch(mainUITemplate, 0, 0, 150, 150);
|
||||
const maxAttempts = 1;
|
||||
let attempts = 0;
|
||||
|
||||
while (attempts < maxAttempts && state.running) {
|
||||
try {
|
||||
const result = gameRegion.find(recognitionObject);
|
||||
if (result.isExist()) return true;
|
||||
} catch (error) {
|
||||
log.error(`识别图像时发生异常: ${error.message}`);
|
||||
if (!state.running) break;
|
||||
return false;
|
||||
}
|
||||
attempts++;
|
||||
await sleep(checkDelay);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1482,4 +1464,33 @@ async function findAndClick(target,
|
||||
log.error(`执行通用识图时出现错误:${error.message}`);
|
||||
return retType === 0 ? false : null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前是否存在拾取滚轮图标
|
||||
* @param {number} maxDuration 最大允许耗时(毫秒)
|
||||
*/
|
||||
async function hasScroll(maxDuration = 10) {
|
||||
const start = Date.now();
|
||||
let dodispose = false;
|
||||
while (Date.now() - start < maxDuration) {
|
||||
if (!gameRegion) {
|
||||
gameRegion = captureGameRegion();
|
||||
dodispose = true;
|
||||
}
|
||||
try {
|
||||
const result = gameRegion.find(scrollRo);
|
||||
if (result.isExist()) return true;
|
||||
} catch (error) {
|
||||
log.error(`识别图像时发生异常: ${error.message}`);
|
||||
return false; // 一旦出现异常直接退出,不再重试
|
||||
}
|
||||
await sleep(checkDelay); // 识别间隔
|
||||
if (dodispose) {
|
||||
gameRegion.dispose();
|
||||
dodispose = false; // 已经释放,标记避免重复 dispose
|
||||
}
|
||||
}
|
||||
/* 超时仍未识别到,返回失败 */
|
||||
return false;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "AAA狗粮批发",
|
||||
"version": "2.1.6",
|
||||
"version": "2.2.0",
|
||||
"tags": [
|
||||
"狗粮"
|
||||
],
|
||||
|
||||
BIN
repo/js/ArtifactsGroupPurchasing/assets/拾取滚轮.png
Normal file
BIN
repo/js/ArtifactsGroupPurchasing/assets/拾取滚轮.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
@@ -1,5 +1,6 @@
|
||||
const runExtra = settings.runExtra || false;
|
||||
const leaveTeamRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/leaveTeam.png"));
|
||||
const scrollRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/拾取滚轮.png"), 1017, 496, 1093 - 581, 581 - 496);
|
||||
let targetItems;
|
||||
let pickupDelay = 100;
|
||||
let timeMove = 1000;
|
||||
@@ -1264,10 +1265,10 @@ async function recognizeAndInteract() {
|
||||
gameRegion = captureGameRegion();
|
||||
let centerYF = await findFIcon();
|
||||
if (!centerYF) {
|
||||
if (await isMainUI()) {
|
||||
if (new Date() - lastRoll >= 200) {
|
||||
if (new Date() - lastRoll >= 200) {
|
||||
lastRoll = new Date();
|
||||
if (await hasScroll()) {
|
||||
await keyMouseScript.runFile(`assets/滚轮下翻.json`);
|
||||
lastRoll = new Date();
|
||||
}
|
||||
}
|
||||
continue;
|
||||
@@ -1649,4 +1650,33 @@ async function numberTemplateMatch(
|
||||
adopted.sort((a, b) => a.x - b.x);
|
||||
|
||||
return adopted.reduce((num, item) => num * 10 + item.digit, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前是否存在拾取滚轮图标
|
||||
* @param {number} maxDuration 最大允许耗时(毫秒)
|
||||
*/
|
||||
async function hasScroll(maxDuration = 10) {
|
||||
const start = Date.now();
|
||||
let dodispose = false;
|
||||
while (Date.now() - start < maxDuration) {
|
||||
if (!gameRegion) {
|
||||
gameRegion = captureGameRegion();
|
||||
dodispose = true;
|
||||
}
|
||||
try {
|
||||
const result = gameRegion.find(scrollRo);
|
||||
if (result.isExist()) return true;
|
||||
} catch (error) {
|
||||
log.error(`识别图像时发生异常: ${error.message}`);
|
||||
return false; // 一旦出现异常直接退出,不再重试
|
||||
}
|
||||
await sleep(checkDelay); // 识别间隔
|
||||
if (dodispose) {
|
||||
gameRegion.dispose();
|
||||
dodispose = false; // 已经释放,标记避免重复 dispose
|
||||
}
|
||||
}
|
||||
/* 超时仍未识别到,返回失败 */
|
||||
return false;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "AAA狗粮联机团购",
|
||||
"version": "1.13.9",
|
||||
"version": "1.13.4",
|
||||
"tags": [
|
||||
"狗粮"
|
||||
],
|
||||
|
||||
Binary file not shown.
BIN
repo/js/AutoHoeingOneDragon/assets/拾取滚轮.png
Normal file
BIN
repo/js/AutoHoeingOneDragon/assets/拾取滚轮.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
@@ -41,6 +41,7 @@ const fIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync('assets/F_
|
||||
fIconRo.Threshold = 0.95;
|
||||
fIconRo.InitTemplate();
|
||||
const mainUIRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/MainUI.png"), 0, 0, 150, 150);
|
||||
const scrollRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/拾取滚轮.png"), 1017, 496, 1093 - 581, 581 - 496);
|
||||
|
||||
//全局通用变量声明
|
||||
let gameRegion;
|
||||
@@ -53,6 +54,7 @@ let state;
|
||||
let pathings;
|
||||
let localeWorks;
|
||||
let lastEatBuff = 0;
|
||||
let currentFood = "";
|
||||
|
||||
(async function () {
|
||||
//通用预处理
|
||||
@@ -961,31 +963,50 @@ async function runPath(fullPath, map_name, pm, pe) {
|
||||
await pathingScript.runFile("assets/强制黑芙.json");
|
||||
}
|
||||
if (settings.eatBuff) {
|
||||
const res = settings.eatBuff.split(',');
|
||||
if (new Date() - lastEatBuff > 300 * 1000) {
|
||||
lastEatBuff = new Date();
|
||||
// 1. 数据预处理:分割、去空、去重
|
||||
let res = settings.eatBuff
|
||||
.split(',')
|
||||
.map(item => item.trim())
|
||||
.filter(item => item.length > 0)
|
||||
.filter((item, index, arr) => arr.indexOf(item) === index);
|
||||
|
||||
// 无有效数据时提前返回
|
||||
if (res.length === 0) {
|
||||
log.error("无有效的食物配置");
|
||||
return;
|
||||
}
|
||||
// 2. 优化排序:currentFood 置顶以减少筛选操作
|
||||
if (currentFood && res.includes(currentFood)) {
|
||||
res = [currentFood, ...res.filter(item => item !== currentFood)];
|
||||
}
|
||||
await genshin.returnMainUi();
|
||||
keyPress("B");
|
||||
await sleep(300);
|
||||
let type = "食物"
|
||||
await findAndClick([`assets/背包界面/${type}1.png`, `assets/背包界面/${type}2.png`]);
|
||||
await sleep(300);
|
||||
// 2. 遍历数组,逐项执行
|
||||
// 3. 遍历数组,逐项执行
|
||||
for (const item of res) {
|
||||
await sleep(300);
|
||||
await findAndClick(['assets/筛选1.png', 'assets/筛选2.png']);
|
||||
await findAndClick("assets/重置.png");
|
||||
await sleep(500);
|
||||
await findAndClick("assets/搜索.png");
|
||||
await sleep(1000);
|
||||
// 真正输入当前这一项
|
||||
log.info(`搜索${item}`)
|
||||
inputText(item);
|
||||
await findAndClick("assets/确认筛选.png");
|
||||
await sleep(500);
|
||||
if (currentFood !== item) {
|
||||
await sleep(300);
|
||||
await findAndClick(['assets/筛选1.png', 'assets/筛选2.png']);
|
||||
await findAndClick("assets/重置.png");
|
||||
await sleep(300);
|
||||
await findAndClick("assets/搜索.png");
|
||||
await sleep(300);
|
||||
await findAndClick("assets/搜索成功点击.png");
|
||||
// 真正输入当前这一项
|
||||
log.info(`搜索${item}`);
|
||||
currentFood = item;
|
||||
inputText(item);
|
||||
await findAndClick("assets/确认筛选.png");
|
||||
while (await findAndClick("assets/确认筛选.png", false, 2, 3)) {
|
||||
await sleep(16);
|
||||
}
|
||||
}
|
||||
await findAndClick("assets/使用.png");
|
||||
}
|
||||
await genshin.returnMainUi();
|
||||
lastEatBuff = new Date();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1250,7 +1271,7 @@ async function recognizeAndInteract() {
|
||||
if (!centerYF) {
|
||||
if (new Date() - lastRoll >= 200) {
|
||||
lastRoll = new Date();
|
||||
if (await isMainUI()) {
|
||||
if (await hasScroll()) {
|
||||
await keyMouseScript.runFile(`assets/滚轮下翻.json`);
|
||||
}
|
||||
}
|
||||
@@ -1905,6 +1926,35 @@ async function isMainUI(maxDuration = 10) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前是否存在拾取滚轮图标
|
||||
* @param {number} maxDuration 最大允许耗时(毫秒)
|
||||
*/
|
||||
async function hasScroll(maxDuration = 10) {
|
||||
const start = Date.now();
|
||||
let dodispose = false;
|
||||
while (Date.now() - start < maxDuration) {
|
||||
if (!gameRegion) {
|
||||
gameRegion = captureGameRegion();
|
||||
dodispose = true;
|
||||
}
|
||||
try {
|
||||
const result = gameRegion.find(scrollRo);
|
||||
if (result.isExist()) return true;
|
||||
} catch (error) {
|
||||
log.error(`识别图像时发生异常: ${error.message}`);
|
||||
return false; // 一旦出现异常直接退出,不再重试
|
||||
}
|
||||
await sleep(checkDelay); // 识别间隔
|
||||
if (dodispose) {
|
||||
gameRegion.dispose();
|
||||
dodispose = false; // 已经释放,标记避免重复 dispose
|
||||
}
|
||||
}
|
||||
/* 超时仍未识别到,返回失败 */
|
||||
return false;
|
||||
}
|
||||
|
||||
// 加载拾取物图片
|
||||
async function loadTargetItems() {
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "锄地一条龙",
|
||||
"version": "2.3.1",
|
||||
"version": "2.4.0",
|
||||
"description": "一站式解决自动化锄地,支持只拾取狗粮,请仔细阅读README.md后使用",
|
||||
"authors": [
|
||||
{
|
||||
|
||||
@@ -85,6 +85,9 @@
|
||||
<details>
|
||||
<summary>📋 点击查看历史更新</summary>
|
||||
|
||||
### 2026/2/26
|
||||
1. 无f时滚轮改为仅在识别到滚轮图标时触发
|
||||
|
||||
### 2026/2/18
|
||||
1. 对食材加工过程中可能出现的道具数量超过上限进行处理
|
||||
|
||||
|
||||
BIN
repo/js/采集cd管理/assets/拾取滚轮.png
Normal file
BIN
repo/js/采集cd管理/assets/拾取滚轮.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
@@ -95,6 +95,7 @@ FiconRo.Threshold = 0.95;
|
||||
FiconRo.InitTemplate();
|
||||
|
||||
const mainUiRo = RecognitionObject.TemplateMatch(mainUITemplate, 0, 0, 150, 150);
|
||||
const scrollRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/拾取滚轮.png"), 1017, 496, 1093 - 581, 581 - 496);
|
||||
|
||||
let checkInterval = +settings.checkInterval || 50;
|
||||
|
||||
@@ -1325,11 +1326,12 @@ async function recognizeAndInteract() {
|
||||
|
||||
let time2 = new Date();
|
||||
const centerYF = await findFIcon();
|
||||
|
||||
if (!centerYF) {
|
||||
if (await isMainUI()) {
|
||||
if (new Date() - lastRoll >= 200) {
|
||||
if (new Date() - lastRoll >= 200) {
|
||||
lastRoll = new Date();
|
||||
if (await hasScroll()) {
|
||||
await keyMouseScript.runFile(`assets/滚轮下翻.json`);
|
||||
lastRoll = new Date();
|
||||
}
|
||||
}
|
||||
if (checkTask) {
|
||||
@@ -2264,3 +2266,32 @@ function isArrivedAtEndPoint(fullPath) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前是否存在拾取滚轮图标
|
||||
* @param {number} maxDuration 最大允许耗时(毫秒)
|
||||
*/
|
||||
async function hasScroll(maxDuration = 10) {
|
||||
const start = Date.now();
|
||||
let dodispose = false;
|
||||
while (Date.now() - start < maxDuration) {
|
||||
if (!gameRegion) {
|
||||
gameRegion = captureGameRegion();
|
||||
dodispose = true;
|
||||
}
|
||||
try {
|
||||
const result = gameRegion.find(scrollRo);
|
||||
if (result.isExist()) return true;
|
||||
} catch (error) {
|
||||
log.error(`识别图像时发生异常: ${error.message}`);
|
||||
return false; // 一旦出现异常直接退出,不再重试
|
||||
}
|
||||
await sleep(checkDelay); // 识别间隔
|
||||
if (dodispose) {
|
||||
gameRegion.dispose();
|
||||
dodispose = false; // 已经释放,标记避免重复 dispose
|
||||
}
|
||||
}
|
||||
/* 超时仍未识别到,返回失败 */
|
||||
return false;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "采集cd管理",
|
||||
"version": "2.10.4",
|
||||
"version": "2.11.0",
|
||||
"bgi_version": "0.44.8",
|
||||
"description": "仅面对会操作文件和读readme的用户,基于文件夹操作自动管理采集路线的cd,会按照路径组的顺序依次运行,直到指定的时间,并会按照给定的cd类型,自动跳过未刷新的路线",
|
||||
"saved_files": [
|
||||
|
||||
Reference in New Issue
Block a user