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
- uses: stefanzweifel/git-auto-commit-action@v5
with:
fetch-depth: 0
commit_message: update repo.json
upload:

View File

@@ -2,12 +2,78 @@
[BetterGI](https://github.com/babalae/better-genshin-impact) 的 📜 脚本仓库
在线版:[bgi.sh](https://bgi.sh)
在线版脚本仓库[bgi.sh](https://bgi.sh)
作者Q群764972801 (非作者请勿加入)
[如何提交到本仓库?(谁都能看懂的 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)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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