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.
Files changed (134) hide show
  1. package/dist/classes/farmingaccessory.d.ts +10 -10
  2. package/dist/classes/farmingaccessory.js +50 -50
  3. package/dist/classes/farmingarmor.d.ts +41 -38
  4. package/dist/classes/farmingarmor.js +202 -207
  5. package/dist/classes/farmingequipment.d.ts +17 -17
  6. package/dist/classes/farmingequipment.js +105 -109
  7. package/dist/classes/farmingpet.d.ts +14 -14
  8. package/dist/classes/farmingpet.js +91 -90
  9. package/dist/classes/farmingtool.d.ts +34 -34
  10. package/dist/classes/farmingtool.js +192 -202
  11. package/dist/classes/item.d.ts +18 -18
  12. package/dist/classes/item.js +11 -11
  13. package/dist/classes/lotusgear.d.ts +17 -17
  14. package/dist/classes/lotusgear.js +103 -107
  15. package/dist/classes/player.d.ts +58 -55
  16. package/dist/classes/player.js +215 -228
  17. package/dist/classes/weightcalc.d.ts +56 -52
  18. package/dist/classes/weightcalc.js +185 -190
  19. package/dist/classes/weightcalc.test.js +102 -102
  20. package/dist/constants/accessories.d.ts +6 -6
  21. package/dist/constants/accessories.js +51 -51
  22. package/dist/constants/armor.d.ts +30 -30
  23. package/dist/constants/armor.js +699 -699
  24. package/dist/constants/enchants.d.ts +1 -1
  25. package/dist/constants/enchants.js +56 -56
  26. package/dist/constants/enchants.js.map +1 -1
  27. package/dist/constants/equipment.d.ts +20 -20
  28. package/dist/constants/equipment.js +116 -116
  29. package/dist/constants/gems.d.ts +2 -2
  30. package/dist/constants/gems.js +8 -8
  31. package/dist/constants/items.d.ts +8 -8
  32. package/dist/constants/items.js +14 -14
  33. package/dist/constants/lotus.d.ts +20 -20
  34. package/dist/constants/lotus.js +106 -106
  35. package/dist/constants/pets.d.ts +38 -38
  36. package/dist/constants/pets.js +253 -253
  37. package/dist/constants/reforges.d.ts +1 -1
  38. package/dist/constants/reforges.js +1 -1
  39. package/dist/constants/reforges.js.map +1 -1
  40. package/dist/constants/specific.d.ts +1 -1
  41. package/dist/constants/specific.js +6 -6
  42. package/dist/constants/stats.d.ts +1 -1
  43. package/dist/constants/tempfortune.js +14 -14
  44. package/dist/constants/tempfortune.js.map +1 -1
  45. package/dist/constants/tools.d.ts +7 -7
  46. package/dist/constants/tools.js +456 -456
  47. package/dist/constants/upgrades.d.ts +6 -6
  48. package/dist/crops/special.js +1 -1
  49. package/dist/crops/special.js.map +1 -1
  50. package/dist/fortune/farmingaccessory.d.ts +1 -1
  51. package/dist/fortune/farmingaccessory.js +1 -1
  52. package/dist/fortune/farmingaccessory.js.map +1 -1
  53. package/dist/fortune/farmingarmor.d.ts +4 -3
  54. package/dist/fortune/farmingarmor.js +28 -17
  55. package/dist/fortune/farmingarmor.js.map +1 -1
  56. package/dist/fortune/farmingequipment.d.ts +3 -3
  57. package/dist/fortune/farmingequipment.js +5 -5
  58. package/dist/fortune/farmingequipment.js.map +1 -1
  59. package/dist/fortune/farmingpet.d.ts +3 -3
  60. package/dist/fortune/farmingpet.js +2 -2
  61. package/dist/fortune/farmingpet.js.map +1 -1
  62. package/dist/fortune/farmingtool.d.ts +2 -2
  63. package/dist/fortune/farmingtool.js +4 -4
  64. package/dist/fortune/farmingtool.js.map +1 -1
  65. package/dist/fortune/upgradable.d.ts +35 -33
  66. package/dist/fortune/upgradable.js +1 -1
  67. package/dist/fortune/upgradeable.d.ts +6 -6
  68. package/dist/fortune/upgradeable.js +3 -3
  69. package/dist/fortune/upgradeable.js.map +1 -1
  70. package/dist/items/accessories.d.ts +1 -1
  71. package/dist/items/accessories.js +3 -3
  72. package/dist/items/accessories.js.map +1 -1
  73. package/dist/items/armor.d.ts +2 -2
  74. package/dist/items/armor.js +2 -2
  75. package/dist/items/armor.js.map +1 -1
  76. package/dist/items/equipment.js +8 -8
  77. package/dist/items/equipment.js.map +1 -1
  78. package/dist/items/pets.d.ts +2 -2
  79. package/dist/items/pets.js +15 -15
  80. package/dist/items/pets.js.map +1 -1
  81. package/dist/items/tools.d.ts +1 -1
  82. package/dist/items/tools.js +15 -15
  83. package/dist/items/tools.js.map +1 -1
  84. package/dist/player/index.js +1 -1
  85. package/dist/player/player.d.ts +1 -1
  86. package/dist/player/player.js +9 -9
  87. package/dist/player/player.js.map +1 -1
  88. package/dist/player/playeroptions.d.ts +10 -10
  89. package/dist/player.d.ts +21 -21
  90. package/dist/player.js +26 -26
  91. package/dist/ratecalc.d.ts +16 -14
  92. package/dist/ratecalc.js +148 -145
  93. package/dist/tool.js +3 -3
  94. package/dist/upgrades/progress.d.ts +2 -2
  95. package/dist/upgrades/progress.js +3 -3
  96. package/dist/upgrades/progress.js.map +1 -1
  97. package/dist/upgrades/sources/accessorysources.d.ts +2 -2
  98. package/dist/upgrades/sources/accessorysources.js +10 -8
  99. package/dist/upgrades/sources/accessorysources.js.map +1 -1
  100. package/dist/upgrades/sources/armorsetsources.d.ts +2 -2
  101. package/dist/upgrades/sources/armorsetsources.js +12 -11
  102. package/dist/upgrades/sources/armorsetsources.js.map +1 -1
  103. package/dist/upgrades/sources/cropsources.d.ts +3 -3
  104. package/dist/upgrades/sources/cropsources.js +22 -22
  105. package/dist/upgrades/sources/cropsources.js.map +1 -1
  106. package/dist/upgrades/sources/gearsources.d.ts +3 -3
  107. package/dist/upgrades/sources/gearsources.js +18 -19
  108. package/dist/upgrades/sources/gearsources.js.map +1 -1
  109. package/dist/upgrades/sources/generalsources.d.ts +2 -2
  110. package/dist/upgrades/sources/generalsources.js +18 -16
  111. package/dist/upgrades/sources/generalsources.js.map +1 -1
  112. package/dist/upgrades/sources/toolsources.d.ts +5 -5
  113. package/dist/upgrades/sources/toolsources.js +24 -23
  114. package/dist/upgrades/sources/toolsources.js.map +1 -1
  115. package/dist/upgrades/upgrades.d.ts +4 -4
  116. package/dist/upgrades/upgrades.js +19 -19
  117. package/dist/upgrades/upgrades.js.map +1 -1
  118. package/dist/util/enchants.d.ts +3 -3
  119. package/dist/util/enchants.js +1 -1
  120. package/dist/util/enchants.js.map +1 -1
  121. package/dist/util/garden.d.ts +2 -2
  122. package/dist/util/garden.js +6 -7
  123. package/dist/util/garden.js.map +1 -1
  124. package/dist/util/gems.d.ts +2 -2
  125. package/dist/util/gems.js +24 -14
  126. package/dist/util/gems.js.map +1 -1
  127. package/dist/util/pests.js +1 -1
  128. package/dist/util/pests.js.map +1 -1
  129. package/dist/util/pests.test.js +27 -25
  130. package/dist/util/ratecalc.js +2 -2
  131. package/dist/util/ratecalc.js.map +1 -1
  132. package/dist/util/skyblocktime.js +1 -1
  133. package/dist/util/skyblocktime.js.map +1 -1
  134. package/package.json +36 -48
@@ -3,22 +3,22 @@ import { Rarity, Reforge, ReforgeTier } from '../constants/reforges';
3
3
  import { EliteItemDto } from './item';
4
4
  import { PlayerOptions } from './player';
5
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[];
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
23
  }
24
24
  export declare const LotusGear: typeof FarmingEquipment;
@@ -1,116 +1,112 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
3
  exports.LotusGear = exports.FarmingEquipment = void 0;
4
- const lotus_1 = require("../constants/lotus");
5
- const reforges_1 = require("../constants/reforges");
6
- const itemstats_1 = require("../util/itemstats");
7
- const lore_1 = require("../util/lore");
4
+ const LOTUS_1 = require('../constants/lotus');
5
+ const REFORGES_1 = require('../constants/reforges');
6
+ const ITEMSTATS_1 = require('../util/itemstats');
7
+ const LORE_1 = require('../util/lore');
8
8
  class FarmingEquipment {
9
- item;
10
- info;
11
- get slot() {
12
- return this.info.slot;
13
- }
14
- constructor(item, options) {
15
- this.options = options;
16
- this.item = item;
17
- const info = lotus_1.EQUIPMENT_INFO[item.skyblockId];
18
- if (!info) {
19
- throw new Error(`Unknown equipment: ${item.name} (${item.skyblockId})`);
20
- }
21
- this.info = info;
22
- if (item.lore) {
23
- this.rarity = (0, itemstats_1.getRarityFromLore)(item.lore);
24
- }
25
- this.reforge = reforges_1.REFORGES[item.attributes?.modifier ?? ''] ?? undefined;
26
- this.reforgeStats = this.reforge?.tiers?.[this.rarity];
27
- this.recombobulated = this.item.attributes?.rarity_upgrades === '1';
28
- this.getFortune();
29
- }
30
- setOptions(options) {
31
- this.options = options;
32
- this.getFortune();
33
- }
34
- getFortune() {
35
- this.fortuneBreakdown = {};
36
- let sum = 0;
37
- // Base fortune
38
- const base = this.info.stats?.[reforges_1.Stat.FarmingFortune] ?? 0;
39
- if (base > 0) {
40
- this.fortuneBreakdown['Base Stats'] = base;
41
- sum += base;
42
- }
43
- // Reforge
44
- const reforge = this.reforgeStats?.stats?.[reforges_1.Stat.FarmingFortune] ?? 0;
45
- if (reforge > 0) {
46
- this.fortuneBreakdown['Reforge'] = reforge;
47
- sum += reforge;
48
- }
49
- // Green Thumb Visitors
50
- const visitors = this.getFortuneFromVisitors(base, reforge);
51
- if (visitors > 0) {
52
- this.fortuneBreakdown['Green Thumb'] = visitors;
53
- sum += visitors;
54
- }
55
- // Lotus Piece bonus
56
- if (this.info.family === 'LOTUS') {
57
- const pieceBonus = this.getPieceBonus();
58
- if (pieceBonus > 0) {
59
- this.fortuneBreakdown['Salesperson'] = pieceBonus;
60
- sum += pieceBonus;
61
- }
62
- }
63
- this.fortune = sum;
64
- return sum;
65
- }
66
- getFortuneFromVisitors(base, reforge) {
67
- if (!this.item.enchantments?.green_thumb)
68
- return 0;
69
- const regex = /§7Farming Fortune: §a\+(\d+.?\d+)/g;
70
- let found = 0;
71
- for (const line of this.item.lore ?? []) {
72
- const number = (0, lore_1.extractNumberFromLine)(line, regex) ?? 0;
73
- if (!number)
74
- continue;
75
- found = +number;
76
- break;
77
- }
78
- if (found === 0)
79
- return 0;
80
- return Math.max(0, found - base - reforge);
81
- }
82
- getPieceBonus() {
83
- const regex = /§7Piece Bonus: §6\+(\d+)☘/g;
84
- let found = 0;
85
- for (const line of (this.item.lore ?? []).reverse()) {
86
- const number = (0, lore_1.extractNumberFromLine)(line, regex) ?? 0;
87
- if (!number)
88
- continue;
89
- found = number;
90
- break;
91
- }
92
- return found;
93
- }
94
- static isValid(item) {
95
- return lotus_1.EQUIPMENT_INFO[item.skyblockId] !== undefined;
96
- }
97
- static fromArray(items, options) {
98
- const gear = items
99
- .filter((item) => FarmingEquipment.isValid(item))
100
- .map((item) => new FarmingEquipment(item, options))
101
- .sort((a, b) => b.fortune - a.fortune);
102
- // Get only the best piece of each slot
103
- const best = {};
104
- for (const piece of gear) {
105
- if (!best[piece.slot] || piece.fortune > (best[piece.slot]?.fortune ?? 0)) {
106
- best[piece.slot] = piece;
107
- }
108
- }
109
- return Object.values(best);
110
- }
9
+ item;
10
+ info;
11
+ get slot() {
12
+ return this.info.slot;
13
+ }
14
+ constructor(item, options) {
15
+ this.options = options;
16
+ this.item = item;
17
+ const INFO = LOTUS_1.EQUIPMENT_INFO[item.skyblockId];
18
+ if (!INFO) {
19
+ throw new Error(`Unknown equipment: ${item.name} (${item.skyblockId})`);
20
+ }
21
+ this.info = INFO;
22
+ if (item.lore) {
23
+ this.rarity = (0, ITEMSTATS_1.getRarityFromLore)(item.lore);
24
+ }
25
+ this.reforge = REFORGES_1.REFORGES[item.attributes?.modifier ?? ''] ?? undefined;
26
+ this.reforgeStats = this.reforge?.tiers?.[this.rarity];
27
+ this.recombobulated = this.item.attributes?.rarity_upgrades === '1';
28
+ this.getFortune();
29
+ }
30
+ setOptions(options) {
31
+ this.options = options;
32
+ this.getFortune();
33
+ }
34
+ getFortune() {
35
+ this.fortuneBreakdown = {};
36
+ let SUM = 0;
37
+ // Base fortune
38
+ const BASE = this.info.stats?.[REFORGES_1.Stat.FarmingFortune] ?? 0;
39
+ if (BASE > 0) {
40
+ this.fortuneBreakdown['Base Stats'] = BASE;
41
+ SUM += BASE;
42
+ }
43
+ // Reforge
44
+ const REFORGE = this.reforgeStats?.stats?.[REFORGES_1.Stat.FarmingFortune] ?? 0;
45
+ if (REFORGE > 0) {
46
+ this.fortuneBreakdown['Reforge'] = REFORGE;
47
+ SUM += REFORGE;
48
+ }
49
+ // Green Thumb Visitors
50
+ const VISITORS = this.getFortuneFromVisitors(BASE, REFORGE);
51
+ if (VISITORS > 0) {
52
+ this.fortuneBreakdown['Green Thumb'] = VISITORS;
53
+ SUM += VISITORS;
54
+ }
55
+ // Lotus Piece bonus
56
+ if (this.info.family === 'LOTUS') {
57
+ const PIECE_BONUS = this.getPieceBonus();
58
+ if (PIECE_BONUS > 0) {
59
+ this.fortuneBreakdown['Salesperson'] = PIECE_BONUS;
60
+ SUM += PIECE_BONUS;
61
+ }
62
+ }
63
+ this.fortune = SUM;
64
+ return SUM;
65
+ }
66
+ getFortuneFromVisitors(base, reforge) {
67
+ if (!this.item.enchantments?.green_thumb) return 0;
68
+ const REGEX = /§7Farming Fortune: §a\+(\d+.?\d+)/g;
69
+ let FOUND = 0;
70
+ for (const LINE of this.item.lore ?? []) {
71
+ const NUMBER = (0, LORE_1.extractNumberFromLine)(LINE, REGEX) ?? 0;
72
+ if (!NUMBER) continue;
73
+ FOUND = +NUMBER;
74
+ break;
75
+ }
76
+ if (FOUND === 0) return 0;
77
+ return Math.max(0, FOUND - base - reforge);
78
+ }
79
+ getPieceBonus() {
80
+ const REGEX = /§7Piece Bonus: §6\+(\d+)☘/g;
81
+ let FOUND = 0;
82
+ for (const LINE of (this.item.lore ?? []).reverse()) {
83
+ const NUMBER = (0, LORE_1.extractNumberFromLine)(LINE, REGEX) ?? 0;
84
+ if (!NUMBER) continue;
85
+ FOUND = NUMBER;
86
+ break;
87
+ }
88
+ return FOUND;
89
+ }
90
+ static isValid(item) {
91
+ return LOTUS_1.EQUIPMENT_INFO[item.skyblockId] !== undefined;
92
+ }
93
+ static fromArray(items, options) {
94
+ const GEAR = items
95
+ .filter((item) => FarmingEquipment.isValid(item))
96
+ .map((item) => new FarmingEquipment(item, options))
97
+ .sort((a, b) => b.fortune - a.fortune);
98
+ // Get only the best piece of each slot
99
+ const BEST = {};
100
+ for (const PIECE of GEAR) {
101
+ if (!BEST[PIECE.slot] || PIECE.fortune > (BEST[PIECE.slot]?.fortune ?? 0)) {
102
+ BEST[PIECE.slot] = PIECE;
103
+ }
104
+ }
105
+ return Object.values(BEST);
106
+ }
111
107
  }
112
108
  exports.FarmingEquipment = FarmingEquipment;
113
109
  // For backwards compatibility
114
110
  // eslint-disable-next-line @typescript-eslint/naming-convention
115
111
  exports.LotusGear = FarmingEquipment;
116
- //# sourceMappingURL=farmingequipment.js.map
112
+ //# sourceMappingURL=farmingequipment.js.map
@@ -4,19 +4,19 @@ import { EliteItemDto } from './item';
4
4
  import { PlayerOptions } from './player';
5
5
  export declare function createFarmingPet(pet: FarmingPetType): FarmingPet;
6
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[];
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
21
  }
22
22
  export declare function getPetLevel(pet: FarmingPetType, max?: number): number;
@@ -1,100 +1,101 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
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");
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
8
  function createFarmingPet(pet) {
9
- return new FarmingPet(pet);
9
+ return new FarmingPet(pet);
10
10
  }
11
11
  exports.createFarmingPet = createFarmingPet;
12
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
- }
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 PER_LEVEL_STATS = this.info.perLevelStats?.[REFORGES_1.Stat.FarmingFortune];
41
+ if (PER_LEVEL_STATS) {
42
+ const AMOUNT = PER_LEVEL_STATS.multiplier * this.level;
43
+ FORTUNE += AMOUNT;
44
+ BREAKDOWN[PER_LEVEL_STATS.name] = AMOUNT;
45
+ }
46
+ // Per rarity fortune stats
47
+ const PER_RARITY_STATS = this.info.perRarityLevelStats?.[this.rarity]?.[REFORGES_1.Stat.FarmingFortune];
48
+ if (PER_RARITY_STATS) {
49
+ const AMOUNT = PER_RARITY_STATS.multiplier * this.level;
50
+ FORTUNE += AMOUNT;
51
+ BREAKDOWN[PER_RARITY_STATS.name] = AMOUNT;
52
+ }
53
+ // Mooshroom Cow Perk
54
+ if (this.type === PETS_1.FarmingPets.MooshroomCow && this.options?.strength) {
55
+ const STRENGTH_PER = 40 - this.level * 0.2;
56
+ const STRENGTH = this.options.strength;
57
+ const AMOUNT = Math.floor((STRENGTH / STRENGTH_PER) * 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 =
71
+ (perLevelStats?.stats?.[REFORGES_1.Stat.FarmingFortune] ?? 0) * (this.options?.gardenLevel ?? 0);
72
+ FORTUNE += AMOUNT;
73
+ BREAKDOWN[this.item.name] = AMOUNT;
74
+ }
75
+ }
76
+ this.breakdown = BREAKDOWN;
77
+ this.fortune = FORTUNE;
78
+ return FORTUNE;
79
+ }
80
+ static isValid(pet) {
81
+ return pet.type && pet.type in PETS_1.FARMING_PETS;
82
+ }
83
+ static fromArray(items, options) {
84
+ return items
85
+ .filter((item) => FarmingPet.isValid(item))
86
+ .map((item) => new FarmingPet(item, options))
87
+ .sort((a, b) => b.fortune - a.fortune);
88
+ }
88
89
  }
89
90
  exports.FarmingPet = FarmingPet;
90
91
  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;
92
+ const LEVELS = PETS_1.PET_LEVELS;
93
+ const XP = pet.exp ?? 0;
94
+ const LEVEL_INDEX = LEVELS.findIndex((level) => level > XP);
95
+ if (LEVEL_INDEX === -1 || LEVEL_INDEX >= max) {
96
+ return max;
97
+ }
98
+ return LEVEL_INDEX + 1;
98
99
  }
99
100
  exports.getPetLevel = getPetLevel;
100
- //# sourceMappingURL=farmingpet.js.map
101
+ //# sourceMappingURL=farmingpet.js.map
@@ -4,38 +4,38 @@ import { FarmingToolInfo } from '../constants/tools';
4
4
  import { EliteItemDto } from './item';
5
5
  import { PlayerOptions } from './player';
6
6
  export declare class FarmingTool {
7
- item: EliteItemDto;
8
- crop: Crop;
9
- tool: FarmingToolInfo;
10
- itemname: string;
11
- private colorPrefix;
12
- get name(): string;
13
- rarity: Rarity;
14
- counter: number | undefined;
15
- cultivating: number;
16
- reforge: Reforge | undefined;
17
- reforgeStats: ReforgeTier | undefined;
18
- logCounter: number;
19
- collAnalysis: number;
20
- farmingForDummies: number;
21
- recombobulated: boolean;
22
- fortune: number;
23
- fortuneBreakdown: Record<string, number>;
24
- private options?;
25
- constructor(item: EliteItemDto, options?: PlayerOptions);
26
- setOptions(options: PlayerOptions): void;
27
- rebuildTool(item: EliteItemDto, options?: PlayerOptions): void;
28
- private setReforge;
29
- changeReforgeTo(reforgeId: string): void;
30
- changeFarmedCropsTo(crops: number): void;
31
- getFortune(): number;
32
- private getCounter;
33
- private getCultivating;
34
- getCultivatingLevel(): number;
35
- get farmed(): number;
36
- isUsed(): boolean;
37
- isMissingDedication(): boolean | 0 | null | undefined;
38
- private getFarmingAbilityFortune;
39
- static isValid(item: EliteItemDto | FarmingTool): boolean;
40
- static fromArray(items: EliteItemDto[], options?: PlayerOptions): FarmingTool[];
7
+ item: EliteItemDto;
8
+ crop: Crop;
9
+ tool: FarmingToolInfo;
10
+ itemname: string;
11
+ private colorPrefix;
12
+ get name(): string;
13
+ rarity: Rarity;
14
+ counter: number | undefined;
15
+ cultivating: number;
16
+ reforge: Reforge | undefined;
17
+ reforgeStats: ReforgeTier | undefined;
18
+ logCounter: number;
19
+ collAnalysis: number;
20
+ farmingForDummies: number;
21
+ recombobulated: boolean;
22
+ fortune: number;
23
+ fortuneBreakdown: Record<string, number>;
24
+ private options?;
25
+ constructor(item: EliteItemDto, options?: PlayerOptions);
26
+ setOptions(options: PlayerOptions): void;
27
+ rebuildTool(item: EliteItemDto, options?: PlayerOptions): void;
28
+ private setReforge;
29
+ changeReforgeTo(reforgeId: string): void;
30
+ changeFarmedCropsTo(crops: number): void;
31
+ getFortune(): number;
32
+ private getCounter;
33
+ private getCultivating;
34
+ getCultivatingLevel(): number;
35
+ get farmed(): number;
36
+ isUsed(): boolean;
37
+ isMissingDedication(): boolean | 0 | null | undefined;
38
+ private getFarmingAbilityFortune;
39
+ static isValid(item: EliteItemDto | FarmingTool): boolean;
40
+ static fromArray(items: EliteItemDto[], options?: PlayerOptions): FarmingTool[];
41
41
  }