mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-15 03:23:22 +08:00
js:采集,锄地,性能测试更新 (#2840)
* js:性能测试 加入新项目,优化打分逻辑 * Update manifest.json 修正错误的保留文件夹 * js:采集cd管理 将优先采集移出高级配置 * 茜芙爱万策略应用ready * js:采集cd管理更新readme * 更新readme
This commit is contained in:
9
repo/combat/茜芙爱万.txt
Normal file
9
repo/combat/茜芙爱万.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
// 描述:茜特菈莉带祭礼,有条件带千岩三精 爱可菲适当堆充能 芙宁娜带输出武器如静水有乐绿剑水管 配置组设置-战斗配置-自动检测战斗结束-更快检测战斗结束启用并填1,检查战斗结束的延时改为0.4
|
||||
// 作者: mno
|
||||
茜特菈莉 attack(0.1),e,keypress(q),wait(0.1),ready,attack,keypress(e),keypress(q),wait(0.1),keypress(q),wait(0.15),ready,keypress(e)
|
||||
芙宁娜 e,wait(0.4),keypress(q),wait(0.1),keypress(q),wait(0.1),keypress(q),wait(0.2),ready
|
||||
爱可菲 e,wait(0.55),keypress(q),wait(0.1),keypress(q),wait(0.2),ready,keypress(e)
|
||||
枫原万叶 ready,keypress(q),wait(0.1),keypress(q),wait(0.1),keypress(q),wait(0.2),ready,attack,keydown(E),wait(0.48),keyup(E),attack(0.3)
|
||||
芙宁娜 e,wait(0.4),keypress(q),wait(0.1),keypress(q),wait(0.1),keypress(q),wait(0.2),ready
|
||||
爱可菲 e,wait(0.55),keypress(q),wait(0.1),keypress(q),wait(0.2),ready,keypress(e)
|
||||
枫原万叶 ready,keypress(q),wait(0.1),keypress(q),wait(0.1),keypress(q),wait(0.2),ready,attack,keydown(E),wait(0.48),keyup(E),attack(0.3),wait(0.6)
|
||||
@@ -1,7 +0,0 @@
|
||||
// 描述:全员零命且无专武,芙芙和爱可菲双爆堆高一点,不需要堆充能,茜尽量带祭礼,爱可菲不用堆充能基本上也能实现一动一大,如果队伍顺序不是茜芙爱万那就把数字改一下就行
|
||||
// 作者: 青杉渔
|
||||
茜特菈莉 e,wait(0.3),keypress(e),wait(0.3),keypress(e),wait(0.3),,click(middle),keypress(3)
|
||||
爱可菲 wait(0.1),e,wait(0.4),keypress(q),wait(0.4),keypress(e),wait(0.4),keypress(q),wait(0.3),click(middle),keypress(2)
|
||||
芙宁娜 e,attack(0.3),click(middle),keypress(4)
|
||||
枫原万叶 e(hold),wait(0.48),attack(0.2),wait(0.3),attack(0.3),wait(0.5),keypress(q),wait(0.3),click(middle),keypress(1)
|
||||
茜特菈莉 wait(0.3),keydown(VK_SPACE),wait(1.2),keyup(VK_SPACE),attack(0.3),wait(1),keydown(VK_SPACE),wait(1.2),keyup(VK_SPACE),attack(0.3),wait(0.5),keypress(q),click(middle)
|
||||
@@ -85,4 +85,16 @@
|
||||
- **这个js好慢,不像abe四十分钟就跑完了**:那就用abe
|
||||
- **想要捡狗粮的时候也能捡其他东西** :去锄地一条龙js中获取相关物品图片放在本js的assets/targetitems中
|
||||
- **想要测作者怎么办** :来q群1057307824测测莫酱(有其他问题也行)
|
||||
- 不看github issue,只接受通过qq反馈
|
||||
- 不看github issue,只接受通过qq反馈
|
||||
- **莫酱全家桶(部分)**:
|
||||
- 日常使用
|
||||
- 锄地一条龙:一站式解决自动化锄地,支持只拾取狗粮
|
||||
- AAA狗粮批发:自动卡时间拿狗粮,收益最大化
|
||||
- AAA狗粮联机团购:联机获取更多狗粮收益
|
||||
- 采集cd管理:管理采集路线并自动优化
|
||||
- 锁定四星教官:锁定四星教官,支持筛选只要初始3和只要带充能
|
||||
- 只要大瓶:尽可能将狗粮分解成大瓶,起个好看的作用
|
||||
- 妙妙小工具
|
||||
- 性能测试:测测你的电脑性能
|
||||
- 食材加工极速版:与采集cd管理中相同的食材加工
|
||||
- 更多妙妙小工具可以加群获取
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "AAA狗粮批发",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"tags": [
|
||||
"狗粮"
|
||||
],
|
||||
|
||||
@@ -175,3 +175,15 @@
|
||||
### 六、其他
|
||||
- **想要测作者怎么办** :来q群1057307824测测莫酱(有其他问题也行)
|
||||
- **茶包版小广告**:茶包版bgi具有许多公版bgi没有的功能(如火神赶路),能相当程度提高锄地效率与稳定性,想要测测茶包也可以加上面的群聊
|
||||
- **莫酱全家桶(部分)**:
|
||||
- 日常使用
|
||||
- 锄地一条龙:一站式解决自动化锄地,支持只拾取狗粮
|
||||
- AAA狗粮批发:自动卡时间拿狗粮,收益最大化
|
||||
- AAA狗粮联机团购:联机获取更多狗粮收益
|
||||
- 采集cd管理:管理采集路线并自动优化
|
||||
- 锁定四星教官:锁定四星教官,支持筛选只要初始3和只要带充能
|
||||
- 只要大瓶:尽可能将狗粮分解成大瓶,起个好看的作用
|
||||
- 妙妙小工具
|
||||
- 性能测试:测测你的电脑性能
|
||||
- 食材加工极速版:与采集cd管理中相同的食材加工
|
||||
- 更多妙妙小工具可以加群获取
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "锄地一条龙",
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.3",
|
||||
"description": "一站式解决自动化锄地,支持只拾取狗粮,请仔细阅读README.md后使用",
|
||||
"authors": [
|
||||
{
|
||||
@@ -19,10 +19,10 @@
|
||||
"records/*.json",
|
||||
"blacklists/*.json",
|
||||
"settings/*.json",
|
||||
"assets/targetItems/其他/预留/*.png",
|
||||
"assets/targetItems/其他/预留/*/*.png",
|
||||
"assets/targetItems/其他/预留/*/*/*.png",
|
||||
"assets/targetItems/其他/预留/*/*/*/*.png",
|
||||
"assets/targetItems/其他/保留/*.png",
|
||||
"assets/targetItems/其他/保留/*/*.png",
|
||||
"assets/targetItems/其他/保留/*/*/*.png",
|
||||
"assets/targetItems/其他/保留/*/*/*/*.png",
|
||||
"pathing/0-保留/*.json",
|
||||
"pathing/0-保留/*/*.json",
|
||||
"pathing/0-保留/*/*/*.json",
|
||||
|
||||
BIN
repo/js/ComputerBlower/assets/0.png
Normal file
BIN
repo/js/ComputerBlower/assets/0.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 619 B |
BIN
repo/js/ComputerBlower/assets/1.png
Normal file
BIN
repo/js/ComputerBlower/assets/1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 246 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.3 KiB |
@@ -1,26 +1,29 @@
|
||||
// 主函数
|
||||
(async function () {
|
||||
operationMode = settings.operationMode || "综合测试";
|
||||
let xRange = parseInt(+settings.xRange || 1920, 10);
|
||||
let yRange = parseInt(+settings.yRange || 1080, 10);
|
||||
let interval = +settings.interval || 1000;
|
||||
let timeout = +settings.timeout || 60;
|
||||
let dispose = settings.dispose;
|
||||
|
||||
|
||||
const imagePath = "assets/流放.png";
|
||||
let template = file.ReadImageMatSync(imagePath);
|
||||
let xRange = 1651;
|
||||
let yRange = 1051;
|
||||
let whidth = 1920 - 1651;
|
||||
let height = 1080 - 1051;
|
||||
let interval = 1000;
|
||||
let timeout = 10;
|
||||
dispose = true;
|
||||
let template = file.ReadImageMatSync("assets/0.png");
|
||||
let template2 = file.ReadImageMatSync("assets/1.png");
|
||||
let roTM = RecognitionObject.TemplateMatch(template, xRange, yRange, whidth, height);
|
||||
let ro2TM = RecognitionObject.TemplateMatch(template2);
|
||||
let roOCR = RecognitionObject.ocr(xRange, yRange, whidth, height);
|
||||
let captureRegionScore = 0;
|
||||
let tempalteMatchScore = 0;
|
||||
let tempalteMatch2Score = 0;
|
||||
let calculateScore = 0;
|
||||
let ocrScore = 0;
|
||||
let tpScore = 0;
|
||||
await genshin.tpToStatueOfTheSeven();
|
||||
|
||||
if (operationMode === "综合测试") {
|
||||
log.info("开始综合测试,预计用时约30秒");
|
||||
log.info("开始综合测试,预计用时约120秒");
|
||||
dispose = true;
|
||||
timeout = 11;
|
||||
xRange = 1920;
|
||||
yRange = 1080;
|
||||
interval = 1000;
|
||||
}
|
||||
|
||||
@@ -28,7 +31,7 @@
|
||||
let startTime = Date.now();
|
||||
let count = 0;
|
||||
let loopCount = 0;
|
||||
while (Date.now() - startTime <= timeout * 1000) {
|
||||
while (loopCount < timeout) {
|
||||
try {
|
||||
let GameRegion = captureGameRegion();
|
||||
if (dispose) GameRegion.dispose();
|
||||
@@ -49,20 +52,20 @@
|
||||
log.info(`截图测试完成,得分${captureRegionScore.toFixed(2)}`);
|
||||
}
|
||||
|
||||
if (operationMode === "模板匹配" || operationMode === "综合测试") {
|
||||
if (operationMode === "模板匹配1" || operationMode === "综合测试") {
|
||||
let startTime = Date.now();
|
||||
let count = 0;
|
||||
let loopCount = 0;
|
||||
let GameRegion = captureGameRegion();
|
||||
while (Date.now() - startTime <= timeout * 1000) {
|
||||
while (loopCount < timeout) {
|
||||
try {
|
||||
let recognitionObject = RecognitionObject.TemplateMatch(template, 0, 0, xRange, yRange);
|
||||
let result = GameRegion.find(recognitionObject);
|
||||
|
||||
let result = GameRegion.find(roTM);
|
||||
count++;
|
||||
if (Date.now() - startTime >= interval * (loopCount + 1)) {
|
||||
loopCount++;
|
||||
await sleep(1);
|
||||
log.info(`在第${loopCount}个${interval}毫秒内执行了${count}次模板匹配`);
|
||||
log.info(`在第${loopCount}个${interval}毫秒内执行了${count}次模板匹配1`);
|
||||
tempalteMatchScore += count;
|
||||
count = 0;
|
||||
}
|
||||
@@ -72,8 +75,35 @@
|
||||
}
|
||||
}
|
||||
if (dispose) GameRegion.dispose();
|
||||
tempalteMatchScore = Math.round(((tempalteMatchScore * 10 / loopCount) / 3.5) * 100) / 100;
|
||||
log.info(`模板匹配测试完成,得分${tempalteMatchScore.toFixed(2)}`);
|
||||
tempalteMatchScore = Math.round(((tempalteMatchScore * 10 / loopCount) / 250) * 100) / 100;
|
||||
log.info(`模板匹配1测试完成,得分${tempalteMatchScore.toFixed(2)}`);
|
||||
}
|
||||
|
||||
if (operationMode === "模板匹配2" || operationMode === "综合测试") {
|
||||
let startTime = Date.now();
|
||||
let count = 0;
|
||||
let loopCount = 0;
|
||||
let GameRegion = captureGameRegion();
|
||||
while (loopCount < timeout) {
|
||||
try {
|
||||
|
||||
let result = GameRegion.find(ro2TM);
|
||||
count++;
|
||||
if (Date.now() - startTime >= interval * (loopCount + 1)) {
|
||||
loopCount++;
|
||||
await sleep(1);
|
||||
log.info(`在第${loopCount}个${interval}毫秒内执行了${count}次模板匹配2`);
|
||||
tempalteMatch2Score += count;
|
||||
count = 0;
|
||||
}
|
||||
} catch (error) {
|
||||
log.error(`运行时发生异常: ${error.message}`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (dispose) GameRegion.dispose();
|
||||
tempalteMatch2Score = Math.round(((tempalteMatch2Score * 10 / loopCount) / 0.85) * 100) / 100;
|
||||
log.info(`模板匹配2测试完成,得分${tempalteMatch2Score.toFixed(2)}`);
|
||||
}
|
||||
|
||||
if (operationMode === "ocr" || operationMode === "综合测试") {
|
||||
@@ -81,12 +111,9 @@
|
||||
let count = 0;
|
||||
let loopCount = 0;
|
||||
let GameRegion = captureGameRegion();
|
||||
while (Date.now() - startTime < timeout * 1000) {
|
||||
while (loopCount < timeout) {
|
||||
try {
|
||||
let result = GameRegion.findMulti(RecognitionObject.ocr(
|
||||
0, 0,
|
||||
xRange, yRange
|
||||
));
|
||||
let result = GameRegion.find(roOCR);
|
||||
count++;
|
||||
} catch (error) {
|
||||
log.error(`运行时发生异常: ${error.message}`);
|
||||
@@ -101,17 +128,106 @@
|
||||
}
|
||||
}
|
||||
if (dispose) GameRegion.dispose();
|
||||
ocrScore = ocrScore;
|
||||
ocrScore = Math.round((ocrScore * 2 * 10 / loopCount) * 100) / 100;
|
||||
ocrScore = Math.round((ocrScore * 2 * 10 / loopCount) * 100 / 3.5) / 100;
|
||||
log.info(`ocr测试完成,得分${ocrScore.toFixed(2)}`);
|
||||
}
|
||||
|
||||
if (operationMode === '纯运算' || operationMode === '综合测试') {
|
||||
const startTime = Date.now();
|
||||
const timeoutMs = timeout * 1000;
|
||||
const CHECK_EVERY = 1000_000; // ★ 每 100 万次看一次表
|
||||
|
||||
let x = 1.23456789;
|
||||
let count = 0; // 当前 interval 计数
|
||||
let loopCount = 0; // 已完成的 interval 个数
|
||||
let totalIter = 0; // 总迭代次数(用于分段时间判断)
|
||||
|
||||
while (true) {
|
||||
// 一次性批跑 CHECK_EVERY 次浮点
|
||||
for (let i = 0; i < CHECK_EVERY; i++) {
|
||||
x = Math.sqrt(x + 1) * 1.000001;
|
||||
|
||||
}
|
||||
count++;
|
||||
totalIter += CHECK_EVERY;
|
||||
|
||||
// 批跑完再看时间
|
||||
const elapsed = Date.now() - startTime;
|
||||
if (elapsed >= timeoutMs) break;
|
||||
|
||||
// 是否到达日志/统计点
|
||||
if (elapsed >= interval * (loopCount + 1)) {
|
||||
loopCount++;
|
||||
log.info(`第${loopCount}个${interval}ms 内执行了约 ${count}百万 次纯运算`);
|
||||
calculateScore += count;
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
const R60 = 6000; // 60 分基准点
|
||||
const k = 0.2; // 曲率系数
|
||||
const R = calculateScore; // 原始累加值(百万次)
|
||||
|
||||
const score = 100 * Math.log1p(k * R) / Math.log1p(k * R60);
|
||||
calculateScore = Math.round(score * 100) / 100; // 保留两位小数
|
||||
|
||||
log.info(`浮点运算测试完成,得分 ${calculateScore.toFixed(2)}`);
|
||||
}
|
||||
|
||||
if (operationMode === "传送" || operationMode === "综合测试") {
|
||||
let startTime = Date.now();
|
||||
let count = 0;
|
||||
while (Date.now() - startTime < 45 * 1000) {
|
||||
try {
|
||||
await genshin.tp(-876.73, 2277.07);
|
||||
await genshin.tp(9452.18, 1660.94);
|
||||
count++;
|
||||
} catch (error) {
|
||||
log.error(`运行时发生异常: ${error.message}`);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
log.info(`在45秒内执行了${count * 2}次传送`);
|
||||
tpScore += count;
|
||||
count = 0;
|
||||
tpScore = Math.round((tpScore * 2 * 10) * 100) / 100;
|
||||
log.info(`传送测试完成,得分${tpScore.toFixed(2)}`);
|
||||
}
|
||||
|
||||
if (operationMode === "综合测试") {
|
||||
log.info("综合测试结束");
|
||||
finalScore = (captureRegionScore + tempalteMatchScore + ocrScore) / 3;
|
||||
// squash 函数
|
||||
const squash = x => x <= 100 ? x : 100 + Math.log1p(x - 100);
|
||||
|
||||
// 原始六项
|
||||
const src = [
|
||||
captureRegionScore,
|
||||
tempalteMatchScore,
|
||||
calculateScore,
|
||||
tempalteMatch2Score,
|
||||
ocrScore,
|
||||
tpScore
|
||||
];
|
||||
|
||||
// 1. 先 squash,2. 再升序,3. 按序号加权
|
||||
const w = [0.1, 0.2, 0.2, 0.2, 0.2, 0.1];
|
||||
let finalScore = src
|
||||
.map(squash) // ① 压制 100+ 分数
|
||||
.sort((a, b) => a - b) // ② 排序(1最小…6最大)
|
||||
.reduce((s, v, i) => s + v * w[i], 0); // ③ 加权
|
||||
|
||||
// 可选保留两位小数
|
||||
finalScore = Math.round(finalScore * 100) / 100;
|
||||
|
||||
|
||||
log.info(`截图评分为${captureRegionScore.toFixed(2)}`);
|
||||
log.info(`模板匹配评分为${tempalteMatchScore.toFixed(2)}`);
|
||||
log.info(`模板匹配2评分为${tempalteMatch2Score.toFixed(2)}`);
|
||||
log.info(`浮点运算评分为${calculateScore.toFixed(2)}`);
|
||||
log.info(`ocr评分为${ocrScore.toFixed(2)}`);
|
||||
log.info(`传送评分为${tpScore.toFixed(2)}`);
|
||||
log.info(`综合评分为${finalScore.toFixed(2)}`)
|
||||
}
|
||||
})();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "性能测试",
|
||||
"version": "1.3",
|
||||
"version": "2.0",
|
||||
"tags": [],
|
||||
"bgi_version": "0.46.0",
|
||||
"description": "测测你的",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
从截图、模板匹配、ocr三个角度评价电脑性能
|
||||
从多方面评价电脑运行bgi与原神的性能
|
||||
|
||||
结果仅作为参考,只能在一定程度上反映当前环境下bgi的运行状态
|
||||
|
||||
|
||||
@@ -6,38 +6,12 @@
|
||||
"options": [
|
||||
"综合测试",
|
||||
"截图",
|
||||
"模板匹配",
|
||||
"ocr"
|
||||
"模板匹配1",
|
||||
"模板匹配2",
|
||||
"ocr",
|
||||
"纯运算",
|
||||
"传送"
|
||||
],
|
||||
"default": "综合测试"
|
||||
},
|
||||
{
|
||||
"name": "dispose",
|
||||
"type": "checkbox",
|
||||
"label": "是否dispose"
|
||||
},
|
||||
{
|
||||
"name": "timeout",
|
||||
"type": "input-text",
|
||||
"label": "运行时间(秒)",
|
||||
"default": "60"
|
||||
},
|
||||
{
|
||||
"name": "interval",
|
||||
"type": "input-text",
|
||||
"label": "间隔多久输出一次(毫秒)",
|
||||
"default": "1000"
|
||||
},
|
||||
{
|
||||
"name": "xRange",
|
||||
"type": "input-text",
|
||||
"label": "区域大小x",
|
||||
"default": "1920"
|
||||
},
|
||||
{
|
||||
"name": "yRange",
|
||||
"type": "input-text",
|
||||
"label": "区域大小y",
|
||||
"default": "1080"
|
||||
}
|
||||
]
|
||||
@@ -1,64 +1,82 @@
|
||||
采集CD管理脚本
|
||||
**采集CD管理**
|
||||
|
||||
一、简介:
|
||||
-
|
||||
这是一个基于文件夹操作的自动化脚本,用于管理采集路线的冷却时间(CD)。它会按照自定义配置中所选路径组的顺序依次运行任务,直到指定的时间,并根据给定的CD类型自动跳过未刷新的路线。同时加入了伪造日志功能,日志分析可以解析具体路线的信息。
|
||||
---
|
||||
|
||||
二、文件结构
|
||||
-
|
||||
- `main.js`:主要的脚本文件,负责执行任务和管理CD。
|
||||
- `manifest.json`:脚本的配置文件,包含脚本的基本信息和设置。
|
||||
- `settings.json`:用户配置文件,用于设置操作模式、路径组CD类型、配队名称等。
|
||||
- `pathing/`:存放路径文件的文件夹,路径组可选择其中一个子文件夹运行。
|
||||
### 一、**📌 脚本定位**
|
||||
1. 这是一个自动帮你管理“采集路线冷却时间(CD)”的工具。
|
||||
2. 它会按你设定的顺序,自动运行不同采集路线(比如挖矿、采特产),并跳过还没刷新的路线。
|
||||
3. 使用模板匹配拾取,功耗低,不易误触调查点,自带背包满识别并与采集联动(满背包材料加入黑名单并不计入路线效率计算)。
|
||||
|
||||
三、功能
|
||||
-
|
||||
- 操作模式选择:提供两种操作模式:
|
||||
- 执行任务(若不存在索引文件则自动创建):自动执行任务,若索引文件不存在则自动创建。
|
||||
- 重新生成索引文件(用于强制刷新CD或更新文件):重新生成索引文件,可用于强制刷新CD或更新文件。
|
||||
- 路径组CD类型:支持多种CD类型,包括:
|
||||
- 1次0点刷新
|
||||
- 2次0点刷新
|
||||
- 3次0点刷新
|
||||
- 4点刷新
|
||||
- 12小时刷新
|
||||
- 24小时刷新
|
||||
- 46小时刷新
|
||||
- 任务管理:自动读取路径组文件,跳过未刷新的任务,并根据CD类型更新任务的时间戳。同时支持跳过指定时间段的任务。
|
||||
- 配队管理:支持为每个路径组指定配队名称,自动切换配队。
|
||||
- 伪造日志:支持伪造日志功能,便于日志分析工具解析具体路线信息。
|
||||
### 三、**🚀 快速上手**
|
||||
1. 准备路线文件
|
||||
- 前往脚本仓库订阅需要的地图追踪,打开bgi文件夹,User/AutoPathing文件夹下就是你订阅的地图追踪(食材采集推荐使用食材栏目下的提瓦特食材一条龙,内置部分路线信息)。
|
||||
|
||||
四、使用方法
|
||||
-
|
||||
1. 准备路径文件:
|
||||
- 将要运行的地图追踪文件放在 `pathing/` 文件夹下的不同路径组中,每个子文件夹代表一个路径组。
|
||||
- 文件夹名称将可在自定义配置中供选择,例如 `pathing/矿物`、`pathing/地方特产` 等。
|
||||
2. 构造自定义配置:
|
||||
- 建议初次运行先勾选仅刷新选项。
|
||||
- 填写需要的路径组数量
|
||||
- 运行一次js,将会根据所填的路径组数量,构造出新的自定义配置
|
||||
- 后续如果修改了pathing下文件夹的名字,或在多个配置组使用本js时需要修改本配置组的自定义配置时,强烈建议重新进行该步骤,使自定义配置选项等与本配置组情况一致
|
||||
3. 修改自定义配置:
|
||||
- 根据所给表格,结合自身情况选择每个路径组的刷新cd类型
|
||||
- 选择每个路径组要运行的文件夹
|
||||
- 填写运行该组使用的配队名称(不填就不换队,有啥用啥)
|
||||
- 其余自定义配置项参考自定义配置界面的介绍
|
||||
2. 极简模式,最简单的使用方式,将你需要的地图追踪文件全部复制到js文件夹(User/JsScript/采集cd管理)下的pathing中,无需考虑子文件夹层数,塞进去即可,也可尝试使用mklink等自动关联
|
||||
- 将js添加至配置组,右键js选择自定义配置,勾选仅刷新自定义配置,路径组数量填0,直接运行一次js
|
||||
- 找到优先采集材料,按要求填写每天需要采集的材料和数量
|
||||
- 根据材料和路径特点,配置合适的队伍并将队伍名称填写在自定义配置中的优先采集材料使用的配队名称
|
||||
- 启动js,将自动寻找相关路径,采够需要的材料或所有相关路线都被使用后js将终止
|
||||
- 填写的优先采集材料是每日(以四点为界)的数量,长期运行时,js会记录各个路线获取的数量与耗时,并据此优化,先选择效率更高的路线
|
||||
- 特别的,锻造矿指代任意的水晶块,紫晶块,萃凝晶,虹滴晶,填写锻造矿*160即可满足每日锻造需求
|
||||
|
||||
4. 运行脚本:
|
||||
- 运行脚本,脚本将按照路径组的顺序依次执行任务。
|
||||
- 如果当前时间处于 `timerule` 指定的时间范围内,脚本将终止。
|
||||
- 如果任务的CD未刷新,脚本将跳过该任务并继续执行下一个任务。
|
||||
- 脚本会自动更新任务的时间戳,确保任务按CD类型刷新后再运行。
|
||||
3. 更进一步
|
||||
- 一个配队不能搞定所有的采集路线怎么办,是时候启用路径组了
|
||||
- 路径组的作用是将路线分组运行,分出不同的优先级和配队
|
||||
- 在pathing文件夹中,将路线分到不同的文件夹,第一层的每个文件夹都可供路径组选择
|
||||
- 勾选仅刷新自定义配置,路径组数量填你需要的数量,直接运行一次js
|
||||
- 再次打开自定义配置,为每个路径组选择对应的文件夹和使用的配队,并按要求配置其他项目
|
||||
- 此外,优先采集执行时也会优先使用路径组指定的配置,因此你完全可以路径组配置后不用,只用来指定配队,临界效率填个100即可在事实上禁用该路径组的正常运行
|
||||
- 正常使用路径组时,将会依次执行各个路径组,前一个路径组所有路线都未刷新或低于临界效率等不可用时,将会进入下一个路径组
|
||||
- 定时终止:按要求填写定时终止,js将提前结束采集并等待到预定时间,可用于卡4点
|
||||
- 不同配置组并不共用配置与路径组信息,只会根据账户名共用cd信息,因此你可以在不同德配置组中使用本js,设置不同的多个路径组与终止时间,实现合理分配采集时间
|
||||
- cd类型可参考js文件夹中的表格
|
||||
|
||||
五、注意事项
|
||||
-
|
||||
- 伪造日志:伪造日志功能仅用于日志分析,不会影响脚本的实际运行。
|
||||
- 识别到满背包的物品将会被加入拾取黑名单,同时加入自定义配置中的 **禁用的路线的关键词** ,将会跳过文件路径包含该关键词的路线,其他你希望跳过的路线也可以使用该配置来跳过,如填写钟离来跳过部分需要钟离的挖矿路线(仅文件路径中包含钟离时有效,还是建议手动删除这些路线)
|
||||
- 不同配置组中的本js仅共用相同账号的拾取黑名单,路线刷新cd,路径组等其他信息并不关联,settings.json仅供配置每个配置组使用,本身变化不影响其他配置组功能
|
||||
4. 采集队伍推荐
|
||||
- 根据自己想采集的物品(部分路线强制需要某些角色)进行配队。
|
||||
- - 当需要采集禽肉/兽肉等时,最好携带:绮良良等天赋不会惊动肉类动物的角色
|
||||
- - 当需要采集晶蝶/螃蟹/青蛙等,最好携带:早柚等天赋不会惊动其他动物的角色
|
||||
- - (详情请搜索B站/米游社攻略,或自行查阅角色天赋与游戏图鉴)
|
||||
- - 当采集绯樱绣球/琉鳞石时,必须携带雷系角色,推荐雷法:丽莎/八重神子等(选择一个即可)
|
||||
- - 采集路线有明确指定的角色也必须携带(例如路线中指定了“草神”)
|
||||
- - 推荐携带一个血牛迪希雅,路径追踪行走位设置迪希雅,不容易在采集途中死亡。
|
||||
- - 更多详细对应采集角色请参考路线的readme,或询问群友。
|
||||
- - 示例:
|
||||
- - 队伍名称:迪西娅+八重神子+草神+琴
|
||||
- - 文件夹名称:特产1
|
||||
- - 该组可以采集:电气水晶/冰雾花,绯樱绣球/琉鳞石,路线中指定需要草神采集的,蒲公英,以及其他所有无指定的采集。
|
||||
- - ⚠️但请注意区分物品CD时间,例如上述冰雾花刷新时间与其他区域特产CD不同,尽量不要放在同一个分组,具体刷新时间请参考本脚本自带的Excel。
|
||||
|
||||
六、进阶配置
|
||||
-
|
||||
1. 在自定义配置中勾选高级配置后展开即可查看
|
||||
2. 优先采集材料:按规则填写后,每天会尝试获取指定数量的材料后再进入路径组模式,注意,需要有足够多的拾取历史或文件路径包含目标材料的路径,其余路线无法被识别。
|
||||
3. 优先关键词:在路径组模式中,含有这些关键词的路线会被视为最高效率,配合效率降序排序或者最低效率配置项使用
|
||||
4. 路径组临界效率:执行路径组时,分均效率低于指定值的路线会被排除,特别的,无拾取记录或记录少于3次的路线会被视为恰好处于该临界,不会被排除
|
||||
### 三、**📁 文件结构**
|
||||
- main.js:主程序。
|
||||
- settings.json:用于展示配置组的自定义配置面板,不影响使用。
|
||||
- pathing/ 文件夹:存放地图追踪文件。
|
||||
- blacklists/ 文件夹:保存各个账户名的黑名单物品信息,可以在这里手动编辑,注意需要符合json格式
|
||||
- record/ 文件夹:保存各个账户名的运行记录与cd信息
|
||||
|
||||
### 三、**⚙️ 其他说明**
|
||||
|
||||
1. 伪造日志(不影响游戏)
|
||||
- 生成的日志可以被日志分析识别,方便查看路线运行情况。
|
||||
|
||||
2. 跳过路线运行后的坐标校验
|
||||
- 推荐勾选,当前0.55版本BGI在6.3地图进行坐标校验存在BUG会导致无法记录CD。
|
||||
- 勾选后,部分劣质路线,或因意外导致的导致卡死也将强制记录CD,可避免重跑。
|
||||
|
||||
3. 支持运行途中定时加工食材如面粉等,参考自定义配置使用
|
||||
|
||||
4. **想要测作者怎么办** :来q群1057307824测测莫酱(有其他问题也行)
|
||||
|
||||
5. **茶包版小广告**:茶包版bgi具有许多公版bgi没有的功能,想要测测茶包也可以加上面的群聊
|
||||
|
||||
6. **莫酱全家桶(部分)**:
|
||||
- 日常使用
|
||||
- 锄地一条龙:一站式解决自动化锄地,支持只拾取狗粮
|
||||
- AAA狗粮批发:自动卡时间拿狗粮,收益最大化
|
||||
- AAA狗粮联机团购:联机获取更多狗粮收益
|
||||
- 采集cd管理:管理采集路线并自动优化
|
||||
- 锁定四星教官:锁定四星教官,支持筛选只要初始3和只要带充能
|
||||
- 只要大瓶:尽可能将狗粮分解成大瓶,起个好看的作用
|
||||
- 妙妙小工具
|
||||
- 性能测试:测测你的电脑性能
|
||||
- 食材加工极速版:与采集cd管理中相同的食材加工
|
||||
- 更多妙妙小工具可以加群获取
|
||||
@@ -175,6 +175,16 @@ let checkInterval = +settings.checkInterval || 50;
|
||||
"type": "input-text",
|
||||
"label": "输入用于存储信息的文件名,只在不同账号分别管理CD时填写"
|
||||
},
|
||||
{
|
||||
"name": "priorityItems",
|
||||
"type": "input-text",
|
||||
"label": "优先采集材料,每天会尝试优先采集指定数量的目标物品,随后才执行路径组\n格式:材料名*数量,由加号+连接\n如萃凝晶*160+甜甜花*10"
|
||||
},
|
||||
{
|
||||
"name": "priorityItemsPartyName",
|
||||
"type": "input-text",
|
||||
"label": "优先采集材料使用的配队名称"
|
||||
},
|
||||
{
|
||||
"name": "disableJsons",
|
||||
"type": "input-text",
|
||||
@@ -222,16 +232,6 @@ let checkInterval = +settings.checkInterval || 50;
|
||||
|
||||
if (settings.enableMoreSettings) {
|
||||
newSettings.push(
|
||||
{
|
||||
"name": "priorityItems",
|
||||
"type": "input-text",
|
||||
"label": "优先采集材料,每天会尝试优先采集指定数量的目标物品,随后才执行路径组\n格式:材料名*数量,由加号+连接\n如萃凝晶*160+甜甜花*10"
|
||||
},
|
||||
{
|
||||
"name": "priorityItemsPartyName",
|
||||
"type": "input-text",
|
||||
"label": "优先采集材料使用的配队名称"
|
||||
},
|
||||
{
|
||||
"name": "priorityTags",
|
||||
"type": "input-text",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "采集cd管理",
|
||||
"version": "2.9.2",
|
||||
"version": "2.9.3",
|
||||
"bgi_version": "0.44.8",
|
||||
"description": "仅面对会操作文件和读readme的用户,基于文件夹操作自动管理采集路线的cd,会按照路径组的顺序依次运行,直到指定的时间,并会按照给定的cd类型,自动跳过未刷新的路线",
|
||||
"saved_files": [
|
||||
|
||||
Binary file not shown.
BIN
repo/js/采集cd管理/采集物cd类型(感谢群u整理).xlsx
Normal file
BIN
repo/js/采集cd管理/采集物cd类型(感谢群u整理).xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user