farming-weight 0.14.2 → 0.15.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 (318) hide show
  1. package/README.md +45 -18
  2. package/dist/constants/attributes.d.ts +12 -7
  3. package/dist/constants/attributes.js +17 -39
  4. package/dist/constants/attributes.js.map +1 -1
  5. package/dist/constants/chips.d.ts +1 -6
  6. package/dist/constants/chips.js +11 -15
  7. package/dist/constants/chips.js.map +1 -1
  8. package/dist/constants/crops.d.ts +28 -4
  9. package/dist/constants/crops.js +65 -2
  10. package/dist/constants/crops.js.map +1 -1
  11. package/dist/constants/enchants.d.ts +1 -1
  12. package/dist/constants/enchants.js +117 -68
  13. package/dist/constants/enchants.js.map +1 -1
  14. package/dist/constants/garden.js +152 -137
  15. package/dist/constants/garden.js.map +1 -1
  16. package/dist/constants/pests.d.ts +3 -2
  17. package/dist/constants/pests.js +5 -0
  18. package/dist/constants/pests.js.map +1 -1
  19. package/dist/constants/reforge-types.d.ts +57 -0
  20. package/dist/constants/reforge-types.js +40 -0
  21. package/dist/constants/reforge-types.js.map +1 -0
  22. package/dist/constants/reforges.d.ts +8 -55
  23. package/dist/constants/reforges.js +10 -635
  24. package/dist/constants/reforges.js.map +1 -1
  25. package/dist/constants/specific.js +11 -11
  26. package/dist/constants/specific.js.map +1 -1
  27. package/dist/constants/stats.d.ts +1 -0
  28. package/dist/constants/stats.js +2 -0
  29. package/dist/constants/stats.js.map +1 -1
  30. package/dist/constants/tempfortune.d.ts +5 -0
  31. package/dist/constants/tempfortune.js +36 -7
  32. package/dist/constants/tempfortune.js.map +1 -1
  33. package/dist/constants/upgrades.d.ts +36 -3
  34. package/dist/constants/upgrades.js +12 -0
  35. package/dist/constants/upgrades.js.map +1 -1
  36. package/dist/crops/special.d.ts +1 -1
  37. package/dist/crops/special.js.map +1 -1
  38. package/dist/effects/environment.d.ts +12 -0
  39. package/dist/effects/environment.js +33 -0
  40. package/dist/effects/environment.js.map +1 -0
  41. package/dist/effects/index.d.ts +4 -0
  42. package/dist/effects/index.js +5 -0
  43. package/dist/effects/index.js.map +1 -0
  44. package/dist/effects/matcher.d.ts +23 -0
  45. package/dist/effects/matcher.js +108 -0
  46. package/dist/effects/matcher.js.map +1 -0
  47. package/dist/effects/resolver.d.ts +63 -0
  48. package/dist/effects/resolver.js +239 -0
  49. package/dist/effects/resolver.js.map +1 -0
  50. package/dist/effects/summary.d.ts +5 -0
  51. package/dist/effects/summary.js +21 -0
  52. package/dist/effects/summary.js.map +1 -0
  53. package/dist/effects/types.d.ts +147 -0
  54. package/dist/effects/types.js +9 -0
  55. package/dist/effects/types.js.map +1 -0
  56. package/dist/features/composter/upgrades.js +5 -5
  57. package/dist/features/composter/upgrades.js.map +1 -1
  58. package/dist/fortune/farmingaccessory.d.ts +9 -1
  59. package/dist/fortune/farmingaccessory.js +24 -13
  60. package/dist/fortune/farmingaccessory.js.map +1 -1
  61. package/dist/fortune/farmingarmor.d.ts +21 -10
  62. package/dist/fortune/farmingarmor.js +89 -29
  63. package/dist/fortune/farmingarmor.js.map +1 -1
  64. package/dist/fortune/farmingequipment.d.ts +10 -1
  65. package/dist/fortune/farmingequipment.js +44 -11
  66. package/dist/fortune/farmingequipment.js.map +1 -1
  67. package/dist/fortune/farmingpet.d.ts +16 -0
  68. package/dist/fortune/farmingpet.js +207 -0
  69. package/dist/fortune/farmingpet.js.map +1 -1
  70. package/dist/fortune/farmingtool.d.ts +13 -6
  71. package/dist/fortune/farmingtool.js +60 -44
  72. package/dist/fortune/farmingtool.js.map +1 -1
  73. package/dist/fortune/lotuspiecebonus.d.ts +6 -0
  74. package/dist/fortune/lotuspiecebonus.js +20 -0
  75. package/dist/fortune/lotuspiecebonus.js.map +1 -0
  76. package/dist/fortune/upgradeable.d.ts +2 -4
  77. package/dist/fortune/upgradeablebase.d.ts +2 -4
  78. package/dist/fortune/upgradeablebase.js +4 -10
  79. package/dist/fortune/upgradeablebase.js.map +1 -1
  80. package/dist/index.d.ts +4 -0
  81. package/dist/index.js +4 -0
  82. package/dist/index.js.map +1 -1
  83. package/dist/items/accessories/base.d.ts +3 -0
  84. package/dist/items/accessories/base.js +4 -0
  85. package/dist/items/accessories/base.js.map +1 -0
  86. package/dist/items/accessories/fermento-family.d.ts +91 -0
  87. package/dist/items/accessories/fermento-family.js +125 -0
  88. package/dist/items/accessories/fermento-family.js.map +1 -0
  89. package/dist/items/accessories/freshly-baked.d.ts +80 -0
  90. package/dist/items/accessories/freshly-baked.js +119 -0
  91. package/dist/items/accessories/freshly-baked.js.map +1 -0
  92. package/dist/items/accessories/index.d.ts +25 -0
  93. package/dist/items/accessories/index.js +25 -0
  94. package/dist/items/accessories/index.js.map +1 -0
  95. package/dist/items/accessories/power-relic.d.ts +18 -0
  96. package/dist/items/accessories/power-relic.js +37 -0
  97. package/dist/items/accessories/power-relic.js.map +1 -0
  98. package/dist/items/accessories/special.d.ts +24 -0
  99. package/dist/items/accessories/special.js +41 -0
  100. package/dist/items/accessories/special.js.map +1 -0
  101. package/dist/items/accessories.d.ts +2 -3
  102. package/dist/items/accessories.js +1 -137
  103. package/dist/items/accessories.js.map +1 -1
  104. package/dist/items/armor/biohazard.js +4 -4
  105. package/dist/items/armor/biohazard.js.map +1 -1
  106. package/dist/items/armor/cropie.d.ts +4 -0
  107. package/dist/items/armor/cropie.js +10 -4
  108. package/dist/items/armor/cropie.js.map +1 -1
  109. package/dist/items/armor/farm.js +4 -4
  110. package/dist/items/armor/farm.js.map +1 -1
  111. package/dist/items/armor/fermento.d.ts +4 -0
  112. package/dist/items/armor/fermento.js +10 -4
  113. package/dist/items/armor/fermento.js.map +1 -1
  114. package/dist/items/armor/groups.d.ts +2 -0
  115. package/dist/items/armor/groups.js +17 -0
  116. package/dist/items/armor/groups.js.map +1 -0
  117. package/dist/items/armor/helianthus.js +4 -4
  118. package/dist/items/armor/helianthus.js.map +1 -1
  119. package/dist/items/armor/melon.d.ts +4 -0
  120. package/dist/items/armor/melon.js +10 -4
  121. package/dist/items/armor/melon.js.map +1 -1
  122. package/dist/items/armor/mushroom.js +4 -4
  123. package/dist/items/armor/mushroom.js.map +1 -1
  124. package/dist/items/armor/rabbit.js +4 -4
  125. package/dist/items/armor/rabbit.js.map +1 -1
  126. package/dist/items/armor/special.js +4 -4
  127. package/dist/items/armor/special.js.map +1 -1
  128. package/dist/items/armor/squash.d.ts +4 -0
  129. package/dist/items/armor/squash.js +10 -4
  130. package/dist/items/armor/squash.js.map +1 -1
  131. package/dist/items/equipment/blossom.js +4 -4
  132. package/dist/items/equipment/blossom.js.map +1 -1
  133. package/dist/items/equipment/lotus.js +4 -4
  134. package/dist/items/equipment/lotus.js.map +1 -1
  135. package/dist/items/equipment/pesthunter.js +4 -4
  136. package/dist/items/equipment/pesthunter.js.map +1 -1
  137. package/dist/items/equipment/special.js +2 -2
  138. package/dist/items/equipment/special.js.map +1 -1
  139. package/dist/items/gems/base.d.ts +19 -0
  140. package/dist/items/gems/base.js +60 -0
  141. package/dist/items/gems/base.js.map +1 -0
  142. package/dist/items/gems/index.d.ts +1 -0
  143. package/dist/items/gems/index.js +2 -0
  144. package/dist/items/gems/index.js.map +1 -0
  145. package/dist/items/pets/bee.d.ts +9 -0
  146. package/dist/items/pets/bee.js +33 -1
  147. package/dist/items/pets/bee.js.map +1 -1
  148. package/dist/items/pets/chicken.js +1 -1
  149. package/dist/items/pets/chicken.js.map +1 -1
  150. package/dist/items/pets/elephant.js +1 -1
  151. package/dist/items/pets/elephant.js.map +1 -1
  152. package/dist/items/pets/hedgehog.d.ts +5 -0
  153. package/dist/items/pets/hedgehog.js +6 -1
  154. package/dist/items/pets/hedgehog.js.map +1 -1
  155. package/dist/items/pets/mooshroom-cow.js +1 -1
  156. package/dist/items/pets/mooshroom-cow.js.map +1 -1
  157. package/dist/items/pets/mosquito.js +1 -1
  158. package/dist/items/pets/mosquito.js.map +1 -1
  159. package/dist/items/pets/pig.d.ts +5 -0
  160. package/dist/items/pets/pig.js +19 -14
  161. package/dist/items/pets/pig.js.map +1 -1
  162. package/dist/items/pets/rabbit.js +1 -1
  163. package/dist/items/pets/rabbit.js.map +1 -1
  164. package/dist/items/pets/rose-dragon.js +12 -14
  165. package/dist/items/pets/rose-dragon.js.map +1 -1
  166. package/dist/items/pets/slug.js +1 -1
  167. package/dist/items/pets/slug.js.map +1 -1
  168. package/dist/items/pets.d.ts +1 -1
  169. package/dist/items/pets.js +18 -4
  170. package/dist/items/pets.js.map +1 -1
  171. package/dist/items/reforges/base.d.ts +18 -0
  172. package/dist/items/reforges/base.js +54 -0
  173. package/dist/items/reforges/base.js.map +1 -0
  174. package/dist/items/reforges/blessed.d.ts +7 -0
  175. package/dist/items/reforges/blessed.js +90 -0
  176. package/dist/items/reforges/blessed.js.map +1 -0
  177. package/dist/items/reforges/blooming.d.ts +4 -0
  178. package/dist/items/reforges/blooming.js +43 -0
  179. package/dist/items/reforges/blooming.js.map +1 -0
  180. package/dist/items/reforges/bountiful.d.ts +4 -0
  181. package/dist/items/reforges/bountiful.js +63 -0
  182. package/dist/items/reforges/bountiful.js.map +1 -0
  183. package/dist/items/reforges/bustling.d.ts +4 -0
  184. package/dist/items/reforges/bustling.js +26 -0
  185. package/dist/items/reforges/bustling.js.map +1 -0
  186. package/dist/items/reforges/deep-fried.d.ts +7 -0
  187. package/dist/items/reforges/deep-fried.js +38 -0
  188. package/dist/items/reforges/deep-fried.js.map +1 -0
  189. package/dist/items/reforges/earthy.d.ts +4 -0
  190. package/dist/items/reforges/earthy.js +26 -0
  191. package/dist/items/reforges/earthy.js.map +1 -0
  192. package/dist/items/reforges/green-thumb.d.ts +4 -0
  193. package/dist/items/reforges/green-thumb.js +43 -0
  194. package/dist/items/reforges/green-thumb.js.map +1 -0
  195. package/dist/items/reforges/index.d.ts +16 -0
  196. package/dist/items/reforges/index.js +43 -0
  197. package/dist/items/reforges/index.js.map +1 -0
  198. package/dist/items/reforges/mantid.d.ts +4 -0
  199. package/dist/items/reforges/mantid.js +43 -0
  200. package/dist/items/reforges/mantid.js.map +1 -0
  201. package/dist/items/reforges/mossy.d.ts +4 -0
  202. package/dist/items/reforges/mossy.js +44 -0
  203. package/dist/items/reforges/mossy.js.map +1 -0
  204. package/dist/items/reforges/overpriced.d.ts +4 -0
  205. package/dist/items/reforges/overpriced.js +43 -0
  206. package/dist/items/reforges/overpriced.js.map +1 -0
  207. package/dist/items/reforges/robust.d.ts +4 -0
  208. package/dist/items/reforges/robust.js +22 -0
  209. package/dist/items/reforges/robust.js.map +1 -0
  210. package/dist/items/reforges/rooted.d.ts +4 -0
  211. package/dist/items/reforges/rooted.js +43 -0
  212. package/dist/items/reforges/rooted.js.map +1 -0
  213. package/dist/items/reforges/squeaky.d.ts +4 -0
  214. package/dist/items/reforges/squeaky.js +47 -0
  215. package/dist/items/reforges/squeaky.js.map +1 -0
  216. package/dist/items/sources/attributes.d.ts +119 -0
  217. package/dist/items/sources/attributes.js +285 -0
  218. package/dist/items/sources/attributes.js.map +1 -0
  219. package/dist/items/sources/base.d.ts +33 -0
  220. package/dist/items/sources/base.js +13 -0
  221. package/dist/items/sources/base.js.map +1 -0
  222. package/dist/items/sources/chips.d.ts +54 -0
  223. package/dist/items/sources/chips.js +100 -0
  224. package/dist/items/sources/chips.js.map +1 -0
  225. package/dist/items/sources/effects-util.d.ts +10 -0
  226. package/dist/items/sources/effects-util.js +35 -0
  227. package/dist/items/sources/effects-util.js.map +1 -0
  228. package/dist/items/sources/enchants.d.ts +28 -0
  229. package/dist/items/sources/enchants.js +87 -0
  230. package/dist/items/sources/enchants.js.map +1 -0
  231. package/dist/items/sources/gems.d.ts +9 -0
  232. package/dist/items/sources/gems.js +35 -0
  233. package/dist/items/sources/gems.js.map +1 -0
  234. package/dist/items/sources/index.d.ts +6 -0
  235. package/dist/items/sources/index.js +7 -0
  236. package/dist/items/sources/index.js.map +1 -0
  237. package/dist/items/sources/reforges.d.ts +8 -0
  238. package/dist/items/sources/reforges.js +10 -0
  239. package/dist/items/sources/reforges.js.map +1 -0
  240. package/dist/items/tools/cactus-knife.js +6 -6
  241. package/dist/items/tools/cactus-knife.js.map +1 -1
  242. package/dist/items/tools/cocoa-chopper.js +6 -6
  243. package/dist/items/tools/cocoa-chopper.js.map +1 -1
  244. package/dist/items/tools/dicers.js +6 -6
  245. package/dist/items/tools/dicers.js.map +1 -1
  246. package/dist/items/tools/fungi-cutter.js +6 -6
  247. package/dist/items/tools/fungi-cutter.js.map +1 -1
  248. package/dist/items/tools/mathematical-hoes.d.ts +5 -5
  249. package/dist/items/tools/mathematical-hoes.js +26 -26
  250. package/dist/items/tools/mathematical-hoes.js.map +1 -1
  251. package/dist/items/tools/special.js +2 -2
  252. package/dist/items/tools/special.js.map +1 -1
  253. package/dist/items/types/pets.d.ts +0 -2
  254. package/dist/player/player.d.ts +60 -7
  255. package/dist/player/player.js +318 -128
  256. package/dist/player/player.js.map +1 -1
  257. package/dist/player/playeroptions.d.ts +25 -1
  258. package/dist/player/playeroptions.js.map +1 -1
  259. package/dist/upgrades/enchantupgrades.js +22 -8
  260. package/dist/upgrades/enchantupgrades.js.map +1 -1
  261. package/dist/upgrades/getsourceprogress.js +7 -0
  262. package/dist/upgrades/getsourceprogress.js.map +1 -1
  263. package/dist/upgrades/groups.d.ts +3 -0
  264. package/dist/upgrades/groups.js +86 -0
  265. package/dist/upgrades/groups.js.map +1 -0
  266. package/dist/upgrades/itemcatalog.d.ts +3 -0
  267. package/dist/upgrades/itemcatalog.js +21 -0
  268. package/dist/upgrades/itemcatalog.js.map +1 -0
  269. package/dist/upgrades/itemregistry.d.ts +1 -2
  270. package/dist/upgrades/itemregistry.js +23 -3
  271. package/dist/upgrades/itemregistry.js.map +1 -1
  272. package/dist/upgrades/sources/accessorysources.js +1 -1
  273. package/dist/upgrades/sources/accessorysources.js.map +1 -1
  274. package/dist/upgrades/sources/armorsetsources.js +16 -16
  275. package/dist/upgrades/sources/armorsetsources.js.map +1 -1
  276. package/dist/upgrades/sources/cropsources.js +10 -5
  277. package/dist/upgrades/sources/cropsources.js.map +1 -1
  278. package/dist/upgrades/sources/dynamicfortunesources.d.ts +5 -2
  279. package/dist/upgrades/sources/effectsources.d.ts +4 -0
  280. package/dist/upgrades/sources/effectsources.js +60 -0
  281. package/dist/upgrades/sources/effectsources.js.map +1 -0
  282. package/dist/upgrades/sources/gearsources.js +33 -8
  283. package/dist/upgrades/sources/gearsources.js.map +1 -1
  284. package/dist/upgrades/sources/generalsources.d.ts +3 -2
  285. package/dist/upgrades/sources/generalsources.js +313 -22
  286. package/dist/upgrades/sources/generalsources.js.map +1 -1
  287. package/dist/upgrades/sources/toolsources.js +64 -84
  288. package/dist/upgrades/sources/toolsources.js.map +1 -1
  289. package/dist/upgrades/upgradekeys.d.ts +2 -0
  290. package/dist/upgrades/upgradekeys.js +5 -0
  291. package/dist/upgrades/upgradekeys.js.map +1 -0
  292. package/dist/upgrades/upgrades.d.ts +5 -7
  293. package/dist/upgrades/upgrades.js +142 -43
  294. package/dist/upgrades/upgrades.js.map +1 -1
  295. package/dist/upgrades/upgradeutils.d.ts +2 -4
  296. package/dist/upgrades/upgradeutils.js +26 -6
  297. package/dist/upgrades/upgradeutils.js.map +1 -1
  298. package/dist/util/bestiary.d.ts +10 -0
  299. package/dist/util/bestiary.js +41 -0
  300. package/dist/util/bestiary.js.map +1 -0
  301. package/dist/util/enchants.d.ts +6 -0
  302. package/dist/util/enchants.js +20 -5
  303. package/dist/util/enchants.js.map +1 -1
  304. package/dist/util/gems.js +4 -30
  305. package/dist/util/gems.js.map +1 -1
  306. package/dist/util/itemstats.d.ts +3 -0
  307. package/dist/util/itemstats.js +20 -2
  308. package/dist/util/itemstats.js.map +1 -1
  309. package/dist/util/ratecalc-effects.d.ts +64 -0
  310. package/dist/util/ratecalc-effects.js +252 -0
  311. package/dist/util/ratecalc-effects.js.map +1 -0
  312. package/dist/util/ratecalc.d.ts +0 -33
  313. package/dist/util/ratecalc.js +0 -187
  314. package/dist/util/ratecalc.js.map +1 -1
  315. package/dist/util/skyblocktime.d.ts +1 -0
  316. package/dist/util/skyblocktime.js +4 -0
  317. package/dist/util/skyblocktime.js.map +1 -1
  318. package/package.json +2 -1
@@ -3,16 +3,27 @@ export function getFortuneFromEnchant(level, enchant, options, crop) {
3
3
  return getStatFromEnchant(level, enchant, Stat.FarmingFortune, options, crop);
4
4
  }
5
5
  export function getStatFromEnchant(level, enchant, stat, options, crop) {
6
+ return evalStatFromEnchant(level, enchant, stat, options, crop, false);
7
+ }
8
+ /**
9
+ * Like {@link getStatFromEnchant}, but when no crop is provided, evaluates
10
+ * `cropComputed` contributions with `undefined` so non-crop-bound items (e.g.
11
+ * armor with Sunset) can resolve per-level deltas without a representative crop.
12
+ */
13
+ export function getOptimisticStatFromEnchant(level, enchant, stat, options, crop) {
14
+ return evalStatFromEnchant(level, enchant, stat, options, crop, true);
15
+ }
16
+ function evalStatFromEnchant(level, enchant, stat, options, crop, optimistic) {
6
17
  if (level <= 0)
7
18
  return 0;
8
19
  const tier = enchant.levels?.[level];
9
20
  if (!tier)
10
21
  return 0;
11
- let value = getStatFromTier(tier, stat, options, crop, enchant);
22
+ let value = getStatFromTier(tier, stat, options, crop, enchant, optimistic);
12
23
  if (enchant.computedLevels && options) {
13
24
  const computedTier = enchant.computedLevels(options)?.[level];
14
25
  if (computedTier) {
15
- value += getStatFromTier(computedTier, stat, options, crop, enchant);
26
+ value += getStatFromTier(computedTier, stat, options, crop, enchant, optimistic);
16
27
  }
17
28
  }
18
29
  return value;
@@ -27,16 +38,17 @@ export function getMaxStatFromEnchant(enchant, stat, options, crop) {
27
38
  const tier = enchant.levels?.[enchant.maxLevel];
28
39
  if (!tier)
29
40
  return 0;
30
- let value = getStatFromTier(tier, stat, options, crop, enchant);
41
+ const optimistic = !crop;
42
+ let value = getStatFromTier(tier, stat, options, crop, enchant, optimistic);
31
43
  if (enchant.computedLevels && options) {
32
44
  const computedTier = enchant.computedLevels(options)?.[enchant.maxLevel];
33
45
  if (computedTier) {
34
- value += getStatFromTier(computedTier, stat, options, crop, enchant);
46
+ value += getStatFromTier(computedTier, stat, options, crop, enchant, optimistic);
35
47
  }
36
48
  }
37
49
  return value;
38
50
  }
39
- function getStatFromTier(tier, stat, options, crop, enchant) {
51
+ function getStatFromTier(tier, stat, options, crop, enchant, optimistic = false) {
40
52
  if (crop && enchant.cropSpecific && enchant.cropSpecific !== crop) {
41
53
  return 0;
42
54
  }
@@ -53,6 +65,9 @@ function getStatFromTier(tier, stat, options, crop, enchant) {
53
65
  if (crop && (!enchant.cropSpecific || enchant.cropSpecific === crop)) {
54
66
  value += tier.cropComputed?.[s]?.(crop, options) ?? 0;
55
67
  }
68
+ else if (!crop && optimistic && !enchant.cropSpecific) {
69
+ value += tier.cropComputed?.[s]?.(undefined, options) ?? 0;
70
+ }
56
71
  return value;
57
72
  }
58
73
  //# sourceMappingURL=enchants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enchants.js","sourceRoot":"","sources":["../../src/util/enchants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enchants.js","sourceRoot":"","sources":["../../src/util/enchants.ts"],"names":[],"mappings":"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"}
package/dist/util/gems.js CHANGED
@@ -1,36 +1,12 @@
1
- import { GEMSTONES } from '../constants/gems.js';
2
1
  import { Stat } from '../constants/stats.js';
3
2
  import { GemRarity } from '../fortune/item.js';
3
+ import { GEMSTONE_SOURCES } from '../items/gems/index.js';
4
+ import { gemStat } from '../items/sources/gems.js';
4
5
  export function getPeridotFortune(rarity, item) {
5
6
  return getGemStat(item, Stat.FarmingFortune, rarity);
6
7
  }
7
8
  export function getGemStat(item, stat, rarity) {
8
- const gems = item.gems;
9
- if (!gems)
10
- return 0;
11
- let sum = 0;
12
- for (const [slot, gemRarity] of Object.entries(gems)) {
13
- if (!gemRarity)
14
- continue;
15
- // Slot format: GEM_TYPE_INDEX (e.g., RUBY_0, PERIDOT_1)
16
- const parts = slot.split('_');
17
- const gemType = parts[0];
18
- if (!gemType)
19
- continue;
20
- const gemstoneInfo = GEMSTONES[gemType];
21
- if (!gemstoneInfo)
22
- continue;
23
- if (gemstoneInfo.stat !== stat)
24
- continue;
25
- const rarityStats = gemstoneInfo.stats[gemRarity];
26
- if (!rarityStats)
27
- continue;
28
- const value = rarityStats[rarity];
29
- if (value) {
30
- sum += value;
31
- }
32
- }
33
- return sum;
9
+ return gemStat(item, stat, rarity);
34
10
  }
35
11
  export function getPeridotGems(item) {
36
12
  const gems = item.gems;
@@ -41,9 +17,7 @@ export function getPeridotGems(item) {
41
17
  .map(([, rarity]) => rarity);
42
18
  }
43
19
  export function getPeridotGemFortune(rarity, gem) {
44
- if (!gem)
45
- return 0;
46
- return GEMSTONES['PERIDOT']?.stats[gem]?.[rarity] ?? 0;
20
+ return GEMSTONE_SOURCES.PERIDOT?.getStat(rarity, gem) ?? 0;
47
21
  }
48
22
  export function getNextGemRarity(gem) {
49
23
  switch (gem) {
@@ -1 +1 @@
1
- {"version":3,"file":"gems.js","sourceRoot":"","sources":["../../src/util/gems.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gems.js","sourceRoot":"","sources":["../../src/util/gems.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAqB,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,IAAkB;IACnE,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAkB,EAAE,IAAU,EAAE,MAAc;IACxE,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAkB;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACzB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAA0B,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,GAAqB;IACzE,OAAO,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAqB;IACrD,QAAQ,GAAG,EAAE,CAAC;QACb,KAAK,IAAI;YACR,OAAO,SAAS,CAAC,KAAK,CAAC;QACxB,KAAK,SAAS,CAAC,KAAK;YACnB,OAAO,SAAS,CAAC,MAAM,CAAC;QACzB,KAAK,SAAS,CAAC,MAAM;YACpB,OAAO,SAAS,CAAC,IAAI,CAAC;QACvB,KAAK,SAAS,CAAC,IAAI;YAClB,OAAO,SAAS,CAAC,QAAQ,CAAC;QAC3B,KAAK,SAAS,CAAC,QAAQ;YACtB,OAAO,SAAS,CAAC,OAAO,CAAC;QAC1B,KAAK,SAAS,CAAC,OAAO;YACrB,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACxD,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,IAAI;YACR,OAAO,MAAM,CAAC;QACf,KAAK,SAAS,CAAC,KAAK;YACnB,OAAO,OAAO,CAAC;QAChB,KAAK,SAAS,CAAC,MAAM;YACpB,OAAO,QAAQ,CAAC;QACjB,KAAK,SAAS,CAAC,IAAI;YAClB,OAAO,MAAM,CAAC;QACf,KAAK,SAAS,CAAC,QAAQ;YACtB,OAAO,UAAU,CAAC;QACnB,KAAK,SAAS,CAAC,OAAO;YACrB,OAAO,SAAS,CAAC;IACnB,CAAC;AACF,CAAC"}
@@ -1,4 +1,7 @@
1
1
  import { Rarity } from '../constants/reforges.js';
2
+ import type { EliteItemDto } from '../fortune/item.js';
3
+ export declare function getRarityFromItem(item: Pick<EliteItemDto, 'attributes' | 'lore'>, fallback?: Rarity): Rarity;
4
+ export declare function getRarityFromAttribute(rarity?: string | null): Rarity | undefined;
2
5
  export declare function getRarityFromLore(lore: string[]): Rarity;
3
6
  export declare function nextRarity(rarity: Rarity): Rarity;
4
7
  export declare function previousRarity(rarity: Rarity): Rarity;
@@ -1,4 +1,22 @@
1
1
  import { Rarity } from '../constants/reforges.js';
2
+ const RARITY_BY_ATTRIBUTE = Object.fromEntries(Object.values(Rarity).flatMap((rarity) => [
3
+ [rarity.toUpperCase(), rarity],
4
+ [rarity.toUpperCase().replaceAll(' ', '_'), rarity],
5
+ ]));
6
+ export function getRarityFromItem(item, fallback) {
7
+ const attributeRarity = getRarityFromAttribute(item.attributes?.rarity);
8
+ if (attributeRarity)
9
+ return attributeRarity;
10
+ if (item.lore) {
11
+ return getRarityFromLore(item.lore);
12
+ }
13
+ return fallback ?? Rarity.Common;
14
+ }
15
+ export function getRarityFromAttribute(rarity) {
16
+ if (!rarity)
17
+ return undefined;
18
+ return RARITY_BY_ATTRIBUTE[rarity.toUpperCase()] ?? undefined;
19
+ }
2
20
  export function getRarityFromLore(lore) {
3
21
  const line = lore.at(-1);
4
22
  const found = getRarity(line ?? '', null);
@@ -29,10 +47,10 @@ function getRarity(line, fallback) {
29
47
  return Rarity.Mythic;
30
48
  case line.includes('DIVINE'):
31
49
  return Rarity.Divine;
32
- case line.includes('SPECIAL'):
33
- return Rarity.Special;
34
50
  case line.includes('VERY SPECIAL'):
35
51
  return Rarity.VerySpecial;
52
+ case line.includes('SPECIAL'):
53
+ return Rarity.Special;
36
54
  case line.includes('ULTIMATE'):
37
55
  return Rarity.Ultimate;
38
56
  case line.includes('ADMIN'):
@@ -1 +1 @@
1
- {"version":3,"file":"itemstats.js","sourceRoot":"","sources":["../../src/util/itemstats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"itemstats.js","sourceRoot":"","sources":["../../src/util/itemstats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { Crop } from '../constants/crops.js';
2
+ import type { AppliedEffect, Effect, EffectEnvironment, EffectsBreakdown } from '../effects/types.js';
3
+ import type { FarmingPet } from '../fortune/farmingpet.js';
4
+ /**
5
+ * New effect-driven detailed-drops calculator.
6
+ *
7
+ * Replaces the legacy `ratesModifier` plumbing for shards/chips/reforges and
8
+ * the `overbloom` / `overbloomBreakdown` inputs with declarative `Effect[]`
9
+ * resolution. Built-in crop drops still flow through the same baseline math
10
+ * (drops, NPC coins, special-crop pre-bonus) - the difference is everything
11
+ * scoped: `add-rare-pct` (Overbloom), `mul-rare` (Cropeetle, armor sets),
12
+ * `mul-drop` (Deep Fried), and `add-drop` (Warty Bug Shard) are all resolved
13
+ * through the effect pipeline with proper per-drop scoping.
14
+ *
15
+ * Bountiful and Mooshroom remain bespoke - they're coin-side computations,
16
+ * not scoped multipliers, and the architecture plan keeps them out of v1.
17
+ */
18
+ export interface CalculateDetailedDropsFromEffectsOptions {
19
+ crop: Crop;
20
+ blocksBroken: number;
21
+ farmingFortune?: number;
22
+ dicerLevel?: 1 | 2 | 3;
23
+ armorPieces?: 0 | 1 | 2 | 3 | 4;
24
+ bountiful?: boolean;
25
+ mooshroom?: boolean;
26
+ maxTool?: boolean;
27
+ pet?: FarmingPet;
28
+ chips?: Record<string, number | null | undefined>;
29
+ toolReforge?: string;
30
+ /** Effects collected via `FarmingPlayer.collectEffects(env)`. */
31
+ effects: readonly Effect[];
32
+ /** Environment for the calc. Built by `buildEffectEnvironment(player, crop)`. */
33
+ env: EffectEnvironment;
34
+ }
35
+ /**
36
+ * Output of {@link calculateDetailedDropsFromEffects}.
37
+ *
38
+ * Compared to the legacy `DetailedDropsResult`, the `rareItemBonus`/
39
+ * `rareItemBonusBreakdown` pair is replaced by:
40
+ * - `appliedEffects`: per-item `AppliedEffect[]` describing every effect that
41
+ * touched the drop (phase, op, source, resolved amount).
42
+ * - `effectsBreakdown`: per-source totals across all drops, surfaced in the
43
+ * UI as the new "Overbloom (and friends)" breakdown.
44
+ */
45
+ export interface DetailedDropsFromEffectsResult {
46
+ npcPrice: number;
47
+ collection: number;
48
+ npcCoins: number;
49
+ fortune: number;
50
+ blocksBroken: number;
51
+ coinSources: Record<string, number>;
52
+ otherCollection: Record<string, number>;
53
+ items: Record<string, number>;
54
+ currencies: Record<string, number>;
55
+ rngItems?: Record<string, number>;
56
+ specialCropBonus: number;
57
+ specialCropBonusBreakdown: Record<string, number>;
58
+ appliedEffects: Record<string, AppliedEffect[]>;
59
+ effectsBreakdown: EffectsBreakdown;
60
+ }
61
+ /**
62
+ * Run the new effect-driven detailed-drops calculation.
63
+ */
64
+ export declare function calculateDetailedDropsFromEffects(options: CalculateDetailedDropsFromEffectsOptions): DetailedDropsFromEffectsResult;
@@ -0,0 +1,252 @@
1
+ import { getChipInputLevel, getChipLevel, getChipRarity, normalizeChipLevels } from '../constants/chips.js';
2
+ import { CROP_INFO, Crop, MAX_CROP_FORTUNE } from '../constants/crops.js';
3
+ import { Rarity, REFORGES } from '../constants/reforges.js';
4
+ import { MATCHING_SPECIAL_CROP, SPECIAL_CROP_INFO } from '../constants/specialcrops.js';
5
+ import { Stat } from '../constants/stats.js';
6
+ import { calculateAverageSpecialCrops } from '../crops/special.js';
7
+ import { produceAddedDrops, resolveDropEffects } from '../effects/resolver.js';
8
+ import { BEST_FARMING_TOOLS } from '../items/tools.js';
9
+ const DEFAULT_RNG_TAGS = ['overbloom', 'rare-crop'];
10
+ function tagSet(tags) {
11
+ return new Set(tags ?? DEFAULT_RNG_TAGS);
12
+ }
13
+ function getEffectiveFortune(opts) {
14
+ const base = opts.farmingFortune ?? MAX_CROP_FORTUNE[opts.crop] ?? 0;
15
+ let fortune = base + 100;
16
+ if (!opts.bountiful && !opts.farmingFortune) {
17
+ const maxRarity = BEST_FARMING_TOOLS[opts.crop]?.maxRarity ?? Rarity.Mythic;
18
+ const bountifulFortune = REFORGES.bountiful?.tiers[maxRarity]?.stats?.[Stat.FarmingFortune] ?? 0;
19
+ const blessedFortune = REFORGES.blessed?.tiers[maxRarity]?.stats?.[Stat.FarmingFortune] ?? 0;
20
+ fortune += blessedFortune - bountifulFortune;
21
+ }
22
+ return fortune;
23
+ }
24
+ function getCropInfo(crop) {
25
+ return CROP_INFO[crop] ?? {};
26
+ }
27
+ function buildBaseRngCandidates(cropInfo, env, blocksBroken) {
28
+ const out = [];
29
+ const inSeason = env.harvestFeast && env.inSeason;
30
+ for (const drop of cropInfo.rng ?? []) {
31
+ if (drop.only === 'harvestFeast' && !inSeason)
32
+ continue;
33
+ const tags = tagSet(drop.tags);
34
+ const kind = drop.dropKind ?? 'rng';
35
+ for (const [item, count] of Object.entries(drop.drops)) {
36
+ out.push({
37
+ itemId: item,
38
+ output: drop.output ?? 'rng',
39
+ baseAmount: drop.chance * blocksBroken * count,
40
+ tags,
41
+ dropKind: kind,
42
+ });
43
+ }
44
+ }
45
+ return out;
46
+ }
47
+ function appendAddedDropCandidates(candidates, effects, env, blocksBroken) {
48
+ for (const { source, payload } of produceAddedDrops(effects, env)) {
49
+ const baseAmount = payload.baseAmount !== undefined
50
+ ? payload.baseAmount * blocksBroken
51
+ : payload.chance !== undefined
52
+ ? payload.chance * blocksBroken
53
+ : 0;
54
+ if (baseAmount <= 0)
55
+ continue;
56
+ candidates.push({
57
+ itemId: payload.itemId,
58
+ output: payload.output ?? 'rng',
59
+ baseAmount,
60
+ tags: tagSet(payload.tags),
61
+ dropKind: payload.dropKind ?? 'rare',
62
+ fromAddDrop: true,
63
+ source,
64
+ });
65
+ }
66
+ }
67
+ function aggregateEffectsBreakdown(target, applied) {
68
+ for (const entry of applied) {
69
+ // Only `add-rare-pct` contributes additively to the breakdown
70
+ if (entry.op !== 'add-rare-pct')
71
+ continue;
72
+ const prev = target[entry.source] ?? 0;
73
+ if (entry.amount > prev)
74
+ target[entry.source] = entry.amount;
75
+ }
76
+ }
77
+ /**
78
+ * Run the new effect-driven detailed-drops calculation.
79
+ */
80
+ export function calculateDetailedDropsFromEffects(options) {
81
+ const calcOptions = {
82
+ ...options,
83
+ chips: normalizeChipLevels(options.chips ?? {}),
84
+ };
85
+ const { crop, blocksBroken, env, effects } = calcOptions;
86
+ const result = {
87
+ npcPrice: 0,
88
+ collection: 0,
89
+ npcCoins: 0,
90
+ fortune: 0,
91
+ blocksBroken,
92
+ coinSources: {},
93
+ otherCollection: {},
94
+ items: {},
95
+ currencies: {},
96
+ specialCropBonus: 0,
97
+ specialCropBonusBreakdown: {},
98
+ appliedEffects: {},
99
+ effectsBreakdown: {},
100
+ };
101
+ result.fortune = calcOptions.farmingFortune ?? MAX_CROP_FORTUNE[crop] ?? 0;
102
+ const fortune = getEffectiveFortune(calcOptions);
103
+ if (fortune <= 0 || blocksBroken < 0)
104
+ return result;
105
+ const cropInfo = getCropInfo(crop);
106
+ const { drops, npc, breaks = 1, replenish = false } = cropInfo;
107
+ result.npcPrice = npc;
108
+ if (!drops)
109
+ return result;
110
+ const baseDrops = blocksBroken * drops * (fortune * 0.01);
111
+ result.otherCollection['Normal'] = Math.round(baseDrops);
112
+ if (calcOptions.bountiful) {
113
+ result.coinSources['Bountiful'] = Math.round(baseDrops * 0.2);
114
+ }
115
+ if (calcOptions.mooshroom) {
116
+ const mushroomDrops = Math.round(blocksBroken * breaks);
117
+ result.coinSources['Mooshroom'] = mushroomDrops * CROP_INFO[Crop.Mushroom].npc;
118
+ result.otherCollection['Mushroom'] = mushroomDrops;
119
+ result.items[Crop.Mushroom] = mushroomDrops;
120
+ }
121
+ const armorPieces = Math.min(Math.max(calcOptions.armorPieces ?? 4, 0), 4);
122
+ const baseSpecialCrops = calculateAverageSpecialCrops(blocksBroken, crop, armorPieces, 1);
123
+ result.otherCollection[baseSpecialCrops.type] = baseSpecialCrops.amount;
124
+ result.items[baseSpecialCrops.id] = baseSpecialCrops.amount;
125
+ result.coinSources[baseSpecialCrops.type] = baseSpecialCrops.npc;
126
+ if (replenish) {
127
+ result.coinSources['Collection'] = Math.round((baseDrops - blocksBroken * breaks) * npc);
128
+ result.otherCollection['Replenish'] = -Math.round(blocksBroken * breaks);
129
+ result.collection = Math.round(baseDrops);
130
+ result.items[crop] = Math.round(baseDrops - blocksBroken * breaks);
131
+ }
132
+ else {
133
+ result.coinSources['Collection'] = Math.round(baseDrops * npc);
134
+ result.collection = Math.round(baseDrops);
135
+ result.items[crop] = Math.round(baseDrops);
136
+ }
137
+ if (crop === Crop.Wheat) {
138
+ const seedsResult = calculateDetailedDropsFromEffects({
139
+ ...calcOptions,
140
+ crop: Crop.Seeds,
141
+ maxTool: false,
142
+ mooshroom: false,
143
+ env: { ...env, crop: Crop.Seeds },
144
+ });
145
+ const seedCollection = seedsResult.collection - blocksBroken;
146
+ result.otherCollection['Seeds'] = seedCollection;
147
+ result.items[Crop.Seeds] = seedCollection;
148
+ result.coinSources['Seeds'] = seedCollection * seedsResult.npcPrice;
149
+ if (calcOptions.bountiful) {
150
+ result.coinSources['Bountiful (Seeds)'] = seedsResult.coinSources['Bountiful'] ?? 0;
151
+ }
152
+ }
153
+ if (calcOptions.maxTool) {
154
+ let multiplier = 1;
155
+ if (calcOptions.chips) {
156
+ const level = getChipLevel(getChipInputLevel(calcOptions.chips, 'mechamind'));
157
+ if (level > 0) {
158
+ const rarity = getChipRarity(level);
159
+ let perLevel = 0.015;
160
+ if (rarity === Rarity.Epic)
161
+ perLevel = 0.02;
162
+ else if (rarity === Rarity.Legendary)
163
+ perLevel = 0.025;
164
+ multiplier = 1 + level * perLevel;
165
+ }
166
+ }
167
+ const toolXpFactor = cropInfo.toolXpFactor ?? 1;
168
+ const capsules = Math.floor(((result.collection + (result.otherCollection['Seeds'] ?? 0)) * multiplier) / toolXpFactor / 200_000);
169
+ if (capsules > 0) {
170
+ result.items['TOOL_EXP_CAPSULE'] = capsules;
171
+ result.coinSources['Tool Exp Capsule'] = capsules * 100_000;
172
+ result.otherCollection['Tool Exp Capsule'] = capsules;
173
+ }
174
+ }
175
+ // Build candidate RNG drops: built-in `rng:` entries + `add-drop` payloads.
176
+ const candidates = buildBaseRngCandidates(cropInfo, env, blocksBroken);
177
+ appendAddedDropCandidates(candidates, effects, env, blocksBroken);
178
+ for (const candidate of candidates) {
179
+ const ctx = {
180
+ env,
181
+ crop,
182
+ dropKind: candidate.dropKind,
183
+ itemId: candidate.itemId,
184
+ tags: candidate.tags,
185
+ fromAddDrop: candidate.fromAddDrop,
186
+ };
187
+ const { addRarePct, mulRare, mulDrop, applied } = resolveDropEffects(effects, ctx);
188
+ const rareMultiplier = (1 + addRarePct / 100) * mulRare * mulDrop;
189
+ const finalAmount = candidate.baseAmount * rareMultiplier;
190
+ if (finalAmount <= 0)
191
+ continue;
192
+ if (candidate.output === 'collection') {
193
+ result.collection += finalAmount;
194
+ result.items[candidate.itemId] = (result.items[candidate.itemId] ?? 0) + finalAmount;
195
+ result.otherCollection[candidate.source ?? candidate.itemId] =
196
+ (result.otherCollection[candidate.source ?? candidate.itemId] ?? 0) + finalAmount;
197
+ const itemNpc = CROP_INFO[candidate.itemId]?.npc ?? 0;
198
+ if (itemNpc > 0) {
199
+ result.coinSources[candidate.source ?? candidate.itemId] =
200
+ (result.coinSources[candidate.source ?? candidate.itemId] ?? 0) + finalAmount * itemNpc;
201
+ }
202
+ if (applied.length > 0) {
203
+ result.appliedEffects[candidate.itemId] = (result.appliedEffects[candidate.itemId] ?? []).concat(applied);
204
+ aggregateEffectsBreakdown(result.effectsBreakdown, applied);
205
+ }
206
+ continue;
207
+ }
208
+ if (candidate.output === 'currency') {
209
+ result.currencies[candidate.itemId] = (result.currencies[candidate.itemId] ?? 0) + finalAmount;
210
+ if (applied.length > 0) {
211
+ result.appliedEffects[candidate.itemId] = (result.appliedEffects[candidate.itemId] ?? []).concat(applied);
212
+ aggregateEffectsBreakdown(result.effectsBreakdown, applied);
213
+ }
214
+ continue;
215
+ }
216
+ result.rngItems ??= {};
217
+ result.rngItems[candidate.itemId] = (result.rngItems[candidate.itemId] ?? 0) + finalAmount;
218
+ if (applied.length > 0) {
219
+ result.appliedEffects[candidate.itemId] = (result.appliedEffects[candidate.itemId] ?? []).concat(applied);
220
+ aggregateEffectsBreakdown(result.effectsBreakdown, applied);
221
+ }
222
+ }
223
+ // Special crops: re-scale by the multiplicative bonus produced by effects whose
224
+ // scope matches a special-crop drop. We pick a representative special crop drop
225
+ // for this `crop` (the matching SpecialCrop tier) and feed it into the resolver.
226
+ const specialCrop = MATCHING_SPECIAL_CROP[crop];
227
+ if (specialCrop) {
228
+ const specialCtx = {
229
+ env,
230
+ crop,
231
+ dropKind: 'special-crop',
232
+ itemId: SPECIAL_CROP_INFO[specialCrop].id,
233
+ specialCropType: specialCrop,
234
+ tags: new Set(['overbloom', 'rare-crop', 'special-crop']),
235
+ };
236
+ const { addRarePct, mulRare, mulDrop, applied } = resolveDropEffects(effects, specialCtx);
237
+ const totalMultiplier = (1 + addRarePct / 100) * mulRare * mulDrop;
238
+ if (totalMultiplier !== 1 && totalMultiplier > 0) {
239
+ const newAmount = calculateAverageSpecialCrops(blocksBroken, crop, armorPieces, totalMultiplier);
240
+ result.otherCollection[specialCrop] = newAmount.amount;
241
+ result.items[SPECIAL_CROP_INFO[specialCrop].id] = newAmount.amount;
242
+ result.coinSources[specialCrop] = newAmount.npc;
243
+ if (applied.length > 0) {
244
+ result.appliedEffects[SPECIAL_CROP_INFO[specialCrop].id] = applied;
245
+ aggregateEffectsBreakdown(result.effectsBreakdown, applied);
246
+ }
247
+ }
248
+ }
249
+ result.npcCoins = Object.values(result.coinSources).reduce((a, b) => a + b, 0);
250
+ return result;
251
+ }
252
+ //# sourceMappingURL=ratecalc-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratecalc-effects.js","sourceRoot":"","sources":["../../src/util/ratecalc-effects.ts"],"names":[],"mappings":"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"}
@@ -1,53 +1,20 @@
1
- import { type FarmingAttributes } from '../constants/attributes.js';
2
1
  import { Crop, type CropInfo } from '../constants/crops.js';
3
- import type { FarmingPet } from '../fortune/farmingpet.js';
4
2
  interface CalculateDropsOptions {
5
3
  farmingFortune?: number;
6
4
  cropFortune?: Record<Crop, number>;
7
5
  blocksBroken: number;
8
6
  dicerLevel?: 1 | 2 | 3;
9
7
  armorPieces?: 1 | 2 | 3 | 4;
10
- attributes?: FarmingAttributes | Record<string, number>;
11
- chips?: Record<string, number>;
12
- pet?: FarmingPet;
13
8
  }
14
9
  type CropFortuneOption = {
15
10
  cropFortune?: Partial<Record<Crop, number>>;
16
11
  };
17
12
  export declare function calculateAverageDrops(options: CalculateDropsOptions & CropFortuneOption): Record<Crop, number>;
18
- interface CalculateDetailedDropsOptions extends CalculateDropsOptions {
19
- bountiful: boolean;
20
- mooshroom: boolean;
21
- maxTool?: boolean;
22
- }
23
- export interface DetailedDropsResult {
24
- npcPrice: number;
25
- collection: number;
26
- npcCoins: number;
27
- fortune: number;
28
- blocksBroken: number;
29
- coinSources: Record<string, number>;
30
- otherCollection: Record<string, number>;
31
- items: Record<string, number>;
32
- rngItems?: Record<string, number>;
33
- specialCropBonus: number;
34
- specialCropBonusBreakdown: Record<string, number>;
35
- rareItemBonus: number;
36
- rareItemBonusBreakdown: Record<string, number>;
37
- pendingRngItems?: Record<string, number>;
38
- }
39
- export declare function calculateDetailedAverageDrops(options: CalculateDetailedDropsOptions & CropFortuneOption): Record<Crop, DetailedDropsResult>;
40
13
  interface CalculateExpectedDropsOptions extends CalculateDropsOptions {
41
14
  blocksBroken: number;
42
15
  crop: Crop;
43
16
  }
44
- export interface CalculateCropDetailedDropsOptions extends CalculateDetailedDropsOptions {
45
- blocksBroken: number;
46
- crop: Crop;
47
- infestedPlotProbability?: number;
48
- }
49
17
  export declare function calculateExpectedDrops(options: CalculateExpectedDropsOptions): number;
50
- export declare function calculateDetailedDrops(options: CalculateCropDetailedDropsOptions): DetailedDropsResult;
51
18
  export interface FortuneRequiredCalculatorOptions {
52
19
  blocksBroken: number;
53
20
  crop: Crop;