From bcab62854c4b4b2def045393a4784df24fa317d6 Mon Sep 17 00:00:00 2001 From: Julien Lavergne Date: Sun, 21 Aug 2016 13:47:20 +0800 Subject: [PATCH 1/5] Refresh web inventory when pokemon inventory change Take into account the candy rewarded at evolution --- configs/config.json.optimizer.example | 2 +- .../cell_workers/pokemon_optimizer.py | 41 ++++++++++++++----- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/configs/config.json.optimizer.example b/configs/config.json.optimizer.example index dfc84f97b4..4ca85eb5d5 100644 --- a/configs/config.json.optimizer.example +++ b/configs/config.json.optimizer.example @@ -89,7 +89,7 @@ "// If that number is not reached, and evolve_only_with_lucky_egg is true, evolution will be skipped": {}, "// If that number is not reached, and evolve_only_with_lucky_egg is false,": {}, "// evolution will be performed without using a lucky egg": {}, - "evolve_count_for_lucky_egg": 90, + "evolve_count_for_lucky_egg": 92, "// the 'may_use_lucky_egg' parameter let you choose if you want the optimizer": {}, "// to use a lucky egg right before evolving Pokemons. At false; the optimizer": {}, "// is free to evolve Pokemons even if you do not have any lucky egg.": {}, diff --git a/pokemongo_bot/cell_workers/pokemon_optimizer.py b/pokemongo_bot/cell_workers/pokemon_optimizer.py index d31cc23dfa..09c3c75a67 100644 --- a/pokemongo_bot/cell_workers/pokemon_optimizer.py +++ b/pokemongo_bot/cell_workers/pokemon_optimizer.py @@ -34,7 +34,7 @@ def initialize(self): self.config_evolve_time = self.config.get("evolve_time", 20) self.config_evolve_for_xp = self.config.get("evolve_for_xp", True) self.config_evolve_only_with_lucky_egg = self.config.get("evolve_only_with_lucky_egg", False) - self.config_evolve_count_for_lucky_egg = self.config.get("evolve_count_for_lucky_egg", 90) + self.config_evolve_count_for_lucky_egg = self.config.get("evolve_count_for_lucky_egg", 92) self.config_may_use_lucky_egg = self.config.get("may_use_lucky_egg", False) self.config_keep = self.config.get("keep", [{"top": 1, "evolve": True, "sort": ["iv"]}, {"top": 1, "evolve": True, "sort": ["ncp"]}, @@ -49,6 +49,7 @@ def get_pokemon_slot_left(self): if pokemon_count != self.last_pokemon_count: self.last_pokemon_count = pokemon_count self.logger.info("Pokemon Bag: %s/%s", pokemon_count, self.max_pokemon_storage) + self.save_web_inventory() return inventory.Pokemons.get_space_left() @@ -57,7 +58,6 @@ def work(self): return WorkerResult.SUCCESS self.open_inventory() - self.save_web_inventory() transfer_all = [] evo_all_best = [] @@ -76,6 +76,7 @@ def work(self): evo_all = evo_all_best + evo_all_crap self.apply_optimization(transfer_all, evo_all) + self.save_web_inventory() return WorkerResult.SUCCESS @@ -92,11 +93,30 @@ def open_inventory(self): self.family_by_family_id.setdefault(family_id, []).append(pokemon) def save_web_inventory(self): - inventory_items = self.bot.api.get_inventory()["responses"]["GET_INVENTORY"]["inventory_delta"]["inventory_items"] web_inventory = os.path.join(_base_dir, "web", "inventory-%s.json" % self.bot.config.username) + with open(web_inventory, "r") as infile: + ii = json.load(infile) + + ii = [x for x in ii if not x.get("inventory_item_data", {}).get("pokedex_entry", None)] + ii = [x for x in ii if not x.get("inventory_item_data", {}).get("candy", None)] + ii = [x for x in ii if not x.get("inventory_item_data", {}).get("item", None)] + ii = [x for x in ii if not x.get("inventory_item_data", {}).get("pokemon_data", None)] + + for pokedex in inventory.pokedex().all(): + ii.append({"inventory_item_data": {"pokedex_entry": pokedex}}) + + for family_id, candy in inventory.candies()._data.items(): + ii.append({"inventory_item_data": {"candy": {"family_id": family_id, "candy": candy.quantity}}}) + + for item_id, item in inventory.items()._data.items(): + ii.append({"inventory_item_data": {"item": {"item_id": item_id, "count": item.count}}}) + + for pokemon in inventory.pokemons().all(): + ii.append({"inventory_item_data": {"pokemon_data": pokemon._data}}) + with open(web_inventory, "w") as outfile: - json.dump(inventory_items, outfile) + json.dump(ii, outfile) def get_family_optimized(self, family_id, family): evolve_best = [] @@ -206,6 +226,7 @@ def get_evolution_plan(self, family_id, family, evolve_best, keep_best): crap = [p for p in crap if not p.in_fort and not p.is_favorite] crap.sort(key=lambda p: p.iv * p.ncp, reverse=True) + # We will gain a candy whether we choose to transfer or evolve these Pokemon candies += len(crap) # Let's see if we can evolve our best Pokemon @@ -218,8 +239,9 @@ def get_evolution_plan(self, family_id, family, evolve_best, keep_best): candies -= pokemon.evolution_cost if candies < 0: - continue + break + candies += 1 can_evolve_best.append(pokemon) # Not sure if the evo keep the same id @@ -236,13 +258,12 @@ def get_evolution_plan(self, family_id, family, evolve_best, keep_best): # transfer + keep_for_evo = len(crap) # leftover_candies = candies - len(crap) + transfer * 1 - # keep_for_evo = leftover_candies / junior_evolution_cost - # - # keep_for_evo = (candies - len(crap) + transfer) / junior_evolution_cost - # keep_for_evo = (candies - keep_for_evo) / junior_evolution_cost + # keep_for_evo = (leftover_candies - 1) / (junior_evolution_cost - 1) + # keep_for_evo = (candies - len(crap) + transfer - 1) / (junior_evolution_cost - 1) + # keep_for_evo = (candies - keep_for_evo - 1) / (junior_evolution_cost - 1) if (candies > 0) and junior_evolution_cost: - keep_for_evo = int(candies / (junior_evolution_cost + 1)) + keep_for_evo = int((candies - 1) / junior_evolution_cost) else: keep_for_evo = 0 From d109124d8202816cd126bd56ed0f45120018e2f4 Mon Sep 17 00:00:00 2001 From: Julien Lavergne Date: Sun, 21 Aug 2016 13:58:59 +0800 Subject: [PATCH 2/5] Update configuration default values --- configs/config.json.optimizer.example | 4 ++-- pokemongo_bot/cell_workers/pokemon_optimizer.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/configs/config.json.optimizer.example b/configs/config.json.optimizer.example index 4ca85eb5d5..c77918cd69 100644 --- a/configs/config.json.optimizer.example +++ b/configs/config.json.optimizer.example @@ -68,7 +68,7 @@ "transfer": true, "// 'transfer_wait_min' and 'transfer_wait_max' are the minimum and maximum": {}, "// time to wait when transferring a pokemon": {}, - "transfer_wait_min": 1, + "transfer_wait_min": 2, "transfer_wait_max": 4, "// the 'evolve' parameter activate or deactivate the evolution of pokemons": {}, "// at false, no pokemon is going to be evolved, ever": {}, @@ -83,7 +83,7 @@ "evolve_for_xp": true, "// the 'evolve_only_with_lucky_egg' parameter let you choose if you want the optimizer": {}, "// to only Evolve Pokemons when a lucky egg is available": {}, - "evolve_only_with_lucky_egg": true, + "evolve_only_with_lucky_egg": false, "// the 'evolve_count_for_lucky_egg' parameter let you define the minimum": {}, "// number of Pokemons that must evolve before using a lucky egg": {}, "// If that number is not reached, and evolve_only_with_lucky_egg is true, evolution will be skipped": {}, diff --git a/pokemongo_bot/cell_workers/pokemon_optimizer.py b/pokemongo_bot/cell_workers/pokemon_optimizer.py index 09c3c75a67..41b9c2eed1 100644 --- a/pokemongo_bot/cell_workers/pokemon_optimizer.py +++ b/pokemongo_bot/cell_workers/pokemon_optimizer.py @@ -29,13 +29,13 @@ def initialize(self): self.max_pokemon_storage = inventory.get_pokemon_inventory_size() self.last_pokemon_count = 0 - self.config_transfer = self.config.get("transfer", False) - self.config_evolve = self.config.get("evolve", False) + self.config_transfer = self.config.get("transfer", True) + self.config_evolve = self.config.get("evolve", True) self.config_evolve_time = self.config.get("evolve_time", 20) self.config_evolve_for_xp = self.config.get("evolve_for_xp", True) self.config_evolve_only_with_lucky_egg = self.config.get("evolve_only_with_lucky_egg", False) self.config_evolve_count_for_lucky_egg = self.config.get("evolve_count_for_lucky_egg", 92) - self.config_may_use_lucky_egg = self.config.get("may_use_lucky_egg", False) + self.config_may_use_lucky_egg = self.config.get("may_use_lucky_egg", True) self.config_keep = self.config.get("keep", [{"top": 1, "evolve": True, "sort": ["iv"]}, {"top": 1, "evolve": True, "sort": ["ncp"]}, {"top": 1, "evolve": False, "sort": ["cp"]}]) From e76830685b0fff2f25b11753918470f9bf799c23 Mon Sep 17 00:00:00 2001 From: Julien Lavergne Date: Sun, 21 Aug 2016 14:13:35 +0800 Subject: [PATCH 3/5] default off --- pokemongo_bot/cell_workers/pokemon_optimizer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pokemongo_bot/cell_workers/pokemon_optimizer.py b/pokemongo_bot/cell_workers/pokemon_optimizer.py index 41b9c2eed1..acc624512e 100644 --- a/pokemongo_bot/cell_workers/pokemon_optimizer.py +++ b/pokemongo_bot/cell_workers/pokemon_optimizer.py @@ -29,8 +29,8 @@ def initialize(self): self.max_pokemon_storage = inventory.get_pokemon_inventory_size() self.last_pokemon_count = 0 - self.config_transfer = self.config.get("transfer", True) - self.config_evolve = self.config.get("evolve", True) + self.config_transfer = self.config.get("transfer", False) + self.config_evolve = self.config.get("evolve", False) self.config_evolve_time = self.config.get("evolve_time", 20) self.config_evolve_for_xp = self.config.get("evolve_for_xp", True) self.config_evolve_only_with_lucky_egg = self.config.get("evolve_only_with_lucky_egg", False) From f20773681e05de19235bff4f97f927a6cb4a1d67 Mon Sep 17 00:00:00 2001 From: Julien Lavergne Date: Sun, 21 Aug 2016 14:21:03 +0800 Subject: [PATCH 4/5] Deactivate evolve if contradicting evolution settings --- pokemongo_bot/cell_workers/pokemon_optimizer.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pokemongo_bot/cell_workers/pokemon_optimizer.py b/pokemongo_bot/cell_workers/pokemon_optimizer.py index acc624512e..35746f8afa 100644 --- a/pokemongo_bot/cell_workers/pokemon_optimizer.py +++ b/pokemongo_bot/cell_workers/pokemon_optimizer.py @@ -43,6 +43,9 @@ def initialize(self): self.config_transfer_wait_min = self.config.get("transfer_wait_min", 1) self.config_transfer_wait_max = self.config.get("transfer_wait_max", 4) + if (not self.config_may_use_lucky_egg) and self.config_evolve_only_with_lucky_egg: + self.config_evolve = False + def get_pokemon_slot_left(self): pokemon_count = inventory.Pokemons.get_space_used() From 088828f66cb5522370a6dd12f648b5dad8630a7b Mon Sep 17 00:00:00 2001 From: Julien Lavergne Date: Sun, 21 Aug 2016 14:24:11 +0800 Subject: [PATCH 5/5] default off --- pokemongo_bot/cell_workers/pokemon_optimizer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pokemongo_bot/cell_workers/pokemon_optimizer.py b/pokemongo_bot/cell_workers/pokemon_optimizer.py index 35746f8afa..7b51d2703c 100644 --- a/pokemongo_bot/cell_workers/pokemon_optimizer.py +++ b/pokemongo_bot/cell_workers/pokemon_optimizer.py @@ -35,7 +35,7 @@ def initialize(self): self.config_evolve_for_xp = self.config.get("evolve_for_xp", True) self.config_evolve_only_with_lucky_egg = self.config.get("evolve_only_with_lucky_egg", False) self.config_evolve_count_for_lucky_egg = self.config.get("evolve_count_for_lucky_egg", 92) - self.config_may_use_lucky_egg = self.config.get("may_use_lucky_egg", True) + self.config_may_use_lucky_egg = self.config.get("may_use_lucky_egg", False) self.config_keep = self.config.get("keep", [{"top": 1, "evolve": True, "sort": ["iv"]}, {"top": 1, "evolve": True, "sort": ["ncp"]}, {"top": 1, "evolve": False, "sort": ["cp"]}])