# Lootbox Creation Guide Currently, the Item Wizard does not support creating **Lootbox** items directly. Instead, they must be inserted manually into the database. This guide details the required JSON structure for the `LOOTBOX` effect. ## Item Structure To create a lootbox, you need to insert a row into the `items` table. The critical part is the `usageData` JSON column. ```json { "consume": true, "effects": [ { "type": "LOOTBOX", "pool": [ ... ] } ] } ``` ## Loot Table Structure The `pool` property is an array of `LootTableItem` objects. A random item is selected based on the total `weight` of all items in the pool. | Field | Type | Description | |-------|------|-------------| | `type` | `string` | One of: `CURRENCY`, `ITEM`, `XP`, `NOTHING`. | | `weight` | `number` | The relative probability weight of this outcome. | | `message` | `string` | (Optional) Custom message to display when this outcome is selected. | ### Outcome Types #### 1. Currency Gives the user coins. ```json { "type": "CURRENCY", "weight": 50, "amount": 100, // Fixed amount OR "minAmount": 50, // Minimum random amount "maxAmount": 150 // Maximum random amount } ``` #### 2. XP Gives the user Experience Points. ```json { "type": "XP", "weight": 30, "amount": 500 // Fixed amount OR range (minAmount/maxAmount) } ``` #### 3. Item Gives the user another item (by ID). ```json { "type": "ITEM", "weight": 10, "itemId": 42, // The ID of the item to give "amount": 1 // (Optional) Quantity to give, default 1 } ``` #### 4. Nothing An empty roll. ```json { "type": "NOTHING", "weight": 10, "message": "The box was empty! Better luck next time." } ``` ## Complete Example Here is a full SQL insert example (using a hypothetical SQL client or Drizzle studio) for a "Basic Lootbox": **Name**: Basic Lootbox **Type**: CONSUMABLE **Effect**: - 50% chance for 100-200 Coins - 30% chance for 500 XP - 10% chance for Item ID 5 (e.g. Rare Gem) - 10% chance for Nothing **JSON for `usageData`**: ```json { "consume": true, "effects": [ { "type": "LOOTBOX", "pool": [ { "type": "CURRENCY", "weight": 50, "minAmount": 100, "maxAmount": 200 }, { "type": "XP", "weight": 30, "amount": 500 }, { "type": "ITEM", "weight": 10, "itemId": 5, "amount": 1, "message": "Startstruck! You found a Rare Gem!" }, { "type": "NOTHING", "weight": 10, "message": "It's empty..." } ] } ] } ```