"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 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 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 }; const skillXpTable = [ 50, 175, 375, 675, 1175, 1925, 2925, 4425, 6425, 9925, 14925, 22425, 32425, 47425, 67425, 97425, 147425, 222425, 322425, 522425, 822425, 1222425, 1722425, 2322425, 3022425, 3822425, 4722425, 5722425, 6822425, 8022425, 9322425, 10722425, 12222425, 13822425, 15522425, 17322425, 19222425, 21222425, 23322425, 25522425, 27822425, 30222425, 32722425, 35322425, 38072425, 40972425, 44072425, 47472425, 51172425, 55172425, 59472425, 64072425, 68972425, 74172425, 79672425, 85472425, 91572425, 97972425, 104672425, 111672425 // 60 ]; const skillXpTableEasier = [ 50, 150, 275, 435, 635, 885, 1200, 1600, 2100, 2725, 3510, 4510, 5760, 7325, 9325, 11825, 14950, 18950, 23950, 30200, 38050, 47850, 60100, 75400, 94450 // 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) */ function levelForSkillXp(xp, maxLevel) { const xpTable = maxLevel <= 25 ? skillXpTableEasier : skillXpTable; const skillLevel = [...xpTable].reverse().findIndex(levelXp => xp >= levelXp); return skillLevel === -1 ? 0 : xpTable.length - skillLevel; } exports.levelForSkillXp = levelForSkillXp; // 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); // 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 ? skillXpTableEasier : skillXpTable; // the level you're at for this skill const skillLevel = 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: skillXp, level: skillLevel, levelXp: skillLevelXp, levelXpRequired: skillLevelXpRequired }); } } return skills; } exports.cleanSkills = cleanSkills;