UNPKG

@zikeji/hypixel

Version:

With IntelliSense support & test coverage, this is an unopinionated async/await API wrapper for Hypixel's Public API. It is developed in TypeScript complete with documentation, typed interfaces for all API responses, built-in rate-limit handling, flexible

82 lines (78 loc) 2.59 kB
import type { ResourcesSkyblockSkillsResponse } from "../types/AugmentedTypes"; import type { SkyBlockProfileMember } from "../types/Augmented/SkyBlock/ProfileMember"; export interface SkyBlockSkillsInfo { FARMING: SkyBlockSkillInfo; MINING: SkyBlockSkillInfo; COMBAT: SkyBlockSkillInfo; /** * As official API support does not exist for this skill, this will always return level 0. */ DUNGEONEERING: SkyBlockSkillInfo; FORAGING: SkyBlockSkillInfo; FISHING: SkyBlockSkillInfo; ENCHANTING: SkyBlockSkillInfo; ALCHEMY: SkyBlockSkillInfo; CARPENTRY: SkyBlockSkillInfo; RUNECRAFTING: SkyBlockSkillInfo; /** * As official API support does not exist for this skill, this will always return level 0. */ SOCIAL: SkyBlockSkillInfo; TAMING: SkyBlockSkillInfo; [key: string]: SkyBlockSkillInfo; } export interface SkyBlockSkillInfo { name: string; description: string; level: number; exp: number; totalExpToLevel: number; expToNextLevel: number; maxLevel: number; } /** * This helper takes a profile member and converts raw skill EXP to skill levels using the skills resources. Returns false is none of the profile member does not have their skills API enabled. * @param profileMember The SkyBlock profile member object you want to check. * @param skills The skills resource object. * @category Helper */ export function getSkyBlockProfileMemberSkills( profileMember: SkyBlockProfileMember, skills: ResourcesSkyblockSkillsResponse["skills"] ): SkyBlockSkillsInfo | false { if (!profileMember.player_data?.experience) { return false; } const result = {} as SkyBlockSkillsInfo; for (let i = 0; i < Object.keys(skills).length; i += 1) { const skillName = Object.keys(skills)[i]; const skillKey = `SKILL_${skillName}`; const skill = skills[skillName]; let exp = 0; if (skillKey in profileMember.player_data.experience) { exp = profileMember.player_data.experience[skillKey] as number; } let level = 0; let totalExpToLevel = 0; let expToNextLevel = 0; for (let ii = 0; ii < skill.levels.length; ii += 1) { const levelInfo = skill.levels[ii]; if (levelInfo.totalExpRequired > exp) { expToNextLevel = levelInfo.totalExpRequired - exp; break; } level = levelInfo.level; totalExpToLevel = levelInfo.totalExpRequired; } result[skillName] = { name: skill.name, description: skill.description, level, exp, totalExpToLevel, expToNextLevel, maxLevel: skill.maxLevel, }; } return result; }