@c3d.gg/mwi-types 0.1.1 → 0.1.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 (274) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/generated/constants/abilities-hrids.d.ts +1 -1
  3. package/dist/generated/constants/abilities-hrids.js +1 -1
  4. package/dist/generated/constants/action-categories-hrids.d.ts +1 -1
  5. package/dist/generated/constants/action-categories-hrids.js +1 -1
  6. package/dist/generated/constants/actions-hrids.d.ts +1 -1
  7. package/dist/generated/constants/actions-hrids.js +1 -1
  8. package/dist/generated/constants/avatar-outfits-hrids.d.ts +1 -1
  9. package/dist/generated/constants/avatar-outfits-hrids.js +1 -1
  10. package/dist/generated/constants/avatars-hrids.d.ts +1 -1
  11. package/dist/generated/constants/avatars-hrids.js +1 -1
  12. package/dist/generated/constants/buff-types-hrids.d.ts +1 -1
  13. package/dist/generated/constants/buff-types-hrids.js +1 -1
  14. package/dist/generated/constants/chat-channel-types-hrids.d.ts +1 -1
  15. package/dist/generated/constants/chat-channel-types-hrids.js +1 -1
  16. package/dist/generated/constants/chat-icons-hrids.d.ts +1 -1
  17. package/dist/generated/constants/chat-icons-hrids.js +1 -1
  18. package/dist/generated/constants/combat-monsters-hrids.d.ts +1 -1
  19. package/dist/generated/constants/combat-monsters-hrids.js +1 -1
  20. package/dist/generated/constants/combat-styles-hrids.d.ts +1 -1
  21. package/dist/generated/constants/combat-styles-hrids.js +1 -1
  22. package/dist/generated/constants/community-buff-types-hrids.d.ts +1 -1
  23. package/dist/generated/constants/community-buff-types-hrids.js +1 -1
  24. package/dist/generated/constants/damage-types-hrids.d.ts +1 -1
  25. package/dist/generated/constants/damage-types-hrids.js +1 -1
  26. package/dist/generated/constants/equipment-types-hrids.d.ts +1 -1
  27. package/dist/generated/constants/equipment-types-hrids.js +1 -1
  28. package/dist/generated/constants/game-modes-hrids.d.ts +1 -1
  29. package/dist/generated/constants/game-modes-hrids.js +1 -1
  30. package/dist/generated/constants/guild-character-roles-hrids.d.ts +1 -1
  31. package/dist/generated/constants/guild-character-roles-hrids.js +1 -1
  32. package/dist/generated/constants/house-rooms-hrids.d.ts +1 -1
  33. package/dist/generated/constants/house-rooms-hrids.js +1 -1
  34. package/dist/generated/constants/index.d.ts +1 -1
  35. package/dist/generated/constants/index.js +1 -1
  36. package/dist/generated/constants/item-categories-hrids.d.ts +1 -1
  37. package/dist/generated/constants/item-categories-hrids.js +1 -1
  38. package/dist/generated/constants/item-locations-hrids.d.ts +1 -1
  39. package/dist/generated/constants/item-locations-hrids.js +1 -1
  40. package/dist/generated/constants/items-hrids.d.ts +1 -1
  41. package/dist/generated/constants/items-hrids.js +1 -1
  42. package/dist/generated/constants/leaderboard-categories-hrids.d.ts +1 -1
  43. package/dist/generated/constants/leaderboard-categories-hrids.js +1 -1
  44. package/dist/generated/constants/leaderboard-types-hrids.d.ts +1 -1
  45. package/dist/generated/constants/leaderboard-types-hrids.js +1 -1
  46. package/dist/generated/constants/name-colors-hrids.d.ts +1 -1
  47. package/dist/generated/constants/name-colors-hrids.js +1 -1
  48. package/dist/generated/constants/random-task-types-hrids.d.ts +1 -1
  49. package/dist/generated/constants/random-task-types-hrids.js +1 -1
  50. package/dist/generated/constants/recipes-hrids.d.ts +1 -1
  51. package/dist/generated/constants/recipes-hrids.js +1 -1
  52. package/dist/generated/constants/shop-categories-hrids.d.ts +1 -1
  53. package/dist/generated/constants/shop-categories-hrids.js +1 -1
  54. package/dist/generated/constants/shop-items-hrids.d.ts +1 -1
  55. package/dist/generated/constants/shop-items-hrids.js +1 -1
  56. package/dist/generated/constants/skills-hrids.d.ts +1 -1
  57. package/dist/generated/constants/skills-hrids.js +1 -1
  58. package/dist/generated/constants/task-shop-items-hrids.d.ts +1 -1
  59. package/dist/generated/constants/task-shop-items-hrids.js +1 -1
  60. package/dist/generated/game-logic/abilities.d.ts +1 -1
  61. package/dist/generated/game-logic/abilities.js +1 -1
  62. package/dist/generated/game-logic/action-categories.d.ts +1 -1
  63. package/dist/generated/game-logic/action-categories.js +1 -1
  64. package/dist/generated/game-logic/actions.d.ts +1 -1
  65. package/dist/generated/game-logic/actions.js +1 -1
  66. package/dist/generated/game-logic/avatar-outfits.d.ts +1 -1
  67. package/dist/generated/game-logic/avatar-outfits.js +1 -1
  68. package/dist/generated/game-logic/avatars.d.ts +1 -1
  69. package/dist/generated/game-logic/avatars.js +1 -1
  70. package/dist/generated/game-logic/buff-types.d.ts +1 -1
  71. package/dist/generated/game-logic/buff-types.js +1 -1
  72. package/dist/generated/game-logic/chat-channel-types.d.ts +1 -1
  73. package/dist/generated/game-logic/chat-channel-types.js +1 -1
  74. package/dist/generated/game-logic/chat-icons.d.ts +1 -1
  75. package/dist/generated/game-logic/chat-icons.js +1 -1
  76. package/dist/generated/game-logic/combat-monsters.d.ts +1 -1
  77. package/dist/generated/game-logic/combat-monsters.js +1 -1
  78. package/dist/generated/game-logic/combat-styles.d.ts +1 -1
  79. package/dist/generated/game-logic/combat-styles.js +1 -1
  80. package/dist/generated/game-logic/community-buff-types.d.ts +1 -1
  81. package/dist/generated/game-logic/community-buff-types.js +1 -1
  82. package/dist/generated/game-logic/damage-types.d.ts +1 -1
  83. package/dist/generated/game-logic/damage-types.js +1 -1
  84. package/dist/generated/game-logic/equipment-types.d.ts +1 -1
  85. package/dist/generated/game-logic/equipment-types.js +1 -1
  86. package/dist/generated/game-logic/game-modes.d.ts +1 -1
  87. package/dist/generated/game-logic/game-modes.js +1 -1
  88. package/dist/generated/game-logic/guild-character-roles.d.ts +1 -1
  89. package/dist/generated/game-logic/guild-character-roles.js +1 -1
  90. package/dist/generated/game-logic/house-rooms.d.ts +7 -7
  91. package/dist/generated/game-logic/house-rooms.js +1 -1
  92. package/dist/generated/game-logic/index.d.ts +3 -1
  93. package/dist/generated/game-logic/index.d.ts.map +1 -1
  94. package/dist/generated/game-logic/index.js +13 -1
  95. package/dist/generated/game-logic/index.js.map +1 -1
  96. package/dist/generated/game-logic/item-categories.d.ts +1 -1
  97. package/dist/generated/game-logic/item-categories.js +1 -1
  98. package/dist/generated/game-logic/item-locations.d.ts +1 -1
  99. package/dist/generated/game-logic/item-locations.js +1 -1
  100. package/dist/generated/game-logic/items.d.ts +1 -1
  101. package/dist/generated/game-logic/items.js +1 -1
  102. package/dist/generated/game-logic/leaderboard-categories.d.ts +1 -1
  103. package/dist/generated/game-logic/leaderboard-categories.js +1 -1
  104. package/dist/generated/game-logic/leaderboard-types.d.ts +1 -1
  105. package/dist/generated/game-logic/leaderboard-types.js +1 -1
  106. package/dist/generated/game-logic/name-colors.d.ts +1 -1
  107. package/dist/generated/game-logic/name-colors.js +1 -1
  108. package/dist/generated/game-logic/random-task-types.d.ts +1 -1
  109. package/dist/generated/game-logic/random-task-types.js +1 -1
  110. package/dist/generated/game-logic/recipe-calculator.d.ts +204 -0
  111. package/dist/generated/game-logic/recipe-calculator.d.ts.map +1 -0
  112. package/dist/generated/game-logic/recipe-calculator.js +360 -0
  113. package/dist/generated/game-logic/recipe-calculator.js.map +1 -0
  114. package/dist/generated/game-logic/recipe-tree.d.ts +123 -0
  115. package/dist/generated/game-logic/recipe-tree.d.ts.map +1 -0
  116. package/dist/generated/game-logic/recipe-tree.js +298 -0
  117. package/dist/generated/game-logic/recipe-tree.js.map +1 -0
  118. package/dist/generated/game-logic/recipes.d.ts +1 -1
  119. package/dist/generated/game-logic/recipes.js +1 -1
  120. package/dist/generated/game-logic/shop-categories.d.ts +1 -1
  121. package/dist/generated/game-logic/shop-categories.js +1 -1
  122. package/dist/generated/game-logic/shop-items.d.ts +1 -1
  123. package/dist/generated/game-logic/shop-items.js +1 -1
  124. package/dist/generated/game-logic/skills.d.ts +1 -1
  125. package/dist/generated/game-logic/skills.js +1 -1
  126. package/dist/generated/game-logic/task-shop-items.d.ts +1 -1
  127. package/dist/generated/game-logic/task-shop-items.js +1 -1
  128. package/dist/generated/game-logic/types.d.ts +1 -1
  129. package/dist/generated/game-logic/types.js +1 -1
  130. package/dist/generated/localization/en/abilities.d.ts +1 -1
  131. package/dist/generated/localization/en/abilities.js +1 -1
  132. package/dist/generated/localization/en/actions.d.ts +1 -1
  133. package/dist/generated/localization/en/actions.js +1 -1
  134. package/dist/generated/localization/en/house-rooms.d.ts +1 -1
  135. package/dist/generated/localization/en/house-rooms.js +1 -1
  136. package/dist/generated/localization/en/index.d.ts +1 -1
  137. package/dist/generated/localization/en/index.js +1 -1
  138. package/dist/generated/localization/en/items.d.ts +1 -1
  139. package/dist/generated/localization/en/items.js +1 -1
  140. package/dist/generated/localization/en/skills.d.ts +1 -1
  141. package/dist/generated/localization/en/skills.js +1 -1
  142. package/dist/generated/localization/index.d.ts +1 -1
  143. package/dist/generated/localization/index.js +1 -1
  144. package/dist/generated/localization/zh/abilities.d.ts +1 -1
  145. package/dist/generated/localization/zh/abilities.js +1 -1
  146. package/dist/generated/localization/zh/actions.d.ts +1 -1
  147. package/dist/generated/localization/zh/actions.js +1 -1
  148. package/dist/generated/localization/zh/house-rooms.d.ts +1 -1
  149. package/dist/generated/localization/zh/house-rooms.js +1 -1
  150. package/dist/generated/localization/zh/index.d.ts +1 -1
  151. package/dist/generated/localization/zh/index.js +1 -1
  152. package/dist/generated/localization/zh/items.d.ts +1 -1
  153. package/dist/generated/localization/zh/items.js +1 -1
  154. package/dist/generated/localization/zh/skills.d.ts +1 -1
  155. package/dist/generated/localization/zh/skills.js +1 -1
  156. package/dist/generated/player-data/index.d.ts +2 -2
  157. package/dist/generated/player-data/index.js +1 -1
  158. package/dist/generated/schemas/typebox/abilities.d.ts +1 -1
  159. package/dist/generated/schemas/typebox/abilities.js +1 -1
  160. package/dist/generated/schemas/typebox/action-categories.d.ts +1 -1
  161. package/dist/generated/schemas/typebox/action-categories.js +1 -1
  162. package/dist/generated/schemas/typebox/actions.d.ts +1 -1
  163. package/dist/generated/schemas/typebox/actions.js +1 -1
  164. package/dist/generated/schemas/typebox/avatar-outfits.d.ts +1 -1
  165. package/dist/generated/schemas/typebox/avatar-outfits.js +1 -1
  166. package/dist/generated/schemas/typebox/avatars.d.ts +1 -1
  167. package/dist/generated/schemas/typebox/avatars.js +1 -1
  168. package/dist/generated/schemas/typebox/buff-types.d.ts +1 -1
  169. package/dist/generated/schemas/typebox/buff-types.js +1 -1
  170. package/dist/generated/schemas/typebox/chat-channel-types.d.ts +1 -1
  171. package/dist/generated/schemas/typebox/chat-channel-types.js +1 -1
  172. package/dist/generated/schemas/typebox/chat-icons.d.ts +1 -1
  173. package/dist/generated/schemas/typebox/chat-icons.js +1 -1
  174. package/dist/generated/schemas/typebox/combat-monsters.d.ts +1 -1
  175. package/dist/generated/schemas/typebox/combat-monsters.js +1 -1
  176. package/dist/generated/schemas/typebox/combat-styles.d.ts +1 -1
  177. package/dist/generated/schemas/typebox/combat-styles.js +1 -1
  178. package/dist/generated/schemas/typebox/community-buff-types.d.ts +1 -1
  179. package/dist/generated/schemas/typebox/community-buff-types.js +1 -1
  180. package/dist/generated/schemas/typebox/damage-types.d.ts +1 -1
  181. package/dist/generated/schemas/typebox/damage-types.js +1 -1
  182. package/dist/generated/schemas/typebox/equipment-types.d.ts +1 -1
  183. package/dist/generated/schemas/typebox/equipment-types.js +1 -1
  184. package/dist/generated/schemas/typebox/game-modes.d.ts +1 -1
  185. package/dist/generated/schemas/typebox/game-modes.js +1 -1
  186. package/dist/generated/schemas/typebox/guild-character-roles.d.ts +1 -1
  187. package/dist/generated/schemas/typebox/guild-character-roles.js +1 -1
  188. package/dist/generated/schemas/typebox/house-rooms.d.ts +1 -1
  189. package/dist/generated/schemas/typebox/house-rooms.js +1 -1
  190. package/dist/generated/schemas/typebox/index.d.ts +1 -1
  191. package/dist/generated/schemas/typebox/index.js +1 -1
  192. package/dist/generated/schemas/typebox/item-categories.d.ts +1 -1
  193. package/dist/generated/schemas/typebox/item-categories.js +1 -1
  194. package/dist/generated/schemas/typebox/item-locations.d.ts +1 -1
  195. package/dist/generated/schemas/typebox/item-locations.js +1 -1
  196. package/dist/generated/schemas/typebox/items.d.ts +1 -1
  197. package/dist/generated/schemas/typebox/items.js +1 -1
  198. package/dist/generated/schemas/typebox/leaderboard-categories.d.ts +1 -1
  199. package/dist/generated/schemas/typebox/leaderboard-categories.js +1 -1
  200. package/dist/generated/schemas/typebox/leaderboard-types.d.ts +1 -1
  201. package/dist/generated/schemas/typebox/leaderboard-types.js +1 -1
  202. package/dist/generated/schemas/typebox/name-colors.d.ts +1 -1
  203. package/dist/generated/schemas/typebox/name-colors.js +1 -1
  204. package/dist/generated/schemas/typebox/player-data.d.ts +1 -1
  205. package/dist/generated/schemas/typebox/player-data.js +2 -2
  206. package/dist/generated/schemas/typebox/random-task-types.d.ts +1 -1
  207. package/dist/generated/schemas/typebox/random-task-types.js +1 -1
  208. package/dist/generated/schemas/typebox/shop-categories.d.ts +1 -1
  209. package/dist/generated/schemas/typebox/shop-categories.js +1 -1
  210. package/dist/generated/schemas/typebox/shop-items.d.ts +1 -1
  211. package/dist/generated/schemas/typebox/shop-items.js +1 -1
  212. package/dist/generated/schemas/typebox/skills.d.ts +1 -1
  213. package/dist/generated/schemas/typebox/skills.js +1 -1
  214. package/dist/generated/schemas/typebox/task-shop-items.d.ts +1 -1
  215. package/dist/generated/schemas/typebox/task-shop-items.js +1 -1
  216. package/dist/generated/schemas/zod/abilities.d.ts +1 -1
  217. package/dist/generated/schemas/zod/abilities.js +1 -1
  218. package/dist/generated/schemas/zod/action-categories.d.ts +1 -1
  219. package/dist/generated/schemas/zod/action-categories.js +1 -1
  220. package/dist/generated/schemas/zod/actions.d.ts +1 -1
  221. package/dist/generated/schemas/zod/actions.js +1 -1
  222. package/dist/generated/schemas/zod/avatar-outfits.d.ts +1 -1
  223. package/dist/generated/schemas/zod/avatar-outfits.js +1 -1
  224. package/dist/generated/schemas/zod/avatars.d.ts +1 -1
  225. package/dist/generated/schemas/zod/avatars.js +1 -1
  226. package/dist/generated/schemas/zod/buff-types.d.ts +35 -35
  227. package/dist/generated/schemas/zod/buff-types.js +1 -1
  228. package/dist/generated/schemas/zod/chat-channel-types.d.ts +1 -1
  229. package/dist/generated/schemas/zod/chat-channel-types.js +1 -1
  230. package/dist/generated/schemas/zod/chat-icons.d.ts +1 -1
  231. package/dist/generated/schemas/zod/chat-icons.js +1 -1
  232. package/dist/generated/schemas/zod/combat-monsters.d.ts +1 -1
  233. package/dist/generated/schemas/zod/combat-monsters.js +1 -1
  234. package/dist/generated/schemas/zod/combat-styles.d.ts +1 -1
  235. package/dist/generated/schemas/zod/combat-styles.js +1 -1
  236. package/dist/generated/schemas/zod/community-buff-types.d.ts +18 -18
  237. package/dist/generated/schemas/zod/community-buff-types.js +1 -1
  238. package/dist/generated/schemas/zod/damage-types.d.ts +1 -1
  239. package/dist/generated/schemas/zod/damage-types.js +1 -1
  240. package/dist/generated/schemas/zod/equipment-types.d.ts +1 -1
  241. package/dist/generated/schemas/zod/equipment-types.js +1 -1
  242. package/dist/generated/schemas/zod/game-modes.d.ts +1 -1
  243. package/dist/generated/schemas/zod/game-modes.js +1 -1
  244. package/dist/generated/schemas/zod/guild-character-roles.d.ts +1 -1
  245. package/dist/generated/schemas/zod/guild-character-roles.js +1 -1
  246. package/dist/generated/schemas/zod/house-rooms.d.ts +35 -35
  247. package/dist/generated/schemas/zod/house-rooms.js +1 -1
  248. package/dist/generated/schemas/zod/index.d.ts +1 -1
  249. package/dist/generated/schemas/zod/index.js +1 -1
  250. package/dist/generated/schemas/zod/item-categories.d.ts +1 -1
  251. package/dist/generated/schemas/zod/item-categories.js +1 -1
  252. package/dist/generated/schemas/zod/item-locations.d.ts +3 -3
  253. package/dist/generated/schemas/zod/item-locations.js +1 -1
  254. package/dist/generated/schemas/zod/items.d.ts +1 -1
  255. package/dist/generated/schemas/zod/items.js +1 -1
  256. package/dist/generated/schemas/zod/leaderboard-categories.d.ts +1 -1
  257. package/dist/generated/schemas/zod/leaderboard-categories.js +1 -1
  258. package/dist/generated/schemas/zod/leaderboard-types.d.ts +1 -1
  259. package/dist/generated/schemas/zod/leaderboard-types.js +1 -1
  260. package/dist/generated/schemas/zod/name-colors.d.ts +1 -1
  261. package/dist/generated/schemas/zod/name-colors.js +1 -1
  262. package/dist/generated/schemas/zod/player-data.d.ts +141 -141
  263. package/dist/generated/schemas/zod/player-data.js +2 -2
  264. package/dist/generated/schemas/zod/random-task-types.d.ts +1 -1
  265. package/dist/generated/schemas/zod/random-task-types.js +1 -1
  266. package/dist/generated/schemas/zod/shop-categories.d.ts +1 -1
  267. package/dist/generated/schemas/zod/shop-categories.js +1 -1
  268. package/dist/generated/schemas/zod/shop-items.d.ts +1 -1
  269. package/dist/generated/schemas/zod/shop-items.js +1 -1
  270. package/dist/generated/schemas/zod/skills.d.ts +1 -1
  271. package/dist/generated/schemas/zod/skills.js +1 -1
  272. package/dist/generated/schemas/zod/task-shop-items.d.ts +1 -1
  273. package/dist/generated/schemas/zod/task-shop-items.js +1 -1
  274. package/package.json +1 -1
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Auto-generated file - DO NOT EDIT
3
+ * Generated on 2025-08-21T21:50:47.940Z
4
+ */
5
+ /**
6
+ * Recipe Calculator with Player Data Support
7
+ * @module
8
+ */
9
+ import type { RecipeTreeNode, RecipeTreeStats } from './recipe-tree.js';
10
+ import type { Recipe } from './recipes.js';
11
+ import type { Item, ItemHrid } from './items.js';
12
+ import type { Action, ActionHrid } from './actions.js';
13
+ import type { SkillHrid } from './skills.js';
14
+ import type { PlayerData } from '../schemas/zod/player-data.js';
15
+ /**
16
+ * Time modifiers from player data
17
+ */
18
+ export interface TimeModifiers {
19
+ /** Efficiency bonus from skill level (0-99%) */
20
+ efficiency: number;
21
+ /** Speed bonus from tools (percentage) */
22
+ toolSpeed: number;
23
+ /** Speed bonus from tea/consumables (percentage) */
24
+ teaSpeed: number;
25
+ /** Efficiency bonus from tea/consumables (percentage) */
26
+ teaEfficiency: number;
27
+ /** Haste bonus (percentage) */
28
+ haste: number;
29
+ /** Task speed bonus (percentage) */
30
+ taskSpeed: number;
31
+ /** House room bonuses */
32
+ houseBonus: number;
33
+ /** Guild/community buffs */
34
+ guildBonus: number;
35
+ }
36
+ /**
37
+ * Gathering estimation for a material
38
+ */
39
+ export interface GatheringEstimate {
40
+ /** The item being gathered */
41
+ itemHrid: ItemHrid;
42
+ /** Optimal action to gather this item */
43
+ actionHrid: ActionHrid;
44
+ /** Min items per action */
45
+ minPerAction: number;
46
+ /** Max items per action */
47
+ maxPerAction: number;
48
+ /** Average items per action */
49
+ avgPerAction: number;
50
+ /** Base time per action (seconds) */
51
+ baseTimeSeconds: number;
52
+ /** Modified time per action with player bonuses (seconds) */
53
+ modifiedTimeSeconds: number;
54
+ /** Estimated total time to gather required quantity (seconds) */
55
+ totalTimeSeconds: number;
56
+ /** Number of actions needed */
57
+ actionsNeeded: number;
58
+ /** Items per hour with player bonuses */
59
+ itemsPerHour: number;
60
+ }
61
+ /**
62
+ * Enhanced recipe node with player data
63
+ */
64
+ export interface EnhancedRecipeNode extends RecipeTreeNode {
65
+ /** Quantity already in inventory */
66
+ inventoryQuantity: number;
67
+ /** Quantity still needed (after inventory) */
68
+ quantityNeeded: number;
69
+ /** Base crafting time (seconds) */
70
+ baseCraftingTime?: number;
71
+ /** Modified crafting time with player bonuses (seconds) */
72
+ modifiedCraftingTime?: number;
73
+ /** Time improvement percentage */
74
+ timeImprovement?: number;
75
+ /** Gathering estimate if this is a base material */
76
+ gatheringEstimate?: GatheringEstimate;
77
+ /** Enhanced children */
78
+ children: EnhancedRecipeNode[];
79
+ }
80
+ /**
81
+ * Enhanced recipe statistics
82
+ */
83
+ export interface EnhancedRecipeStats extends RecipeTreeStats {
84
+ /** Total crafting time with player bonuses (seconds) */
85
+ totalModifiedCraftingTime: number;
86
+ /** Total gathering time estimate (seconds) */
87
+ totalGatheringTime: number;
88
+ /** Total time (crafting + gathering) */
89
+ totalTimeEstimate: number;
90
+ /** Materials already in inventory */
91
+ inventoryMaterials: Array<{
92
+ itemHrid: ItemHrid;
93
+ item: Item;
94
+ quantity: number;
95
+ }>;
96
+ /** Materials still needed */
97
+ materialsNeeded: Array<{
98
+ itemHrid: ItemHrid;
99
+ item: Item;
100
+ quantityNeeded: number;
101
+ gatheringEstimate?: GatheringEstimate;
102
+ }>;
103
+ }
104
+ /**
105
+ * Calculate time modifiers from player data
106
+ */
107
+ export declare function calculateTimeModifiers(playerData: PlayerData, skillHrid?: SkillHrid, actionType?: string): TimeModifiers;
108
+ /**
109
+ * Calculate modified action time with player bonuses
110
+ */
111
+ export declare function calculateModifiedTime(baseTimeSeconds: number, modifiers: TimeModifiers): number;
112
+ /**
113
+ * Find the best gathering action for an item
114
+ */
115
+ export declare function findBestGatheringAction(itemHrid: ItemHrid): Action | null;
116
+ /**
117
+ * Estimate gathering time for a material
118
+ */
119
+ export declare function estimateGatheringTime(itemHrid: ItemHrid, quantityNeeded: number, playerData?: PlayerData, actionHrid?: ActionHrid): GatheringEstimate | null;
120
+ /**
121
+ * Get item quantity in player inventory
122
+ */
123
+ export declare function getInventoryQuantity(playerData: PlayerData, itemHrid: ItemHrid): number;
124
+ /**
125
+ * Enhance a recipe tree with player data
126
+ */
127
+ export declare function enhanceRecipeTree(tree: RecipeTreeNode, playerData?: PlayerData, useInventory?: boolean): EnhancedRecipeNode;
128
+ /**
129
+ * Calculate enhanced statistics for a recipe tree
130
+ */
131
+ export declare function calculateEnhancedStats(tree: EnhancedRecipeNode): EnhancedRecipeStats;
132
+ /**
133
+ * Main function to calculate recipe requirements with player data
134
+ */
135
+ export declare function calculateRecipeWithPlayerData(itemHrid: ItemHrid, quantity?: number, playerData?: PlayerData, options?: {
136
+ useInventory?: boolean;
137
+ gatheringActions?: Map<ItemHrid, ActionHrid>;
138
+ }): {
139
+ tree: EnhancedRecipeNode;
140
+ stats: EnhancedRecipeStats;
141
+ summary: {
142
+ totalTime: string;
143
+ craftingTime: string;
144
+ gatheringTime: string;
145
+ inventorySavings: number;
146
+ materialsFromInventory: string[];
147
+ materialsToGather: string[];
148
+ };
149
+ } | null;
150
+ /**
151
+ * Find all recipes that can be crafted with current inventory
152
+ */
153
+ export declare function findCraftableRecipes(playerData: PlayerData, recipes: Recipe[]): Array<{
154
+ recipe: Recipe;
155
+ canCraft: boolean;
156
+ timesToCraft: number;
157
+ missingItems: Array<{
158
+ itemHrid: ItemHrid;
159
+ needed: number;
160
+ have: number;
161
+ }>;
162
+ }>;
163
+ /**
164
+ * Export pre-calculated recipe data for common items
165
+ */
166
+ export declare const COMMON_RECIPE_CALCULATIONS: {
167
+ celestial_brush: (playerData?: PlayerData) => {
168
+ tree: EnhancedRecipeNode;
169
+ stats: EnhancedRecipeStats;
170
+ summary: {
171
+ totalTime: string;
172
+ craftingTime: string;
173
+ gatheringTime: string;
174
+ inventorySavings: number;
175
+ materialsFromInventory: string[];
176
+ materialsToGather: string[];
177
+ };
178
+ } | null;
179
+ holy_cheese: (playerData?: PlayerData) => {
180
+ tree: EnhancedRecipeNode;
181
+ stats: EnhancedRecipeStats;
182
+ summary: {
183
+ totalTime: string;
184
+ craftingTime: string;
185
+ gatheringTime: string;
186
+ inventorySavings: number;
187
+ materialsFromInventory: string[];
188
+ materialsToGather: string[];
189
+ };
190
+ } | null;
191
+ rainbow_cheese: (playerData?: PlayerData) => {
192
+ tree: EnhancedRecipeNode;
193
+ stats: EnhancedRecipeStats;
194
+ summary: {
195
+ totalTime: string;
196
+ craftingTime: string;
197
+ gatheringTime: string;
198
+ inventorySavings: number;
199
+ materialsFromInventory: string[];
200
+ materialsToGather: string[];
201
+ };
202
+ } | null;
203
+ };
204
+ //# sourceMappingURL=recipe-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe-calculator.d.ts","sourceRoot":"","sources":["../../../src/generated/game-logic/recipe-calculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,360 @@
1
+ /**
2
+ * Auto-generated file - DO NOT EDIT
3
+ * Generated on 2025-08-21T21:50:47.940Z
4
+ */
5
+ import { buildRecipeTree, calculateRecipeTreeStats } from './recipe-tree.js';
6
+ import { getAction } from './actions.js';
7
+ /**
8
+ * Calculate time modifiers from player data
9
+ */
10
+ export function calculateTimeModifiers(playerData, skillHrid, actionType) {
11
+ const modifiers = {
12
+ efficiency: 0,
13
+ toolSpeed: 0,
14
+ teaSpeed: 0,
15
+ teaEfficiency: 0,
16
+ haste: 0,
17
+ taskSpeed: 0,
18
+ houseBonus: 0,
19
+ guildBonus: 0
20
+ };
21
+ // Calculate skill efficiency (1% per level over 1, capped at 99%)
22
+ if (skillHrid && playerData.characterSkills) {
23
+ const skill = playerData.characterSkills.find(s => s.skillHrid === skillHrid);
24
+ if (skill) {
25
+ modifiers.efficiency = Math.min(99, Math.max(0, skill.level - 1));
26
+ }
27
+ }
28
+ // Calculate tool bonuses
29
+ if (playerData.characterItems) {
30
+ const tools = playerData.characterItems.filter((item) => item.itemLocationHrid && item.itemLocationHrid.includes('_tool'));
31
+ // Each tool enhancement level gives bonus speed (this is simplified)
32
+ tools.forEach((tool) => {
33
+ const enhancementLevel = tool.enhancementLevel || 0;
34
+ // Assume 5% speed per enhancement level (adjust based on actual game data)
35
+ modifiers.toolSpeed += enhancementLevel * 5;
36
+ });
37
+ }
38
+ // Calculate buff bonuses from various sources
39
+ const buffMaps = [
40
+ playerData.mooPassActionTypeBuffsMap,
41
+ playerData.communityActionTypeBuffsMap,
42
+ playerData.houseActionTypeBuffsMap,
43
+ playerData.consumableActionTypeBuffsMap,
44
+ playerData.equipmentActionTypeBuffsMap
45
+ ];
46
+ buffMaps.forEach(buffMap => {
47
+ if (buffMap && actionType && buffMap[actionType]) {
48
+ const buffs = buffMap[actionType];
49
+ if (Array.isArray(buffs)) {
50
+ buffs.forEach((buff) => {
51
+ // Speed buffs
52
+ if (buff.typeHrid === '/buff_types/action_speed' ||
53
+ buff.typeHrid === '/buff_types/task_action_speed') {
54
+ modifiers.teaSpeed += buff.value || 0;
55
+ }
56
+ // Efficiency buffs
57
+ if (buff.typeHrid === '/buff_types/efficiency') {
58
+ modifiers.teaEfficiency += buff.value || 0;
59
+ }
60
+ // Note: Haste and task_speed buff types may not exist in the actual buff types
61
+ // This is simplified for the calculator purposes
62
+ });
63
+ }
64
+ }
65
+ });
66
+ // Calculate house room bonuses
67
+ if (playerData.characterHouseRoomMap) {
68
+ Object.values(playerData.characterHouseRoomMap).forEach((room) => {
69
+ // Simplified: each room level gives 2% efficiency
70
+ modifiers.houseBonus += room.level * 2;
71
+ });
72
+ }
73
+ return modifiers;
74
+ }
75
+ /**
76
+ * Calculate modified action time with player bonuses
77
+ */
78
+ export function calculateModifiedTime(baseTimeSeconds, modifiers) {
79
+ // Apply efficiency (multiplicative, reduces time)
80
+ const totalEfficiency = Math.min(99, modifiers.efficiency + modifiers.teaEfficiency + modifiers.houseBonus + modifiers.guildBonus);
81
+ const efficiencyMultiplier = 1 - totalEfficiency / 100;
82
+ // Apply speed bonuses (multiplicative, reduces time)
83
+ const toolMultiplier = modifiers.toolSpeed > 0 ? 1 - modifiers.toolSpeed / 100 : 1;
84
+ const teaMultiplier = modifiers.teaSpeed > 0 ? 1 - modifiers.teaSpeed / 100 : 1;
85
+ // Apply haste and task speed (additive speed bonuses)
86
+ const combinedSpeed = modifiers.haste + modifiers.taskSpeed;
87
+ const speedMultiplier = combinedSpeed > 0 ? 1 / (1 + combinedSpeed / 100) : 1;
88
+ // Calculate final time
89
+ let finalTime = baseTimeSeconds;
90
+ finalTime *= efficiencyMultiplier;
91
+ finalTime *= toolMultiplier;
92
+ finalTime *= teaMultiplier;
93
+ finalTime *= speedMultiplier;
94
+ // Minimum time cap (3 seconds)
95
+ return Math.max(3, finalTime);
96
+ }
97
+ /**
98
+ * Find the best gathering action for an item
99
+ */
100
+ export function findBestGatheringAction(itemHrid) {
101
+ // This is a simplified version - in reality you'd search all actions
102
+ // that have this item in their drop table
103
+ // For now, we'll return null and let the user specify
104
+ return null;
105
+ }
106
+ /**
107
+ * Estimate gathering time for a material
108
+ */
109
+ export function estimateGatheringTime(itemHrid, quantityNeeded, playerData, actionHrid) {
110
+ // If no action specified, try to find the best one
111
+ const action = actionHrid ? getAction(actionHrid) : findBestGatheringAction(itemHrid);
112
+ if (!action) {
113
+ return null;
114
+ }
115
+ // Get drop rates from action (simplified - assuming it's in dropTable)
116
+ const dropInfo = action.dropTable?.find(drop => drop.itemHrid === itemHrid);
117
+ if (!dropInfo) {
118
+ return null;
119
+ }
120
+ const minPerAction = dropInfo.minCount || 1;
121
+ const maxPerAction = dropInfo.maxCount || 1;
122
+ const avgPerAction = (minPerAction + maxPerAction) / 2;
123
+ // Calculate base time
124
+ const baseTimeSeconds = (action.baseTimeCost || 10000000000) / 1000000000;
125
+ // Calculate modified time if player data provided
126
+ let modifiedTimeSeconds = baseTimeSeconds;
127
+ if (playerData) {
128
+ const modifiers = calculateTimeModifiers(playerData, action.levelRequirement?.skillHrid, action.type);
129
+ modifiedTimeSeconds = calculateModifiedTime(baseTimeSeconds, modifiers);
130
+ }
131
+ // Calculate actions needed
132
+ const actionsNeeded = Math.ceil(quantityNeeded / avgPerAction);
133
+ const totalTimeSeconds = actionsNeeded * modifiedTimeSeconds;
134
+ const itemsPerHour = (avgPerAction * 3600) / modifiedTimeSeconds;
135
+ return {
136
+ itemHrid,
137
+ actionHrid: action.hrid,
138
+ minPerAction,
139
+ maxPerAction,
140
+ avgPerAction,
141
+ baseTimeSeconds,
142
+ modifiedTimeSeconds,
143
+ totalTimeSeconds,
144
+ actionsNeeded,
145
+ itemsPerHour
146
+ };
147
+ }
148
+ /**
149
+ * Get item quantity in player inventory
150
+ */
151
+ export function getInventoryQuantity(playerData, itemHrid) {
152
+ let total = 0;
153
+ // Check all character items
154
+ if (playerData.characterItems) {
155
+ playerData.characterItems.forEach((item) => {
156
+ if (item.itemHrid === itemHrid) {
157
+ total += item.count;
158
+ }
159
+ });
160
+ }
161
+ return total;
162
+ }
163
+ /**
164
+ * Enhance a recipe tree with player data
165
+ */
166
+ export function enhanceRecipeTree(tree, playerData, useInventory = false) {
167
+ const inventoryQuantity = playerData && useInventory
168
+ ? getInventoryQuantity(playerData, tree.itemHrid)
169
+ : 0;
170
+ const quantityNeeded = Math.max(0, tree.quantity - inventoryQuantity);
171
+ let baseCraftingTime;
172
+ let modifiedCraftingTime;
173
+ let timeImprovement;
174
+ let gatheringEstimate;
175
+ if (tree.recipe) {
176
+ // Calculate crafting times
177
+ baseCraftingTime = (tree.recipe.baseTimeCost || 0) / 1000000000;
178
+ if (playerData) {
179
+ const modifiers = calculateTimeModifiers(playerData, tree.recipe.levelRequirement?.skillHrid, tree.recipe.type);
180
+ modifiedCraftingTime = calculateModifiedTime(baseCraftingTime, modifiers);
181
+ // Calculate how many times we need to craft
182
+ const outputCount = tree.recipe.outputItems.find(o => o.itemHrid === tree.itemHrid)?.count || 1;
183
+ const craftingIterations = Math.ceil(quantityNeeded / outputCount);
184
+ modifiedCraftingTime *= craftingIterations;
185
+ timeImprovement = ((baseCraftingTime - modifiedCraftingTime) / baseCraftingTime) * 100;
186
+ }
187
+ }
188
+ else if (tree.isBaseMaterial && quantityNeeded > 0) {
189
+ // Estimate gathering time for base materials
190
+ gatheringEstimate = estimateGatheringTime(tree.itemHrid, quantityNeeded, playerData) || undefined;
191
+ }
192
+ // Recursively enhance children
193
+ const enhancedChildren = tree.children.map(child => enhanceRecipeTree(child, playerData, useInventory));
194
+ return {
195
+ ...tree,
196
+ inventoryQuantity,
197
+ quantityNeeded,
198
+ baseCraftingTime,
199
+ modifiedCraftingTime,
200
+ timeImprovement,
201
+ gatheringEstimate,
202
+ children: enhancedChildren
203
+ };
204
+ }
205
+ /**
206
+ * Calculate enhanced statistics for a recipe tree
207
+ */
208
+ export function calculateEnhancedStats(tree) {
209
+ const baseStats = calculateRecipeTreeStats(tree);
210
+ let totalModifiedCraftingTime = 0;
211
+ let totalGatheringTime = 0;
212
+ const inventoryMaterials = [];
213
+ const materialsNeeded = [];
214
+ function traverse(node) {
215
+ // Track crafting time
216
+ if (node.modifiedCraftingTime) {
217
+ totalModifiedCraftingTime += node.modifiedCraftingTime;
218
+ }
219
+ // Track gathering time
220
+ if (node.gatheringEstimate) {
221
+ totalGatheringTime += node.gatheringEstimate.totalTimeSeconds;
222
+ }
223
+ // Track inventory usage
224
+ if (node.inventoryQuantity > 0) {
225
+ const existing = inventoryMaterials.find(m => m.itemHrid === node.itemHrid);
226
+ if (existing) {
227
+ existing.quantity += node.inventoryQuantity;
228
+ }
229
+ else {
230
+ inventoryMaterials.push({
231
+ itemHrid: node.itemHrid,
232
+ item: node.item,
233
+ quantity: node.inventoryQuantity
234
+ });
235
+ }
236
+ }
237
+ // Track materials still needed
238
+ if (node.quantityNeeded > 0 && node.isBaseMaterial) {
239
+ const existing = materialsNeeded.find(m => m.itemHrid === node.itemHrid);
240
+ if (existing) {
241
+ existing.quantityNeeded += node.quantityNeeded;
242
+ }
243
+ else {
244
+ materialsNeeded.push({
245
+ itemHrid: node.itemHrid,
246
+ item: node.item,
247
+ quantityNeeded: node.quantityNeeded,
248
+ gatheringEstimate: node.gatheringEstimate
249
+ });
250
+ }
251
+ }
252
+ // Traverse children
253
+ node.children.forEach(traverse);
254
+ }
255
+ traverse(tree);
256
+ return {
257
+ ...baseStats,
258
+ totalModifiedCraftingTime,
259
+ totalGatheringTime,
260
+ totalTimeEstimate: totalModifiedCraftingTime + totalGatheringTime,
261
+ inventoryMaterials,
262
+ materialsNeeded
263
+ };
264
+ }
265
+ /**
266
+ * Main function to calculate recipe requirements with player data
267
+ */
268
+ export function calculateRecipeWithPlayerData(itemHrid, quantity = 1, playerData, options = {}) {
269
+ // Build base recipe tree
270
+ const baseTree = buildRecipeTree(itemHrid, quantity);
271
+ if (!baseTree) {
272
+ return null;
273
+ }
274
+ // Enhance with player data
275
+ const enhancedTree = enhanceRecipeTree(baseTree, playerData, options.useInventory || false);
276
+ // Calculate statistics
277
+ const stats = calculateEnhancedStats(enhancedTree);
278
+ // Format times
279
+ const formatTime = (seconds) => {
280
+ const hours = Math.floor(seconds / 3600);
281
+ const minutes = Math.floor((seconds % 3600) / 60);
282
+ const secs = Math.floor(seconds % 60);
283
+ const parts = [];
284
+ if (hours > 0)
285
+ parts.push(`${hours}h`);
286
+ if (minutes > 0)
287
+ parts.push(`${minutes}m`);
288
+ if (secs > 0)
289
+ parts.push(`${secs}s`);
290
+ return parts.join(' ') || '0s';
291
+ };
292
+ // Calculate inventory savings
293
+ const inventorySavings = stats.inventoryMaterials.reduce((total, mat) => {
294
+ return total + mat.quantity;
295
+ }, 0);
296
+ // Create summary
297
+ const summary = {
298
+ totalTime: formatTime(stats.totalTimeEstimate),
299
+ craftingTime: formatTime(stats.totalModifiedCraftingTime),
300
+ gatheringTime: formatTime(stats.totalGatheringTime),
301
+ inventorySavings,
302
+ materialsFromInventory: stats.inventoryMaterials.map(m => `${m.item.name} x${m.quantity}`),
303
+ materialsToGather: stats.materialsNeeded.map(m => `${m.item.name} x${m.quantityNeeded}`)
304
+ };
305
+ return {
306
+ tree: enhancedTree,
307
+ stats,
308
+ summary
309
+ };
310
+ }
311
+ /**
312
+ * Find all recipes that can be crafted with current inventory
313
+ */
314
+ export function findCraftableRecipes(playerData, recipes) {
315
+ const results = [];
316
+ for (const recipe of recipes) {
317
+ const missingItems = [];
318
+ let canCraft = true;
319
+ let maxCrafts = Infinity;
320
+ // Check each input item
321
+ for (const input of recipe.inputItems) {
322
+ const have = getInventoryQuantity(playerData, input.itemHrid);
323
+ const needed = input.count;
324
+ if (have < needed) {
325
+ canCraft = false;
326
+ missingItems.push({ itemHrid: input.itemHrid, needed, have });
327
+ }
328
+ else {
329
+ maxCrafts = Math.min(maxCrafts, Math.floor(have / needed));
330
+ }
331
+ }
332
+ // Check upgrade item if required
333
+ if (recipe.upgradeItemHrid) {
334
+ const have = getInventoryQuantity(playerData, recipe.upgradeItemHrid);
335
+ if (have < 1) {
336
+ canCraft = false;
337
+ missingItems.push({ itemHrid: recipe.upgradeItemHrid, needed: 1, have });
338
+ }
339
+ else {
340
+ maxCrafts = Math.min(maxCrafts, have);
341
+ }
342
+ }
343
+ results.push({
344
+ recipe,
345
+ canCraft,
346
+ timesToCraft: canCraft ? maxCrafts : 0,
347
+ missingItems
348
+ });
349
+ }
350
+ return results;
351
+ }
352
+ /**
353
+ * Export pre-calculated recipe data for common items
354
+ */
355
+ export const COMMON_RECIPE_CALCULATIONS = {
356
+ celestial_brush: (playerData) => calculateRecipeWithPlayerData('/items/celestial_brush', 1, playerData),
357
+ holy_cheese: (playerData) => calculateRecipeWithPlayerData('/items/holy_cheese', 1, playerData),
358
+ rainbow_cheese: (playerData) => calculateRecipeWithPlayerData('/items/rainbow_cheese', 1, playerData)
359
+ };
360
+ //# sourceMappingURL=recipe-calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe-calculator.js","sourceRoot":"","sources":["../../../src/generated/game-logic/recipe-calculator.ts"],"names":[],"mappings":"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"}