Compare commits
6 Commits
9f3131582f
...
21201ac90d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21201ac90d | ||
|
|
d9cf6abcb9 | ||
|
|
7814e918c8 | ||
|
|
bc863369ff | ||
|
|
11e6a938bd | ||
|
|
910469d6be |
44
repo.json
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"time": "20250512180441",
|
"time": "20250513003250",
|
||||||
"url": "https://github.com/babalae/bettergi-scripts-list/archive/refs/heads/main.zip",
|
"url": "https://github.com/babalae/bettergi-scripts-list/archive/refs/heads/main.zip",
|
||||||
"file": "repo.json",
|
"file": "repo.json",
|
||||||
"indexes": [
|
"indexes": [
|
||||||
@@ -49639,14 +49639,14 @@
|
|||||||
{
|
{
|
||||||
"name": "Auto全自动“枫丹”地脉花",
|
"name": "Auto全自动“枫丹”地脉花",
|
||||||
"type": "directory",
|
"type": "directory",
|
||||||
"hash": "52fc3eab1d8b97ef37d94958150c4a90a62eea80",
|
"hash": "f8ec74488c5560e3d606dcfac65d41ce96001dc6",
|
||||||
"version": "2.0",
|
"version": "2.1",
|
||||||
"author": "LCB-茶包",
|
"author": "LCB-茶包",
|
||||||
"description": "地脉花-可禁UID/领每日/好感队切换~|~枫丹地脉花,蓝花金花通用。生存压力大,请带盾奶;避免纯水输出,请注意说明文件。如有BUG请联系作者QQ:119996800",
|
"description": "地脉花-可禁UID/领每日/好感队切换~|~枫丹地脉花,蓝花金花通用。生存压力大,请带盾奶;避免纯水输出,请注意说明文件。如有BUG请联系作者QQ:119996800",
|
||||||
"tags": [
|
"tags": [
|
||||||
"地脉花"
|
"地脉花"
|
||||||
],
|
],
|
||||||
"lastUpdated": "2025-05-12 00:29:09"
|
"lastUpdated": "2025-05-13 00:32:02"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "BattlePass",
|
"name": "BattlePass",
|
||||||
@@ -49891,12 +49891,12 @@
|
|||||||
{
|
{
|
||||||
"name": "一条龙领奖无树脂(用于周本、首领刷取)+尘歌壶",
|
"name": "一条龙领奖无树脂(用于周本、首领刷取)+尘歌壶",
|
||||||
"type": "directory",
|
"type": "directory",
|
||||||
"hash": "9773daf8aeab4d8e2ce520f26752896b6506c1b8",
|
"hash": "3e08a2eb6cfdb18ddb25fcb5c6aaed76dd33b2f1",
|
||||||
"version": "1.0",
|
"version": "1.1",
|
||||||
"author": "柒叶子",
|
"author": "柒叶子",
|
||||||
"description": "周本每日领奖~|~完成周本或首领讨伐等不使用浓缩树脂的副本挑战后,前往凯瑟琳领奖、派遣、纪行、尘歌壶。如果是周一会在尘歌壶自动购买树脂",
|
"description": "无树脂每日领奖~|~完成周本或首领讨伐等不使用浓缩树脂的副本挑战后,前往凯瑟琳领奖、派遣、纪行、尘歌壶。如果是周一会在尘歌壶自动购买树脂",
|
||||||
"tags": [],
|
"tags": [],
|
||||||
"lastUpdated": "2025-05-11 17:05:54"
|
"lastUpdated": "2025-05-13 00:30:53"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "七圣召唤七日历练全自动",
|
"name": "七圣召唤七日历练全自动",
|
||||||
@@ -49971,12 +49971,12 @@
|
|||||||
{
|
{
|
||||||
"name": "全队自动回满大招能量",
|
"name": "全队自动回满大招能量",
|
||||||
"type": "directory",
|
"type": "directory",
|
||||||
"hash": "cf14428d95202f6568bedcdb0aff0a4c362ed59b",
|
"hash": "1eee59d81c487c9068d291510c71c7f6618b09ac",
|
||||||
"version": "1.0",
|
"version": "1.1",
|
||||||
"author": "柒叶子",
|
"author": "柒叶子",
|
||||||
"description": "自动回能~|~没有什么特别的需求,但是队伍练度不要太低,不然30级的 QQ 人都打不过",
|
"description": "自动回能~|~没有什么特别的需求,但是队伍练度不要太离谱,不然35级的 QQ 人都打不过",
|
||||||
"tags": [],
|
"tags": [],
|
||||||
"lastUpdated": "2025-05-08 13:45:26"
|
"lastUpdated": "2025-05-13 00:30:53"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "切换画质",
|
"name": "切换画质",
|
||||||
@@ -50011,14 +50011,14 @@
|
|||||||
{
|
{
|
||||||
"name": "参量质变仪",
|
"name": "参量质变仪",
|
||||||
"type": "directory",
|
"type": "directory",
|
||||||
"hash": "80d85b70c4035d1cf6fd4d954a3c43d732bafafe",
|
"hash": "7871af26093a4d886848462c7f7eafebb395b204",
|
||||||
"version": "1.1",
|
"version": "1.2",
|
||||||
"author": "LCB-茶包",
|
"author": "LCB-茶包",
|
||||||
"description": "参量质变仪~|~参量质变仪自动化,请注意说明文件,如有BUG请联系作者QQ:119996800",
|
"description": "参量质变仪~|~参量质变仪自动化,请注意说明文件,如有BUG请联系作者QQ:119996800",
|
||||||
"tags": [
|
"tags": [
|
||||||
"参量质变仪"
|
"参量质变仪"
|
||||||
],
|
],
|
||||||
"lastUpdated": "2025-05-12 00:29:09"
|
"lastUpdated": "2025-05-13 00:32:02"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "周常-10个boss一条龙",
|
"name": "周常-10个boss一条龙",
|
||||||
@@ -50205,14 +50205,14 @@
|
|||||||
{
|
{
|
||||||
"name": "爱可菲厨艺机关",
|
"name": "爱可菲厨艺机关",
|
||||||
"type": "directory",
|
"type": "directory",
|
||||||
"hash": "4834ca561f4266d9e77f2600f2e7a477d0f2fb2c",
|
"hash": "4d4d62e1d2d6b99edab1805271cf23c3af8fd667",
|
||||||
"version": "1.2",
|
"version": "1.3",
|
||||||
"author": "LCB-茶包",
|
"author": "LCB-茶包",
|
||||||
"description": "爱可菲自动化~|~爱可菲厨艺机关自动化,请注意说明文件,如有BUG请联系作者QQ:119996800",
|
"description": "爱可菲自动化~|~爱可菲厨艺机关自动化,请注意说明文件,如有BUG请联系作者QQ:119996800",
|
||||||
"tags": [
|
"tags": [
|
||||||
"爱可菲厨艺机关自动化"
|
"爱可菲厨艺机关自动化"
|
||||||
],
|
],
|
||||||
"lastUpdated": "2025-05-12 00:29:09"
|
"lastUpdated": "2025-05-13 00:32:02"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "背包材料统计",
|
"name": "背包材料统计",
|
||||||
@@ -50319,12 +50319,12 @@
|
|||||||
{
|
{
|
||||||
"name": "铁匠铺",
|
"name": "铁匠铺",
|
||||||
"type": "directory",
|
"type": "directory",
|
||||||
"hash": "968561a564ae6e30fb9cde244ee859a690b9b47a",
|
"hash": "d98a2503a49bc4bbeddca35fe1117e25f5001e99",
|
||||||
"version": "1.1(2025.05.01版)",
|
"version": "1.2(2025.05.12版)",
|
||||||
"author": "呱呱z",
|
"author": "呱呱z",
|
||||||
"description": "自动锻造魔矿~|~自动选择铁匠铺和使用矿物去锻造魔矿。\n注1:默认选择枫丹铁匠铺,可选择其他地区铁匠铺。由于地图追踪功能不支持室内定位,所以不支持纳塔铁匠铺;\n注2:可选使用水晶矿(默认)、紫晶矿、萃凝晶。\n鸣谢:寒露,蜜柑魚",
|
"description": "自动锻造魔矿(识图)~|~自动选择铁匠铺和使用矿物去锻造魔矿。\n使用前请阅读“readme”文件\n鸣谢:寒露,蜜柑魚",
|
||||||
"tags": [],
|
"tags": [],
|
||||||
"lastUpdated": "2025-05-11 17:05:54"
|
"lastUpdated": "2025-05-12 23:57:26"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "领取洞天宝钱和好感",
|
"name": "领取洞天宝钱和好感",
|
||||||
|
|||||||
@@ -50,4 +50,7 @@ v.1.3版本:202500422
|
|||||||
|
|
||||||
v.2.0版本:20250503
|
v.2.0版本:20250503
|
||||||
1、重写寻找地脉花线路方法,删除模糊寻找模式。
|
1、重写寻找地脉花线路方法,删除模糊寻找模式。
|
||||||
2、添加直跑模式,当打完一个地脉花后,如下一个地脉花比较近,直接跑过去而不是重新传送。(要求BGI的44.8版本)
|
2、添加直跑模式,当打完一个地脉花后,如下一个地脉花比较近,直接跑过去而不是重新传送。(要求BGI的44.8版本)
|
||||||
|
|
||||||
|
v.2.1版本:20250512
|
||||||
|
1、更改UID识别方法。(适配原神UI改变)
|
||||||
@@ -580,7 +580,7 @@
|
|||||||
if (uidNumbers && uidNumbers.length > 0) {
|
if (uidNumbers && uidNumbers.length > 0) {
|
||||||
// 使用 for...of 循环遍历 uidNumbers 数组
|
// 使用 for...of 循环遍历 uidNumbers 数组
|
||||||
for (let number of uidNumbers) {
|
for (let number of uidNumbers) {
|
||||||
var UIDnow = "UID" + number;
|
var UIDnow = number;
|
||||||
log.debug(`DEBUG:${UIDnow}`);
|
log.debug(`DEBUG:${UIDnow}`);
|
||||||
let UIDD = await Textocr(UIDnow, 1, 0, 0, 112,177, 190, 39);
|
let UIDD = await Textocr(UIDnow, 1, 0, 0, 112,177, 190, 39);
|
||||||
if (UIDD.found) {
|
if (UIDD.found) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "地脉花-可禁UID/领每日/好感队切换",
|
"name": "地脉花-可禁UID/领每日/好感队切换",
|
||||||
"version": "2.0",
|
"version": "2.1",
|
||||||
"bgi_version": "0.44.8",
|
"bgi_version": "0.44.8",
|
||||||
"description": "枫丹地脉花,蓝花金花通用。生存压力大,请带盾奶;避免纯水输出,请注意说明文件。如有BUG请联系作者QQ:119996800",
|
"description": "枫丹地脉花,蓝花金花通用。生存压力大,请带盾奶;避免纯水输出,请注意说明文件。如有BUG请联系作者QQ:119996800",
|
||||||
"tags" : [ "地脉花" ],
|
"tags" : [ "地脉花" ],
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "周本每日领奖",
|
"name": "无树脂每日领奖",
|
||||||
"version": "1.0",
|
"version": "1.1",
|
||||||
"description": "完成周本或首领讨伐等不使用浓缩树脂的副本挑战后,前往凯瑟琳领奖、派遣、纪行、尘歌壶。如果是周一会在尘歌壶自动购买树脂",
|
"description": "完成周本或首领讨伐等不使用浓缩树脂的副本挑战后,前往凯瑟琳领奖、派遣、纪行、尘歌壶。如果是周一会在尘歌壶自动购买树脂",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
{"info":{"name":"","type":""},"positions":[{"x":2297.6201171875,"y":-824.5869140625,"type":"teleport","move_mode":"walk"},{"x":2292.62109375,"y":-826.0419921875,"type":"path","move_mode":"walk"}]}
|
|
||||||
1
repo/js/全队自动回满大招能量/assets/tp.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"info":{"name":"","type":""},"positions":[{"x":-1559.08,"y":2492.51,"type":"teleport","move_mode":"walk"}]}
|
||||||
@@ -45,9 +45,9 @@ const autoNavigateToReward = async () => {
|
|||||||
}
|
}
|
||||||
// 前进一小步
|
// 前进一小步
|
||||||
keyDown("w");
|
keyDown("w");
|
||||||
await sleep(500);
|
await sleep(400);
|
||||||
keyUp("w");
|
keyUp("w");
|
||||||
await sleep(100); // 等待角色移动稳定
|
await sleep(200); // 等待角色移动稳定
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +110,9 @@ async function autoFightAndEndDetection() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await genshin.tp(-1559.08,2492.51);//传送到副本
|
let recovery = settings.recovery ?? 0;
|
||||||
|
await genshin.tp(2297.6201171875,-824.5869140625);
|
||||||
|
await pathingScript.runFile("assets/tp.json");
|
||||||
await sleep(1000);
|
await sleep(1000);
|
||||||
keyDown("w");
|
keyDown("w");
|
||||||
await sleep(3000);
|
await sleep(3000);
|
||||||
@@ -130,8 +132,7 @@ await autoNavigateToReward();
|
|||||||
keyPress("F");
|
keyPress("F");
|
||||||
await autoFightAndEndDetection();//一直战斗直到检测到结束
|
await autoFightAndEndDetection();//一直战斗直到检测到结束
|
||||||
await sleep(1000);
|
await sleep(1000);
|
||||||
await pathingScript.runFile("assets/recover.json");
|
await genshin.tp(2297.6201171875,-824.5869140625);//传送到神像回血
|
||||||
await sleep(1000);
|
|
||||||
log.info("能量充满,任务结束");
|
log.info("能量充满,任务结束");
|
||||||
|
await sleep(1000);
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "自动回能",
|
"name": "自动回能",
|
||||||
"version": "1.0",
|
"version": "1.1",
|
||||||
"description": "没有什么特别的需求,但是队伍练度不要太低,不然30级的 QQ 人都打不过",
|
"description": "没有什么特别的需求,但是队伍练度不要太离谱,不然35级的 QQ 人都打不过",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "柒叶子",
|
"name": "柒叶子",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "参量质变仪",
|
"name": "参量质变仪",
|
||||||
"version": "1.1",
|
"version": "1.2",
|
||||||
"bgi_version": "0.44.0",
|
"bgi_version": "0.44.0",
|
||||||
"description": "参量质变仪自动化,请注意说明文件,如有BUG请联系作者QQ:119996800",
|
"description": "参量质变仪自动化,请注意说明文件,如有BUG请联系作者QQ:119996800",
|
||||||
"tags" : [ "参量质变仪" ],
|
"tags" : [ "参量质变仪" ],
|
||||||
|
|||||||
@@ -15,5 +15,8 @@
|
|||||||
2、官方刚释放了图片和文字识别的API,一些用法还没太懂,我自己在这基础封装一下,打包后方便后续复用。
|
2、官方刚释放了图片和文字识别的API,一些用法还没太懂,我自己在这基础封装一下,打包后方便后续复用。
|
||||||
|
|
||||||
六、更新说明
|
六、更新说明
|
||||||
v.1.120250426
|
v.1.1 20250426
|
||||||
1、修改下拉菜单次数适配4K分辨率。
|
1、修改下拉菜单次数适配4K分辨率。
|
||||||
|
|
||||||
|
v.1.2版本:20250512
|
||||||
|
1、更改UID识别方法。(适配原神UI改变)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
(async function () {
|
(async function () {
|
||||||
|
|
||||||
//初始化配置======================================================================================
|
//初始化配置======================================================================================
|
||||||
var actiontime = settings.actiontime != undefined && ~~settings.actiontime > 0 ? ~~settings.actiontime : 100;
|
var actiontime = settings.actiontime != undefined && ~~settings.actiontime > 0 ? ~~settings.actiontime : 150;
|
||||||
var TEAM
|
var TEAM
|
||||||
var AKF = settings.AKF !== undefined ? (
|
var AKF = settings.AKF !== undefined ? (
|
||||||
settings.AKF === "是" ? 1 :
|
settings.AKF === "是" ? 1 :
|
||||||
@@ -89,7 +89,7 @@ async function executeAttack(){
|
|||||||
await middleButtonClick();
|
await middleButtonClick();
|
||||||
await sleep(1000);
|
await sleep(1000);
|
||||||
|
|
||||||
log.info(`攻击动作开始,${actiontime}秒后超时退出!一般60秒左右完成!`)
|
log.info(`攻击动作开始,${actiontime}秒后超时退出!一般120秒左右完成!`)
|
||||||
var startTime = new Date();
|
var startTime = new Date();
|
||||||
await sleep(500);
|
await sleep(500);
|
||||||
var NowTime = new Date();
|
var NowTime = new Date();
|
||||||
@@ -113,11 +113,12 @@ async function executeAttack(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
leftButtonClick();
|
leftButtonClick();
|
||||||
|
await sleep(50);
|
||||||
NowTime = new Date();
|
NowTime = new Date();
|
||||||
}
|
}
|
||||||
|
|
||||||
await genshin.returnMainUi();
|
await genshin.returnMainUi();
|
||||||
throw new Error(`${actiontimein}秒攻击动作超时,结束流程!`);
|
throw new Error(`${actiontime}秒攻击动作超时,结束流程!`);
|
||||||
}
|
}
|
||||||
|
|
||||||
let nowuidString = settings.nowuid ? settings.nowuid : "";
|
let nowuidString = settings.nowuid ? settings.nowuid : "";
|
||||||
@@ -132,7 +133,7 @@ async function executeAttack(){
|
|||||||
if (uidNumbers && uidNumbers.length > 0) {
|
if (uidNumbers && uidNumbers.length > 0) {
|
||||||
// 使用 for...of 循环遍历 uidNumbers 数组
|
// 使用 for...of 循环遍历 uidNumbers 数组
|
||||||
for (let number of uidNumbers) {
|
for (let number of uidNumbers) {
|
||||||
var UIDnow = "UID" + number;
|
var UIDnow = number;
|
||||||
log.debug(`DEBUG:${UIDnow}`);
|
log.debug(`DEBUG:${UIDnow}`);
|
||||||
let UIDD = await textOCR(UIDnow, 1, 0, 0, 112,177, 190, 39);
|
let UIDD = await textOCR(UIDnow, 1, 0, 0, 112,177, 190, 39);
|
||||||
if (UIDD.found) {
|
if (UIDD.found) {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "爱可菲自动化",
|
"name": "爱可菲自动化",
|
||||||
"version": "1.2",
|
"version": "1.3",
|
||||||
"bgi_version": "0.44.0",
|
"bgi_version": "0.44.0",
|
||||||
"description": "爱可菲厨艺机关自动化,请注意说明文件,如有BUG请联系作者QQ:119996800",
|
"description": "爱可菲厨艺机关自动化,请注意说明文件,如有BUG请联系作者QQ:119996800",
|
||||||
"tags" : [ "爱可菲厨艺机关自动化" ],
|
"tags" : [ "爱可菲厨艺机关自动化"],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "LCB-茶包"
|
"name": "LCB-茶包"
|
||||||
|
|||||||
@@ -18,8 +18,8 @@
|
|||||||
{
|
{
|
||||||
"name": "actiontime",
|
"name": "actiontime",
|
||||||
"type": "input-text",
|
"type": "input-text",
|
||||||
"label": "选填,爱可菲厨艺机关超时默认100秒",
|
"label": "选填,爱可菲厨艺机关超时默认150秒",
|
||||||
"default": "100"
|
"default": "150"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nowuid",
|
"name": "nowuid",
|
||||||
|
|||||||
@@ -13,4 +13,9 @@
|
|||||||
1、测试阶段,如有错误,请QQ:119996800联系反馈。
|
1、测试阶段,如有错误,请QQ:119996800联系反馈。
|
||||||
|
|
||||||
七、更新说明
|
七、更新说明
|
||||||
v.1.0 20250510 发布
|
v.1.2 20250510 发布
|
||||||
|
|
||||||
|
v.1.3 20250512
|
||||||
|
1、更改UID识别方法。(适配原神UI改变)
|
||||||
|
2、修改超时默认时间。
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -1,172 +1,185 @@
|
|||||||
(async function () {
|
(async function () {
|
||||||
// 设置游戏基础参数
|
// 设置游戏基础参数
|
||||||
setGameMetrics(1920, 1080, 1.25); // 设置编写脚本环境的游戏分辨率和DPI缩放
|
setGameMetrics(1920, 1080, 1.25); // 设置编写脚本环境的游戏分辨率和DPI缩放
|
||||||
await genshin.returnMainUi(); // 返回主界面
|
await genshin.returnMainUi(); // 返回主界面
|
||||||
|
|
||||||
///
|
///
|
||||||
// 读取用户配置
|
// 读取用户配置
|
||||||
///
|
///
|
||||||
let smithyName = settings.smithyName || "枫丹铁匠铺";
|
let smithyName = settings.smithyName || "枫丹铁匠铺";
|
||||||
let ore = settings.ore || "水晶块";
|
let ore = settings.ore || "水晶块";
|
||||||
|
|
||||||
// 定义矿物名称和图片文件名的映射表
|
// 定义矿物名称和图片文件名的映射表
|
||||||
const ingredientImageMap = {
|
const ingredientImageMap = {
|
||||||
萃凝晶: "assets/Picture/CondessenceCrystal.png",
|
萃凝晶: "assets/Picture/CondessenceCrystal.png",
|
||||||
|
紫晶块: "assets/Picture/AmethystLump.png",
|
||||||
|
水晶块: "assets/Picture/CrystalChunk.png",
|
||||||
|
星银矿石: "assets/Picture/Starsilver.png",
|
||||||
|
白铁块: "assets/Picture/WhiteIronChunk.png",
|
||||||
|
铁块: "assets/Picture/IronChunk.png",
|
||||||
|
};
|
||||||
|
|
||||||
紫晶块: "assets/Picture/AmethystLump.png",
|
// Ore 映射为中文
|
||||||
水晶块: "assets/Picture/CrystalChunk.png",
|
const OreChineseMap = {
|
||||||
星银矿石: "assets/Picture/Starsilver.png",
|
萃凝晶: "萃凝晶",
|
||||||
白铁块: "assets/Picture/WhiteIronChunk.png",
|
紫晶块: "紫晶块",
|
||||||
铁块: "assets/Picture/IronChunk.png",
|
水晶块: "水晶块",
|
||||||
};
|
星银矿石: "星银矿石",
|
||||||
|
白铁块: "白铁块",
|
||||||
|
铁块: "铁块",
|
||||||
|
// 添加其他加工设置的中文映射
|
||||||
|
};
|
||||||
|
|
||||||
// Ore 映射为中文
|
// 获取中文描述和图像路径
|
||||||
const OreChineseMap = {
|
const processingKey = settings.ore || "水晶块";
|
||||||
萃凝晶: "萃凝晶",
|
const chineseDescription = OreChineseMap[processingKey];
|
||||||
紫晶块: "紫晶块",
|
const imagePath = ingredientImageMap[processingKey];
|
||||||
水晶块: "水晶块",
|
|
||||||
星银矿石: "星银矿石",
|
|
||||||
白铁块: "白铁块",
|
|
||||||
铁块: "铁块",
|
|
||||||
// 添加其他加工设置的中文映射
|
|
||||||
};
|
|
||||||
|
|
||||||
// 获取中文描述和图像路径
|
// 行列数的排列组合
|
||||||
const processingKey = settings.ore || "水晶块";
|
const rows = [1, 2, 3]; // 行数
|
||||||
const chineseDescription = OreChineseMap[processingKey];
|
const cols = [1, 2, 3, 4, 5]; // 列数
|
||||||
const imagePath = ingredientImageMap[processingKey];
|
const gridCoordinates = [];
|
||||||
|
|
||||||
// 行列数的排列组合
|
// 计算每个行列组合的坐标
|
||||||
const rows = [1, 2, 3]; // 行数
|
for (const row of rows) {
|
||||||
const cols = [1, 2, 3, 4, 5]; // 列数
|
for (const col of cols) {
|
||||||
const gridCoordinates = [];
|
const ProcessingX = Math.round(150 + (col - 1) * 145);
|
||||||
|
const ProcessingY = Math.round(230 + (row - 1) * 170);
|
||||||
// 计算每个行列组合的坐标
|
gridCoordinates.push({ row, col, x: ProcessingX, y: ProcessingY });
|
||||||
for (const row of rows) {
|
|
||||||
for (const col of cols) {
|
|
||||||
const ProcessingX = Math.round(135 + (col - 1) * 145);
|
|
||||||
const ProcessingY = Math.round(245 + (row - 1) * 170);
|
|
||||||
gridCoordinates.push({ row, col, x: ProcessingX, y: ProcessingY });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 图像识别函数
|
|
||||||
function recognizeImage(imagePath, x, y, searchWidth, searchHeight) {
|
|
||||||
try {
|
|
||||||
let template = file.ReadImageMatSync(imagePath);
|
|
||||||
let recognitionObject = RecognitionObject.TemplateMatch(
|
|
||||||
template,
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
searchWidth,
|
|
||||||
searchHeight
|
|
||||||
);
|
|
||||||
|
|
||||||
// 设置识别阈值和通道
|
|
||||||
recognitionObject.threshold = 0.9; // 设置识别阈值为 0.9
|
|
||||||
recognitionObject.Use3Channels = true; // 使用三通道匹配
|
|
||||||
|
|
||||||
let result = captureGameRegion().find(recognitionObject);
|
|
||||||
return result.isExist() ? result : null;
|
|
||||||
} catch (error) {
|
|
||||||
log.error(`图像识别失败,路径: ${imagePath}, 错误: ${error.message}`);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 自动前往铁匠铺
|
|
||||||
async function autoSmithy(smithyName) {
|
|
||||||
log.info(`自动前往 ${smithyName}`);
|
|
||||||
try {
|
|
||||||
let filePath = `assets/Pathing/${smithyName}.json`;
|
|
||||||
await pathingScript.runFile(filePath);
|
|
||||||
} catch (error) {
|
|
||||||
log.error(`执行 ${smithyName} 路径时发生错误`);
|
|
||||||
log.error(error.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 确认使用矿石
|
|
||||||
function determineOre() {
|
|
||||||
if (ore == "水晶块") {
|
|
||||||
log.info("将使用 水晶块 锻造矿石");
|
|
||||||
} else if (ore == "紫晶块") {
|
|
||||||
log.info("将使用 紫晶块 锻造矿石");
|
|
||||||
} else if (ore == "萃凝晶") {
|
|
||||||
log.info("将使用 萃凝晶 锻造矿石");
|
|
||||||
} else {
|
|
||||||
log.info("无指定矿石,将使用 水晶块 锻造矿石");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 锻造矿石操作
|
|
||||||
const forgeOre = async function (smithyName) {
|
|
||||||
await sleep(1000);
|
|
||||||
keyPress("F");
|
|
||||||
await sleep(1000); // 开始交互
|
|
||||||
await click(960, 600);
|
|
||||||
await sleep(1000); // 跳过第一个对话
|
|
||||||
await click(960, 600);
|
|
||||||
await sleep(1000); // 跳过第一个对话
|
|
||||||
await click(1375, 500);
|
|
||||||
await sleep(1000);
|
|
||||||
await click(960, 600);
|
|
||||||
await sleep(1000); // 跳过第二个对话
|
|
||||||
await click(960, 600);
|
|
||||||
await sleep(1000); // 跳过第二个对话
|
|
||||||
|
|
||||||
log.info("已进入锻造界面,准备锻造");
|
|
||||||
// 锻造领取
|
|
||||||
await click(520, 140);
|
|
||||||
await sleep(1000); // 选择锻造队列
|
|
||||||
await click(170, 1010);
|
|
||||||
await sleep(1000); // 领取全部
|
|
||||||
await click(960, 900);
|
|
||||||
await sleep(1000); // 确认
|
|
||||||
|
|
||||||
click(220, 150);
|
|
||||||
await sleep(1000); // 点击"配方"
|
|
||||||
determineOre();
|
|
||||||
|
|
||||||
// 根据用户选择的矿石进行锻造
|
|
||||||
if (!imagePath) {
|
|
||||||
log.error(`未找到矿石图像路径: ${chineseDescription}`);
|
|
||||||
} else {
|
|
||||||
log.info(`开始识别矿石: ${chineseDescription}`);
|
|
||||||
|
|
||||||
// 左上角的偏移量
|
|
||||||
const scanOffset = { x: -35, y: -35 };
|
|
||||||
let foundIngredient = false;
|
|
||||||
for (const coordinate of gridCoordinates) {
|
|
||||||
const scanX = coordinate.x + scanOffset.x;
|
|
||||||
const scanY = coordinate.y + scanOffset.y;
|
|
||||||
|
|
||||||
const imageResult = recognizeImage(imagePath, scanX, scanY, 70, 70);
|
|
||||||
if (imageResult) {
|
|
||||||
log.info(`通过图像识别找到矿石: ${chineseDescription}`);
|
|
||||||
imageResult.click();
|
|
||||||
await sleep(2000); // 等待点击生效
|
|
||||||
foundIngredient = true;
|
|
||||||
|
|
||||||
// 点击“开始锻造”3次
|
|
||||||
click(1645, 1015);
|
|
||||||
await sleep(3000);
|
|
||||||
click(1645, 1015);
|
|
||||||
await sleep(3000);
|
|
||||||
click(1645, 1015);
|
|
||||||
await sleep(3000);
|
|
||||||
break; // 找到矿石后退出循环
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (!foundIngredient) {
|
|
||||||
log.error(`未能识别到矿石: ${chineseDescription}`);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 退出锻造界面
|
// 图像识别函数
|
||||||
log.info("锻造结束,退出界面");
|
function recognizeImage(imagePath, x, y, searchWidth, searchHeight) {
|
||||||
keyPress("ESCAPE");
|
try {
|
||||||
};
|
let template = file.ReadImageMatSync(imagePath);
|
||||||
await autoSmithy(smithyName); //寻路函数
|
let recognitionObject = RecognitionObject.TemplateMatch(
|
||||||
await forgeOre(smithyName);
|
template,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
searchWidth,
|
||||||
|
searchHeight
|
||||||
|
);
|
||||||
|
|
||||||
|
// 设置识别阈值和通道
|
||||||
|
recognitionObject.threshold = 0.9; // 设置识别阈值
|
||||||
|
recognitionObject.Use3Channels = true; // 使用三通道匹配
|
||||||
|
|
||||||
|
let result = captureGameRegion().find(recognitionObject);
|
||||||
|
return result.isExist() ? result : null;
|
||||||
|
} catch (error) {
|
||||||
|
log.error(
|
||||||
|
`图像识别失败,路径: ${imagePath}, 错误: ${error.message}`
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自动前往铁匠铺
|
||||||
|
async function autoSmithy(smithyName) {
|
||||||
|
log.info(`自动前往 ${smithyName}`);
|
||||||
|
try {
|
||||||
|
let filePath = `assets/Pathing/${smithyName}.json`;
|
||||||
|
await pathingScript.runFile(filePath);
|
||||||
|
} catch (error) {
|
||||||
|
log.error(`执行 ${smithyName} 路径时发生错误`);
|
||||||
|
log.error(error.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确认使用矿石
|
||||||
|
function determineOre() {
|
||||||
|
if (ore == "水晶块") {
|
||||||
|
log.info("将使用 水晶块 锻造矿石");
|
||||||
|
} else if (ore == "紫晶块") {
|
||||||
|
log.info("将使用 紫晶块 锻造矿石");
|
||||||
|
} else if (ore == "萃凝晶") {
|
||||||
|
log.info("将使用 萃凝晶 锻造矿石");
|
||||||
|
} else {
|
||||||
|
log.info("无指定矿石,将使用 水晶块 锻造矿石");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 锻造矿石操作
|
||||||
|
const forgeOre = async function (smithyName) {
|
||||||
|
await sleep(1000);
|
||||||
|
keyPress("F");
|
||||||
|
await sleep(1000); // 开始交互
|
||||||
|
await click(960, 600);
|
||||||
|
await sleep(1000); // 跳过第一个对话
|
||||||
|
await click(960, 600);
|
||||||
|
await sleep(1000); // 跳过第一个对话
|
||||||
|
await click(1375, 500);
|
||||||
|
await sleep(1000);
|
||||||
|
await click(960, 600);
|
||||||
|
await sleep(1000); // 跳过第二个对话
|
||||||
|
await click(960, 600);
|
||||||
|
await sleep(1000); // 跳过第二个对话
|
||||||
|
|
||||||
|
log.info("已进入锻造界面,准备锻造");
|
||||||
|
// 锻造领取
|
||||||
|
await click(520, 140);
|
||||||
|
await sleep(1000); // 选择锻造队列
|
||||||
|
await click(170, 1010);
|
||||||
|
await sleep(1000); // 领取全部
|
||||||
|
await click(960, 900);
|
||||||
|
await sleep(1000); // 确认
|
||||||
|
|
||||||
|
click(220, 150);
|
||||||
|
await sleep(1000); // 点击"配方"
|
||||||
|
determineOre();
|
||||||
|
|
||||||
|
// 根据用户选择的矿石进行锻造
|
||||||
|
if (!imagePath) {
|
||||||
|
log.error(`未找到矿石图像路径: ${chineseDescription}`);
|
||||||
|
} else {
|
||||||
|
log.info(`开始识别矿石: ${chineseDescription}`);
|
||||||
|
|
||||||
|
// 左上角的偏移量
|
||||||
|
const scanOffset = { x: -35, y: -35 };
|
||||||
|
let foundIngredient = false;
|
||||||
|
for (const coordinate of gridCoordinates) {
|
||||||
|
const scanX = coordinate.x + scanOffset.x;
|
||||||
|
const scanY = coordinate.y + scanOffset.y;
|
||||||
|
|
||||||
|
const imageResult = recognizeImage(
|
||||||
|
imagePath,
|
||||||
|
scanX,
|
||||||
|
scanY,
|
||||||
|
70,
|
||||||
|
70
|
||||||
|
);
|
||||||
|
if (imageResult) {
|
||||||
|
log.info(`通过图像识别找到矿石: ${chineseDescription}`);
|
||||||
|
imageResult.click();
|
||||||
|
await sleep(2000); // 等待点击生效
|
||||||
|
foundIngredient = true;
|
||||||
|
|
||||||
|
// 点击“开始锻造”3次
|
||||||
|
click(1645, 1015);
|
||||||
|
await sleep(1500);
|
||||||
|
click(1645, 1015);
|
||||||
|
await sleep(1500);
|
||||||
|
click(1645, 1015);
|
||||||
|
await sleep(1500);
|
||||||
|
break; // 找到矿石后退出循环
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!foundIngredient) {
|
||||||
|
log.error(`未能识别到矿石: ${chineseDescription}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 退出锻造界面
|
||||||
|
log.info("锻造结束,退出界面");
|
||||||
|
keyPress("ESCAPE");
|
||||||
|
};
|
||||||
|
await autoSmithy(smithyName); //寻路函数
|
||||||
|
await forgeOre(smithyName);
|
||||||
|
|
||||||
|
await genshin.returnMainUi(); // 返回主界面
|
||||||
|
keyDown("S");
|
||||||
|
await sleep(1000);
|
||||||
|
keyUp("S");
|
||||||
|
await sleep(1000);
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"name": "自动锻造魔矿",
|
"name": "自动锻造魔矿(识图)",
|
||||||
"version": "1.1(2025.05.01版)",
|
"version": "1.2(2025.05.12版)",
|
||||||
"description": "自动选择铁匠铺和使用矿物去锻造魔矿。\n注1:默认选择枫丹铁匠铺,可选择其他地区铁匠铺。由于地图追踪功能不支持室内定位,所以不支持纳塔铁匠铺;\n注2:可选使用水晶矿(默认)、紫晶矿、萃凝晶。\n鸣谢:寒露,蜜柑魚",
|
"description": "自动选择铁匠铺和使用矿物去锻造魔矿。\n使用前请阅读“readme”文件\n鸣谢:寒露,蜜柑魚",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "呱呱z"
|
"name": "呱呱z"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"settings_ui": "settings.json",
|
"settings_ui": "settings.json",
|
||||||
"main": "main.js"
|
"main": "main.js"
|
||||||
}
|
}
|
||||||
|
|||||||
57
repo/js/铁匠铺/readme(25.05.12).md
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name 自动锻造魔矿脚本
|
||||||
|
// @version 1.2
|
||||||
|
// @description 自动前往铁匠铺并锻造魔矿,通过识图模式自动选择矿石
|
||||||
|
// @author 呱呱 z
|
||||||
|
// @match 原神版本:5.6;BGI 版本:0.45.1
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
/**
|
||||||
|
* === 重要免责声明 ===
|
||||||
|
* 1. 使用风险
|
||||||
|
* - 本脚本为开源学习项目,禁止用于商业用途或违反游戏条款的行为。
|
||||||
|
* - 滥用可能导致游戏账号封禁,开发者不承担任何直接或间接责任。
|
||||||
|
*
|
||||||
|
* 2. 责任限制
|
||||||
|
* - 本脚本按“现状”提供,不承诺兼容性、安全性或功能完整性。
|
||||||
|
* - 因使用本脚本导致的账号、数据、设备损失,开发者概不负责。
|
||||||
|
*
|
||||||
|
* 3. 禁止条款
|
||||||
|
* - 严禁逆向工程、恶意篡改或用于外挂等非法用途。
|
||||||
|
* - 如游戏运营商提出要求,开发者保留随时停止维护的权利。
|
||||||
|
*
|
||||||
|
* 使用即表示您已阅读并同意上述条款。
|
||||||
|
*
|
||||||
|
* Last Updated: 2025-05-12
|
||||||
|
*/
|
||||||
|
|
||||||
|
# 自动锻造魔矿脚本
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
本脚本可自动前往铁匠铺并锻造魔矿,利用识图模式智能选择需要的矿石,让自定义操作更加便捷。
|
||||||
|
|
||||||
|
## 文件结构
|
||||||
|
- **main.js**:负责核心业务逻辑,包括前往铁匠铺和执行锻造任务。
|
||||||
|
- **manifest.json**:脚本配置文件,记录基本信息和设置。
|
||||||
|
- **settings.json**:用户配置文件,用于选择目标铁匠铺和指定矿石。
|
||||||
|
|
||||||
|
## 使用方法
|
||||||
|
1. 将脚本添加至调度器。
|
||||||
|
2. 右键点击脚本以修改JS自定义配置。
|
||||||
|
3. 在配置文件中选择目标城市的铁匠铺(默认选择枫丹铁匠铺),并设定所需矿石(默认:水晶矿)。
|
||||||
|
- 注意:由于地图追踪功能尚不支持室内定位,故纳塔铁匠铺不可用。
|
||||||
|
- 可选矿石:
|
||||||
|
- 默认:水晶矿
|
||||||
|
- 其他:紫晶矿、萃凝晶
|
||||||
|
- 如需使用“星银矿石”、“白铁块”或“铁块”,请打开 `settings.json`,删除对应矿石前的 `//` 注释后保存配置。
|
||||||
|
|
||||||
|
## 后言
|
||||||
|
本脚本目前处于测试阶段,欢迎反馈问题至 QQ:1765137214。
|
||||||
|
|
||||||
|
## 更新日志
|
||||||
|
|
||||||
|
### 1.2
|
||||||
|
- 修复选择“萃凝晶”时无法识别的 bug
|
||||||
|
|
||||||
|
### 1.1
|
||||||
|
- 优化矿石选取方式,改用识图模式
|
||||||