UNPKG

farming-weight

Version:

Tools for calculating farming weight and fortune in Hypixel Skyblock

102 lines (101 loc) 3.39 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports.getPetLevel = exports.FarmingPet = exports.createFarmingPet = void 0; const PETS_1 = require('../constants/pets'); const REFORGES_1 = require('../constants/reforges'); const SKILLS_1 = require('../constants/skills'); const ITEMSTATS_1 = require('../util/itemstats'); function createFarmingPet(pet) { return new FarmingPet(pet); } exports.createFarmingPet = createFarmingPet; class FarmingPet { constructor(pet, options) { this.options = options; this.pet = pet; this.info = PETS_1.FARMING_PETS[pet.type]; if (!this.info) { throw new Error(`Invalid farming pet type: ${pet.type}`); } this.type = pet.type; this.rarity = (0, ITEMSTATS_1.getRarityFromLore)([pet.tier ?? '']) ?? REFORGES_1.Rarity.Common; this.level = getPetLevel(pet); this.item = pet.heldItem ? PETS_1.FARMING_PET_ITEMS[pet.heldItem] : undefined; this.fortune = this.getFortune(); } setOptions(options) { this.options = options; this.fortune = this.getFortune(); } getFortune() { let FORTUNE = 0; const BREAKDOWN = {}; // Base stats const STATS = this.info.stats?.[REFORGES_1.Stat.FarmingFortune]; if (STATS) { FORTUNE += STATS; BREAKDOWN['Base Stats'] = STATS; } // Per level/ability stats const PER_LEVEL_STATS = this.info.perLevelStats?.[REFORGES_1.Stat.FarmingFortune]; if (PER_LEVEL_STATS) { const AMOUNT = PER_LEVEL_STATS.multiplier * this.level; FORTUNE += AMOUNT; BREAKDOWN[PER_LEVEL_STATS.name] = AMOUNT; } // Per rarity fortune stats const PER_RARITY_STATS = this.info.perRarityLevelStats?.[this.rarity]?.[REFORGES_1.Stat.FarmingFortune]; if (PER_RARITY_STATS) { const AMOUNT = PER_RARITY_STATS.multiplier * this.level; FORTUNE += AMOUNT; BREAKDOWN[PER_RARITY_STATS.name] = AMOUNT; } // Mooshroom Cow Perk if (this.type === PETS_1.FarmingPets.MooshroomCow && this.options?.strength) { const STRENGTH_PER = 40 - this.level * 0.2; const STRENGTH = this.options.strength; const AMOUNT = Math.floor((STRENGTH / STRENGTH_PER) * 0.7); FORTUNE += AMOUNT; BREAKDOWN['Farming Strength'] = AMOUNT; } // Pet item stats if (this.item) { const stats = this.item.stats?.[REFORGES_1.Stat.FarmingFortune]; const perLevelStats = this.item.perLevelStats; if (stats) { FORTUNE += stats; BREAKDOWN[this.item.name + ' Stats'] = stats; } if (perLevelStats && perLevelStats.skill === SKILLS_1.Skill.Garden) { const AMOUNT = (perLevelStats?.stats?.[REFORGES_1.Stat.FarmingFortune] ?? 0) * (this.options?.gardenLevel ?? 0); FORTUNE += AMOUNT; BREAKDOWN[this.item.name] = AMOUNT; } } this.breakdown = BREAKDOWN; this.fortune = FORTUNE; return FORTUNE; } static isValid(pet) { return pet.type && pet.type in PETS_1.FARMING_PETS; } static fromArray(items, options) { return items .filter((item) => FarmingPet.isValid(item)) .map((item) => new FarmingPet(item, options)) .sort((a, b) => b.fortune - a.fortune); } } exports.FarmingPet = FarmingPet; function getPetLevel(pet, max = 100) { const LEVELS = PETS_1.PET_LEVELS; const XP = pet.exp ?? 0; const LEVEL_INDEX = LEVELS.findIndex((level) => level > XP); if (LEVEL_INDEX === -1 || LEVEL_INDEX >= max) { return max; } return LEVEL_INDEX + 1; } exports.getPetLevel = getPetLevel; //# sourceMappingURL=farmingpet.js.map