From 69910faa449ee9d4ff63fc1a764434e7bd974d1b Mon Sep 17 00:00:00 2001 From: mat <27899617+mat-1@users.noreply.github.com> Date: Wed, 2 Jun 2021 16:23:38 -0500 Subject: Extra skill info (#52) * include more data about skills * i decided that having manual stuff in skyblock-constants is a bad idea * Update skills.js --- src/cleaners/skyblock/skills.ts | 112 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 109 insertions(+), 3 deletions(-) (limited to 'src/cleaners') diff --git a/src/cleaners/skyblock/skills.ts b/src/cleaners/skyblock/skills.ts index fa27217..154b269 100644 --- a/src/cleaners/skyblock/skills.ts +++ b/src/cleaners/skyblock/skills.ts @@ -11,7 +11,6 @@ export interface Skill { // 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: { [ key: string ]: number } = { farming: 60, mining: 60, @@ -27,6 +26,113 @@ const skillsMaxLevel: { [ key: string ]: number } = { social: 25 } +const skillXpTable = [ + 50, // 1 + 175, + 375, + 675, + 1175, + 1925, + 2925, + 4425, + 6425, + 9925, // 10 + 14925, + 22425, + 32425, + 47425, + 67425, + 97425, + 147425, + 222425, + 322425, + 522425, // 20 + 822425, + 1222425, + 1722425, + 2322425, + 3022425, + 3822425, + 4722425, + 5722425, + 6822425, + 8022425, // 30 + 9322425, + 10722425, + 12222425, + 13822425, + 15522425, + 17322425, + 19222425, + 21222425, + 23322425, + 25522425, // 40 + 27822425, + 30222425, + 32722425, + 35322425, + 38072425, + 40972425, + 44072425, + 47472425, + 51172425, + 55172425, // 50 + 59472425, + 64072425, + 68972425, + 74172425, + 79672425, + 85472425, + 91572425, + 97972425, + 104672425, + 111672425 // 60 + ] + + +const skillXpTableEasier = [ + 50, // 1 + 150, + 275, + 435, + 635, + 885, + 1200, + 1600, + 2100, + 2725, // 10 + 3510, + 4510, + 5760, + 7325, + 9325, + 11825, + 14950, + 18950, + 23950, + 30200, // 20 + 38050, + 47850, + 60100, + 75400, + 94450 // 25 +] + + +// for skills that aren't in maxSkills, default to this +const skillsDefaultMaxLevel: number = 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) + */ +export function levelForSkillXp(xp: number, maxLevel: number) { + const xpTable = maxLevel <= 25 ? skillXpTableEasier : skillXpTable + const skillLevel = [...xpTable].reverse().findIndex(levelXp => xp >= levelXp) + return skillLevel === -1 ? 0 : xpTable.length - skillLevel +} + // for skills that aren't in maxSkills, default to this const skillsDefaultMaxLevel: number = 50 @@ -52,10 +158,10 @@ export async function cleanSkills(data: any): Promise { const skillMaxLevel = skillsMaxLevel[skillName] ?? skillsDefaultMaxLevel - const xpTable = skillMaxLevel <= 25 ? await fetchSkillXpEasier() : await fetchSkillXp() + const xpTable = skillMaxLevel <= 25 ? skillXpTableEasier : skillXpTable // the level you're at for this skill - const skillLevel = await levelForSkillXp(skillXp, skillMaxLevel) + const skillLevel = levelForSkillXp(skillXp, skillMaxLevel) // the total xp required for the previous level const previousLevelXp = skillLevel >= 1 ? xpTable[skillLevel - 1] : 0 -- cgit