aboutsummaryrefslogtreecommitdiff
path: root/src/cleaners
diff options
context:
space:
mode:
Diffstat (limited to 'src/cleaners')
-rw-r--r--src/cleaners/skyblock/skills.ts112
1 files changed, 109 insertions, 3 deletions
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<Skill[]> {
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