From c9c600ae0d101605dd598d072b47aa725a57ff88 Mon Sep 17 00:00:00 2001 From: Alvaro Gutierrez Perez Date: Tue, 26 Jul 2016 19:10:47 +0200 Subject: [PATCH 1/7] Modify initial_transfer_worker.py to use release CP config --- .../cell_workers/initial_transfer_worker.py | 43 ++++++++++++++----- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/pokemongo_bot/cell_workers/initial_transfer_worker.py b/pokemongo_bot/cell_workers/initial_transfer_worker.py index 1419887a47..9680365b77 100644 --- a/pokemongo_bot/cell_workers/initial_transfer_worker.py +++ b/pokemongo_bot/cell_workers/initial_transfer_worker.py @@ -10,8 +10,10 @@ def __init__(self, bot): self.api = bot.api def work(self): - logger.log('Cleaning up Pokemon Bag of anything below {} CP'.format( - self.config.initial_transfer), 'cyan') + if not self.config.initial_transfer: + return + + logger.log('Cleaning up Pokemon Bag using the release CP config', 'cyan') pokemon_groups = self._initial_transfer_get_groups() @@ -25,15 +27,14 @@ def work(self): for x in range(1, len(group_cp)): - if self.config.initial_transfer and group_cp[x] > self.config.initial_transfer: - continue - - logger.log('Exchanging {} with {} CP'.format( - self.pokemon_list[id - 1]['Name'], group_cp[x])) - self.api.release_pokemon( - pokemon_id=pokemon_groups[id][group_cp[x]]) - response_dict = self.api.call() - sleep(2) + pokemon_name = self.pokemon_list[id - 1]['Name'] + if self.should_release_pokemon(pokemon_name, group_cp[x]): + logger.log('Exchanging {} with {} CP'.format( + pokemon_name, group_cp[x])) + self.api.release_pokemon( + pokemon_id=pokemon_groups[id][group_cp[x]]) + response_dict = self.api.call() + sleep(2) logger.log('Pokemon Bag has been cleaned up!', 'green') @@ -68,3 +69,23 @@ def _initial_transfer_get_groups(self): pokemon_groups[group_id].update({group_pokemon_cp: group_pokemon}) return pokemon_groups + + def should_release_pokemon(self, pokemon_name, cp): + release_config = self._get_release_config_for(pokemon_name) + + if release_config.get('never_release', False): + return False + + if release_config.get('always_release', False): + return True + + release_cp = release_config.get('release_below_cp', 0) + return cp < release_cp + + def _get_release_config_for(self, pokemon): + release_config = self.config.release.get(pokemon) + if not release_config: + release_config = self.config.release.get('any') + if not release_config: + release_config = {} + return release_config From 22f8421c5c43682609b949f1950babde17996698 Mon Sep 17 00:00:00 2001 From: Alvaro Gutierrez Perez Date: Tue, 26 Jul 2016 20:07:47 +0200 Subject: [PATCH 2/7] Update README to inidicate initial_transfer new meaning --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 489d4b2abb..2dd73cd74c 100644 --- a/README.md +++ b/README.md @@ -182,7 +182,7 @@ Option | Meaning `walk` | Set the walking speed in kilometers per hour.(14km/h is the maximum speed for egg hatching) `debug` | Let the default value here except if you are developer `test` | Let the default value here except if you are developer -`initial_transfer` | Set this to an upper bound of the cp level which you want to transfer at the beginning of the run. For example, set the value to 0 to disable the initial transfer, set it to 100 to enable initial transfer for cp levels 0-99. It will still transfer pokémon during your exploration, depending on how your release_config.json is setup. +`initial_transfer` | Set this to true to transfer your pokemons at the beginning of the run based on the release config (currently only takes CP into account). `location_cache` | Bot will start at last known location if you do not have location set in the config `distance_unit` | Set the unit to display distance in (e.g, km for kilometers, mi for miles, ft for feet) `item_filter` | Pass a list of unwanted items (in CSV format) to recycle when collected at a Pokestop (e.g, "101,102,103,104" to recycle potions when collected) From 7398b478b306af2b39c438fda59b3eaa8c003815 Mon Sep 17 00:00:00 2001 From: Alvaro Gutierrez Perez Date: Tue, 26 Jul 2016 20:09:22 +0200 Subject: [PATCH 3/7] Update config examples to set initial_transfer to false instead of 0 --- configs/config.json.example | 2 +- configs/config.json.pokemons.example | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/config.json.example b/configs/config.json.example index 4332ad61e7..deec6d9e0b 100644 --- a/configs/config.json.example +++ b/configs/config.json.example @@ -9,7 +9,7 @@ "walk": 4.16, "debug": false, "test": false, - "initial_transfer": 0, + "initial_transfer": false, "location_cache": true, "distance_unit": "km", "item_filter": { diff --git a/configs/config.json.pokemons.example b/configs/config.json.pokemons.example index 9a22d8709c..8772c8dabb 100644 --- a/configs/config.json.pokemons.example +++ b/configs/config.json.pokemons.example @@ -9,7 +9,7 @@ "walk": 4.16, "debug": false, "test": false, - "initial_transfer": 0, + "initial_transfer": false, "location_cache": true, "distance_unit": "km", "item_filter": { From e2423faa97cffb5b41158929bac7f1c783a915e3 Mon Sep 17 00:00:00 2001 From: Alvaro Gutierrez Perez Date: Tue, 26 Jul 2016 20:15:15 +0200 Subject: [PATCH 4/7] Add myself to contributors --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 1a163c752b..81b0a9ddb5 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -34,3 +34,4 @@ * pulgalipe * BartKoppelmans * VictorChen + * AlvaroGzP From fe6f29d9b23072417aac5156a4bf3f3a43a9887a Mon Sep 17 00:00:00 2001 From: Alvaro Gutierrez Perez Date: Tue, 26 Jul 2016 20:49:09 +0200 Subject: [PATCH 5/7] Take into account also the iv to release a pokemon in the initial_transfer --- .../cell_workers/initial_transfer_worker.py | 60 +++++++++++++++---- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/pokemongo_bot/cell_workers/initial_transfer_worker.py b/pokemongo_bot/cell_workers/initial_transfer_worker.py index 9680365b77..9c5c0a68c5 100644 --- a/pokemongo_bot/cell_workers/initial_transfer_worker.py +++ b/pokemongo_bot/cell_workers/initial_transfer_worker.py @@ -28,11 +28,13 @@ def work(self): for x in range(1, len(group_cp)): pokemon_name = self.pokemon_list[id - 1]['Name'] - if self.should_release_pokemon(pokemon_name, group_cp[x]): + pokemon_data = pokemon_groups[id][group_cp[x]] + pokemon_potential = self.get_pokemon_potential(pokemon_data) + if self.should_release_pokemon(pokemon_name, group_cp[x], pokemon_potential): logger.log('Exchanging {} with {} CP'.format( pokemon_name, group_cp[x])) self.api.release_pokemon( - pokemon_id=pokemon_groups[id][group_cp[x]]) + pokemon_id=pokemon_data['id']) response_dict = self.api.call() sleep(2) @@ -57,21 +59,36 @@ def _initial_transfer_get_groups(self): except KeyError: continue - group_id = pokemon['inventory_item_data'][ - 'pokemon_data']['pokemon_id'] - group_pokemon = pokemon['inventory_item_data'][ - 'pokemon_data']['id'] - group_pokemon_cp = pokemon[ - 'inventory_item_data']['pokemon_data']['cp'] + pokemon_data = pokemon['inventory_item_data']['pokemon_data'] + group_id = pokemon_data['pokemon_id'] + group_pokemon_cp = pokemon_data['cp'] if group_id not in pokemon_groups: pokemon_groups[group_id] = {} - pokemon_groups[group_id].update({group_pokemon_cp: group_pokemon}) + pokemon_groups[group_id].update({group_pokemon_cp: pokemon_data}) return pokemon_groups - def should_release_pokemon(self, pokemon_name, cp): + def get_pokemon_potential(self, pokemon_data): + total_iv = 0 + iv_stats = ['individual_attack', 'individual_defense', 'individual_stamina'] + for individual_stat in iv_stats: + try: + total_iv += pokemon_data[individual_stat] + except: + continue + return round((total_iv / 45.0), 2) + + def should_release_pokemon(self, pokemon_name, cp, iv): release_config = self._get_release_config_for(pokemon_name) + cp_iv_logic = release_config.get('logic') + if not cp_iv_logic: + cp_iv_logic = self._get_release_config_for('any').get('logic', 'and') + + release_results = { + 'cp': False, + 'iv': False, + } if release_config.get('never_release', False): return False @@ -80,7 +97,28 @@ def should_release_pokemon(self, pokemon_name, cp): return True release_cp = release_config.get('release_below_cp', 0) - return cp < release_cp + if cp < release_cp: + release_results['cp'] = True + + release_iv = release_config.get('release_below_iv', 0) + if iv < release_iv: + release_results['iv'] = True + + logic_to_function = { + 'or': lambda x, y: x or y, + 'and': lambda x, y: x and y + } + + #logger.log( + # "Release config for {}: CP {} {} IV {}".format( + # pokemon_name, + # min_cp, + # cp_iv_logic, + # min_iv + # ), 'yellow' + #) + + return logic_to_function[cp_iv_logic](*release_results.values()) def _get_release_config_for(self, pokemon): release_config = self.config.release.get(pokemon) From 3a605a357f5d77e5cc8daf83ded4a5d5cc8bac46 Mon Sep 17 00:00:00 2001 From: Alvaro Gutierrez Perez Date: Tue, 26 Jul 2016 20:54:40 +0200 Subject: [PATCH 6/7] Update README and log messages --- README.md | 2 +- pokemongo_bot/cell_workers/initial_transfer_worker.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2dd73cd74c..f41d036e95 100644 --- a/README.md +++ b/README.md @@ -182,7 +182,7 @@ Option | Meaning `walk` | Set the walking speed in kilometers per hour.(14km/h is the maximum speed for egg hatching) `debug` | Let the default value here except if you are developer `test` | Let the default value here except if you are developer -`initial_transfer` | Set this to true to transfer your pokemons at the beginning of the run based on the release config (currently only takes CP into account). +`initial_transfer` | Set this to true to transfer your pokemons at the beginning of the run based on your release config. `location_cache` | Bot will start at last known location if you do not have location set in the config `distance_unit` | Set the unit to display distance in (e.g, km for kilometers, mi for miles, ft for feet) `item_filter` | Pass a list of unwanted items (in CSV format) to recycle when collected at a Pokestop (e.g, "101,102,103,104" to recycle potions when collected) diff --git a/pokemongo_bot/cell_workers/initial_transfer_worker.py b/pokemongo_bot/cell_workers/initial_transfer_worker.py index 9c5c0a68c5..771bf4a6f9 100644 --- a/pokemongo_bot/cell_workers/initial_transfer_worker.py +++ b/pokemongo_bot/cell_workers/initial_transfer_worker.py @@ -13,7 +13,7 @@ def work(self): if not self.config.initial_transfer: return - logger.log('Cleaning up Pokemon Bag using the release CP config', 'cyan') + logger.log('Cleaning up Pokemon Bag using the release config', 'cyan') pokemon_groups = self._initial_transfer_get_groups() From 60f4ba5d4b3c1d6af8a4c6ca2213e05d59a3d818 Mon Sep 17 00:00:00 2001 From: Alvaro Gutierrez Perez Date: Tue, 26 Jul 2016 20:59:09 +0200 Subject: [PATCH 7/7] Improve Exchange message --- pokemongo_bot/cell_workers/initial_transfer_worker.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pokemongo_bot/cell_workers/initial_transfer_worker.py b/pokemongo_bot/cell_workers/initial_transfer_worker.py index 771bf4a6f9..1cc44d3ae7 100644 --- a/pokemongo_bot/cell_workers/initial_transfer_worker.py +++ b/pokemongo_bot/cell_workers/initial_transfer_worker.py @@ -28,11 +28,12 @@ def work(self): for x in range(1, len(group_cp)): pokemon_name = self.pokemon_list[id - 1]['Name'] - pokemon_data = pokemon_groups[id][group_cp[x]] + pokemon_cp = group_cp[x] + pokemon_data = pokemon_groups[id][pokemon_cp] pokemon_potential = self.get_pokemon_potential(pokemon_data) - if self.should_release_pokemon(pokemon_name, group_cp[x], pokemon_potential): - logger.log('Exchanging {} with {} CP'.format( - pokemon_name, group_cp[x])) + if self.should_release_pokemon(pokemon_name, pokemon_cp, pokemon_potential): + logger.log('Exchanging {} [CP {}] [Potential {}]'.format( + pokemon_name, pokemon_cp, pokemon_potential)) self.api.release_pokemon( pokemon_id=pokemon_data['id']) response_dict = self.api.call()