Exemplo n.º 1
0
    async def upgrade(self, ctx, part: str = None, amount=None):
        """Upgrade your ship"""
        user = ctx.message.author.name
        user_ship = Ship.find_ship(user)
        if not user_ship:
            await ctx.send(
                '{0}, you do not have a ship to upgrade! Type `$ship` to get one.'
                .format(ctx.message.author.mention))
            return

        if not part:
            em = discord.Embed(title='Ship Upgrades',
                               description=str("Current Level: " +
                                               str(user_ship.level())),
                               colour=0x3796ff)
            em.set_author(name=ctx.message.author.name +
                          '\'s Ship has docked in the port',
                          icon_url=ctx.message.author.avatar_url)
            em.add_field(name="__Part__", value=parts_print, inline=True)
            em.add_field(name="__Current Level__",
                         value=user_ship.info(),
                         inline=True)
            em.add_field(name="__Next Upgrade Costs__",
                         value=user_ship.upgrade_costs(),
                         inline=True)
            em.add_field(
                name="To upgrade: `$upgrade part`",
                value=
                "You can also say `$upgrade part amount` or `$upgrade part max` to upgrade multiple levels",
                inline=False)
            em.set_footer(
                text="Your ship's coffers hold {} gold".format(user_ship.gold),
                icon_url=
                "https://cdn.discordapp.com/emojis/554730061463289857.gif")
            em_msg = await ctx.send(embed=em)
            return

        part = part.lower()
        if part not in map(str.lower, parts):
            await ctx.send(
                'Sorry, that\'s not an upgradable part. What part would you like to upgrade? '
                'Acceptable parameters are:\n{}'.format(parts_print))
            return

        user_dict = user_ship.to_dict()

        if not amount:
            # only upgrade by 1
            cost = Ship.calc_upgrade(user_dict[part])
            amount = 1
        else:
            if amount.isdigit():
                amount = int(amount)
                cost = Ship.calc_upgrade(user_dict[part], amount)
            elif amount.lower() == 'max':
                cost = 0
                amount = 0
                while cost < user_ship.gold:
                    amount += 1
                    cost = Ship.calc_upgrade(user_dict[part], amount)

                # stop over-drafting gold
                amount -= 1
                cost = Ship.calc_upgrade(user_dict[part], amount)

                if amount == 0:
                    amount = 1
                    cost = Ship.calc_upgrade(user_dict[part], amount)
                    await ctx.send(
                        'Upgrading {} by {} will cost {}. You only have {} gold. '
                        'Win some fights to earn more gold.'.format(
                            part, amount, cost, user_ship.gold))
                    return

        if cost > user_ship.gold:
            await ctx.send(
                'Upgrading {} by {} will cost {}. You only have {} gold. '
                'Win some fights to earn more gold.'.format(
                    part, amount, cost, user_ship.gold))
            return

        user_ship.upgrade(part, amount, cost)

        em = discord.Embed(title="Upgraded {} by {} level(s)".format(
            part, amount),
                           description="This cost {} gold".format(cost),
                           colour=0x3796ff)
        em.set_author(name=ctx.message.author.name + '\'s Ship',
                      icon_url=ctx.message.author.avatar_url)
        em.add_field(name='Ship Level',
                     value=str(user_ship.level()),
                     inline=False)
        em.add_field(name="__Part__", value=parts_print, inline=True)
        em.add_field(name="__Level__", value=user_ship.info(), inline=True)
        em.set_footer(
            text="Your ship's coffers hold {} gold".format(user_ship.gold),
            icon_url="https://cdn.discordapp.com/emojis/554730061463289857.gif"
        )
        em_msg = await ctx.send(embed=em)