Вот моя функция,
Он предназначен для получения на уровне пользователя количества xp, необходимого до следующего уровня, он работает, но только через уровни с 1 по 2, а затем, если введен требуемый xp для уровня 3, он не работает.
ХР удваивается за уровень, поэтому с уровня 1 до 2 - 10, от 2 до 3 - 20, с 3 до 4 - 40 и т. Д .;
$ user ['xp'] - это int для лучшего объяснения, вот несколько примеров того, что функция возвращает с разными значениями.
- $ user ['xp'] == 1, уровень 1, xpGot 1, xpNeeded 9, 10%
- $ user ['xp'] == 5, уровень 1, xpGot 5, xpNeeded 5, 50%
- $ user ['xp'] == 9, уровень 1, xpGot 9, xpNeeded 1, 90%
- $ user ['xp'] == 10, уровень 2, xpGot 0, xpNeeded 20, 0%
- $ user ['xp'] == 15, уровень 2, xpGot 5, xpNeeded 15, 25%
- $ user ['xp'] == 29, уровень 2, xpGot 19, xpNeeded 1, 95%
7. $ user ['xp'] == 30, уровень 2, xpGot 0, xpNeeded 0, 0%
После этого он терпит неудачу.
function calculateLevel($xpGot) {
$level = 1;
$xpNeeded = 10;
while ($xpGot >= $xpNeeded) {
$level++;
$xpGot %= $xpNeeded;
$xpNeeded *= 2;
}
if ($xpGot < $xpNeeded) {
$xp = $xpGot / $xpNeeded * 100;
echo '<p>Level: ' . $level . '</p>';
echo '<div class="displayBarWrap" title="' . $xpGot . '/' . $xpNeeded . ' XP (' . $xp . '%)">
<p>XP:</p>
<div class="displayBar"><div style="width: ' . $xp . '%;"></div></div></div>';
}
}
calculateLevel($user['xp']);