Моя «проблема» - это скорее функция, которую я хочу добавить, я использовал это руководство: https://anidiots.guide/coding-guides/sqlite-based-points- система Я немного изменил код, чтобы в основном дать вам случайное количество XP, я ищу, чтобы отредактировать, сколько XP требуется для повышения уровня.

Прямо сейчас это статическая сумма, 5000, необходимых для повышения уровня. Я пытаюсь заставить его увеличить количество, необходимое для повышения на дополнительные 5000 каждый раз, когда вы повышаете уровень.

В настоящее время это работает так:

Уровень от 1 до 2 = 5000 всего необходимого опыта

Уровень от 2 до 3 = 10000 всего необходимого опыта

В настоящее время количество, необходимое для повышения уровня, всегда составляет 5000 между уровнями.

Вот как я хочу, чтобы это работало:

Уровень от 1 до 2 = 5000 всего необходимого опыта

Уровень от 2 до 3 = 15000 всего необходимого опыта

Это будет 5000 до уровня 2, затем 10000 до уровня 3 и т. Д. (Увеличивая количество, необходимое на 5000, каждый раз, когда вы повышаете уровень)

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

if (score.level == '1') {
    nextLevel = 5000
}
if (score.level == '2' {
    nextLevel = 10000
}

Я очень сомневаюсь, что это правильно, иначе мое сообщение будет очень длинным, так как я планирую иметь 100 уровней

Код во всей полноте:

    let score;
    if (message.guild) {
        score = bot.getScore.get(message.author.id, message.guild.id);
        if (!score) {
            score = {
                id: `${message.guild.id}-${message.author.id}`,
                user: message.author.id,
                guild: message.guild.id,
                points: 0,
                level: 1,
            };
        }
        const xpAdd = Math.floor(Math.random() * 10) + 50;
        const curxp = score.points;
        const curlvl = score.level;
        const nxtLvl = score.level * 5000;
        score.points = curxp + xpAdd;
        if (nxtLvl <= score.points) {
            score.level = curlvl + 1;
            const lvlup = new MessageEmbed()
                .setAuthor(
                    `Congrats ${message.author.username}`,
                    message.author.displayAvatarURL()
                )
                .setTitle('You have leveled up!')
                .setThumbnail('https://i.imgur.com/lXeBiMs.png')
                .setColor(color)
                .addField('New Level', curlvl + 1);
            message.channel.send(lvlup).then(msg => {
                msg.delete({
                    timeout: 10000,
                });
            });
        }
        bot.setScore.run(score);
    }

Код «как есть» работает нормально и, как и ожидалось, но «как есть» не очень хорош, так как нет никакого вознаграждения за переход с уровня 30-31, так как это то же количество XP, необходимое для получения с уровня 1-2

0
Ragnar Lothbrok 27 Май 2019 в 16:09

2 ответа

Лучший ответ

Вот небольшая формула, которая должна помочь (если я правильно понимаю вашу проблему):

const nxtLvl = 5000 * (Math.pow(2, score.level) - 1);

Это дает следующие требования xp для повышения уровня:

1->2:  5000
2->3:  15000
3->4:  35000
4->5:  75000
5->6: 155000
1
T. Dirks 27 Май 2019 в 13:27

Попробуйте что-то вроде этого:

const levels = [0, 5000, 15000, 30000, 50000, 75000];
....
nextLevel = levels[score.level];

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

@ Ты имеешь в виду так:

nextLevel = 5000 * Math.round( score.level * (score.level + 1) / 2 );
0
Usagi Miyamoto 27 Май 2019 в 15:53
56326771