archive js

This commit is contained in:
起个名字好难的喵
2025-07-28 12:14:10 +08:00
parent 72086ca2cd
commit e769482a79
103 changed files with 1649 additions and 1642 deletions

View File

@@ -0,0 +1,336 @@
async function main() {
// 检查配置
checkSettings();
// 打开背包并切换到小道具
await openBackpack();
// 查找并使用尘歌壶
await findAndUseSereniteaPot();
// 等待进入尘歌壶
await waitForEnteringSereniteaPot();
// 找到阿圆
await moveToAYuan();
// 与阿圆对话
keyPress("F");
await sleep(2000);
click(960, 540);
await sleep(2000);
// 领取好感度以及洞天宝钱
await collectRewards();
// 兑换物品
await exchangeItems();
// 关闭与阿圆的对话
await sleep(1000)
click(1360, 800);
await sleep(1000);
click(960, 540);
}
async function exchangeItems() {
if (!settings.itemsToBuy) {
log.warn("未配置要购买的物品");
return;
}
log.info("开始兑换物品");
// 点击洞天百宝
click(1386, 655);
await sleep(1000);
// 点击第一个选项卡
click(712, 50)
await sleep(1000);
// 获取用户想要购买的物品列表
const itemsToBuy = settings.itemsToBuy.split(',').map(item => item.trim());
log.info(`要购买的物品: ${itemsToBuy.join(', ')}`);
// 设置固定的坐标
const firstItemX = 193;
const firstItemY = 196;
const xOffset = 168; // 水平方向上的间距
const yOffset = 190; // 垂直方向上的间距
const itemsPerRow = 7; // 每行物品数量
// 临时变量,已找到的物品数组和上一个物品名称变量
const foundItems = [];
let lastItemName = "";
// 遍历所有物品
outerLoop: for (let row = 0; row < 3; row++) {
for (let col = 0; col < itemsPerRow; col++) {
// 计算当前物品中心点坐标
const centerX = firstItemX + (xOffset * col);
const centerY = firstItemY + (yOffset * row);
// 需要重复检查这个位置的物品
let keepCheckingCurrentPosition = true;
// 循环检查当前位置的物品,直到不再找到匹配的物品
while (keepCheckingCurrentPosition) {
// 点击物品中心
click(centerX, centerY);
await sleep(1000);
// 获取物品详情区域截图
let screen = captureGameRegion();
let targetRegion = screen.DeriveCrop(1308, 120, 491, 56);
// 使用OCR识别物品名称
let ocrRo = RecognitionObject.Ocr(0, 0, targetRegion.Width, targetRegion.Height);
let ocrResult = targetRegion.find(ocrRo);
if (ocrResult.isEmpty()) {
throw new Error("无法识别物品名称,请检查具体原因");
}
const itemName = ocrResult.Text.trim();
// 检查是否与上一个物品名称相同
if (itemName === lastItemName) {
break outerLoop;
} else {
lastItemName = itemName;
}
// 检查物品是否已售罄
let soldOutRegion = screen.DeriveCrop(1308, 403, 491, 100);
let soldOutOcrRo = RecognitionObject.Ocr(0, 0, soldOutRegion.Width, soldOutRegion.Height);
let soldOutResult = soldOutRegion.find(soldOutOcrRo);
// 如果发现任何已售罄的物品,就认为所有可购买的物品都已检查过,结束搜索
log.debug(`识别到的文字: ${soldOutResult.Text}`)
if (!soldOutResult.isEmpty() && soldOutResult.Text.includes("已售罄")) {
break outerLoop;
}
// 检查是否是用户想要购买的物品(使用包含关系)
let matchedItem = itemsToBuy.find(item => itemName.includes(item));
if (matchedItem) {
log.info(`找到要购买的物品: ${itemName} (匹配: ${matchedItem})`);
// 记录已找到的物品
if (!foundItems.includes(matchedItem)) {
foundItems.push(matchedItem);
}
log.info(`开始购买物品: ${itemName}`);
// 执行购买流程
// 1. 鼠标移动到起始位置
moveMouseTo(1448, 693);
await sleep(300);
// 2. 按下鼠标左键
leftButtonDown();
await sleep(300);
// 3. 移动到结束位置
moveMouseTo(1753, 693);
await sleep(300);
// 4. 松开鼠标左键
leftButtonUp();
await sleep(500);
// 5. 点击确认按钮
click(1698, 1022);
await sleep(1000);
// 6. 关闭弹窗
click(962, 763);
await sleep(1000);
log.info(`成功购买物品: ${itemName}`);
// 检查是否已找到所有物品
if (foundItems.length === itemsToBuy.length) {
log.info("已找到所有需要购买的物品,提前结束搜索");
break outerLoop;
}
} else {
// 如果不匹配,不继续检查当前位置
keepCheckingCurrentPosition = false;
}
}
}
}
// 如果浏览完所有格子后仍有未找到的物品
const notFound = itemsToBuy.filter(item => !foundItems.includes(item));
if (notFound.length > 0) {
log.warn(`浏览完所有物品后,以下物品未找到或已售罄: ${notFound.join(', ')}`);
}
// 关闭兑换页面
await sleep(1000);
click(1841, 47)
await sleep(1000);
}
// 检查配置
function checkSettings() {
if (!settings.route) {
log.warn("当前未配置进入尘歌壶以后的路线,脚本可能无法正常运行");
}
// 记录是否跳过领取角色好感和洞天宝钱
if (settings.skipCharacterReward) {
log.info("当前配置:不领取角色好感");
}
if (settings.skipTreasureReward) {
log.info("当前配置:不领取洞天宝钱");
}
}
// 打开背包并切换到小道具
async function openBackpack() {
keyPress("B");
await sleep(1000);
click(1048, 50);
await sleep(1000);
}
// 查找并使用尘歌壶
async function findAndUseSereniteaPot() {
await findSereniteaPot();
await sleep(1000);
keyPress("F");
}
// 等待进入尘歌壶
async function waitForEnteringSereniteaPot() {
// 先等待5秒应该不会比这快
await sleep(5000);
// 等待传送完成
let isEntering = true;
while (isEntering) {
let screen = captureGameRegion();
let targetRegion = screen.DeriveCrop(85, 1025, 69, 28);
let ocrRo = RecognitionObject.Ocr(0, 0, targetRegion.Width, targetRegion.Height);
let ocrResult = targetRegion.find(ocrRo);
if (ocrResult.Text.toLowerCase().includes("enter")) {
isEntering = false;
}
await sleep(1000);
}
// 进入尘歌壶以后等待1秒
await sleep(1000);
}
// 移动到阿圆并领取奖励
async function collectRewards() {
log.info("开始领取好感度以及洞天宝钱");
click(1370, 432);
await sleep(1000);
// 领取好感度
if (!settings.skipCharacterReward) {
log.info("领取角色好感度");
click(1810, 715);
await sleep(1000);
// 关闭洞天赠礼弹窗
click(1346, 300);
await sleep(1000);
} else {
log.info("根据自定义配置,跳过领取角色好感度");
}
// 领取洞天宝钱
if (!settings.skipTreasureReward) {
log.info("领取洞天宝钱");
click(1080, 929);
await sleep(1000);
// 关闭洞天财瓮弹窗
click(1346, 300);
await sleep(1000);
} else {
log.info("根据自定义配置,跳过领取洞天宝钱");
}
// 关闭对话
click(1864, 47);
await sleep(3000);
}
async function findSereniteaPot() {
let currentX = 178; // 起始X坐标
let searchCount = 0; // 添加查找次数计数器
const MAX_SEARCH_COUNT = 5; // 最大查找次数
while (searchCount < MAX_SEARCH_COUNT) {
searchCount++;
// 点击当前坐标的小道具
click(currentX, 188);
await sleep(1000);
// 获取游戏区域截图
let screen = captureGameRegion();
// 根据指定区域进行剪裁
let targetRegion = screen.DeriveCrop(1307, 119, 493, 55);
// 使用OCR识别
let ocrRo = RecognitionObject.Ocr(0, 0, targetRegion.Width, targetRegion.Height);
let ocrResult = targetRegion.find(ocrRo);
if (!ocrResult.isEmpty() && ocrResult.Text.includes("尘歌壶")) {
// 点击指定坐标
click(1690, 1020);
await sleep(1000);
// 检查一下背包页面是否退出了,有可能当前角色状态没法放置尘歌壶,直接再判断一次截图区域文本是不是尘歌壶就行
let screen = captureGameRegion();
// 根据指定区域进行剪裁
let targetRegion = screen.DeriveCrop(1307, 119, 493, 55);
let ocrRo = RecognitionObject.Ocr(0, 0, targetRegion.Width, targetRegion.Height);
let ocrResult = targetRegion.find(ocrRo);
if (!ocrResult.isEmpty() && ocrResult.Text.includes("尘歌壶")) {
throw new Error("当前无法放置尘歌壶,请检查具体原因");
}
return;
} else {
currentX += 145; // 向右移动145像素查找下一个格子的小道具
await sleep(100);
}
}
throw new Error(`查找尘歌壶次数超过${MAX_SEARCH_COUNT}次,请检查背包是否存在尘歌壶`);
}
async function moveToAYuan() {
const userRoute = settings.route;
if (!userRoute) {
return
}
// 解析路径配置
const routes = userRoute.split(',').map(route => route.trim());
for (const route of routes) {
const [direction, time] = route.split(' ');
if (!direction || !time) {
log.error("路径格式错误: {route}", route);
continue;
}
// 执行移动
keyDown(direction);
await sleep(parseInt(time));
keyUp(direction);
await sleep(500);
}
}
main();

View File

@@ -0,0 +1,18 @@
{
"manifest_version": 1,
"name": "尘歌壶一条龙-领取洞天宝钱、角色好感和购买物品",
"version": "0.0.3",
"description": "自动放置并进入尘歌壶,寻找阿圆,领取洞天宝钱和好感(需要配置进入尘歌壶以后的路线),支持自动购买指定物品(更新时间5.5版本)",
"authors": [
{
"name": "bling-yshs",
"links": "https://github.com/bling-yshs"
}
],
"tags": [
"尘歌壶",
"购买物品"
],
"settings_ui": "settings.json",
"main": "main.js"
}

View File

@@ -0,0 +1,22 @@
[
{
"name": "route",
"type": "input-text",
"label": "进入尘歌壶以后寻找阿圆的路径\n填写规则方向键+空格+时间(单位:毫秒)\n多个路径用英文逗号隔开例如A 1000,S 1500,A 500"
},
{
"name": "itemsToBuy",
"type": "input-text",
"label": "想要购买的物品名称,支持只填写部分文字\n多个物品用英文逗号隔开例如祝圣精华,树脂"
},
{
"name": "skipCharacterReward",
"type": "checkbox",
"label": "不领取角色好感(注意是不领取)"
},
{
"name": "skipTreasureReward",
"type": "checkbox",
"label": "不领取洞天宝钱(注意是不领取)"
}
]

View File

@@ -0,0 +1,105 @@
# 自动幽境危战注意事项
## 零、前言
- 当前文档处于测试阶段,注意事项可能尚不完善,敬请谅解。
- 如发现BUG请通过QQ119996800联系我们您的反馈将非常受欢迎。
- 本脚本基于地脉花和首领一条龙脚本进行改造。
- 脚本仅供娱乐使用请在下载后24小时内删除。
## 一、省流注意事项
1. **使用前准备**
- 请在`<<幽境危战>>`中配置好战斗队伍。
2. **黑名单建议**
- 根目录下有文件内含建议加入`自动拾取黑名单`的名称,请检查并添加。
3. **战斗实力**
- 请确保队伍具备足够的战斗实力,当前版本在战斗失败或执行错误,只会重试`一次`
4. **自动拾取功能**
- 为避免不必要的干扰,建议关闭自动拾取功能。
## 二、配置简介
1. **圣遗物奖励**
- 默认设置下,脚本不会修改圣遗物奖励。
2. **Boss挑战关卡选择**
- 必填项请从上往下选择第几个Boss挑战关卡`1至3`,否则脚本将无法执行。
3. **挑战次数**
- 默认设置为`15`次,期间若树脂耗尽,脚本将自动结束。
4. **树脂顺序设定**
- 使用`/`隔开数字来设定树脂使用顺序,如`1/2`表示先使用浓缩树脂,再使用原粹树脂。
- 树脂类型对应关系:
- 1 = 浓缩树脂
- 2 = 原粹树脂
- 3 = 脆弱树脂
- 4 = 须臾树脂
- 默认设置:`1/2`,表示先使用浓缩树脂,再使用原粹树脂,不填的不使用"。
5. **最长战斗超时时间**
- 默认设置为`240`秒,一般情况下无需修改。
6. **开始战斗后的移动时间**
- 默认设置为`1`秒(注意单位为`秒`由于战斗开始位置离Boss较远请根据实际情况设定一般情况下默认设置即可。
## 三、更新说明
### v.1.0版本20250627
- **功能**:脚本发布。
### v.1.1版本
- **备注**:此版本信息被省略。
### v.1.2版本20250627
- **新增功能**
1. 添加圣遗物`奖励选择`功能。
2. 添加自动选择`难度`功能。
- **优化**
1. 优化逻辑处理。
2. 加大战斗完成识别区域。
### v.1.3版本20250628
- **新增功能**
1. 添加`自动重试`,战斗失败或执行错误会`重试一次`
- **优化**
2. 优化退出点击时序和逻辑。
3. 优化进入秘境后向前走的逻辑。
4. 优化LOG输出显示内容。
- **修复**
1. 修复默认状态下选择长夜套的BUG。
### v.1.4版本20250629
- **新增功能**
1. 添加领奖后的树脂识别,不足时退出秘境,防止多打一次。
- **优化**
1. 优化`再次挑战`挑战的点击逻辑,添加重试。
2. 优化相关自动拾取代码。
3. 优化`难度选择``圣遗物选择`的识别范围。
### v.1.5版本20250630
- **新增功能**
1. 自动战斗失败原地`重试2次`,失败后再退出秘境重试。
- **优化**
1. 优化`LOG`显示。
2. 优化`完全没有树脂`情况弹窗提示处理。
3. 优化删除拾取`黑名单`文件0.47.0后不会乱触发了)。
4. 优化各种`异常状态`的退出处理方法。
5. 优化当有须臾树脂时,脆弱树脂不显示时的处理。
### v.1.6版本20250702
- **优化**
1. 优化没找到地脉花领奖的超时退出处理。
2. 优化树脂识别OCR区域。
3. 优化LOG和代码写法和整理。

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1018 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -0,0 +1,26 @@
{
"info": {
"name": "全自动幽境危战",
"type": "collect",
"author": "LCB-茶包",
"version": "1.0",
"description": "",
"bgi_version": "0.44.8"
},
"positions": [
{
"id": 1,
"x": -194.198,
"y": 984.095,
"move_mode": "walk",
"type": "teleport"
},
{
"id": 2,
"x": -194.25293,
"y": 980.6616,
"move_mode": "walk",
"type": "target"
}
]
}

View File

@@ -0,0 +1,815 @@
(async function () {
let challengeNum = settings.challengeNum;//挑战次数
if (challengeNum === undefined || challengeNum === ""){challengeNum = 15; }//挑战次数
let challengeName = settings.challengeName;//挑战BOSS
if (challengeName === undefined || challengeName === ""){throw new Error("挑战Boss未配置请在JS配置中选择...")}//初始化处理
let Startforward = settings.Startforward*1000 ? settings.Startforward*1000 : 1000;//开始战斗的前进时间
var Fighttimeout = settings.timeout * 1000 ? settings.timeout * 1000 : 240000;//战斗超时时间默认为240秒
const ocrRegion1 = { x: 643, y: 58, width: 800, height: 800 }; // 上方挑战成功区域
const ocrRegion2 = { x: 780, y: 406, width: 370, height: 135 }; // 中间挑战失败区域
const ocrRo1 = RecognitionObject.ocr(ocrRegion1.x, ocrRegion1.y, ocrRegion1.width, ocrRegion1.height);//上方挑战成功区域OCR对象
const ocrRo2 = RecognitionObject.ocr(ocrRegion2.x, ocrRegion2.y, ocrRegion2.width, ocrRegion2.height);//中间挑战失败区域OCR对象
var Rewardsuse = settings.Rewardsuse ? settings.Rewardsuse : "1/2";//树脂使用类型默认为1/2即浓缩树脂和原粹树脂
var resinTypes = Rewardsuse.split("/");
var rewards = [];
var onerewards, secendrewards, threendrewards, fourdrewards;
for (var i = 0; i < resinTypes.length; i++) {
var resinType = parseInt(resinTypes[i]);
if (isNaN(resinType) || resinType < 1 || resinType > 4) {
throw new Error("设定的树脂类型无效或缺失,请重新配置");
}
rewards.push(resinType);
}
const resinTypeMap = ["","使用1个浓缩树脂获取2倍产出", "使用20个原粹树脂", "使用1个脆弱树脂获取3倍产出", "使用1个须臾树脂获取3倍产出"];//识别树脂领奖文字
const golbalRewards = ["","浓缩树脂","原粹树脂","脆弱树脂","须臾树脂"]; // 对应四种树脂
// 根据 rewards 数组长度,依次赋值给对应的变量
if (rewards.length > 0) onerewards = golbalRewards[rewards[0]];
if (rewards.length > 1) secendrewards = golbalRewards[rewards[1]];
if (rewards.length > 2) threendrewards = golbalRewards[rewards[2]];
if (rewards.length > 3) fourdrewards = golbalRewards[rewards[3]];
const golbalRewardText = [onerewards, secendrewards, threendrewards, fourdrewards].filter(Boolean);//过滤树脂使用类型
var advanceNum = 0;//前进寻找地脉之花次数
var verticalNum = 0;//重试寻找地脉之花次数
var resinAgain = false;//是否重试标志
var Artifacts = settings.Artifacts ? settings.Artifacts : "保持圣遗物奖励不变";
//映射所有圣遗物对应需要识别的图片
var artifactImageMap = {
"长夜之誓 / 深廊终曲": "assets/Artifacts/artifact_1.bmp",
"黑曜秘典 / 烬城勇者绘卷": "assets/Artifacts/artifact_2.bmp",
"谐律异想断章 / 未竟的遐思": "assets/Artifacts/artifact_3.bmp",
"回声之林夜话 / 昔时之歌": "assets/Artifacts/artifact_4.bmp",
"逐影猎人 / 黄金剧团": "assets/Artifacts/artifact_5.bmp",
"水仙之梦 / 花海甘露之光": "assets/Artifacts/artifact_6.bmp",
"乐园遗落之花 / 沙上楼阁史话": "assets/Artifacts/artifact_7.bmp",
"深林的记忆 / 饰金之梦": "assets/Artifacts/artifact_8.bmp",
"来歆余响 / 辰砂往生录": "assets/Artifacts/artifact_9.bmp",
"华馆梦醒形骸记 / 海染砗磲": "assets/Artifacts/artifact_10.bmp",
"绝缘之旗印 / 追忆之注连": "assets/Artifacts/artifact_11.bmp",
"昔日宗室之仪 / 染血的骑士道": "assets/Artifacts/artifact_12.bmp",
"渡过烈火的贤人 / 炽烈的炎之魔女": "assets/Artifacts/artifact_13.bmp",
"悠古的磐岩 / 逆飞的流星": "assets/Artifacts/artifact_14.bmp",
"千岩牢固 / 苍白之火": "assets/Artifacts/artifact_15.bmp",
"冰风迷途的勇士 / 沉沦之心": "assets/Artifacts/artifact_16.bmp",
"翠绿之影 / 被怜爱的少女": "assets/Artifacts/artifact_17.bmp",
"如雷的盛怒 / 平息鸣雷的尊者": "assets/Artifacts/artifact_18.bmp"
};
//树脂识别图片
var condensedResin = "assets/condensed_resin_count.png";
var originalResin = "assets/original_resin_count.png";
var fragileResin = "assets/fragile_resin_count.png";
var momentResin = "assets/moment_resin_count.png";
var oneResin = "assets/one.png";
//文字识别封装函数
async function Textocr(wenzi="空参数",chaotime=10,clickocr=0,debugcode=0,x=0,y=0,w=1920,h=1080) {
const startTime = new Date();
for (let ii = 0; ii < 10; ii++)
{
// 获取一张截图
let captureRegion = captureGameRegion();
let res1
// 对整个区域进行 OCR
let resList = captureRegion.findMulti(RecognitionObject.ocr(x,y,w,h));
//log.info("OCR 全区域识别结果数量 {len}", resList.count);
for (let i = 0; i < resList.count; i++)
{ // 遍历的是 C# 的 List 对象,所以要用 count而不是 length
let res = resList[i];
res1=res.text
if (res.text===wenzi) {
log.info(`识别到 ·${res1}·`);
if (debugcode===1){if (x===0 & y===0){log.info("全图代码位置:({x},{y},{h},{w})", res.x-10, res.y-10, res.width+10, res.Height+10);return result = { text: res.text, x: res.x, y: res.y, found: true }}}else{if (x===0 & y===0){log.info("文本OCR完成'{text}'", res.text);}}
if (clickocr===1){await sleep(1000);await click(res.x, res.y);}else{}
if (clickocr===2){await sleep(100);await keyPress("F");}else{}
return result = { text: res.text, x: res.x, y: res.y, found: true }
}
if (debugcode===2 && !res.isEmpty()){
// log.info("({x},{y},{h},{w})", res.x-10, res.y-10, res.width+10, res.Height+10);
return result = { text: res.text, x: res.x, y: res.y, found: true }
}
}
const NowTime = new Date();
if (Math.abs(NowTime - startTime)>chaotime*1000){if (x===0 & y===0){log.info(`${chaotime}秒超时退出,"${wenzi}"未找到`);}return result = {found: false };}else{ii=8;if (x !== 861){if(debugcode!==3){await keyPress("VK_W");}};}
await sleep(100);
}
}
// 图片识别封装函数
async function imageRecognition(imagefilePath="空参数",timeout=10,afterBehavior=0,debugmodel=0,xa=0,ya=0,wa=1920,ha=1080) {
const startTime = new Date();
const Imagidentify = RecognitionObject.TemplateMatch(file.ReadImageMatSync(imagefilePath));
for (let ii = 0; ii < 10; ii++) {
captureRegion = captureGameRegion(); // 获取一张截图
res = captureRegion.DeriveCrop(xa, ya, wa, ha).Find(Imagidentify);
if (res.isEmpty()) {
if (debugmodel===1 & xa===0 & ya===0){log.info("未识别页面元素")};
} else {
if (afterBehavior===1){if (xa===0 & ya===0){log.info("点击模式:开");}await sleep(1000);click(res.x+xa, res.y+ya);}else{if (debugmodel===1 & xa===0 & ya===0){log.info("点击模式:关")}}
if (afterBehavior===2){if (xa===0 & ya===0){log.info("F模式:开");}await sleep(1000);keyPress("F");}else{if (debugmodel===1 & xa===0 & ya===0){log.info("F模式:关")}}
if (debugmodel===1 & xa===0 & ya===0){log.info("全图代码位置:({x},{y},{h},{w})", res.x+xa, res.y+ya, res.width, res.Height);}else{ log.info("识别到页面元素");}
return result = { x: res.x+xa, y: res.y+ya, w:res.width,h:res.Height,found: true }
}
const NowTime = new Date();
if ((NowTime - startTime)>timeout*1000){if (debugmodel===1 & xa===0 & ya===0){log.info(`${timeout}秒超时退出,未找到图片`);}return result = {found: false };}else{ii=8}
await sleep(200);
}
await sleep(1200);
}
//树脂数量获取函数
async function getRemainResinStatus() {
var condensedResinCount = 0; // 浓缩树脂
var originalResinCount = 0; // 原粹树脂
var fragileResinCount = 0; // 脆弱树脂
var momentResinCount = 0; // 须臾树脂
var originalResinCountRa = await imageRecognition(originalResin,0.3, 0, 0,1500,0,200,90);
if (originalResinCountRa.found) {
// await moveMouseTo(originalResinCountRa.x,originalResinCountRa.y);
let countArea = await Textocr("",1, 0, 2,originalResinCountRa.x+originalResinCountRa.w,originalResinCountRa.y,originalResinCountRa.w*3,originalResinCountRa.h);//
if (countArea.found){
log.info("原粹树脂识别数量结果:"+ countArea.text);
let match = countArea.text.match(/(\d+)\s*[/1]\s*(2|20|200)/);
if (match) {
originalResinCount = match[1];
// log.info("脆弱树脂识别数量提取:"+ originalResinCount);
}
else{
log.info("原粹树脂识别数量提取失败");
}
}
else{
log.info("原粹树脂识别数量结果::无");
}
} else {
log.info("未检测到原粹树脂图标");
}
// 浓缩树脂
var condensedResinCountRa = await imageRecognition(condensedResin,0.1, 0, 0,960,0,800,100);
if (condensedResinCountRa.found) {
// await moveMouseTo(condensedResinCountRa.x,condensedResinCountRa.y);
let countArea = await Textocr("",0.5, 0, 2,condensedResinCountRa.x+condensedResinCountRa.w,condensedResinCountRa.y,condensedResinCountRa.w,condensedResinCountRa.h);//
if (countArea.found){
// log.info("浓缩树脂识别数量结果: "+ countArea.text);
condensedResinCount = countArea.text
}
else{
condensedResinCount = "1";
log.info("浓缩树脂识别数量结果1");//不知道为什么1无法识别0是不显示图标的所以就当时1了反正也没啥影响
}
} else {
log.info("未检测到浓缩树脂图标");
}
var momentResinCountRa = await imageRecognition(momentResin,0.1, 0, 1,1170,0,300,100);
if (momentResinCountRa.found) {
// await moveMouseTo(momentResinCountRa.x,momentResinCountRa.y);
let countArea = await Textocr("",0.5, 0, 2,momentResinCountRa.x+momentResinCountRa.w+20,momentResinCountRa.y-15,60,40);//
if (countArea.found){
//log.info("须臾树脂识别数量结果:"+ countArea.text);
momentResinCount = countArea.text
}
else{
var oneRa = await imageRecognition(oneResin,0.1, 0, 1,momentResinCountRa.x+momentResinCountRa.w+20,momentResinCountRa.y-15,60,40);
if (oneRa.found){
momentResinCount = "1";
}else{
log.info("须臾树脂强制为 1 ");
momentResinCount = "1";
}
}
log.info("脆弱树脂强制为 1 ");//须臾树脂出现脆弱树脂不显示强制设置为1情况非常少大不了打多一次
fragileResinCount = "1";
}else
{
var fragileResinCountRa = await imageRecognition(fragileResin,0.1, 0, 1,1170,0,300,100);
if (fragileResinCountRa.found) {
// await moveMouseTo(fragileResinCountRa.x+fragileResinCountRa.w+20,fragileResinCountRa.y-15);
let countArea = await Textocr("",0.5, 0, 2,fragileResinCountRa.x+fragileResinCountRa.w+20,fragileResinCountRa.y-15,60,40);//
if (countArea.found){
// log.info("脆弱树脂识别数量结果:"+ countArea.text);
fragileResinCount = countArea.text
}
else{
var oneRa = await imageRecognition(oneResin,0.1, 0, 1,fragileResinCountRa.x+fragileResinCountRa.w+20,fragileResinCountRa.y-15,60,40);
if (oneRa.found){
fragileResinCount = "1";
}else{
fragileResinCount = "1";
log.info("脆弱树脂识别强制为 1 ");//有图标说明至少为1
}
}
}
else {
log.info("未检测到脆弱树脂图标");
}
}
log.info("树脂状态:浓缩{0} 原粹{1} 脆弱{2} 须臾{3}", condensedResinCount, originalResinCount, fragileResinCount,momentResinCount)
return {condensedResinCount,originalResinCount,fragileResinCount,momentResinCount}
}
//征讨之花领奖寻找函数
const autoNavigateToReward = async () => {
// 定义识别对象
const boxIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/box.png"));
advanceNum = 0;//前进次数
//调整为俯视视野
middleButtonClick();
await sleep(800);
moveMouseBy(0, 1030);
await sleep(400);
moveMouseBy(0, 920);
await sleep(400);
moveMouseBy(0, 710);
log.info("开始领奖");
while (true) {
// 1. 优先检查是否已到达领奖点
let captureRegion = captureGameRegion();
let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50);
let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis);
// 检测到特点文字则结束!!!
if (rewardResult.text == "激活地脉之花") {
log.info("已到达领奖点,检测到文字: " + rewardResult.text);
return true;
}
else if(advanceNum > 40){
await getOut();
await await genshin.returnMainUi();
throw new Error('前进时间超时');
}
// 2. 未到达领奖点,则调整视野
for(let i = 0; i < 100; i++){
captureRegion = captureGameRegion();
let iconRes = captureRegion.Find(boxIconRo);
let climbTextArea = captureRegion.DeriveCrop(1808, 1030, 25, 25);
let climbResult = climbTextArea.find(RecognitionObject.ocrThis);
// 检查是否处于攀爬状态
if (climbResult.isEmpty()){
let SHU = Textocr("地脉之花", 0.3, 1, 0, 840,225, 230, 125);
if (SHU.found){
return true;
}
log.info("检侧到页面错误,尝试脱离");
await keyDown("w");
await keyPress("VK_ESCAPE");
await sleep(500);
await keyDown("w");
await sleep(5000);
await keyUp("w");
}
if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) {
advanceNum++;
log.info(`视野已调正,前进第${advanceNum}`);
break;
} else {
// 小幅度调整
if(iconRes.y >= 520) moveMouseBy(0, 920);
let adjustAmount = iconRes.x < 920 ? -20 : 20;
let distanceToCenter = Math.abs(iconRes.x - 920); // 计算与920的距离
let scaleFactor = Math.max(1, Math.floor(distanceToCenter / 50)); // 根据距离缩放最小为1
let adjustAmount2 = iconRes.y < 540 ? scaleFactor : 10;
moveMouseBy(adjustAmount * adjustAmount2, 0);
await sleep(100);
}
if(i > 97) {
if (verticalNum >= 2) {
verticalNum = 0;
await getOut();
await await genshin.returnMainUi();
throw new Error('领取超时');
}
log.info("领取超时重新尝试1次");
await sleep(1000);
return false;
}
}
// 3. 前进一小步
keyDown("w");
await sleep(600);
keyUp("w");
await sleep(100); // 等待角色移动稳定
let earthlyVeins = await Textocr("地脉之花", 0.1, 0, 0, 840,225, 230, 125)
if (earthlyVeins.found) {
return true;
}
}
}
//向前寻找钥匙函数
async function readyFightIn(){
var startTime = new Date();
await sleep(500);
var NowTime = new Date();
keyDown("w");
while ((NowTime - startTime)<15*1000){
const result = await Textocr("战斗准备",0,0,3,1198,492,150,80);
const result2 = await Textocr("开始挑战",0,0,3,1554,970,360, 105);
if (result.found || result2.found) {
keyPress("F");keyPress("F");keyPress("F");keyPress("F");
keyUp("w");
return true;
}
keyDown("w");
keyPress("F");
NowTime = new Date();
}
await keyUp("w");
return false
}
//异步检测战斗执行函数来自D捣蛋&秋云佬的全自动地脉花的代码
async function autoFight(timeout) {
const cts = new CancellationTokenSource();
log.info("开始战斗");
dispatcher.RunTask(new SoloTask("AutoFight"), cts);
let fightResult = await recognizeTextInRegion(timeout);
logFightResult = fightResult ? "成功" : "失败";
log.info(`战斗结束,战斗结果:${logFightResult}`);
cts.cancel();
return fightResult;
}
//异步检测战斗结果函数
async function recognizeTextInRegion(timeout) {
return new Promise((resolve, reject) => {
(async () => {
try {
let startTime = Date.now();
const successKeywords = ["挑战完成","战斗完成"];
const failureKeywords = ["战斗失败","挑战失败"];
// 循环检测直到超时
while (Date.now() - startTime < timeout) {
try {
let captureRegion = captureGameRegion();
let result = captureRegion.find(ocrRo1);
let result2 = captureRegion.find(ocrRo2);
let text = result.text;
let text2 = result2.text;
// 检查成功关键词
for (let keyword of successKeywords) {
if (text.includes(keyword)) {
log.info("检测到战斗成功关键词: {0}", keyword);
resolve(true);
return;
}
}
// 检查失败关键词--
for (let keyword of failureKeywords) {
if (text2.includes(keyword)) {
log.warn("检测到战斗失败关键词: {0}", keyword);
resolve(false);
return;
}
}
}
catch (error) {
log.error("OCR过程中出错: {0}", error);
}
await sleep(1000); // 检查间隔
}
log.warn("在超时时间内未检测到战斗结果");
resolve(false);
} catch (error) {
reject(error);
}
})();
});
}
//圣遗物奖励更换函数
async function selectionHolyRelics() {
let artifactImagePath = artifactImageMap[Artifacts];
// 检查artifactImagePath是否存在
if (!artifactImagePath) {
throw new Error(`未找到与Artifacts值'${Artifacts}'对应的图片路径`);
}
let modifiedPath = artifactImagePath.slice(0, -4);
let newImagePath = modifiedPath + "in.bmp";
await sleep(500);
await click(116,980) // 领取奖励切换按钮
await sleep(100);
await click(116,980) // 领取奖励切换按钮
await sleep(100);
let rewardSettings = await Textocr("奖励设置",15,0,0,882,34,161,52);//这个时候有人申请进入世界会遮住,真是尴尬啊,不过不影响大局。
if (!rewardSettings.found) {await genshin.returnMainUi();return false;}
await click(1642,159);
await sleep(100);
await click(1642,159);
await sleep(100);
let YOffset = 0; // Y轴偏移量根据需要调整
//滚轮预操作
await moveMouseTo(1642,159);
await sleep(100);
await leftButtonDown();
await sleep(100);
await moveMouseTo(1642,155);
const maxRetries = 9; // 最大重试次数
let retries = 0; // 当前重试次数
while (retries < maxRetries) {
let result1 = await imageRecognition(newImagePath,1, 0, 0,1166,141,210,857);//
if (result1.found) {
await leftButtonUp();
await sleep(500);
await click(result.x-500,result.y);
await sleep(1000);
await keyPress("VK_ESCAPE");
return true
}
retries++; // 重试次数加1
//滚轮操作
YOffset += 100;
if (retries === maxRetries || retries+YOffset > 1080) {
await leftButtonUp();
await sleep(100);
await keyPress("VK_ESCAPE");
await genshin.returnMainUi();
return false;
}
await moveMouseTo(1642,155+YOffset);
await sleep(500);
}
return true;
}
// 领取奖励函数
async function claimRewards() {
// log.info(`尝试领取奖励,优先${onerewards}'`);
let SHUN01 = await Textocr("激活地脉之花",0.6,2,0,1188,358,200,400);
let SHUN02 = await Textocr("地脉之花", 0.2, 1, 0, 840,225, 230, 125);
if (SHUN01.found || SHUN02.found) {
log.info("找到地脉之花,开始领取奖励...");
}
else
{
log.warn("未找到地脉之花,尝试向前寻找...")
await keyDown("W");await sleep(300);await keyUp("W");
await keyPress("F");
await sleep(1000);
}
await sleep(300);
for (let j = 0;j < 2;j++) {
for (let i = 0;i < rewards.length;i++) {
let SHU = await Textocr(resinTypeMap[rewards[i]],0.3,0,0,510,380,640,600);
if (SHU.found){
if (resinTypeMap[rewards[i]] == "使用20个原粹树脂")
{
let BUC = await Textocr("补充",0.2,0,0,1150,440,210,130);
if (BUC.found) {continue;}
}
await sleep(100);
await click(SHU.x+550,SHU.y)
await sleep(100);
await click(SHU.x+550,SHU.y)
await sleep(300);
log.info(`${resinTypeMap[rewards[i]]} 获取奖励...`);
await Textocr("锁定辅助",10,0,0,1768,0,115,90);
let { condensedResinCount, originalResinCount, fragileResinCount , momentResinCount} = await getRemainResinStatus();
let shouldExit = true;
if (resinTypes.includes("1"))
{
shouldExit &= (parseInt(condensedResinCount, 10) == 0);
}
if (resinTypes.includes("2"))
{
shouldExit &= (parseInt(originalResinCount, 10) < 20);
}
if (resinTypes.includes("3"))
{
shouldExit &= (parseInt(fragileResinCount, 10) == 0);
}
if (resinTypes.includes("4"))
{
shouldExit &= (parseInt(momentResinCount, 10) == 0);
}
if (shouldExit)
{
await sleep(1000);
await keyPress("VK_ESCAPE");
await sleep(1000);
return false;
}
log.warn("还有树脂...");
return true;
}
}
await sleep(500);
}
log.warn("未找到树脂,结束领取奖励...");
await sleep(1000);
await keyPress("VK_ESCAPE");
await sleep(1000);
return false;
}
// 进入秘境入口函数
async function VeinEntrance() {
for (let i = 0;i < 2;i++) {
let JIECHU = await Textocr("F",2,2,0,1098,519,35,32);
if (JIECHU.found)
{
await keyPress("F");
await keyPress("F");
break;
}
else
{
if(i == 1){
log.warn("没找入口,尝试强制转圈寻找...");
await keyDown("W");keyPress("F");await sleep(500);keyPress("F");await keyUp("W");
await keyDown("D");keyPress("F");await sleep(500);keyPress("F");await keyUp("D");
await keyDown("S");keyPress("F");await sleep(500);keyPress("F");await keyUp("S");
await keyDown("A");keyPress("F");await sleep(500);keyPress("F");await keyUp("A");
await keyDown("W");keyPress("F");await sleep(500);keyPress("F");await keyUp("W");
break;
}
}
}
}
//秘境内退出函数
async function getOut() {
for (let i = 0;i < 2;i++){
log.info("尝试退出挑战...");
await keyPress("VK_ESCAPE");
await sleep(1000);
let exitChallenge0 = await Textocr("退出挑战",0.5,1,0,866,719,274,86);
await sleep(1000);
await keyPress("VK_ESCAPE");
await sleep(1000);
let exitChallenge1 = await Textocr("退出挑战",0.5,1,0,866,719,274,86);
await sleep(1000);
await keyPress("VK_ESCAPE");
await sleep(1000);
let exitChallenge2 = await Textocr("退出挑战",0.5,1,0,866,719,274,86);
if (!exitChallenge2.found){break}
}
}
log.warn("自动幽境危战版本v1.6");
log.warn("请保证队伍战斗实力,战斗失败或执行错误,会重试两次...");
log.warn("使用前请在 <<幽境危战>> 中配置好战斗队伍...");
log.info("使用树脂类型数量:{0} ", rewards.length)
log.info(`使用树脂顺序:${golbalRewardText.join(" ->")}`);
log.info("圣遗物奖励选择:{0} ", Artifacts)
//重试两次
for (let j = 0;j < 2;j++) {
resinAgain = false; //重试标志
try{
//1.导航进入页面
await genshin.returnMainUi();
await pathingScript.runFile(`assets/全自动幽境危战.json`);
await VeinEntrance();
//2.难度确认和选择
let intoAction = await Textocr("单人挑战",10,0,0,1554,970,360, 105);
if (!intoAction.found){
await genshin.returnMainUi();
throw new Error("未进入挑战页面,停止执行...")
}
let adjustmentType = await Textocr("至危挑战", 1, 0, 0,797,144,223,84);
if (adjustmentType.found) {
log.warn("找到至危挑战,尝试切换...")
await sleep(500);
await click(adjustmentType.x,adjustmentType.y)
await sleep(500);
}
let hardMode = await Textocr("困难", 0.3, 0, 0,1049,157,72,47);
let hardMode2 = await Textocr("困难", 0.2, 0, 0,805,156,83,47);
if (hardMode.found || hardMode2.found) {
log.warn("确认困难模式...")
}
else{
log.warn("未找到困难模式,尝试切换...")
await sleep(500);
await click(1096,186);
await sleep(500);
await click(1093,399);
}
//3.圣遗物奖励选择
if (Artifacts != "保持圣遗物奖励不变"){
let artifact = await imageRecognition(artifactImageMap[Artifacts],0.2,0,0,186,972,71,71);
if (!artifact.found) {
log.warn("圣遗物奖励和设定不一致,尝试切换...")
if (!await selectionHolyRelics()){await genshin.returnMainUi();throw new Error("圣遗物奖励设置错误,停止执行...")}
}
else{
log.warn("圣遗物奖励一致,无需切换 {0} ", Artifacts)
}
}
//4.进入秘境
await sleep(500);
await click(intoAction.x,intoAction.y)
await sleep(1000);
await click(intoAction.x,intoAction.y)
let enter = await Textocr("Enter",15,0,0,18,990,156,71,71);
if (!enter.found){
await genshin.returnMainUi();
throw new Error("未进入秘境,停止执行...")
}
//5.向前走进入挑战
if (!(await readyFightIn())){
await getOut();
await genshin.returnMainUi();
throw new Error("未进入准备战斗,停止执行...")
}
await sleep(1000);
//6.选择挑战boss
log.info("选择挑战Boss'{0}' 挑战次数:'{1}'", challengeName,challengeNum)
log.info(`期间树脂耗尽会自动退出秘境...`);
const clickCoordinates = [ { x: 207, y: 349 }, { x: 239, y: 531 }, { x: 227, y: 713 } ]; // Boss坐标1~3
await click(clickCoordinates[challengeName - 1].x, clickCoordinates[challengeName - 1].y);
//6.5选择队员-苏婷老师-待写
//log.warn("队伍选择功能等伟大的苏苏老师考完试做...")
//7.开始挑战
await Textocr("开始挑战",1,1,0,1554,970,360, 105);
var resinexhaustion = false; // 条件1树脂耗尽
//8.战斗循环
for (let i = 0;i < challengeNum; i++) {
log.info("进入战斗环境,开始第 {0} 次战斗", i+1)
//8.1自动战斗
for (let fightCount = 0; fightCount < 3; fightCount++) {
let battleBegins = await Textocr("战斗开始",20,0,0,877,235,164,50);
if (!battleBegins.found){
await getOut();
throw new Error("未进入战斗环境,停止执行...")
}
try {
await keyDown("w");
await sleep(Startforward);
await keyUp("w");
if(!await autoFight(Fighttimeout)){
resinAgain = true;
if (fightCount >= 2){
await sleep(1000);
await keyPress("VK_ESCAPE");
await sleep(1000);
break;
}
else
{
let Again = await Textocr("再次挑战",10,1,0,1059,920,177,65);
if (!Again.found)break;
await sleep(1000);
log.warn("战斗失败,第 {0} 次重试...", fightCount+1)
throw new Error(`战斗失败,第 ${fightCount+1} 次重试...`)
}
}else
{
resinAgain= false;
break;
}
} catch (error) {
if (fightCount < 2)continue;
else break;
}
}
//8.2领取奖励
if (resinAgain != true) {
await sleep(1000);
await keyPress("VK_ESCAPE");
await sleep(1000);
while((await Textocr("Enter",5,0,0,18,990,156,80).found) == false)
{
await keyPress("VK_ESCAPE");
await sleep(1000);
}
log.info("幽境危战:第 {0} 次领奖...", i+1)
if(!(await autoNavigateToReward())){verticalNum++;continue;}
await sleep(1000);
if (!(await claimRewards())) {
resinexhaustion = true;
}
else
{
if (challengeNum != i+1)
{
let challengeAgian = await Textocr("再次挑战",10,0,0,1094,958,200,70);
if (!challengeAgian.found){
await getOut();
throw new Error("未找到·再次挑战·按键,停止执行...")
}
for (let retry = 0; retry < 5 && challengeAgian.found; retry++) {
challengeAgian = await Textocr("再次挑战",0.2,0,0,1094,958,200,70);
if (challengeAgian.found){
await sleep(500);
await click(challengeAgian.x, challengeAgian.y);
await sleep(1000);
}
await sleep(200);
}
let resinTips = await Textocr("提示",2,0,0,840,225, 230, 125);
if (resinTips.found){
await sleep(1000);
await keyPress("VK_ESCAPE");
await sleep(200);
log.info(`树脂提示已耗尽,...`);
resinexhaustion = true;
}
}
}
}
//8.3判断继续或退出
if (challengeNum == i+1 || resinexhaustion == true || resinAgain == true ){
log.info(resinAgain ? "累计战斗失败 3 次,退出秘境..."
: (challengeNum == i+1) ? `完成 ${i+1}/${challengeNum} 次战斗,退出挑战...`: `树脂耗尽,退出挑战...`);
await sleep(1000);
await keyPress("VK_ESCAPE");
await sleep(1000);
var exitTimeout = 0;
while(exitTimeout < 20) {
let exitChallenge = await Textocr("退出挑战",0.3,0,0,866,719,274,86);
if (exitChallenge.found) {
await sleep(1000);
await click(exitChallenge.x, exitChallenge.y);
await sleep(1000);
break;
}
let exitChallenge2 = await Textocr("退出挑战",0.3,1,0,866,719,274,86);
log.info("尝试退出挑战...");
await sleep(1000);
await keyPress("VK_ESCAPE");
await sleep(1000);
exitTimeout++;
}
await genshin.returnMainUi();
if (resinAgain == true){throw new Error("执行重试错误...")}
return true;
}
await sleep(500);
}
}
catch (error) {
//9.执行错误,重试处理
log.error(`执行过程中发生错误:${error.message}`);
resinAgain = true;
await genshin.returnMainUi();
continue;
}finally{
//10.结束脚本
await genshin.returnMainUi();
if (resinAgain == false) log.info(`Auto自动幽境危战结束...`);
}
}
})();

View File

@@ -0,0 +1,18 @@
{
"manifest_version": 1,
"name": "自动幽境危战",
"version": "1.6",
"tags": [
"幽境危战"
],
"bgi_version": "0.44.8",
"description": "请先配置好秘境内的队伍,幽境危战战斗失败或执行错误会重试一次,请保证队伍实力",
"authors": [
{
"name": "LCB-茶包",
"links": "https://github.com/kaedelcb"
}
],
"settings_ui": "settings.json",
"main": "main.js"
}

View File

@@ -0,0 +1,58 @@
[
{
"name": "Artifacts",
"type": "select",
"label": "圣遗物奖励,默认不修改圣遗物奖励",
"options": [
"保持圣遗物奖励不变",
"长夜之誓 / 深廊终曲",
"黑曜秘典 / 烬城勇者绘卷",
"谐律异想断章 / 未竟的遐思" ,
"回声之林夜话 / 昔时之歌" ,
"逐影猎人 / 黄金剧团" ,
"水仙之梦 / 花海甘露之光" ,
"乐园遗落之花 / 沙上楼阁史话" ,
"深林的记忆 / 饰金之梦" ,
"来歆余响 / 辰砂往生录" ,
"华馆梦醒形骸记 / 海染砗磲" ,
"绝缘之旗印 / 追忆之注连" ,
"昔日宗室之仪 / 染血的骑士道" ,
"渡过烈火的贤人 / 炽烈的炎之魔女" ,
"悠古的磐岩 / 逆飞的流星",
"千岩牢固 / 苍白之火" ,
"冰风迷途的勇士 / 沉沦之心" ,
"翠绿之影 / 被怜爱的少女" ,
"如雷的盛怒 / 平息鸣雷的尊者"
]
},
{
"name": "challengeName",
"type": "select",
"label": "必填从上往下1~3选择第几个Boss挑战关卡",
"options": [
"1",
"2",
"3"
]
},
{
"name": "challengeNum",
"type": "input-text",
"label": "挑战次数默认15次期间树脂耗尽会自动结束"
},
{
"name": "Rewardsuse",
"type": "input-text",
"label": "树脂顺序1=浓缩树脂/2=原粹树脂/3=脆弱树脂/4=须臾树脂\n用`/`隔开填写对应的树脂数字即可默认1/2\n表示先使用浓缩树脂再使用原粹树脂不填的不使用"
},
{
"name": "Fighttimeout",
"type": "input-text",
"label": "最长战斗超时时间单位秒默认240秒"
},
{
"name": "Startforward",
"type": "input-text",
"label": "开始战斗后向前移动的时间默认1秒注意单位"
}
]

View File

@@ -0,0 +1,20 @@
{
"info": {
"name": "桃椰子木12个tp",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 8350.8408203125,
"y": -2844.587890625,
"action": "force_tp",
"move_mode": "walk",
"type": "teleport"
}
]
}

View File

@@ -0,0 +1,20 @@
{
"info": {
"name": "炬木15个tp",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 4716.53271484375,
"y": 2382.36767578125,
"action": "force_tp",
"move_mode": "walk",
"type": "teleport"
}
]
}

View File

@@ -0,0 +1,68 @@
{
"info": {
"name": "业果木15个(辉木15个)",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 3135.693359375,
"y": -1079.69189453125
},
{
"id": 2,
"x": 3168.45068359375,
"y": -1080.99462890625,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": 3171.7421875,
"y": -1064.4404296875,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 4,
"x": 3185.36083984375,
"y": -1064.46875,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 5,
"x": 3194.23291015625,
"y": -1082.80029296875,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 6,
"x": 3210.9462890625,
"y": -1085.4306640625,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 7,
"x": 3212.19482421875,
"y": -1077.3984375,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,28 @@
{
"info": {
"name": "刺葵木6个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 4209.8037109375,
"y": -2711.9990234375,
"type": "teleport",
"move_mode": "walk",
"action": ""
},
{
"id": 2,
"x": 4204.03271484375,
"y": -2726.19140625,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,36 @@
{
"info": {
"name": "却砂木12个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 341.3154296875,
"y": 548.126953125,
"action": "",
"move_mode": "walk",
"type": "teleport"
},
{
"id": 2,
"x": 404.1220703125,
"y": 515.765625,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 3,
"x": 418.2958984375,
"y": 485.41650390625,
"action": "",
"move_mode": "walk",
"type": "target"
}
]
}

View File

@@ -0,0 +1,36 @@
{
"info": {
"name": "垂香木15个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": -521.603515625,
"y": 2181.3447265625,
"action": "",
"move_mode": "walk",
"type": "teleport"
},
{
"id": 2,
"x": -545.5341796875,
"y": 2167.464599609375,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 3,
"x": -541.90625,
"y": 2160.69091796875,
"action": "",
"move_mode": "walk",
"type": "target"
}
]
}

View File

@@ -0,0 +1,36 @@
{
"info": {
"name": "御伽木9个(孔雀木6个)",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "有怪,快速退出重进能够刷新仇恨",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": -4217.919921875,
"y": -2397.8359375
},
{
"id": 2,
"x": -4188.4814453125,
"y": -2418.57421875,
"type": "path",
"move_mode": "fly",
"action": "stop_flying"
},
{
"id": 5,
"x": -4186.791015625,
"y": -2429.5341796875,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,36 @@
{
"info": {
"name": "悬铃木18个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "force_tp",
"move_mode": "walk",
"type": "teleport",
"x": 4663.3974609375,
"y": 2446.1669921875
},
{
"id": 2,
"x": 4580.466796875,
"y": 2339.714111328125,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": 4570.798828125,
"y": 2339.628173828125,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,61 @@
{
"info": {
"name": "木材",
"type": "collect",
"country": "蒙德",
"author": "½",
"version": "",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": -252.22467041015625,
"y": 2256.0646362304688,
"action": "",
"move_mode": "walk",
"type": "teleport"
},
{
"id": 2,
"x": -218.61431884765625,
"y": 2284.0081787109375,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 3,
"x": -164.74041748046875,
"y": 2277.0416870117188,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 4,
"x": -122.7860107421875,
"y": 2247.2214965820312,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 5,
"x": -113.906005859375,
"y": 2256.1220703125,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 6,
"x": -32.19244384765625,
"y": 2237.5419921875,
"action": "stop_flying",
"move_mode": "fly",
"type": "target"
}
]
}

View File

@@ -0,0 +1,37 @@
{
"info": {
"name": "木材",
"type": "collect",
"country": "蒙德",
"author": "½",
"version": "",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": -749.86376953125,
"y": 2262.6113891601562,
"action": "",
"move_mode": "walk",
"type": "teleport"
},
{
"id": 2,
"x": -788.388427734375,
"y": 2304.58642578125,
"action": "stop_flying",
"move_mode": "fly",
"type": "path"
},
{
"id": 3,
"x": -788.2122802734375,
"y": 2303.1715698242188,
"action": "",
"move_mode": "walk",
"type": "target"
}
]
}

View File

@@ -0,0 +1,44 @@
{
"info": {
"name": "枫木9个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": -3812.6591796875,
"y": -2546.5625
},
{
"id": 2,
"x": -3795.1669921875,
"y": -2617.5458984375,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": -3766.388671875,
"y": -2601.5546875,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 4,
"x": -3759.7255859375,
"y": -2593.5146484375,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,68 @@
{
"info": {
"name": "柽木15个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 4096.009765625,
"y": -2025.96435546875
},
{
"id": 2,
"x": 4110.787109375,
"y": -2041.79638671875,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": 4126.13525390625,
"y": -2046.67822265625,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 4,
"x": 4148.607421875,
"y": -2041.6953125,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 5,
"x": 4204.21337890625,
"y": -2080.595703125,
"type": "path",
"move_mode": "fly",
"action": ""
},
{
"id": 6,
"x": 4216.78125,
"y": -2076.8701171875,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 8,
"x": 4215.2216796875,
"y": -2063.080078125,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,29 @@
{
"info": {
"name": "木材",
"type": "collect",
"country": "蒙德",
"author": "½",
"version": "",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": -1330.6689453125,
"y": 2563.420654296875,
"action": "",
"move_mode": "walk",
"type": "teleport"
},
{
"id": 2,
"x": -1344.431884765625,
"y": 2520.51025390625,
"action": "",
"move_mode": "walk",
"type": "target"
}
]
}

View File

@@ -0,0 +1,84 @@
{
"info": {
"name": "梦见木12个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": -4232.123046875,
"y": -3001.9501953125,
"type": "teleport",
"move_mode": "walk",
"action": ""
},
{
"id": 2,
"x": -4208.490234375,
"y": -2948.349609375,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": -4187.43359375,
"y": -2906.2412109375,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 4,
"x": -4131.2900390625,
"y": -2905.8564453125,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 5,
"x": -4043.876953125,
"y": -2950.7861328125,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 6,
"x": -3986.6220703125,
"y": -2952.34375,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 7,
"x": -3986.4638671875,
"y": -2967.8447265625,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 8,
"x": -3980.66796875,
"y": -2978.8486328125,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 9,
"x": -3999.20703125,
"y": -2977.005859375,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,44 @@
{
"info": {
"name": "椴木9个(悬铃木9个)",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 3383.2158203125,
"y": 2692.23779296875,
"type": "teleport",
"move_mode": "walk",
"action": ""
},
{
"id": 2,
"x": 3370.44482421875,
"y": 2702.470703125,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 4,
"x": 3239.8525390625,
"y": 2762.513916015625,
"type": "path",
"move_mode": "fly",
"action": "stop_flying"
},
{
"id": 5,
"x": 3251.6640625,
"y": 2763.403076171875,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,44 @@
{
"info": {
"name": "椴木9个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 4984.4248046875,
"y": 1699.8203125,
"action": "",
"move_mode": "walk",
"type": "teleport"
},
{
"id": 2,
"x": 4991.94873046875,
"y": 1734.0322265625,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 3,
"x": 4970.080078125,
"y": 1799.18310546875,
"action": "stop_flying",
"move_mode": "fly",
"type": "path"
},
{
"id": 4,
"x": 4975.736328125,
"y": 1809.29638671875,
"action": "",
"move_mode": "walk",
"type": "target"
}
]
}

View File

@@ -0,0 +1,44 @@
{
"info": {
"name": "灰灰楼木6个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 3,
"x": 8978.330078125,
"y": -1872.3369140625,
"type": "teleport",
"move_mode": "walk",
"action": ""
},
{
"id": 2,
"x": 8996.033203125,
"y": -1838.43505859375,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": 9008.49609375,
"y": -1791.96484375,
"type": "path",
"move_mode": "fly",
"action": "stop_flying"
},
{
"id": 4,
"x": 9009.5966796875,
"y": -1781.61328125,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,52 @@
{
"info": {
"name": "燃爆木15个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 9038.814453125,
"y": -2429.361328125,
"type": "teleport",
"move_mode": "walk",
"action": ""
},
{
"id": 2,
"x": 9037.24609375,
"y": -2454.447265625,
"type": "path",
"move_mode": "climb",
"action": ""
},
{
"id": 3,
"x": 9066.744140625,
"y": -2498.119140625,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 4,
"x": 9043.6044921875,
"y": -2501.2275390625,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 6,
"x": 9049.6533203125,
"y": -2514.849609375,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,36 @@
{
"info": {
"name": "燃爆木6个(白栗栎木6个)",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 7234.2099609375,
"y": -1433.29736328125,
"type": "teleport",
"move_mode": "walk",
"action": ""
},
{
"id": 2,
"x": 7208.298828125,
"y": -1426.84521484375,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": 7201.96875,
"y": -1436.07080078125,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,44 @@
{
"info": {
"name": "白梣木15个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 4689.3056640625,
"y": 2429.53515625,
"action": "",
"move_mode": "walk",
"type": "teleport"
},
{
"id": 2,
"x": 4715.36328125,
"y": 2458.4765625,
"action": "stop_flying",
"move_mode": "fly",
"type": "path"
},
{
"id": 3,
"x": 4726.62255859375,
"y": 2483.402587890625,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 4,
"x": 4729.75634765625,
"y": 2478.175537109375,
"action": "",
"move_mode": "walk",
"type": "target"
}
]
}

View File

@@ -0,0 +1,36 @@
{
"info": {
"name": "竹节",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 840.02734375,
"y": 1532.52197265625
},
{
"id": 2,
"x": 814.2734375,
"y": 1515.693359375,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": 809.29296875,
"y": 1514.77685546875,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,36 @@
{
"info": {
"name": "萃华木6个(垂香木3个)",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 2,
"x": -1120.9453125,
"y": 2190.656494140625,
"type": "teleport",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": -1153.9638671875,
"y": 2190.605712890625,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 4,
"x": -1156.3017578125,
"y": 2177.168212890625,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,60 @@
{
"info": {
"name": "证悟木15个(业果木6个)",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 3135.5771484375,
"y": -1079.73974609375,
"action": "",
"move_mode": "walk",
"type": "teleport"
},
{
"id": 2,
"x": 3153.193359375,
"y": -1082.57275390625,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 3,
"x": 3151.31201171875,
"y": -1104.5791015625,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 4,
"x": 3164.52392578125,
"y": -1125.92822265625,
"action": "",
"move_mode": "walk",
"type": "path"
},
{
"id": 5,
"x": 3150.6611328125,
"y": -1130.53662109375,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 6,
"x": 3158.96923828125,
"y": -1139.24755859375,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,36 @@
{
"info": {
"name": "香柏木27个",
"type": "collect",
"author": "愚溪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 3923.1171875,
"y": 4233.8603515625
},
{
"id": 2,
"x": 3911.77099609375,
"y": 4212.8466796875,
"type": "path",
"move_mode": "walk",
"action": ""
},
{
"id": 3,
"x": 3921.013671875,
"y": 4196.92578125,
"type": "target",
"move_mode": "walk",
"action": ""
}
]
}

View File

@@ -0,0 +1,279 @@
{
"macroEvents": [
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 0.0000
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 11127.9408
},
{
"type": 0,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 13119.9760
},
{
"type": 1,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 17400.0108
},
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 18504.0088
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 27312.0632
},
{
"type": 0,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 28128.0973
},
{
"type": 1,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 29240.0663
},
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 29912.0759
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 31736.1294
},
{
"type": 0,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 31904.0885
},
{
"type": 1,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 32144.0983
},
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 32864.1012
},
{
"type": 0,
"keyCode": 32,
"mouseX": 0,
"mouseY": 0,
"time": 33288.1407
},
{
"type": 1,
"keyCode": 32,
"mouseX": 0,
"mouseY": 0,
"time": 33432.1196
},
{
"type": 0,
"keyCode": 32,
"mouseX": 0,
"mouseY": 0,
"time": 33616.1026
},
{
"type": 1,
"keyCode": 32,
"mouseX": 0,
"mouseY": 0,
"time": 33736.1158
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 40600.1535
},
{
"type": 0,
"keyCode": 84,
"mouseX": 0,
"mouseY": 0,
"time": 43000.0000
},
{
"type": 1,
"keyCode": 84,
"mouseX": 0,
"mouseY": 0,
"time": 43071.8735
},
{
"type": 0,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 46591.9060
},
{
"type": 1,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 47047.9336
},
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 47615.9255
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 50271.9249
},
{
"type": 0,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 51143.9303
},
{
"type": 1,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 51839.9301
},
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 52239.9472
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 53279.9313
},
{
"type": 0,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 64328.0135
},
{
"type": 1,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 67096.0170
},
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 67448.0209
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 75544.7151
},
{
"type": 0,
"keyCode": 81,
"mouseX": 0,
"mouseY": 0,
"time": 77153.2237
},
{
"type": 1,
"keyCode": 81,
"mouseX": 0,
"mouseY": 0,
"time": 78120.1226
},
{
"type": 0,
"keyCode": 68,
"mouseX": 0,
"mouseY": 0,
"time": 80768.1293
},
{
"type": 1,
"keyCode": 68,
"mouseX": 0,
"mouseY": 0,
"time": 81536.1748
},
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 82560.1130
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 85536.1748
}
],
"info": {
"name": "",
"description": "",
"x": 0,
"y": 0,
"width": 1920,
"height": 1080,
"recordDpi": 1
}
}

View File

@@ -0,0 +1,69 @@
{
"macroEvents": [
{
"type": 0,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 1619.1371
},
{
"type": 1,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 4843.0322
},
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 5555.1643
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 8195.0398
},
{
"type": 0,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 8939.0689
},
{
"type": 1,
"keyCode": 65,
"mouseX": 0,
"mouseY": 0,
"time": 10259.1104
},
{
"type": 0,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 11155.0806
},
{
"type": 1,
"keyCode": 87,
"mouseX": 0,
"mouseY": 0,
"time": 11655.0806
}
],
"info": {
"name": "",
"description": "",
"x": 0,
"y": 0,
"width": 1920,
"height": 1080,
"recordDpi": 1
}
}

View File

@@ -0,0 +1,172 @@
(async function () {
const defaultExitDelay = 10000;
const defaultLoadingDelay = 13000;
const seen = new Set();
function validateAndSetDefaults(exitDelay, loadingDelay) {
if (isNaN(exitDelay) || exitDelay <= 0) {
log.warn("你没有设置退出延迟,将使用默认值");
exitDelay = defaultExitDelay;
}
if (isNaN(loadingDelay) || loadingDelay <= 0) {
log.warn("你没有设置加载延迟,将使用默认值");
loadingDelay = defaultLoadingDelay;
}
return { exitDelay, loadingDelay };
}
async function runGameActionsMultipleTimes(times, locationName) {
for (let i = 0; i < times; i++) {
await sleep(1000);
keyPress("ESCAPE");
await sleep(1000);
click(50, 1030);
await sleep(1000);
click(1000, 750);
await sleep(validatedExitDelay);
click(1000, 550);
await sleep(validatedLoadingDelay);
keyPress("z");
log.info(`${locationName} 循环次数:${i + 1}/${times}`);
}
}
async function resetMap() {
log.info("重置地图大小...");
await sleep(1000);
keyPress("M");
await sleep(1000);
click(1840, 1010);
await sleep(1000);
click(1450, 460);
await sleep(1000);
click(1840, 1010);
await sleep(1000);
click(1450, 140);
await sleep(1000);
keyPress("M");
log.info("重置地图大小完成");
}
async function KeyMouse(locationNameEx) {
log.info(`前往 ${locationNameEx}`);
let tpPath = `assets/AutoPath/tp/${locationNameEx}tp.json`;
let filePath = `assets/KeyMouse/${locationNameEx}.json`;
try {
await pathingScript.runFile(tpPath);
await sleep(1000);
await keyMouseScript.runFile(filePath);
} catch (error) {
log.error(`执行 ${locationNameEx} 脚本时发生错误: ${error}`);
}
await sleep(1000);
}
async function woodcutting(locationName) {
log.info(`砍伐 ${locationName}`);
if (!map[locationName]) {
log.info(`未找到 ${locationName} 对应的木材`);
return;
}
const { description, available, times } = map[locationName];
if (description === 'NULL' || !description) {
log.info(`${locationName} 暂不支持`);
return;
}
if (Array.from(seen).some(item => item.includes(locationName))) {
log.info(`${locationName} 已经砍伐过,将执行下一个`);
return;
}
log.info(`前往 ${description}`);
await sleep(1000);
try {
if (locationName === "炬木" || locationName === "桃椰子木") {
await KeyMouse(description);
} else {
const filePath = `assets/AutoPath/${description}.json`;
await pathingScript.runFile(filePath);
}
await sleep(1000);
if (!available) {
await runGameActionsMultipleTimes(times, description);
} else {
await dispatcher.runTask(new SoloTask("AutoWood"));
}
seen.add(map[locationName].description);
log.info(`${locationName} 伐木完成,将执行下一个`);
log.info(`已运行木材: ${[...seen].join(", ")}`);
} catch (error) {
log.error(`在砍伐 ${locationName} 时发生错误: ${error}`);
}
}
// Set game environment settings
setGameMetrics(1920, 1080, 1);
const map = {
'桦木': { description: '桦木15个', available: true, times: 134 },
'萃华木': { description: '萃华木6个(垂香木3个)', available: true, times: 334 },
'松木': { description: '松木24个', available: true, times: 84 },
'却砂木': { description: '却砂木12个', available: true, times: 167 },
'竹节': { description: '竹节30个', available: true, times: 67 },
'垂香木': { description: '垂香木15个', available: true, times: 134 },
'杉木': { description: '杉木12个', available: true, times: 167 },
'梦见木': { description: '梦见木12个', available: true, times: 167 },
'枫木': { description: '枫木9个', available: true, times: 223 },
'孔雀木': { description: '御伽木9个(孔雀木6个)', available: false, times: 334 },//利用手动重置仇恨
'御伽木': { description: '御伽木9个(孔雀木6个)', available: false, times: 334 },//利用手动重置仇恨
'辉木': { description: '业果木15个(辉木15个)', available: true, times: 134 },
'业果木': { description: '业果木15个(辉木15个)', available: true, times: 134 },
'证悟木': { description: '证悟木15个(业果木6个)', available: true, times: 334 },
'刺葵木': { description: '刺葵木6个', available: true, times: 334 },
'柽木': { description: '柽木15个', available: false, times: 134 },
'悬铃木': { description: '悬铃木18个', available: true, times: 112 },
'椴木': { description: '椴木9个', available: true, times: 223 },
'白梣木': { description: '白梣木15个', available: true, times: 134 },
'香柏木': { description: '香柏木27个', available: true, times: 75 },
'炬木': { description: '炬木15个', available: true, times: 134 },
'白栗栎木': { description: '燃爆木6个(白栗栎木6个)', available: false, times: 334 },
'灰灰楼林木': { description: '灰灰楼木6个', available: false, times: 334 },
'燃爆木': { description: '燃爆木15个', available: false, times: 134 },
'桃椰子木': { description: '桃椰子木12个', available: false, times: 167 }
};
let exitdelay = Number(settings.exitdelay);
let loadingdelay = Number(settings.loadingdelay);
const { exitDelay: validatedExitDelay, loadingDelay: validatedLoadingDelay } = validateAndSetDefaults(exitdelay, loadingdelay);
const messages = [
'确保装备有[王树瑞佑]',
'确保使用小道具快捷键为Z键',
'确保开启了BGI独立任务中自动伐木的“启用OCR伐木数量限制”',
'若要运行炬木或桃椰子木:',
'运行时是琳妮特前台且拥有双风共鸣',
'元素共鸣需要四个角色组队触发,仅两个风系角色无效',
'不要带其他有移速加成的角色'
];
for (let message of messages) {
log.info(message);
await sleep(1000);
}
log.info('自动伐木开始...');
log.info(`退出延迟: ${validatedExitDelay}毫秒, 加载延迟: ${validatedLoadingDelay}毫秒`);
let woodsArray = settings.woods.split(" ");
await resetMap();
for (const wood of woodsArray) {
if (wood.trim()) {
await woodcutting(wood);
} else {
log.info('请在自定义选项输入木材名,用空格隔开');
}
}
})();

View File

@@ -0,0 +1,18 @@
{
"manifest_version": 1,
"name": "自动伐木",
"version": "1.0",
"description": "前往并自动伐木",
"authors": [
{
"name": "愚溪",
"links": "https://github.com/Kupder"
},
{
"name": "½",
"links": "https://github.com/Traveler07"
}
],
"settings_ui": "settings.json",
"main": "main.js"
}

View File

@@ -0,0 +1,138 @@
[
{
"name": "woods",
"type": "input-text",
"label": "木材种类:使用空格分隔"
},
{
"name": "exitdelay",
"type": "input-text",
"label": "退出延迟(毫秒)(选填)"
},
{
"name": "loadingdelay",
"type": "input-text",
"label": "加载延迟(毫秒)(选填)"
}
// {
// "name": "桦木",
// "type": "checkbox",
// "label": "桦木"
// },
// {
// "name": "萃华木",
// "type": "checkbox",
// "label": "萃华木"
// },
// {
// "name": "松木",
// "type": "checkbox",
// "label": "松木"
// },
// {
// "name": "却砂木",
// "type": "checkbox",
// "label": "却砂木"
// },
// {
// "name": "竹节",
// "type": "checkbox",
// "label": "竹节"
// },
// {
// "name": "垂香木",
// "type": "checkbox",
// "label": "垂香木"
// },
// {
// "name": "杉木",
// "type": "checkbox",
// "label": "杉木"
// },
// {
// "name": "梦见木",
// "type": "checkbox",
// "label": "梦见木"
// },
// {
// "name": "枫木",
// "type": "checkbox",
// "label": "枫木"
// },
// {
// "name": "孔雀木",
// "type": "checkbox",
// "label": "孔雀木"
// },
// {
// "name": "御伽木",
// "type": "checkbox",
// "label": "御伽木"
// },
// {
// "name": "辉木",
// "type": "checkbox",
// "label": "辉木"
// },
// {
// "name": "业果木",
// "type": "checkbox",
// "label": "业果木"
// },
// {
// "name": "证悟木",
// "type": "checkbox",
// "label": "证悟木"
// },
// {
// "name": "刺葵木",
// "type": "checkbox",
// "label": "刺葵木"
// },
// {
// "name": "柽木",
// "type": "checkbox",
// "label": "柽木"
// },
// {
// "name": "悬铃木",
// "type": "checkbox",
// "label": "悬铃木"
// },
// {
// "name": "椴木",
// "type": "checkbox",
// "label": "椴木"
// },
// {
// "name": "白梣木",
// "type": "checkbox",
// "label": "白梣木"
// },
// {
// "name": "香柏木",
// "type": "checkbox",
// "label": "香柏木"
// },
// {
// "name": "炬木",
// "type": "checkbox",
// "label": "炬木"
// },
// {
// "name": "白栗栎木",
// "type": "checkbox",
// "label": "白栗栎木"
// },
// {
// "name": "灰灰楼林木",
// "type": "checkbox",
// "label": "灰灰楼林木"
// },
// {
// "name": "燃爆木",
// "type": "checkbox",
// "label": "燃爆木"
// }
]

View File

@@ -0,0 +1,4 @@
全部木材:
桦木 萃华木 松木 却砂木 竹节 垂香木 杉木 梦见木 枫木 孔雀木 御伽木 辉木 业果木 证悟木 刺葵木 柽木 悬铃木 椴木 白梣木 香柏木 炬木 白栗栎木 灰灰楼林木 燃爆木 桃椰子木
涉及炬木、桃椰子木的队伍要求:双风共鸣且琳妮特前台

View File

@@ -0,0 +1,21 @@
(async function () {
setGameMetrics(1920, 1080, 2); // 设置游戏窗口大小和DPI
await sleep(3000);
keyPress("F");
await sleep(5000);
click(1370, 655);
await sleep(3000);
click(1370, 655);
await sleep(3000);
click(680,300);
await sleep(3000);
click(1760, 1020);
await sleep(3000);
click(1160, 780);
await sleep(3000);
click(1160, 780);
await sleep(3000);
click(1865, 44);
await sleep(3000);
log.info("已领取洞天宝钱和好感");
})();

View File

@@ -0,0 +1,13 @@
{
"manifest_version": 1,
"name": "领取洞天百宝须臾树脂,只领取须臾树脂,前面是领取洞天宝钱和好感",
"version": "1.0",
"description": "领取洞天须臾树脂",
"authors": [
{
"name": "风埠",
"links": "https://github.com/jhkif"
}
],
"main": "main.js"
}

View File

@@ -0,0 +1,21 @@
(async function () {
setGameMetrics(1920, 1080, 2); // 设置游戏窗口大小和DPI
keyPress("F");
await sleep(1000);
keyPress("F");
await sleep(1500);
click(960, 540);
await sleep(1000);
click(1750, 1010);
await sleep(5000);
click(975, 900);
await sleep(1000);
click(1356, 804); //再见
log.info("点击再见1");
await sleep(2000);
click(1356, 804); //再见
log.info("点击再见2");
keyPress("Escape");
log.info("已完成合成浓缩树脂");
})();

View File

@@ -0,0 +1,12 @@
{
"manifest_version": 1,
"name": "合成浓缩树脂",
"version": "1.1",
"description": "用于合成浓缩树脂",
"authors": [
{
"name": "鹤望兰"
}
],
"main": "main.js"
}

View File

@@ -0,0 +1,100 @@
{
"dongsheng": {
"npc_name": "东升",
"location_name": "东升",
"item_count": 12,
"spik_count": 4,
"daytimeOnly": 0
},
"laosun": {
"npc_name": "老孙",
"location_name": "老孙",
"item_count": 3,
"spik_count": 5,
"daytimeOnly": 1
},
"laogao": {
"npc_name": "老高",
"location_name": "老高",
"item_count": 3,
"spik_count": 5,
"daytimeOnly": 1
},
"maoshifu": {
"npc_name": "香菱她爹",
"location_name": "卯师父",
"item_count": 16,
"spik_count": 5,
"daytimeOnly": 0
},
"shala": {
"npc_name": "莎拉",
"location_name": "莎拉",
"item_count": 14,
"spik_count": 5,
"daytimeOnly": 0
},
"buluqi": {
"npc_name": "布兰琪",
"location_name": "布兰琪",
"item_count": 8,
"spik_count": 5,
"daytimeOnly": 0
},
"kui": {
"npc_name": "葵",
"location_name": "葵",
"item_count": 12,
"spik_count": 4,
"daytimeOnly": 0
},
"zckbw": {
"npc_name": "志村勘兵卫",
"location_name": "志村勘兵卫",
"item_count": 12,
"spik_count": 4,
"daytimeOnly": 0
},
"pomu": {
"npc_name": "珀姆",
"location_name": "珀姆",
"item_count": 4,
"spik_count": 4,
"daytimeOnly": 0
},
"hamawei": {
"npc_name": "哈马维",
"location_name": "哈马维",
"item_count": 13,
"spik_count": 5,
"daytimeOnly": 0
},
"buteluosi": {
"npc_name": "布特罗斯",
"location_name": "布特罗斯",
"item_count": 3,
"spik_count": 4,
"daytimeOnly": 0
},
"azhalai": {
"npc_name": "阿扎莱",
"location_name": "阿扎莱",
"item_count": 10,
"spik_count": 4,
"daytimeOnly": 2
},
"alue": {
"npc_name": "阿鲁埃",
"location_name": "阿鲁埃",
"item_count": 4,
"spik_count": 4,
"daytimeOnly": 0
},
"buxike": {
"npc_name": "布希柯",
"location_name": "布希柯",
"item_count": 14,
"spik_count": 4,
"daytimeOnly": 0
}
}

View File

@@ -0,0 +1,30 @@
{
"info": {
"name": "ds",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 267.9560546875,
"y": -665.14794921875,
"action_params": ""
},
{
"id": 2,
"x": 257.146484375,
"y": -682.4951171875,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,39 @@
{
"info": {
"name": "卯师父",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 267.9580078125,
"y": -665.1201171875,
"action_params": ""
},
{
"id": 2,
"x": 226.04296875,
"y": -660.0048828125,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 3,
"x": 227.4072265625,
"y": -668.20751953125,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,75 @@
{
"info": {
"name": "哈马维",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 2786.9755859375,
"y": -503.09130859375,
"action_params": ""
},
{
"id": 2,
"x": 2788.0830078125,
"y": -488.28173828125,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 3,
"x": 2771.4755859375,
"y": -476.07421875,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 4,
"x": 2763.0478515625,
"y": -453.83349609375,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 5,
"x": 2760.521484375,
"y": -439.513671875,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 6,
"x": 2778.63671875,
"y": -435.7626953125,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 7,
"x": 2778.24609375,
"y": -430.80810546875,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,121 @@
{
"info": {
"name": "小畑",
"type": "collect",
"author": "听雨♪",
"version": "",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": -3812.7041015625,
"y": -2546.6064453125,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "teleport"
},
{
"id": 2,
"x": -3811.9248046875,
"y": -2567.5771484375,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "path"
},
{
"id": 3,
"x": -3727.125996598583,
"y": -2570.25,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "path"
},
{
"id": 4,
"x": -3720.250047457075,
"y": -2569.625
},
{
"id": 5,
"x": -3713.6250949141504,
"y": -2568.5
},
{
"id": 6,
"x": -3706.7501423712256,
"y": -2567.875
},
{
"id": 7,
"x": -3700.625284742451,
"y": -2566.875
},
{
"id": 8,
"x": -3693.2480542599114,
"y": -2564.875
},
{
"id": 9,
"x": -3684.874810171699,
"y": -2562.375
},
{
"id": 10,
"x": -3680.4998576287744,
"y": -2561.25
},
{
"id": 11,
"x": -3677.6251423712256,
"y": -2558.125
},
{
"id": 12,
"x": -3675.5,
"y": -2558.25,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "path"
},
{
"id": 13,
"x": -3674.124952542925,
"y": -2560.125
},
{
"id": 14,
"x": -3672.624952542925,
"y": -2564,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "path"
},
{
"id": 15,
"x": -3670.2495728863214,
"y": -2567.75
},
{
"id": 16,
"x": -3666.0014237122596,
"y": -2566
},
{
"id": 17,
"x": -3667.37571185613,
"y": -2561.125,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "target"
}
]
}

View File

@@ -0,0 +1,39 @@
{
"info": {
"name": "布兰琪",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": -867.720703125,
"y": 2281.377685546875,
"action_params": ""
},
{
"id": 2,
"x": -893.705078125,
"y": 2258.10791015625,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 3,
"x": -895.7216796875,
"y": 2264.712890625,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,57 @@
{
"info": {
"name": "布希柯",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 4508.96875,
"y": 3630.584228515625,
"action_params": ""
},
{
"id": 2,
"x": 4514.79296875,
"y": 3605.441650390625,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 3,
"x": 4497.20556640625,
"y": 3586.030029296875,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 4,
"x": 4475.7421875,
"y": 3559.308837890625,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 5,
"x": 4470.52685546875,
"y": 3560.251708984375,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,30 @@
{
"info": {
"name": "布特罗斯",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 2679.8427734375,
"y": -1935.005859375,
"action_params": ""
},
{
"id": 2,
"x": 2659.951171875,
"y": -1928.943359375,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,39 @@
{
"info": {
"name": "志村勘兵卫",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": -4402.5703125,
"y": -3053.0234375,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "teleport"
},
{
"id": 2,
"x": -4418.000213556839,
"y": -3083.5625,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "path"
},
{
"id": 3,
"x": -4424.500332199528,
"y": -3080.375,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "target"
}
]
}

View File

@@ -0,0 +1,39 @@
{
"info": {
"name": "珀姆",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 2786.958984375,
"y": -503.0859375,
"action_params": ""
},
{
"id": 2,
"x": 2809.5712890625,
"y": -514.7138671875,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 3,
"x": 2811.244140625,
"y": -509.603515625,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,102 @@
{
"info": {
"name": "买鱼-1",
"type": "buy",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 263.5,
"y": -672.5,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "teleport"
},
{
"id": 2,
"x": 247.5,
"y": -664.5,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 3,
"x": 214.5,
"y": -661.5,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 4,
"x": 192.5,
"y": -682,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 5,
"x": 162.5,
"y": -681,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 6,
"x": 157.5000949141504,
"y": -630.375,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 7,
"x": 139.99022999999943,
"y": -608.2969000000003,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 8,
"x": 162.32030999999915,
"y": -592.3183600000002,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 9,
"x": 167.29102000000057,
"y": -599.75684,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 10,
"x": 163.2538999999997,
"y": -603.9433600000002,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,93 @@
{
"info": {
"name": "牢高",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": 263.5,
"y": -672.5,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "teleport"
},
{
"id": 2,
"x": 247.5,
"y": -664.5,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 3,
"x": 214.5,
"y": -661.5,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 4,
"x": 192.5,
"y": -682,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 5,
"x": 162.5,
"y": -681,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 6,
"x": 157.5000949141504,
"y": -630.375,
"action": "",
"move_mode": "run",
"action_params": "",
"type": "path"
},
{
"id": 7,
"x": 139.99022999999943,
"y": -608.2969000000003,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "path"
},
{
"id": 8,
"x": 162.32030999999915,
"y": -592.3183600000002,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "path"
},
{
"id": 9,
"x": 158.751953125,
"y": -586.27294921875,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,39 @@
{
"info": {
"name": "莎拉",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": -867.7138671875,
"y": 2281.37646484375,
"action_params": ""
},
{
"id": 2,
"x": -891.755859375,
"y": 2255.769775390625,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 3,
"x": -888.6591796875,
"y": 2240.89892578125,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,30 @@
{
"info": {
"name": "葵",
"type": "collect",
"author": "听雨♪",
"version": "1.1",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"x": -4402.5390625,
"y": -3053.0341796875,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "teleport"
},
{
"id": 2,
"x": -4402.687357628773,
"y": -3072.3125,
"action": "",
"move_mode": "walk",
"action_params": "",
"type": "target"
}
]
}

View File

@@ -0,0 +1,66 @@
{
"info": {
"name": "阿扎莱",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 4096.03125,
"y": -2025.9755859375,
"action_params": ""
},
{
"id": 2,
"x": 4085.078125,
"y": -2018.173828125,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 3,
"x": 4076.845703125,
"y": -1995.6533203125,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 4,
"x": 4100.158203125,
"y": -1986.6904296875,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 5,
"x": 4100.736328125,
"y": -1979.58837890625,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
},
{
"id": 6,
"x": 4091.5751953125,
"y": -1980.16015625,
"type": "path",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

View File

@@ -0,0 +1,57 @@
{
"info": {
"name": "ale",
"type": "collect",
"author": "听雨♪",
"version": "1.0",
"description": "",
"bgi_version": "0.35.1"
},
"positions": [
{
"id": 1,
"action": "",
"move_mode": "walk",
"type": "teleport",
"x": 4645.490234375,
"y": 3467.8603515625,
"action_params": ""
},
{
"id": 2,
"x": 4635.865234375,
"y": 3475.1591796875,
"type": "path",
"move_mode": "fly",
"action": "",
"action_params": ""
},
{
"id": 3,
"x": 4639.42724609375,
"y": 3505.39697265625,
"type": "path",
"move_mode": "fly",
"action": "",
"action_params": ""
},
{
"id": 4,
"x": 4622.95654296875,
"y": 3509.7421875,
"type": "path",
"move_mode": "fly",
"action": "stop_flying",
"action_params": ""
},
{
"id": 5,
"x": 4602.0556640625,
"y": 3515.504150390625,
"type": "target",
"move_mode": "walk",
"action": "",
"action_params": ""
}
]
}

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