@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/generated/constants/abilities-hrids.d.ts +1 -1
- package/dist/generated/constants/abilities-hrids.js +1 -1
- package/dist/generated/constants/action-categories-hrids.d.ts +1 -1
- package/dist/generated/constants/action-categories-hrids.js +1 -1
- package/dist/generated/constants/actions-hrids.d.ts +1 -1
- package/dist/generated/constants/actions-hrids.js +1 -1
- package/dist/generated/constants/avatar-outfits-hrids.d.ts +1 -1
- package/dist/generated/constants/avatar-outfits-hrids.js +1 -1
- package/dist/generated/constants/avatars-hrids.d.ts +1 -1
- package/dist/generated/constants/avatars-hrids.js +1 -1
- package/dist/generated/constants/buff-types-hrids.d.ts +1 -1
- package/dist/generated/constants/buff-types-hrids.js +1 -1
- package/dist/generated/constants/chat-channel-types-hrids.d.ts +1 -1
- package/dist/generated/constants/chat-channel-types-hrids.js +1 -1
- package/dist/generated/constants/chat-icons-hrids.d.ts +1 -1
- package/dist/generated/constants/chat-icons-hrids.js +1 -1
- package/dist/generated/constants/combat-monsters-hrids.d.ts +1 -1
- package/dist/generated/constants/combat-monsters-hrids.js +1 -1
- package/dist/generated/constants/combat-styles-hrids.d.ts +1 -1
- package/dist/generated/constants/combat-styles-hrids.js +1 -1
- package/dist/generated/constants/community-buff-types-hrids.d.ts +1 -1
- package/dist/generated/constants/community-buff-types-hrids.js +1 -1
- package/dist/generated/constants/damage-types-hrids.d.ts +1 -1
- package/dist/generated/constants/damage-types-hrids.js +1 -1
- package/dist/generated/constants/equipment-types-hrids.d.ts +1 -1
- package/dist/generated/constants/equipment-types-hrids.js +1 -1
- package/dist/generated/constants/game-modes-hrids.d.ts +1 -1
- package/dist/generated/constants/game-modes-hrids.js +1 -1
- package/dist/generated/constants/guild-character-roles-hrids.d.ts +1 -1
- package/dist/generated/constants/guild-character-roles-hrids.js +1 -1
- package/dist/generated/constants/house-rooms-hrids.d.ts +1 -1
- package/dist/generated/constants/house-rooms-hrids.js +1 -1
- package/dist/generated/constants/index.d.ts +1 -1
- package/dist/generated/constants/index.js +1 -1
- package/dist/generated/constants/item-categories-hrids.d.ts +1 -1
- package/dist/generated/constants/item-categories-hrids.js +1 -1
- package/dist/generated/constants/item-locations-hrids.d.ts +1 -1
- package/dist/generated/constants/item-locations-hrids.js +1 -1
- package/dist/generated/constants/items-hrids.d.ts +1 -1
- package/dist/generated/constants/items-hrids.js +1 -1
- package/dist/generated/constants/leaderboard-categories-hrids.d.ts +1 -1
- package/dist/generated/constants/leaderboard-categories-hrids.js +1 -1
- package/dist/generated/constants/leaderboard-types-hrids.d.ts +1 -1
- package/dist/generated/constants/leaderboard-types-hrids.js +1 -1
- package/dist/generated/constants/name-colors-hrids.d.ts +1 -1
- package/dist/generated/constants/name-colors-hrids.js +1 -1
- package/dist/generated/constants/random-task-types-hrids.d.ts +1 -1
- package/dist/generated/constants/random-task-types-hrids.js +1 -1
- package/dist/generated/constants/recipes-hrids.d.ts +1 -1
- package/dist/generated/constants/recipes-hrids.js +1 -1
- package/dist/generated/constants/shop-categories-hrids.d.ts +1 -1
- package/dist/generated/constants/shop-categories-hrids.js +1 -1
- package/dist/generated/constants/shop-items-hrids.d.ts +1 -1
- package/dist/generated/constants/shop-items-hrids.js +1 -1
- package/dist/generated/constants/skills-hrids.d.ts +1 -1
- package/dist/generated/constants/skills-hrids.js +1 -1
- package/dist/generated/constants/task-shop-items-hrids.d.ts +1 -1
- package/dist/generated/constants/task-shop-items-hrids.js +1 -1
- package/dist/generated/game-logic/abilities.d.ts +1 -1
- package/dist/generated/game-logic/abilities.js +1 -1
- package/dist/generated/game-logic/action-categories.d.ts +1 -1
- package/dist/generated/game-logic/action-categories.js +1 -1
- package/dist/generated/game-logic/actions.d.ts +1 -1
- package/dist/generated/game-logic/actions.js +1 -1
- package/dist/generated/game-logic/avatar-outfits.d.ts +1 -1
- package/dist/generated/game-logic/avatar-outfits.js +1 -1
- package/dist/generated/game-logic/avatars.d.ts +1 -1
- package/dist/generated/game-logic/avatars.js +1 -1
- package/dist/generated/game-logic/buff-types.d.ts +1 -1
- package/dist/generated/game-logic/buff-types.js +1 -1
- package/dist/generated/game-logic/chat-channel-types.d.ts +1 -1
- package/dist/generated/game-logic/chat-channel-types.js +1 -1
- package/dist/generated/game-logic/chat-icons.d.ts +1 -1
- package/dist/generated/game-logic/chat-icons.js +1 -1
- package/dist/generated/game-logic/combat-monsters.d.ts +1 -1
- package/dist/generated/game-logic/combat-monsters.js +1 -1
- package/dist/generated/game-logic/combat-styles.d.ts +1 -1
- package/dist/generated/game-logic/combat-styles.js +1 -1
- package/dist/generated/game-logic/community-buff-types.d.ts +1 -1
- package/dist/generated/game-logic/community-buff-types.js +1 -1
- package/dist/generated/game-logic/damage-types.d.ts +1 -1
- package/dist/generated/game-logic/damage-types.js +1 -1
- package/dist/generated/game-logic/equipment-types.d.ts +1 -1
- package/dist/generated/game-logic/equipment-types.js +1 -1
- package/dist/generated/game-logic/game-modes.d.ts +1 -1
- package/dist/generated/game-logic/game-modes.js +1 -1
- package/dist/generated/game-logic/guild-character-roles.d.ts +1 -1
- package/dist/generated/game-logic/guild-character-roles.js +1 -1
- package/dist/generated/game-logic/house-rooms.d.ts +7 -7
- package/dist/generated/game-logic/house-rooms.js +1 -1
- package/dist/generated/game-logic/index.d.ts +3 -1
- package/dist/generated/game-logic/index.d.ts.map +1 -1
- package/dist/generated/game-logic/index.js +13 -1
- package/dist/generated/game-logic/index.js.map +1 -1
- package/dist/generated/game-logic/item-categories.d.ts +1 -1
- package/dist/generated/game-logic/item-categories.js +1 -1
- package/dist/generated/game-logic/item-locations.d.ts +1 -1
- package/dist/generated/game-logic/item-locations.js +1 -1
- package/dist/generated/game-logic/items.d.ts +1 -1
- package/dist/generated/game-logic/items.js +1 -1
- package/dist/generated/game-logic/leaderboard-categories.d.ts +1 -1
- package/dist/generated/game-logic/leaderboard-categories.js +1 -1
- package/dist/generated/game-logic/leaderboard-types.d.ts +1 -1
- package/dist/generated/game-logic/leaderboard-types.js +1 -1
- package/dist/generated/game-logic/name-colors.d.ts +1 -1
- package/dist/generated/game-logic/name-colors.js +1 -1
- package/dist/generated/game-logic/random-task-types.d.ts +1 -1
- package/dist/generated/game-logic/random-task-types.js +1 -1
- package/dist/generated/game-logic/recipe-calculator.d.ts +204 -0
- package/dist/generated/game-logic/recipe-calculator.d.ts.map +1 -0
- package/dist/generated/game-logic/recipe-calculator.js +360 -0
- package/dist/generated/game-logic/recipe-calculator.js.map +1 -0
- package/dist/generated/game-logic/recipe-tree.d.ts +123 -0
- package/dist/generated/game-logic/recipe-tree.d.ts.map +1 -0
- package/dist/generated/game-logic/recipe-tree.js +298 -0
- package/dist/generated/game-logic/recipe-tree.js.map +1 -0
- package/dist/generated/game-logic/recipes.d.ts +1 -1
- package/dist/generated/game-logic/recipes.js +1 -1
- package/dist/generated/game-logic/shop-categories.d.ts +1 -1
- package/dist/generated/game-logic/shop-categories.js +1 -1
- package/dist/generated/game-logic/shop-items.d.ts +1 -1
- package/dist/generated/game-logic/shop-items.js +1 -1
- package/dist/generated/game-logic/skills.d.ts +1 -1
- package/dist/generated/game-logic/skills.js +1 -1
- package/dist/generated/game-logic/task-shop-items.d.ts +1 -1
- package/dist/generated/game-logic/task-shop-items.js +1 -1
- package/dist/generated/game-logic/types.d.ts +1 -1
- package/dist/generated/game-logic/types.js +1 -1
- package/dist/generated/localization/en/abilities.d.ts +1 -1
- package/dist/generated/localization/en/abilities.js +1 -1
- package/dist/generated/localization/en/actions.d.ts +1 -1
- package/dist/generated/localization/en/actions.js +1 -1
- package/dist/generated/localization/en/house-rooms.d.ts +1 -1
- package/dist/generated/localization/en/house-rooms.js +1 -1
- package/dist/generated/localization/en/index.d.ts +1 -1
- package/dist/generated/localization/en/index.js +1 -1
- package/dist/generated/localization/en/items.d.ts +1 -1
- package/dist/generated/localization/en/items.js +1 -1
- package/dist/generated/localization/en/skills.d.ts +1 -1
- package/dist/generated/localization/en/skills.js +1 -1
- package/dist/generated/localization/index.d.ts +1 -1
- package/dist/generated/localization/index.js +1 -1
- package/dist/generated/localization/zh/abilities.d.ts +1 -1
- package/dist/generated/localization/zh/abilities.js +1 -1
- package/dist/generated/localization/zh/actions.d.ts +1 -1
- package/dist/generated/localization/zh/actions.js +1 -1
- package/dist/generated/localization/zh/house-rooms.d.ts +1 -1
- package/dist/generated/localization/zh/house-rooms.js +1 -1
- package/dist/generated/localization/zh/index.d.ts +1 -1
- package/dist/generated/localization/zh/index.js +1 -1
- package/dist/generated/localization/zh/items.d.ts +1 -1
- package/dist/generated/localization/zh/items.js +1 -1
- package/dist/generated/localization/zh/skills.d.ts +1 -1
- package/dist/generated/localization/zh/skills.js +1 -1
- package/dist/generated/player-data/index.d.ts +2 -2
- package/dist/generated/player-data/index.js +1 -1
- package/dist/generated/schemas/typebox/abilities.d.ts +1 -1
- package/dist/generated/schemas/typebox/abilities.js +1 -1
- package/dist/generated/schemas/typebox/action-categories.d.ts +1 -1
- package/dist/generated/schemas/typebox/action-categories.js +1 -1
- package/dist/generated/schemas/typebox/actions.d.ts +1 -1
- package/dist/generated/schemas/typebox/actions.js +1 -1
- package/dist/generated/schemas/typebox/avatar-outfits.d.ts +1 -1
- package/dist/generated/schemas/typebox/avatar-outfits.js +1 -1
- package/dist/generated/schemas/typebox/avatars.d.ts +1 -1
- package/dist/generated/schemas/typebox/avatars.js +1 -1
- package/dist/generated/schemas/typebox/buff-types.d.ts +1 -1
- package/dist/generated/schemas/typebox/buff-types.js +1 -1
- package/dist/generated/schemas/typebox/chat-channel-types.d.ts +1 -1
- package/dist/generated/schemas/typebox/chat-channel-types.js +1 -1
- package/dist/generated/schemas/typebox/chat-icons.d.ts +1 -1
- package/dist/generated/schemas/typebox/chat-icons.js +1 -1
- package/dist/generated/schemas/typebox/combat-monsters.d.ts +1 -1
- package/dist/generated/schemas/typebox/combat-monsters.js +1 -1
- package/dist/generated/schemas/typebox/combat-styles.d.ts +1 -1
- package/dist/generated/schemas/typebox/combat-styles.js +1 -1
- package/dist/generated/schemas/typebox/community-buff-types.d.ts +1 -1
- package/dist/generated/schemas/typebox/community-buff-types.js +1 -1
- package/dist/generated/schemas/typebox/damage-types.d.ts +1 -1
- package/dist/generated/schemas/typebox/damage-types.js +1 -1
- package/dist/generated/schemas/typebox/equipment-types.d.ts +1 -1
- package/dist/generated/schemas/typebox/equipment-types.js +1 -1
- package/dist/generated/schemas/typebox/game-modes.d.ts +1 -1
- package/dist/generated/schemas/typebox/game-modes.js +1 -1
- package/dist/generated/schemas/typebox/guild-character-roles.d.ts +1 -1
- package/dist/generated/schemas/typebox/guild-character-roles.js +1 -1
- package/dist/generated/schemas/typebox/house-rooms.d.ts +1 -1
- package/dist/generated/schemas/typebox/house-rooms.js +1 -1
- package/dist/generated/schemas/typebox/index.d.ts +1 -1
- package/dist/generated/schemas/typebox/index.js +1 -1
- package/dist/generated/schemas/typebox/item-categories.d.ts +1 -1
- package/dist/generated/schemas/typebox/item-categories.js +1 -1
- package/dist/generated/schemas/typebox/item-locations.d.ts +1 -1
- package/dist/generated/schemas/typebox/item-locations.js +1 -1
- package/dist/generated/schemas/typebox/items.d.ts +1 -1
- package/dist/generated/schemas/typebox/items.js +1 -1
- package/dist/generated/schemas/typebox/leaderboard-categories.d.ts +1 -1
- package/dist/generated/schemas/typebox/leaderboard-categories.js +1 -1
- package/dist/generated/schemas/typebox/leaderboard-types.d.ts +1 -1
- package/dist/generated/schemas/typebox/leaderboard-types.js +1 -1
- package/dist/generated/schemas/typebox/name-colors.d.ts +1 -1
- package/dist/generated/schemas/typebox/name-colors.js +1 -1
- package/dist/generated/schemas/typebox/player-data.d.ts +1 -1
- package/dist/generated/schemas/typebox/player-data.js +2 -2
- package/dist/generated/schemas/typebox/random-task-types.d.ts +1 -1
- package/dist/generated/schemas/typebox/random-task-types.js +1 -1
- package/dist/generated/schemas/typebox/shop-categories.d.ts +1 -1
- package/dist/generated/schemas/typebox/shop-categories.js +1 -1
- package/dist/generated/schemas/typebox/shop-items.d.ts +1 -1
- package/dist/generated/schemas/typebox/shop-items.js +1 -1
- package/dist/generated/schemas/typebox/skills.d.ts +1 -1
- package/dist/generated/schemas/typebox/skills.js +1 -1
- package/dist/generated/schemas/typebox/task-shop-items.d.ts +1 -1
- package/dist/generated/schemas/typebox/task-shop-items.js +1 -1
- package/dist/generated/schemas/zod/abilities.d.ts +1 -1
- package/dist/generated/schemas/zod/abilities.js +1 -1
- package/dist/generated/schemas/zod/action-categories.d.ts +1 -1
- package/dist/generated/schemas/zod/action-categories.js +1 -1
- package/dist/generated/schemas/zod/actions.d.ts +1 -1
- package/dist/generated/schemas/zod/actions.js +1 -1
- package/dist/generated/schemas/zod/avatar-outfits.d.ts +1 -1
- package/dist/generated/schemas/zod/avatar-outfits.js +1 -1
- package/dist/generated/schemas/zod/avatars.d.ts +1 -1
- package/dist/generated/schemas/zod/avatars.js +1 -1
- package/dist/generated/schemas/zod/buff-types.d.ts +35 -35
- package/dist/generated/schemas/zod/buff-types.js +1 -1
- package/dist/generated/schemas/zod/chat-channel-types.d.ts +1 -1
- package/dist/generated/schemas/zod/chat-channel-types.js +1 -1
- package/dist/generated/schemas/zod/chat-icons.d.ts +1 -1
- package/dist/generated/schemas/zod/chat-icons.js +1 -1
- package/dist/generated/schemas/zod/combat-monsters.d.ts +1 -1
- package/dist/generated/schemas/zod/combat-monsters.js +1 -1
- package/dist/generated/schemas/zod/combat-styles.d.ts +1 -1
- package/dist/generated/schemas/zod/combat-styles.js +1 -1
- package/dist/generated/schemas/zod/community-buff-types.d.ts +18 -18
- package/dist/generated/schemas/zod/community-buff-types.js +1 -1
- package/dist/generated/schemas/zod/damage-types.d.ts +1 -1
- package/dist/generated/schemas/zod/damage-types.js +1 -1
- package/dist/generated/schemas/zod/equipment-types.d.ts +1 -1
- package/dist/generated/schemas/zod/equipment-types.js +1 -1
- package/dist/generated/schemas/zod/game-modes.d.ts +1 -1
- package/dist/generated/schemas/zod/game-modes.js +1 -1
- package/dist/generated/schemas/zod/guild-character-roles.d.ts +1 -1
- package/dist/generated/schemas/zod/guild-character-roles.js +1 -1
- package/dist/generated/schemas/zod/house-rooms.d.ts +35 -35
- package/dist/generated/schemas/zod/house-rooms.js +1 -1
- package/dist/generated/schemas/zod/index.d.ts +1 -1
- package/dist/generated/schemas/zod/index.js +1 -1
- package/dist/generated/schemas/zod/item-categories.d.ts +1 -1
- package/dist/generated/schemas/zod/item-categories.js +1 -1
- package/dist/generated/schemas/zod/item-locations.d.ts +3 -3
- package/dist/generated/schemas/zod/item-locations.js +1 -1
- package/dist/generated/schemas/zod/items.d.ts +1 -1
- package/dist/generated/schemas/zod/items.js +1 -1
- package/dist/generated/schemas/zod/leaderboard-categories.d.ts +1 -1
- package/dist/generated/schemas/zod/leaderboard-categories.js +1 -1
- package/dist/generated/schemas/zod/leaderboard-types.d.ts +1 -1
- package/dist/generated/schemas/zod/leaderboard-types.js +1 -1
- package/dist/generated/schemas/zod/name-colors.d.ts +1 -1
- package/dist/generated/schemas/zod/name-colors.js +1 -1
- package/dist/generated/schemas/zod/player-data.d.ts +141 -141
- package/dist/generated/schemas/zod/player-data.js +2 -2
- package/dist/generated/schemas/zod/random-task-types.d.ts +1 -1
- package/dist/generated/schemas/zod/random-task-types.js +1 -1
- package/dist/generated/schemas/zod/shop-categories.d.ts +1 -1
- package/dist/generated/schemas/zod/shop-categories.js +1 -1
- package/dist/generated/schemas/zod/shop-items.d.ts +1 -1
- package/dist/generated/schemas/zod/shop-items.js +1 -1
- package/dist/generated/schemas/zod/skills.d.ts +1 -1
- package/dist/generated/schemas/zod/skills.js +1 -1
- package/dist/generated/schemas/zod/task-shop-items.d.ts +1 -1
- package/dist/generated/schemas/zod/task-shop-items.js +1 -1
- 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":"AAAA;;;GAGG;AAoBH,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AA+FxC;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAsB,EACtB,SAAqB,EACrB,UAAmB;IAEnB,MAAM,SAAS,GAAkB;QAC/B,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,CAAC;QAChB,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;KACd,CAAA;IAED,kEAAkE;IAClE,IAAI,SAAS,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA;QAC7E,IAAI,KAAK,EAAE,CAAC;YACV,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAmB,EAAE,EAAE,CACrE,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CACjE,CAAA;QAED,qEAAqE;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAmB,EAAE,EAAE;YACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAA;YACnD,2EAA2E;YAC3E,SAAS,CAAC,SAAS,IAAI,gBAAgB,GAAG,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,8CAA8C;IAC9C,MAAM,QAAQ,GAAG;QACf,UAAU,CAAC,yBAAyB;QACpC,UAAU,CAAC,2BAA2B;QACtC,UAAU,CAAC,uBAAuB;QAClC,UAAU,CAAC,4BAA4B;QACvC,UAAU,CAAC,2BAA2B;KACvC,CAAA;IAED,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,IAAI,OAAO,IAAI,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;YACjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAU,EAAE,EAAE;oBAC3B,cAAc;oBACd,IAAI,IAAI,CAAC,QAAQ,KAAK,0BAA0B;wBAC5C,IAAI,CAAC,QAAQ,KAAK,+BAA+B,EAAE,CAAC;wBACtD,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;oBACvC,CAAC;oBACD,mBAAmB;oBACnB,IAAI,IAAI,CAAC,QAAQ,KAAK,wBAAwB,EAAE,CAAC;wBAC/C,SAAS,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;oBAC5C,CAAC;oBACD,+EAA+E;oBAC/E,iDAAiD;gBACnD,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,+BAA+B;IAC/B,IAAI,UAAU,CAAC,qBAAqB,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAwB,EAAE,EAAE;YACnF,kDAAkD;YAClD,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,eAAuB,EACvB,SAAwB;IAExB,kDAAkD;IAClD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EACjC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAC7F,CAAA;IACD,MAAM,oBAAoB,GAAG,CAAC,GAAG,eAAe,GAAG,GAAG,CAAA;IAEtD,qDAAqD;IACrD,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAClF,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAE/E,sDAAsD;IACtD,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS,CAAA;IAC3D,MAAM,eAAe,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7E,uBAAuB;IACvB,IAAI,SAAS,GAAG,eAAe,CAAA;IAC/B,SAAS,IAAI,oBAAoB,CAAA;IACjC,SAAS,IAAI,cAAc,CAAA;IAC3B,SAAS,IAAI,aAAa,CAAA;IAC1B,SAAS,IAAI,eAAe,CAAA;IAE5B,+BAA+B;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAkB;IACxD,qEAAqE;IACrE,0CAA0C;IAC1C,sDAAsD;IACtD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAkB,EAClB,cAAsB,EACtB,UAAuB,EACvB,UAAuB;IAEvB,mDAAmD;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;IAErF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED,uEAAuE;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;IAE3E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,CAAC,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IAEtD,sBAAsB;IACtB,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,WAAW,CAAC,GAAG,UAAU,CAAA;IAEzE,kDAAkD;IAClD,IAAI,mBAAmB,GAAG,eAAe,CAAA;IACzC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,sBAAsB,CACtC,UAAU,EACV,MAAM,CAAC,gBAAgB,EAAE,SAAsB,EAC/C,MAAM,CAAC,IAAI,CACZ,CAAA;QACD,mBAAmB,GAAG,qBAAqB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAA;IACzE,CAAC;IAED,2BAA2B;IAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,CAAA;IAC9D,MAAM,gBAAgB,GAAG,aAAa,GAAG,mBAAmB,CAAA;IAC5D,MAAM,YAAY,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,mBAAmB,CAAA;IAEhE,OAAO;QACL,QAAQ;QACR,UAAU,EAAE,MAAM,CAAC,IAAI;QACvB,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,eAAe;QACf,mBAAmB;QACnB,gBAAgB;QAChB,aAAa;QACb,YAAY;KACb,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAsB,EACtB,QAAkB;IAElB,IAAI,KAAK,GAAG,CAAC,CAAA;IAEb,4BAA4B;IAC5B,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;QAC9B,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAmB,EAAE,EAAE;YACxD,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/B,KAAK,IAAI,IAAI,CAAC,KAAK,CAAA;YACrB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAoB,EACpB,UAAuB,EACvB,eAAwB,KAAK;IAE7B,MAAM,iBAAiB,GAAG,UAAU,IAAI,YAAY;QAClD,CAAC,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;QACjD,CAAC,CAAC,CAAC,CAAA;IAEL,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAA;IAErE,IAAI,gBAAoC,CAAA;IACxC,IAAI,oBAAwC,CAAA;IAC5C,IAAI,eAAmC,CAAA;IACvC,IAAI,iBAAgD,CAAA;IAEpD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,2BAA2B;QAC3B,gBAAgB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,UAAU,CAAA;QAE/D,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,sBAAsB,CACtC,UAAU,EACV,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAkC,EAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CACjB,CAAA;YACD,oBAAoB,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAA;YAEzE,4CAA4C;YAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC,CAAA;YAC/F,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,CAAA;YAClE,oBAAoB,IAAI,kBAAkB,CAAA;YAE1C,eAAe,GAAG,CAAC,CAAC,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,gBAAgB,CAAC,GAAG,GAAG,CAAA;QACxF,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,cAAc,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACrD,6CAA6C;QAC7C,iBAAiB,GAAG,qBAAqB,CACvC,IAAI,CAAC,QAAQ,EACb,cAAc,EACd,UAAU,CACX,IAAI,SAAS,CAAA;IAChB,CAAC;IAED,+BAA+B;IAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CACjD,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,CACnD,CAAA;IAED,OAAO;QACL,GAAG,IAAI;QACP,iBAAiB;QACjB,cAAc;QACd,gBAAgB;QAChB,oBAAoB;QACpB,eAAe;QACf,iBAAiB;QACjB,QAAQ,EAAE,gBAAgB;KAC3B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAwB;IAExB,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAA;IAEhD,IAAI,yBAAyB,GAAG,CAAC,CAAA;IACjC,IAAI,kBAAkB,GAAG,CAAC,CAAA;IAC1B,MAAM,kBAAkB,GAAgE,EAAE,CAAA;IAC1F,MAAM,eAAe,GAKhB,EAAE,CAAA;IAEP,SAAS,QAAQ,CAAC,IAAwB;QACxC,sBAAsB;QACtB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,yBAAyB,IAAI,IAAI,CAAC,oBAAoB,CAAA;QACxD,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,kBAAkB,IAAI,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAA;QAC/D,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC3E,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAA;YAC7C,CAAC;iBAAM,CAAC;gBACN,kBAAkB,CAAC,IAAI,CAAC;oBACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,iBAAiB;iBACjC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAA;YACxE,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAA;YAChD,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,IAAI,CAAC;oBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;iBAC1C,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjC,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEd,OAAO;QACL,GAAG,SAAS;QACZ,yBAAyB;QACzB,kBAAkB;QAClB,iBAAiB,EAAE,yBAAyB,GAAG,kBAAkB;QACjE,kBAAkB;QAClB,eAAe;KAChB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC3C,QAAkB,EAClB,WAAmB,CAAC,EACpB,UAAuB,EACvB,UAGI,EAAE;IAaN,yBAAyB;IACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAEpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2BAA2B;IAC3B,MAAM,YAAY,GAAG,iBAAiB,CACpC,QAAQ,EACR,UAAU,EACV,OAAO,CAAC,YAAY,IAAI,KAAK,CAC9B,CAAA;IAED,uBAAuB;IACvB,MAAM,KAAK,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAA;IAElD,eAAe;IACf,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;QAErC,MAAM,KAAK,GAAG,EAAE,CAAA;QAChB,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QACtC,IAAI,OAAO,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAA;QAC1C,IAAI,IAAI,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAA;QAEpC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;IAChC,CAAC,CAAA;IAED,8BAA8B;IAC9B,MAAM,gBAAgB,GAAG,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtE,OAAO,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAA;IAC7B,CAAC,EAAE,CAAC,CAAC,CAAA;IAEL,iBAAiB;IACjB,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC9C,YAAY,EAAE,UAAU,CAAC,KAAK,CAAC,yBAAyB,CAAC;QACzD,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACnD,gBAAgB;QAChB,sBAAsB,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACvD,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,CAChC;QACD,iBAAiB,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC/C,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,CACtC;KACF,CAAA;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK;QACL,OAAO;KACR,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAsB,EACtB,OAAiB;IAOjB,MAAM,OAAO,GAAG,EAAE,CAAA;IAElB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAgE,EAAE,CAAA;QACpF,IAAI,QAAQ,GAAG,IAAI,CAAA;QACnB,IAAI,SAAS,GAAG,QAAQ,CAAA;QAExB,wBAAwB;QACxB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAA;YAE1B,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;gBAClB,QAAQ,GAAG,KAAK,CAAA;gBAChB,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/D,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,eAA2B,CAAC,CAAA;YACjF,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACb,QAAQ,GAAG,KAAK,CAAA;gBAChB,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,eAA2B,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YACtF,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,MAAM;YACN,QAAQ;YACR,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtC,YAAY;SACb,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,eAAe,EAAE,CAAC,UAAuB,EAAE,EAAE,CAC3C,6BAA6B,CAAC,wBAAoC,EAAE,CAAC,EAAE,UAAU,CAAC;IACpF,WAAW,EAAE,CAAC,UAAuB,EAAE,EAAE,CACvC,6BAA6B,CAAC,oBAAgC,EAAE,CAAC,EAAE,UAAU,CAAC;IAChF,cAAc,EAAE,CAAC,UAAuB,EAAE,EAAE,CAC1C,6BAA6B,CAAC,uBAAmC,EAAE,CAAC,EAAE,UAAU,CAAC;CACpF,CAAA"}
|