Skip to content

Instantly share code, notes, and snippets.

@houdmont
Last active October 9, 2017 16:20
Show Gist options
  • Save houdmont/54946ab141a288fe5c2455c1f7cb124f to your computer and use it in GitHub Desktop.
Save houdmont/54946ab141a288fe5c2455c1f7cb124f to your computer and use it in GitHub Desktop.
Levelling up a user.
function attemptLevelUp(addedXp, currentXp, currentLevel) {
var baseAmountForNextLevel = 0;
for (i = 1; i <= currentLevel; i++) {
baseAmountForNextLevel += xpNeededForNextLevel(i);
}
if ((currentXp + addedXp) >= baseAmountForNextLevel) {
// I am levelling up.
return {
level: currentLevel + 1,
totalXp: baseAmountForNextLevel,
surplus: (currentXp + addedXp) - baseAmountForNextLevel
}
}
// I am not levelling up.
return {
level: currentLevel,
totalXp: currentXp + addedXp,
surplus: 0
}
}
function xpNeededForNextLevel(level) {
var stepRange = Math.roundUp(level / 10) - 1;
var stepModifier = stepRange * 0.5;
return levelUpStepSize = (1 + stepModifier) * 1000;
}
var xp = 0;
var level = 1;
var added = 5000;
do {
var result = attemptLevelUp(added, xp, level)
if (result.surplus !== 0) {
xp = result.totalXp;
level = result.level;
added: result.surplus;
}
}
while(result.surplus !== 0);
// result.level === The users level.
// result.totalXp === The users total amount of XP after completion.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment