Skip to content

Commit

Permalink
Fix Catch-Filter results in loop when many catchable pokemon is detec…
Browse files Browse the repository at this point in the history
…ted (#4153) (#4610)
  • Loading branch information
helloj authored and solderzzc committed Aug 23, 2016
1 parent 9365d63 commit 8bf419a
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 15 deletions.
20 changes: 16 additions & 4 deletions pokemongo_bot/cell_workers/catch_lured_pokemon.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
35 changes: 24 additions & 11 deletions pokemongo_bot/cell_workers/catch_visible_pokemon.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -45,25 +56,27 @@ 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
# build graph & A* it
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)
Expand Down

0 comments on commit 8bf419a

Please sign in to comment.