所以这是一个2个问题,但是基本上我正在为我的Discord机器人(Discord.js)创建一个排名/级别系统,并且下一个级别的进度栏存在问题。这是到目前为止我得到的:
const x = "□";
let progressBarArr = [x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x];
let currentLevel = Math.ceil(result.allocatedExp/1000)*1000;
if (currentLevel < 1000) currentLevel = 1000;
let progressBar = "["+progressBarArr.fill("=", Math.ceil(result.allocatedExp/currentLevel)*35).join('')+"]"
每获得1,000 XP,您的等级就会提高,因此,假设某个用户的XP是1234
,则它们将是1级,是2级的23%。我只需要证明进度-条型样式。我现在拥有的代码现在可以正常工作,但前提是它们的XP必须低于1k,否则该栏将始终充满。
我遇到的另一个问题对大多数人来说可能是微不足道的,但是我对此感到困惑,比如说用户有15k xp,我如何从15000中获得15kp来表示他们处于15级?
谢谢!
答案 0 :(得分:2)
只需花费Math.floor(xp / 1000)
即可获得玩家的当前等级。
对于进度条,使用模1000来检查玩家在最后1000个和下一个1000之间的距离,并将结果乘以35以找出要显示的=
个数:
const showBar = xp => {
const currentLevel = Math.floor(xp / 1000);
const progress = (xp % 1000) / 1000;
const progressOutOf35 = Math.round(progress * 35);
const x = "□";
const barStr = `[${'='.repeat(progressOutOf35)}${'□'.repeat(35 - progressOutOf35)}]`;
console.log(barStr + ', currntly at level ' + currentLevel);
};
showBar(1500);
showBar(3900);
showBar(15000);