diff --git a/pokemongo_bot/cell_workers/pokemon_optimizer.py b/pokemongo_bot/cell_workers/pokemon_optimizer.py index 41fe62cfe7..c8ae0fa781 100644 --- a/pokemongo_bot/cell_workers/pokemon_optimizer.py +++ b/pokemongo_bot/cell_workers/pokemon_optimizer.py @@ -129,103 +129,104 @@ def work(self): if self.lock_buddy and (self.get_pokemon_slot_left() > self.config_min_slots_left): return WorkerResult.SUCCESS - self.open_inventory() + if self.get_pokemon_slot_left() > self.config_min_slots_left: + return WorkerResult.SUCCESS - keep_all = [] - try_evolve_all = [] - try_upgrade_all = [] - buddy_all = [] + # Repeat the optimizer 2 times, to get rid of the trash evolved. + # Moved up from 227 to see if we fix issue #5999 + for _ in itertools.repeat(None, 2): + self.open_inventory() - for rule in self.config_rules: - mode = rule.get("mode", "by_family") - names = rule.get("names", []) - whitelist, blacklist = self.get_colorlist(names) + keep_all = [] + try_evolve_all = [] + try_upgrade_all = [] + buddy_all = [] - if mode == "by_pokemon": - for pokemon_id, pokemon_list in self.group_by_pokemon_id(inventory.pokemons().all()): - name = inventory.pokemons().name_for(pokemon_id) + for rule in self.config_rules: + mode = rule.get("mode", "by_family") + names = rule.get("names", []) + whitelist, blacklist = self.get_colorlist(names) - if name in blacklist: - continue + if mode == "by_pokemon": + for pokemon_id, pokemon_list in self.group_by_pokemon_id(inventory.pokemons().all()): + name = inventory.pokemons().name_for(pokemon_id) - if whitelist and (name not in whitelist): - continue + if name in blacklist: + continue - sorted_list = self.score_and_sort(pokemon_list, rule) + if whitelist and (name not in whitelist): + continue - if len(sorted_list) == 0: - continue + sorted_list = self.score_and_sort(pokemon_list, rule) - keep, try_evolve, try_upgrade, buddy = self.get_best_pokemon_for_rule(sorted_list, rule) - keep_all += keep - try_evolve_all += try_evolve - try_upgrade_all += try_upgrade - buddy_all += buddy - elif mode == "by_family": - for family_id, pokemon_list in self.group_by_family_id(inventory.pokemons().all()): - matching_names = self.get_family_names(family_id) + if len(sorted_list) == 0: + continue - if any(n in blacklist for n in matching_names): - continue + keep, try_evolve, try_upgrade, buddy = self.get_best_pokemon_for_rule(sorted_list, rule) + keep_all += keep + try_evolve_all += try_evolve + try_upgrade_all += try_upgrade + buddy_all += buddy + elif mode == "by_family": + for family_id, pokemon_list in self.group_by_family_id(inventory.pokemons().all()): + matching_names = self.get_family_names(family_id) - if whitelist and not any(n in whitelist for n in matching_names): - continue + if any(n in blacklist for n in matching_names): + continue - sorted_list = self.score_and_sort(pokemon_list, rule) + if whitelist and not any(n in whitelist for n in matching_names): + continue - if len(sorted_list) == 0: - continue + sorted_list = self.score_and_sort(pokemon_list, rule) - if family_id == 133: # "Eevee" - keep, try_evolve, try_upgrade, buddy = self.get_multi_best_pokemon_for_rule(sorted_list, rule, 3) - else: - keep, try_evolve, try_upgrade, buddy = self.get_best_pokemon_for_rule(sorted_list, rule) + if len(sorted_list) == 0: + continue - keep_all += keep - try_evolve_all += try_evolve - try_upgrade_all += try_upgrade - buddy_all += buddy - elif mode == "overall": - pokemon_list = [] + if family_id == 133: # "Eevee" + keep, try_evolve, try_upgrade, buddy = self.get_multi_best_pokemon_for_rule(sorted_list, rule, 3) + else: + keep, try_evolve, try_upgrade, buddy = self.get_best_pokemon_for_rule(sorted_list, rule) - for pokemon in inventory.pokemons().all(): - name = pokemon.name + keep_all += keep + try_evolve_all += try_evolve + try_upgrade_all += try_upgrade + buddy_all += buddy + elif mode == "overall": + pokemon_list = [] - if name in blacklist: - continue + for pokemon in inventory.pokemons().all(): + name = pokemon.name - if whitelist and (name not in whitelist): - continue + if name in blacklist: + continue - pokemon_list.append(pokemon) + if whitelist and (name not in whitelist): + continue - sorted_list = self.score_and_sort(pokemon_list, rule) + pokemon_list.append(pokemon) - if len(sorted_list) == 0: - continue + sorted_list = self.score_and_sort(pokemon_list, rule) - keep, try_evolve, try_upgrade, buddy = self.get_best_pokemon_for_rule(sorted_list, rule) - keep_all += keep - try_evolve_all += try_evolve - try_upgrade_all += try_upgrade - buddy_all += buddy + if len(sorted_list) == 0: + continue - keep_all = self.unique_pokemon_list(keep_all) - try_evolve_all = self.unique_pokemon_list(try_evolve_all) - try_upgrade_all = self.unique_pokemon_list(try_upgrade_all) - buddy_all = self.unique_pokemon_list(buddy_all) + keep, try_evolve, try_upgrade, buddy = self.get_best_pokemon_for_rule(sorted_list, rule) + keep_all += keep + try_evolve_all += try_evolve + try_upgrade_all += try_upgrade + buddy_all += buddy - if (not self.lock_buddy) and (len(buddy_all) > 0): - new_buddy = buddy_all[0] + keep_all = self.unique_pokemon_list(keep_all) + try_evolve_all = self.unique_pokemon_list(try_evolve_all) + try_upgrade_all = self.unique_pokemon_list(try_upgrade_all) + buddy_all = self.unique_pokemon_list(buddy_all) - if (not self.buddy) or (self.buddy["id"] != new_buddy.unique_id): - self.set_buddy_pokemon(new_buddy) + if (not self.lock_buddy) and (len(buddy_all) > 0): + new_buddy = buddy_all[0] - if self.get_pokemon_slot_left() > self.config_min_slots_left: - return WorkerResult.SUCCESS + if (not self.buddy) or (self.buddy["id"] != new_buddy.unique_id): + self.set_buddy_pokemon(new_buddy) - # Repeat the optimizer 2 times, to get rid of the trash evolved. - for _ in itertools.repeat(None, 2): transfer_all = [] evolve_all = [] upgrade_all = [] @@ -719,13 +720,13 @@ def transfer_pokemon(self, pokemons): return False except Exception: return False - + for pokemon in transfered: candy = inventory.candies().get(pokemon.pokemon_id) if self.config_transfer and (not self.bot.config.test): candy.add(1) - + self.emit_event("pokemon_release", formatted="Exchanged {pokemon} [IV {iv}] [CP {cp}] [{candy} candies]", data={"pokemon": pokemon.name,