Exchange¶
Overview¶
The exchange system lets players trade items at an NPC: requirements (currency, action limits, items) are checked, then the server performs the exchange and grants or removes items. Interaction uses IMIPInteractableComponentInterface; the NPC implements IMIPExchangeInterface and exposes an exchange tag for UMIPPlayerExchangeManager to resolve MIPExchangeDataAsset offers.
Vendor (purchase + repurchase) builds on the same manager base; see Vendor and Vendor Repurchasing — not detailed here.
All paths below are relative to Plugins/ModularInventoryPlus/Source/ModularInventoryPlus/.
Key Classes & Files¶
| Class | File |
|---|---|
| UMIPBaseExchangeManager | Public/Exchange/MIPBaseExchangeManager.h |
| UMIPBaseInteractableExchangeManager | Public/Exchange/MIPBaseInteractableExchangeManager.h |
| UMIPPlayerExchangeManager | Public/Exchange/MIPPlayerExchangeManager.h |
| MIPExchangeDataAsset | Public/DataAsset/MIPExchangeDataAsset.h |
| Exchange widgets | Public/Widget/Exchange/* |
Hierarchy¶
UMIPBasePlayerControllerComponent
└── UMIPBaseExchangeManager (abstract)
└── UMIPBaseInteractableExchangeManager (IMIPInteractableComponentInterface)
└── UMIPPlayerExchangeManager
UMIPPlayerVendorManager shares this base; see Vendor.
UMIPBaseExchangeManager¶
- Base: UMIPBasePlayerControllerComponent.
- API: ExchangeItem(InItemInfo, InScope, InAmount) – checks requirements then Server_ExchangeItem; GetExchangeItems(InScope) – returns generated list (e.g. Personal). OnExchangeItemCompleted(InItemTag, InAmount) (BlueprintNativeEvent) – grant output.
- Delegate: OnExchangeItemsGenerated.
- Scope: EMIPExchangeScope (e.g. Personal, Account) for where generated items are stored.
- Requirements: CheckExchangeItemRequirement (currency, action limit, item); uses GetActionLimitManagerComponent(), GetCurrencyComponent(), GetPlayerServerIMC(). FMIPExchangeItemInfo holds item tag, cost, action limit requirement, etc. EExchangeRequirementResult for pass/fail.
- Storage: PersonalGeneratedExchangeItems (and in subclasses AccountGeneratedExchangeItems).
UMIPBaseInteractableExchangeManager¶
- Base: UMIPBaseExchangeManager; IMIPInteractableComponentInterface.
- Flow: BeginPlay → init interaction listener. OnInteractedServer/Client – open UI, GenerateExchangeItems(InInteractingObject). OnEndInteractedServer/Client – close UI. InteractionListenerObjectClass (EditAnywhere), InteractionListenerObject (held ref).
- GenerateExchangeItems – virtual; subclasses fill the list from the interacting object / data asset.
UMIPPlayerExchangeManager¶
- Override: GenerateExchangeItems (from interacting NPC’s exchange tag); GetExchangeItems(InScope) returns Personal or Account list. OnEndInteracted*.
- API: GetPersonalExchangeItems(), GetAccountExchangeItems().
- Storage: PersonalGeneratedExchangeItems, AccountGeneratedExchangeItems. InteractingExchangeTag (current NPC exchange tag).
Data assets¶
- MIPExchangeDataAsset – Defines exchange offers (item, cost, requirements) for an exchange NPC.
The NPC exposes GetExchangeTag(); the manager uses it to look up the data asset and generate the list.
Integration¶
- Action limit: FMIPExchangeItemInfo can include FMIPActionLimitRequirement; CheckExchangeItemRequirement uses GetActionLimitManagerComponent(). See ActionLimit.
- Currency: Cost and HasEnoughCurrency/RemoveCurrency via GetCurrencyComponent(). See Currency.
- Inventory: Add/remove items via GetPlayerServerIMC().
- NPC: NPC actors implement IMIPExchangeInterface for exchange-only NPCs.
- Vendor: Vendor, Vendor Repurchasing.