Skip to content

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.