diff options
Diffstat (limited to 'build/cleaners')
-rw-r--r-- | build/cleaners/skyblock/member.js | 2 | ||||
-rw-r--r-- | build/cleaners/skyblock/skills.js | 54 |
2 files changed, 51 insertions, 5 deletions
diff --git a/build/cleaners/skyblock/member.js b/build/cleaners/skyblock/member.js index a9a419a..8e72be8 100644 --- a/build/cleaners/skyblock/member.js +++ b/build/cleaners/skyblock/member.js @@ -68,7 +68,7 @@ async function cleanSkyBlockProfileMemberResponse(member, included = null) { fairy_souls: fairySouls, inventories: inventoriesIncluded ? await inventory_1.cleanInventories(member) : undefined, objectives: objectives_1.cleanObjectives(member), - skills: skills_1.cleanSkills(member), + skills: await skills_1.cleanSkills(member), visited_zones: zones_1.cleanVisitedZones(member), collections: collections_1.cleanCollections(member), slayers: slayers_1.cleanSlayers(member) diff --git a/build/cleaners/skyblock/skills.js b/build/cleaners/skyblock/skills.js index 4ec5ec2..a761ec8 100644 --- a/build/cleaners/skyblock/skills.js +++ b/build/cleaners/skyblock/skills.js @@ -1,15 +1,61 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.cleanSkills = void 0; -function cleanSkills(data) { +exports.cleanSkills = exports.levelForSkillXp = void 0; +const constants_1 = require("../../constants"); +// the highest level you can have in each skill +// numbers taken from https://hypixel-skyblock.fandom.com/wiki/Skills +// maybe these should be moved to skyblock-constants? +const skillsMaxLevel = { + farming: 60, + mining: 60, + combat: 60, + foraging: 50, + fishing: 50, + enchanting: 60, + alchemy: 50, + taming: 50, + dungeoneering: 50, + carpentry: 50, + runecrafting: 25, + social: 25 +}; +// for skills that aren't in maxSkills, default to this +const skillsDefaultMaxLevel = 50; +/** + * Get the skill level for the amount of total xp + * @param xp The xp we're finding the level for + * @param easierLevel Whether it should use the alternate leveling xp table (used for cosmetic skills and dungeoneering) + */ +async function levelForSkillXp(xp, maxLevel) { + const xpTable = maxLevel <= 25 ? await constants_1.fetchSkillXpEasier() : await constants_1.fetchSkillXp(); + const skillLevel = [...xpTable].reverse().findIndex(levelXp => xp >= levelXp); + return skillLevel === -1 ? 0 : xpTable.length - skillLevel; +} +exports.levelForSkillXp = levelForSkillXp; +async function cleanSkills(data) { + var _a; const skills = []; for (const item in data) { if (item.startsWith('experience_skill_')) { const skillName = item.substr('experience_skill_'.length); - const skillValue = data[item]; + // the amount of total xp you have in this skill + const skillXp = data[item]; + const skillMaxLevel = (_a = skillsMaxLevel[skillName]) !== null && _a !== void 0 ? _a : skillsDefaultMaxLevel; + const xpTable = skillMaxLevel <= 25 ? await constants_1.fetchSkillXpEasier() : await constants_1.fetchSkillXp(); + // the level you're at for this skill + const skillLevel = await levelForSkillXp(skillXp, skillMaxLevel); + // the total xp required for the previous level + const previousLevelXp = skillLevel >= 1 ? xpTable[skillLevel - 1] : 0; + // the extra xp left over + const skillLevelXp = skillXp - previousLevelXp; + // the amount of extra xp required for this level + const skillLevelXpRequired = xpTable[skillLevel] - previousLevelXp; skills.push({ name: skillName, - xp: skillValue + xp: skillXp, + level: skillLevel, + levelXp: skillLevelXp, + levelXpRequired: skillLevelXpRequired }); } } |