Merge remote-tracking branch 'upstream/main'

This commit is contained in:
秋云
2025-04-28 22:42:07 +08:00
1396 changed files with 145080 additions and 23367 deletions

View File

@@ -35,6 +35,7 @@ jobs:
- run: node ./build/build.js - run: node ./build/build.js
- uses: stefanzweifel/git-auto-commit-action@v5 - uses: stefanzweifel/git-auto-commit-action@v5
with: with:
fetch-depth: 0
commit_message: update repo.json commit_message: update repo.json
upload: upload:

View File

@@ -2,12 +2,78 @@
[BetterGI](https://github.com/babalae/better-genshin-impact) 的 📜 脚本仓库 [BetterGI](https://github.com/babalae/better-genshin-impact) 的 📜 脚本仓库
在线版:[bgi.sh](https://bgi.sh) 在线版脚本仓库[bgi.sh](https://bgi.sh)
作者Q群764972801 (非作者请勿加入) 作者Q群764972801 (非作者请勿加入)
[如何提交到本仓库?(谁都能看懂的 GitHub Pull Request 使用指南)](https://bgi.huiyadan.com/dev/pr.html) [如何提交到本仓库?(谁都能看懂的 GitHub Pull Request 使用指南)](https://bgi.huiyadan.com/dev/pr.html)
## 脚本提交说明
- 战斗脚本提交到 [repo/combat](https://github.com/babalae/bettergi-scripts-list/tree/main/repo/combat) 目录;
- JS 脚本提交到 [repo/js](https://github.com/babalae/bettergi-scripts-list/tree/main/repo/js) 目录;
- 地图追踪脚本提交到 [repo/pathing](https://github.com/babalae/bettergi-scripts-list/tree/main/repo/pathing) 目录;
- 七圣召唤脚本提交到 [repo/tcg](https://github.com/babalae/bettergi-scripts-list/tree/main/repo/tcg) 目录。
## 脚本提交规范
为了保证脚本的规范性和可读性,方便用户清晰了解脚本的用途,制定以下脚本命名规则和脚本文件夹命名规则。
### 地图追踪脚本
#### 文件命名规范
确保脚本文件在同一目录下按预期顺序排列,并一目了然地传达关键信息。地图追踪脚本命名需包含以下核心信息:
```
编号-材料名称-区域(跨区域材料填写)-二级子区域-数量
```
- 编号
- 两位数,如果单个资源脚本数量超过 `100` 可以考虑使用三位数编号或者使用字母加数字编号,如 A01
- 编号的排序应遵循以下两种方式之一:
- 按传送点位顺序排序。相邻脚本之间优先保证传送的便捷性,这种编号方式考虑整体采集效率。
- 按材料获取效率排序。优先选择资源分布密集或容易采集的点,效率高的路径放在靠前编号,这种编号方式考虑编号靠前脚本的采集效率。
- 材料名称
- 采集物(使用游戏内官方名称命名,如 `慕风蘑菇``劫波莲`,不应当使用 `绫华突破材料`等不清晰的名称命名)
- 掉落物(因掉落物名称与掉落物等级有关,因此不使用掉落物本身命名,而是使用怪物名称命名)
- 区域(指 `蒙德` `璃月` `稻妻` `须弥` `枫丹` `纳塔` `至冬`,仅当材料跨区域需标注)
- 二级子区域(细分地点,如 `绝云间`
- 预期采集的数量
示例:
```
01-水晶矿-璃月-绝云间-6个
02-水晶矿-璃月-荻花洲-8个
```
脚本名称仅限上述规定的编号、材料名称、区域、二级子区域,不应包含额外的描述或标点符号。如:
```
01-水晶矿-璃月-快速路径-绝云间-6个
```
其他注意事项
- 脚本文件名应当和 `json` 文件中的 `name` 字段相同。
#### 文件夹命名规范
目的:对脚本按材料分类管理,便于版本控制与团队协作。目录结构应当遵循以下原则:
- 一级目录:以材料名称命名,须与文件命名中的材料名称一致。
- 二级子目录(可选):可根据项目或作者划分,如有必要。
示例目录结构如下:
```
repo/pathing/
├─ 水晶矿/
│ ├─ 01-水晶矿-璃月-绝云间-6个
│ └─ 02-水晶矿-璃月-荻花洲-8个
└─ 风车菊/
└─ 01-风车菊-蒙德-清泉镇-15个
```
如果脚本和原来的地图追踪脚本存在冲突 按照以下原则处理:
- 修复或补充:直接提交到原材料目录。
- 路线冲突:新建同名目录并添加作者标识:
1. 将旧脚本目录重命名为 `AA@旧作者名`
2. 新脚本放入 `AA@你的名字`
3. 例:原 `repo/pathing/AA` 重命名为 `repo/pathing/AA@oldauthor` 新目录 `repo/pathing/AA@yourname`
其他注意事项
- 目录名仅限材料官方名称,不添加版本号或其他标识。
- 作者标识仅在冲突时追加,格式为“@作者名”,紧随原目录名。
### 其他
因早期对脚本管理较为宽松,因此仓库有部分脚本并不符合命名规范,欢迎通过 PR 规范这些名称。
## 相关源码 ## 相关源码
脚本仓库页面的源码:[bettergi-scripts-web](https://github.com/huiyadanli/bettergi-scripts-web) 脚本仓库页面的源码:[bettergi-scripts-web](https://github.com/huiyadanli/bettergi-scripts-web)

View File

@@ -1,32 +1,32 @@
(async function () { (async function () {
setGameMetrics(1920, 1080, 2); // 设置游戏窗口大小和DPI setGameMetrics(1920, 1080, 2); // 设置游戏窗口大小和DPI
keyPress("B"); keyPress("B");
await sleep(3000); await sleep(3000);
click(670,40); click(670,40);
await sleep(2000); await sleep(2000);
click(660,1010); click(660,1010);
await sleep(2000); await sleep(2000);
click(300,1020); click(300,1020);
await sleep(1000); await sleep(1000);
click(300,380); click(300,380);
await sleep(400); await sleep(400);
click(300,300); click(300,300);
await sleep(400); await sleep(400);
click(300,220); click(300,220);
await sleep(400); await sleep(400);
click(300,150); click(300,150);
await sleep(800); await sleep(800);
click(340,1010); click(340,1010);
await sleep(800); await sleep(800);
click(1740,1020); click(1740,1020);
await sleep(800); await sleep(800);
click(1180,750); click(1180,750);
await sleep(800); await sleep(800);
click(950,800); click(950,800);
await sleep(800); await sleep(800);
keyPress("Escape"); keyPress("Escape");
await sleep(1000); await sleep(1000);
keyPress("Escape"); keyPress("Escape");
log.info("已分解狗粮"); log.info("已分解狗粮");
})(); })();

View File

@@ -1,12 +1,12 @@
{ {
"manifest_version": 1, "manifest_version": 1,
"name": "分解狗粮", "name": "分解狗粮",
"version": "1.0", "version": "1.0",
"description": "用于分解狗粮", "description": "用于分解狗粮",
"authors": [ "authors": [
{ {
"name": "鹤望兰", "name": "鹤望兰",
} }
], ],
"main": "main.js", "main": "main.js",
} }

View File

@@ -1,30 +1,30 @@
(async function () { (async function () {
setGameMetrics(1920, 1080, 2); // 设置游戏窗口大小和DPI setGameMetrics(1920, 1080, 2); // 设置游戏窗口大小和DPI
keyPress("B"); keyPress("B");
await sleep(3000); await sleep(3000);
click(670,40); click(670,40);
await sleep(2000); await sleep(2000);
click(80,1010); click(80,1010);
await sleep(2000); await sleep(2000);
click(170,1020); click(170,1020);
await sleep(1000); await sleep(1000);
click(300,380); click(300,380);
await sleep(400); await sleep(400);
click(300,300); click(300,300);
await sleep(400); await sleep(400);
click(300,220); click(300,220);
await sleep(400); await sleep(400);
click(300,150); click(300,150);
await sleep(800); await sleep(800);
click(340,1010); click(340,1010);
await sleep(800); await sleep(800);
click(1740,1020); click(1740,1020);
await sleep(3000); await sleep(3000);
click(1180,830); click(1180,830);
await sleep(800); await sleep(800);
click(950,800); click(950,800);
await sleep(1000); await sleep(1000);
keyPress("Escape"); keyPress("Escape");
log.info("已摧毁狗粮"); log.info("已摧毁狗粮");
})(); })();

View File

@@ -1,12 +1,12 @@
{ {
"manifest_version": 1, "manifest_version": 1,
"name": "摧毁狗粮", "name": "摧毁狗粮",
"version": "1.0", "version": "1.0",
"description": "用于摧毁狗粮获取摩拉", "description": "用于摧毁狗粮获取摩拉",
"authors": [ "authors": [
{ {
"name": "鹤望兰", "name": "鹤望兰",
} }
], ],
"main": "main.js", "main": "main.js",
} }

View File

@@ -1,109 +1,109 @@
(async function () { (async function () {
//特殊字符键盘映射集 //特殊字符键盘映射集
const map = { const map = {
'(': '9', '(': '9',
')': '0', ')': '0',
'`': 'VK_OEM_3', '`': 'VK_OEM_3',
'!': '1', '!': '1',
'@': '2', '@': '2',
'#': '3', '#': '3',
'$': '4', '$': '4',
'%': '5', '%': '5',
'^': '6', '^': '6',
'&': '7', '&': '7',
'*': '8', '*': '8',
'_': 'VK_SUBTRACT', '_': 'VK_SUBTRACT',
'-': 'VK_SUBTRACT', '-': 'VK_SUBTRACT',
'+': 'VK_ADD', '+': 'VK_ADD',
'=': 'VK_ADD', '=': 'VK_ADD',
'|': 'VK_SEPARATOR', '|': 'VK_SEPARATOR',
'{': 'VK_OEM_4', '{': 'VK_OEM_4',
'}': 'VK_OEM_6', '}': 'VK_OEM_6',
'[': 'VK_OEM_4', '[': 'VK_OEM_4',
']': 'VK_OEM_6', ']': 'VK_OEM_6',
':': 'VK_OEM_1', ':': 'VK_OEM_1',
';': 'VK_OEM_1', ';': 'VK_OEM_1',
'\'': 'VK_OEM_7', '\'': 'VK_OEM_7',
'"': 'VK_OEM_7', '"': 'VK_OEM_7',
'<': 'VK_OEM_COMMA', '<': 'VK_OEM_COMMA',
'>': 'VK_OEM_PERIOD', '>': 'VK_OEM_PERIOD',
',': 'VK_OEM_COMMA', ',': 'VK_OEM_COMMA',
'.': 'VK_OEM_PERIOD', '.': 'VK_OEM_PERIOD',
'?': 'VK_OEM_2', '?': 'VK_OEM_2',
}; };
function replaceUsingMap(input) { function replaceUsingMap(input) {
return map[input] || input; // 如果找到映射,返回对应的值;否则返回原值 return map[input] || input; // 如果找到映射,返回对应的值;否则返回原值
} }
setGameMetrics(1920, 1080, 2); setGameMetrics(1920, 1080, 2);
await sleep(3000); await sleep(3000);
//同意用户协议 //同意用户协议
click(698, 610); click(698, 610);
await sleep(1000); await sleep(1000);
//点击用户名输入框 //点击用户名输入框
click(800, 400); click(800, 400);
await sleep(1000); await sleep(1000);
//输入用户名 //输入用户名
log.info("输入用户名"); log.info("输入用户名");
let username = settings.username; let username = settings.username;
let usernameList = username.split(''); let usernameList = username.split('');
usernameList.forEach(element => { usernameList.forEach(element => {
charCode = element.charCodeAt(0); charCode = element.charCodeAt(0);
let arr = [40,41,33,64,35,36,37,94,38,42,95,43,124,123,125,58,34,60,62,63]; let arr = [40,41,33,64,35,36,37,94,38,42,95,43,124,123,125,58,34,60,62,63];
if(charCode > 64 && charCode < 91 || arr.includes(charCode)==1){ if(charCode > 64 && charCode < 91 || arr.includes(charCode)==1){
element=replaceUsingMap(element); element=replaceUsingMap(element);
keyDown("SHIFT"); keyDown("SHIFT");
keyPress(element); keyPress(element);
keyUp("SHIFT"); keyUp("SHIFT");
}else{ }else{
element=replaceUsingMap(element); element=replaceUsingMap(element);
keyPress(element); keyPress(element);
} }
}); });
log.info("用户名={xx}",username) log.info("用户名={xx}",username)
await sleep(3000); await sleep(3000);
//点击用户名输入框 //点击用户名输入框
click(800, 500); click(800, 500);
await sleep(1000); await sleep(1000);
//输入密码 //输入密码
log.info("输入密码") log.info("输入密码")
let password = settings.password; let password = settings.password;
let passwordList = password.split(''); let passwordList = password.split('');
passwordList.forEach(element => { passwordList.forEach(element => {
charCode = element.charCodeAt(0); charCode = element.charCodeAt(0);
let arr = [40,41,33,64,35,36,37,94,38,42,95,43,124,123,125,58,34,60,62,63]; let arr = [40,41,33,64,35,36,37,94,38,42,95,43,124,123,125,58,34,60,62,63];
if(charCode > 64 && charCode < 91 || arr.includes(charCode)==1){ if(charCode > 64 && charCode < 91 || arr.includes(charCode)==1){
element=replaceUsingMap(element); element=replaceUsingMap(element);
keyDown("SHIFT"); keyDown("SHIFT");
keyPress(element); keyPress(element);
keyUp("SHIFT"); keyUp("SHIFT");
}else{ }else{
element=replaceUsingMap(element); element=replaceUsingMap(element);
keyPress(element); keyPress(element);
} }
}); });
log.info("密码={xx}",password); log.info("密码={xx}",password);
await sleep(1000); await sleep(1000);
//登录 //登录
keyPress("RETURN"); keyPress("RETURN");
await sleep(10000); await sleep(10000);
//进入世界 //进入世界
click(950, 1000); click(950, 1000);
log.info("进入世界"); log.info("进入世界");
await sleep(10000); await sleep(10000);
//进入世界2 //进入世界2
click(950, 1000); click(950, 1000);
log.info("进入世界2"); log.info("进入世界2");
await sleep(10000); await sleep(10000);
//点击领月卡 //点击领月卡
click(950, 1000); click(950, 1000);
log.info("点击领月卡"); log.info("点击领月卡");
await sleep(1000); await sleep(1000);
//点击领月卡2 //点击领月卡2
click(950, 1000); click(950, 1000);
log.info("点击领月卡2"); log.info("点击领月卡2");
await sleep(1000); await sleep(1000);
//点击领月卡2 //点击领月卡2
click(950, 1000); click(950, 1000);
log.info("点击领月卡3"); log.info("点击领月卡3");
await sleep(1000); await sleep(1000);
})(); })();

View File

@@ -1,13 +1,13 @@
{ {
"manifest_version": 1, "manifest_version": 1,
"name": "登录游戏", "name": "登录游戏",
"version": "1.0", "version": "1.0",
"description": "输入账号和密码并进入游戏", "description": "输入账号和密码并进入游戏",
"authors": [ "authors": [
{ {
"name": "愚溪", "name": "愚溪",
} }
], ],
"settings_ui": "settings.json", "settings_ui": "settings.json",
"main": "main.js" "main": "main.js"
} }

View File

@@ -1,12 +1,12 @@
[ [
{ {
"name": "username", "name": "username",
"type": "input-text", "type": "input-text",
"label": "账号" "label": "账号"
}, },
{ {
"name": "password", "name": "password",
"type": "input-text", "type": "input-text",
"label": "密码" "label": "密码"
} }
] ]

View File

@@ -1,18 +1,18 @@
(async function () { (async function () {
setGameMetrics(1920, 1080, 2); setGameMetrics(1920, 1080, 2);
await sleep(1000); await sleep(1000);
keyPress("ESCAPE") keyPress("ESCAPE")
await sleep(1000); await sleep(1000);
click(50, 1030); click(50, 1030);
log.info("退出"); log.info("退出");
await sleep(1000); await sleep(1000);
click(1000, 750); click(1000, 750);
log.info("确认"); log.info("确认");
await sleep(20000); await sleep(20000);
click(1800, 1000); click(1800, 1000);
log.info("切换账号"); log.info("切换账号");
await sleep(1000); await sleep(1000);
click(1000, 550); click(1000, 550);
log.info("确认"); log.info("确认");
await sleep(4000); await sleep(4000);
})(); })();

View File

@@ -1,12 +1,12 @@
{ {
"manifest_version": 1, "manifest_version": 1,
"name": "退出并重登", "name": "退出并重登",
"version": "1.0", "version": "1.0",
"description": "退出游戏并退出账号", "description": "退出游戏并退出账号",
"authors": [ "authors": [
{ {
"name": "愚溪", "name": "愚溪",
} }
], ],
"main": "main.js" "main": "main.js"
} }

View File

@@ -1,33 +1,33 @@
(async function () { (async function () {
setGameMetrics(3840, 2160, 2); setGameMetrics(3840, 2160, 2);
keyPress("b"); keyPress("b");
await sleep(1500); await sleep(1500);
click(1350, 90); click(1350, 90);
await sleep(1240); await sleep(1240);
click(1310, 2030); click(1310, 2030);
await sleep(1000); await sleep(1000);
click(580, 2030); click(580, 2030);
await sleep(1240); await sleep(1240);
click(250, 300); click(250, 300);
await sleep(500); await sleep(500);
click(250, 450); click(250, 450);
await sleep(500); await sleep(500);
click(250, 600); click(250, 600);
await sleep(500); await sleep(500);
click(250, 750); click(250, 750);
await sleep(500); await sleep(500);
click(700, 2030); click(700, 2030);
await sleep(1240); await sleep(1240);
click(3500, 2030); click(3500, 2030);
await sleep(1240); await sleep(1240);
click(2300, 1500); click(2300, 1500);
await sleep(1000); await sleep(1000);
keyPress("Escape"); keyPress("Escape");
await sleep(800); await sleep(800);
keyPress("Escape"); keyPress("Escape");
await sleep(1000); await sleep(1000);
keyPress("Escape"); keyPress("Escape");
await sleep(1000); await sleep(1000);
log.info("已分解狗粮"); log.info("已分解狗粮");
})(); })();

View File

@@ -1,12 +1,12 @@
{ {
"manifest_version": 1, "manifest_version": 1,
"name": "分解狗粮", "name": "分解狗粮",
"version": "1.0", "version": "1.0",
"description": "用于分解狗粮", "description": "用于分解狗粮",
"authors": [ "authors": [
{ {
"name": "HZYgrandma", "name": "HZYgrandma",
} }
], ],
"main": "main.js", "main": "main.js",
} }

Some files were not shown because too many files have changed in this diff Show More