44let letterNumber = settings . letterNumber != undefined && ~ ~ settings . letterNumber >= 0 ? ~ ~ settings . letterNumber : 0 ;
55let challengeNumber = settings . challengeNumber != undefined && ~ ~ settings . challengeNumber > 0 ? ~ ~ settings . challengeNumber : 1 ;
66
7+ //检测传送结束
8+ async function tpEndDetection ( ) {
9+ const region = RecognitionObject . ocr ( 1690 , 230 , 75 , 350 ) ; // 队伍名称区域
10+ let tpTime = 0 ;
11+ await sleep ( 500 ) ; //点击传送后等待一段时间避免误判
12+ //最多30秒传送时间
13+ while ( tpTime < 300 ) {
14+ let capture = captureGameRegion ( ) ;
15+ let res = capture . find ( region ) ;
16+ if ( ! res . isEmpty ( ) ) {
17+ log . info ( "传送完成" ) ;
18+ await sleep ( 1200 ) ; //传送结束后有僵直
19+ return ;
20+ }
21+ tpTime ++ ;
22+ await sleep ( 100 ) ;
23+ }
24+ throw new Error ( "传送时间超时" ) ;
25+ }
26+
727//函数:找小王子买邀请函
828 async function BuyLetter ( ) {
929await sleep ( 700 ) ;
@@ -25,6 +45,8 @@ click(160, 245);//选择邀请函
2545await sleep ( 1000 ) ;
2646click ( 610 , 360 ) ; //点击邀请函
2747await sleep ( 1000 ) ;
48+ click ( 747 , 628 ) ; //只买一个
49+ await sleep ( 1000 ) ;
2850click ( 1185 , 755 ) ; //点击购买
2951await sleep ( 1000 ) ;
3052click ( 1185 , 755 ) ; //点击空白处
@@ -52,72 +74,71 @@ await sleep(1000);
5274
5375//函数:对话和打牌
5476 async function Playcards ( ) {
55- click ( 900 , 1000 ) ; //对话
56- await sleep ( 500 ) ;
57- click ( 900 , 1000 ) ; //对话
58- await sleep ( 1000 ) ;
59- click ( 900 , 1000 ) ; //对话
60- await sleep ( 500 ) ;
61- click ( 900 , 1000 ) ; //对话
62- await sleep ( 1000 ) ;
63- click ( 900 , 1000 ) ; //对话
64- await sleep ( 500 ) ;
65- click ( 900 , 1000 ) ; //对话
66- await sleep ( 1000 ) ;
67- click ( 900 , 1000 ) ; //对话
68- await sleep ( 500 ) ;
69- click ( 900 , 1000 ) ; //对话
77+ await autoConversation ( ) ;
7078await sleep ( 1000 ) ;
71- click ( 900 , 1000 ) ; //对话
72- await sleep ( 500 ) ;
73- click ( 900 , 1000 ) ; //对话
74- await sleep ( 1000 ) ;
75- click ( 900 , 1000 ) ; //对话
76- await sleep ( 500 ) ;
77- click ( 900 , 1000 ) ; //对话
78- await sleep ( 1000 ) ;
79- keyPress ( "F" ) ;
80- await sleep ( 8000 ) ;
8179await dispatcher . runTask ( new SoloTask ( "AutoGeniusInvokation" ) ) ;
8280await sleep ( 3000 ) ;
8381click ( 754 , 915 ) ; //退出挑战
84- await sleep ( 10000 ) ;
85- click ( 900 , 1000 ) ; //对话
86- await sleep ( 1500 ) ;
87- click ( 900 , 1000 ) ; //对话
88- await sleep ( 1500 ) ;
89- click ( 900 , 1000 ) ; //对话
90- await sleep ( 1500 ) ;
91- click ( 900 , 1000 ) ; //对话
92- await sleep ( 1500 ) ;
82+ await sleep ( 1000 ) ;
83+ await autoConversation ( ) ;
9384 }
9485
86+ //通过f和空格自动对话,对话标志消失时停止await autoConversation();
87+ async function autoConversation ( ) {
88+ await sleep ( 2500 ) ; //点击后等待一段时间避免误判
89+ const talkRo = RecognitionObject . TemplateMatch ( file . ReadImageMatSync ( "assets/talkSymbol.png" ) ) ;
90+ let talkTime = 0 ;
91+ let talkTimes = 0 ;
92+ log . info ( "开始对话" ) ;
93+ //最多10次对话
94+ while ( talkTime < 30 ) {
95+ let talk = captureGameRegion ( ) . find ( talkRo ) ;
96+ if ( talk . isExist ( ) ) {
97+ await sleep ( 300 ) ;
98+ keyPress ( "VK_SPACE" ) ;
99+ await sleep ( 300 ) ;
100+ keyPress ( "F" ) ;
101+ talkTimes ++ ;
102+ await sleep ( 1500 ) ;
103+ }
104+ else if ( talkTimes ) {
105+ log . info ( "对话结束" ) ;
106+ return ;
107+ }
108+ talkTime ++ ;
109+ await sleep ( 1500 ) ;
110+ }
111+ throw new Error ( "对话时间超时" ) ;
112+ }
113+
95114//函数:打开地图前往猫尾酒馆
96- async function gotoTavern ( ) {
97- await sleep ( 1000 ) ;
98- keyPress ( "M" ) ;
99- await sleep ( 1500 ) ;
100- click ( 1841 , 1015 ) ; //地图选择
101- await sleep ( 1000 ) ;
102- click ( 1460 , 140 ) ; //蒙德
103- await sleep ( 1000 ) ;
104- click ( 48 , 441 ) ; //放大地图
105- await sleep ( 500 ) ;
106- click ( 48 , 441 ) ; //放大地图
107- await sleep ( 500 ) ;
108- click ( 48 , 441 ) ; //放大地图
109- await sleep ( 500 ) ;
110- click ( 48 , 441 ) ; //放大地图
111- await sleep ( 500 ) ;
112- click ( 48 , 441 ) ; //放大地图
113- await sleep ( 500 ) ;
114- click ( 1000 , 645 ) ; //猫尾酒馆
115- await sleep ( 500 ) ;
116- click ( 1345 , 690 ) ; //猫尾酒馆
117- await sleep ( 500 ) ;
118- click ( 1707 , 1010 ) ; //猫尾酒馆
119- await sleep ( 8000 ) ;
115+ async function gotoTavern ( ) {
116+ const tavernRo = RecognitionObject . TemplateMatch ( file . ReadImageMatSync ( "assets/tavern.png" ) ) ;
117+ await genshin . returnMainUi ( ) ;
118+ await sleep ( 1000 ) ;
119+ keyPress ( "m" ) ;
120+ await sleep ( 1500 ) ;
121+ click ( 1841 , 1015 ) ; //地图选择
122+ await sleep ( 1000 ) ;
123+ click ( 1460 , 140 ) ; //蒙德
124+ await sleep ( 1200 ) ;
125+ //放大地图
126+ await genshin . setBigMapZoomLevel ( 1.0 ) ;
127+ await sleep ( 400 ) ;
128+
129+ click ( 1000 , 645 ) ; //猫尾酒馆
130+ await sleep ( 600 ) ;
131+ let tavern = captureGameRegion ( ) . find ( tavernRo ) ;
132+ if ( tavern . isExist ( ) ) {
133+ tavern . click ( ) ;
134+ await sleep ( 500 ) ;
135+ } else {
136+ throw new Error ( "未能找到猫尾酒馆" ) ;
120137 }
138+ click ( 1707 , 1010 ) ; //确认传送
139+ await sleep ( 1000 ) ;
140+ await tpEndDetection ( ) ;
141+ }
121142
122143//函数:前往邀请版(酒馆内)
123144 async function gotoBoard1 ( ) {
@@ -147,31 +168,13 @@ keyUp("s");
147168await sleep ( 1000 ) ;
148169 }
149170
150- //函数:打开自动剧情
151- async function autoPlot ( ) {
152- await sleep ( 1000 ) ;
153- keyPress ( "ESCAPE" ) ;
154- await sleep ( 1500 ) ;
155- click ( 45 , 820 ) ;
156- await sleep ( 1500 ) ;
157- click ( 175 , 710 ) ;
158- await sleep ( 1500 ) ;
159- click ( 1628 , 275 ) ;
160- await sleep ( 1500 ) ;
161- click ( 1628 , 330 ) ;
162- await sleep ( 1500 ) ;
163- keyPress ( "ESCAPE" ) ;
164- await sleep ( 1000 ) ;
165- keyPress ( "ESCAPE" ) ;
166- await sleep ( 1000 ) ;
167- }
171+
168172
169173//主流程
170- // await pathingScript.runFile(`assets/1.json`);用不来从其他界面强制回到大世界,只能用这个
171- log . info ( `开始执行。 ` ) ;
174+ await genshin . returnMainUi ( ) ;
175+ log . info ( `开始执行角色邀约挑战 ` ) ;
172176for ( let i = 0 ; i < challengeNumber ; i ++ ) {
173177 await gotoTavern ( ) ;
174- await sleep ( 2000 ) ;
175178 if ( challengeNumber - letterNumber > 0 ) {
176179 log . info ( `购买第${ i + 1 } 次` ) ;
177180 await BuyLetter ( ) ;
0 commit comments