UNPKG

farming-weight

Version:

Tools for calculating farming weight and fortune in Hypixel Skyblock

146 lines 6.33 kB
import { ReforgeTarget } from '../../constants/reforges.js'; import { Stat } from '../../constants/stats.js'; import { UpgradeAction, UpgradeCategory, } from '../../constants/upgrades.js'; import { ARMOR_SET_BONUS, FARMING_ARMOR_INFO, GEAR_SLOTS, } from '../../items/armor.js'; import { FARMING_EQUIPMENT_INFO } from '../../items/equipment.js'; function progressStatValue(progress, stat, key) { return progress.stats?.[stat]?.[key] ?? 0; } export const ARMOR_SET_FORTUNE_SOURCES = [ ...Object.entries(GEAR_SLOTS) .filter(([, info]) => info.target === ReforgeTarget.Armor) .map(gearslot), { name: 'Armor Set Bonus', exists: () => true, wiki: () => 'https://w.elitesb.gg/Fermento_Armor#Four_Pieces_', max: () => ARMOR_SET_BONUS.FERMENTO?.stats[4]?.[Stat.FarmingFortune] ?? 0, current: (set) => set.setBonuses.reduce((acc, bonus) => { return acc + (bonus.bonus.stats[bonus.count]?.[Stat.FarmingFortune] ?? 0); }, 0), currentStat: (set, stat) => set.setBonuses.reduce((acc, bonus) => { return acc + (bonus.bonus.stats[bonus.count]?.[stat] ?? 0); }, 0), }, ...Object.entries(GEAR_SLOTS) .filter(([, info]) => info.target === ReforgeTarget.Equipment) .map(gearslot), { name: 'Equipment Set Bonus', exists: (set) => set.equipmentSetBonuses.length > 0, wiki: () => 'https://w.elitesb.gg/Pesthunter%27s_Gloves', max: () => 0, current: () => 0, maxStat: (_set, stat) => { return Math.max(...Object.values(ARMOR_SET_BONUS.PESTHUNTERS?.stats ?? {}).map((stats) => stats?.[stat] ?? 0), 0); }, currentStat: (set, stat) => set.equipmentSetBonuses.reduce((acc, bonus) => { return acc + (bonus.bonus.stats[bonus.count]?.[stat] ?? 0); }, 0), }, ]; function gearslot([slot, info]) { return { name: slot, exists: () => true, wiki: (set) => { const current = set.getPiece(slot); return (current?.info.wiki ?? (info.target === ReforgeTarget.Armor ? FARMING_ARMOR_INFO[info.startingItem]?.wiki : FARMING_EQUIPMENT_INFO[info.startingItem]?.wiki)); }, max: (set) => { const item = set.getStartingPiece(slot); const progress = item?.getProgress(); const maxed = progress?.reduce((acc, p) => acc + p.max, 0) ?? 0; const currentItem = set.getPiece(slot); if (currentItem) { const currentProgress = currentItem.getProgress(); const currentMaxed = currentProgress?.reduce((acc, p) => acc + p.max, 0) ?? 0; if (currentMaxed > maxed) return currentMaxed; } return maxed; }, maxStat: (set, stat) => { const fake = set.getStartingPiece(slot); const fakeProgress = fake?.getProgress([stat], true) ?? []; const fakeMax = fakeProgress.reduce((acc, p) => acc + progressStatValue(p, stat, 'max'), 0); const currentItem = set.getPiece(slot); if (currentItem) { const currentProgress = currentItem.getProgress([stat], false); const currentMax = currentProgress.reduce((acc, p) => acc + progressStatValue(p, stat, 'max'), 0); if (currentMax > fakeMax) return currentMax; } return fakeMax; }, current: (set) => { const item = set.getPiece(slot); const progress = item?.getProgress(); return progress?.reduce((acc, p) => acc + p.current, 0) ?? 0; }, currentStat: (set, stat) => { const item = set.getPiece(slot); const progress = item?.getProgress([stat], false) ?? []; return progress.reduce((acc, p) => acc + progressStatValue(p, stat, 'current'), 0); }, progress: (set, stats) => { const item = set.getPiece(slot); if (item) return item.getProgress(stats, false); const fake = set.getStartingPiece(slot); return fake?.getProgress(stats, true) ?? []; }, info: (set) => { const piece = set.getPiece(slot); const fake = !piece ? set.getStartingPiece(slot) : undefined; return { item: piece?.item, info: piece?.info, nextInfo: fake ? fake.info : piece?.getNextItemUpgrade()?.info, maxInfo: (fake ? fake : piece)?.getLastItemUpgrade()?.info, }; }, upgrades: (set, stats) => { const piece = set.getPiece(slot); if (piece) return piece.getUpgrades(stats?.length === 1 ? { stat: stats[0] } : undefined); const itemToPurchase = info.target === ReforgeTarget.Armor ? FARMING_ARMOR_INFO[info.startingItem] : FARMING_EQUIPMENT_INFO[info.startingItem]; const fakeItem = set.getStartingPiece(slot); const upgrade = { title: itemToPurchase.name, action: UpgradeAction.Purchase, purchase: fakeItem?.item.skyblockId ?? undefined, increase: fakeItem?.getFortune() ?? 0, stats: fakeItem?.getStats() ?? {}, wiki: itemToPurchase.wiki, category: UpgradeCategory.Item, conflictKey: `item_purchase:${slot}`, onto: { slot: slot, newSkyblockId: itemToPurchase.skyblockId, }, cost: fakeItem?.item.skyblockId ? { items: { [fakeItem.item.skyblockId]: 1, }, } : undefined, meta: { type: 'buy_item', id: itemToPurchase.skyblockId, }, }; if (itemToPurchase.skillReq) { upgrade.skillReq = itemToPurchase.skillReq; } return [upgrade]; }, }; } //# sourceMappingURL=armorsetsources.js.map