farming-weight 0.4.14 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/constants/enchants.d.ts +1 -0
  2. package/dist/constants/enchants.js +28 -1
  3. package/dist/constants/enchants.js.map +1 -1
  4. package/dist/constants/equipment.d.ts +26 -0
  5. package/dist/constants/equipment.js +113 -0
  6. package/dist/constants/equipment.js.map +1 -0
  7. package/dist/constants/gems.d.ts +1 -1
  8. package/dist/constants/gems.js +1 -1
  9. package/dist/constants/tempfortune.d.ts +14 -0
  10. package/dist/constants/tempfortune.js +58 -0
  11. package/dist/constants/tempfortune.js.map +1 -0
  12. package/dist/fortune/farmingaccessory.d.ts +15 -0
  13. package/dist/fortune/farmingaccessory.js +54 -0
  14. package/dist/fortune/farmingaccessory.js.map +1 -0
  15. package/dist/fortune/farmingarmor.d.ts +62 -0
  16. package/dist/fortune/farmingarmor.js +305 -0
  17. package/dist/fortune/farmingarmor.js.map +1 -0
  18. package/dist/fortune/farmingequipment.d.ts +24 -0
  19. package/dist/fortune/farmingequipment.js +157 -0
  20. package/dist/fortune/farmingequipment.js.map +1 -0
  21. package/dist/fortune/farmingpet.d.ts +22 -0
  22. package/dist/fortune/farmingpet.js +100 -0
  23. package/dist/fortune/farmingpet.js.map +1 -0
  24. package/dist/fortune/farmingtool.d.ts +41 -0
  25. package/dist/fortune/farmingtool.js +206 -0
  26. package/dist/fortune/farmingtool.js.map +1 -0
  27. package/dist/fortune/item.d.ts +22 -0
  28. package/dist/fortune/item.js +12 -0
  29. package/dist/fortune/item.js.map +1 -0
  30. package/dist/index.d.ts +10 -9
  31. package/dist/index.js +10 -9
  32. package/dist/index.js.map +1 -1
  33. package/dist/player/index.d.ts +1 -0
  34. package/dist/player/index.js +2 -0
  35. package/dist/player/index.js.map +1 -0
  36. package/dist/player/player.d.ts +130 -0
  37. package/dist/player/player.js +285 -0
  38. package/dist/player/player.js.map +1 -0
  39. package/dist/util/gems.d.ts +1 -1
  40. package/dist/util/skyblocktime.d.ts +4 -0
  41. package/dist/util/skyblocktime.js +3 -3
  42. package/dist/util/skyblocktime.js.map +1 -1
  43. package/dist/weight/weightcalc.d.ts +14 -5
  44. package/dist/weight/weightcalc.js +50 -21
  45. package/dist/weight/weightcalc.js.map +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FarmingArmor = exports.ArmorSet = void 0;
4
+ const armor_1 = require("../constants/armor");
5
+ const enchants_1 = require("../constants/enchants");
6
+ const reforges_1 = require("../constants/reforges");
7
+ const skills_1 = require("../constants/skills");
8
+ const specialcrops_1 = require("../constants/specialcrops");
9
+ const special_1 = require("../crops/special");
10
+ const gems_1 = require("../util/gems");
11
+ const itemstats_1 = require("../util/itemstats");
12
+ class ArmorSet {
13
+ get armor() {
14
+ return [this.helmet ?? null, this.chestplate ?? null, this.leggings ?? null, this.boots ?? null];
15
+ }
16
+ get equipment() {
17
+ return [this.necklace ?? null, this.cloak ?? null, this.belt ?? null, this.gloves ?? null];
18
+ }
19
+ get fortune() {
20
+ return this.armorFortune + this.equipmentFortune;
21
+ }
22
+ constructor(armor, equipment, options) {
23
+ this.setBonuses = [];
24
+ if (options) {
25
+ for (const piece of armor) {
26
+ piece.setOptions(options);
27
+ }
28
+ for (const piece of equipment ?? []) {
29
+ piece.setOptions(options);
30
+ }
31
+ }
32
+ armor.sort((a, b) => b.potential - a.potential);
33
+ this.pieces = armor;
34
+ this.helmet = armor.find((a) => a.slot === armor_1.GearSlot.Helmet);
35
+ this.chestplate = armor.find((a) => a.slot === armor_1.GearSlot.Chestplate);
36
+ this.leggings = armor.find((a) => a.slot === armor_1.GearSlot.Leggings);
37
+ this.boots = armor.find((a) => a.slot === armor_1.GearSlot.Boots);
38
+ if (equipment) {
39
+ this.setEquipment(equipment);
40
+ }
41
+ else {
42
+ this.recalculateFamilies();
43
+ }
44
+ }
45
+ setEquipment(equipment) {
46
+ equipment.sort((a, b) => b.fortune - a.fortune);
47
+ this.equipmentPieces = equipment;
48
+ this.necklace = equipment.find((a) => a.slot === armor_1.GearSlot.Necklace);
49
+ this.cloak = equipment.find((a) => a.slot === armor_1.GearSlot.Cloak);
50
+ this.belt = equipment.find((a) => a.slot === armor_1.GearSlot.Belt);
51
+ this.gloves = equipment.find((a) => a.slot === armor_1.GearSlot.Gloves);
52
+ this.recalculateFamilies();
53
+ }
54
+ getPiece(slot) {
55
+ switch (slot) {
56
+ case armor_1.GearSlot.Helmet:
57
+ return this.helmet;
58
+ case armor_1.GearSlot.Chestplate:
59
+ return this.chestplate;
60
+ case armor_1.GearSlot.Leggings:
61
+ return this.leggings;
62
+ case armor_1.GearSlot.Boots:
63
+ return this.boots;
64
+ case armor_1.GearSlot.Necklace:
65
+ return this.necklace;
66
+ case armor_1.GearSlot.Cloak:
67
+ return this.cloak;
68
+ case armor_1.GearSlot.Belt:
69
+ return this.belt;
70
+ case armor_1.GearSlot.Gloves:
71
+ return this.gloves;
72
+ default:
73
+ return;
74
+ }
75
+ }
76
+ setPiece(armor) {
77
+ if (armor instanceof FarmingArmor) {
78
+ switch (armor.slot) {
79
+ case armor_1.GearSlot.Helmet:
80
+ this.helmet = armor;
81
+ break;
82
+ case armor_1.GearSlot.Chestplate:
83
+ this.chestplate = armor;
84
+ break;
85
+ case armor_1.GearSlot.Leggings:
86
+ this.leggings = armor;
87
+ break;
88
+ case armor_1.GearSlot.Boots:
89
+ this.boots = armor;
90
+ break;
91
+ }
92
+ this.recalculateFamilies();
93
+ return;
94
+ }
95
+ switch (armor.slot) {
96
+ case armor_1.GearSlot.Necklace:
97
+ this.necklace = armor;
98
+ break;
99
+ case armor_1.GearSlot.Cloak:
100
+ this.cloak = armor;
101
+ break;
102
+ case armor_1.GearSlot.Belt:
103
+ this.belt = armor;
104
+ break;
105
+ case armor_1.GearSlot.Gloves:
106
+ this.gloves = armor;
107
+ break;
108
+ }
109
+ this.getFortuneBreakdown();
110
+ }
111
+ recalculateFamilies() {
112
+ const families = new Map();
113
+ const armor = this.armor.filter((a) => a);
114
+ this.setBonuses = [];
115
+ for (const piece of armor) {
116
+ if (!piece.armor.family)
117
+ continue;
118
+ families.set(piece.armor.family, (families.get(piece.armor.family) ?? 0) + 1);
119
+ }
120
+ for (const [family, count] of families.entries()) {
121
+ if (count < 2)
122
+ continue;
123
+ const bonus = armor_1.ARMOR_SET_BONUS[family];
124
+ if (!bonus)
125
+ continue;
126
+ this.setBonuses.push({
127
+ count,
128
+ from: armor.filter((a) => a.armor.family === family).map((a) => a.slot),
129
+ bonus,
130
+ special: bonus.special,
131
+ });
132
+ }
133
+ this.getFortuneBreakdown();
134
+ }
135
+ getFortuneBreakdown(reloadFamilies = false) {
136
+ if (reloadFamilies) {
137
+ this.recalculateFamilies();
138
+ }
139
+ let sum = 0;
140
+ const breakdown = {};
141
+ // Armor fortune
142
+ for (const piece of this.armor) {
143
+ if (!piece)
144
+ continue;
145
+ const fortune = piece.fortune;
146
+ if (fortune > 0) {
147
+ breakdown[piece.item.name ?? ''] = fortune;
148
+ sum += fortune;
149
+ }
150
+ }
151
+ // Armor set bonuses
152
+ for (const { bonus, count } of this.setBonuses) {
153
+ if (count < 2 || count > 4)
154
+ continue;
155
+ const fortune = bonus.stats?.[count]?.[reforges_1.Stat.FarmingFortune] ?? 0;
156
+ if (fortune > 0) {
157
+ breakdown[bonus.name] = fortune;
158
+ sum += fortune;
159
+ }
160
+ }
161
+ this.armorFortune = sum;
162
+ // Equipment fortune
163
+ let equipmentSum = 0;
164
+ for (const piece of this.equipment) {
165
+ if (!piece)
166
+ continue;
167
+ const fortune = piece.fortune;
168
+ if (fortune > 0) {
169
+ breakdown[piece.item.name ?? ''] = fortune;
170
+ equipmentSum += fortune;
171
+ }
172
+ }
173
+ this.equipmentFortune = equipmentSum;
174
+ return breakdown;
175
+ }
176
+ specialDropsCalc(blocksBroken, crop) {
177
+ const special = specialcrops_1.MATCHING_SPECIAL_CROP[crop];
178
+ const applicableBonuses = this.setBonuses.filter((b) => b.special?.includes(special));
179
+ if (applicableBonuses.length === 0)
180
+ return null;
181
+ // Armor set counts need to be combined for special crops
182
+ // There will only be 2 applicable bonuses at most when Fermento armor plus
183
+ // a lower tier armor is used. Hypixel appeats to count these as the same
184
+ // set bonus instead of rolling them separately.
185
+ let count = 0;
186
+ for (const bonus of applicableBonuses) {
187
+ count += bonus.count;
188
+ }
189
+ return (0, special_1.calculateAverageSpecialCrops)(blocksBroken, crop, count);
190
+ }
191
+ get slots() {
192
+ return {
193
+ [armor_1.GearSlot.Helmet]: this.helmet,
194
+ [armor_1.GearSlot.Chestplate]: this.chestplate,
195
+ [armor_1.GearSlot.Leggings]: this.leggings,
196
+ [armor_1.GearSlot.Boots]: this.boots,
197
+ [armor_1.GearSlot.Necklace]: this.necklace,
198
+ [armor_1.GearSlot.Cloak]: this.cloak,
199
+ [armor_1.GearSlot.Belt]: this.belt,
200
+ [armor_1.GearSlot.Gloves]: this.gloves,
201
+ };
202
+ }
203
+ get slotOptions() {
204
+ return {
205
+ [armor_1.GearSlot.Helmet]: this.pieces.filter((a) => a.slot === armor_1.GearSlot.Helmet),
206
+ [armor_1.GearSlot.Chestplate]: this.pieces.filter((a) => a.slot === armor_1.GearSlot.Chestplate),
207
+ [armor_1.GearSlot.Leggings]: this.pieces.filter((a) => a.slot === armor_1.GearSlot.Leggings),
208
+ [armor_1.GearSlot.Boots]: this.pieces.filter((a) => a.slot === armor_1.GearSlot.Boots),
209
+ [armor_1.GearSlot.Necklace]: this.equipmentPieces.filter((a) => a.slot === armor_1.GearSlot.Necklace),
210
+ [armor_1.GearSlot.Cloak]: this.equipmentPieces.filter((a) => a.slot === armor_1.GearSlot.Cloak),
211
+ [armor_1.GearSlot.Belt]: this.equipmentPieces.filter((a) => a.slot === armor_1.GearSlot.Belt),
212
+ [armor_1.GearSlot.Gloves]: this.equipmentPieces.filter((a) => a.slot === armor_1.GearSlot.Gloves),
213
+ };
214
+ }
215
+ }
216
+ exports.ArmorSet = ArmorSet;
217
+ class FarmingArmor {
218
+ get slot() {
219
+ return this.armor.slot;
220
+ }
221
+ get potential() {
222
+ if (!this.armor.family) {
223
+ return this.fortune;
224
+ }
225
+ // Add the set bonus potential to the fortune
226
+ return this.fortune + (armor_1.ARMOR_SET_BONUS[this.armor.family]?.piecePotential?.[reforges_1.Stat.FarmingFortune] ?? 0);
227
+ }
228
+ constructor(item, options) {
229
+ this.options = options;
230
+ this.item = item;
231
+ const armor = armor_1.ARMOR_INFO[item.skyblockId];
232
+ if (!armor) {
233
+ throw new Error(`Unknown farming armor: ${item.name} (${item.skyblockId})`);
234
+ }
235
+ this.armor = armor;
236
+ if (item.lore) {
237
+ this.rarity = (0, itemstats_1.getRarityFromLore)(item.lore);
238
+ }
239
+ this.reforge = reforges_1.REFORGES[item.attributes?.modifier ?? ''] ?? undefined;
240
+ this.reforgeStats = this.reforge?.tiers?.[this.rarity];
241
+ this.recombobulated = this.item.attributes?.rarity_upgrades === '1';
242
+ this.sumFortune();
243
+ }
244
+ setOptions(options) {
245
+ this.options = options;
246
+ this.fortune = this.sumFortune();
247
+ }
248
+ sumFortune() {
249
+ this.fortuneBreakdown = {};
250
+ let sum = 0;
251
+ // Base fortune
252
+ const base = this.armor.stats?.[reforges_1.Stat.FarmingFortune] ?? 0;
253
+ if (base > 0) {
254
+ this.fortuneBreakdown['Base Stats'] = base;
255
+ sum += base;
256
+ }
257
+ // Per farming level stats like Rancher's Boots
258
+ if (this.armor.perLevelStats?.skill === skills_1.Skill.Farming && this.options?.farmingLevel) {
259
+ const perLevel = this.armor.perLevelStats?.stats[reforges_1.Stat.FarmingFortune] ?? 0;
260
+ if (perLevel > 0) {
261
+ this.fortuneBreakdown['Farming Level'] = perLevel * this.options.farmingLevel;
262
+ sum += perLevel * this.options.farmingLevel;
263
+ }
264
+ }
265
+ // Reforge stats
266
+ const reforge = this.reforgeStats?.stats?.[reforges_1.Stat.FarmingFortune] ?? 0;
267
+ if (reforge > 0) {
268
+ this.fortuneBreakdown[this.reforge?.name ?? 'Reforge'] = reforge;
269
+ sum += reforge;
270
+ }
271
+ // Gems
272
+ const peridot = (0, gems_1.getPeridotFortune)(this.rarity, this.item);
273
+ if (peridot > 0) {
274
+ this.fortuneBreakdown['Peridot Gems'] = peridot;
275
+ sum += peridot;
276
+ }
277
+ // Enchantments
278
+ const enchantments = Object.entries(this.item.enchantments ?? {});
279
+ for (const [enchant, level] of enchantments) {
280
+ if (!level)
281
+ continue;
282
+ const enchantment = enchants_1.FARMING_ARMOR_ENCHANTS[enchant];
283
+ if (!enchantment || !level)
284
+ continue;
285
+ const fortune = enchantment.levels?.[level]?.[reforges_1.Stat.FarmingFortune] ?? 0;
286
+ if (fortune > 0) {
287
+ this.fortuneBreakdown[enchantment.name] = fortune;
288
+ sum += fortune;
289
+ }
290
+ }
291
+ this.fortune = sum;
292
+ return sum;
293
+ }
294
+ static isValid(item) {
295
+ return armor_1.ARMOR_INFO[item.skyblockId] !== undefined;
296
+ }
297
+ static fromArray(items, options) {
298
+ return items
299
+ .filter((item) => FarmingArmor.isValid(item))
300
+ .map((item) => new FarmingArmor(item, options))
301
+ .sort((a, b) => b.fortune - a.fortune);
302
+ }
303
+ }
304
+ exports.FarmingArmor = FarmingArmor;
305
+ //# sourceMappingURL=farmingarmor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"farmingarmor.js","sourceRoot":"","sources":["../../src/fortune/farmingarmor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { FarmingArmorInfo } from '../constants/armor';
2
+ import { Rarity, Reforge, ReforgeTier } from '../constants/reforges';
3
+ import { EliteItemDto } from './item';
4
+ import { PlayerOptions } from '../player/player';
5
+ export declare class FarmingEquipment {
6
+ readonly item: EliteItemDto;
7
+ readonly info: FarmingArmorInfo;
8
+ get slot(): import("../constants/armor").GearSlot;
9
+ readonly rarity: Rarity;
10
+ readonly reforge: Reforge | undefined;
11
+ readonly reforgeStats: ReforgeTier | undefined;
12
+ readonly recombobulated: boolean;
13
+ fortune: number;
14
+ fortuneBreakdown: Record<string, number>;
15
+ private options?;
16
+ constructor(item: EliteItemDto, options?: PlayerOptions);
17
+ setOptions(options: PlayerOptions): void;
18
+ getFortune(): number;
19
+ private getFortuneFromVisitors;
20
+ private getPieceBonus;
21
+ static isValid(item: EliteItemDto): boolean;
22
+ static fromArray(items: EliteItemDto[], options?: PlayerOptions): FarmingEquipment[];
23
+ }
24
+ export declare const LotusGear: typeof FarmingEquipment;
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LotusGear = exports.FarmingEquipment = void 0;
4
+ const enchants_1 = require("../constants/enchants");
5
+ const equipment_1 = require("../constants/equipment");
6
+ const reforges_1 = require("../constants/reforges");
7
+ const itemstats_1 = require("../util/itemstats");
8
+ const lore_1 = require("../util/lore");
9
+ const player_1 = require("../player/player");
10
+ class FarmingEquipment {
11
+ item;
12
+ info;
13
+ get slot() {
14
+ return this.info.slot;
15
+ }
16
+ constructor(item, options) {
17
+ this.options = options;
18
+ this.item = item;
19
+ const info = equipment_1.EQUIPMENT_INFO[item.skyblockId];
20
+ if (!info) {
21
+ throw new Error(`Unknown equipment: ${item.name} (${item.skyblockId})`);
22
+ }
23
+ this.info = info;
24
+ if (item.lore) {
25
+ this.rarity = (0, itemstats_1.getRarityFromLore)(item.lore);
26
+ }
27
+ this.reforge = reforges_1.REFORGES[item.attributes?.modifier ?? ''] ?? undefined;
28
+ this.reforgeStats = this.reforge?.tiers?.[this.rarity];
29
+ this.recombobulated = this.item.attributes?.rarity_upgrades === '1';
30
+ this.getFortune();
31
+ }
32
+ setOptions(options) {
33
+ this.options = options;
34
+ this.getFortune();
35
+ }
36
+ getFortune() {
37
+ this.fortuneBreakdown = {};
38
+ let sum = 0;
39
+ // Base fortune
40
+ const base = this.info.stats?.[reforges_1.Stat.FarmingFortune] ?? 0;
41
+ if (base > 0) {
42
+ this.fortuneBreakdown['Base Stats'] = base;
43
+ sum += base;
44
+ }
45
+ // Reforge
46
+ const reforge = this.reforgeStats?.stats?.[reforges_1.Stat.FarmingFortune] ?? 0;
47
+ if (reforge > 0) {
48
+ this.fortuneBreakdown['Reforge'] = reforge;
49
+ sum += reforge;
50
+ }
51
+ // Green Thumb
52
+ const uniqueVisitors = this.options?.uniqueVisitors ?? 0;
53
+ const greenThumbLevel = this.item.enchantments?.green_thumb ?? 0;
54
+ if (uniqueVisitors > 0 && greenThumbLevel > 0) {
55
+ const greenThumb = enchants_1.EQUIPMENT_ENCHANTS.green_thumb?.multipliedLevels?.[greenThumbLevel]?.[reforges_1.Stat.FarmingFortune];
56
+ if (greenThumb) {
57
+ const greenThumbFortune = uniqueVisitors * greenThumb;
58
+ this.fortuneBreakdown['Green Thumb'] = greenThumbFortune;
59
+ sum += greenThumbFortune;
60
+ }
61
+ }
62
+ // Lotus Piece Specific
63
+ if (this.info.family === 'LOTUS') {
64
+ // Green thumb from lore as a fallback
65
+ if (!this.options?.uniqueVisitors) {
66
+ const visitors = this.getFortuneFromVisitors(base, reforge);
67
+ if (visitors > 0) {
68
+ this.fortuneBreakdown['Green Thumb'] = visitors;
69
+ sum += visitors;
70
+ }
71
+ }
72
+ // Salesperson lotus piece bonus
73
+ const pieceBonus = this.getPieceBonus();
74
+ if (pieceBonus > 0) {
75
+ this.fortuneBreakdown['Salesperson'] = pieceBonus;
76
+ sum += pieceBonus;
77
+ }
78
+ }
79
+ if (this.item.skyblockId === 'ZORROS_CAPE') {
80
+ // If Zorro is disabled, set fortune to 0
81
+ if (this.options?.zorro?.enabled === false) {
82
+ this.fortune = 0;
83
+ return 0;
84
+ }
85
+ // Zorro's Cape
86
+ const zorro = this.options?.zorro ?? {
87
+ enabled: true,
88
+ mode: player_1.ZorroMode.Normal
89
+ };
90
+ switch (zorro.mode) {
91
+ case player_1.ZorroMode.Averaged:
92
+ sum *= 1.3333;
93
+ for (const key in this.fortuneBreakdown) {
94
+ if (this.fortuneBreakdown[key] === undefined)
95
+ continue;
96
+ this.fortuneBreakdown[key] *= 1.3333;
97
+ }
98
+ break;
99
+ case player_1.ZorroMode.Contest:
100
+ sum *= 2;
101
+ for (const key in this.fortuneBreakdown) {
102
+ if (this.fortuneBreakdown[key] === undefined)
103
+ continue;
104
+ this.fortuneBreakdown[key] *= 2;
105
+ }
106
+ break;
107
+ case player_1.ZorroMode.Normal:
108
+ default:
109
+ break;
110
+ }
111
+ }
112
+ this.fortune = sum;
113
+ return sum;
114
+ }
115
+ getFortuneFromVisitors(base, reforge) {
116
+ if (!this.item.enchantments?.green_thumb)
117
+ return 0;
118
+ const regex = /§7Farming Fortune: §a\+(\d+.?\d+)/g;
119
+ let found = 0;
120
+ for (const line of this.item.lore ?? []) {
121
+ const number = (0, lore_1.extractNumberFromLine)(line, regex) ?? 0;
122
+ if (!number)
123
+ continue;
124
+ found = +number;
125
+ break;
126
+ }
127
+ if (found === 0)
128
+ return 0;
129
+ return Math.max(0, found - base - reforge);
130
+ }
131
+ getPieceBonus() {
132
+ const regex = /§7Piece Bonus: §6\+(\d+)☘/g;
133
+ let found = 0;
134
+ for (const line of (this.item.lore ?? []).reverse()) {
135
+ const number = (0, lore_1.extractNumberFromLine)(line, regex) ?? 0;
136
+ if (!number)
137
+ continue;
138
+ found = number;
139
+ break;
140
+ }
141
+ return found;
142
+ }
143
+ static isValid(item) {
144
+ return equipment_1.EQUIPMENT_INFO[item.skyblockId] !== undefined;
145
+ }
146
+ static fromArray(items, options) {
147
+ return items
148
+ .filter((item) => FarmingEquipment.isValid(item))
149
+ .map((item) => new FarmingEquipment(item, options))
150
+ .sort((a, b) => b.fortune - a.fortune);
151
+ }
152
+ }
153
+ exports.FarmingEquipment = FarmingEquipment;
154
+ // For backwards compatibility
155
+ // eslint-disable-next-line @typescript-eslint/naming-convention
156
+ exports.LotusGear = FarmingEquipment;
157
+ //# sourceMappingURL=farmingequipment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"farmingequipment.js","sourceRoot":"","sources":["../../src/fortune/farmingequipment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { FarmingPetInfo, FarmingPetItemInfo, FarmingPetType, FarmingPets } from '../constants/pets';
2
+ import { Rarity } from '../constants/reforges';
3
+ import { EliteItemDto } from './item';
4
+ import { PlayerOptions } from '../player/player';
5
+ export declare function createFarmingPet(pet: FarmingPetType): FarmingPet;
6
+ export declare class FarmingPet {
7
+ readonly pet: FarmingPetType;
8
+ readonly type: FarmingPets;
9
+ readonly info: FarmingPetInfo;
10
+ readonly rarity: Rarity;
11
+ readonly level: number;
12
+ readonly item: FarmingPetItemInfo | undefined;
13
+ fortune: number;
14
+ breakdown: Record<string, number>;
15
+ private options?;
16
+ constructor(pet: FarmingPetType, options?: PlayerOptions);
17
+ setOptions(options: PlayerOptions): void;
18
+ getFortune(): number;
19
+ static isValid(pet: FarmingPetType): boolean | "" | undefined;
20
+ static fromArray(items: EliteItemDto[], options?: PlayerOptions): FarmingPet[];
21
+ }
22
+ export declare function getPetLevel(pet: FarmingPetType, max?: number): number;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPetLevel = exports.FarmingPet = exports.createFarmingPet = void 0;
4
+ const pets_1 = require("../constants/pets");
5
+ const reforges_1 = require("../constants/reforges");
6
+ const skills_1 = require("../constants/skills");
7
+ const itemstats_1 = require("../util/itemstats");
8
+ function createFarmingPet(pet) {
9
+ return new FarmingPet(pet);
10
+ }
11
+ exports.createFarmingPet = createFarmingPet;
12
+ class FarmingPet {
13
+ constructor(pet, options) {
14
+ this.options = options;
15
+ this.pet = pet;
16
+ this.info = pets_1.FARMING_PETS[pet.type];
17
+ if (!this.info) {
18
+ throw new Error(`Invalid farming pet type: ${pet.type}`);
19
+ }
20
+ this.type = pet.type;
21
+ this.rarity = (0, itemstats_1.getRarityFromLore)([pet.tier ?? '']) ?? reforges_1.Rarity.Common;
22
+ this.level = getPetLevel(pet);
23
+ this.item = pet.heldItem ? pets_1.FARMING_PET_ITEMS[pet.heldItem] : undefined;
24
+ this.fortune = this.getFortune();
25
+ }
26
+ setOptions(options) {
27
+ this.options = options;
28
+ this.fortune = this.getFortune();
29
+ }
30
+ getFortune() {
31
+ let fortune = 0;
32
+ const breakdown = {};
33
+ // Base stats
34
+ const stats = this.info.stats?.[reforges_1.Stat.FarmingFortune];
35
+ if (stats) {
36
+ fortune += stats;
37
+ breakdown['Base Stats'] = stats;
38
+ }
39
+ // Per level/ability stats
40
+ const perLevelStats = this.info.perLevelStats?.[reforges_1.Stat.FarmingFortune];
41
+ if (perLevelStats) {
42
+ const amount = perLevelStats.multiplier * this.level;
43
+ fortune += amount;
44
+ breakdown[perLevelStats.name] = amount;
45
+ }
46
+ // Per rarity fortune stats
47
+ const perRarityStats = this.info.perRarityLevelStats?.[this.rarity]?.[reforges_1.Stat.FarmingFortune];
48
+ if (perRarityStats) {
49
+ const amount = perRarityStats.multiplier * this.level;
50
+ fortune += amount;
51
+ breakdown[perRarityStats.name] = amount;
52
+ }
53
+ // Mooshroom Cow Perk
54
+ if (this.type === pets_1.FarmingPets.MooshroomCow && this.options?.strength) {
55
+ const strengthPer = 40 - this.level * 0.2;
56
+ const strength = this.options.strength;
57
+ const amount = Math.floor((strength / strengthPer) * 0.7);
58
+ fortune += amount;
59
+ breakdown['Farming Strength'] = amount;
60
+ }
61
+ // Pet item stats
62
+ if (this.item) {
63
+ const stats = this.item.stats?.[reforges_1.Stat.FarmingFortune];
64
+ const perLevelStats = this.item.perLevelStats;
65
+ if (stats) {
66
+ fortune += stats;
67
+ breakdown[this.item.name + ' Stats'] = stats;
68
+ }
69
+ if (perLevelStats && perLevelStats.skill === skills_1.Skill.Garden) {
70
+ const amount = (perLevelStats?.stats?.[reforges_1.Stat.FarmingFortune] ?? 0) * (this.options?.gardenLevel ?? 0);
71
+ fortune += amount;
72
+ breakdown[this.item.name] = amount;
73
+ }
74
+ }
75
+ this.breakdown = breakdown;
76
+ this.fortune = fortune;
77
+ return fortune;
78
+ }
79
+ static isValid(pet) {
80
+ return pet.type && pet.type in pets_1.FARMING_PETS;
81
+ }
82
+ static fromArray(items, options) {
83
+ return items
84
+ .filter((item) => FarmingPet.isValid(item))
85
+ .map((item) => new FarmingPet(item, options))
86
+ .sort((a, b) => b.fortune - a.fortune);
87
+ }
88
+ }
89
+ exports.FarmingPet = FarmingPet;
90
+ function getPetLevel(pet, max = 100) {
91
+ const levels = pets_1.PET_LEVELS;
92
+ const xp = pet.exp ?? 0;
93
+ const levelIndex = levels.findIndex((level) => level > xp);
94
+ if (levelIndex === -1 || levelIndex >= max) {
95
+ return max;
96
+ }
97
+ return levelIndex + 1;
98
+ }
99
+ exports.getPetLevel = getPetLevel;
100
+ //# sourceMappingURL=farmingpet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"farmingpet.js","sourceRoot":"","sources":["../../src/fortune/farmingpet.ts"],"names":[],"mappings":"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"}