farming-weight
Version:
Tools for calculating farming weight and fortune in Hypixel Skyblock
146 lines • 6.33 kB
JavaScript
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