1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
"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
// 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);
// 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: skillXp,
level: skillLevel,
maxLevel: skillMaxLevel,
levelXp: skillLevelXp,
levelXpRequired: skillLevelXpRequired
});
}
}
return skills;
}
exports.cleanSkills = cleanSkills;
|