Как мне создать систему уровней в discord.py или просто любую подходящую систему уровня rpg?

#python #mysql #python-3.x #discord.py #discord.py-rewrite

#python #mysql #python-3.x #discord.py

Вопрос:

Как мне создать систему уровней в discord.py ? В настоящее время я использую базу данных для хранения информации о пользователях. Тем не менее, я хочу создать бесконечную систему прокачки. Это означает, что когда они проходят первый уровень, количество очков опыта, которое они должны набрать, чтобы достичь следующего уровня, увеличивается. Например:

Приходит новый пользователь. Они начинают с уровня 1, это их текущий уровень xp. Статистика: Уровень 1, 1/20 очков опыта

Как только они наберут более 20 очков опыта, я хочу, чтобы их уровень был 2-м, а чтобы добраться до третьего уровня, они должны получить 40 очков опыта. Таким образом, контрольная точка / метка для перехода на следующий уровень умножается. Текущая статистика для нового пользователя: уровень 2, 1/40 xp Как только они достигнут уровня 3, статистика: уровень 3, 1/80 xp

И тогда я просто хочу, чтобы это был бесконечный цикл. Просто продолжайте обновлять их уровень и умножать их отметку уровня xp на 2.

Я использую базу данных mysql. У меня уже есть 2 функции для обновления и отображения их уровней. Мне просто нужно выяснить, как зацикливать вещи. Я не очень знаком с циклами.

Я хочу, чтобы их система уровней была основана на событиях on_message. Это означает, что с каждым сообщением они получают одно очко опыта.

Это мой текущий код on_message:

     @client.event
    async def on_message(message):
    member = message.author
    guild = message.guild
    xp_update(1, member.id)
    print(f"{member} from guild {guild} said>> '{message.content}'")
    get_xp_stats(member.id)
    get_lvl_stats(member.id)
    if int(xp_results) == range(1, 49):
        lvl_update(1, member.id)
        await message.send(f"{member} has leveled up to {lvlresult}!")
    elif int(xp_results) == range(50, 99):
        lvl_update(1, member.id)
        await message.send(f"{member} has leveled up to {lvlresult}!")
    elif int(xp_results) == range(100, 199):
        lvl_update(1, member.id)
        await message.send(f"{member} has leveled up to {lvlresult}!")

    await client.process_commands(message)
  

Большое спасибо stackoverflow, надеюсь, вы сможете мне помочь.

Комментарии:

1. Можете ли вы обновить свой вопрос, включив в него код, который у вас есть на данный момент? Не могли бы вы также повысить уровень в on_message , поскольку люди могут получать опыт только путем отправки сообщений?

2. @Benjin Я включил некоторый код, который должен объяснить ваш вопрос. Я приношу извинения за неудобства

3. Вам нужно предоставить еще немного кода, функции, используемые в предоставленном вами коде, были бы хороши, также я предполагаю, что у вас есть правильные вкладки? Этого здесь нет.

Ответ №1:

Редактировать :

Спасибо всем за попытку и спасибо за участие. Я понял ответ. Мне просто пришлось изменить некоторые вещи. Это мой полный код. Это, честно говоря, простая математика и алгебра. Я должен больше изучать математику, ха-ха

 @client.event
async def on_message(message):
    member = message.author
    guild = message.guild
    get_max_lvl_stats(member.id)
    print(f"{member} from guild {guild} said>> '{message.content}'")
    get_xp_stats(member.id)
    get_lvl_stats(member.id)
    if xp_results > maxlvlresult:
        max_lvl_update(2, member.id)
        lvl_update(1, member.id)
    elif xp_results < maxlvlresult:
        xp_update(1, member.id)
    elif xp_results == 0:
        pass
    elif xp_results == maxlvlresult:
        xp_update(1, member.id)
    else:
        print("An error occurred with on_message lvl updating.")
    await client.process_commands(message)