From 40a271687be8b8416cb667117673fdcce92625b8 Mon Sep 17 00:00:00 2001 From: Alex Yao Date: Tue, 23 Aug 2016 21:58:56 -0700 Subject: [PATCH] Level limit --- configs/config.json.cluster.example | 6 +- configs/config.json.example | 6 +- configs/config.json.map.example | 6 +- configs/config.json.optimizer.example | 6 +- configs/config.json.path.example | 6 +- configs/config.json.pokemon.example | 6 +- pokemongo_bot/cell_workers/__init__.py | 2 +- pokemongo_bot/cell_workers/level_up.py | 92 ++++++++++++++++++++++++++ 8 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 pokemongo_bot/cell_workers/level_up.py diff --git a/configs/config.json.cluster.example b/configs/config.json.cluster.example index 52baa7055b..a8a56395c4 100644 --- a/configs/config.json.cluster.example +++ b/configs/config.json.cluster.example @@ -31,7 +31,11 @@ } }, { - "type": "CollectLevelUpReward" + "type": "LevelUp", + "config": { + "collect_reward": true, + "level_limit": -1 + } }, { "type": "IncubateEggs", diff --git a/configs/config.json.example b/configs/config.json.example index 29256ebea5..7da0d04ee9 100644 --- a/configs/config.json.example +++ b/configs/config.json.example @@ -42,7 +42,11 @@ } }, { - "type": "CollectLevelUpReward" + "type": "LevelUp", + "config": { + "collect_reward": true, + "level_limit": -1 + } }, { "type": "IncubateEggs", diff --git a/configs/config.json.map.example b/configs/config.json.map.example index d4abf5e6bb..2ce3c0050a 100644 --- a/configs/config.json.map.example +++ b/configs/config.json.map.example @@ -31,7 +31,11 @@ } }, { - "type": "CollectLevelUpReward" + "type": "LevelUp", + "config": { + "collect_reward": true, + "level_limit": -1 + } }, { "type": "IncubateEggs", diff --git a/configs/config.json.optimizer.example b/configs/config.json.optimizer.example index 0e6656ffaa..03625d0ecf 100644 --- a/configs/config.json.optimizer.example +++ b/configs/config.json.optimizer.example @@ -31,7 +31,11 @@ } }, { - "type": "CollectLevelUpReward" + "type": "LevelUp", + "config": { + "collect_reward": true, + "level_limit": -1 + } }, { "type": "IncubateEggs", diff --git a/configs/config.json.path.example b/configs/config.json.path.example index a8bf6cb8e2..40a156ef08 100644 --- a/configs/config.json.path.example +++ b/configs/config.json.path.example @@ -31,7 +31,11 @@ } }, { - "type": "CollectLevelUpReward" + "type": "LevelUp", + "config": { + "collect_reward": true, + "level_limit": -1 + } }, { "type": "IncubateEggs", diff --git a/configs/config.json.pokemon.example b/configs/config.json.pokemon.example index df51153b77..270ddd73ed 100644 --- a/configs/config.json.pokemon.example +++ b/configs/config.json.pokemon.example @@ -31,7 +31,11 @@ } }, { - "type": "CollectLevelUpReward" + "type": "LevelUp", + "config": { + "collect_reward": true, + "level_limit": -1 + } }, { "type": "IncubateEggs", diff --git a/pokemongo_bot/cell_workers/__init__.py b/pokemongo_bot/cell_workers/__init__.py index 088e11dccd..7d5b6c2234 100644 --- a/pokemongo_bot/cell_workers/__init__.py +++ b/pokemongo_bot/cell_workers/__init__.py @@ -13,7 +13,7 @@ from handle_soft_ban import HandleSoftBan from follow_path import FollowPath from follow_spiral import FollowSpiral -from collect_level_up_reward import CollectLevelUpReward +from level_up import LevelUp from follow_cluster import FollowCluster from sleep_schedule import SleepSchedule from update_live_stats import UpdateLiveStats diff --git a/pokemongo_bot/cell_workers/level_up.py b/pokemongo_bot/cell_workers/level_up.py new file mode 100644 index 0000000000..adc86d2c03 --- /dev/null +++ b/pokemongo_bot/cell_workers/level_up.py @@ -0,0 +1,92 @@ +import sys + +from pokemongo_bot.base_task import BaseTask +from pokemongo_bot import inventory + +class LevelUp(BaseTask): + SUPPORTED_TASK_API_VERSION = 1 + + current_level = 0 + previous_level = 0 + + def initialize(self): + self._process_config() + self.current_level = self._get_current_level() + self.previous_level = 0 + + def work(self): + if self._should_run(): + self.current_level = self._get_current_level() + + if self.collect_reward: + # let's check level reward on bot initialization + # to be able get rewards for old bots + if self.previous_level == 0: + self._collect_level_reward() + # level up situation + elif self.current_level > self.previous_level: + self.emit_event( + 'level_up', + formatted='Level up from {previous_level} to {current_level}', + data={ + 'previous_level': self.previous_level, + 'current_level': self.current_level + } + ) + self._collect_level_reward() + + if self.level_limit != -1 and self.current_level >= self.level_limit: + sys.exit("You have reached your target level! Exiting now.") + + self.previous_level = self.current_level + + def _process_config(self): + self.level_limit = self.config.get('level_limit', -1) + self.collect_reward = self.config.get('collect_reward', True) + + def _should_run(self): + return self.level_limit != -1 or self.collect_reward + + def _collect_level_reward(self): + response_dict = self.bot.api.level_up_rewards(level=self.current_level) + if 'status_code' in response_dict and response_dict['status_code'] == 1: + data = (response_dict + .get('responses', {}) + .get('LEVEL_UP_REWARDS', {}) + .get('items_awarded', [])) + + for item in data: + if 'item_id' in item and str(item['item_id']) in self.bot.item_list: + got_item = self.bot.item_list[str(item['item_id'])] + item['name'] = got_item + count = 'item_count' in item and item['item_count'] or 0 + inventory.items().get(item['item_id']).add(count) + + self.emit_event( + 'level_up_reward', + formatted='Received level up reward: {items}', + data={ + 'items': data + } + ) + + def _get_current_level(self): + level = 0 + response_dict = self.bot.api.get_inventory() + data = (response_dict + .get('responses', {}) + .get('GET_INVENTORY', {}) + .get('inventory_delta', {}) + .get('inventory_items', {})) + + for item in data: + level = (item + .get('inventory_item_data', {}) + .get('player_stats', {}) + .get('level', 0)) + + # we found a level, no need to continue iterate + if level: + break + + return level