diff --git a/repo/js/只要大瓶/assets/RecognitionObject/三个小瓶.png b/repo/js/只要大瓶/assets/RecognitionObject/三个小瓶.png new file mode 100644 index 000000000..1be5bdf01 Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/三个小瓶.png differ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/已进入狗粮界面.png b/repo/js/只要大瓶/assets/RecognitionObject/已进入狗粮界面.png new file mode 100644 index 000000000..66cb63bf6 Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/已进入狗粮界面.png differ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/未满级.png b/repo/js/只要大瓶/assets/RecognitionObject/未满级.png new file mode 100644 index 000000000..457c2cbb2 Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/未满级.png differ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/未装备.png b/repo/js/只要大瓶/assets/RecognitionObject/未装备.png new file mode 100644 index 000000000..44f4bc0bc Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/未装备.png differ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/未锁定.png b/repo/js/只要大瓶/assets/RecognitionObject/未锁定.png new file mode 100644 index 000000000..054b3b7b5 Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/未锁定.png differ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/确认.png b/repo/js/只要大瓶/assets/RecognitionObject/确认.png new file mode 100644 index 000000000..5a8dea209 Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/确认.png differ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/祝圣之霜定义.png b/repo/js/只要大瓶/assets/RecognitionObject/祝圣之霜定义.png new file mode 100644 index 000000000..1e1827bd8 Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/祝圣之霜定义.png differ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/筛选.png b/repo/js/只要大瓶/assets/RecognitionObject/筛选.png new file mode 100644 index 000000000..94ed28b16 Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/筛选.png differ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/背包小瓶.png b/repo/js/只要大瓶/assets/RecognitionObject/背包小瓶.png new file mode 100644 index 000000000..ec98865af Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/背包小瓶.png differ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/重置.png b/repo/js/只要大瓶/assets/RecognitionObject/重置.png new file mode 100644 index 000000000..249d93863 Binary files /dev/null and b/repo/js/只要大瓶/assets/RecognitionObject/重置.png differ diff --git a/repo/js/只要大瓶/main.js b/repo/js/只要大瓶/main.js index 3b4b30174..124efac75 100644 --- a/repo/js/只要大瓶/main.js +++ b/repo/js/只要大瓶/main.js @@ -18,15 +18,8 @@ fourStarRo.Threshold = +settings.Threshold1 || 0.97; //fourStarRo.Use3Channels = true; fourStarRo.InitTemplate(); -const bigPngRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/大瓶.png`), 1670, 900, 1890 - 1670, 980 - 900); -bigPngRo.Threshold = 0.995; -bigPngRo.Use3Channels = true; -bigPngRo.InitTemplate(); - -const smallPngRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/大瓶和小瓶.png`), 1670, 900, 1890 - 1670, 980 - 900); -smallPngRo.Threshold = 0.995; -smallPngRo.Use3Channels = true; -smallPngRo.InitTemplate(); +let pngRo1; +let pngRo2; let bigBottleCount = 0; let smallBottleCount = 0; @@ -50,8 +43,74 @@ let rg; //await genshin.tpToStatueOfTheSeven(); keyPress("B"); //切换到圣遗物界面 + await clickPNG("狗粮界面"); + if (settings.autoSwitchCount) { + log.info(`填写了临界小瓶数量为${(+settings.autoSwitchCount)},开始识别`); + + await clickPNG("筛选"); + await sleep(200); + click(30, 30); + await sleep(100); + await clickPNG("重置"); + await clickPNG("祝圣之霜定义"); + await clickPNG("未装备"); + await clickPNG("未锁定"); + await clickPNG("确认"); + await sleep(200); + click(30, 30); + await sleep(100); + { + const smallBottleRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/背包小瓶.png`)); + smallBottleRo.InitTemplate(); + for (let i = 0; i < 5; i++) { + const rg = captureGameRegion(); + try { + const res = rg.find(smallBottleRo); + if (res.isExist()) { + const regionToCheck = { x: res.x, y: res.y + 110, width: 122, height: 30 }; + const raw = await recognizeTextInRegion(regionToCheck); + + // 只保留数字 + const digits = (raw || '').replace(/\D/g, ''); + log.info(`识别到小瓶数量为${digits}`); + if ((+digits) > settings.autoSwitchCount) { + settings.bottleType = "只要大瓶"; + } else { + settings.bottleType = "只要小瓶"; + } + log.info(`当前分解模式为${settings.bottleType}`); + break; + } + } finally { rg.dispose(); } + if (i < 5 - 1) await sleep(50); + } + } + } + + if (settings.bottleType != "只要小瓶") { + pngRo1 = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/大瓶.png`), 1670, 900, 1890 - 1670, 980 - 900); + pngRo1.Threshold = 0.995; + pngRo1.Use3Channels = true; + pngRo1.InitTemplate(); + + pngRo2 = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/大瓶和小瓶.png`), 1670, 900, 1890 - 1670, 980 - 900); + pngRo2.Threshold = 0.995; + pngRo2.Use3Channels = true; + pngRo2.InitTemplate(); + } else { + pngRo1 = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/三个小瓶.png`), 1670, 900, 1890 - 1670, 980 - 900); + pngRo1.Threshold = 0.995; + pngRo1.Use3Channels = true; + pngRo1.InitTemplate(); + + pngRo2 = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/大瓶.png`), 1670, 900, 1890 - 1670, 980 - 900); + pngRo2.Threshold = 0.995; + pngRo2.Use3Channels = true; + pngRo2.InitTemplate(); + } + //点击分解 await clickPNG("分解"); //点击倒序 @@ -70,18 +129,26 @@ let rg; rg = captureGameRegion(); try { - const bigRes = rg.find(bigPngRo); + const bigRes = rg.find(pngRo1); if (bigRes.isExist()) { foundBigBottle = true; - bigBottleCount++; + if (settings.bottleType === "只要大瓶") { + bigBottleCount++; + } else { + smallBottleCount += 3; + } break; } - const smallRes = rg.find(smallPngRo); + const smallRes = rg.find(pngRo2); if (smallRes.isExist()) { foundBigBottle = true; - bigBottleCount++; - smallBottleCount++; + if (settings.bottleType === "只要大瓶") { + bigBottleCount++; + smallBottleCount++; + } else { + bigBottleCount++; + } break; } } finally { @@ -94,7 +161,7 @@ let rg; //log.info(`调试-用时${new Date() - time1}`); } if (foundBigBottle) { - log.info("成功选出分解大瓶所需狗粮"); + log.info("成功选出分解所需狗粮"); } else { log.info("结束分解"); break; @@ -213,7 +280,7 @@ async function findAndClick(target, maxAttempts = 20) { const rg = captureGameRegion(); try { const res = rg.find(target); - if (res.isExist()) { res.click(); return true; } + if (res.isExist()) { await sleep(16); res.click(); return true; } } finally { rg.dispose(); } if (i < maxAttempts - 1) await sleep(50); } @@ -237,4 +304,30 @@ async function findWithoutClick(target, maxAttempts = 20) { if (i < maxAttempts - 1) await sleep(50); } return false; +} + +async function recognizeTextInRegion(ocrRegion, timeout = 5000) { + let startTime = Date.now(); + let retryCount = 0; // 重试计数 + while (Date.now() - startTime < timeout) { + try { + // 在指定区域进行 OCR 识别 + const gameRegion = captureGameRegion(); + let ocrResult = gameRegion.find(RecognitionObject.ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height)); + gameRegion.dispose(); + if (ocrResult) { + let correctedText = ocrResult.text; + return correctedText; // 返回识别到的内容 + } else { + log.warn(`OCR 识别区域未找到内容`); + return null; // 如果 OCR 未识别到内容,返回 null + } + } catch (error) { + retryCount++; // 增加重试计数 + log.warn(`OCR 识别失败,正在进行第 ${retryCount} 次重试...`); + } + await sleep(200); + } + log.warn(`经过多次尝试,仍然无法在指定区域识别到文字`); + return null; // 如果未识别到文字,返回 null } \ No newline at end of file diff --git a/repo/js/只要大瓶/manifest.json b/repo/js/只要大瓶/manifest.json index 1c5ce3f7c..137d0665a 100644 --- a/repo/js/只要大瓶/manifest.json +++ b/repo/js/只要大瓶/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "只要大瓶", - "version": "1.0", + "version": "1.1", "description": "分解狗粮尽量只要大瓶", "authors": [ { diff --git a/repo/js/只要大瓶/settings.json b/repo/js/只要大瓶/settings.json index 5a9d7d4b7..51a226606 100644 --- a/repo/js/只要大瓶/settings.json +++ b/repo/js/只要大瓶/settings.json @@ -11,6 +11,21 @@ ], "default": "3" }, + { + "name": "bottleType", + "type": "select", + "label": "分解成大瓶还是小瓶", + "options": [ + "只要大瓶", + "只要小瓶" + ], + "default": "只要大瓶" + }, + { + "name": "autoSwitchCount", + "type": "input-text", + "label": "临界小瓶数量,填写后将会在每次开始时识别小瓶数量\n数量大于所填数值时将会自动切换为只要大瓶,否则切换为只要小瓶\n不填时不识别,保持自定义配置中的选项" + }, { "name": "Threshold1", "type": "input-text", diff --git a/repo/js/采集cd管理/README.md b/repo/js/采集cd管理/README.md index 35504330f..55eaf2517 100644 --- a/repo/js/采集cd管理/README.md +++ b/repo/js/采集cd管理/README.md @@ -1,19 +1,56 @@ -# 采集CD管理脚本 +采集CD管理脚本 -## 简介 -这是一个基于文件夹操作的自动化脚本,用于管理采集路线的冷却时间(CD)。它会按照路径组的顺序依次运行任务,直到指定的时间,并根据给定的CD类型自动跳过未刷新的路线。同时加入了伪造日志功能,日志分析可以解析具体路线的信息。 +一、简介: + - +这是一个基于文件夹操作的自动化脚本,用于管理采集路线的冷却时间(CD)。它会按照自定义配置中所选路径组的顺序依次运行任务,直到指定的时间,并根据给定的CD类型自动跳过未刷新的路线。同时加入了伪造日志功能,日志分析可以解析具体路线的信息。 -## 文件结构 +二、文件结构 + - - `main.js`:主要的脚本文件,负责执行任务和管理CD。 - `manifest.json`:脚本的配置文件,包含脚本的基本信息和设置。 - `settings.json`:用户配置文件,用于设置操作模式、路径组CD类型、配队名称等。 +- `pathing/`:存放路径文件的文件夹,路径组可选择其中一个子文件夹运行。 -## 功能 -- **操作模式选择**:提供两种操作模式,包括“执行任务(若不存在索引文件则自动创建)”和“重新生成索引文件(用于强制刷新CD或更新文件)”。 -- **路径组CD类型**:支持多种CD类型,包括“1次0点刷新”、“2次0点刷新”、“3次0点刷新”、“4点刷新”、“12小时刷新”、“24小时刷新”和“46小时刷新”。 -- **任务管理**:自动读取路径组文件,跳过未刷新的任务,并根据CD类型更新任务的时间戳。同时支持跳过指定时间段的任务。 -- **配队管理**:支持为每个路径组指定配队名称,自动切换配队。 +三、功能 + - +- 操作模式选择:提供两种操作模式: + - 执行任务(若不存在索引文件则自动创建):自动执行任务,若索引文件不存在则自动创建。 + - 重新生成索引文件(用于强制刷新CD或更新文件):重新生成索引文件,可用于强制刷新CD或更新文件。 +- 路径组CD类型:支持多种CD类型,包括: + - 1次0点刷新 + - 2次0点刷新 + - 3次0点刷新 + - 4点刷新 + - 12小时刷新 + - 24小时刷新 + - 46小时刷新 +- 任务管理:自动读取路径组文件,跳过未刷新的任务,并根据CD类型更新任务的时间戳。同时支持跳过指定时间段的任务。 +- 配队管理:支持为每个路径组指定配队名称,自动切换配队。 +- 伪造日志:支持伪造日志功能,便于日志分析工具解析具体路线信息。 -## 使用方法 -1. 将要运行的地图追踪文件放在pathing文件夹下的不同路径组中,将会按照路径组的顺序执行,并跳过未刷新的路线 -2. 根据需要修改自定义配置,设置操作模式、路径组CD类型、配队名称等参数。 \ No newline at end of file +四、使用方法 + - +1. 准备路径文件: + - 将要运行的地图追踪文件放在 `pathing/` 文件夹下的不同路径组中,每个子文件夹代表一个路径组。 + - 文件夹名称将可在自定义配置中供选择,例如 `pathing/矿物`、`pathing/地方特产` 等。 +2. 构造自定义配置: + - 建议初次运行先勾选仅刷新选项。 + - 填写需要的路径组数量 + - 运行一次js,将会根据所填的路径组数量,构造出新的自定义配置 + - 后续如果修改了pathing下文件夹的名字,或在多个配置组使用本js时需要修改本配置组的自定义配置时,强烈建议重新进行该步骤,使自定义配置选项等与本配置组情况一致 +3. 修改自定义配置: + - 根据所给表格,结合自身情况选择每个路径组的刷新cd类型 + - 选择每个路径组要运行的文件夹 + - 填写运行该组使用的配队名称(不填就不换队,有啥用啥) + +4. 运行脚本: + - 运行脚本,脚本将按照路径组的顺序依次执行任务。 + - 如果当前时间处于 `timerule` 指定的时间范围内,脚本将终止。 + - 如果任务的CD未刷新,脚本将跳过该任务并继续执行下一个任务。 + - 脚本会自动更新任务的时间戳,确保任务按CD类型刷新后再运行。 + +五、注意事项 + - +- 伪造日志:伪造日志功能仅用于日志分析,不会影响脚本的实际运行。 +- 识别到满背包的物品将会被加入拾取黑名单,同时加入自定义配置中的 **禁用的路线的关键词** ,将会跳过文件路径包含该关键词的路线,其他你希望跳过的路线也可以使用该配置来跳过,如填写钟离来跳过部分需要钟离的挖矿路线(仅文件路径中包含钟离时有效,还是建议手动删除这些路线) +- 不同配置组中的本js仅共用相同账号的拾取黑名单,路线刷新cd,路径组等其他信息并不关联,settings.json仅供配置每个配置组使用,本身变化不影响其他配置组功能 \ No newline at end of file diff --git a/repo/js/采集cd管理/assets/F_Dialogue.png b/repo/js/采集cd管理/assets/F_Dialogue.png new file mode 100644 index 000000000..314a85f13 Binary files /dev/null and b/repo/js/采集cd管理/assets/F_Dialogue.png differ diff --git a/repo/js/采集cd管理/assets/MainUI.png b/repo/js/采集cd管理/assets/MainUI.png new file mode 100644 index 000000000..690f1d079 Binary files /dev/null and b/repo/js/采集cd管理/assets/MainUI.png differ diff --git a/repo/js/采集cd管理/assets/RevivalUI.png b/repo/js/采集cd管理/assets/RevivalUI.png new file mode 100644 index 000000000..e5a5ae76b Binary files /dev/null and b/repo/js/采集cd管理/assets/RevivalUI.png differ diff --git a/repo/js/采集cd管理/assets/itemFull.png b/repo/js/采集cd管理/assets/itemFull.png new file mode 100644 index 000000000..93eae12a0 Binary files /dev/null and b/repo/js/采集cd管理/assets/itemFull.png differ diff --git a/repo/js/采集cd管理/assets/monsterInfo.json b/repo/js/采集cd管理/assets/monsterInfo.json new file mode 100644 index 000000000..502be7842 --- /dev/null +++ b/repo/js/采集cd管理/assets/monsterInfo.json @@ -0,0 +1,2006 @@ +[ + { + "name": "小怪传奇倍率一", + "moraRate": 1, + "type": "普通", + "tags": [ + "传奇" + ] + }, + { + "name": "小怪传奇倍率二", + "moraRate": 2, + "type": "普通", + "tags": [ + "传奇" + ] + }, + { + "name": "精英传奇倍率一", + "moraRate": 1, + "type": "精英", + "tags": [ + "传奇" + ] + }, + { + "name": "精英传奇倍率二", + "moraRate": 2, + "type": "精英", + "tags": [ + "传奇" + ] + }, + { + "name": "精英传奇倍率三", + "moraRate": 3, + "type": "精英", + "tags": [ + "传奇" + ] + }, + { + "name": "精英传奇倍率五", + "moraRate": 5, + "type": "精英", + "tags": [ + "传奇" + ] + }, + { + "name": "火史莱姆", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "大型火史莱姆", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "水史莱姆", + "moraRate": 1, + "type": "普通", + "tags": [ + "水免" + ] + }, + { + "name": "大型水史莱姆", + "moraRate": 2, + "type": "普通", + "tags": [ + "水免" + ] + }, + { + "name": "风史莱姆", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "大型风史莱姆", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "雷史莱姆", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "大型雷史莱姆", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "变异雷史莱姆", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "草史莱姆", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "大型草史莱姆", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "冰史莱姆", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "大型冰史莱姆", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "岩史莱姆", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "大型岩史莱姆", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "狂风之核", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "无相之火", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "无相之水", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "无相之风", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "无相之雷", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "无相之草", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "无相之冰", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "无相之岩", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "纯水精灵", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "雷音权现", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "火飘浮灵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "水飘浮灵", + "moraRate": 1, + "type": "普通", + "tags": [ + "水免" + ] + }, + { + "name": "风飘浮灵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "雷飘浮灵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "草飘浮灵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "冰飘浮灵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "岩飘浮灵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "浊水粉碎幻灵", + "moraRate": 1, + "type": "精英", + "tags": [ + "水免" + ] + }, + { + "name": "浊水喷吐幻灵", + "moraRate": 1, + "type": "精英", + "tags": [ + "水免" + ] + }, + { + "name": "水形幻人", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "灼烜·霜夜灵嗣", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "辉电·霜夜灵嗣", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "蔓结·霜夜灵嗣", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "凌晶·霜夜灵嗣", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "打手丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "冲锋丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "木盾丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "冰盾丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "岩盾丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "射手丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "火箭丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "雷箭丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "冰箭丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "爆弹丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "雷弹丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "冰弹丘丘人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "奇怪的丘丘人", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "木盾丘丘暴徒", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "岩盾丘丘暴徒", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "冰盾丘丘暴徒", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "火斧丘丘暴徒", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "雷斧丘丘暴徒", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "丘丘雷兜王", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "丘丘霜铠王", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "丘丘岩盔王", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "水丘丘萨满", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "风丘丘萨满", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "雷丘丘萨满", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "草丘丘萨满", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "冰丘丘萨满", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "岩丘丘萨满", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "丘丘水行游侠", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "丘丘风行游侠", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "火深渊法师", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "水深渊法师", + "moraRate": 1, + "type": "精英", + "tags": [ + "水免" + ] + }, + { + "name": "雷深渊法师", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "冰深渊法师", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "深渊使徒·激流", + "moraRate": 3, + "type": "精英", + "tags": [ + "水免" + ] + }, + { + "name": "深渊使徒·霜落", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "深渊咏者·渊火", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "深渊咏者·紫电", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "深罪浸礼者", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "嗜岩·兽境幼兽", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "嗜雷·兽境幼兽", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "嗜岩·兽境猎犬", + "moraRate": 2, + "type": "精英", + "tags": [] + }, + { + "name": "嗜雷·兽境猎犬", + "moraRate": 2, + "type": "精英", + "tags": [] + }, + { + "name": "黄金王兽", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "黯色空壳·旗令", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "黯色空壳·破阵", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "黯色空壳·近卫", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "黑蛇骑士·斩风之剑", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "黑蛇骑士·摧岩之钺", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "大型碎石隙境原体", + "moraRate": 2, + "type": "精英", + "tags": [] + }, + { + "name": "碎石隙境原体", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "大型狂蔓隙境原体", + "moraRate": 2, + "type": "精英", + "tags": [] + }, + { + "name": "狂蔓隙境原体", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "深邃拟覆叶", + "moraRate": 3, + "type": "精英", + "tags": [ + "次数盾" + ] + }, + { + "name": "深邃摹结株", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "荒野幽徒", + "moraRate": 1, + "type": "精英", + "tags": [ + "狂猎" + ] + }, + { + "name": "荒野狂狩士", + "moraRate": 2, + "type": "精英", + "tags": [ + "狂猎" + ] + }, + { + "name": "愚人众先遣队·火统游击兵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众先遣队·水铳重卫士", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众先遣队·风拳前锋军", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众先遣队·雷锤前锋军", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众先遣队·冰铳重卫士", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众先遣队·岩使游击兵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众·火之债务处理人", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "愚人众·雷莹术士", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "愚人众·冰萤术士", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "愚人众·藏镜仕女", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "愚人众·风役人", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "愚人众·霜役人", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "愚人众特辖队·线列军", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众特辖队·支援兵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众特辖队·榴铳手", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众特辖队·先锋士", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众特辖队·疗愈师", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众特辖队·掷弹兵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众特辖队·火刃突击队", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众特辖队·冰雹重炮手", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "愚人众特辖队·雷霰近卫军", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "巡陆艇·近战攻坚型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "巡陆艇·近战斥候型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "巡陆艇·强侦攻坚型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "巡陆艇·强侦斥候型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "巡陆艇·强侦地效型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "巡陆艇·尖端全能攻坚型", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "巡陆艇·尖端全能斥候型", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "巡陆艇·尖端火力地效型", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "遗迹守卫", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "遗迹猎者", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "遗迹重机", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "遗迹巨蛇", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "遗迹巡弋者", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "遗迹歼击者", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "遗迹防卫者", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "遗迹侦察者", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "恒常机关阵列", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "遗迹龙兽·地巡", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "遗迹龙兽·空巡", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "兆载永劫龙兽", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "元能构装体·力场发生器", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "元能构装体·重塑仪", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "元能构装体·勘探机", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "半永恒统辖矩阵", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "机关·侦察记录型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "机关·算力增幅器", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "机关·水下勘测型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "机关·地质勘探型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "机关·水下巡游型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "机关·深海攻击型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "机关·灵活采集型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "机关·区域警戒型", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "攻坚特化型机关", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "压制特化型机关", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "歼灭特化型机关", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "建造特化型机关", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "冰风组曲", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "实验性场力发生装置", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "魔偶剑鬼", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "秘源机兵·寻捕械", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "秘源机兵·构型械", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "秘源机兵·统御械", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "重拳出击鸭", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "盗宝团·斥候", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·火之药剂师", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·水之药剂师", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·雷之药剂师", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·冰之药剂师", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·杂工", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·神射手", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·掘墓者", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·海上男儿", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·拳术家", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "盗宝团·粉碎者", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "野伏·阵刀番", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "野伏·火伏番", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "野伏·机巧番", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "海乱鬼·炎威", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "海乱鬼·雷腾", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·阵前斧手", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·机弩兵", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·鸦喙戟手", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·破阵者", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·刀舞者", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·沙中净水", + "moraRate": 1.5, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·炽阳凝冰", + "moraRate": 1.5, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·白日鸣雷", + "moraRate": 1.5, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·灵风猎手", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·魔岩役使", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·炽沙叙事人", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "镀金旅团·叶轮舞者", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "铸砂勇士·叩问人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "铸砂勇士·碎盾者", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "铸砂勇士·投矛手", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "疾讯勇士·引索客", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "疾讯勇士·荡风斥候", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "疾讯勇士·重刃讯使", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "流刃勇士·游击人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "流刃勇士·锯脂者", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "流刃勇士·掷叉猎手", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "结羽勇士·腾空士", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "结羽勇士·削羽人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "结羽勇士·驭空客", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "灵觉勇士·执意师", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "灵觉勇士·控念师", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "灵觉勇士·冥思者", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "横蛮勇士·冲撞手", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "横蛮勇士·摔跤客", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "横蛮勇士·抓扑人", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "嵴锋龙武士·碎晶打者", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "嵴锋龙武士·破岩锐刃", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "匿叶龙武士·旋锯飞叶", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "匿叶龙武士·流火鸣空", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "鳍游龙武士·穿浪之梭", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "鳍游龙武士·裂礁之涛", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "绒翼龙武士·膛星之锤", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "绒翼龙武士·长空明焰", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "暝视龙武士·寒涌持者", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "暝视龙武士·冰晶炮手", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "突角龙武士·破空轰动", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "突角龙武士·追缉灵光", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "灵觉隐修的迷者", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "炽热骗骗花", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "电气骗骗花", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "冰霜骗骗花", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "爆炎树", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "掣电树", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "急冻树", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "幼岩龙蜥", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "岩龙蜥", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "古岩龙蜥", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "深海龙蜥·原种", + "moraRate": 3, + "type": "精英", + "tags": [] + }, + { + "name": "深海龙蜥·啮冰", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "深海龙蜥·吞雷", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "水萤", + "moraRate": 3, + "type": "普通", + "tags": [] + }, + { + "name": "雷萤", + "moraRate": 3, + "type": "普通", + "tags": [] + }, + { + "name": "冰萤", + "moraRate": 3, + "type": "普通", + "tags": [] + }, + { + "name": "浮游水蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "浮游风蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "浮游草蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "旋转火蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "旋转雷蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "旋转冰蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "伸缩火蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "伸缩风蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "伸缩雷蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "伸缩岩蕈兽", + "moraRate": 1, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "陆行水本真蕈", + "moraRate": 2, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "有翼草本真蕈", + "moraRate": 2, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "有翼冰本真蕈", + "moraRate": 2, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "陆行岩本真蕈", + "moraRate": 2, + "type": "普通", + "tags": [ + "蕈兽" + ] + }, + { + "name": "翠翎恐蕈", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "圣骸角鳄", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "圣骸牙兽", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "圣骸赤鹫", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "圣骸毒蝎", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "圣骸飞蛇", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "风蚀沙虫", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "膨膨兽", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "猎刀鳐·绿", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "猎刀鳐·蓝", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "重甲蟹·红", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "重甲蟹·绿", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "坚盾重甲蟹", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "铁甲熔火帝皇", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "帽子水母·黄", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "帽子水母·蓝", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "泡泡海马·紫", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "泡泡海马·蓝", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "泡泡海马·褐", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "泡泡雄海马", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "千年珍珠骏麟", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "球球章鱼·红", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "球球章鱼·褐", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "天使海兔·蓝", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "天使海兔·红", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "大天使海兔", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "玄文兽", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "隐山猊兽", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "魔像禁卫", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "魔像督军", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "幼嵴锋龙", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "嵴锋龙", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "幼鳍游龙", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "鳍游龙", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "幼匿叶龙", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "匿叶龙", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "贪食匿叶龙山王", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "幼绒翼龙", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "绒翼龙", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "金焰绒翼龙暴君", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "幼暝视龙", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "暝视龙", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "幼突角龙", + "moraRate": 1, + "type": "普通", + "tags": [] + }, + { + "name": "突角龙", + "moraRate": 2, + "type": "普通", + "tags": [] + }, + { + "name": "熔岩游像·蚀土者", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "熔岩游像·流燃体", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "熔岩辉龙像", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "窟岩·大灵显化身", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "溯流·大灵显化身", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "疾叶·大灵显化身", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "凛冽·大灵显化身", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "焚燃·大灵显化身", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "雳震·大灵显化身", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "炉壳山鼬", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "蕴光奇羊", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "蕴光刃犀", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "蕴光璇蛸", + "moraRate": 1, + "type": "精英", + "tags": [] + }, + { + "name": "蕴光月幻蝶", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "裂空的魔龙", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "北风的王狼,奔狼的领主", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "「公子」", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "若陀龙王", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "「女士」", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "祸津御建鸣神命", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "「正机之神」", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "阿佩普的绿洲守望者", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "吞星之鲸", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "「仆人」", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "蚀灭的源焰之主", + "moraRate": 1, + "type": "首领", + "tags": [] + }, + { + "name": "门扉前的弈局", + "moraRate": 1, + "type": "首领", + "tags": [] + } +] \ No newline at end of file diff --git a/repo/js/采集cd管理/pathing/路径组1/占位使用,请无视.txt b/repo/js/采集cd管理/assets/targetItems/保留/占位.js similarity index 100% rename from repo/js/采集cd管理/pathing/路径组1/占位使用,请无视.txt rename to repo/js/采集cd管理/assets/targetItems/保留/占位.js diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/星银矿石.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/星银矿石.png new file mode 100644 index 000000000..767fd3a2b Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/星银矿石.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/水晶块.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/水晶块.png new file mode 100644 index 000000000..e2ab9cc41 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/水晶块.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/白铁块.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/白铁块.png new file mode 100644 index 000000000..c44f2c4e7 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/白铁块.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/紫晶块.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/紫晶块.png new file mode 100644 index 000000000..ac992df43 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/紫晶块.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/萃凝晶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/萃凝晶.png new file mode 100644 index 000000000..2327f9520 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/萃凝晶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/虹滴晶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/虹滴晶.png new file mode 100644 index 000000000..5b4ebc127 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/虹滴晶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/铁块.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/铁块.png new file mode 100644 index 000000000..b950b5100 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/铁块.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/魔晶块.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/魔晶块.png new file mode 100644 index 000000000..90c2a417b Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/A矿/魔晶块.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/嘟嘟莲.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/嘟嘟莲.png new file mode 100644 index 000000000..980c9c2cb Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/嘟嘟莲.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/塞西莉亚花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/塞西莉亚花.png new file mode 100644 index 000000000..b0719ab11 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/塞西莉亚花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/小灯草.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/小灯草.png new file mode 100644 index 000000000..177c397ad Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/小灯草.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/慕风蘑菇.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/慕风蘑菇.png new file mode 100644 index 000000000..c3f0ef9ad Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/慕风蘑菇.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/落落莓.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/落落莓.png new file mode 100644 index 000000000..3ab4617f1 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/落落莓.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/蒲公英籽.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/蒲公英籽.png new file mode 100644 index 000000000..4c465572d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/蒲公英籽.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/钩钩果.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/钩钩果.png new file mode 100644 index 000000000..0e60654d0 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/钩钩果.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/风车菊.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/风车菊.png new file mode 100644 index 000000000..c7458df0e Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/B蒙德区域特产/风车菊.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/夜泊石.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/夜泊石.png new file mode 100644 index 000000000..1209d320e Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/夜泊石.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/星螺.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/星螺.png new file mode 100644 index 000000000..c7a5cc314 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/星螺.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/清心.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/清心.png new file mode 100644 index 000000000..d8a0e6ee9 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/清心.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/清水玉.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/清水玉.png new file mode 100644 index 000000000..d6aa1261f Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/清水玉.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/琉璃百合.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/琉璃百合.png new file mode 100644 index 000000000..d8dfaa473 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/琉璃百合.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/琉璃袋.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/琉璃袋.png new file mode 100644 index 000000000..a8510fde8 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/琉璃袋.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/石珀.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/石珀.png new file mode 100644 index 000000000..eb5c67623 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/石珀.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/绝云椒椒.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/绝云椒椒.png new file mode 100644 index 000000000..7cfb76d5f Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/绝云椒椒.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/霓裳花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/霓裳花.png new file mode 100644 index 000000000..a35fe5f3b Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/C璃月区域特产/霓裳花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/天云草实.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/天云草实.png new file mode 100644 index 000000000..681213804 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/天云草实.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/幽灯蕈.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/幽灯蕈.png new file mode 100644 index 000000000..b9d668360 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/幽灯蕈.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/晶化骨髓.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/晶化骨髓.png new file mode 100644 index 000000000..9a80d814d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/晶化骨髓.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/海灵芝.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/海灵芝.png new file mode 100644 index 000000000..18bb3d473 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/海灵芝.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/珊瑚真珠.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/珊瑚真珠.png new file mode 100644 index 000000000..131b4f2e9 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/珊瑚真珠.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/绯樱绣球.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/绯樱绣球.png new file mode 100644 index 000000000..7ce3319d8 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/绯樱绣球.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/血斛.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/血斛.png new file mode 100644 index 000000000..b368271b8 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/血斛.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/鬼兜虫.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/鬼兜虫.png new file mode 100644 index 000000000..53d3d369a Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/鬼兜虫.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/鸣草.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/鸣草.png new file mode 100644 index 000000000..de00853ca Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/D稻妻区域特产/鸣草.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/万相石.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/万相石.png new file mode 100644 index 000000000..43ca7e3dd Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/万相石.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/劫波莲.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/劫波莲.png new file mode 100644 index 000000000..5445f66fc Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/劫波莲.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/圣金虫.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/圣金虫.png new file mode 100644 index 000000000..b01231dbb Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/圣金虫.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/帕蒂沙兰.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/帕蒂沙兰.png new file mode 100644 index 000000000..a34a32ac1 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/帕蒂沙兰.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/悼灵花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/悼灵花.png new file mode 100644 index 000000000..247e51e53 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/悼灵花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/月莲.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/月莲.png new file mode 100644 index 000000000..5da075d44 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/月莲.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/树王圣体菇.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/树王圣体菇.png new file mode 100644 index 000000000..2939ebf0b Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/树王圣体菇.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/沙脂蛹.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/沙脂蛹.png new file mode 100644 index 000000000..af509eae2 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/沙脂蛹.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/赤念果.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/赤念果.png new file mode 100644 index 000000000..db0c3e606 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/E须弥区域特产/赤念果.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/初露之源.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/初露之源.png new file mode 100644 index 000000000..fb895b20d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/初露之源.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/子探测单元.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/子探测单元.png new file mode 100644 index 000000000..1d649fb56 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/子探测单元.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/幽光星星.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/幽光星星.png new file mode 100644 index 000000000..fc5698576 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/幽光星星.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/柔灯铃.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/柔灯铃.png new file mode 100644 index 000000000..db707ba30 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/柔灯铃.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/海露花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/海露花.png new file mode 100644 index 000000000..a57debac6 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/海露花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/湖光铃兰.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/湖光铃兰.png new file mode 100644 index 000000000..ac70f231e Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/湖光铃兰.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/苍晶螺.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/苍晶螺.png new file mode 100644 index 000000000..392edf737 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/苍晶螺.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/虹彩薔薇.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/虹彩薔薇.png new file mode 100644 index 000000000..6f0dff302 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/F枫丹区域特产/虹彩薔薇.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/云岩裂叶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/云岩裂叶.png new file mode 100644 index 000000000..08c67a338 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/云岩裂叶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/微光角菌.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/微光角菌.png new file mode 100644 index 000000000..e14a1cc44 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/微光角菌.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/枯叶紫英.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/枯叶紫英.png new file mode 100644 index 000000000..5ee8038f9 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/枯叶紫英.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/浪沫羽鳃.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/浪沫羽鳃.png new file mode 100644 index 000000000..1c0b5ea93 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/浪沫羽鳃.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/灼灼彩菊.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/灼灼彩菊.png new file mode 100644 index 000000000..9824c0d3f Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/灼灼彩菊.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/琉鳞石.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/琉鳞石.png new file mode 100644 index 000000000..715a5b79a Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/琉鳞石.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/肉龙掌.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/肉龙掌.png new file mode 100644 index 000000000..3135718ac Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/肉龙掌.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/青蜜莓.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/青蜜莓.png new file mode 100644 index 000000000..ef8785892 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/G纳塔区域特产/青蜜莓.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/H挪德卡莱区域特产/便携轴承.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/H挪德卡莱区域特产/便携轴承.png new file mode 100644 index 000000000..9fecf4e22 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/H挪德卡莱区域特产/便携轴承.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/H挪德卡莱区域特产/月落银.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/H挪德卡莱区域特产/月落银.png new file mode 100644 index 000000000..198d1c8fc Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/H挪德卡莱区域特产/月落银.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/H挪德卡莱区域特产/霜盏花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/H挪德卡莱区域特产/霜盏花.png new file mode 100644 index 000000000..148ce0b97 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/H挪德卡莱区域特产/霜盏花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/久雨莲.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/久雨莲.png new file mode 100644 index 000000000..11367b52a Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/久雨莲.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/冰雾花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/冰雾花.png new file mode 100644 index 000000000..d6b681dab Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/冰雾花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/发光髓(3种)/吉光虫.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/发光髓(3种)/吉光虫.png new file mode 100644 index 000000000..c05b97046 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/发光髓(3种)/吉光虫.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/发光髓(3种)/燃素蜜虫.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/发光髓(3种)/燃素蜜虫.png new file mode 100644 index 000000000..d4b21ba21 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/发光髓(3种)/燃素蜜虫.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/发光髓(3种)/萤火虫.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/发光髓(3种)/萤火虫.png new file mode 100644 index 000000000..fd0911c58 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/发光髓(3种)/萤火虫.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/奇异的牙齿.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/奇异的牙齿.png new file mode 100644 index 000000000..50c51fd0e Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/奇异的牙齿.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/寒涌石.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/寒涌石.png new file mode 100644 index 000000000..880c544dd Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/寒涌石.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/冰晶蝶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/冰晶蝶.png new file mode 100644 index 000000000..c0db7f645 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/冰晶蝶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/岩晶蝶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/岩晶蝶.png new file mode 100644 index 000000000..6d22cebd4 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/岩晶蝶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/月萤虫.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/月萤虫.png new file mode 100644 index 000000000..d55550da7 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/月萤虫.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/水晶蝶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/水晶蝶.png new file mode 100644 index 000000000..e1c02df49 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/水晶蝶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/火晶蝶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/火晶蝶.png new file mode 100644 index 000000000..a6b32907c Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/火晶蝶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/草晶蝶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/草晶蝶.png new file mode 100644 index 000000000..a81ee36e6 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/草晶蝶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/雷晶蝶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/雷晶蝶.png new file mode 100644 index 000000000..6987ad5f1 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/雷晶蝶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/风晶蝶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/风晶蝶.png new file mode 100644 index 000000000..7e20d5147 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/晶核(8种)/风晶蝶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/毗波耶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/毗波耶.png new file mode 100644 index 000000000..02a621dcd Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/毗波耶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/烈焰花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/烈焰花.png new file mode 100644 index 000000000..fdad7702f Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/烈焰花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/烬芯花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/烬芯花.png new file mode 100644 index 000000000..6919675c6 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/烬芯花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/电气水晶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/电气水晶.png new file mode 100644 index 000000000..e63d36447 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/电气水晶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/苦种.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/苦种.png new file mode 100644 index 000000000..62e5d118f Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/苦种.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/嗜髓蜥.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/嗜髓蜥.png new file mode 100644 index 000000000..6ff99f684 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/嗜髓蜥.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/红角蜥.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/红角蜥.png new file mode 100644 index 000000000..472fd1490 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/红角蜥.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/绿角蜥.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/绿角蜥.png new file mode 100644 index 000000000..717f1cb78 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/绿角蜥.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/蓝角蜥.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/蓝角蜥.png new file mode 100644 index 000000000..92226b0d7 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/蓝角蜥.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/赤尾蜥.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/赤尾蜥.png new file mode 100644 index 000000000..9bb5b7fd3 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蜥蜴尾巴(5种)/赤尾蜥.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蝴蝶.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蝴蝶.png new file mode 100644 index 000000000..16ce4f212 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/蝴蝶.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/丛林树蛙.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/丛林树蛙.png new file mode 100644 index 000000000..bbb86e66f Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/丛林树蛙.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/泥蛙.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/泥蛙.png new file mode 100644 index 000000000..48b48e015 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/泥蛙.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/蓝蛙.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/蓝蛙.png new file mode 100644 index 000000000..0429465eb Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/蓝蛙.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/青蛙.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/青蛙.png new file mode 100644 index 000000000..75a64f128 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/青蛙(4种)/青蛙.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/马尾.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/马尾.png new file mode 100644 index 000000000..f641c350d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/马尾.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/鳅鳅宝玉(3种)/晴天鳅鳅.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/鳅鳅宝玉(3种)/晴天鳅鳅.png new file mode 100644 index 000000000..0c740d918 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/鳅鳅宝玉(3种)/晴天鳅鳅.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/鳅鳅宝玉(3种)/落日鳅鳅.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/鳅鳅宝玉(3种)/落日鳅鳅.png new file mode 100644 index 000000000..dc13006b6 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/鳅鳅宝玉(3种)/落日鳅鳅.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/鳅鳅宝玉(3种)/金鳅鳅.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/鳅鳅宝玉(3种)/金鳅鳅.png new file mode 100644 index 000000000..98a9ad731 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/I素材/鳅鳅宝玉(3种)/金鳅鳅.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/兽肉.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/兽肉.png new file mode 100644 index 000000000..52351824d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/兽肉.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/冷鲜肉.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/冷鲜肉.png new file mode 100644 index 000000000..960773d28 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/冷鲜肉.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/卷心菜.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/卷心菜.png new file mode 100644 index 000000000..5853925c3 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/卷心菜.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/土豆.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/土豆.png new file mode 100644 index 000000000..cdff8e4f4 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/土豆.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/堇瓜.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/堇瓜.png new file mode 100644 index 000000000..2840d1bd1 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/堇瓜.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/墩墩桃.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/墩墩桃.png new file mode 100644 index 000000000..ba8ea0423 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/墩墩桃.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/夏槲果.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/夏槲果.png new file mode 100644 index 000000000..31c53e088 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/夏槲果.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/宿影花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/宿影花.png new file mode 100644 index 000000000..973a4a01d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/宿影花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/松果.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/松果.png new file mode 100644 index 000000000..1a9638000 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/松果.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/松茸.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/松茸.png new file mode 100644 index 000000000..b18b32f89 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/松茸.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/枣椰.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/枣椰.png new file mode 100644 index 000000000..a5bed37c7 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/枣椰.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/树莓.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/树莓.png new file mode 100644 index 000000000..64dafa7d3 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/树莓.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/汐藻.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/汐藻.png new file mode 100644 index 000000000..2316eb761 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/汐藻.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/海草.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/海草.png new file mode 100644 index 000000000..d081ea37a Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/海草.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/澄晶实.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/澄晶实.png new file mode 100644 index 000000000..6fc281fdb Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/澄晶实.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/甜甜花.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/甜甜花.png new file mode 100644 index 000000000..fc70292b7 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/甜甜花.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/白灵果.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/白灵果.png new file mode 100644 index 000000000..67f002bc3 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/白灵果.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/白萝卜.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/白萝卜.png new file mode 100644 index 000000000..6395ac636 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/白萝卜.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/神秘的肉.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/神秘的肉.png new file mode 100644 index 000000000..d09ecc8c8 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/神秘的肉.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/禽肉.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/禽肉.png new file mode 100644 index 000000000..3be94c9ad Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/禽肉.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/竹笋.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/竹笋.png new file mode 100644 index 000000000..31f445dad Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/竹笋.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/红果果菇.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/红果果菇.png new file mode 100644 index 000000000..70ee9ba28 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/红果果菇.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/胡萝卜.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/胡萝卜.png new file mode 100644 index 000000000..b9ce79b45 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/胡萝卜.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/茉洁草.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/茉洁草.png new file mode 100644 index 000000000..79874c0aa Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/茉洁草.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/莲蓬.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/莲蓬.png new file mode 100644 index 000000000..792f8d58d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/莲蓬.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/薄荷.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/薄荷.png new file mode 100644 index 000000000..8a6859db3 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/薄荷.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/蘑菇.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/蘑菇.png new file mode 100644 index 000000000..084a2b10f Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/蘑菇.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/太阳蟹.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/太阳蟹.png new file mode 100644 index 000000000..5bfea479d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/太阳蟹.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/将军蟹.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/将军蟹.png new file mode 100644 index 000000000..d61ba0cc3 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/将军蟹.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/海蓝蟹.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/海蓝蟹.png new file mode 100644 index 000000000..185a311a1 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/海蓝蟹.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/薄红蟹.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/薄红蟹.png new file mode 100644 index 000000000..be22c23d2 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/薄红蟹.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/黃金蟹.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/黃金蟹.png new file mode 100644 index 000000000..68f94423d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/螃蟹(5种)/黃金蟹.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/金鱼草.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/金鱼草.png new file mode 100644 index 000000000..205ad8a5b Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/金鱼草.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/须弥蔷薇.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/须弥蔷薇.png new file mode 100644 index 000000000..b6f52aa2e Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/须弥蔷薇.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/颗粒果.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/颗粒果.png new file mode 100644 index 000000000..20853a0ba Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/颗粒果.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/香辛果.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/香辛果.png new file mode 100644 index 000000000..872fe29d2 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/香辛果.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鱼肉/蓝鳍鲈鱼.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鱼肉/蓝鳍鲈鱼.png new file mode 100644 index 000000000..f7021d319 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鱼肉/蓝鳍鲈鱼.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鱼肉/黃金鲈鱼.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鱼肉/黃金鲈鱼.png new file mode 100644 index 000000000..8316bc56b Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鱼肉/黃金鲈鱼.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鱼肉/黑背鲈鱼.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鱼肉/黑背鲈鱼.png new file mode 100644 index 000000000..e6c4d47e5 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鱼肉/黑背鲈鱼.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/流沙鳗鳗.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/流沙鳗鳗.png new file mode 100644 index 000000000..ce1719c88 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/流沙鳗鳗.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/深海鳗鳗.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/深海鳗鳗.png new file mode 100644 index 000000000..b9cdbe16f Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/深海鳗鳗.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/藤纹陆鳗鳗.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/藤纹陆鳗鳗.png new file mode 100644 index 000000000..27826e593 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/藤纹陆鳗鳗.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/赤鳍陆鳗鳗.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/赤鳍陆鳗鳗.png new file mode 100644 index 000000000..a98a06e6d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鳗肉(4种)/赤鳍陆鳗鳗.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鸟蛋.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鸟蛋.png new file mode 100644 index 000000000..254d185ee Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/J食材/鸟蛋.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/小麦.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/小麦.png new file mode 100644 index 000000000..f31f51239 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/小麦.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/日落果.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/日落果.png new file mode 100644 index 000000000..99e09e5da Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/日落果.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/星蕈.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/星蕈.png new file mode 100644 index 000000000..4d293c140 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/星蕈.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/泡泡桔.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/泡泡桔.png new file mode 100644 index 000000000..0926bd886 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/泡泡桔.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/烛伞蘑菇.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/烛伞蘑菇.png new file mode 100644 index 000000000..f0e988650 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/烛伞蘑菇.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/番茄.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/番茄.png new file mode 100644 index 000000000..8fb1829ae Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/番茄.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/苹果.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/苹果.png new file mode 100644 index 000000000..4eac9f96d Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/苹果.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/鱼肉.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/鱼肉.png new file mode 100644 index 000000000..36ff3b095 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/鱼肉.png differ diff --git a/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/黑麦.png b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/黑麦.png new file mode 100644 index 000000000..4e4bd3558 Binary files /dev/null and b/repo/js/采集cd管理/assets/targetItems/其余材料图-实用版/K直接作为食物的采集物/黑麦.png differ diff --git a/repo/js/采集cd管理/assets/强制黑芙.json b/repo/js/采集cd管理/assets/强制黑芙.json new file mode 100644 index 000000000..4d49225d8 --- /dev/null +++ b/repo/js/采集cd管理/assets/强制黑芙.json @@ -0,0 +1,40 @@ +{ + "info": { + "name": "强制黑芙", + "type": "collect", + "authors": [ + { + "name": "汐", + "links": "" + } + ], + "version": "1.0", + "description": "", + "map_name": "Enkanomiya", + "bgi_version": "0.45.0", + "tags": [], + "last_modified_time": 1755101630357, + "enable_monster_loot_split": false, + "map_match_method": "" + }, + "positions": [ + { + "id": 1, + "x": 97.65771484375, + "y": 255.2640380859375, + "action": "", + "move_mode": "walk", + "action_params": "", + "type": "teleport" + }, + { + "id": 2, + "x": 97.65771484375, + "y": 255.2640380859375, + "action": "log_output", + "move_mode": "walk", + "action_params": "重置[芙宁娜]状态——黑芙", + "type": "orientation" + } + ] +} \ No newline at end of file diff --git a/repo/js/采集cd管理/assets/滚轮上翻.json b/repo/js/采集cd管理/assets/滚轮上翻.json new file mode 100644 index 000000000..9a2a48841 --- /dev/null +++ b/repo/js/采集cd管理/assets/滚轮上翻.json @@ -0,0 +1,25 @@ +{ + "macroEvents": [ + { + "type": 6, + "mouseX": 0, + "mouseY": 120, + "time": 0 + }, + { + "type": 6, + "mouseX": 0, + "mouseY": 0, + "time": 16 + } + ], + "info": { + "name": "滚轮上翻", + "description": "模拟鼠标滚轮向上滚动120单位", + "x": 0, + "y": 0, + "width": 1920, + "height": 1080, + "recordDpi": 1 + } +} \ No newline at end of file diff --git a/repo/js/采集cd管理/assets/滚轮下翻.json b/repo/js/采集cd管理/assets/滚轮下翻.json new file mode 100644 index 000000000..65cd26d7d --- /dev/null +++ b/repo/js/采集cd管理/assets/滚轮下翻.json @@ -0,0 +1,25 @@ +{ + "macroEvents": [ + { + "type": 6, + "mouseX": 0, + "mouseY": -120, + "time": 0 + }, + { + "type": 6, + "mouseX": 0, + "mouseY": 0, + "time": 16 + } + ], + "info": { + "name": "", + "description": "模拟鼠标滚轮向上滚动120单位", + "x": 0, + "y": 0, + "width": 1920, + "height": 1080, + "recordDpi": 1 + } +} \ No newline at end of file diff --git a/repo/js/采集cd管理/assets/烹饪界面.png b/repo/js/采集cd管理/assets/烹饪界面.png new file mode 100644 index 000000000..34b987ae1 Binary files /dev/null and b/repo/js/采集cd管理/assets/烹饪界面.png differ diff --git a/repo/js/采集cd管理/assets/白芙图标.png b/repo/js/采集cd管理/assets/白芙图标.png new file mode 100644 index 000000000..83af9dd50 Binary files /dev/null and b/repo/js/采集cd管理/assets/白芙图标.png differ diff --git a/repo/js/采集cd管理/assets/解除冰冻.png b/repo/js/采集cd管理/assets/解除冰冻.png new file mode 100644 index 000000000..8be24306a Binary files /dev/null and b/repo/js/采集cd管理/assets/解除冰冻.png differ diff --git a/repo/js/采集cd管理/blacklists/示例.json b/repo/js/采集cd管理/blacklists/示例.json new file mode 100644 index 000000000..07eb9159e --- /dev/null +++ b/repo/js/采集cd管理/blacklists/示例.json @@ -0,0 +1,5 @@ +[ + "烹饪", + "调查", + "汐酱" +] \ No newline at end of file diff --git a/repo/js/采集cd管理/main.js b/repo/js/采集cd管理/main.js index c3d3a52be..cdb0fcafa 100644 --- a/repo/js/采集cd管理/main.js +++ b/repo/js/采集cd管理/main.js @@ -1,3 +1,713 @@ + +/* ===== 强制模板匹配拾取(BEGIN) ===== */ +let targetItems = []; +let blacklist = []; +let blacklistSet = new Set(); +let gameRegion; +let state = { running: true, currentPathing: null }; +const rollingDelay = 25; +const pickupDelay = 100; +const timeMoveUp = Math.round((settings.timeMove || 1000) * 0.45); +const timeMoveDown = Math.round((settings.timeMove || 1000) * 0.55); +const targetItemPath = "assets/targetItems"; +const mainUITemplate = file.ReadImageMatSync("assets/MainUI.png"); +const itemFullTemplate = file.ReadImageMatSync("assets/itemFull.png"); +const fIcontemplate = file.ReadImageMatSync("assets/F_Dialogue.png"); +const accountName = settings.infoFileName || 默认账户; + +// 定义目标文件夹路径和记录文件路径 +const recordFolder = "record"; // 存储记录文件的文件夹路径 +const defaultTimeStamp = "2023-10-13T00:00:00.000Z"; // 固定的时间戳 + +// 从 settings 中读取用户配置,并设置默认值 +const userSettings = { + operationMode: settings.operationMode || "执行任务(若不存在索引文件则自动创建)", + pathGroup1CdType: settings.pathGroup1CdType || "", + pathGroup2CdType: settings.pathGroup2CdType || "", + pathGroup3CdType: settings.pathGroup3CdType || "", + otherPathGroupsCdTypes: settings.otherPathGroupsCdTypes || "", + partyNames: settings.partyNames || "", + skipTimeRanges: settings.skipTimeRanges || "", + infoFileName: settings.infoFileName || "默认账户", + disableJsons: settings.disableJsons || "" +}; + +// 解析禁用名单 +let disableArray = []; +if (userSettings.disableJsons) { + tmp = userSettings.disableJsons.split(';'); + for (k = 0; k < tmp.length; k++) { + s = tmp[k].trim(); + if (s) disableArray[disableArray.length] = s; + } +} + +// 将 partyNames 分割并存储到一个数组中 +const partyNamesArray = userSettings.partyNames.split(";").map(name => name.trim()); + +// 新增一个数组 pathGroupCdType,存储每个路径组的 cdtype 信息 +const pathGroupCdType = [ + userSettings.pathGroup1CdType, + userSettings.pathGroup2CdType, + userSettings.pathGroup3CdType +]; + +// 如果 otherPathGroupsCdTypes 不为空,将其分割为数组并添加到 pathGroupCdType 中 +if (userSettings.otherPathGroupsCdTypes) { + pathGroupCdType.push(...userSettings.otherPathGroupsCdTypes.split(";")); +} + +// 当infoFileName为空时,将其改为由其他自定义配置决定的一个字符串 +if (!userSettings.infoFileName) { + userSettings.infoFileName = [ + userSettings.pathGroup1CdType, + userSettings.pathGroup2CdType, + userSettings.pathGroup3CdType, + userSettings.otherPathGroupsCdTypes, + ].join("."); +} + +(async function () { + /* ===== 零基构建 settings.json(BEGIN) ===== */ + const SETTINGS_FILE = `settings.json`; + const PATHINGS_ROOT = `pathing`; + + /* 1. 扫描 pathing 下第一层目录 */ + const filesInFolder = file.ReadPathSync(PATHINGS_ROOT); + const subFolders = []; // 用于存储第一层文件夹路径 + for (const filePath of filesInFolder) { + if (file.IsFolder(filePath)) { + // 如果是文件夹,先存储到临时数组中 + subFolders.push(filePath); + } + } + + /* 2. 提取文件夹名称 */ + const firstLevelDirs = subFolders + .map(folderPath => folderPath.replace(`${PATHINGS_ROOT}/`, '').replace(`${PATHINGS_ROOT}\\`, '')) // 去掉前缀 `pathing/` 或 `pathing\` + .filter(Boolean); // 去掉空字符串 + + let uniqueDirs = Array.from(new Set(firstLevelDirs)); // 去重 + + /* 3. 移除多余的 'pathing' 选项 */ + //uniqueDirs = uniqueDirs.filter(dir => dir !== 'pathing'); + + /* 4. 路径组数量 */ + const groupCount = Math.min(99, Math.max(1, parseInt(settings.groupCount || '3'))); + + /* 5. 硬编码构建全新 JSON */ + const newSettings = []; + + /* 5.1 最前端:onlyRefresh + groupCount */ + newSettings.push( + { + name: "onlyRefresh", + type: "checkbox", + label: "勾选后仅刷新自定义配置,不运行" + }, + { + name: "groupCount", + type: "input-text", + label: "需要生成几个路径组配置(1-99)", + default: "3" + } + ); + + /* 5.2 操作模式 */ + newSettings.push({ + name: "operationMode", + type: "select", + label: "选择操作模式", + options: [ + "执行任务(若不存在索引文件则自动创建)", + "重新生成索引文件(用于强制刷新CD)" + ] + }); + + /* 5.3 固定尾部节点(原样照搬) */ + newSettings.push( + { + "name": "timeRule", + "type": "input-text", + "label": "本地时间-不运行时段\n示例写法:\n 单个小时:8\n 连续区间:8-11 或 23:11-23:55(可省略分钟)\n 多项分隔:用中文逗号【,】\n规则:\n 只写小时:开始=整点,结束=59分;跨天自动识别\n 含分钟:按实际时分计算\n 提前10分钟结束并等待到限制时段开始\n留空=全天可运行" + }, + { + "name": "infoFileName", + "type": "input-text", + "label": "输入用于存储信息的文件名,只在不同账号分别管理CD时填写" + }, + { + "name": "disableJsons", + "type": "input-text", + "label": "填写需要禁用的路线的关键词,使用中文分号分隔\n文件路径含有相关关键词的路线会被禁用" + } + ); + + /* 5.4 路径组节点(整体移到最后) */ + for (let g = 1; g <= groupCount; g++) { + /* CD类型 */ + newSettings.push({ + name: `pathGroup${g}CdType`, + type: "select", + label: `选择路径组${g}CD类型,不选不运行该路径组`, + options: [ + "", + "1次0点刷新", + "2次0点刷新", + "3次0点刷新", + "4点刷新", + "12小时刷新", + "24小时刷新", + "46小时刷新" + ] + }); + + /* 文件夹 */ + newSettings.push({ + name: `pathGroup${g}FolderName`, + type: "select", + label: `选择路径组${g}文件夹(pathing下第一层)`, + options: ["", ...uniqueDirs] + }); + + /* 队伍名 */ + newSettings.push({ + name: `pathGroup${g}PartyName`, + type: "input-text", + label: `输入路径组${g}使用配队名称` + }); + } + + /* 6. 一次性写入 & 日志 */ + await file.writeText(SETTINGS_FILE, JSON.stringify(newSettings, null, 2), false); + log.info(`已全新生成 settings.json,共 ${groupCount} 个路径组配置。`); + log.info(`扫描到可供选择的文件夹:${uniqueDirs.join(' | ')}`); + + /* 仅刷新模式出口 */ + if (settings.onlyRefresh) { + settings.onlyRefresh = false; + return; + } + /* ===== 零基构建 settings.json(END) ===== */ + + try { + /* ===== 读取新 settings ===== */ + const groupCount = Math.min(99, Math.max(1, parseInt(settings.groupCount || '3'))); + const folderNames = []; + const partyNames = []; + for (let g = 1; g <= groupCount; g++) { + folderNames.push(settings[`pathGroup${g}FolderName`] || ''); + partyNames.push(settings[`pathGroup${g}PartyName`] || ''); + } + + // 获取子文件夹路径 + const subFolderName = userSettings.infoFileName; // 使用设置后的 infoFileName + const subFolderPath = `${recordFolder}/${subFolderName}`; + + // 读取子文件夹中的所有文件路径 + const filesInSubFolder = file.ReadPathSync(subFolderPath); + + // 检查record.txt文件是否存在 + let indexDoExist = false; + for (const filePath of filesInSubFolder) { + const fileName = basename(filePath); // 提取文件名 + if (fileName === "record.txt") { + indexDoExist = true; + break; + } + } + + if (userSettings.operationMode === "重新生成索引文件(用于强制刷新CD)") { + log.info("重新生成索引文件模式,将覆盖现有索引文件"); + } + if (!indexDoExist) { + log.info("record.txt 文件不存在,将尝试生成索引文件"); + } + /* 禁用BGI原生拾取,强制模板匹配 */ + targetItems = await loadTargetItems(); + await loadBlacklist(true); + state.running = true; + + await fakeLog("采集cd管理", true, false, 1000); + + // 统一的 record.txt 文件路径 + const recordFilePath = `${subFolderPath}/record.txt`; + + // 读取 pathing 文件夹下的所有 .json 文件 + const pathingFolder = "pathing"; + const files = await readFolder(pathingFolder, true); + const filePaths = files.map(file => file.fullPath); + + // 用于存储符合条件的文件名的数组 + const jsonFileNames = []; + const entryMap = {}; + + // 如果 record.txt 文件存在,则读取对应的原文件 + if (indexDoExist) { + let pathGroupContent = await file.readText(recordFilePath); + let pathGroupEntries = pathGroupContent.trim().split('\n'); + + // 创建一个对象来存储 entryName 和 entryTimestamp 的映射 + for (let j = 0; j < pathGroupEntries.length; j++) { + const entryWithTimestamp = pathGroupEntries[j].trim(); + const [entryName, entryTimestamp] = entryWithTimestamp.split('::'); + entryMap[entryName] = entryTimestamp; + } + } + + // 遍历文件路径数组并提取文件名 + for (const filePath of filePaths) { + const fileName = basename(filePath); // 提取文件名 + if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 + const fileNameWithoutSuffix = removeJsonSuffix(fileName); // 移除 .json 后缀 + + // 给 routeTimeStamp 赋值为 defaultTimeStamp + let routeTimeStamp = defaultTimeStamp; + + if (indexDoExist && userSettings.operationMode !== "重新生成索引文件(用于强制刷新CD)" && entryMap[fileNameWithoutSuffix]) { + routeTimeStamp = entryMap[fileNameWithoutSuffix]; + } + + routeTimeStamp = `::${routeTimeStamp}`; + // 添加时间戳并存储 + jsonFileNames.push(`${fileNameWithoutSuffix}${routeTimeStamp}`); + } + } + + // 如果没有找到符合条件的文件,跳过当前路径组 + if (jsonFileNames.length === 0) { + log.info(`未找到符合条件的 .json 文件,record.txt 将为空`); + } + + // 将文件名数组转换为字符串,每个文件名占一行 + const fileNamesContent = jsonFileNames.join("\n"); + + // 将文件名写入记录文件 + const writeResult = file.writeTextSync(recordFilePath, fileNamesContent); + + if (writeResult) { + log.info(`文件名已成功写入: ${recordFilePath}`); + } else { + log.error(`写入文件失败: ${recordFilePath}`); + } + + { + + // 循环处理多个路径组 + for (let i = 1; i <= groupCount; i++) { + const currentCdType = settings[`pathGroup${i}CdType`] || ""; + if (!currentCdType) continue; // 跳过本组 + + const folder = folderNames[i - 1] || `路径组${i}`; + const targetFolder = `pathing/${folder}`; + + // 读取统一的 record.txt 文件内容 + let recordContent = await file.readText(recordFilePath); + let recordEntries = recordContent.trim().split('\n'); + + // 创建一个对象来存储 entryName 和 entryTimestamp 的映射 + const entryMap = {}; + for (let j = 0; j < recordEntries.length; j++) { + const entryWithTimestamp = recordEntries[j].trim(); + const [entryName, entryTimestamp] = entryWithTimestamp.split('::'); + entryMap[entryName] = entryTimestamp; + } + + // 读取路径组文件夹中的任务文件 + const files = await readFolder(targetFolder, true); + + if (userSettings.operationMode === "执行任务(若不存在索引文件则自动创建)") { + let groupNumber = i; + await genshin.returnMainUi(); + + try { + const filePaths = files.map(file => file.fullPath); + + // 读取 record.txt 文件内容 + let recordContent = await file.readText(recordFilePath); + let recordEntries = recordContent.trim().split('\n'); + let changedParty = false; + + for (const filePath of filePaths) { + const fileName = basename(filePath).replace('.json', ''); + const entry = recordEntries.find(e => e.startsWith(`${fileName}::`)); + const entryTimestamp = entry ? entry.split('::')[1] : null; + const entryDate = entryTimestamp ? new Date(entryTimestamp) : new Date(0); // 未记录的任务视为已刷新 + + const startTime = new Date(); + if (startTime <= entryDate) { + log.info(`当前任务 ${fileName} 未刷新,跳过任务`); + continue; // 跳过当前任务 + } + + if (await isTimeRestricted(settings.timeRule, 10)) { + break; + } + + let doSkip = false; + for (const keyword of disableArray) { + if (filePath.includes(keyword)) { + log.info(`路径文件 ${filePath} 包含禁用关键词 "${keyword}",跳过任务 ${fileName}`); + doSkip = true; + break; + } + } + if (doSkip) continue; + + // 切换到指定配队 + if (!changedParty) { + await switchPartyIfNeeded(partyNames[groupNumber - 1]); + changedParty = true; + } + // 伪造地图追踪开始的日志 + await fakeLog(fileName, false, true, 0); + + /* 并发拾取:与路线任务同生命周期 */ + state.currentPathing = { items: [] }; + state.running = true; + const pickupTask = recognizeAndInteract(); // 直接并发,无需包裹函数 + + // 日志输出当前任务信息 + log.info(`当前进度:路径组${i} ${folder} ${fileName} 为第 ${filePaths.indexOf(filePath) + 1}/${filePaths.length} 个`); + + // 执行路径文件 + try { + await pathingScript.runFile(filePath); + log.info(`执行任务: ${fileName}`); + } catch (error) { + log.error(`路径文件 ${filePath} 不存在或执行失败: ${error}`); + continue; // 跳过当前任务 + } + + // 捕获任务取消的信息并跳出循环 + try { + await sleep(1); + } catch (error) { + log.error(`发生错误: ${error}`); + break; // 终止循环 + } + + // 获取结束时间 + const endTime = new Date(); + + // 比较开始时间与结束时间 + const timeDiff = endTime.getTime() - startTime.getTime(); // 时间差(毫秒) + + // 伪造地图追踪结束的日志 + await fakeLog(fileName, false, false, timeDiff); + state.running = false; // 停止拾取 + await pickupTask; // 等待拾取线程结束 + + if (timeDiff > 3000) { // 时间差大于3秒 + // 获取当前路径组的 cdtype + const currentCdType = pathGroupCdType[groupNumber - 1] || "未知类型"; + + // 初始化 newTimestamp 和 nextAvailableTime + let newTimestamp; + let nextAvailableTime; + + // 根据 cdtype 执行不同的操作 + switch (currentCdType) { + case "1次0点刷新": + // 将任务文件中对应的时间戳改为下一个0点 + const tomorrow = new Date(startTime.getTime() + 24 * 60 * 60 * 1000); + tomorrow.setHours(0, 0, 0, 0); // 设置为下一个0点 + newTimestamp = tomorrow.toISOString(); + nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 + break; + + case "2次0点刷新": + // 将任务文件中对应的时间戳改为下下个0点 + const dayAfterTomorrow = new Date(startTime.getTime() + 48 * 60 * 60 * 1000); + dayAfterTomorrow.setHours(0, 0, 0, 0); // 设置为下下个0点 + newTimestamp = dayAfterTomorrow.toISOString(); + nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 + break; + + case "3次0点刷新": + // 将任务文件中对应的时间戳改为下下下个0点 + const twoDaysAfterTomorrow = new Date(startTime.getTime() + 72 * 60 * 60 * 1000); + twoDaysAfterTomorrow.setHours(0, 0, 0, 0); // 设置为下下下个0点 + newTimestamp = twoDaysAfterTomorrow.toISOString(); + nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 + break; + + case "4点刷新": + // 将任务文件中对应的时间戳改为下一个4点 + const next4AM = new Date(startTime.getTime()); + next4AM.setHours(4, 0, 0, 0); // 设置为当天的4点 + if (next4AM <= startTime) { + next4AM.setDate(next4AM.getDate() + 1); // 如果当前时间已过4点,则设置为下一天的4点 + } + newTimestamp = next4AM.toISOString(); + nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 + break; + + case "12小时刷新": + // 将任务文件中对应的时间戳改为开始时间后12小时0分0秒 + newTimestamp = new Date(startTime.getTime() + 12 * 60 * 60 * 1000).toISOString(); + nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 + break; + + case "24小时刷新": + // 将任务文件中对应的时间戳改为开始时间后24小时0分0秒 + newTimestamp = new Date(startTime.getTime() + 24 * 60 * 60 * 1000).toISOString(); + nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 + break; + + case "46小时刷新": + // 将任务文件中对应的时间戳改为开始时间后46小时0分0秒 + newTimestamp = new Date(startTime.getTime() + 46 * 60 * 60 * 1000).toISOString(); + nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 + break; + + default: + log.warn(`路径组${groupNumber} 的 cdtype 是 ${currentCdType},执行默认操作`); + // 默认操作:将下一个可用时间设置为开始时间 + newTimestamp = startTime.toISOString(); + nextAvailableTime = startTime.toLocaleString(); // 转换为本地时间格式 + break; + } + + // 更新任务文件中的时间戳 + const updatedEntry = `${fileName}::${newTimestamp}`; + if (entry) { + recordEntries[recordEntries.indexOf(entry)] = updatedEntry; + } else { + recordEntries.push(updatedEntry); + } + + // 写回 record.txt + const updatedRecordContent = recordEntries.join('\n'); + await file.writeText(recordFilePath, updatedRecordContent); + log.info(`本任务执行大于3秒,cd信息已更新,下一次可用时间为 ${nextAvailableTime}`); + } + } + log.info(`路径组${groupNumber} 的所有任务运行完成`); + } catch (error) { + log.error(`读取路径组文件时出错: ${error}`); + } + } + } + } + + } catch (error) { + log.error(`操作失败: ${error}`); + } + + + //伪造js开始的日志 + await fakeLog("采集cd管理", true, true, 0); +})(); + +async function recognizeAndInteract() { + let lastcenterYF = 0, lastItemName = "", thisMoveUpTime = 0, lastMoveDown = 0, blacklistCounter = 0; + gameRegion = captureGameRegion(); + while (state.running) { + gameRegion.dispose(); + gameRegion = captureGameRegion(); + if (++blacklistCounter % 33 === 0) { + await checkItemFullAndOCR(); + } + const centerYF = await findFIcon(); + if (!centerYF) { + if (await isMainUI()) { + await keyMouseScript.runFile(`assets/滚轮下翻.json`); + } + continue; + } + let itemName = null; + itemName = await performTemplateMatch(centerYF); + if (itemName) { + if (Math.abs(lastcenterYF - centerYF) <= 20 && lastItemName === itemName) { + await sleep(160); + lastcenterYF = -20; + lastItemName = null; + continue; + } + if (!blacklistSet.has(itemName)) { + keyPress("F"); + log.info(`交互或拾取:"${itemName}"`); + if (state.currentPathing) { + state.currentPathing.items.push(itemName); + state.currentPathing.items = [...new Set(state.currentPathing.items)].slice(-20); + } + lastcenterYF = centerYF; + lastItemName = itemName; + await sleep(pickupDelay); + } + } else { + lastItemName = ""; + } + const currentTime = Date.now(); + if (currentTime - lastMoveDown > timeMoveUp) { + await keyMouseScript.runFile(`assets/滚轮下翻.json`); + if (thisMoveUpTime === 0) thisMoveUpTime = currentTime; + if (currentTime - thisMoveUpTime >= timeMoveDown) { + lastMoveDown = currentTime; + thisMoveUpTime = 0; + } + } else { + await keyMouseScript.runFile(`assets/滚轮上翻.json`); + } + await sleep(rollingDelay); + } +} + +async function findFIcon() { + const roi = RecognitionObject.TemplateMatch(fIcontemplate, 1102, 335, 34, 400); + roi.Threshold = 0.95; + roi.InitTemplate(); + try { + const r = gameRegion.find(roi); + if (r.isExist()) return Math.round(r.y + r.height / 2); + + } catch (e) { + log.error(`findFIcon:${e.message}`); + } + await sleep(50); + return null; +} + +async function performTemplateMatch(centerYF) { + try { + for (const it of targetItems) { + const cnLen = Math.min([...it.itemName].filter(c => c >= '\u4e00' && c <= '\u9fff').length, 5); + const roi = RecognitionObject.TemplateMatch(it.template, 1219, centerYF - 15, 12 + 28 * cnLen + 2, 30); + roi.Threshold = it.Threshold; + roi.InitTemplate(); + if (gameRegion.find(roi).isExist()) { + return it.itemName; + } + } + } catch (e) { + log.error(`performTemplateMatch:${e.message}`); + } + return null; +} + +async function isMainUI() { + const roi = RecognitionObject.TemplateMatch(mainUITemplate, 0, 0, 150, 150); + for (let i = 0; i < 1 && state.running; i++) { + if (!gameRegion) gameRegion = captureGameRegion(); + try { + if (gameRegion.find(roi).isExist()) { + return true; + } + } catch (e) { + log.error(`isMainUI:${e.message}`); + } + await sleep(50); + } + return false; +} + +async function checkItemFullAndOCR() { + const fullRoi = RecognitionObject.TemplateMatch(itemFullTemplate, 0, 0, 1920, 1080); + try { + if (!gameRegion.find(fullRoi).isExist()) return; + } catch (e) { return; } + const TEXT_X = 560, TEXT_Y = 450, TEXT_W = 800, TEXT_H = 170; + let ocrText = null; + try { + const list = gameRegion.findMulti(RecognitionObject.ocr(TEXT_X, TEXT_Y, TEXT_W, TEXT_H)); + if (list.count) { + let longest = list[0]; + for (let i = 1; + i < list.count; + i++) if (list[i].text.length > longest.text.length) longest = list[i]; + ocrText = longest.text.replace(/[^\u4e00-\u9fa5]/g, ''); + } + } catch (e) { + log.error(`OCR:${e.message}`); + } if (!ocrText) return; + log.info(`背包满OCR:${ocrText}`); + + function calcMatchRatio(cnPart, txt) { + if (!cnPart || !txt) return 0; + const len = cnPart.length; + let maxMatch = 0; + for (let i = 0; i <= txt.length - len; i++) { + let match = 0; + for (let j = 0; j < len; j++) { + if (txt[i + j] === cnPart[j]) match++; + maxMatch = Math.max(maxMatch, match); + } + } + return maxMatch / len; + } + const ratioMap = new Map(); + for (const it of targetItems) { + const ratio = calcMatchRatio(it.itemName.replace(/[^\u4e00-\u9fa5]/g, ''), ocrText); + if (ratio > 0.75) { + ratioMap.set(it.itemName, ratio); + } + } + if (ratioMap.size === 0) return; + const maxRatio = Math.max(...ratioMap.values()); + const names = [...ratioMap.entries()].filter(([, r]) => r === maxRatio).map(([n]) => n).sort(); + log.warn(`背包满,黑名单加入:${names.join('、')}(${(maxRatio * 100).toFixed(1)}%)`); + for (const n of names) { + blacklistSet.add(n); + blacklist.push(n); + } + await loadBlacklist(false); +} + +// 加载拾取物图片 +async function loadTargetItems() { + let targetItemPath; + + targetItemPath = "assets/targetItems/"; + + const items = await readFolder(targetItemPath, false); + + // 统一预加载模板 + for (const it of items) { + try { + it.template = file.ReadImageMatSync(it.fullPath); + it.itemName = it.fileName.replace(/\.png$/i, ''); + + // 新增:解析括号中的阈值 + const match = it.fullPath.match(/[((](.*?)[))]/); // 匹配英文或中文括号 + if (match) { + const val = parseFloat(match[1]); + it.Threshold = (!isNaN(val) && val >= 0 && val <= 1) ? val : 0.85; + } else { + it.Threshold = 0.85; + } + } catch (error) { } + } + + return items; +} + +async function loadBlacklist(writeBack) { + try { + const raw = await file.readText(`blacklists/${accountName}.json`); + blacklist = [...new Set([...blacklist, ...JSON.parse(raw)])]; + } catch { /* 文件不存在就跳过 */ } + blacklistSet = new Set(blacklist); + + // 仅把 blacklist 中的中文部分合并到内存中的 settings.disableJsons + const chineseParts = blacklist + .map(name => name.replace(/[^\u4e00-\u9fa5]/g, '')) + .filter(Boolean); + + const existing = settings.disableJsons + ? settings.disableJsons.split(';').map(s => s.trim()).filter(Boolean) + : []; + + const merged = [...new Set([...existing, ...chineseParts])].sort().join(';'); + settings.disableJsons = merged; + + if (writeBack) { + await file.writeText(`blacklists/${accountName}.json`, JSON.stringify(blacklist, null, 2), false); + } + // 实时同步禁用关键词数组 + disableArray = settings.disableJsons.split(';').map(s => s.trim()).filter(Boolean); +} + // fakeLog 函数,使用方法:将本函数放在主函数前,调用时请务必使用await,否则可能出现v8白框报错 //在js开头处伪造该js结束运行的日志信息,如 await fakeLog("js脚本", true, true, 0); //在js结尾处伪造该js开始运行的日志信息,如 await fakeLog("js脚本", true, false, 2333); @@ -83,60 +793,6 @@ async function fakeLog(name, isJs, isStart, duration) { } } - -// 定义目标文件夹路径和记录文件路径 -const recordFolder = "record"; // 存储记录文件的文件夹路径 -const defaultTimeStamp = "2023-10-13T00:00:00.000Z"; // 固定的时间戳 - -// 从 settings 中读取用户配置,并设置默认值 -const userSettings = { - operationMode: settings.operationMode || "执行任务(若不存在索引文件则自动创建)", - pathGroup1CdType: settings.pathGroup1CdType || "", - pathGroup2CdType: settings.pathGroup2CdType || "", - pathGroup3CdType: settings.pathGroup3CdType || "", - otherPathGroupsCdTypes: settings.otherPathGroupsCdTypes || "", - partyNames: settings.partyNames || "", - skipTimeRanges: settings.skipTimeRanges || "", - infoFileName: settings.infoFileName || "", - disableJsons: settings.disableJsons || "" -}; - -// 解析禁用名单 -let disableArray = []; -if (userSettings.disableJsons) { - tmp = userSettings.disableJsons.split(';'); - for (k = 0; k < tmp.length; k++) { - s = tmp[k].trim(); - if (s) disableArray[disableArray.length] = s; - } -} - - -// 将 partyNames 分割并存储到一个数组中 -const partyNamesArray = userSettings.partyNames.split(";").map(name => name.trim()); - -// 新增一个数组 pathGroupCdType,存储每个路径组的 cdtype 信息 -const pathGroupCdType = [ - userSettings.pathGroup1CdType, - userSettings.pathGroup2CdType, - userSettings.pathGroup3CdType -]; - -// 如果 otherPathGroupsCdTypes 不为空,将其分割为数组并添加到 pathGroupCdType 中 -if (userSettings.otherPathGroupsCdTypes) { - pathGroupCdType.push(...userSettings.otherPathGroupsCdTypes.split(";")); -} - -// 当infoFileName为空时,将其改为由其他自定义配置决定的一个字符串 -if (!userSettings.infoFileName) { - userSettings.infoFileName = [ - userSettings.pathGroup1CdType, - userSettings.pathGroup2CdType, - userSettings.pathGroup3CdType, - userSettings.otherPathGroupsCdTypes, - ].join("."); -} - // 定义自定义函数 basename,用于获取文件名 function basename(filePath) { const lastSlashIndex = filePath.lastIndexOf('\\'); // 或者使用 '/',取决于你的路径分隔符 @@ -151,9 +807,8 @@ function removeJsonSuffix(fileName) { return fileName; } +// 定义 readFolder 函数 async function readFolder(folderPath, onlyJson) { - log.info(`开始读取文件夹:${folderPath}`); - // 新增一个堆栈,初始时包含 folderPath const folderStack = [folderPath]; @@ -175,6 +830,10 @@ async function readFolder(folderPath, onlyJson) { // 如果是文件夹,先存储到临时数组中 subFolders.push(filePath); } else { + if (filePath.endsWith(".js")) { + //跳过js结尾的文件 + continue; + } // 如果是文件,根据 onlyJson 判断是否存储 if (onlyJson) { if (filePath.endsWith(".json")) { @@ -226,321 +885,72 @@ async function switchPartyIfNeeded(partyName) { } } -(async function () { - try { - // 获取子文件夹路径 - const subFolderName = userSettings.infoFileName; // 使用设置后的 infoFileName - const subFolderPath = `${recordFolder}/${subFolderName}`; +/** + * 检查当前时间是否处于限制时间内或即将进入限制时间 + * @param {string} timeRule - 时间规则字符串,格式如 "8, 8-11, 23:11-23:55" + * @param {number} [threshold=5] - 接近限制时间的阈值(分钟) + * @returns {Promise} - 如果处于限制时间内或即将进入限制时间,则返回 true,否则返回 false + */ +async function isTimeRestricted(timeRule, threshold = 5) { + if (!timeRule) return false; - // 读取子文件夹中的所有文件路径 - const filesInSubFolder = file.ReadPathSync(subFolderPath); + // 兼容中英文逗号、冒号 + const ruleClean = timeRule + .replace(/,/g, ',') + .replace(/:/g, ':'); - // 检查路径组1.txt文件是否存在 - let indexDoExist = false; - for (const filePath of filesInSubFolder) { - const fileName = basename(filePath); // 提取文件名 - if (fileName === "路径组1.txt") { - indexDoExist = true; - break; - } - } - log.debug(`路径组1.txt 是否存在: ${indexDoExist}`); + const now = new Date(); + const currentHour = now.getHours(); + const currentMinute = now.getMinutes(); + const currentTotal = currentHour * 60 + currentMinute; - { - if (userSettings.operationMode === "重新生成索引文件(用于强制刷新CD)") { - log.info("重新生成索引文件模式,将覆盖现有索引文件"); - } - if (!indexDoExist) { - log.info("路径组1.txt 文件不存在,将尝试生成索引文件"); - } - dispatcher.addTimer(new RealtimeTimer("AutoPick")); - await fakeLog("采集cd管理", true, false, 1000); - // 循环处理多个路径组 - for (let i = 1; ; i++) { - // 检查当前路径组的 cdtype 是否为空 - const currentCdType = pathGroupCdType[i - 1] || ""; - if (!currentCdType) { - log.info(`路径组${i} 的 cdtype 为空,停止处理`); - break; - } + for (const seg of ruleClean.split(',').map(s => s.trim())) { + if (!seg) continue; - const targetFolder = `pathing/路径组${i}`; // 动态生成目标文件夹路径 - const files = await readFolder(targetFolder, true); - const filePaths = files.map(file => file.fullPath); - // 如果文件夹为空,退出循环 - if (filePaths.length === 0) { - log.info(`路径组${i} 文件夹为空,停止处理`); - break; - } - // 用于存储符合条件的文件名的数组 - const jsonFileNames = []; - const entryMap = {}; - // 如果 indexDoExist 为 true,则读取对应的原文件 - if (indexDoExist) { - const pathGroupFilePath = `${subFolderPath}/路径组${i}.txt`; // 使用外层循环的变量 i - let pathGroupContent = await file.readText(pathGroupFilePath); - let pathGroupEntries = pathGroupContent.trim().split('\n'); - - // 创建一个对象来存储 entryName 和 entryTimestamp 的映射 - for (let j = 0; j < pathGroupEntries.length; j++) { - const entryWithTimestamp = pathGroupEntries[j].trim(); - const [entryName, entryTimestamp] = entryWithTimestamp.split('::'); - entryMap[entryName] = entryTimestamp; - } - } - - // 遍历文件路径数组并提取文件名 - for (const filePath of filePaths) { - const fileName = basename(filePath); // 提取文件名 - if (fileName.endsWith('.json')) { // 检查文件名是否以 .json 结尾 - const fileNameWithoutSuffix = removeJsonSuffix(fileName); // 移除 .json 后缀 - - // 给 routeTimeStamp 赋值为 defaultTimeStamp - let routeTimeStamp = defaultTimeStamp; - - if (indexDoExist && userSettings.operationMode !== "重新生成索引文件(用于强制刷新CD)" && entryMap[fileNameWithoutSuffix]) { - routeTimeStamp = entryMap[fileNameWithoutSuffix]; - } - - routeTimeStamp = `::${routeTimeStamp}`; - // 添加时间戳并存储 - jsonFileNames.push(`${fileNameWithoutSuffix}${routeTimeStamp}`); - } - } - - // 如果没有找到符合条件的文件,跳过当前路径组 - if (jsonFileNames.length === 0) { - //log.info(`路径组${i} 中未找到符合条件的 .json 文件,跳过`); - continue; - } - - // 将文件名数组转换为字符串,每个文件名占一行 - const fileNamesContent = jsonFileNames.join("\n"); - - // 定义记录文件的完整路径 - const recordFilePath = `${subFolderPath}/路径组${i}.txt`; - - // 将文件名写入记录文件 - const writeResult = file.writeTextSync(recordFilePath, fileNamesContent); - - if (writeResult) { - log.info(`文件名已成功写入: ${recordFilePath}`); - } else { - log.error(`写入文件失败: ${recordFilePath}`); - } - //当选择“执行任务(若不存在索引文件则自动创建)”时,执行类似路径执行的逻辑 - if (userSettings.operationMode === "执行任务(若不存在索引文件则自动创建)") { - log.info("启用自动拾取的实时任务"); - - let groupNumber = i; - const pathGroupFilePath = `${subFolderPath}/路径组${groupNumber}.txt`; // 动态生成路径组文件路径 - - await genshin.returnMainUi(); - - try { - let pathGroupContent = await file.readText(pathGroupFilePath); - let pathGroupEntries = pathGroupContent.trim().split('\n'); - let changedParty = false; - for (let i = 0; i < pathGroupEntries.length; i++) { - const entryWithTimestamp = pathGroupEntries[i].trim(); - const [entryName, entryTimestamp] = entryWithTimestamp.split('::'); - - // 查找对应的完整路径 - const fileEntry = files.find(file => file.fileName === `${entryName}.json`); - const pathingFilePath = fileEntry.fullPath; - - // 获取开始时间 - const startTime = new Date(); - - // 比较当前时间戳与任务的时间戳 - const entryDate = new Date(entryTimestamp); - if (startTime <= entryDate) { - log.info(`当前任务 ${entryName} 未刷新,跳过任务 ${i + 1}/${pathGroupEntries.length} 个`); - continue; // 跳过当前任务 - } - - // 新增校验:若当前时间的小时数和 skipTimeRanges 一致,则跳过任务 - let currentHour = startTime.getHours(); // 获取当前时间的小时数 - const currentMin = startTime.getMinutes(); // 获取当前分钟数 - const skipHours = userSettings.skipTimeRanges.split(';').map(Number); // 将 skipTimeRanges 转换为数字数组 - - // 10分钟内等待逻辑 - const nextHour = (currentHour + 1) % 24; - if (skipHours.includes(nextHour) && currentMin >= 50) { - const waitMin = 60 - currentMin; - log.info(`接近目标时间,开始等待${waitMin}分钟`); - await sleep(waitMin * 60 * 1000); - currentHour = nextHour; - break; // 只等待一次 - } - - // 原跳过判断 - if (skipHours.includes(currentHour)) { - log.info(`当前时间的小时数为 ${currentHour},在跳过时间范围内,跳过任务 ${i + 1}/${pathGroupEntries.length} 个`); - await sleep(10); - break; // 跳过当前任务 - } - - let doSkip = false; - - // 禁用名单跳过(includes 子串匹配) - for (k = 0; k < disableArray.length; k++) { - if (pathingFilePath.includes(disableArray[k])) { - log.info('路径文件 ' + pathingFilePath + ' 包含禁用关键词 "' + disableArray[k] + '",跳过任务 ' + entryName); - doSkip = true; // 立即进入下一轮任务 - break; - } - } - - if (doSkip) continue; - - //切换到指定配队 - if (!changedParty) { - if (partyNamesArray[groupNumber - 1] !== "") { - await switchPartyIfNeeded(partyNamesArray[groupNumber - 1]); - } - changedParty = true; - } - //伪造地图追踪开始的日志 - await fakeLog(entryName, false, true, 0); - - // 日志输出当前任务信息 - log.info(`当前任务 ${entryName} 为第 ${i + 1}/${pathGroupEntries.length} 个`); - - // 执行路径文件 - try { - await pathingScript.runFile(pathingFilePath); - log.info(`执行任务: ${entryName}`); - } catch (error) { - log.error(`路径文件 ${pathingFilePath} 不存在或执行失败: ${error}`); - continue; // 跳过当前任务 - } - - //捕获任务取消的信息并跳出循环 - try { - await sleep(1); // 假设 sleep 是一个异步函数,休眠 1 毫秒 - } catch (error) { - log.error(`发生错误: ${error}`); - break; // 终止循环 - } - - // 获取结束时间 - const endTime = new Date(); - - // 比较开始时间与结束时间 - const timeDiff = endTime.getTime() - startTime.getTime(); // 时间差(毫秒) - - //伪造地图追踪结束的日志 - await fakeLog(entryName, false, false, timeDiff); - - if (timeDiff > 3000) { // 时间差大于3秒 - // 获取当前路径组的 cdtype - const currentCdType = pathGroupCdType[groupNumber - 1] || "未知类型"; - - // 初始化 newTimestamp 和 nextAvailableTime - let newTimestamp; - let nextAvailableTime; - - // 根据 cdtype 执行不同的操作 - switch (currentCdType) { - case "1次0点刷新": - // 将任务文件中对应的时间戳改为下一个0点 - const tomorrow = new Date(startTime.getTime() + 24 * 60 * 60 * 1000); - tomorrow.setHours(0, 0, 0, 0); // 设置为下一个0点 - newTimestamp = tomorrow.toISOString(); - nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 - //log.info(`下一次可用时间为 ${nextAvailableTime}`); - break; - - case "2次0点刷新": - // 将任务文件中对应的时间戳改为下下个0点 - const dayAfterTomorrow = new Date(startTime.getTime() + 48 * 60 * 60 * 1000); - dayAfterTomorrow.setHours(0, 0, 0, 0); // 设置为下下个0点 - newTimestamp = dayAfterTomorrow.toISOString(); - nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 - //log.info(`下一次可用时间为 ${nextAvailableTime}`); - break; - - case "3次0点刷新": - // 将任务文件中对应的时间戳改为下下下个0点 - const twoDaysAfterTomorrow = new Date(startTime.getTime() + 72 * 60 * 60 * 1000); - twoDaysAfterTomorrow.setHours(0, 0, 0, 0); // 设置为下下下个0点 - newTimestamp = twoDaysAfterTomorrow.toISOString(); - nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 - //log.info(`下一次可用时间为 ${nextAvailableTime}`); - break; - - case "4点刷新": - // 将任务文件中对应的时间戳改为下一个4点 - const next4AM = new Date(startTime.getTime()); - next4AM.setHours(4, 0, 0, 0); // 设置为当天的4点 - if (next4AM <= startTime) { - next4AM.setDate(next4AM.getDate() + 1); // 如果当前时间已过4点,则设置为下一天的4点 - } - newTimestamp = next4AM.toISOString(); - nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 - //log.info(`下一次可用时间为 ${nextAvailableTime}`); - break; - - case "12小时刷新": - // 将任务文件中对应的时间戳改为开始时间后12小时0分0秒 - newTimestamp = new Date(startTime.getTime() + 12 * 60 * 60 * 1000).toISOString(); - nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 - //log.info(`下一次可用时间为 ${nextAvailableTime}`); - break; - - case "24小时刷新": - // 将任务文件中对应的时间戳改为开始时间后24小时0分0秒 - newTimestamp = new Date(startTime.getTime() + 24 * 60 * 60 * 1000).toISOString(); - nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 - //log.info(`下一次可用时间为 ${nextAvailableTime}`); - break; - - case "46小时刷新": - // 将任务文件中对应的时间戳改为开始时间后46小时0分0秒 - newTimestamp = new Date(startTime.getTime() + 46 * 60 * 60 * 1000).toISOString(); - nextAvailableTime = new Date(newTimestamp).toLocaleString(); // 转换为本地时间格式 - //log.info(`下一次可用时间为 ${nextAvailableTime}`); - break; - - default: - log.warn(`路径组${groupNumber} 的 cdtype 是 ${currentCdType},执行默认操作`); - // 默认操作:将下一个可用时间设置为开始时间 - newTimestamp = startTime.toISOString(); - nextAvailableTime = startTime.toLocaleString(); // 转换为本地时间格式 - break; - } - - // 更新任务文件中的时间戳 - // 首先根据newTimestamp修改pathGroupEntries中对应项 - pathGroupEntries = pathGroupEntries.map(entry => { - const [name, timestamp] = entry.split('::'); - if (name === entryName) { - return `${name}::${newTimestamp}`; - } - return entry; - }); - - // 然后根据pathGroupEntries修改pathGroupContent - pathGroupContent = pathGroupEntries.join('\n'); - - // 最后将pathGroupContent写回原文件 - await file.writeText(pathGroupFilePath, pathGroupContent); - log.info(`本任务执行大于3秒,cd信息已更新,下一次可用时间为 ${nextAvailableTime}`); - } - } - log.info(`路径组${groupNumber} 的所有任务运行完成`); - } catch (error) { - log.error(`读取路径组文件 ${pathGroupFilePath} 时出错: ${error}`); - } - } - } + let startStr, endStr; + if (seg.includes('-')) { + [startStr, endStr] = seg.split('-').map(s => s.trim()); + } else { + startStr = endStr = seg.trim(); } - } catch (error) { - log.error(`操作失败: ${error}`); + const parseTime = (str, isEnd) => { + if (str.includes(':')) { + const [h, m] = str.split(':').map(Number); + return { h, m }; + } + // 单独小时:start 8→8:00,end 8→8:59 + const h = Number(str); + return { h, m: isEnd ? 59 : 0 }; + }; + + const start = parseTime(startStr, false); + const end = parseTime(endStr, true); + + const startTotal = start.h * 60 + start.m; + const endTotal = end.h * 60 + end.m; + + const effectiveEnd = endTotal >= startTotal ? endTotal : endTotal + 24 * 60; + + if ( + (currentTotal >= startTotal && currentTotal < effectiveEnd) || + (currentTotal + 24 * 60 >= startTotal && currentTotal + 24 * 60 < effectiveEnd) + ) { + log.warn("处于限制时间内"); + return true; + } + + let nextStartTotal = startTotal; + if (nextStartTotal <= currentTotal) nextStartTotal += 24 * 60; + const waitMin = nextStartTotal - currentTotal; + if (waitMin > 0 && waitMin <= threshold) { + log.warn(`接近限制时间,等待 ${waitMin} 分钟`); + await genshin.tpToStatueOfTheSeven(); + await sleep(waitMin * 60 * 1000); + return true; + } } - //伪造js开始的日志 - await fakeLog("采集cd管路", true, true, 0); -})(); + log.info("不处于限制时间"); + return false; +} diff --git a/repo/js/采集cd管理/manifest.json b/repo/js/采集cd管理/manifest.json index 5381bf94d..573897c75 100644 --- a/repo/js/采集cd管理/manifest.json +++ b/repo/js/采集cd管理/manifest.json @@ -1,12 +1,15 @@ { "manifest_version": 1, "name": "采集cd管理", - "version": "1.3.4", + "version": "2.1.0", "bgi_version": "0.44.8", "description": "仅面对会操作文件和读readme的用户,基于文件夹操作自动管理采集路线的cd,会按照路径组的顺序依次运行,直到指定的时间,并会按照给定的cd类型,自动跳过未刷新的路线", "saved_files": [ "pathing/", - "record/" + "record/", + "blacklists/", + "assets/targetItems/保留/", + "settings.json" ], "authors": [ { diff --git a/repo/js/采集cd管理/pathing/路径组2/占位使用,请无视.txt b/repo/js/采集cd管理/pathing/占位.js similarity index 100% rename from repo/js/采集cd管理/pathing/路径组2/占位使用,请无视.txt rename to repo/js/采集cd管理/pathing/占位.js diff --git a/repo/js/采集cd管理/pathing/路径组3/占位使用,请无视.txt b/repo/js/采集cd管理/pathing/路径组3/占位使用,请无视.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/repo/js/采集cd管理/pathing/需要更多路径组请自行新建文件夹.txt b/repo/js/采集cd管理/pathing/需要更多路径组请自行新建文件夹.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/repo/js/采集cd管理/settings.json b/repo/js/采集cd管理/settings.json index 14b3a4ec0..1865287d5 100644 --- a/repo/js/采集cd管理/settings.json +++ b/repo/js/采集cd管理/settings.json @@ -1,81 +1,14 @@ [ - { - "name": "operationMode", - "type": "select", - "label": "选择操作模式", - "options": [ - "执行任务(若不存在索引文件则自动创建)", - "重新生成索引文件(用于强制刷新CD)" - ] - }, - { - "name": "pathGroup1CdType", - "type": "select", - "label": "选择路径组1CD类型,不选不运行该路径组", - "options": [ - "", // 增加一个空选项 - "1次0点刷新", - "2次0点刷新", - "3次0点刷新", - "4点刷新", - "12小时刷新", - "24小时刷新", - "46小时刷新" - ] - }, - { - "name": "pathGroup2CdType", - "type": "select", - "label": "选择路径组2CD类型,不选不运行该路径组", - "options": [ - "", // 增加一个空选项 - "1次0点刷新", - "2次0点刷新", - "3次0点刷新", - "4点刷新", - "12小时刷新", - "24小时刷新", - "46小时刷新" - ] - }, - { - "name": "pathGroup3CdType", - "type": "select", - "label": "选择路径组3CD类型,不选不运行该路径组", - "options": [ - "", // 增加一个空选项 - "1次0点刷新", - "2次0点刷新", - "3次0点刷新", - "4点刷新", - "12小时刷新", - "24小时刷新", - "46小时刷新" - ] - }, - { - "name": "otherPathGroupsCdTypes", - "type": "input-text", - "label": "依次输入更多路径组的CD类型\n需要更多路径组才输入,用英文分号;分隔\n例如要使用路径组4和5时输入\n1次0点刷新;46小时刷新" - }, - { - "name": "partyNames", - "type": "input-text", - "label": "依次输入各个路径组使用的配队名称\n有几个填几个,用英文分号;分隔\n如:采集;挖矿;奶龙" - }, - { - "name": "skipTimeRanges", - "type": "input-text", - "label": "输入不在某时执行(整数)\n如输入4则当小时数为4会终止运行" - }, - { - "name": "infoFileName", - "type": "input-text", - "label": "输入用于存储信息的文件名,只在不同账号分别管理CD时填写" - }, - { - "name": "disableJsons", - "type": "input-text", - "label": "填写需要禁用的路线的关键词,使用中文分号分隔\n文件路径含有相关关键词的路线会被禁用" - } + { + "name": "onlyRefresh", + "type": "checkbox", + "label": "勾选后仅刷新自定义配置,初次运行勾选该选项以生成自定义配置", + "default": true + }, + { + "name": "groupCount", + "type": "input-text", + "label": "需要生成几个路径组配置(1-99)", + "default": "3" + } ] \ No newline at end of file diff --git a/repo/js/采集cd管理/要运行的路线放在pathing下对应文件夹.txt b/repo/js/采集cd管理/要运行的路线放在pathing下对应文件夹.txt deleted file mode 100644 index e69de29bb..000000000