diff --git a/repo/js/DeerGameMeat/README.md b/repo/js/DeerGameMeat/README.md new file mode 100644 index 000000000..27d5a60e1 --- /dev/null +++ b/repo/js/DeerGameMeat/README.md @@ -0,0 +1,42 @@ +# 🦌菈乌玛兽肉采集 + +## 📖 脚本说明 + +本脚本可利用菈乌玛能够吸引挪德卡莱小动物,并让獾给自己挖肉的特性,榨干挪德卡莱生态的每一份养料。 +本脚本与纯地图追踪的版本的主要区别为自动根据天气,等待雨天结束,并能够直接判断你队伍里是否有菈乌玛🦌。 +兽肉资源每天的刷新时间为击杀后12小时,如有需要可自行规划采集 + +## 🚀 运行效率 + +- **理论收获**:11分钟可收获最多83个兽肉 +- **实际收获**:常态下拾取约65个兽肉 + +## ⚠️ 运行须知(必看) + +1. **角色要求**:运行前请确保队伍中有「菈乌玛」与「枫原万叶」,并在`调度器`设置中将`菈乌玛`设置为行走位 + +![设置](assets/settings.png) + +2. **路线冲突**:运行前请确保今天没有跑过`虹滴晶`路线和`霜夜灵嗣`路线,这些路线与兽肉路线存在重叠 +3. **传送点解锁**:苔古荒原中间的传送点处有一个需要寻找10个机器人才能解锁的飞高高装置,请解锁它 +4. **游戏窗口**:请确保游戏窗口为1920x1080分辨率以减少问题发生的概率(2560暂时没发现问题) + +## ⚙️ 设置选项 + +### 启用潮湿状态检测 +- **功能**:自动检测游戏中的潮湿状态(下雨等) +- **作用**:潮湿状态下小动物会消失,脚本会自动调整时间到非潮湿状态 +- **建议**:保持启用状态 + +### 最大等待次数 +- **功能**:设置潮湿状态检测的最大尝试次数 +- **默认值**:5次 + +### 运行高危路线 +- **功能**:是否运行包含霜夜灵嗣的容易暴毙路线 +- **说明**:高危路线物资丰厚,可选择性关闭 +- **默认**:启用 + +### 队伍名称 +- **功能**:设置要切换到的队伍名称 +- **说明**:脚本开始时会自动切换到指定队伍,务必关闭`调度器`设置中的`切换队伍` diff --git a/repo/js/DeerGameMeat/assets/damp.png b/repo/js/DeerGameMeat/assets/damp.png new file mode 100644 index 000000000..d8c6c01f6 Binary files /dev/null and b/repo/js/DeerGameMeat/assets/damp.png differ diff --git a/repo/js/DeerGameMeat/assets/settings.png b/repo/js/DeerGameMeat/assets/settings.png new file mode 100644 index 000000000..73152acf7 Binary files /dev/null and b/repo/js/DeerGameMeat/assets/settings.png differ diff --git a/repo/js/DeerGameMeat/main.js b/repo/js/DeerGameMeat/main.js new file mode 100644 index 000000000..4c1832fd3 --- /dev/null +++ b/repo/js/DeerGameMeat/main.js @@ -0,0 +1,378 @@ +(async function () { + setGameMetrics(1920, 1080, 1); + + // 读取用户设置 + const enableDampDetection = settings.enableDampDetection === true; // 默认启用 + const maxWaitAttempts = parseInt(settings.maxWaitAttempts) || 5; // 转换数字输入 + const enableHighRiskRoutes = settings.enableHighRiskRoutes === true; // 默认启用高危路线 + const partyName = settings.partyName || ""; // 队伍名称 + + // 检测当前队伍角色 + function checkRequiredCharacters() { + const avatars = getAvatars(); + let hasLayla = false; + let hasKazuha = false; + + if (avatars && avatars.length > 1) { + for (let i = 0; i < avatars.length; i++) { + if (avatars[i] === "菈乌玛") hasLayla = true; + if (avatars[i] === "枫原万叶") hasKazuha = true; + } + + if (!hasLayla || !hasKazuha) { + log.error(`队伍角色检查失败 - 菈乌玛:${hasLayla ? '✓' : '✗'} 枫原万叶:${hasKazuha ? '✓' : '✗'}`); + return false; + } + return true; + } + return false; + } + + // 高危路线数组(目前只有07路线) + const highRiskRoutes = ["07"]; + + log.info(`兽肉路线脚本启动 - 潮湿检测:${enableDampDetection ? '启用' : '禁用'} 高危路线:${enableHighRiskRoutes ? '启用' : '禁用'} 队伍:${partyName || '未设置'}`); + + // 切换队伍函数 + async function switchPartyIfNeeded(partyName) { + if (!partyName) { + await genshin.returnMainUi(); + return; + } + try { + partyName = partyName.trim(); + log.info("切换队伍: " + partyName); + if (!await genshin.switchParty(partyName)) { + log.info("切换失败,前往七天神像重试"); + await genshin.tpToStatueOfTheSeven(); + await genshin.switchParty(partyName); + } + } catch { + log.error("队伍切换失败"); + notification.error(`队伍切换失败`); + await genshin.returnMainUi(); + } + } + + // 读取文件夹中的所有文件 + async function readFolder(folderPath, onlyJson) { + const folderStack = [folderPath]; + const files = []; + + while (folderStack.length > 0) { + const currentPath = folderStack.pop(); + + // 读取当前路径下的所有文件和子文件夹路径 + const filesInSubFolder = file.ReadPathSync(currentPath); + + // 临时数组,用于存储子文件夹路径 + const subFolders = []; + for (const filePath of filesInSubFolder) { + if (file.IsFolder(filePath)) { + // 如果是文件夹,先存储到临时数组中 + subFolders.push(filePath); + } else { + if (filePath.endsWith(".js")) { + //跳过js结尾的文件 + continue; + } + // 如果是文件,根据 onlyJson 判断是否存储 + if (onlyJson) { + if (filePath.endsWith(".json")) { + const fileName = filePath.split('\\').pop(); // 提取文件名 + const folderPathArray = filePath.split('\\').slice(0, -1); // 提取文件夹路径数组 + files.push({ + fullPath: filePath, + fileName: fileName, + folderPathArray: folderPathArray + }); + } + } else { + const fileName = filePath.split('\\').pop(); // 提取文件名 + const folderPathArray = filePath.split('\\').slice(0, -1); // 提取文件夹路径数组 + files.push({ + fullPath: filePath, + fileName: fileName, + folderPathArray: folderPathArray + }); + } + } + } + + // 将子文件夹路径添加到堆栈中 + for (let i = subFolders.length - 1; i >= 0; i--) { + folderStack.push(subFolders[i]); + } + } + + return files; + } + + // 动态获取兽肉路线文件 + async function getMeatRoutes() { + try { + // 使用与锄地一条龙相同的方式读取路径文件 + const pathsDir = "paths"; + const allRoutes = []; + const routeOptions = []; + + // 读取路径文件夹中的所有文件 + const pathings = await readFolder(pathsDir, true); + + for (const pathing of pathings) { + const fullPath = pathing.fullPath; + const fileName = pathing.fileName; + + allRoutes.push(fullPath); + + // 提取路线ID和名称用于选项 + const routeId = fileName.match(/^(\d+)/)?.[1]; + if (routeId) { + const routeName = fileName.replace('.json', ''); + routeOptions.push({ + value: routeId, + label: routeName + }); + } + } + + return allRoutes; + } catch (err) { + log.error("获取路线文件时出错:", err); + return []; + } + } + + // 根据设置选择要运行的路线 + const allRoutes = await getMeatRoutes(); + let meatRoutes = allRoutes.filter(route => { + // 从路径中提取路线ID(假设文件名以数字开头) + const fileName = route.split('\\').pop(); // 使用反斜杠分割,因为Windows路径 + const routeId = fileName.match(/^(\d+)/)?.[1]; + + if (!routeId) return false; + + // 如果是高危路线,需要检查是否启用高危路线 + if (highRiskRoutes.includes(routeId)) { + return enableHighRiskRoutes; + } + + // 非高危路线默认运行 + return true; + }); + + // 检查是否找到路线文件 + if (meatRoutes.length === 0) { + log.error("未找到任何路线文件!请确保paths目录下存在路线文件。"); + return; + } + + log.info(`将运行 ${meatRoutes.length} 条路线`); + + // 检测潮湿状态 + async function checkDampStatus() { + try { + // 读取模板图像 + const templateImage = file.ReadImageMatSync("assets/damp.png"); + if (!templateImage) { + log.warn("无法读取潮湿状态模板图像"); + return false; + } + + // 创建模板匹配对象 + const dampRo = RecognitionObject.TemplateMatch(templateImage, 700, 880, 260, 200); + dampRo.threshold = 0.8; + dampRo.InitTemplate(); + + const gameRegion = captureGameRegion(); + // 执行模板匹配 + const result = gameRegion.find(dampRo); + gameRegion.dispose(); + + return result.isExist(); + } catch (err) { + log.error("检测潮湿状态时出错:", err.message || err); + return false; + } + } + + // 设置游戏时间 + async function setTime(hour, minute) { + setGameMetrics(1920, 1080, 2); // 设置游戏窗口大小和DPI + try { + //拖动鼠标 + async function moveMouseSmoothly(x1, y1, x2, y2) { + const deltaX = x2 - x1; + const deltaY = y2 - y1; + const steps = Math.max(Math.abs(deltaX), Math.abs(deltaY)); + const stepX = deltaX / steps; + const stepY = deltaY / steps; + await moveMouseTo(x1, y1); + await leftButtonDown(); + for (let i = 1; i <= steps; i++) { + const newX = x1 + stepX * i; + const newY = y1 + stepY * i; + const validX = Math.round(newX); + const validY = Math.round(newY); + await moveMouseTo(validX, validY); + await sleep(10); + } + await leftButtonUp(); + } + //设定时间 + async function settime(time) { + const centerX = 1441; + const centerY = 501; + const radius = 100; + let angle; + angle = (90 + time * 15) % 360; + angle = angle >= 0 ? angle : 360 + angle; + const angle1 = (angle + 90) % 360; + const angle2 = (angle + 180) % 360; + const angle3 = (angle + 270) % 360; + const radians = angle * (Math.PI / 180); + const radians1 = angle1 * (Math.PI / 180); + const radians2 = angle2 * (Math.PI / 180); + const radians3 = angle3 * (Math.PI / 180); + const x = centerX + radius * Math.cos(radians); + const y = centerY + radius * Math.sin(radians); + const x1 = centerX + radius * Math.cos(radians1); + const y1 = centerY + radius * Math.sin(radians1); + const x2 = centerX + radius * Math.cos(radians2); + const y2 = centerY + radius * Math.sin(radians2); + const x3 = centerX + radius * Math.cos(radians3); + const y3 = centerY + radius * Math.sin(radians3); + + // 输出最终的坐标 + await sleep(2000); + await moveMouseSmoothly(centerX,centerY, x1,y1); + await sleep(2000); + await moveMouseSmoothly(centerX,centerY, x2,y2); + await sleep(2000); + await moveMouseSmoothly(centerX,centerY, x3,y3); + await sleep(2000); + await moveMouseSmoothly(centerX,centerY, x,y); + } + //设置时间 + log.info('设置时间到6点'); + await sleep(1000) + await keyPress("Escape"); + await sleep(1000); + await click(50,700); + await sleep(2000); + await settime(6) + await sleep(3000); + await click(1500,1000);//确认 + await sleep(20000); + await keyPress("Escape"); + await sleep(2000); + await keyPress("Escape"); + await sleep(2000); + } finally { + // 恢复为脚本既定基准 + setGameMetrics(1920, 1080, 1); + } + } + + // 循环检测并调整潮湿状态 + async function handleDampStatus() { + let attempts = 0; + while (attempts < maxWaitAttempts) { + if (await checkDampStatus()) { + log.info(`检测到潮湿状态,第${attempts + 1}次调整时间`); + await setTime(6, 0); + await sleep(3000); // 等待调时间生效 + } else { + log.info("潮湿状态已解除"); + return true; + } + attempts++; + } + log.warn("潮湿状态调整超时"); + return false; + } + + // 传送到路线第一个点位 + async function teleportToFirstPoint(routePath) { + try { + // 读取路线文件获取第一个点位坐标 + const routeContent = file.readTextSync(routePath); + const routeData = JSON.parse(routeContent); + if (!routeData || !routeData.positions || routeData.positions.length === 0) { + log.error(`路线文件格式错误: ${routePath}`); + return false; + } + + const firstPoint = routeData.positions[0]; + if (typeof firstPoint.x !== "number" || typeof firstPoint.y !== "number" + || Number.isNaN(firstPoint.x) || Number.isNaN(firstPoint.y)) { + log.error(`坐标无效: ${routePath}`); + return false; + } + + // 使用传送功能传送到第一个点位 + await genshin.tp(firstPoint.x, firstPoint.y); + await sleep(2000); // 等待传送完成 + + return true; + } catch (err) { + log.error(`传送失败 ${routePath}:`, err); + return false; + } + } + + // 运行单条兽肉路线 + async function runMeatRoute(routePath) { + try { + // 运行路径追踪脚本 + await pathingScript.runFile(routePath); + } catch (err) { + log.error(`路线运行失败 ${routePath}:`, err); + } + } + + // 主执行逻辑 + // 设置游戏分辨率和DPI缩放 + setGameMetrics(1920, 1080, 1); + + // 切换队伍 + await switchPartyIfNeeded(partyName); + + // 检查队伍角色 + if (!checkRequiredCharacters()) { + log.error("队伍角色检查失败,脚本终止"); + return; + } + + // 开启自动拾取 + dispatcher.addTimer(new RealtimeTimer("AutoPick")); + + for (let i = 0; i < meatRoutes.length; i++) { + const route = meatRoutes[i]; + log.info(`路线 ${i + 1}/${meatRoutes.length}: ${route.split('\\').pop()}`); + + // 先传送到路线的第一个点位 + const teleportSuccess = await teleportToFirstPoint(route); + if (!teleportSuccess) { + log.error(`传送失败,跳过路线`); + continue; + } + + // 检测潮湿状态 + if (enableDampDetection) { + if (await checkDampStatus()) { + await handleDampStatus(); + } + } + + // 运行路线 + await runMeatRoute(route); + + // 路线间等待 + if (i < meatRoutes.length - 1) { + await sleep(2000); + } + } + + log.info("所有路线运行完成"); +})(); diff --git a/repo/js/DeerGameMeat/manifest.json b/repo/js/DeerGameMeat/manifest.json new file mode 100644 index 000000000..ea762f442 --- /dev/null +++ b/repo/js/DeerGameMeat/manifest.json @@ -0,0 +1,19 @@ +{ + "manifest_version": 1, + "name": "菈乌玛兽肉", + "version": "1.0", + "bgi_version": "0.52.0", + "description": "菈乌玛兽肉路线脚本,支持潮湿状态检测和自动调时间功能", + "authors": [ + { + "name": "zaodonganqi", + "link": "https://github.com/zaodonganqi" + } + ], + "settings_ui": "settings.json", + "main": "main.js", + "saved_files": [ + "data/*.txt", + "user_data.txt" + ] +} \ No newline at end of file diff --git a/repo/js/DeerGameMeat/paths/01-苔骨荒原右下-8个.json b/repo/js/DeerGameMeat/paths/01-苔骨荒原右下-8个.json new file mode 100644 index 000000000..758c3f211 --- /dev/null +++ b/repo/js/DeerGameMeat/paths/01-苔骨荒原右下-8个.json @@ -0,0 +1,51 @@ +{ + "info": { + "authors": [ + { + "links": "https://github.com/zaodonganqi", + "name": "躁动的氨气" + } + ], + "bgi_version": "0.52.0", + "description": "", + "enable_monster_loot_split": false, + "last_modified_time": 1760449172232, + "map_match_method": "", + "map_name": "Teyvat", + "name": "01-苔骨荒原右下-8个", + "tags": [ + "菈乌玛" + ], + "type": "collect", + "version": "1.1" + }, + "positions": [ + { + "action": "", + "action_params": "", + "id": 1, + "move_mode": "walk", + "type": "teleport", + "x": 9222.5312, + "y": 1899.25 + }, + { + "action": "combat_script", + "action_params": "枫原万叶 wait(6),e(hold),wait(0.2),attack", + "id": 2, + "move_mode": "swim", + "type": "target", + "x": 9222.125, + "y": 1899.2188 + }, + { + "action": "pick_around", + "action_params": "", + "id": 3, + "move_mode": "swim", + "type": "target", + "x": 9222.125, + "y": 1899.2188 + } + ] +} \ No newline at end of file diff --git a/repo/js/DeerGameMeat/paths/02-蓝珀胡下方峡谷-21个.json b/repo/js/DeerGameMeat/paths/02-蓝珀胡下方峡谷-21个.json new file mode 100644 index 000000000..a668c7812 --- /dev/null +++ b/repo/js/DeerGameMeat/paths/02-蓝珀胡下方峡谷-21个.json @@ -0,0 +1,358 @@ +{ + "info": { + "authors": [ + { + "links": "https://github.com/zaodonganqi", + "name": "躁动的氨气" + } + ], + "bgi_version": "0.52.0", + "description": "", + "enable_monster_loot_split": false, + "last_modified_time": 1760449187836, + "map_match_method": "", + "map_name": "Teyvat", + "name": "02-蓝珀胡下方峡谷-21个", + "tags": [ + "菈乌玛" + ], + "type": "collect", + "version": "1.2" + }, + "positions": [ + { + "action": "", + "action_params": "", + "id": 1, + "move_mode": "walk", + "type": "teleport", + "x": 9224.7549, + "y": 2246.7224 + }, + { + "action": "", + "action_params": "", + "id": 2, + "move_mode": "dash", + "type": "path", + "x": 9273.1338, + "y": 2226.5007 + }, + { + "action": "", + "action_params": "", + "id": 3, + "move_mode": "fly", + "type": "path", + "x": 9272.7402, + "y": 2224.9041 + }, + { + "action": "", + "action_params": "", + "id": 4, + "move_mode": "fly", + "type": "target", + "x": 9265.4463, + "y": 2203.5005 + }, + { + "action": "stop_flying", + "action_params": "1000", + "id": 5, + "move_mode": "fly", + "type": "target", + "x": 9261.75, + "y": 2185.25 + }, + { + "action": "", + "action_params": "", + "id": 6, + "move_mode": "dash", + "type": "path", + "x": 9212.6133, + "y": 2158.48 + }, + { + "action": "", + "action_params": "", + "id": 7, + "move_mode": "walk", + "type": "path", + "x": 9209.7461, + "y": 2134.2407 + }, + { + "action": "combat_script", + "action_params": "枫原万叶 wait(5),e(hold),wait(0.2),attack", + "id": 8, + "move_mode": "walk", + "type": "target", + "x": 9210.0625, + "y": 2130.875 + }, + { + "action": "", + "action_params": "", + "id": 9, + "move_mode": "swim", + "type": "target", + "x": 9205.0625, + "y": 2134.75 + }, + { + "action": "", + "id": 10, + "move_mode": "swim", + "type": "target", + "x": 9213.375, + "y": 2129.8125 + }, + { + "action": "", + "action_params": "", + "id": 11, + "move_mode": "swim", + "type": "target", + "x": 9206.25, + "y": 2136.5625 + }, + { + "action": "", + "id": 12, + "move_mode": "swim", + "type": "target", + "x": 9215.25, + "y": 2132.8125 + }, + { + "action": "", + "action_params": "", + "id": 13, + "move_mode": "swim", + "type": "target", + "x": 9207.375, + "y": 2138.8125 + }, + { + "action": "", + "action_params": "", + "id": 14, + "move_mode": "swim", + "type": "target", + "x": 9214.25, + "y": 2131.0625 + }, + { + "action": "", + "action_params": "", + "id": 15, + "move_mode": "swim", + "type": "target", + "x": 9211.875, + "y": 2127.875 + }, + { + "action": "", + "id": 16, + "move_mode": "swim", + "type": "target", + "x": 9204.25, + "y": 2133.375 + }, + { + "action": "", + "id": 17, + "move_mode": "swim", + "type": "target", + "x": 9210.9375, + "y": 2125.9375 + }, + { + "action": "", + "id": 18, + "move_mode": "swim", + "type": "target", + "x": 9203.625, + "y": 2131.4375 + }, + { + "action": "", + "id": 19, + "move_mode": "walk", + "type": "path", + "x": 9212.3438, + "y": 2137.6875 + }, + { + "action": "", + "action_params": "", + "id": 20, + "move_mode": "dash", + "type": "path", + "x": 9190.8281, + "y": 2094.9775 + }, + { + "action": "", + "action_params": "", + "id": 21, + "move_mode": "dash", + "type": "path", + "x": 9183.0, + "y": 2078.75 + }, + { + "action": "", + "action_params": "", + "id": 22, + "move_mode": "dash", + "type": "path", + "x": 9166.8223, + "y": 2071.209 + }, + { + "action": "", + "action_params": "", + "id": 23, + "move_mode": "walk", + "type": "target", + "x": 9151.5625, + "y": 2075.8125 + }, + { + "action": "", + "action_params": "", + "id": 24, + "move_mode": "dash", + "type": "path", + "x": 9128.7354, + "y": 2088.4778 + }, + { + "action": "combat_script", + "action_params": "wait(3)", + "id": 25, + "move_mode": "walk", + "type": "target", + "x": 9105.0, + "y": 2082.0 + }, + { + "action": "combat_script", + "action_params": "枫原万叶 wait(6),e(hold),wait(0.2),attack", + "id": 26, + "move_mode": "walk", + "type": "path", + "x": 9072.0625, + "y": 2096.4375 + }, + { + "action": "", + "id": 27, + "move_mode": "swim", + "type": "target", + "x": 9071.875, + "y": 2098.5 + }, + { + "action": "", + "action_params": "", + "id": 28, + "move_mode": "swim", + "type": "path", + "x": 9069.3125, + "y": 2087.9375 + }, + { + "action": "", + "id": 29, + "move_mode": "swim", + "type": "path", + "x": 9073.5625, + "y": 2098.4375 + }, + { + "action": "", + "id": 30, + "move_mode": "swim", + "type": "path", + "x": 9071.6875, + "y": 2087.1875 + }, + { + "action": "", + "id": 31, + "move_mode": "swim", + "type": "path", + "x": 9074.875, + "y": 2098.125 + }, + { + "action": "", + "id": 32, + "move_mode": "swim", + "type": "path", + "x": 9073.1875, + "y": 2086.375 + }, + { + "action": "", + "id": 33, + "move_mode": "swim", + "type": "path", + "x": 9077.25, + "y": 2099.625 + }, + { + "action": "", + "id": 34, + "move_mode": "swim", + "type": "path", + "x": 9074.9375, + "y": 2085.5 + }, + { + "action": "", + "id": 35, + "move_mode": "swim", + "type": "path", + "x": 9079.0, + "y": 2098.5625 + }, + { + "action": "", + "id": 36, + "move_mode": "swim", + "type": "path", + "x": 9069.0625, + "y": 2092.25 + }, + { + "action": "", + "id": 37, + "move_mode": "swim", + "type": "path", + "x": 9081.9375, + "y": 2094.9375 + }, + { + "action": "", + "id": 38, + "move_mode": "swim", + "type": "path", + "x": 9068.9375, + "y": 2090.0625 + }, + { + "action": "", + "action_params": "", + "id": 39, + "move_mode": "swim", + "type": "path", + "x": 9080.3125, + "y": 2089.3125 + } + ] +} \ No newline at end of file diff --git a/repo/js/DeerGameMeat/paths/03-星砂滩右上-9个.json b/repo/js/DeerGameMeat/paths/03-星砂滩右上-9个.json new file mode 100644 index 000000000..c812c1829 --- /dev/null +++ b/repo/js/DeerGameMeat/paths/03-星砂滩右上-9个.json @@ -0,0 +1,193 @@ +{ + "info": { + "authors": [ + { + "links": "https://github.com/zaodonganqi", + "name": "躁动的氨气" + } + ], + "bgi_version": "0.52.0", + "description": "", + "enable_monster_loot_split": false, + "last_modified_time": 1760449198029, + "map_match_method": "", + "map_name": "Teyvat", + "name": "03-星砂滩右上-9个", + "tags": [ + "菈乌玛" + ], + "type": "collect", + "version": "1.1" + }, + "positions": [ + { + "action": "", + "action_params": "", + "id": 1, + "move_mode": "walk", + "type": "teleport", + "x": 9248.2324, + "y": 2350.2634 + }, + { + "action": "", + "action_params": "", + "id": 2, + "move_mode": "walk", + "type": "path", + "x": 9253.2822, + "y": 2343.4441 + }, + { + "action": "", + "action_params": "", + "id": 3, + "move_mode": "walk", + "type": "path", + "x": 9271.3965, + "y": 2340.749 + }, + { + "action": "", + "action_params": "", + "id": 4, + "move_mode": "walk", + "type": "path", + "x": 9287.5742, + "y": 2345.7505 + }, + { + "action": "", + "action_params": "", + "id": 5, + "move_mode": "walk", + "type": "path", + "x": 9335.5723, + "y": 2333.3455 + }, + { + "action": "", + "action_params": "", + "id": 6, + "move_mode": "walk", + "type": "path", + "x": 9343.707, + "y": 2315.1614 + }, + { + "action": "", + "action_params": "", + "id": 7, + "move_mode": "walk", + "type": "target", + "x": 9349.8428, + "y": 2303.2068 + }, + { + "action": "combat_script", + "action_params": "枫原万叶 wait(5),e(hold),wait(0.2),attack", + "id": 8, + "move_mode": "walk", + "type": "target", + "x": 9337.9375, + "y": 2292.375 + }, + { + "action": "", + "id": 9, + "move_mode": "swim", + "type": "path", + "x": 9340.3438, + "y": 2289.3438 + }, + { + "action": "", + "action_params": "", + "id": 10, + "move_mode": "swim", + "type": "path", + "x": 9344.75, + "y": 2294.5 + }, + { + "action": "", + "action_params": "", + "id": 11, + "move_mode": "swim", + "type": "path", + "x": 9341.875, + "y": 2286.5938 + }, + { + "action": "", + "action_params": "", + "id": 12, + "move_mode": "swim", + "type": "path", + "x": 9338.1025, + "y": 2288.2322 + }, + { + "action": "", + "action_params": "", + "id": 13, + "move_mode": "swim", + "type": "path", + "x": 9336.2002, + "y": 2291.8354 + }, + { + "action": "", + "action_params": "", + "id": 14, + "move_mode": "swim", + "type": "path", + "x": 9334.376, + "y": 2294.1499 + }, + { + "action": "", + "action_params": "", + "id": 15, + "move_mode": "swim", + "type": "path", + "x": 9337.9492, + "y": 2297.762 + }, + { + "action": "", + "id": 16, + "move_mode": "swim", + "type": "path", + "x": 9336.4688, + "y": 2293.4062 + }, + { + "action": "", + "action_params": "", + "id": 17, + "move_mode": "swim", + "type": "path", + "x": 9342.0225, + "y": 2298.0981 + }, + { + "action": "", + "action_params": "", + "id": 18, + "move_mode": "swim", + "type": "path", + "x": 9347.0742, + "y": 2297.8345 + }, + { + "action": "", + "action_params": "", + "id": 19, + "move_mode": "swim", + "type": "path", + "x": 9337.9688, + "y": 2290.1875 + } + ] +} \ No newline at end of file diff --git a/repo/js/DeerGameMeat/paths/04-星砂滩左下-15个.json b/repo/js/DeerGameMeat/paths/04-星砂滩左下-15个.json new file mode 100644 index 000000000..8e76c0285 --- /dev/null +++ b/repo/js/DeerGameMeat/paths/04-星砂滩左下-15个.json @@ -0,0 +1,356 @@ +{ + "info": { + "authors": [ + { + "links": "https://github.com/zaodonganqi", + "name": "躁动的氨气" + } + ], + "bgi_version": "0.52.0", + "description": "", + "enable_monster_loot_split": false, + "last_modified_time": 1760449208658, + "map_match_method": "", + "map_name": "Teyvat", + "name": "04-星砂滩左下-15个", + "tags": [ + "菈乌玛" + ], + "type": "collect", + "version": "1.2" + }, + "positions": [ + { + "action": "", + "action_params": "", + "id": 1, + "move_mode": "dash", + "type": "teleport", + "x": 9746.3359, + "y": 1916.6514 + }, + { + "action": "", + "action_params": "", + "id": 2, + "move_mode": "dash", + "type": "path", + "x": 9776.5088, + "y": 1919.7988 + }, + { + "action": "", + "action_params": "", + "id": 3, + "move_mode": "dash", + "type": "path", + "x": 9809.2676, + "y": 1927.7632 + }, + { + "action": "", + "action_params": "", + "id": 4, + "move_mode": "walk", + "type": "path", + "x": 9829.7705, + "y": 1922.2373 + }, + { + "action": "", + "action_params": "", + "id": 5, + "move_mode": "swim", + "type": "path", + "x": 9843.7207, + "y": 1925.2319 + }, + { + "action": "combat_script", + "action_params": "枫原万叶 wait(4),e(hold),wait(0.2),attack", + "id": 6, + "move_mode": "walk", + "type": "path", + "x": 9846.6543, + "y": 1923.6958 + }, + { + "action": "", + "action_params": "", + "id": 7, + "move_mode": "swim", + "type": "path", + "x": 9846.2139, + "y": 1923.0205 + }, + { + "action": "", + "id": 8, + "move_mode": "swim", + "type": "path", + "x": 9849.3438, + "y": 1921.625 + }, + { + "action": "", + "id": 9, + "move_mode": "swim", + "type": "path", + "x": 9849.125, + "y": 1923.4375 + }, + { + "action": "", + "action_params": "", + "id": 10, + "move_mode": "swim", + "type": "path", + "x": 9850.8125, + "y": 1921.75 + }, + { + "action": "", + "id": 11, + "move_mode": "swim", + "type": "path", + "x": 9850.1875, + "y": 1924.4375 + }, + { + "action": "", + "action_params": "", + "id": 12, + "move_mode": "swim", + "type": "path", + "x": 9852.3438, + "y": 1922.0625 + }, + { + "action": "", + "id": 13, + "move_mode": "swim", + "type": "path", + "x": 9853.3125, + "y": 1922.6562 + }, + { + "action": "", + "action_params": "", + "id": 14, + "move_mode": "swim", + "type": "path", + "x": 9849.1562, + "y": 1925.7812 + }, + { + "action": "", + "id": 15, + "move_mode": "swim", + "type": "path", + "x": 9849.0625, + "y": 1923.7812 + }, + { + "action": "", + "id": 16, + "move_mode": "swim", + "type": "path", + "x": 9848, + "y": 1925.75 + }, + { + "action": "", + "action_params": "", + "id": 17, + "move_mode": "swim", + "type": "path", + "x": 9848.0312, + "y": 1922.75 + }, + { + "action": "", + "id": 18, + "move_mode": "swim", + "type": "path", + "x": 9846.8125, + "y": 1926.0625 + }, + { + "action": "", + "action_params": "", + "id": 19, + "move_mode": "swim", + "type": "path", + "x": 9844.2227, + "y": 1925.5527 + }, + { + "action": "", + "action_params": "", + "id": 20, + "move_mode": "swim", + "type": "path", + "x": 9846.9951, + "y": 1924.0649 + }, + { + "action": "", + "action_params": "", + "id": 21, + "move_mode": "dash", + "type": "teleport", + "x": 9746.335, + "y": 1916.6504 + }, + { + "action": "", + "id": 22, + "move_mode": "walk", + "type": "path", + "x": 9745.5, + "y": 1978.75 + }, + { + "action": "", + "action_params": "", + "id": 23, + "move_mode": "dash", + "type": "path", + "x": 9746.291, + "y": 1996.0615 + }, + { + "action": "combat_script", + "action_params": "枫原万叶 wait(5),e(hold),wait(0.2),attack", + "id": 24, + "move_mode": "walk", + "type": "path", + "x": 9755.4844, + "y": 2002.1201 + }, + { + "action": "", + "action_params": "", + "id": 25, + "move_mode": "swim", + "type": "path", + "x": 9757.2812, + "y": 2003.2524 + }, + { + "action": "", + "action_params": "", + "id": 26, + "move_mode": "swim", + "type": "path", + "x": 9759.041, + "y": 2004.4248 + }, + { + "action": "", + "action_params": "", + "id": 27, + "move_mode": "swim", + "type": "path", + "x": 9759.126, + "y": 2007.54 + }, + { + "action": "", + "action_params": "", + "id": 28, + "move_mode": "swim", + "type": "path", + "x": 9756.9473, + "y": 2009.603 + }, + { + "action": "", + "action_params": "", + "id": 29, + "move_mode": "swim", + "type": "path", + "x": 9753.4062, + "y": 2010.5 + }, + { + "action": "", + "id": 30, + "move_mode": "swim", + "type": "path", + "x": 9757.9375, + "y": 2007.125 + }, + { + "action": "", + "action_params": "", + "id": 31, + "move_mode": "swim", + "type": "path", + "x": 9753.3896, + "y": 2007.8955 + }, + { + "action": "", + "id": 32, + "move_mode": "swim", + "type": "path", + "x": 9758.0938, + "y": 2005.625 + }, + { + "action": "", + "action_params": "", + "id": 33, + "move_mode": "swim", + "type": "path", + "x": 9753.0898, + "y": 2004.7959 + }, + { + "action": "", + "action_params": "", + "id": 34, + "move_mode": "swim", + "type": "path", + "x": 9752.418, + "y": 2002.8955 + }, + { + "action": "", + "action_params": "", + "id": 35, + "move_mode": "swim", + "type": "path", + "x": 9752.0645, + "y": 1999.0312 + }, + { + "action": "", + "action_params": "", + "id": 36, + "move_mode": "swim", + "type": "path", + "x": 9754.8721, + "y": 2000.0142 + }, + { + "action": "", + "action_params": "", + "id": 37, + "move_mode": "swim", + "type": "path", + "x": 9756.6045, + "y": 2001.1826 + }, + { + "action": "", + "action_params": "", + "id": 38, + "move_mode": "swim", + "type": "target", + "x": 9756.1328, + "y": 2003.186 + } + ] +} \ No newline at end of file diff --git a/repo/js/DeerGameMeat/paths/05-苔古荒原下方-12个.json b/repo/js/DeerGameMeat/paths/05-苔古荒原下方-12个.json new file mode 100644 index 000000000..bb89ef0bd --- /dev/null +++ b/repo/js/DeerGameMeat/paths/05-苔古荒原下方-12个.json @@ -0,0 +1,219 @@ +{ + "info": { + "authors": [ + { + "links": "https://github.com/zaodonganqi", + "name": "躁动的氨气" + } + ], + "bgi_version": "0.52.0", + "description": "", + "enable_monster_loot_split": false, + "last_modified_time": 1760764363466, + "map_match_method": "", + "map_name": "Teyvat", + "name": "05-苔古荒原下方-12个", + "tags": [ + "菈乌玛" + ], + "type": "collect", + "version": "1.2" + }, + "positions": [ + { + "action": "", + "action_params": "", + "id": 1, + "locked": false, + "move_mode": "walk", + "type": "teleport", + "x": 9370.3994, + "y": 1865.4717 + }, + { + "action": "", + "action_params": "", + "id": 2, + "locked": false, + "move_mode": "walk", + "type": "orientation", + "x": 9342.5, + "y": 1890.5 + }, + { + "action": "combat_script", + "action_params": "wait(3),keypress(VK_F),wait(3),click,wait(10),keypress(VK_SPACE)", + "id": 3, + "locked": false, + "move_mode": "fly", + "type": "orientation", + "x": 9342.5, + "y": 1890.5 + }, + { + "action": "stop_flying", + "action_params": "1000", + "id": 4, + "locked": false, + "move_mode": "fly", + "type": "target", + "x": 9385.25, + "y": 1759.5 + }, + { + "action": "", + "action_params": "", + "id": 5, + "locked": false, + "move_mode": "dash", + "type": "path", + "x": 9397.5, + "y": 1748.5 + }, + { + "action": "", + "action_params": "", + "id": 6, + "locked": false, + "move_mode": "dash", + "type": "path", + "x": 9421.75, + "y": 1746.0 + }, + { + "action": "combat_script", + "action_params": "枫原万叶 wait(4),e(hold),wait(0.2),attack", + "id": 7, + "locked": false, + "move_mode": "walk", + "type": "target", + "x": 9444.3809, + "y": 1757.8408 + }, + { + "action": "", + "action_params": "", + "id": 8, + "locked": false, + "move_mode": "swim", + "type": "path", + "x": 9444.6445, + "y": 1757.8359 + }, + { + "action": "", + "action_params": "", + "id": 9, + "locked": false, + "move_mode": "swim", + "type": "path", + "x": 9440.8369, + "y": 1756.0884 + }, + { + "action": "", + "action_params": "", + "id": 10, + "locked": false, + "move_mode": "swim", + "type": "path", + "x": 9437.6289, + "y": 1761.5488 + }, + { + "action": "", + "action_params": "", + "id": 11, + "locked": false, + "move_mode": "swim", + "type": "path", + "x": 9443.4971, + "y": 1765.9624 + }, + { + "action": "", + "action_params": "", + "id": 12, + "locked": false, + "move_mode": "swim", + "type": "path", + "x": 9447.666, + "y": 1759.5054 + }, + { + "action": "", + "action_params": "", + "id": 13, + "locked": false, + "move_mode": "swim", + "type": "path", + "x": 9445.3281, + "y": 1754.7812 + }, + { + "action": "", + "action_params": "", + "id": 14, + "locked": false, + "move_mode": "swim", + "type": "path", + "x": 9440.1797, + "y": 1763.9966 + }, + { + "action": "", + "action_params": "", + "id": 15, + "locked": false, + "move_mode": "swim", + "type": "path", + "x": 9442.875, + "y": 1754.2812 + }, + { + "action": "", + "action_params": "", + "id": 16, + "move_mode": "swim", + "type": "path", + "x": 9442.3262, + "y": 1756.1201 + }, + { + "action": "", + "action_params": "", + "id": 17, + "move_mode": "swim", + "type": "path", + "x": 9439.2783, + "y": 1751.0 + }, + { + "action": "", + "action_params": "", + "id": 18, + "move_mode": "swim", + "type": "path", + "x": 9433.0059, + "y": 1752.4941 + }, + { + "action": "", + "action_params": "", + "id": 19, + "move_mode": "swim", + "type": "path", + "x": 9431.8467, + "y": 1749.9717 + }, + { + "action": "", + "action_params": "", + "id": 20, + "move_mode": "swim", + "type": "path", + "x": 9443.2852, + "y": 1762.793 + } + ] +} \ No newline at end of file diff --git a/repo/js/DeerGameMeat/paths/06-苔古荒原上方-6个.json b/repo/js/DeerGameMeat/paths/06-苔古荒原上方-6个.json new file mode 100644 index 000000000..110deb82e --- /dev/null +++ b/repo/js/DeerGameMeat/paths/06-苔古荒原上方-6个.json @@ -0,0 +1,133 @@ +{ + "info": { + "authors": [ + { + "links": "https://github.com/zaodonganqi", + "name": "躁动的氨气" + } + ], + "bgi_version": "0.52.0", + "description": "", + "enable_monster_loot_split": false, + "last_modified_time": 1760449142682, + "map_match_method": "", + "map_name": "Teyvat", + "name": "06-苔古荒原上方-6个", + "tags": [ + "菈乌玛" + ], + "type": "collect", + "version": "1.1" + }, + "positions": [ + { + "action": "", + "action_params": "", + "id": 1, + "move_mode": "dash", + "type": "teleport", + "x": 9370.4004, + "y": 1865.4727 + }, + { + "action": "", + "action_params": "", + "id": 2, + "move_mode": "walk", + "type": "path", + "x": 9425.9414, + "y": 1878.2812 + }, + { + "action": "combat_script", + "action_params": "枫原万叶 wait(6),e(hold),wait(0.2),attack", + "id": 3, + "move_mode": "walk", + "type": "target", + "x": 9450.1406, + "y": 1880.9834 + }, + { + "action": "", + "action_params": "", + "id": 4, + "locked": false, + "move_mode": "swim", + "type": "path", + "x": 9451.0938, + "y": 1875.7812 + }, + { + "id": 5, + "move_mode": "swim", + "type": "path", + "x": 9450.875, + "y": 1885.8438 + }, + { + "id": 6, + "move_mode": "swim", + "type": "path", + "x": 9452.5938, + "y": 1875.7188 + }, + { + "id": 7, + "move_mode": "swim", + "type": "path", + "x": 9452.9062, + "y": 1885.9375 + }, + { + "id": 8, + "move_mode": "swim", + "type": "path", + "x": 9454.5312, + "y": 1875.6875 + }, + { + "id": 9, + "move_mode": "swim", + "type": "path", + "x": 9456.3125, + "y": 1882.125 + }, + { + "id": 10, + "move_mode": "swim", + "type": "path", + "x": 9448.0938, + "y": 1885.875 + }, + { + "id": 11, + "move_mode": "swim", + "type": "path", + "x": 9449.25, + "y": 1875.4688 + }, + { + "id": 12, + "move_mode": "swim", + "type": "path", + "x": 9446.0312, + "y": 1885.75 + }, + { + "id": 13, + "move_mode": "swim", + "type": "path", + "x": 9447.2812, + "y": 1875.4375 + }, + { + "action": "", + "action_params": "", + "id": 14, + "move_mode": "swim", + "type": "path", + "x": 9444.1875, + "y": 1885.2812 + } + ] +} \ No newline at end of file diff --git a/repo/js/DeerGameMeat/paths/07-苔古荒原中间-12个.json b/repo/js/DeerGameMeat/paths/07-苔古荒原中间-12个.json new file mode 100644 index 000000000..65c905c44 --- /dev/null +++ b/repo/js/DeerGameMeat/paths/07-苔古荒原中间-12个.json @@ -0,0 +1,114 @@ +{ + "info": { + "authors": [ + { + "links": "https://github.com/zaodonganqi", + "name": "躁动的氨气" + } + ], + "bgi_version": "0.52.0", + "description": "", + "enable_monster_loot_split": false, + "last_modified_time": 1760764234436, + "map_match_method": "", + "map_name": "Teyvat", + "name": "07-苔古荒原中间-12个", + "tags": [ + "菈乌玛" + ], + "type": "collect", + "version": "1.2" + }, + "positions": [ + { + "action": "", + "action_params": "", + "id": 1, + "move_mode": "walk", + "type": "teleport", + "x": 9370.3994, + "y": 1865.4717 + }, + { + "action": "", + "action_params": "", + "id": 2, + "move_mode": "walk", + "type": "orientation", + "x": 9342.5, + "y": 1890.5 + }, + { + "action": "combat_script", + "action_params": "枫原万叶 attack,wait(3),keypress(VK_F),wait(3),click,wait(10),keypress(VK_SPACE)", + "id": 3, + "move_mode": "fly", + "type": "orientation", + "x": 9342.5, + "y": 1890.5 + }, + { + "action": "combat_script", + "action_params": "keypress(VK_E),wait(0.2),attack", + "id": 4, + "move_mode": "fly", + "type": "target", + "x": 9469.9023, + "y": 1809.1797 + }, + { + "action": "", + "action_params": "", + "id": 5, + "move_mode": "walk", + "type": "path", + "x": 9470.2539, + "y": 1805.1245 + }, + { + "action": "", + "action_params": "", + "id": 6, + "move_mode": "walk", + "type": "path", + "x": 9466.5264, + "y": 1805.5381 + }, + { + "action": "", + "action_params": "", + "id": 7, + "move_mode": "walk", + "type": "path", + "x": 9466.5371, + "y": 1812.5723 + }, + { + "action": "", + "action_params": "", + "id": 8, + "move_mode": "walk", + "type": "path", + "x": 9473.0703, + "y": 1810.7129 + }, + { + "action": "", + "action_params": "", + "id": 9, + "move_mode": "walk", + "type": "path", + "x": 9474.6426, + "y": 1805.8882 + }, + { + "action": "", + "action_params": "", + "id": 10, + "move_mode": "walk", + "type": "teleport", + "x": 9370.3994, + "y": 1865.4717 + } + ] +} \ No newline at end of file diff --git a/repo/js/DeerGameMeat/paths/README.md b/repo/js/DeerGameMeat/paths/README.md new file mode 100644 index 000000000..d153b481c --- /dev/null +++ b/repo/js/DeerGameMeat/paths/README.md @@ -0,0 +1,22 @@ +## 配置与运行要求 + +> 虽然全线会路过两只霜夜灵嗣,但是不用战斗,都是直接冲过去的哦。 + +### 🎯 角色要求 +- 确保队伍中有「菈乌玛」与「枫原万叶」 +- 将`行走位`设置为「菈乌玛」 + +### ⚠️ 运行须知(必看) +- 运行前请确保游戏内不在下雨状态,下雨时挪德卡莱的小动物会消失。运行中途若开始下雨,将无法避免地白跑! +- 运行前请确保你今天没有跑过`虹滴晶`路线和`霜夜灵嗣`路线,这两个路线与犀牛路线存在重叠,会导致犀牛跑走。 +- 苔古荒原中间的传送点处有一个需要寻找10个机器人才能解锁的飞高高装置,请解锁它,否则请禁用`05`和`07`两条线路。 + +### 🚀 运行效率 +- 9分钟可收获理论最多83个兽肉 +- 常态下拾取约65个 + +### ⚔️ 风险点位说明 +最后一条路径落地点有一只精英怪,拾取时会发生战斗,可选择性关闭,但这个点位物资丰厚,高风险高回报。 + + +#### 更新计划:在js版中支持钟离举盾,检测下雨状态 \ No newline at end of file diff --git a/repo/js/DeerGameMeat/settings.json b/repo/js/DeerGameMeat/settings.json new file mode 100644 index 000000000..a06086e5f --- /dev/null +++ b/repo/js/DeerGameMeat/settings.json @@ -0,0 +1,26 @@ +[ + { + "name": "enableDampDetection", + "type": "checkbox", + "default": true, + "label": "启用潮湿状态检测" + }, + { + "name": "maxWaitAttempts", + "type": "input-text", + "default": "5", + "label": "最大等待次数" + }, + { + "name": "enableHighRiskRoutes", + "type": "checkbox", + "default": true, + "label": "运行高危路线" + }, + { + "name": "partyName", + "type": "input-text", + "default": "", + "label": "队伍名称" + } +] \ No newline at end of file