Пример #1
0
    def upgrade_pokemon(self, pokemon):
        level = int(pokemon.level * 2) - 1
        candy = inventory.candies().get(pokemon.pokemon_id)

        for i in range(level, 80):
            upgrade_cost = self.pokemon_upgrade_cost[i - 1]
            upgrade_candy_cost = upgrade_cost[0]
            upgrade_stardust_cost = upgrade_cost[1]

            if self.config_upgrade and (not self.bot.config.test):
                response_dict = self.bot.api.upgrade_pokemon(
                    pokemon_id=pokemon.unique_id)
            else:
                response_dict = {
                    "responses": {
                        "UPGRADE_POKEMON": {
                            "result": SUCCESS
                        }
                    }
                }

            if not response_dict:
                return False

            result = response_dict.get("responses",
                                       {}).get("UPGRADE_POKEMON",
                                               {}).get("result", 0)

            if result != SUCCESS:
                return False

            upgrade = response_dict.get("responses", {}).get(
                "UPGRADE_POKEMON", {}).get("upgraded_pokemon", {})

            if self.config_upgrade and (not self.bot.config.test):
                candy.consume(upgrade_candy_cost)
                self.stardust_count -= upgrade_stardust_cost

            self.emit_event(
                "pokemon_upgraded",
                formatted=
                "Upgraded {pokemon} [IV {iv}] [CP {cp}] [{candy} candies] [{stardust} stardust]",
                data={
                    "pokemon": pokemon.name,
                    "iv": pokemon.iv,
                    "cp": pokemon.cp,
                    "candy": candy.quantity,
                    "stardust": self.stardust_count
                })

            if self.config_upgrade and (not self.bot.config.test):
                inventory.pokemons().remove(pokemon.unique_id)

                new_pokemon = inventory.Pokemon(upgrade)
                inventory.pokemons().add(new_pokemon)

                action_delay(self.config_transfer_wait_min,
                             self.config_transfer_wait_max)

        return True
Пример #2
0
    def _execute_pokemon_evolve(self, pokemon, cache):
        if pokemon.name in cache:
            return False

        response_dict = self.bot.api.evolve_pokemon(pokemon_id=pokemon.unique_id)
        if response_dict.get('responses', {}).get('EVOLVE_POKEMON', {}).get('result', 0) == 1:
            xp = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("experience_awarded", 0)
            evolution = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("evolved_pokemon_data", {})
            awarded_candies = response_dict.get('responses', {}).get('EVOLVE_POKEMON', {}).get('candy_awarded', 0)
            candy = inventory.candies().get(pokemon.pokemon_id)

            candy.consume(pokemon.evolution_cost - awarded_candies)

            self.emit_event(
                'pokemon_evolved',
                formatted="*Evolved {}* (IV {}) (CP {}) ({} candies) (+{} xp)".format(pokemon.name, pokemon.iv, pokemon.cp, candy.quantity, xp),
                data={
                    'pokemon': pokemon.name,
                    'iv': pokemon.iv,
                    'cp': pokemon.cp,
                    'candy': candy.quantity,
                    'xp': xp,
                }
            )

            inventory.pokemons().remove(pokemon.unique_id)
            new_pokemon = inventory.Pokemon(evolution)
            inventory.pokemons().add(new_pokemon)
            inventory.player().exp += xp

            action_delay(self.min_evolve_speed, self.max_evolve_speed)
            evolve_result = True
        else:
            # cache pokemons we can't evolve. Less server calls
            cache[pokemon.name] = 1
            sleep(0.7)
            evolve_result = False

        with self.bot.database as conn:
            c = conn.cursor()
            c.execute("SELECT COUNT(name) FROM sqlite_master WHERE type='table' AND name='evolve_log'")

        result = c.fetchone()

        while True:
            if result[0] == 1:
                conn.execute('''INSERT INTO evolve_log (pokemon, iv, cp) VALUES (?, ?, ?)''', (pokemon.name, pokemon.iv, pokemon.cp))
                break
            else:
                self.emit_event(
                    'evolve_log',
                    sender=self,
                    level='info',
                    formatted="evolve_log table not found, skipping log"
                )
                break

        return evolve_result
Пример #3
0
 def _hatch_eggs(self):
     response_dict = self.bot.api.get_hatched_eggs()
     log_color = 'green'
     try:
         result = reduce(dict.__getitem__, ["responses", "GET_HATCHED_EGGS"], response_dict)
     except KeyError:
         return
     pokemon_ids = []
     if 'pokemon_id' in result:
         pokemon_ids = [id for id in result['pokemon_id']]
     stardust = result.get('stardust_awarded', "error")
     candy = result.get('candy_awarded', "error")
     xp = result.get('experience_awarded', "error")
     sleep(self.hatching_animation_delay)
     try:
         pokemon_data = self._check_inventory(pokemon_ids)
         for pokemon in pokemon_data:
             # pokemon ids seem to be offset by one
             if pokemon['pokemon_id']!=-1:
                 pokemon['name'] = self.bot.pokemon_list[(pokemon.get('pokemon_id')-1)]['Name']
                 #remove as egg and add as pokemon
                 inventory.pokemons().remove(pokemon['id'])
                 inventory.pokemons().add(inventory.Pokemon(pokemon))
             else:
                 pokemon['name'] = "error"
     except:
         pokemon_data = [{"name":"error", "cp":"error", "iv":"error"}]
     if not pokemon_ids or not pokemon_data or pokemon_data[0]['name'] == "error":
         self.emit_event(
             'egg_hatched',
             data={
                 'pokemon': 'error',
                 'cp': 'error',
                 'iv': 'error',
                 'exp': 'error',
                 'stardust': 'error',
                 'candy': 'error',
             }
         )
         return
     for i in range(len(pokemon_data)):
         msg = "Egg hatched with a {pokemon} (CP {cp} - IV {iv}), {exp} exp, {stardust} stardust and {candy} candies."
         self.bot.metrics.hatched_eggs(1)
         self.emit_event(
             'egg_hatched',
             formatted=msg,
             data={
                 'pokemon': pokemon_data[i]['name'],
                 'cp': pokemon_data[i]['cp'],
                 'iv': "{} {}".format(
                     "/".join(map(str, pokemon_data[i]['iv'])),
                     round(sum(pokemon_data[i]['iv'])/self.max_iv, 2)
                 ),
                 'exp': xp[i],
                 'stardust': stardust[i],
                 'candy': candy[i],
             }
         )
Пример #4
0
    def evolve_pokemon(self, pokemon):
        while pokemon.unique_id in self.evolution_map:
            pokemon = self.evolution_map[pokemon.unique_id]

        if self.config_evolve and (not self.bot.config.test):
            response_dict = self.bot.api.evolve_pokemon(pokemon_id=pokemon.unique_id)
        else:
            response_dict = {"responses": {"EVOLVE_POKEMON": {"result": SUCCESS}}}

        if not response_dict:
            return False

        result = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("result", 0)

        if result != SUCCESS:
            return False

        xp = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("experience_awarded", 0)
        candy_awarded = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("candy_awarded", 0)
        candy = inventory.candies().get(pokemon.pokemon_id)
        evolution = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("evolved_pokemon_data", {})

        if self.config_evolve and (not self.bot.config.test):
            candy.consume(pokemon.evolution_cost - candy_awarded)
            inventory.player().exp += xp

        self.emit_event("pokemon_evolved",
                        formatted="Evolved {pokemon} [IV {iv}] [CP {cp}] [{candy} candies] [+{xp} xp]",
                        data={"pokemon": pokemon.name,
                              "iv": pokemon.iv,
                              "cp": pokemon.cp,
                              "candy": candy.quantity,
                              "xp": xp})

        if self.config_evolve and (not self.bot.config.test):
            new_pokemon = inventory.Pokemon(evolution)

            self.evolution_map[pokemon.unique_id] = new_pokemon

            inventory.pokemons().remove(pokemon.unique_id)
            inventory.pokemons().add(new_pokemon)

            with self.bot.database as db:
                cursor = db.cursor()
                cursor.execute("SELECT COUNT(name) FROM sqlite_master WHERE type='table' AND name='evolve_log'")

                db_result = cursor.fetchone()

                if db_result[0] == 1:
                    db.execute("INSERT INTO evolve_log (pokemon, iv, cp) VALUES (?, ?, ?)", (pokemon.name, pokemon.iv, pokemon.cp))

            sleep(self.config_evolve_time, 0.1)

        return True
Пример #5
0
    def evolve_pokemon(self, pokemon):
        if self.config_evolve and (not self.bot.config.test):
            response_dict = self.bot.api.evolve_pokemon(pokemon_id=pokemon.id)
        else:
            response_dict = {"responses": {"EVOLVE_POKEMON": {"result": 1}}}

        if not response_dict:
            return False

        result = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("result", 0)

        if result != SUCCESS:
            return False

        xp = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("experience_awarded", 0)
        candy = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("candy_awarded", 0)
        evolution = response_dict.get("responses", {}).get("EVOLVE_POKEMON", {}).get("evolved_pokemon_data", {})

        self.emit_event("pokemon_evolved",
                        formatted="Evolved {pokemon} [IV {iv}] [CP {cp}] [NCP {ncp}] [DPS {dps}] [+{xp} xp]",
                        data={"pokemon": pokemon.name,
                              "iv": pokemon.iv,
                              "cp": pokemon.cp,
                              "ncp": round(pokemon.ncp, 2),
                              "dps": round(pokemon.dps, 2),
                              "xp": xp})

        if self.config_evolve and (not self.bot.config.test):
            inventory.candies().get(pokemon.pokemon_id).consume(pokemon.evolution_cost - candy)
            inventory.pokemons().remove(pokemon.id)

            new_pokemon = inventory.Pokemon(evolution)
            inventory.pokemons().add(new_pokemon)

            sleep(self.config_evolve_time)

        return True
    def _hatch_eggs(self):
        request = self.bot.api.create_request()
        request.get_hatched_eggs()
        response_dict = request.call()

        try:
            result = reduce(dict.__getitem__,
                            ["responses", "GET_HATCHED_EGGS"], response_dict)
        except KeyError:
            return WorkerResult.ERROR
        pokemon_ids = []
        if 'pokemon_id' in result:
            pokemon_ids = [id for id in result['pokemon_id']]
        stardust = result.get('stardust_awarded', [])
        candy = result.get('candy_awarded', [])
        xp = result.get('experience_awarded', [])
        sleep(self.hatching_animation_delay)
        try:
            pokemon_data = self._check_inventory(pokemon_ids)
            pokemon_list = [inventory.Pokemon(p) for p in pokemon_data]
            for pokemon in pokemon_list:
                inventory.pokemons().remove(pokemon.unique_id)
                inventory.pokemons().add(pokemon)
        except:
            pokemon_data = []
        if not pokemon_ids or not pokemon_data:
            self.emit_event('egg_hatched_fail',
                            formatted="Error trying to hatch egg.")
            return False

        for i in range(len(pokemon_list)):
            pokemon = pokemon_list[i]
            msg = "Egg hatched with a {name} (CP {cp} - NCP {ncp} - IV {iv_ads} {iv_pct}), {exp} exp, {stardust} stardust and {candy} candies."
            self.emit_event('egg_hatched',
                            formatted=msg,
                            data={
                                'name': pokemon.name,
                                'cp': str(int(pokemon.cp)),
                                'ncp': str(round(pokemon.cp_percent, 2)),
                                'iv_ads': str(pokemon.iv_display),
                                'iv_pct': str(pokemon.iv),
                                'exp': str(xp[i]),
                                'stardust': str(stardust[i]),
                                'candy': str(candy[i])
                            })
            # hatching egg gets exp too!
            inventory.player().exp += xp[i]
            self.bot.stardust += stardust[i]

            with self.bot.database as conn:
                c = conn.cursor()
                c.execute(
                    "SELECT COUNT(name) FROM sqlite_master WHERE type='table' AND name='eggs_hatched_log'"
                )
            result = c.fetchone()
            while True:
                if result[0] == 1:
                    conn.execute(
                        '''INSERT INTO eggs_hatched_log (pokemon, cp, iv, pokemon_id) VALUES (?, ?, ?, ?)''',
                        (pokemon.name, pokemon.cp, pokemon.iv,
                         pokemon.pokemon_id))
                    break
                else:
                    self.emit_event(
                        'eggs_hatched_log',
                        sender=self,
                        level='info',
                        formatted=
                        "eggs_hatched_log table not found, skipping log")
                    break

        self.bot.metrics.hatched_eggs(len(pokemon_list))
        return True