From f89ad7d6c75b3c7b3d3803defc96544008003e34 Mon Sep 17 00:00:00 2001 From: xiaozhang12312 <158118563+xiaozhang12312@users.noreply.github.com> Date: Thu, 1 Jan 2026 20:20:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AF=9B=E8=B4=BC-=E5=9C=B0=E6=96=B9?= =?UTF-8?q?=E4=BC=A0=E5=A5=87-=E5=88=A9=E4=BA=9A=E5=A7=86=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=20(#2593)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repo/js/诛贼-地方传奇-利亚姆/README.md | 13 ++ .../assets/Laim/跳加下落.json | 13 ++ .../assets/Laim/鼠标下一.json | 15 ++ .../assets/Laim/鼠标右一.json | 15 ++ .../assets/Laim/鼠标右负十.json | 15 ++ .../assets/Laim/鼠标右负百.json | 15 ++ .../assets/Recognition/DENG.png | Bin 0 -> 269 bytes .../assets/Recognition/DENG02.png | Bin 0 -> 8273 bytes .../assets/Recognition/Shui.png | Bin 0 -> 791 bytes .../assets/Recognition/血条.png | Bin 0 -> 202 bytes .../assets/pathing/Laim/Laim.json | 150 +++++++++++++ .../assets/pathing/Laim/Laim1.json | 117 ++++++++++ repo/js/诛贼-地方传奇-利亚姆/assets/ui/a.png | Bin 0 -> 1882 bytes .../诛贼-地方传奇-利亚姆/assets/ui/确认.png | Bin 0 -> 3810 bytes .../lib/Laim/lib/MobFallAttack.js | 146 ++++++++++++ .../lib/Laim/lib/MobPuller.js | 209 ++++++++++++++++++ .../诛贼-地方传奇-利亚姆/lib/Laim/lib/core.js | 177 +++++++++++++++ repo/js/诛贼-地方传奇-利亚姆/lib/core.js | 49 ++++ repo/js/诛贼-地方传奇-利亚姆/main.js | 12 + repo/js/诛贼-地方传奇-利亚姆/manifest.json | 14 ++ repo/js/诛贼-地方传奇-利亚姆/settings.json | 15 ++ 21 files changed, 975 insertions(+) create mode 100644 repo/js/诛贼-地方传奇-利亚姆/README.md create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/Laim/跳加下落.json create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标下一.json create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右一.json create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右负十.json create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右负百.json create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/Recognition/DENG.png create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/Recognition/DENG02.png create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/Recognition/Shui.png create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/Recognition/血条.png create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/pathing/Laim/Laim.json create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/pathing/Laim/Laim1.json create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/ui/a.png create mode 100644 repo/js/诛贼-地方传奇-利亚姆/assets/ui/确认.png create mode 100644 repo/js/诛贼-地方传奇-利亚姆/lib/Laim/lib/MobFallAttack.js create mode 100644 repo/js/诛贼-地方传奇-利亚姆/lib/Laim/lib/MobPuller.js create mode 100644 repo/js/诛贼-地方传奇-利亚姆/lib/Laim/lib/core.js create mode 100644 repo/js/诛贼-地方传奇-利亚姆/lib/core.js create mode 100644 repo/js/诛贼-地方传奇-利亚姆/main.js create mode 100644 repo/js/诛贼-地方传奇-利亚姆/manifest.json create mode 100644 repo/js/诛贼-地方传奇-利亚姆/settings.json diff --git a/repo/js/诛贼-地方传奇-利亚姆/README.md b/repo/js/诛贼-地方传奇-利亚姆/README.md new file mode 100644 index 000000000..24f695f4e --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/README.md @@ -0,0 +1,13 @@ +# 说明 + +该脚本会打一只地方传奇-利亚姆。 + + + +- 关于利亚姆: + 1. 没有万叶拾取很难,所以请确保账号上有万叶在队伍的3号,否则不要选择拾取! + 2. 操作角色默认是 1号提纳里 其他弓箭手不是水就可以,没有小提换安柏,影响的原因是脚本的计算精度不够从而导致失败(作者的水平有限( •̀ ω •́ ))。 + 2号是钟离,一定一定要有钟离,成功率有74%以上! 当然如果你没有就换诺艾尔,不过成功率感人,基本是白跑。 + 3. 没有解密的水池还没有制作判断的逻辑,抱歉! + + diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/跳加下落.json b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/跳加下落.json new file mode 100644 index 000000000..68a96c30e --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/跳加下落.json @@ -0,0 +1,13 @@ +{"macroEvents":[ +{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":25}, +{"type":0,"keyCode":32,"mouseX":0,"mouseY":0,"time":72}, +{"type":1,"keyCode":32,"mouseX":0,"mouseY":0,"time":197}, +{"type":0,"keyCode":32,"mouseX":0,"mouseY":0,"time":447}, +{"type":1,"keyCode":32,"mouseX":0,"mouseY":0,"time":556}, +{"type":0,"keyCode":65,"mouseX":0,"mouseY":0,"time":3081}, +{"type":1,"keyCode":65,"mouseX":0,"mouseY":0,"time":3991}, +{"type":4,"mouseX":960,"mouseY":540,"mouseButton":"Left","time":4681}, +{"type":5,"mouseX":960,"mouseY":540,"mouseButton":"Left","time":4760}, +{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":4847} +], +"info":{"name":"","description":"","x":0,"y":0,"width":1920,"height":1080,"recordDpi":1}} \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标下一.json b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标下一.json new file mode 100644 index 000000000..975abb72c --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标下一.json @@ -0,0 +1,15 @@ +{ + "macroEvents": [ + {"type": 3, "mouseX": 0, "mouseY": 0, "time": 0}, + {"type": 3, "mouseX": 0, "mouseY": 1, "time": 2} + ], + "info": { + "name": "向下移动一小段", + "description": "鼠标向下移动1单位", + "x": 0, + "y": 0, + "width": 1920, + "height": 1080, + "recordDpi": 1 + } +} \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右一.json b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右一.json new file mode 100644 index 000000000..1f8999810 --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右一.json @@ -0,0 +1,15 @@ +{ + "macroEvents": [ + {"type": 3, "mouseX": 0, "mouseY": 0, "time": 0}, + {"type": 3, "mouseX": 1, "mouseY": 0, "time": 2} + ], + "info": { + "name": "横向移动一小段", + "description": "鼠标向右移动1单位", + "x": 0, + "y": 0, + "width": 1920, + "height": 1080, + "recordDpi": 1 + } +} \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右负十.json b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右负十.json new file mode 100644 index 000000000..cc0d33b22 --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右负十.json @@ -0,0 +1,15 @@ +{ + "macroEvents": [ + {"type": 3, "mouseX": 0, "mouseY": 0, "time": 0}, + {"type": 3, "mouseX": -10, "mouseY": 0, "time": 50} + ], + "info": { + "name": "横向移动一小段", + "description": "鼠标向右移动1单位", + "x": 0, + "y": 0, + "width": 1920, + "height": 1080, + "recordDpi": 1 + } +} \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右负百.json b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右负百.json new file mode 100644 index 000000000..3db704a91 --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/assets/Laim/鼠标右负百.json @@ -0,0 +1,15 @@ +{ + "macroEvents": [ + {"type": 3, "mouseX": 0, "mouseY": 0, "time": 0}, + {"type": 3, "mouseX": -100, "mouseY": 0, "time": 50} + ], + "info": { + "name": "横向移动一小段", + "description": "鼠标向右移动1单位", + "x": 0, + "y": 0, + "width": 1920, + "height": 1080, + "recordDpi": 1 + } +} \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/Recognition/DENG.png b/repo/js/诛贼-地方传奇-利亚姆/assets/Recognition/DENG.png new file mode 100644 index 0000000000000000000000000000000000000000..a2fbdf1c9d8847c4bef79fc1862250b38ae5fd1f GIT binary patch literal 269 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 VKn3Xe*h2sS002ovPDHLkV1h*pX%GMa literal 0 HcmV?d00001 diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/Recognition/血条.png b/repo/js/诛贼-地方传奇-利亚姆/assets/Recognition/血条.png new file mode 100644 index 0000000000000000000000000000000000000000..4d072c4ac365d718545ac9fd16dc45912b1b4ccf GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^X+X@*!3HFMm0QdOQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XBj({-ZRBb+KpkTbGi(`m~ce2gQDL>~kay{UYX%O^kX7JJV z;5p(pt(np3*+i}nHyMlBjU39Q6}P@%h}7T9_;~&aj}r5~CPxN||L(56Zf6u&d;+RO rc#I6B44XxIfPB`)g2oz*%*+fMZwvlAmw2fSXcdE}tDnm{r-UW|F~vEx literal 0 HcmV?d00001 diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/pathing/Laim/Laim.json b/repo/js/诛贼-地方传奇-利亚姆/assets/pathing/Laim/Laim.json new file mode 100644 index 000000000..66c40a5cb --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/assets/pathing/Laim/Laim.json @@ -0,0 +1,150 @@ +{ + "config": { + "realtime_triggers": { + "AutoPick": true + } + }, + "farming_info": { + "allow_farming_count": false, + "duration_seconds": 0, + "elite_details": "", + "elite_mob_count": 0, + "normal_mob_count": 0, + "primary_target": "", + "total_mora": 0 + }, + "info": { + "authors": [], + "bgi_version": "0.45.0", + "description": "", + "enable_monster_loot_split": false, + "items": [], + "last_modified_time": 1759326224575, + "map_match_method": "", + "map_name": "Teyvat", + "name": "Laim", + "order": 0, + "tags": [], + "type": "collect", + "version": "" + }, + "positions": [ + { + "action": "", + "id": 1, + "move_mode": "dash", + "point_ext_params": { + "description": "", + "enable_monster_loot_split": false, + "misidentification": { + "arrival_time": 0, + "handling_mode": "previousDetectedPoint", + "type": [ + "unrecognized" + ] + } + }, + "type": "teleport", + "x": 3032.96875, + "y": 3732.7021484375 + }, + { + "action": "", + "id": 2, + "move_mode": "run", + "point_ext_params": { + "description": "", + "enable_monster_loot_split": false, + "misidentification": { + "arrival_time": 0, + "handling_mode": "previousDetectedPoint", + "type": [ + "unrecognized" + ] + } + }, + "type": "path", + "x": 3024.32421875, + "y": 3775.64599609375 + }, + { + "action": "", + "id": 3, + "move_mode": "run", + "point_ext_params": { + "description": "", + "enable_monster_loot_split": false, + "misidentification": { + "arrival_time": 0, + "handling_mode": "previousDetectedPoint", + "type": [ + "unrecognized" + ] + } + }, + "type": "path", + "x": 2990.998046875, + "y": 3794.330078125 + }, + { + "action": "", + "action_params": "", + "id": 4, + "move_mode": "run", + "point_ext_params": { + "description": "", + "enable_monster_loot_split": false, + "misidentification": { + "arrival_time": 0, + "handling_mode": "previousDetectedPoint", + "type": [ + "unrecognized" + ] + } + }, + "type": "path", + "x": 2953.8056640625, + "y": 3780.5087890625 + }, + { + "action": "", + "action_params": "", + "id": 5, + "move_mode": "walk", + "point_ext_params": { + "description": "", + "enable_monster_loot_split": false, + "misidentification": { + "arrival_time": 0, + "handling_mode": "previousDetectedPoint", + "type": [ + "unrecognized" + ] + } + }, + "type": "target", + "x": 2946.76171875, + "y": 3774.2529296875 + }, + { + "action": "combat_script", + "action_params": "keydown(W),wait(0.08),keyup(W)", + "id": 6, + "move_mode": "walk", + "point_ext_params": { + "description": "", + "enable_monster_loot_split": false, + "misidentification": { + "arrival_time": 0, + "handling_mode": "previousDetectedPoint", + "type": [ + "unrecognized" + ] + } + }, + "type": "orientation", + "x": 2916.25, + "y": 3780 + } + ] +} \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/pathing/Laim/Laim1.json b/repo/js/诛贼-地方传奇-利亚姆/assets/pathing/Laim/Laim1.json new file mode 100644 index 000000000..d3397514c --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/assets/pathing/Laim/Laim1.json @@ -0,0 +1,117 @@ +{ + "config": { + "realtime_triggers": { + "AutoPick": true + } + }, + "farming_info": { + "allow_farming_count": false, + "duration_seconds": 0, + "elite_details": "", + "elite_mob_count": 0, + "normal_mob_count": 0, + "primary_target": "", + "total_mora": 0 + }, + "info": { + "authors": [], + "bgi_version": "0.45.0", + "description": "", + "enable_monster_loot_split": false, + "items": [], + "last_modified_time": 1766719019531, + "map_match_method": "", + "map_name": "Teyvat", + "name": "Laim1", + "order": 0, + "tags": [], + "type": "collect", + "version": "" + }, + "positions": [ + { + "action": "", + "id": 1, + "move_mode": "dash", + "point_ext_params": { + "description": "", + "enable_monster_loot_split": false, + "misidentification": { + "arrival_time": 0, + "handling_mode": "previousDetectedPoint", + "type": [ + "unrecognized" + ] + } + }, + "type": "teleport", + "x": 3032.96875, + "y": 3732.7021484375 + }, + { + "action": "", + "id": 2, + "move_mode": "run", + "point_ext_params": { + "description": "", + "enable_monster_loot_split": false, + "misidentification": { + "arrival_time": 0, + "handling_mode": "previousDetectedPoint", + "type": [ + "unrecognized" + ] + } + }, + "type": "path", + "x": 3062.5, + "y": 3771.5 + }, + { + "action": "", + "id": 3, + "move_mode": "run", + "point_ext_params": { + "description": "", + "enable_monster_loot_split": false, + "misidentification": { + "arrival_time": 0, + "handling_mode": "previousDetectedPoint", + "type": [ + "unrecognized" + ] + } + }, + "type": "path", + "x": 2990.998046875, + "y": 3794.330078125 + }, + { + "action": "", + "action_params": "", + "id": 4, + "move_mode": "walk", + "type": "path", + "x": 2968.75, + "y": 3803.25 + }, + { + "action": "", + "action_params": "", + "id": 5, + "move_mode": "walk", + "type": "path", + "x": 2951, + "y": 3800.5 + }, + { + "action": "", + "action_params": "", + "id": 6, + "move_mode": "walk", + "type": "target", + "x": 2933.46875, + "y": 3794.75 + } + ] +} \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/ui/a.png b/repo/js/诛贼-地方传奇-利亚姆/assets/ui/a.png new file mode 100644 index 0000000000000000000000000000000000000000..47e13acf543b1046e15962e134c81388bd5a1789 GIT binary patch literal 1882 zcmV-g2c`IlP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ942JcBkK~!i%?V1Nr zR96&+f4T)wRH_g}MX?1e7&{_H90x0E44Np4C89{w#Gp|#)LxMqm0@M;Xx> zsUdVmY6zW?8bW8JhA30jj)_ZxiHQ+xtg1;@G*4pkQ#{YeVr^QvBJ6CcvzB?1nvS$* z8LTT-For`-E7saZZ6gZ`3NSWgDdHbJfs>;x2Ksuzy=i^vuI5-6z7;3V++f|NWg|=) zJAk#!noWnWWB+N^4eL2#?$iL*+D2_75B`1$%U17}BA`dtHn6o;Ju^Mqxrt0NVV&_J z3;Fp4tYwz3-HWrAZn35pHD*{Z)-s!S9LIrU7g;;kvB$Sx4rDE(udfetvr1A_eyC+6 zEvKN6CCGaDO1h#xD;G|HRgJ2wCrk@RRCEGsO<`|mi629Qq^SH**+^Q_(?ZuE;&wF0 zb)9O8j~#1u_^jW@Fg2~n`hR8QstpIQ``}sDRm>}6idafi1XQJhC=Ast%%w=dqr?=v z%E^-=1?zr0f-5&7S-Uo>1Ao7+tYvl`ID_M-ud}ATdfbRUtYwT04cN@`MkOQ3Kr&Jj zv})b}A;Er9R5IK4oWzY=4_G&d5|@vaPy9$kg3b;DZ|j%rIr+FhcX*! zW?Bh-yLVvyK2DvFP*&ygG%{>XAZj_-NRf6Zvym26%|w&jllA+cVkH-jHtyn-5>)(@ zLgeJ;af=lfpA0+O8Za(d^2 zdHHN2K}(X}2u)y0`j{9SAy+(iE#faxfiEChEXg;yaP^MTL|WFtBYlzZI7Mk9(ZKlw zNhx@dnJuZ;#Kb3I^6XVeO?xg~DPPpeNMg&*6WF-zm=vi;z@TpE?%i67Xk?a#iPOV* zctHdW?+vdG&9HjYLG0XrhOb#$T42S3@vLR&9z8=;uVyY@nh8&(2Uz77ag{XkcJ~k%POl zi4-6G@Fl6uXHte27k&nxFoAAv5OEqL-n2Zyzr4@q~+50#Ak^Y#ObpSldk zPF>@;U8^SW>C&2i;FQ#K>=K!gUr>mS?cCtq$sHb|NaW=gV5c|_r#@9IF?!agODim! zH;(6rGKS(zOpSKSW-gfj-3Vb=OTNBp{Q(_7I=a_oS=C01T zd_7WW0vXs|7~j9AN2!Mhziv5&%6TQW<);1~^8ye=uB_tzOd>+Oo z;Z9@>9*B%A6s?d9wH(yqB&R+@)Psa#_h|F4UCR!(R@GoFma4t2B^xAjKl%}t{JcY1 z(P?xxCZLyc_)Ei!Ma#FbeiO>trJ+GwkhG0TMuxB1qa5qYP`22Jidb8;L^R}eadzMy zjyeG4-ZJp;OPva}j(> zq85iT(O9%qj`mi(A2$2YS$a~tsAMD+n^^I~Th*|DrN|I#@lj{WLOmxHCz>c385!^k zAZXdHT(=KhI<`QgQVbo))a>jWtxtO1h004?$Gg$}fq;h48L1(3MrsJ1ks1N`8{Qt_ UnX+$hWB>pF07*qoM6N<$f?vje4FCWD literal 0 HcmV?d00001 diff --git a/repo/js/诛贼-地方传奇-利亚姆/assets/ui/确认.png b/repo/js/诛贼-地方传奇-利亚姆/assets/ui/确认.png new file mode 100644 index 0000000000000000000000000000000000000000..6a8d84c2540eec34f8289954d925962913818785 GIT binary patch literal 3810 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 740 && result.x <= 800) { + log.info('[MobFallAttack] 找到Liam水图标(合格区域) '); + + /* --- 一套 combo --- */ + await keyMouseScript.runFile(filePath); // 跳+下落 + await sleep(1200); + keyPress('2'); + await sleep(600); + keyDown('e'); + await sleep(1000); + keyUp('e'); + await sleep(1000); + + foundInRect = true; // 命中后结束外层 while + } + } + + log.info('[MobFallAttack] ====== 下落攻击流程结束 ======'); + return foundInRect; // true=成功出手 + } catch (err) { + log.error(`[MobFallAttack] 流程异常: ${err.message}`); + throw err; + } + }, + + /* ---------- 3. 核心函数:找 Liam 水 + 血条守护 ---------- */ + /** + * 在当前游戏画面里找「Liam」的水图标 + * @returns {Promise<{found:boolean, x:number, y:number}>} + */ + findLiamShui: async function () { + const LIMIT = 60_000; // 单轮搜索最多 60 秒 + const start = Date.now(); + + while (Date.now() - start < LIMIT) { + const region = captureGameRegion(); + const hit1 = region.find(Shui); + if (hit1?.x && hit1?.y) { + log.info(`[findLiamShui] 水图标确认 @ (${hit1.x}, ${hit1.y})`); + return { found: true, x: hit1.x, y: hit1.y }; + } + // 血条消失立即结束 + if (!region.find(xietiao)) { + log.info('[findLiamShui] 血条消失,停止搜索'); + return { found: false, x: -1, y: -1 }; + } + await sleep(20); // 高频轮询 + } + + // 60 秒到了仍没找到 + log.warn('[findLiamShui] 60 秒限时到,强制返回未找到'); + return { found: false, x: -1, y: -1 }; + }, + + /* ---------- 4. 工具:鼠标移动脚本(可选) ---------- */ + moveMouseScripts: async function (dx, dy) { + const right = 'assets/Laim/鼠标右一.json'; + const down = 'assets/Laim/鼠标下一.json'; + for (let i = 0; i < Math.abs(dx); i++) await keyMouseScript.runFile(right); + for (let i = 0; i < Math.abs(dy); i++) await keyMouseScript.runFile(down); + }, + + + /** + * 根据地点名称执行预设的路线脚本(跑图路线) + * @param {string} locationName - 地点名称(不含扩展名) + * @returns {Promise} + */ + pathingfiy: async function(locationName) { + log.info('前往路线: '); + const filePath = `assets/Laim/pathing/${locationName}.json`; + await pathingScript.RunFile(filePath); + }, + + + + pickUp: async function () { + log.info('[MobFallAttack] 开始拾取准备'); + + await core.recognizeOnePopup(); + await genshin.tpToStatueOfTheSeven(); + + await sleep(1200); + +// await genshin.Tp(3032.96875, 3732.70); + + dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: true })); + await sleep(1200); + keyPress("1"); + await sleep(1200); + keyPress("3"); + await sleep(1200); + await this.pathingfiy('Laim1'); + + + +await sleep(1200); + keyDown('e'); + await sleep(1000); + keyUp('e'); +await sleep(300);await click(960, 540); + + await sleep(3600); + dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: false })); + + + + } + + + + + + + +}; \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/lib/Laim/lib/MobPuller.js b/repo/js/诛贼-地方传奇-利亚姆/lib/Laim/lib/MobPuller.js new file mode 100644 index 000000000..b6d5d09e2 --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/lib/Laim/lib/MobPuller.js @@ -0,0 +1,209 @@ +/* ========================================================= + * MobPuller.js + * 功能:自动拉怪 → 寻灯 → 射击 直到出现血条! + * 用法:await MobPuller.executeMainProcess(); + * ========================================================= */ + xietiao = RecognitionObject.TemplateMatch( + file.ReadImageMatSync('assets/Recognition/血条.png'), 600, 0, 600, 120); + Shui = RecognitionObject.TemplateMatch( + file.ReadImageMatSync('assets/Recognition/Shui.png'), 740, 90, 100, 50); +var MobPuller = { + + /* ------------------------------------------------------ + * 委托前准备:目前空壳,后续可补充吃药、换队、开 Buff 等 + * ------------------------------------------------------ */ + Run01: async function() { + log.info("[MobPuller] 开始执行前准备"); + // TODO: 换角色、吃药、开盾、记时间戳等 + log.info("[MobPuller] 前准备完成"); + }, + + /* ------------------------------------------------------ + * 主流程:移植自原 main(),已补全日志 + * ------------------------------------------------------ */ + executeMainProcess: async function() { + log.info("[MobPuller] ====== 拉怪流程启动 ======"); + try { + await this.Run01(); // 预留准备阶段 + + await sleep(200); + log.info("[MobPuller] 开始路径脚本 "); + await this.pathingfiy('Laim'); + + await genshin.returnMainUi(); + keyPress("2"); + + await sleep(600); + keyDown('e'); + await sleep(1000); + keyUp('e'); + + await sleep(600); + keyPress("1"); + + await sleep(600); + keyPress("r"); + + await sleep(100); + keyDown('w'); + await sleep(800); + keyUp('w'); + + await sleep(1200); + log.info("[MobPuller] 开始寻灯并射击"); + // 主流程里 + const ok = await this.findLamp(); + log.info('[MobPuller] ====== 拉怪流程结束 ======'); + if (!ok) { + log.warn('[MobPuller] 未找到灯/血条,流程中断') + }else{ + const down400 = 'assets/Laim/鼠标右负百.json'; + const down20 = 'assets/Laim/鼠标右负十.json'; + for (let i = 0; i < 4; i++)await keyMouseScript.runFile(down400); + for (let j = 0; j < 3; j++)await keyMouseScript.runFile(down20); + } + + return ok; + } catch (err) { + log.error(`[MobPuller] 流程异常: ${err.message}`); + throw err; // 抛到最外层统一捕获 + } + }, + + + /** + * 在当前游戏画面里找「灯」图标 + * @returns {Promise} true=检测到血条 + */ + findLamp: async function() { + /* ========== 1. 直接初始化模板 ========== */ + const lampRo = RecognitionObject.TemplateMatch( + file.ReadImageMatSync('assets/Recognition/DENG.png'), + 1160, 540, // x, y + genshin.width - 1170, // w + genshin.height / 2 // h + ); + const lampRo02 = RecognitionObject.TemplateMatch( + file.ReadImageMatSync('assets/Recognition/DENG.png'), + 1160, 540, + genshin.width - 1170, + genshin.height / 2 + ); + const xietiaoRo = RecognitionObject.TemplateMatch( + file.ReadImageMatSync('assets/Recognition/血条.png'), + 0, 0, + genshin.width, + Math.round(genshin.height / 5) + ); + + /* ========== 2. 搜索逻辑(与原流程一致) ========== */ + let a = 0; + for (let j = 0; j < 3; j++) { + const region = captureGameRegion(); + const found = region.find(lampRo); + const found2 = region.find(lampRo02); + + if (found && found.x !== 0 && found.y !== 0) { + log.info(`[findLamp] 找到灯图标(模板1) @ (${found.x}, ${found.y})`); + a++; + await this.moveLampAndclick(found.x, found.y); + } + if (found2 && found2.x !== 0 && found2.y !== 0 && a === 0) { + log.info(`[findLamp] 找到灯图标(模板2) @ (${found2.x}, ${found2.y})`); + await this.moveLampAndclick(found2.x, found2.y); + } + await sleep(600); + + /* 血条子循环 */ + for (let k = 0; k < 64; k++) { + await sleep(100); + + const ocrRes = Array.from(captureGameRegion().findMulti(RecognitionObject.ocr(900, 10, 100, 40)) || []); + const found01 = ocrRes.some(r => r.text.includes('利亚姆')); + if (found01) { log.info('[findLamp] 找到利亚姆'); return true; } + + } + } + await sleep(200); + keyPress('r'); + await sleep(200); + middleButtonClick(); + await sleep(1200); + keyPress('r'); + await sleep(800); + + log.error('[findLamp] 未找到灯或血条'); + return false; + }, + + /** + * 将灯光目标点 (lx, ly) 映射到鼠标移动脚本并左键射击 + */ + moveLampAndclick: async function(lx, ly) { + const cx = 960, cy = 540; + const dx = Math.round((lx - cx) / 2.223) - 176 - 36; + const dy = Math.round((ly - cy) / 0.8) - 60 - 109; + + const right1 = 'assets/Laim/鼠标右一.json'; + const down1 = 'assets/Laim/鼠标下一.json'; + + log.info(`[moveLampAndclick] 计算偏移 → dx=${dx}, dy=${dy}`); + + for (let i = 0; i < Math.abs(dx); i++) await keyMouseScript.runFile(right1); + for (let i = 0; i < Math.abs(dy); i++) await keyMouseScript.runFile(down1); + + await sleep(150); + keyPress("VK_LBUTTON"); + await sleep(150); + log.info("[moveLampAndclick] 射击完成"); + }, + + /** + * 根据地点名称执行预设的路线脚本(跑图路线) + * @param {string} locationName - 地点名称(不含扩展名) + * @returns {Promise} + */ + pathingfiy: async function(locationName) { + log.info('[MobPuller] 前往路线: {name}', locationName); + const filePath = `assets/pathing/Laim/${locationName}.json`; + await pathingScript.RunFile(filePath); + }, + + /** + * 执行键鼠录制脚本 + * @param {string} locationName - 键鼠脚本文件名(不含扩展名) + * @param {boolean} [istp=true] - 是否先传送 + * @param {number} [x=253.3994140625] - 传送 X + * @param {number} [y=1285.4423828125] - 传送 Y + * @returns {Promise} + */ + captureCrystalfly: async function(locationName, istp = true, x = 253.3994140625, y = 1285.4423828125) { + if (istp) { + log.info('[MobPuller] 传送至: {name}', locationName); + await genshin.tp(x, y); + await sleep(1000); + } + log.info('[MobPuller] 开始键鼠脚本: {name}', locationName); + const filePath = `assets/KeyMouseScript/${locationName}.json`; + await keyMouseScript.runFile(filePath); + }, + + /** + * 将灯光目标点 (lx, ly) 映射到鼠标移动脚本并左键射击 + * @param {number} lx - 目标 x + * @param {number} ly - 目标 y + * @returns {Promise} + */ + moveLampToCenter: async function(lx, ly) { + const cx = 960, cy = 540; + const dx = Math.round((lx - cx) / 2.4); + const dy = Math.round((ly - cy) / 1.20); + moveMouseBy(dx, 0); + moveMouseBy(0, dy); + }, + + + + +}; + diff --git a/repo/js/诛贼-地方传奇-利亚姆/lib/Laim/lib/core.js b/repo/js/诛贼-地方传奇-利亚姆/lib/Laim/lib/core.js new file mode 100644 index 000000000..4820e35ff --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/lib/Laim/lib/core.js @@ -0,0 +1,177 @@ + +const pick = settings.liam_pick_dogfood || "节约时间,不拿了"; + +var core = { + + /* ------------------------------------------------------ + * 1. 前置准备(模板、别名、分辨率等) + * ------------------------------------------------------ */ + Run01: async function () { + log.info('[Core] 开始执行前准备'); + log.info('[Core] 模板加载完成'); + await genshin.tpToStatueOfTheSeven(); + // TODO: 吃药、换队、Buff 等 + log.info('[Core] 前准备完成'); + }, + + /* ------------------------------------------------------ + * 2. 识别摩拉(依赖三个工具函数) + * ------------------------------------------------------ */ + mora: async function () { + const CharacterMenuRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/Recognition/DENG.png")); + let result = 0, tryTimes = 0; + while (result === 0 && tryTimes < 3) { + await genshin.returnMainUi(); + log.info('[Core] 开始识别摩拉'); + keyPress('C'); + await sleep(1500); + + let recognized = false, startTime = Date.now(); + while (Date.now() - startTime < 5000) { + /* ---- 角色菜单图标 ---- */ + const charRes = await this.recognizeImage(CharacterMenuRo, 5000); + if (charRes.success) { + await click(177, 433); + await sleep(500); + recognized = true; + break; + } + /* ---- 天赋文字 ---- */ + const talentRes = await this.recognizeTextAndClick('天赋', { x: 133, y: 395, width: 115, height: 70 }); + if (talentRes.success) { + log.info(`[Core] 点击天赋文字 @ ${talentRes.x}, ${talentRes.y}`); + recognized = true; + break; + } + await sleep(1000); + } + + if (recognized) { + const moraText = await this.recognizeTextInRegion({ x: 1620, y: 25, width: 152, height: 46 }); + if (moraText) { + log.info(`[Core] 识别到摩拉: ${moraText}`); + result = Number(moraText) || 0; + } + } + tryTimes++; + await genshin.returnMainUi(); + await sleep(500); + } + return result; + }, + + + recognizeImage: async function (recognitionObject, timeout = 5000) { + const start = Date.now(); + while (Date.now() - start < timeout) { + try { + const r = captureGameRegion().find(recognitionObject); + if (r) return { success: true, x: r.x, y: r.y }; + } catch (e) { log.error(`[Core] 识别图像异常: ${e.message}`); } + await sleep(500); + } + log.warn('[Core] 识别图像超时'); + return { success: false }; + }, + + recognizeTextAndClick: async function (targetText, ocrRegion, timeout = 3000) { + const start = Date.now(); + let retry = 0; + while (Date.now() - start < timeout) { + try { + const list = captureGameRegion() + .findMulti(RecognitionObject.ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height)); + for (const res of list) { + if (res.text.includes(targetText)) { + const cx = Math.round(res.x + res.width / 2); + const cy = Math.round(res.y + res.height / 2); + await click(cx, cy); + await sleep(500); + return { success: true, x: cx, y: cy }; + } + } + } catch (e) { + retry++; + log.warn(`[Core] 文字识别失败,第${retry}次重试...`); + } + await sleep(1000); + } + /* 超时点默认中心 */ + const cx = Math.round(ocrRegion.x + ocrRegion.width / 2); + const cy = Math.round(ocrRegion.y + ocrRegion.height / 2); + await click(cx, cy); + await sleep(1000); + return { success: false }; + }, + + recognizeTextInRegion: async function (ocrRegion, timeout = 5000) { + const start = Date.now(); + let retry = 0; + while (Date.now() - start < timeout) { + try { + const ocrResult = captureGameRegion() + .find(RecognitionObject.ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height)); + if (ocrResult) return ocrResult.text; + } catch (e) { + retry++; + log.warn(`[Core] OCR 识别失败,第${retry}次重试...`); + } + await sleep(500); + } + log.warn('[Core] 指定区域未识别到文字'); + return null; + }, + + /* ------------------------------------------------------ + * 3. 主流程(射击 → 下落 → 摩拉校验) + * ------------------------------------------------------ */ + executeMainProcess: async function () { + log.info('[Core] >>>>>> 核心主流程启动 >>>>>>'); + try { + eval(file.readTextSync("lib/Laim/lib/MobPuller.js")); + eval(file.readTextSync("lib/Laim/lib/MobFallAttack.js")); + await this.recognizeOnePopup(); + await this.Run01(); + const moraBefore = await this.mora(); + log.info(`[Core] 开始前摩拉: ${moraBefore}`); + + const shootOK = await MobPuller.executeMainProcess(); + if (!shootOK) return false; + await sleep(5200); + await this.recognizeOnePopup(); + + const fallOK = await MobFallAttack.executeMainProcess(); + if (!fallOK) return false; + + await sleep(10000); + await this.recognizeOnePopup(); + const moraAfter = await this.mora(); + const delta = moraAfter - moraBefore; + log.info(`[Core] 摩拉增长: ${delta}`); + if ((delta >= 2000) && pick === "我全都要!") { + await MobFallAttack.pickUp(); + } + await genshin.tpToStatueOfTheSeven(); + await this.recognizeOnePopup(); + return delta >= 2000; + } catch (err) { + log.error(`[Core] 主流程异常: ${err.message}`); + throw err; + } + }, + + /** + * 识别并处理多人复活 + */ + recognizeOnePopup: async function () { + /* ---------- 1. 拼路径 ---------- */ + const iconFiles = `assets/ui/a.png`; + const tplMat = RecognitionObject.TemplateMatch(file.ReadImageMatSync(iconFiles), 0, 0, 1920, 1080); + + const joinResult = captureGameRegion().find(tplMat); + if (joinResult.isExist()) { + joinResult.click(); + await sleep(6666); + } + } +}; \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/lib/core.js b/repo/js/诛贼-地方传奇-利亚姆/lib/core.js new file mode 100644 index 000000000..e2bcc547e --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/lib/core.js @@ -0,0 +1,49 @@ + +eval(file.readTextSync('lib/Laim/lib/core.js')); + + +var Core = { + + + /* ------------------------------------------------------ + * 仅执行单次流程(单人) + * ------------------------------------------------------ */ + executeSingleProcess: async function () { + try { + + await genshin.switchParty(settings.partyName); + + + keyPress('1'); + await genshin.returnMainUi(); + + await core.executeMainProcess(); + + keyPress('Space'); + + // 4. 检测复活 + const iconFiles = 'assets/ui/a.png';//可能是 + const tplMat = RecognitionObject.TemplateMatch(file.ReadImageMatSync(iconFiles), 0, 0, 1920, 1080); + const joinResult = captureGameRegion().find(tplMat); + if (joinResult.isExist()) { + joinResult.click(); + await sleep(8888); + } + const iconFiles1 = 'assets/ui/确认.png';//单人 + const tplMat1 = RecognitionObject.TemplateMatch(file.ReadImageMatSync(iconFiles1), 0, 0, 1920, 1080); + const joinResult1 = captureGameRegion().find(tplMat1); + if (joinResult1.isExist()) { + joinResult1.click(); + await sleep(8888); + } + + return { ok: true, reason: '单人流程完成' }; + + } catch (e) { + log.error(`[Core] 单次流程异常:${e.message}`); + return { ok: false, reason: `异常: ${e.message}` }; + } + }, + + +}; \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/main.js b/repo/js/诛贼-地方传奇-利亚姆/main.js new file mode 100644 index 000000000..c84511a43 --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/main.js @@ -0,0 +1,12 @@ +eval(file.readTextSync('lib/core.js')); + +(async function main() { + try { + await sleep(2000); + await Core.executeSingleProcess(); + + + } catch (err) { + log.error(`服务崩溃: ${err.message}`); + } +})(); diff --git a/repo/js/诛贼-地方传奇-利亚姆/manifest.json b/repo/js/诛贼-地方传奇-利亚姆/manifest.json new file mode 100644 index 000000000..3779fd8ab --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 1, + "name": "地方传奇·药剂师-利亚姆", + "version": "3.0", + "description": "打利亚姆", + "authors": [ + { + "name": "xiaozhang12312", + "links": "https://github.com/xiaozhang12312" + } + ], + "settings_ui": "settings.json", + "main": "main.js" +} \ No newline at end of file diff --git a/repo/js/诛贼-地方传奇-利亚姆/settings.json b/repo/js/诛贼-地方传奇-利亚姆/settings.json new file mode 100644 index 000000000..bf5f11d9d --- /dev/null +++ b/repo/js/诛贼-地方传奇-利亚姆/settings.json @@ -0,0 +1,15 @@ +[ + + { + "name": "liam_pick_dogfood", + "type": "select", + "label": "关于利亚姆:是否拾取狗娘(要有万叶)", + "options": ["我全都要!", "没有万叶(≧口≦)", "节约时间,不拿了"], + "default": "节约时间,不拿了" + }, + { + "name": "partyName", + "type": "input-text", + "label": "配队名称, 推荐队伍中1号提纳里 2号是钟离 3号是万叶" + } +] \ No newline at end of file