From ab7b485755731b500bb727edce990f044759172d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E4=BA=91?= Date: Thu, 27 Mar 2025 09:55:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=B8=A1=E8=85=BF=E5=A5=BD=E6=84=9F?= =?UTF-8?q?=E5=92=8C=E7=9B=97=E5=AE=9D=E5=9B=A2=E5=A5=BD=E6=84=9F=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=EF=BC=8C=E4=BD=BF=E7=94=A8=E6=96=B0=E7=89=88exit=5Fan?= =?UTF-8?q?d=5Frelogin=20action=20(#473)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 盗宝团好感 * 避免计算出负数运行次数 * fix: 鸡腿好感修复 --- .../assets/AutoPath/两武士.json | 28 ---- .../assets/KeyMouse/重新上线.json | 1 - repo/js/AutoFriendship/main.js | 109 ------------ repo/js/AutoFriendship/manifest.json | 13 -- repo/js/AutoFriendship/settings.json | 12 -- .../assets/AutoPath/清理原住民.json | 24 +-- .../assets/AutoPath/盗宝团.json | 30 +++- repo/js/AutoFriendshipTreasureHunters/main.js | 158 ++++++++++++++++++ .../manifest.json | 13 ++ .../settings.json | 32 ++++ .../assets/AutoPath/从狗盆到甜甜花.json | 2 +- .../assets/AutoPath/导航至甜甜花位置.json | 2 +- repo/js/鸡腿好感/main.js | 154 ++++++----------- repo/js/鸡腿好感/settings.json | 10 +- 14 files changed, 291 insertions(+), 297 deletions(-) delete mode 100644 repo/js/AutoFriendship/assets/AutoPath/两武士.json delete mode 100644 repo/js/AutoFriendship/assets/KeyMouse/重新上线.json delete mode 100644 repo/js/AutoFriendship/main.js delete mode 100644 repo/js/AutoFriendship/manifest.json delete mode 100644 repo/js/AutoFriendship/settings.json rename repo/js/{AutoFriendship => AutoFriendshipTreasureHunters}/assets/AutoPath/清理原住民.json (61%) rename repo/js/{AutoFriendship => AutoFriendshipTreasureHunters}/assets/AutoPath/盗宝团.json (50%) create mode 100644 repo/js/AutoFriendshipTreasureHunters/main.js create mode 100644 repo/js/AutoFriendshipTreasureHunters/manifest.json create mode 100644 repo/js/AutoFriendshipTreasureHunters/settings.json diff --git a/repo/js/AutoFriendship/assets/AutoPath/两武士.json b/repo/js/AutoFriendship/assets/AutoPath/两武士.json deleted file mode 100644 index 7d689ec0..00000000 --- a/repo/js/AutoFriendship/assets/AutoPath/两武士.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "info": { - "name": "两武士", - "type": "collect", - "author": "HZYgrandma", - "version": "1.0", - "description": "", - "bgiVersion": "0.35.1" - }, - "positions": [ - { - "id": 1, - "action": "", - "move_mode": "walk", - "type": "teleport", - "x": -2738.38671875, - "y": -3414.45703125 - }, - { - "id": 2, - "x": -2739.7236328125, - "y": -3400.15625, - "type": "path", - "move_mode": "walk", - "action": "" - } - ] -} \ No newline at end of file diff --git a/repo/js/AutoFriendship/assets/KeyMouse/重新上线.json b/repo/js/AutoFriendship/assets/KeyMouse/重新上线.json deleted file mode 100644 index 6061b2a7..00000000 --- a/repo/js/AutoFriendship/assets/KeyMouse/重新上线.json +++ /dev/null @@ -1 +0,0 @@ -{"macroEvents":[{"type":0,"keyCode":27,"mouseX":0,"mouseY":0,"time":1122.9274},{"type":1,"keyCode":27,"mouseX":0,"mouseY":0,"time":1240.7044},{"type":2,"mouseX":1870,"mouseY":1118,"time":2664.8132},{"type":2,"mouseX":1784,"mouseY":1180,"time":2685.6454},{"type":2,"mouseX":1670,"mouseY":1258,"time":2706.5437},{"type":2,"mouseX":1546,"mouseY":1332,"time":2726.5673},{"type":2,"mouseX":1412,"mouseY":1402,"time":2747.7062},{"type":2,"mouseX":1272,"mouseY":1472,"time":2768.5555},{"type":2,"mouseX":1124,"mouseY":1548,"time":2789.6126},{"type":2,"mouseX":972,"mouseY":1622,"time":2810.6044},{"type":2,"mouseX":848,"mouseY":1696,"time":2831.5239},{"type":2,"mouseX":742,"mouseY":1764,"time":2851.559},{"type":2,"mouseX":662,"mouseY":1820,"time":2872.4909},{"type":2,"mouseX":598,"mouseY":1862,"time":2892.5456},{"type":2,"mouseX":550,"mouseY":1896,"time":2912.5464},{"type":2,"mouseX":512,"mouseY":1926,"time":2932.5727},{"type":2,"mouseX":480,"mouseY":1952,"time":2953.5265},{"type":2,"mouseX":446,"mouseY":1978,"time":2973.5507},{"type":2,"mouseX":406,"mouseY":2004,"time":2993.5764},{"type":2,"mouseX":362,"mouseY":2028,"time":3013.5889},{"type":2,"mouseX":322,"mouseY":2044,"time":3034.4793},{"type":2,"mouseX":280,"mouseY":2058,"time":3054.5477},{"type":2,"mouseX":234,"mouseY":2070,"time":3074.5642},{"type":2,"mouseX":186,"mouseY":2082,"time":3095.5541},{"type":2,"mouseX":138,"mouseY":2092,"time":3116.4905},{"type":2,"mouseX":92,"mouseY":2098,"time":3136.491},{"type":2,"mouseX":50,"mouseY":2102,"time":3156.5594},{"type":2,"mouseX":22,"mouseY":2104,"time":3177.5705},{"type":2,"mouseX":20,"mouseY":2102,"time":3288.5778},{"type":2,"mouseX":24,"mouseY":2094,"time":3367.5595},{"type":2,"mouseX":34,"mouseY":2084,"time":3389.5297},{"type":2,"mouseX":40,"mouseY":2078,"time":3411.5745},{"type":2,"mouseX":42,"mouseY":2074,"time":3436.6056},{"type":2,"mouseX":44,"mouseY":2074,"time":3483.5373},{"type":2,"mouseX":46,"mouseY":2072,"time":3520.6473},{"type":2,"mouseX":48,"mouseY":2070,"time":3559.6061},{"type":4,"mouseX":48,"mouseY":2070,"mouseButton":"Left","time":3984.903},{"type":5,"mouseX":48,"mouseY":2070,"mouseButton":"Left","time":4082.6738},{"type":2,"mouseX":78,"mouseY":2062,"time":4957.6286},{"type":2,"mouseX":138,"mouseY":2050,"time":4978.6012},{"type":2,"mouseX":234,"mouseY":2038,"time":4999.5416},{"type":2,"mouseX":338,"mouseY":2026,"time":5020.4912},{"type":2,"mouseX":462,"mouseY":2010,"time":5040.5611},{"type":2,"mouseX":604,"mouseY":1990,"time":5061.536},{"type":2,"mouseX":782,"mouseY":1960,"time":5081.6434},{"type":2,"mouseX":982,"mouseY":1924,"time":5101.678},{"type":2,"mouseX":1166,"mouseY":1894,"time":5122.495},{"type":2,"mouseX":1342,"mouseY":1864,"time":5142.5646},{"type":2,"mouseX":1498,"mouseY":1828,"time":5163.5151},{"type":2,"mouseX":1636,"mouseY":1786,"time":5183.5272},{"type":2,"mouseX":1752,"mouseY":1744,"time":5204.5365},{"type":2,"mouseX":1856,"mouseY":1706,"time":5224.5715},{"type":2,"mouseX":1944,"mouseY":1672,"time":5245.4829},{"type":2,"mouseX":2012,"mouseY":1644,"time":5265.4856},{"type":2,"mouseX":2066,"mouseY":1622,"time":5285.4891},{"type":2,"mouseX":2112,"mouseY":1602,"time":5305.5373},{"type":2,"mouseX":2150,"mouseY":1586,"time":5325.5417},{"type":2,"mouseX":2184,"mouseY":1568,"time":5346.4815},{"type":2,"mouseX":2216,"mouseY":1546,"time":5366.6434},{"type":2,"mouseX":2246,"mouseY":1530,"time":5387.6075},{"type":2,"mouseX":2248,"mouseY":1528,"time":5424.6108},{"type":2,"mouseX":2250,"mouseY":1528,"time":5444.6396},{"type":2,"mouseX":2250,"mouseY":1526,"time":5472.6497},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":5643.7549},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":5762.743},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":8268.7556},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":8387.7549},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":8613.6933},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":8726.0548},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":8952.6574},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":9099.797},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":9542.6674},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":9697.9887},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":9989.8661},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":10143.8407},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":10399.7083},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":10593.791},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":11281.6748},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":11430.0178},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":11666.7071},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":11826.0618},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":12008.6323},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":12167.7781},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":12829.7735},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":12948.7237},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":13221.7528},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":13347.77},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":13592.7016},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":13723.0118},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":14348.7659},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":14485.8766},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":14737.6095},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":14868.0844},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":15029.7218},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":15169.7923},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":15925.8354},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":16080.7169},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":16347.2035},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":16472.7231},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":16724.6727},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":16865.753},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":17570.856},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":17703.8783},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":17973.8694},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":18136.0331},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":18359.7388},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":18489.1749},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":19144.1518},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":19269.7756},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":19536.6995},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":19669.8495},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":19914.7508},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":20077.1151},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":20756.6676},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":20889.8675},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":21174.6944},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":21300.8239},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":21627.8502},{"type":5,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":21761.8121},{"type":4,"mouseX":2250,"mouseY":1526,"mouseButton":"Left","time":22499.6697},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":22671.741},{"type":2,"mouseX":1919,"mouseY":1079,"time":22671.7439},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":22833.7527},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":22971.3175},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":23237.79},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":23352.8653},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":23687.6834},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":23823.798},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":24630.7364},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":24738.7543},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":25033.7012},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":25148.7702},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":25483.8293},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":25623.7151},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":26369.796},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":26455.7445},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":26729.7737},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":26869.7356},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":27193.7203},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":27369.7173},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":28233.7905},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":28363.7387},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":28748.7844},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":28871.7629},{"type":4,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":29259.7691},{"type":5,"mouseX":1919,"mouseY":1079,"mouseButton":"Left","time":29425.6976}],"info":{"name":"","description":"","x":0,"y":0,"width":3840,"height":2160,"recordDpi":2}} \ No newline at end of file diff --git a/repo/js/AutoFriendship/main.js b/repo/js/AutoFriendship/main.js deleted file mode 100644 index 5460da04..00000000 --- a/repo/js/AutoFriendship/main.js +++ /dev/null @@ -1,109 +0,0 @@ -(async function () { - - const defaultExitDelay = 12; - const defaultLoadingDelay = 15; - - function validateAndSetDefaults(exitDelay, loadingDelay) { - if (isNaN(exitDelay) || exitDelay <= 0) { - log.warn("你没有设置退出延迟,将使用默认值:12秒"); - exitDelay = defaultExitDelay; - } - if (isNaN(loadingDelay) || loadingDelay <= 0) { - log.warn("你没有设置加载延迟,将使用默认值:15秒"); - loadingDelay = defaultLoadingDelay; - } - return { exitDelay, loadingDelay }; - } - - async function runGameActionsMultipleTimes() { - await sleep(1000); - keyPress("ESCAPE"); - await sleep(1000); - click(50, 1030); - await sleep(1000); - click(1000, 750); - await sleep(validatedExitDelay * 1000); - click(1000, 550); - await sleep(validatedLoadingDelay * 1000); - } - - async function resetMap() { - log.info("重置地图大小..."); - await sleep(1000); - keyPress("M"); - await sleep(1000); - click(1840, 1010); - await sleep(1000); - click(1450, 460); - await sleep(1000); - click(1840, 1010); - await sleep(1000); - click(1450, 140); - await sleep(1000); - keyPress("M"); - log.info("重置地图大小完成"); - } - - async function AutoPath(locationName) { - try { - let filePath = `assets/AutoPath/${locationName}.json`; - await pathingScript.runFile(filePath); - } catch (error) { - log.error(`执行 ${locationName} 路径时发生错误`); - } - await sleep(2000); - } - - async function AutoFriendshipDev(times) { - await resetMap(); - log.info(`清理原住民...`); - await AutoPath('清理原住民'); - log.info(`自动好感开始...`); - for (let i = 0; i < times; i++) { - await AutoPath('两武士'); - await runGameActionsMultipleTimes(); - log.info(`自动好感当前次数:${i + 1}/${times}`); - await AutoPath('盗宝团'); - logTimeTaken(startTime); - } - log.info('自动好感已完成'); - } - - function logTimeTaken(startTime) { - const currentTime = Date.now(); - const totalTimeInSeconds = (currentTime - startTime) / 1000; - const minutes = Math.floor(totalTimeInSeconds / 60); - const seconds = totalTimeInSeconds % 60; - const formattedTime = `${minutes}分${seconds.toFixed(0).padStart(2, '0')}秒`; - log.info(`当前运行总时长:${formattedTime}`); - } - - // 启用自动拾取的实时任务 - const startTime = Date.now(); - dispatcher.addTimer(new RealtimeTimer("AutoPick")); - - setGameMetrics(1920, 1080, 1); // 设置游戏窗口大小和DPI - let exitdelay = Number(settings.exitdelay); - let loadingdelay = Number(settings.loadingdelay); - const { exitDelay: validatedExitDelay, loadingDelay: validatedLoadingDelay } = validateAndSetDefaults(exitdelay, loadingdelay); - const messages = [ - '请确保当前队伍为好感度队伍', - '好感度队伍:用待刷好感角色替换战斗策略中的人物即可', - '随后将自动匹配到战斗策略脚本', - ]; - for (let message of messages) { - log.info(message); - await sleep(1000); - } - log.info('自动好感开始...'); - log.info(`退出延迟: ${validatedExitDelay}秒, 加载延迟: ${validatedLoadingDelay}秒`); - //默认10次自动好感 - await AutoFriendshipDev(10); - // 计算并输出总时长 - const endTime = Date.now(); - const totalTimeInSeconds = (endTime - startTime) / 1000; - const minutes = Math.floor(totalTimeInSeconds / 60); - const seconds = totalTimeInSeconds % 60; - const formattedTime = `${minutes}分${seconds.toFixed(0).padStart(2, '0')}秒`; - log.info(`自动好感运行总时长:${formattedTime}`); -})(); diff --git a/repo/js/AutoFriendship/manifest.json b/repo/js/AutoFriendship/manifest.json deleted file mode 100644 index bafcff32..00000000 --- a/repo/js/AutoFriendship/manifest.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "manifest_version": 1, - "name": "自动好感度", - "version": "1.0", - "description": "通过突发事件刷好感度,请配合好感度战斗脚本使用", - "authors": [ - { - "name": "HZYgrandma & 愚溪", - } - ], - "settings_ui": "settings.json", - "main": "main.js" -} \ No newline at end of file diff --git a/repo/js/AutoFriendship/settings.json b/repo/js/AutoFriendship/settings.json deleted file mode 100644 index acc8d0a4..00000000 --- a/repo/js/AutoFriendship/settings.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "name": "exitdelay", - "type": "input-text", - "label": "退出延迟(秒)(选填)" - }, - { - "name": "loadingdelay", - "type": "input-text", - "label": "加载延迟(秒)(选填)" - } -] \ No newline at end of file diff --git a/repo/js/AutoFriendship/assets/AutoPath/清理原住民.json b/repo/js/AutoFriendshipTreasureHunters/assets/AutoPath/清理原住民.json similarity index 61% rename from repo/js/AutoFriendship/assets/AutoPath/清理原住民.json rename to repo/js/AutoFriendshipTreasureHunters/assets/AutoPath/清理原住民.json index ee8a2bd4..97dfed02 100644 --- a/repo/js/AutoFriendship/assets/AutoPath/清理原住民.json +++ b/repo/js/AutoFriendshipTreasureHunters/assets/AutoPath/清理原住民.json @@ -10,43 +10,35 @@ "positions": [ { "id": 1, - "x": -2740.609375, - "y": -3410.6923828125, + "x": -2740.60, + "y": -3410.69, "action": "", "move_mode": "walk", "type": "teleport" }, { "id": 2, - "x": -2739.4873046875, - "y": -3437.853515625, + "x": -2739.48, + "y": -3437.85, "action": "", "move_mode": "walk", "type": "path" }, { "id": 3, - "x": -2764.4423828125, - "y": -3465.810546875, + "x": -2764.44, + "y": -3465.81, "action": "", "move_mode": "walk", "type": "path" }, { "id": 4, - "x": -2771.2705078125, - "y": -3453.2373046875, + "x": -2771.27, + "y": -3453.23, "action": "fight", "move_mode": "walk", "type": "path" - }, - { - "id": 5, - "x": -2776.25, - "y": -3454.6982421875, - "action": "", - "move_mode": "walk", - "type": "path" } ] } \ No newline at end of file diff --git a/repo/js/AutoFriendship/assets/AutoPath/盗宝团.json b/repo/js/AutoFriendshipTreasureHunters/assets/AutoPath/盗宝团.json similarity index 50% rename from repo/js/AutoFriendship/assets/AutoPath/盗宝团.json rename to repo/js/AutoFriendshipTreasureHunters/assets/AutoPath/盗宝团.json index cb600fff..0272fe87 100644 --- a/repo/js/AutoFriendship/assets/AutoPath/盗宝团.json +++ b/repo/js/AutoFriendshipTreasureHunters/assets/AutoPath/盗宝团.json @@ -5,29 +5,45 @@ "author": "HZYgrandma", "version": "1.0", "description": "", - "bgiVersion": "0.35.1" + "bgiVersion": "0.43.4" }, "positions": [ { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -2738.38, + "y": -3414.45 + }, + { + "id": 2, + "x": -2739.72, + "y": -3400.15, + "type": "path", + "move_mode": "walk", + "action": "exit_and_relogin" + }, + { "id": 3, - "x": -2739.7197265625, - "y": -3399.060546875, + "x": -2739.71, + "y": -3399.06, "type": "path", "move_mode": "walk", "action": "" }, { "id": 4, - "x": -2738.671875, - "y": -3427.38671875, + "x": -2738.67, + "y": -3427.38, "type": "path", "move_mode": "run", "action": "" }, { "id": 5, - "x": -2756.6748046875, - "y": -3467.6328125, + "x": -2756.67, + "y": -3467.63, "type": "path", "move_mode": "walk", "action": "fight" diff --git a/repo/js/AutoFriendshipTreasureHunters/main.js b/repo/js/AutoFriendshipTreasureHunters/main.js new file mode 100644 index 00000000..c7db2feb --- /dev/null +++ b/repo/js/AutoFriendshipTreasureHunters/main.js @@ -0,0 +1,158 @@ +(async function () { + const DEFAULT_RUNS = 10; + const DEFAULT_PERIOD = 25; + const DEFAULT_BASE_RUNS = 50; + const BENCHMARK_HOUR = "T04:00:00"; + const TELEPORT_COORDS = { x: 2297.60, y: -824.45 }; + + // 执行 path 任务 + async function AutoPath(locationName) { + try { + const filePath = `assets/AutoPath/${locationName}.json`; + await pathingScript.runFile(filePath); + } catch (error) { + log.error(`执行 ${locationName} 路径时发生错误: ${error.message}`); + } + await sleep(2000); + } + + // 计算运行时长 + function LogTimeTaken(startTimeParam) { + const currentTime = Date.now(); + const totalTimeInSeconds = (currentTime - startTimeParam) / 1000; + const minutes = Math.floor(totalTimeInSeconds / 60); + const seconds = totalTimeInSeconds % 60; + const formattedTime = `${minutes} 分 ${seconds.toFixed(0).padStart(2, '0')} 秒`; + return formattedTime; + } + + // 计算预估时间 + function CalculateEstimatedCompletion(startTime, current, total) { + if (current === 0) return "计算中..."; + + const elapsedTime = Date.now() - startTime; + const timePerTask = elapsedTime / current; + const remainingTasks = total - current; + const remainingTime = timePerTask * remainingTasks; + const completionDate = new Date(Date.now() + remainingTime); + return `${completionDate.toLocaleTimeString()} (约 ${Math.round(remainingTime / 60000)} 分钟)`; + } + + // 执行 N 次盗宝团任务并输出日志 + async function AutoFriendshipDev(times) { + startFisrtTime = Date.now(); + for (let i = 0; i < times; i++) { + await AutoPath('盗宝团'); + const estimatedCompletion = CalculateEstimatedCompletion(startFisrtTime, i + 1, times); + const currentTime = LogTimeTaken(startFisrtTime); + log.info(`当前进度:${i + 1}/${times} (${((i + 1) / times * 100).toFixed(1)}%)`); + log.info(`当前运行总时长:${currentTime}`); + log.info(`预计完成时间:${estimatedCompletion}`); + } + log.info('盗宝团好感已完成'); + } + + // 验证输入是否是正整数 + function isPositiveInteger(value) { + return Number.isInteger(value) && value > 0; + } + + // 验证日期格式 + function isValidDateFormat(dateStr) { + if (!dateStr) return false; + + // 检查格式是否为 YYYY-MM-DD + const regex = /^\d{4}-\d{2}-\d{2}$/; + if (!regex.test(dateStr)) return false; + + // 检查是否为有效日期 + const date = new Date(dateStr); + return !isNaN(date.getTime()); + } + + function calculateWaitModeRuns(baseRuns, waitTimeModeDay, period) { + const now = new Date(); + const benchmark = new Date(waitTimeModeDay + BENCHMARK_HOUR); + const timeDiff = now.getTime() - benchmark.getTime(); + const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24)); + const daysNormalized = daysDiff >= 0 ? daysDiff : period - (Math.abs(daysDiff) % period); + const dayInCycle = (daysNormalized % period) + 1; + const baseRunsPerDay = Math.ceil(baseRuns / period); + return baseRunsPerDay * dayInCycle; + } + + async function switchPartyIfNeeded(partyName) { + if (!partyName) { + await genshin.returnMainUi(); + return; + } + + try { + await genshin.tp(TELEPORT_COORDS.x, TELEPORT_COORDS.y); + await sleep(3000); + log.info(`正在尝试切换至:${partyName}`); + await genshin.switchParty(partyName); + log.info(`队伍切换成功,继续下一步任务`); + } catch (error) { + log.warn("队伍切换失败,可能处于联机模式或其他不可切换状态"); + await genshin.returnMainUi(); + } + } + + // 启用自动拾取的实时任务 + const startTime = Date.now(); + dispatcher.addTimer(new RealtimeTimer("AutoPick")); + log.info(`'请确保队伍满员,并为队伍配置相应的战斗策略'`); + // 计算运行次数 + let runTimes = Number(settings.runTimes); + if(!isPositiveInteger(runTimes) && !settings.waitTimeMode){ + log.warn("请输入正确的次数,必须是正整数!"); + log.warn(`运行次数重置为 ${DEFAULT_RUNS} 次!`); + runTimes = DEFAULT_RUNS; + } + + if(settings.waitTimeMode){ + if(!isPositiveInteger(runTimes)){ + log.warn("运行次数必须是正整数,使用默认基准次数"); + log.warn(`运行次数重置为 ${DEFAULT_BASE_RUNS} 次!`); + runTimes = DEFAULT_BASE_RUNS; + } + + // 验证日期格式 + const waitTimeModeDay = settings.waitTimeModeDay; + if (!isValidDateFormat(waitTimeModeDay)) { + log.error("基准日期格式错误,请检查后重试!"); + log.error("参考格式:2025-01-01"); + log.error(`错误输入:${waitTimeModeDay}`); + await sleep(5000); + return; + } + + let period = Number(settings.waitTimeModePeriod); + if(!isPositiveInteger(period) || period > runTimes){ + period = DEFAULT_PERIOD < runTimes? DEFAULT_PERIOD : runTimes; + log.warn(`卡时间模式周期必须是 1-${runTimes} 之间的正整数!使用 ${period} 作为周期`); + } + runTimes = calculateWaitModeRuns(runTimes, waitTimeModeDay, period); + + // 添加日志输出,提醒用户当前使用的基准日期和周期 + log.info(`当前使用的基准日期: ${waitTimeModeDay}`); + log.info(`当前使用的周期: ${period} 天`); + log.info(`根据基准日期和周期计算,今日运行次数: ${runTimes}`); + } else { + log.info(`当前设置的运行次数: ${runTimes}`); + } + + await switchPartyIfNeeded(settings.partyName); + + log.info('盗宝团好感开始...'); + + // 清理丘丘人 + if(settings.qiuQiuRen){ + log.info(`清理原住民...`); + await AutoPath('清理原住民'); + } + // 盗宝团好感循环开始 + await AutoFriendshipDev(runTimes); + log.info(`盗宝团好感运行总时长:${LogTimeTaken(startTime)}`); +})(); diff --git a/repo/js/AutoFriendshipTreasureHunters/manifest.json b/repo/js/AutoFriendshipTreasureHunters/manifest.json new file mode 100644 index 00000000..4f54222b --- /dev/null +++ b/repo/js/AutoFriendshipTreasureHunters/manifest.json @@ -0,0 +1,13 @@ +{ + "manifest_version": 1, + "name": "盗宝团好感:自动好感度&刷盗宝团&卡时间", + "version": "1.1", + "description": "通过突发事件【岛上无贼】刷好感度,刷盗宝团材料,小怪锄地,卡时间等,请配合战斗脚本使用。在 HZYgrandma & 愚溪的原始脚本上改编。", + "authors": [ + { + "name": "秋云" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} \ No newline at end of file diff --git a/repo/js/AutoFriendshipTreasureHunters/settings.json b/repo/js/AutoFriendshipTreasureHunters/settings.json new file mode 100644 index 00000000..f29e2e32 --- /dev/null +++ b/repo/js/AutoFriendshipTreasureHunters/settings.json @@ -0,0 +1,32 @@ +[ + { + "name": "qiuQiuRen", + "type": "checkbox", + "label": "是否清理丘丘人【默认否,选是会清理丘丘人之后再开始盗宝团好感】" + }, + { + "name": "partyName", + "type": "input-text", + "label": "(选填)需要切换的队伍名称" + }, + { + "name": "runTimes", + "type": "input-text", + "label": "(选填)运行次数【默认10次,卡时间模式默认50次】" + }, + { + "name": "waitTimeMode", + "type": "checkbox", + "label": "卡时间模式【基于运行次数、基准日期、周期确定需要运行次数】" + }, + { + "name": "waitTimeModeDay", + "type": "input-text", + "label": "卡时间模式基准日期【格式参考:2025-01-01】" + }, + { + "name": "waitTimeModePeriod", + "type": "input-text", + "label": "(选填)卡时间模式周期【默认:25天】" + } +] \ No newline at end of file diff --git a/repo/js/鸡腿好感/assets/AutoPath/从狗盆到甜甜花.json b/repo/js/鸡腿好感/assets/AutoPath/从狗盆到甜甜花.json index dfdb5b63..6ac81770 100644 --- a/repo/js/鸡腿好感/assets/AutoPath/从狗盆到甜甜花.json +++ b/repo/js/鸡腿好感/assets/AutoPath/从狗盆到甜甜花.json @@ -18,7 +18,7 @@ }, { "id": 2, - "action": "", + "action": "exit_and_relogin", "move_mode": "walk", "type": "target", "x": -4529.2578125, diff --git a/repo/js/鸡腿好感/assets/AutoPath/导航至甜甜花位置.json b/repo/js/鸡腿好感/assets/AutoPath/导航至甜甜花位置.json index 937a9403..137d6f10 100644 --- a/repo/js/鸡腿好感/assets/AutoPath/导航至甜甜花位置.json +++ b/repo/js/鸡腿好感/assets/AutoPath/导航至甜甜花位置.json @@ -46,7 +46,7 @@ "y": -3084.009765625, "type": "target", "move_mode": "walk", - "action": "" + "action": "exit_and_relogin" } ] } \ No newline at end of file diff --git a/repo/js/鸡腿好感/main.js b/repo/js/鸡腿好感/main.js index d2fcb7ae..632d7af2 100644 --- a/repo/js/鸡腿好感/main.js +++ b/repo/js/鸡腿好感/main.js @@ -1,157 +1,103 @@ (async function () { - - const defaultExitDelay = 12; - const defaultLoadingDelay = 15; - - function validateAndSetDefaults(exitDelay, loadingDelay) { - if (isNaN(exitDelay) || exitDelay <= 0) { - log.warn("你没有设置退出延迟,将使用默认值:12秒"); - exitDelay = defaultExitDelay; + const TELEPORT_COORDS = { x: 2297.60, y: -824.45 }; + async function switchPartyIfNeeded(partyName) { + if (!partyName) { + await genshin.returnMainUi(); + return; } - if (isNaN(loadingDelay) || loadingDelay <= 0) { - log.warn("你没有设置加载延迟,将使用默认值:15秒"); - loadingDelay = defaultLoadingDelay; + + try { + await genshin.tp(TELEPORT_COORDS.x, TELEPORT_COORDS.y); + await sleep(3000); + log.info(`正在尝试切换至:${partyName}`); + await genshin.switchParty(partyName); + log.info(`队伍切换成功,继续下一步任务`); + } catch (error) { + log.warn("队伍切换失败,可能处于联机模式或其他不可切换状态"); + await genshin.returnMainUi(); } - return { exitDelay, loadingDelay }; } - - async function ReopenTheGate() { - await sleep(1000); - keyPress("ESCAPE"); - await sleep(1000); - click(50, 1030); - await sleep(1000); - click(1000, 750); - await sleep(validatedExitDelay * 1000); - click(1000, 550); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - click(1000, 750); - await sleep(1000); - await sleep(validatedLoadingDelay * 1000); - click(1000, 750); - await sleep(1000); - } - async function Feed() { - await sleep(1000); + await sleep(500); + keyPress("F"); + await sleep(500); keyPress("F"); await sleep(1000); click(1010, 760); await sleep(1000); } - async function resetMap() { - log.info("重置地图大小..."); - await sleep(1000); - keyPress("M"); - await sleep(1000); - click(1840, 1010); - await sleep(1000); - click(1450, 460); - await sleep(1000); - click(1840, 1010); - await sleep(1000); - click(1450, 140); - await sleep(1000); - keyPress("M"); - log.info("重置地图大小完成"); - } - async function AutoPath(locationName) { try { - let filePath = `assets/AutoPath/${locationName}.json`; + const filePath = `assets/AutoPath/${locationName}.json`; await pathingScript.runFile(filePath); } catch (error) { - log.error(`执行 ${locationName} 路径时发生错误`); - log.error(error.message); + log.error(`执行 ${locationName} 路径时发生错误: ${error.message}`); } await sleep(2000); } async function AutoFriendshipDev(times) { - await resetMap(); log.info(`导航至甜甜花位置`); await AutoPath('导航至甜甜花位置'); log.info(`自动好感开始...`); - - await ReopenTheGate(); + const startFirstTime = Date.now(); for (let i = 0; i < times; i++) { log.info(`自动好感当前次数:${i + 1}/${times}`); await AutoPath('从甜甜花到狗盆'); await Feed(); await AutoPath('从狗盆到甜甜花'); - await ReopenTheGate(); - logTimeTaken(startTime); + const estimatedCompletion = CalculateEstimatedCompletion(startFirstTime, i + 1, times); + const currentTime = LogTimeTaken(startFirstTime); + log.info(`当前进度:${i + 1}/${times} (${((i + 1) / times * 100).toFixed(1)}%)`); + log.info(`当前运行总时长:${currentTime}`); + log.info(`预计完成时间:${estimatedCompletion}`); } log.info('自动好感已完成'); } - function logTimeTaken(startTime) { + function LogTimeTaken(startTimeParam) { const currentTime = Date.now(); - const totalTimeInSeconds = (currentTime - startTime) / 1000; + const totalTimeInSeconds = (currentTime - startTimeParam) / 1000; const minutes = Math.floor(totalTimeInSeconds / 60); const seconds = totalTimeInSeconds % 60; - const formattedTime = `${minutes}分${seconds.toFixed(0).padStart(2, '0')}秒`; - log.info(`当前运行总时长:${formattedTime}`); + const formattedTime = `${minutes} 分 ${seconds.toFixed(0).padStart(2, '0')} 秒`; + return formattedTime; + } + + // 计算预估时间 + function CalculateEstimatedCompletion(startTime, current, total) { + if (current === 0) return "计算中..."; + + const elapsedTime = Date.now() - startTime; + const timePerTask = elapsedTime / current; + const remainingTasks = total - current; + const remainingTime = timePerTask * remainingTasks; + const completionDate = new Date(Date.now() + remainingTime); + return `${completionDate.toLocaleTimeString()} (约 ${Math.round(remainingTime / 60000)} 分钟)`; } // 启用自动拾取的实时任务 const startTime = Date.now(); dispatcher.addTimer(new RealtimeTimer("AutoPick")); - setGameMetrics(1920, 1080, 1); // 设置游戏窗口大小和DPI - let exitdelay = Number(settings.exitdelay); - let loadingdelay = Number(settings.loadingdelay); - const { exitDelay: validatedExitDelay, loadingDelay: validatedLoadingDelay } = validateAndSetDefaults(exitdelay, loadingdelay); const messages = [ '请确保有足够的鸡腿', '请确保队伍满员', - '大约需要17分钟' + `自动好感任务开始,运行:${settings.times} 次`, ]; for (let message of messages) { log.info(message); - await sleep(1000); + await sleep(500); } + + await switchPartyIfNeeded(settings.partyName); + log.info('自动好感开始...'); - log.info(`退出延迟: ${validatedExitDelay}秒, 加载延迟: ${validatedLoadingDelay}秒`); //默认10次自动好感 - await AutoFriendshipDev(10); - // 计算并输出总时长 - const endTime = Date.now(); - const totalTimeInSeconds = (endTime - startTime) / 1000; - const minutes = Math.floor(totalTimeInSeconds / 60); - const seconds = totalTimeInSeconds % 60; - const formattedTime = `${minutes}分${seconds.toFixed(0).padStart(2, '0')}秒`; - log.info(`自动好感运行总时长:${formattedTime}`); + await AutoFriendshipDev(settings.times); + + log.info(`自动好感运行总时长:${LogTimeTaken(startTime)}`); })(); diff --git a/repo/js/鸡腿好感/settings.json b/repo/js/鸡腿好感/settings.json index cab8cf26..cd2de5c2 100644 --- a/repo/js/鸡腿好感/settings.json +++ b/repo/js/鸡腿好感/settings.json @@ -1,12 +1,12 @@ [ { - "name": "exitdelay", + "name": "times", "type": "input-text", - "label": "退出延迟(秒)(选填)" + "label": "(选填)运行次数【默认10,为避免失败可以酌情添加次数】" }, - { - "name": "loadingdelay", + { + "name": "partyName", "type": "input-text", - "label": "加载延迟(秒)(选填)" + "label": "(选填)需要切换的队伍名称【前往设置的七天神像切换好感队】" } ] \ No newline at end of file