@@ -46,6 +46,7 @@ protected override async Task MainLoop(CancellationToken token)
4646 EncounterMode . Regis => DoRegiEncounter ( token ) ,
4747 EncounterMode . LegendaryDogs => DoDogEncounter ( token ) ,
4848 EncounterMode . SwordsJustice => DoJusticeEncounter ( token ) ,
49+ EncounterMode . GalarianArticuno => DoGArticunoEncounter ( token ) ,
4950 //EncounterMode.LGPE => DoLGPEEncounter(token),
5051 _ => WalkInLine ( token ) ,
5152 } ;
@@ -227,21 +228,34 @@ private async Task DoDogEncounter(CancellationToken token)
227228
228229 private async Task DoJusticeEncounter ( CancellationToken token )
229230 {
231+ Log ( "For a better experience, ldn-mitm sysmodule is suggested to be installed." ) ;
232+ bool reset = false ;
230233 while ( ! token . IsCancellationRequested )
231234 {
232235 // Waiting to be in the overworld
233236 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 ) ;
235238
236239 // Enter and exit Pokecamp in order to respawn the Pokemon
237240 await PokeCamp ( token ) ;
238241
239242 //Check position
240243 int i = 0 ;
241- while ( ! await IsInBattle ( token ) . ConfigureAwait ( false ) )
244+ while ( ! await IsInBattle ( token ) . ConfigureAwait ( false ) && ! reset )
242245 {
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+ }
245259 i ++ ;
246260 }
247261
@@ -260,14 +274,56 @@ private async Task DoJusticeEncounter(CancellationToken token)
260274
261275 // Offsets are flickery so make sure we see it 3 times.
262276 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 ) ;
264278
265279 if ( await HandleEncounter ( pk , true , token ) . ConfigureAwait ( false ) )
266280 return ;
267281
268- // Run awai if not the wanted encounter
282+ // Run away if not the wanted encounter
269283 while ( await IsInBattle ( token ) . ConfigureAwait ( false ) )
284+ {
285+ await Task . Delay ( 1_000 , token ) . ConfigureAwait ( false ) ;
270286 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 ) ;
271327 }
272328 }
273329
@@ -362,6 +418,7 @@ private async Task ResetStick(CancellationToken token)
362418 private async Task FleeToOverworld ( CancellationToken token )
363419 {
364420 // This routine will always escape a battle.
421+ await Task . Delay ( 1_000 , token ) . ConfigureAwait ( false ) ;
365422 await Click ( DUP , 0_400 , token ) . ConfigureAwait ( false ) ;
366423 await Click ( A , 0_400 , token ) . ConfigureAwait ( false ) ;
367424 await Click ( B , 0_400 , token ) . ConfigureAwait ( false ) ;
0 commit comments