@reldens/items-system
Version:
Reldens - Items System
265 lines (195 loc) • 8.48 kB
Markdown
# Events and Error Codes Reference
Quick reference for all events and error codes in the items system.
## Events
All events are prefixed with `reldens.items.` by default.
### Manager Events
- `reldens.items.setup` - ItemsManager initialization complete
- Payload: `{props, manager}`
### Inventory Events
- `reldens.items.validate` - Item validation
- Payload: `inventory, item, validationResult`
- `reldens.items.addItemBefore` - Before adding item
- Payload: `inventory, item`
- `reldens.items.addItem` - After adding item
- Payload: `inventory, item`
- `reldens.items.removeItem` - Removing item
- Payload: `inventory, itemKey`
- `reldens.items.modifyItemQty` - Quantity modified
- Payload: `item, inventory, operation, key, qty`
- `reldens.items.setItems` - Items set
- Payload: `{items, manager}`
- `reldens.items.setGroups` - Groups set
- Payload: `{groups, manager}`
- `reldens.items.loadedOwnerItems` - Owner items loaded
- Payload: varies
### Equipment Events
- `reldens.items.equipItem` - Item equipped
- Payload: `item, target`
- `reldens.items.unequipItem` - Item unequipped
- Payload: `item, target`
- `reldens.items.equipBeforeApplyModifiers` - Before applying modifiers
- Payload: `item`
- `reldens.items.equipBeforeRevertModifiers` - Before reverting modifiers
- Payload: `item`
- `reldens.items.equipAppliedModifiers` - After applying modifiers
- Payload: `item`
- `reldens.items.equipRevertedModifiers` - After reverting modifiers
- Payload: `item`
### Item Execution Events
- `reldens.items.executingItem` - Before item execution
- Payload: `item, target`
- `reldens.items.executedItem` - After item execution
- Payload: `item, target`
### Exchange Events
- `reldens.items.initialized` - Exchange initialized
- Payload: `{exchangePlatform, props, inventoryA, inventoryB}`
- `reldens.items.canceled` - Exchange canceled
- Payload: `{exchangePlatform}`
- `reldens.items.invalidPush` - Invalid item push attempt
- Payload: `{exchangePlatform, itemUid, qty, inventoryKey}`
- `reldens.items.itemPushed` - Item successfully pushed
- Payload: `{exchangePlatform, itemUid, qty, inventoryKey}`
- `reldens.items.itemRemove` - Item removed from exchange
- Payload: `{exchangePlatform, itemUid, inventoryKey}`
- `reldens.items.confirm` - Exchange confirmed
- Payload: `{exchangePlatform, inventoryKey}`
- `reldens.items.disconfirm` - Exchange disconfirmed
- Payload: `{exchangePlatform, inventoryKey}`
- `reldens.items.beforeFinalize` - Before exchange finalization
- Payload: `{exchangePlatform}`
- `reldens.items.finalized` - Exchange finalized
- Payload: `{exchangePlatform}`
## Error Codes
All error codes are prefixed with `items.` by default.
### Inventory Error Codes
- `items.undefinedItem` - Item is undefined
- `items.undefinedMethodInventoryId` - Item missing getInventoryId() method
- `items.undefinedItemKey` - Item missing key property
- `items.invalidItemInstance` - Item instance failed validation
- `items.lockedForAddItem` - Inventory locked, cannot add item
- `items.maxTotalReachedForAddItem` - Maximum total items reached
- `items.itemExistsForAddItem` - Item already exists (non-single items)
- `items.itemLimitExceededForAddItem` - Item quantity exceeds limit
- `items.addItemsError` - Error adding items array
- `items.lockedForSetItem` - Inventory locked, cannot set item
- `items.lockedForRemoveItem` - Inventory locked, cannot remove item
- `items.keyNotFound` - Item key not found in inventory
- `items.lockedForModifyItemQty` - Inventory locked, cannot modify quantity
- `items.undefinedItemKeyForOperation` - Item key undefined for operation
- `items.qtyNotANumber` - Quantity is not a number
- `items.itemQtyLimitExceeded` - Item quantity limit exceeded
- `items.lockedForSetItems` - Inventory locked, cannot set items
### Exchange Error Codes
- `items.exchange.missingConfirmation` - Both parties must confirm exchange
- `items.exchange.invalidPushedQuantity` - Pushed quantity exceeds available quantity
- `items.exchange.invalidQuantity` - Invalid quantity (e.g., 0)
- `items.exchange.invalidExchange` - Invalid exchange (FROM and TO are same)
- `items.exchange.decreaseQuantity` - Failed to decrease item quantity
- `items.exchange.itemAdd` - Failed to add item to inventory
### Requirements Error Codes
- `items.requirements.itemNotPresent` - Required item not present in inventory
- `items.requirements.quantityNotAvailable` - Required quantity not available
- `items.requirements.itemNotPushed` - Required item not pushed for exchange
- `items.requirements.itemQuantityNotPushed` - Required quantity not pushed
- `items.requirements.itemDoesNotExists` - Required item doesn't exist
- `items.requirements.itemAdd` - Failed to add requirement item
### Rewards Error Codes
- `items.reward.doesNotExists` - Reward doesn't exist
- `items.reward.missingItem` - Reward item missing
- `items.reward.itemNotPresent` - Reward item not present
- `items.reward.quantityNotAvailable` - Reward quantity not available
- `items.reward.missingPushed` - Missing pushed items for reward
- `items.reward.getItemDoesNotExists` - Get item doesn't exist
- `items.reward.processItem` - Failed to process reward item
- `items.reward.processInventory` - Failed to process reward inventory
- `items.reward.addItems` - Failed to add reward items
- `items.reward.quantityOverload` - Reward quantity exceeds limits
### Equipment Error Codes
- `items.equipment.modifiersApply` - Failed to apply equipment modifiers
- `items.equipment.modifiersRevert` - Failed to revert equipment modifiers
## Action Constants
Used for client/server communication.
- `rinvA` - Add item action
- `rinvR` - Remove item action
- `rinvM` - Modify quantity action
- `rinvE` - Equip item action
- `rinvU` - Unequip item action
- `rinvMa` - Modifier applied action
- `rinvMr` - Modifier reverted action
- `rinvEx` - Executing item action
- `rinvAExd` - Item executed action
- `rinvMi` - Manager initialized action
- `rinvSi` - Set items action
- `rinvSg` - Set groups action
## Item Type Constants
- `10` - ITEM_BASE - Base item type
- `1` - EQUIPMENT - Equipment items
- `2` - USABLE - Usable/consumable items
- `3` - SINGLE - Single-instance items (stackable)
- `4` - SINGLE_EQUIPMENT - Single-instance equipment
- `5` - SINGLE_USABLE - Single-instance usable
## Trade Action Constants
- `buy` - Buy action
- `sell` - Sell action
- `trade` - Trade action
## Communication Behavior Constants
- `send` - Send to specific client
- `broadcast` - Broadcast to all clients
- `both` - Both send and broadcast
## Common Error Handling Pattern
```javascript
let result = await inventory.addItem(item);
if(false === result){
let error = inventory.lastError;
console.error('Error Code:', error.code);
console.error('Error Message:', error.message);
console.error('Error Data:', error.data);
if(error.error){
console.error('Nested Error:', error.error);
}
}
```
## Event Listening Pattern
```javascript
itemsManager.listenEvent(
ItemsEvents.ADD_ITEM,
(inventory, item) => {
console.log('Item added:', item.key);
},
'unique-listener-key'
);
```
## Custom Events with Prefix
When creating ItemGroup or using custom eventsPrefix:
```javascript
let group = new ItemGroup({
id: 1,
key: 'equipment',
eventsPrefix: 'player123.'
});
// Events will be: player123.g.equipment.reldens.items.addItem
// Format: {playerPrefix}.g.{groupKey}.{eventName}
```
## Event Propagation
1. Item events bubble up through manager
2. Manager events can be global or owner-specific
3. Exchange events are platform-specific
4. All events go through EventsManager (from @reldens/utils)
## Error Context
Errors include contextual data in the `data` property:
```javascript
{
code: 'items.itemLimitExceededForAddItem',
message: 'Cannot add item, item qty limit exceeded.',
data: {
itemUid: 'sword_abc123',
qty: 150
}
}
```
Common data fields:
- `itemUid` - Item unique ID
- `qty` - Quantity involved
- `operation` - Operation type (set, increase, decrease)
- `limitPerItem` - Limit that was exceeded
- `confirmations` - Confirmation status (exchange)