@@ -46,6 +46,7 @@ protected override async Task MainLoop(CancellationToken token)
46
46
EncounterMode . Regis => DoRegiEncounter ( token ) ,
47
47
EncounterMode . LegendaryDogs => DoDogEncounter ( token ) ,
48
48
EncounterMode . SwordsJustice => DoJusticeEncounter ( token ) ,
49
+ EncounterMode . GalarianArticuno => DoGArticunoEncounter ( token ) ,
49
50
//EncounterMode.LGPE => DoLGPEEncounter(token),
50
51
_ => WalkInLine ( token ) ,
51
52
} ;
@@ -227,21 +228,34 @@ private async Task DoDogEncounter(CancellationToken token)
227
228
228
229
private async Task DoJusticeEncounter ( CancellationToken token )
229
230
{
231
+ Log ( "For a better experience, ldn-mitm sysmodule is suggested to be installed." ) ;
232
+ bool reset = false ;
230
233
while ( ! token . IsCancellationRequested )
231
234
{
232
235
// Waiting to be in the overworld
233
236
while ( ! await IsOnOverworld ( Hub . Config , token ) . ConfigureAwait ( false ) )
234
- await Task . Delay ( 2_000 , token ) . ConfigureAwait ( false ) ;
237
+ await Task . Delay ( 0_500 , token ) . ConfigureAwait ( false ) ;
235
238
236
239
// Enter and exit Pokecamp in order to respawn the Pokemon
237
240
await PokeCamp ( token ) ;
238
241
239
242
//Check position
240
243
int i = 0 ;
241
- while ( ! await IsInBattle ( token ) . ConfigureAwait ( false ) )
244
+ while ( ! await IsInBattle ( token ) . ConfigureAwait ( false ) && ! reset )
242
245
{
243
- await Task . Delay ( 1_000 , token ) . ConfigureAwait ( false ) ;
244
- if ( i == 5 ) Log ( "Position could be wrong or Pokécamp option is not the first available in the menu.\n " ) ;
246
+ await Task . Delay ( 0_500 , token ) . ConfigureAwait ( false ) ;
247
+ if ( i == 15 )
248
+ {
249
+ Log ( "Position could be wrong or Pokécamp option is not the first available in the menu.\n Trying to reset the game." ) ;
250
+ reset = true ;
251
+ }
252
+ if ( reset == true )
253
+ {
254
+ reset = false ;
255
+ i = 0 ;
256
+ await CloseGame ( Hub . Config , token ) . ConfigureAwait ( false ) ;
257
+ await StartGame ( Hub . Config , token ) . ConfigureAwait ( false ) ;
258
+ }
245
259
i ++ ;
246
260
}
247
261
@@ -260,14 +274,56 @@ private async Task DoJusticeEncounter(CancellationToken token)
260
274
261
275
// Offsets are flickery so make sure we see it 3 times.
262
276
for ( i = 0 ; i < 3 ; i ++ )
263
- await ReadUntilChanged ( BattleMenuOffset , BattleMenuReady , 5_000 , 0_100 , true , token ) . ConfigureAwait ( false ) ;
277
+ await ReadUntilChanged ( BattleMenuOffset , BattleMenuReady , 5_000 , 0_100 , true , token ) . ConfigureAwait ( false ) ;
264
278
265
279
if ( await HandleEncounter ( pk , true , token ) . ConfigureAwait ( false ) )
266
280
return ;
267
281
268
- // Run awai if not the wanted encounter
282
+ // Run away if not the wanted encounter
269
283
while ( await IsInBattle ( token ) . ConfigureAwait ( false ) )
284
+ {
285
+ await Task . Delay ( 1_000 , token ) . ConfigureAwait ( false ) ;
270
286
await FleeToOverworld ( token ) . ConfigureAwait ( false ) ;
287
+ }
288
+ }
289
+ }
290
+
291
+ private async Task DoGArticunoEncounter ( CancellationToken token )
292
+ {
293
+ Log ( "PLEASE NOTE THAT THIS BOT IS NOT FULLY FUNCTIONAL. ONLY AVAILABLE FOR TESTING PURPOSES." ) ;
294
+ while ( ! token . IsCancellationRequested )
295
+ {
296
+ //Waiting for Articuno Battle
297
+ int i = 0 ;
298
+ while ( await ReadUntilPresent ( WildPokemonOffset , 2_000 , 0_200 , token ) . ConfigureAwait ( false ) == null )
299
+ {
300
+ await Task . Delay ( 0_500 , token ) . ConfigureAwait ( false ) ;
301
+ if ( i == 5 ) Log ( "The Pokémon is flew away. Sorry." ) ;
302
+ i ++ ;
303
+ }
304
+
305
+ //Read Pokémon Information
306
+ Log ( "Encounter Articuno started! Checking details..." ) ;
307
+ var pk = await ReadUntilPresent ( WildPokemonOffset , 2_000 , 0_200 , token ) . ConfigureAwait ( false ) ;
308
+ if ( pk == null )
309
+ Log ( "Not right Offset." ) ;
310
+
311
+ // Offsets are flickery so make sure we see it 3 times.
312
+ for ( i = 0 ; i < 3 ; i ++ )
313
+ await ReadUntilChanged ( BattleMenuOffset , BattleMenuReady , 5_000 , 0_100 , true , token ) . ConfigureAwait ( false ) ;
314
+
315
+ if ( await HandleEncounter ( pk , true , token ) . ConfigureAwait ( false ) )
316
+ return ;
317
+
318
+ // Run awai if not the wanted encounter
319
+ await FleeToOverworld ( token ) . ConfigureAwait ( false ) ;
320
+
321
+ // Waiting to be in the overworld
322
+ while ( ! await IsOnOverworld ( Hub . Config , token ) . ConfigureAwait ( false ) )
323
+ await Click ( A , 1_000 , token ) . ConfigureAwait ( false ) ;
324
+
325
+ // Enter and exit Pokecamp in order to respawn the Pokemon
326
+ await PokeCamp ( token ) ;
271
327
}
272
328
}
273
329
@@ -362,6 +418,7 @@ private async Task ResetStick(CancellationToken token)
362
418
private async Task FleeToOverworld ( CancellationToken token )
363
419
{
364
420
// This routine will always escape a battle.
421
+ await Task . Delay ( 1_000 , token ) . ConfigureAwait ( false ) ;
365
422
await Click ( DUP , 0_400 , token ) . ConfigureAwait ( false ) ;
366
423
await Click ( A , 0_400 , token ) . ConfigureAwait ( false ) ;
367
424
await Click ( B , 0_400 , token ) . ConfigureAwait ( false ) ;
0 commit comments