Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimizer fix #6006

Merged
merged 3 commits into from
Apr 10, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 74 additions & 73 deletions pokemongo_bot/cell_workers/pokemon_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = []
Expand Down Expand Up @@ -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,
Expand Down