Common Issues
| Symptom | Check |
|---|---|
| Plugin fails to compile/load | Engine 5.7 target, C++ toolchain, descriptor and build output |
| GetItemByID returns null | DatabaseArray, database Entrys, ItemID, async load state and duplicate logs |
| Inventory component not found | Current Pawn, its PlayerState, interface and exact identity tag |
| Client mutation fails | Execute on the server through an owned project RPC |
| Too few items added | Capacity limits; consume OutAddedAmount and keep the remainder |
| Item stacks despite bCanStack=false | Native systemic add follows MaxStackSize; configure it as 1 |
| Weight becomes stale after AddToSlot | Native slot-add omits UpdateInventoryCarryWeight |
| Specific removal affects another inventory | Current dispatcher uses default database routing |
| TransferOwnSlot always fails | Wrapper leaves RequestedAmount at zero; generic validation rejects it |
| External transfer moves in the unexpected direction | First tag is the requesting Pawn's destination; second is OtherPawn's source |
| Entry remains hidden | Missing slot data, failed async lookup or unresolved visual prediction |
| Tooltip path crashes | ToolTipMap must contain the displayed non-None ItemType |
| Listen-server UI does not update | Server mutations do not broadcast matching native slot events |
| Duplicate widgets after refresh | Avoid repeated InitAfterBPConstruction without clearing/rebuilding children |
Do not compensate for a transfer failure by issuing an unverified second add/remove: some paths can change state before returning failure. Inspect source behavior and current quantities. The detailed Implementation Limits page distinguishes setup errors from implementation defects.