Skip to content
Closed
Show file tree
Hide file tree
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
2 changes: 1 addition & 1 deletion configs/config.json.example
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
// "Rattata": { "always_catch" : true }
},
"release": {
"any": {"release_below_cp": 0, "release_below_iv": 0, "logic": "or"},
"any": {"release_below_cp": 0, "release_below_iv": 0, "keep_best_cp": true, "logic": "or"},
// "Rattata": { "always_release" : true }
}
}
12 changes: 6 additions & 6 deletions configs/config.json.pokemons.example
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@
"use_lucky_egg": false,
"evolve_captured": false,
"catch": {
"any": {"catch_above_cp": 0, "catch_above_iv": 0, "logic": "or" },
"any": {"catch_above_cp": 0, "catch_above_iv": 0, "keep_best_cp": true, "logic": "or" },

"// Pokemons with example": { "always_catch": true },
"// Gets filtered with release parameters": {},

"// Legendary pokemons (Goes under S-Tier)": {},
"Lapras": { "always_catch": true },
"Moltres": { "always_catch": true },
"Zapdos": { "always_catch": true },
"Articuno": { "always_catch": true },
"Lapras": { "keep_best_cp": false, "always_catch": true },
"Moltres": { "keep_best_cp": false, "always_catch": true },
"Zapdos": { "keep_best_cp": false, "always_catch": true },
"Articuno": { "keep_best_cp": false, "always_catch": true },

"// S-Tier pokemons (if pokemon can be evolved into tier, list the representative)": {},
"Mewtwo": { "always_catch": true },
Expand Down Expand Up @@ -260,4 +260,4 @@
"Raichu": { "release_under_cp": 708, "release_under_iv": 0.8, "cp_iv_logic": "and" },
"Cloyster": { "release_under_cp": 717, "release_under_iv": 0.8, "cp_iv_logic": "and"}
}
}
}
35 changes: 35 additions & 0 deletions pokemongo_bot/cell_workers/pokemon_catch_worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,36 @@ def _get_catch_config_for(self, pokemon):
catch_config = {}
return catch_config

def _check_if_higher_cp_pokemon(self, pokemon_name, value):
self.api.get_inventory()
response_dict = self.api.call()
return self._check_if_higher_cp_pokemon_all(pokemon_name, value, response_dict)

def _check_if_higher_cp_pokemon_all(self, pokemon_name, value, response_dict):
try:
reduce(dict.__getitem__, [
"responses", "GET_INVENTORY", "inventory_delta", "inventory_items"], response_dict)
except KeyError:
pass
else:
for item in response_dict['responses']['GET_INVENTORY']['inventory_delta']['inventory_items']:
try:
reduce(dict.__getitem__, [
"inventory_item_data", "pokemon"], item)
except KeyError:
pass
else:
pokemon = item['inventory_item_data']['pokemon']
if self._check_if_cp_higher(value, pokemon_name, pokemon):
return True
return False

def _check_if_cp_higher(self, value, pokemon_name, pokemon):
if 'name' in pokemon and pokemon['name'] == pokemon_name:
if 'cp' in pokemon and pokemon['cp'] > value:
return True
return False

def should_release_pokemon(self, pokemon_name, cp, iv, response_dict):
release_config = self._get_release_config_for(pokemon_name)
cp_iv_logic = release_config.get('logic')
Expand All @@ -341,6 +371,10 @@ def should_release_pokemon(self, pokemon_name, cp, iv, response_dict):
if release_config.get('always_release', False):
return True

if release_config.get('keep_best_cp', False):
if not self._check_if_higher_cp_pokemon(pokemon_name, cp):
return False

release_cp = release_config.get('release_below_cp', 0)
if cp < release_cp:
release_results['cp'] = True
Expand Down Expand Up @@ -372,3 +406,4 @@ def _get_release_config_for(self, pokemon):
if not release_config:
release_config = {}
return release_config