diff --git a/pokemongo_bot/cell_workers/catch_lured_pokemon.py b/pokemongo_bot/cell_workers/catch_lured_pokemon.py index 5c1456b88f..e5e4053ef7 100644 --- a/pokemongo_bot/cell_workers/catch_lured_pokemon.py +++ b/pokemongo_bot/cell_workers/catch_lured_pokemon.py @@ -11,13 +11,25 @@ class CatchLuredPokemon(BaseTask): SUPPORTED_TASK_API_VERSION = 1 + def initialize(self): + self.encountered = [None] * 10 + + def add_encountered(self, pokemon): + self.encountered = self.encountered[1:] + [pokemon['encounter_id']] + + def was_encountered(self, pokemon): + if pokemon['encounter_id'] in self.encountered: + return True + return False + def work(self): lured_pokemon = self.get_lured_pokemon() if len(lured_pokemon) > 0: - self.catch_pokemon(lured_pokemon[0]) - - if len(lured_pokemon) > 1: - return WorkerResult.RUNNING + for pokemon in lured_pokemon: + if not self.was_encountered(pokemon): + self.catch_pokemon(pokemon) + self.add_encountered(pokemon) + return WorkerResult.RUNNING return WorkerResult.SUCCESS diff --git a/pokemongo_bot/cell_workers/catch_visible_pokemon.py b/pokemongo_bot/cell_workers/catch_visible_pokemon.py index 9c9dfb8024..33ddfffcef 100644 --- a/pokemongo_bot/cell_workers/catch_visible_pokemon.py +++ b/pokemongo_bot/cell_workers/catch_visible_pokemon.py @@ -11,6 +11,17 @@ class CatchVisiblePokemon(BaseTask): SUPPORTED_TASK_API_VERSION = 1 + def initialize(self): + self.encountered = [None] * 10 + + def add_encountered(self, pokemon): + self.encountered = self.encountered[1:] + [pokemon['encounter_id']] + + def was_encountered(self, pokemon): + if pokemon['encounter_id'] in self.encountered: + return True + return False + def work(self): num_catchable_pokemon = 0 if 'catchable_pokemons' in self.bot.cell: @@ -45,12 +56,12 @@ def work(self): 'expiration_timestamp_ms': pokemon['expiration_timestamp_ms'], } ) - - self.catch_pokemon(self.bot.cell['catchable_pokemons'].pop(0)) - if num_catchable_pokemon > 1: - return WorkerResult.RUNNING - else: - return WorkerResult.SUCCESS + if not self.was_encountered(pokemon): + self.catch_pokemon(pokemon) + self.add_encountered(pokemon) + return WorkerResult.RUNNING + + return WorkerResult.SUCCESS if num_available_pokemon > 0: # Sort all by distance from current pos- eventually this should @@ -58,12 +69,14 @@ def work(self): self.bot.cell['wild_pokemons'].sort( key= lambda x: distance(self.bot.position[0], self.bot.position[1], x['latitude'], x['longitude'])) - self.catch_pokemon(self.bot.cell['wild_pokemons'].pop(0)) - if num_catchable_pokemon > 1: - return WorkerResult.RUNNING - else: - return WorkerResult.SUCCESS + for pokemon in self.bot.cell['wild_pokemons']: + if not self.was_encountered(pokemon): + self.catch_pokemon(pokemon) + self.add_encountered(pokemon) + return WorkerResult.RUNNING + + return WorkerResult.SUCCESS def catch_pokemon(self, pokemon): worker = PokemonCatchWorker(pokemon, self.bot, self.config)