farming-weight 0.7.1 → 0.7.2
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.
- package/dist/classes/farmingaccessory.d.ts +10 -10
- package/dist/classes/farmingaccessory.js +50 -50
- package/dist/classes/farmingarmor.d.ts +41 -38
- package/dist/classes/farmingarmor.js +202 -207
- package/dist/classes/farmingequipment.d.ts +17 -17
- package/dist/classes/farmingequipment.js +105 -109
- package/dist/classes/farmingpet.d.ts +14 -14
- package/dist/classes/farmingpet.js +91 -90
- package/dist/classes/farmingtool.d.ts +34 -34
- package/dist/classes/farmingtool.js +192 -202
- package/dist/classes/item.d.ts +18 -18
- package/dist/classes/item.js +11 -11
- package/dist/classes/lotusgear.d.ts +17 -17
- package/dist/classes/lotusgear.js +103 -107
- package/dist/classes/player.d.ts +58 -55
- package/dist/classes/player.js +215 -228
- package/dist/classes/weightcalc.d.ts +56 -52
- package/dist/classes/weightcalc.js +185 -190
- package/dist/classes/weightcalc.test.js +102 -102
- package/dist/constants/accessories.d.ts +6 -6
- package/dist/constants/accessories.js +51 -51
- package/dist/constants/armor.d.ts +30 -30
- package/dist/constants/armor.js +699 -699
- package/dist/constants/enchants.d.ts +1 -1
- package/dist/constants/enchants.js +56 -56
- package/dist/constants/enchants.js.map +1 -1
- package/dist/constants/equipment.d.ts +20 -20
- package/dist/constants/equipment.js +116 -116
- package/dist/constants/gems.d.ts +2 -2
- package/dist/constants/gems.js +8 -8
- package/dist/constants/items.d.ts +8 -8
- package/dist/constants/items.js +14 -14
- package/dist/constants/lotus.d.ts +20 -20
- package/dist/constants/lotus.js +106 -106
- package/dist/constants/pets.d.ts +38 -38
- package/dist/constants/pets.js +253 -253
- package/dist/constants/reforges.d.ts +1 -1
- package/dist/constants/reforges.js +1 -1
- package/dist/constants/reforges.js.map +1 -1
- package/dist/constants/specific.d.ts +1 -1
- package/dist/constants/specific.js +6 -6
- package/dist/constants/stats.d.ts +1 -1
- package/dist/constants/tempfortune.js +14 -14
- package/dist/constants/tempfortune.js.map +1 -1
- package/dist/constants/tools.d.ts +7 -7
- package/dist/constants/tools.js +456 -456
- package/dist/constants/upgrades.d.ts +6 -6
- package/dist/crops/special.js +1 -1
- package/dist/crops/special.js.map +1 -1
- package/dist/fortune/farmingaccessory.d.ts +1 -1
- package/dist/fortune/farmingaccessory.js +1 -1
- package/dist/fortune/farmingaccessory.js.map +1 -1
- package/dist/fortune/farmingarmor.d.ts +4 -3
- package/dist/fortune/farmingarmor.js +28 -17
- package/dist/fortune/farmingarmor.js.map +1 -1
- package/dist/fortune/farmingequipment.d.ts +3 -3
- package/dist/fortune/farmingequipment.js +5 -5
- package/dist/fortune/farmingequipment.js.map +1 -1
- package/dist/fortune/farmingpet.d.ts +3 -3
- package/dist/fortune/farmingpet.js +2 -2
- package/dist/fortune/farmingpet.js.map +1 -1
- package/dist/fortune/farmingtool.d.ts +2 -2
- package/dist/fortune/farmingtool.js +4 -4
- package/dist/fortune/farmingtool.js.map +1 -1
- package/dist/fortune/upgradable.d.ts +35 -33
- package/dist/fortune/upgradable.js +1 -1
- package/dist/fortune/upgradeable.d.ts +6 -6
- package/dist/fortune/upgradeable.js +3 -3
- package/dist/fortune/upgradeable.js.map +1 -1
- package/dist/items/accessories.d.ts +1 -1
- package/dist/items/accessories.js +3 -3
- package/dist/items/accessories.js.map +1 -1
- package/dist/items/armor.d.ts +2 -2
- package/dist/items/armor.js +2 -2
- package/dist/items/armor.js.map +1 -1
- package/dist/items/equipment.js +8 -8
- package/dist/items/equipment.js.map +1 -1
- package/dist/items/pets.d.ts +2 -2
- package/dist/items/pets.js +15 -15
- package/dist/items/pets.js.map +1 -1
- package/dist/items/tools.d.ts +1 -1
- package/dist/items/tools.js +15 -15
- package/dist/items/tools.js.map +1 -1
- package/dist/player/index.js +1 -1
- package/dist/player/player.d.ts +1 -1
- package/dist/player/player.js +9 -9
- package/dist/player/player.js.map +1 -1
- package/dist/player/playeroptions.d.ts +10 -10
- package/dist/player.d.ts +21 -21
- package/dist/player.js +26 -26
- package/dist/ratecalc.d.ts +16 -14
- package/dist/ratecalc.js +148 -145
- package/dist/tool.js +3 -3
- package/dist/upgrades/progress.d.ts +2 -2
- package/dist/upgrades/progress.js +3 -3
- package/dist/upgrades/progress.js.map +1 -1
- package/dist/upgrades/sources/accessorysources.d.ts +2 -2
- package/dist/upgrades/sources/accessorysources.js +10 -8
- package/dist/upgrades/sources/accessorysources.js.map +1 -1
- package/dist/upgrades/sources/armorsetsources.d.ts +2 -2
- package/dist/upgrades/sources/armorsetsources.js +12 -11
- package/dist/upgrades/sources/armorsetsources.js.map +1 -1
- package/dist/upgrades/sources/cropsources.d.ts +3 -3
- package/dist/upgrades/sources/cropsources.js +22 -22
- package/dist/upgrades/sources/cropsources.js.map +1 -1
- package/dist/upgrades/sources/gearsources.d.ts +3 -3
- package/dist/upgrades/sources/gearsources.js +18 -19
- package/dist/upgrades/sources/gearsources.js.map +1 -1
- package/dist/upgrades/sources/generalsources.d.ts +2 -2
- package/dist/upgrades/sources/generalsources.js +18 -16
- package/dist/upgrades/sources/generalsources.js.map +1 -1
- package/dist/upgrades/sources/toolsources.d.ts +5 -5
- package/dist/upgrades/sources/toolsources.js +24 -23
- package/dist/upgrades/sources/toolsources.js.map +1 -1
- package/dist/upgrades/upgrades.d.ts +4 -4
- package/dist/upgrades/upgrades.js +19 -19
- package/dist/upgrades/upgrades.js.map +1 -1
- package/dist/util/enchants.d.ts +3 -3
- package/dist/util/enchants.js +1 -1
- package/dist/util/enchants.js.map +1 -1
- package/dist/util/garden.d.ts +2 -2
- package/dist/util/garden.js +6 -7
- package/dist/util/garden.js.map +1 -1
- package/dist/util/gems.d.ts +2 -2
- package/dist/util/gems.js +24 -14
- package/dist/util/gems.js.map +1 -1
- package/dist/util/pests.js +1 -1
- package/dist/util/pests.js.map +1 -1
- package/dist/util/pests.test.js +27 -25
- package/dist/util/ratecalc.js +2 -2
- package/dist/util/ratecalc.js.map +1 -1
- package/dist/util/skyblocktime.js +1 -1
- package/dist/util/skyblocktime.js.map +1 -1
- package/package.json +36 -48
|
@@ -2,14 +2,14 @@ import { FarmingAccessoryInfo } from '../constants/accessories';
|
|
|
2
2
|
import { Rarity } from '../constants/reforges';
|
|
3
3
|
import { EliteItemDto } from './item';
|
|
4
4
|
export declare class FarmingAccessory {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
readonly item: EliteItemDto;
|
|
6
|
+
readonly info: FarmingAccessoryInfo;
|
|
7
|
+
readonly rarity: Rarity;
|
|
8
|
+
readonly recombobulated: boolean;
|
|
9
|
+
fortune: number;
|
|
10
|
+
fortuneBreakdown: Record<string, number>;
|
|
11
|
+
constructor(item: EliteItemDto);
|
|
12
|
+
private sumFortune;
|
|
13
|
+
static isValid(item: EliteItemDto): boolean;
|
|
14
|
+
static fromArray(items: EliteItemDto[]): FarmingAccessory[];
|
|
15
15
|
}
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports,
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
3
3
|
exports.FarmingAccessory = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
4
|
+
const ACCESSORIES_1 = require('../constants/accessories');
|
|
5
|
+
const REFORGES_1 = require('../constants/reforges');
|
|
6
|
+
const GEMS_1 = require('../util/gems');
|
|
7
|
+
const ITEMSTATS_1 = require('../util/itemstats');
|
|
8
8
|
class FarmingAccessory {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
9
|
+
item;
|
|
10
|
+
info;
|
|
11
|
+
constructor(item) {
|
|
12
|
+
this.item = item;
|
|
13
|
+
const INFO = ACCESSORIES_1.FARMING_ACCESSORIES_INFO[item.skyblockId];
|
|
14
|
+
if (!INFO) {
|
|
15
|
+
throw new Error(`Unknown lotus gear: ${item.name} (${item.skyblockId})`);
|
|
16
|
+
}
|
|
17
|
+
this.info = INFO;
|
|
18
|
+
if (item.lore) {
|
|
19
|
+
this.rarity = (0, ITEMSTATS_1.getRarityFromLore)(item.lore);
|
|
20
|
+
}
|
|
21
|
+
this.recombobulated = this.item.attributes?.rarity_upgrades === '1';
|
|
22
|
+
this.sumFortune();
|
|
23
|
+
}
|
|
24
|
+
sumFortune() {
|
|
25
|
+
this.fortuneBreakdown = {};
|
|
26
|
+
let SUM = 0;
|
|
27
|
+
// Base fortune
|
|
28
|
+
const BASE = this.info.stats?.[REFORGES_1.Stat.FarmingFortune] ?? 0;
|
|
29
|
+
if (BASE > 0) {
|
|
30
|
+
this.fortuneBreakdown['Base Stats'] = BASE;
|
|
31
|
+
SUM += BASE;
|
|
32
|
+
}
|
|
33
|
+
// Gems
|
|
34
|
+
let PERIDOT = (0, GEMS_1.getPeridotFortune)(this.rarity, this.item);
|
|
35
|
+
if (PERIDOT > 0) {
|
|
36
|
+
PERIDOT = +(PERIDOT / 2).toFixed(2); // Only half the fortune is applied on accessories
|
|
37
|
+
this.fortuneBreakdown['Peridot Gems'] = PERIDOT;
|
|
38
|
+
SUM += PERIDOT;
|
|
39
|
+
}
|
|
40
|
+
this.fortune = SUM;
|
|
41
|
+
return SUM;
|
|
42
|
+
}
|
|
43
|
+
static isValid(item) {
|
|
44
|
+
return ACCESSORIES_1.FARMING_ACCESSORIES_INFO[item.skyblockId] !== undefined;
|
|
45
|
+
}
|
|
46
|
+
static fromArray(items) {
|
|
47
|
+
return items
|
|
48
|
+
.filter((item) => FarmingAccessory.isValid(item))
|
|
49
|
+
.map((item) => new FarmingAccessory(item))
|
|
50
|
+
.sort((a, b) => b.fortune - a.fortune);
|
|
51
|
+
}
|
|
52
52
|
}
|
|
53
53
|
exports.FarmingAccessory = FarmingAccessory;
|
|
54
|
-
//# sourceMappingURL=farmingaccessory.js.map
|
|
54
|
+
//# sourceMappingURL=farmingaccessory.js.map
|
|
@@ -5,46 +5,49 @@ import { SpecialCrop } from '../constants/specialcrops';
|
|
|
5
5
|
import { EliteItemDto } from './item';
|
|
6
6
|
import { PlayerOptions } from './player';
|
|
7
7
|
export interface ActiveArmorSetBonus {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
count: number;
|
|
9
|
+
from: GearSlot[];
|
|
10
|
+
bonus: ArmorSetBonus;
|
|
11
|
+
special?: SpecialCrop[];
|
|
12
12
|
}
|
|
13
13
|
export declare class ArmorSet {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
14
|
+
helmet?: FarmingArmor;
|
|
15
|
+
chestplate?: FarmingArmor;
|
|
16
|
+
leggings?: FarmingArmor;
|
|
17
|
+
boots?: FarmingArmor;
|
|
18
|
+
get armor(): (FarmingArmor | null)[];
|
|
19
|
+
pieces: FarmingArmor[];
|
|
20
|
+
fortune: number;
|
|
21
|
+
setBonuses: ActiveArmorSetBonus[];
|
|
22
|
+
constructor(armor: FarmingArmor[]);
|
|
23
|
+
getPiece(slot: GearSlot): FarmingArmor | undefined;
|
|
24
|
+
setPiece(armor: FarmingArmor): void;
|
|
25
|
+
private recalculateFamilies;
|
|
26
|
+
getFortuneBreakdown(reloadFamilies?: boolean): Record<string, number>;
|
|
27
|
+
specialDropsCalc(
|
|
28
|
+
blocksBroken: number,
|
|
29
|
+
crop: Crop
|
|
30
|
+
): {
|
|
31
|
+
type: SpecialCrop;
|
|
32
|
+
amount: number;
|
|
33
|
+
npc: number;
|
|
34
|
+
} | null;
|
|
32
35
|
}
|
|
33
36
|
export declare class FarmingArmor {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
37
|
+
readonly item: EliteItemDto;
|
|
38
|
+
readonly armor: FarmingArmorInfo;
|
|
39
|
+
get slot(): GearSlot;
|
|
40
|
+
readonly rarity: Rarity;
|
|
41
|
+
readonly reforge: Reforge | undefined;
|
|
42
|
+
readonly reforgeStats: ReforgeTier | undefined;
|
|
43
|
+
readonly recombobulated: boolean;
|
|
44
|
+
get potential(): number;
|
|
45
|
+
fortune: number;
|
|
46
|
+
fortuneBreakdown: Record<string, number>;
|
|
47
|
+
private options?;
|
|
48
|
+
constructor(item: EliteItemDto, options?: PlayerOptions);
|
|
49
|
+
setOptions(options: PlayerOptions): void;
|
|
50
|
+
private sumFortune;
|
|
51
|
+
static isValid(item: EliteItemDto): boolean;
|
|
52
|
+
static fromArray(items: EliteItemDto[], options?: PlayerOptions): FarmingArmor[];
|
|
50
53
|
}
|
|
@@ -1,214 +1,209 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports,
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
3
3
|
exports.FarmingArmor = exports.ArmorSet = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
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
12
|
class ArmorSet {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
let count = 0;
|
|
119
|
-
for (const bonus of applicableBonuses) {
|
|
120
|
-
count += bonus.count;
|
|
121
|
-
}
|
|
122
|
-
return (0, special_1.calculateAverageSpecialCrops)(blocksBroken, crop, count);
|
|
123
|
-
}
|
|
13
|
+
get armor() {
|
|
14
|
+
return [this.helmet ?? null, this.chestplate ?? null, this.leggings ?? null, this.boots ?? null];
|
|
15
|
+
}
|
|
16
|
+
constructor(armor) {
|
|
17
|
+
armor.sort((a, b) => b.potential - a.potential);
|
|
18
|
+
this.pieces = armor;
|
|
19
|
+
this.helmet = armor.find((a) => a.slot === ARMOR_1.GearSlot.Helmet);
|
|
20
|
+
this.chestplate = armor.find((a) => a.slot === ARMOR_1.GearSlot.Chestplate);
|
|
21
|
+
this.leggings = armor.find((a) => a.slot === ARMOR_1.GearSlot.Leggings);
|
|
22
|
+
this.boots = armor.find((a) => a.slot === ARMOR_1.GearSlot.Boots);
|
|
23
|
+
this.recalculateFamilies();
|
|
24
|
+
}
|
|
25
|
+
getPiece(slot) {
|
|
26
|
+
switch (slot) {
|
|
27
|
+
case ARMOR_1.GearSlot.Helmet:
|
|
28
|
+
return this.helmet;
|
|
29
|
+
case ARMOR_1.GearSlot.Chestplate:
|
|
30
|
+
return this.chestplate;
|
|
31
|
+
case ARMOR_1.GearSlot.Leggings:
|
|
32
|
+
return this.leggings;
|
|
33
|
+
case ARMOR_1.GearSlot.Boots:
|
|
34
|
+
return this.boots;
|
|
35
|
+
default:
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
setPiece(armor) {
|
|
40
|
+
switch (armor.slot) {
|
|
41
|
+
case ARMOR_1.GearSlot.Helmet:
|
|
42
|
+
this.helmet = armor;
|
|
43
|
+
break;
|
|
44
|
+
case ARMOR_1.GearSlot.Chestplate:
|
|
45
|
+
this.chestplate = armor;
|
|
46
|
+
break;
|
|
47
|
+
case ARMOR_1.GearSlot.Leggings:
|
|
48
|
+
this.leggings = armor;
|
|
49
|
+
break;
|
|
50
|
+
case ARMOR_1.GearSlot.Boots:
|
|
51
|
+
this.boots = armor;
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.recalculateFamilies();
|
|
57
|
+
}
|
|
58
|
+
recalculateFamilies() {
|
|
59
|
+
const FAMILIES = new Map();
|
|
60
|
+
const ARMOR = this.armor.filter((a) => a);
|
|
61
|
+
this.setBonuses = [];
|
|
62
|
+
for (const PIECE of ARMOR) {
|
|
63
|
+
if (!PIECE.armor.family) continue;
|
|
64
|
+
FAMILIES.set(PIECE.armor.family, (FAMILIES.get(PIECE.armor.family) ?? 0) + 1);
|
|
65
|
+
}
|
|
66
|
+
for (const [FAMILY, COUNT] of FAMILIES.entries()) {
|
|
67
|
+
if (COUNT < 2) continue;
|
|
68
|
+
const BONUS = ARMOR_1.ARMOR_SET_BONUS[FAMILY];
|
|
69
|
+
if (!BONUS) continue;
|
|
70
|
+
this.setBonuses.push({
|
|
71
|
+
count: COUNT,
|
|
72
|
+
from: ARMOR.filter((a) => a.armor.family === FAMILY).map((a) => a.slot),
|
|
73
|
+
bonus: BONUS,
|
|
74
|
+
special: BONUS.special,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
this.getFortuneBreakdown();
|
|
78
|
+
}
|
|
79
|
+
getFortuneBreakdown(reloadFamilies = false) {
|
|
80
|
+
if (reloadFamilies) {
|
|
81
|
+
this.recalculateFamilies();
|
|
82
|
+
}
|
|
83
|
+
let SUM = 0;
|
|
84
|
+
const BREAKDOWN = {};
|
|
85
|
+
for (const PIECE of this.armor) {
|
|
86
|
+
if (!PIECE) continue;
|
|
87
|
+
const FORTUNE = PIECE.fortune;
|
|
88
|
+
if (FORTUNE > 0) {
|
|
89
|
+
BREAKDOWN[PIECE.item.name ?? ''] = FORTUNE;
|
|
90
|
+
SUM += FORTUNE;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
for (const { bonus, count } of this.setBonuses) {
|
|
94
|
+
if (count < 2 || count > 4) continue;
|
|
95
|
+
const FORTUNE = bonus.stats?.[count]?.[REFORGES_1.Stat.FarmingFortune] ?? 0;
|
|
96
|
+
if (FORTUNE > 0) {
|
|
97
|
+
BREAKDOWN[bonus.name] = FORTUNE;
|
|
98
|
+
SUM += FORTUNE;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
this.fortune = SUM;
|
|
102
|
+
return BREAKDOWN;
|
|
103
|
+
}
|
|
104
|
+
specialDropsCalc(blocksBroken, crop) {
|
|
105
|
+
const SPECIAL = SPECIALCROPS_1.MATCHING_SPECIAL_CROP[crop];
|
|
106
|
+
const APPLICABLE_BONUSES = this.setBonuses.filter((b) => b.special?.includes(SPECIAL));
|
|
107
|
+
if (APPLICABLE_BONUSES.length === 0) return null;
|
|
108
|
+
// Armor set counts need to be combined for special crops
|
|
109
|
+
// There will only be 2 applicable bonuses at most when Fermento armor plus
|
|
110
|
+
// a lower tier armor is used. Hypixel appeats to count these as the same
|
|
111
|
+
// set bonus instead of rolling them separately.
|
|
112
|
+
let COUNT = 0;
|
|
113
|
+
for (const BONUS of APPLICABLE_BONUSES) {
|
|
114
|
+
COUNT += BONUS.count;
|
|
115
|
+
}
|
|
116
|
+
return (0, SPECIAL_1.calculateAverageSpecialCrops)(blocksBroken, crop, COUNT);
|
|
117
|
+
}
|
|
124
118
|
}
|
|
125
119
|
exports.ArmorSet = ArmorSet;
|
|
126
120
|
class FarmingArmor {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
121
|
+
get slot() {
|
|
122
|
+
return this.armor.slot;
|
|
123
|
+
}
|
|
124
|
+
get potential() {
|
|
125
|
+
if (!this.armor.family) {
|
|
126
|
+
return this.fortune;
|
|
127
|
+
}
|
|
128
|
+
// Add the set bonus potential to the fortune
|
|
129
|
+
return (
|
|
130
|
+
this.fortune +
|
|
131
|
+
(ARMOR_1.ARMOR_SET_BONUS[this.armor.family]?.piecePotential?.[REFORGES_1.Stat.FarmingFortune] ?? 0)
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
constructor(item, options) {
|
|
135
|
+
this.options = options;
|
|
136
|
+
this.item = item;
|
|
137
|
+
const ARMOR = ARMOR_1.ARMOR_INFO[item.skyblockId];
|
|
138
|
+
if (!ARMOR) {
|
|
139
|
+
throw new Error(`Unknown farming armor: ${item.name} (${item.skyblockId})`);
|
|
140
|
+
}
|
|
141
|
+
this.armor = ARMOR;
|
|
142
|
+
if (item.lore) {
|
|
143
|
+
this.rarity = (0, ITEMSTATS_1.getRarityFromLore)(item.lore);
|
|
144
|
+
}
|
|
145
|
+
this.reforge = REFORGES_1.REFORGES[item.attributes?.modifier ?? ''] ?? undefined;
|
|
146
|
+
this.reforgeStats = this.reforge?.tiers?.[this.rarity];
|
|
147
|
+
this.recombobulated = this.item.attributes?.rarity_upgrades === '1';
|
|
148
|
+
this.sumFortune();
|
|
149
|
+
}
|
|
150
|
+
setOptions(options) {
|
|
151
|
+
this.options = options;
|
|
152
|
+
this.fortune = this.sumFortune();
|
|
153
|
+
}
|
|
154
|
+
sumFortune() {
|
|
155
|
+
this.fortuneBreakdown = {};
|
|
156
|
+
let SUM = 0;
|
|
157
|
+
// Base fortune
|
|
158
|
+
const BASE = this.armor.stats?.[REFORGES_1.Stat.FarmingFortune] ?? 0;
|
|
159
|
+
if (BASE > 0) {
|
|
160
|
+
this.fortuneBreakdown['Base Stats'] = BASE;
|
|
161
|
+
SUM += BASE;
|
|
162
|
+
}
|
|
163
|
+
// Per farming level stats like Rancher's Boots
|
|
164
|
+
if (this.armor.perLevelStats?.skill === SKILLS_1.Skill.Farming && this.options?.farmingLevel) {
|
|
165
|
+
const PER_LEVEL = this.armor.perLevelStats?.stats[REFORGES_1.Stat.FarmingFortune] ?? 0;
|
|
166
|
+
if (PER_LEVEL > 0) {
|
|
167
|
+
this.fortuneBreakdown['Farming Level'] = PER_LEVEL * this.options.farmingLevel;
|
|
168
|
+
SUM += PER_LEVEL * this.options.farmingLevel;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Reforge stats
|
|
172
|
+
const REFORGE = this.reforgeStats?.stats?.[REFORGES_1.Stat.FarmingFortune] ?? 0;
|
|
173
|
+
if (REFORGE > 0) {
|
|
174
|
+
this.fortuneBreakdown[this.reforge?.name ?? 'Reforge'] = REFORGE;
|
|
175
|
+
SUM += REFORGE;
|
|
176
|
+
}
|
|
177
|
+
// Gems
|
|
178
|
+
const PERIDOT = (0, GEMS_1.getPeridotFortune)(this.rarity, this.item);
|
|
179
|
+
if (PERIDOT > 0) {
|
|
180
|
+
this.fortuneBreakdown['Peridot Gems'] = PERIDOT;
|
|
181
|
+
SUM += PERIDOT;
|
|
182
|
+
}
|
|
183
|
+
// Enchantments
|
|
184
|
+
const ENCHANTMENTS = Object.entries(this.item.enchantments ?? {});
|
|
185
|
+
for (const [ENCHANT, LEVEL] of ENCHANTMENTS) {
|
|
186
|
+
if (!LEVEL) continue;
|
|
187
|
+
const ENCHANTMENT = ENCHANTS_1.FARMING_ARMOR_ENCHANTS[ENCHANT];
|
|
188
|
+
if (!ENCHANTMENT || !LEVEL) continue;
|
|
189
|
+
const FORTUNE = ENCHANTMENT.levels?.[LEVEL]?.[REFORGES_1.Stat.FarmingFortune] ?? 0;
|
|
190
|
+
if (FORTUNE > 0) {
|
|
191
|
+
this.fortuneBreakdown[ENCHANTMENT.name] = FORTUNE;
|
|
192
|
+
SUM += FORTUNE;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
this.fortune = SUM;
|
|
196
|
+
return SUM;
|
|
197
|
+
}
|
|
198
|
+
static isValid(item) {
|
|
199
|
+
return ARMOR_1.ARMOR_INFO[item.skyblockId] !== undefined;
|
|
200
|
+
}
|
|
201
|
+
static fromArray(items, options) {
|
|
202
|
+
return items
|
|
203
|
+
.filter((item) => FarmingArmor.isValid(item))
|
|
204
|
+
.map((item) => new FarmingArmor(item, options))
|
|
205
|
+
.sort((a, b) => b.fortune - a.fortune);
|
|
206
|
+
}
|
|
212
207
|
}
|
|
213
208
|
exports.FarmingArmor = FarmingArmor;
|
|
214
|
-
//# sourceMappingURL=farmingarmor.js.map
|
|
209
|
+
//# sourceMappingURL=farmingarmor.js.map
|