Моя «проблема» - это скорее функция, которую я хочу добавить, я использовал это руководство: 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
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
Попробуйте что-то вроде этого:
const levels = [0, 5000, 15000, 30000, 50000, 75000];
....
nextLevel = levels[score.level];
Редактировать
@ Ты имеешь в виду так:
nextLevel = 5000 * Math.round( score.level * (score.level + 1) / 2 );
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.