Skip to main content

Usable items

The inventory knows an item was used. It does not know what "used" means — that is your game, and the seam between the two is a single event.

The fragment​

FEDUsableFragment makes an item usable:

FieldMeaning
Use Effect TagWhat using it means, e.g. Inventory.UseEffect.Heal. The inventory never interprets this.
Use VerbThe UI label — "Eat", "Drink", "Read". Defaults to "Use".
Consume On UseWhether a unit is spent.
Units Per UseHow many, when it is.

An item with no Usable fragment cannot be used, and IsUsable says so.

Using one​

// Safe anywhere: runs now on the authority, travels to the server from a client.
UEDUsableStatics::RequestUseItem(Container, Handle);
Is Usable       (Entry)                              → Boolean
Get Use Info (Entry) → Tag, Verb, Consumes, Units
Request Use Item (Container, Handle)

RequestUseItem runs an FEDUseItemTransaction: consumption and the effect happen together, or neither does.

The handoff​

The item is consumed by the inventory; the effect is yours. Subscribe once:

void AMyCharacter::BeginPlay()
{
Super::BeginPlay();

if (UEDUsableSubsystem* Usable = UEDUsableSubsystem::Get(this))
{
Usable->OnItemUsed.AddDynamic(this, &AMyCharacter::HandleItemUsed);
}
}

void AMyCharacter::HandleItemUsed(const FEDItemUsedEvent& Event)
{
// Event.UseEffectTag, Event.Instigator, Event.Container, Event.Handle
if (const TSubclassOf<UGameplayEffect>* Effect = UseEffectMap.Find(Event.UseEffectTag))
{
ApplyGameplayEffectToSelf(*Effect);
}
}

A tag-to-effect map is the pattern the demo uses, and it is worth copying: adding a new consumable becomes an item asset plus a map entry, with no code.

OnItemUsed fires on the authority. Replicate whatever the player should see — a GAS effect already replicates, so usually there is nothing to do.

Why the inventory does not apply the effect​

Because Core has no dependency on GAS, and should not. An inventory that knew about health would be an inventory you could not use in a game without health.

The tag is the seam. What it means is a decision the inventory is not qualified to make.

Cooldowns and conditions​

Neither is in the fragment, on purpose. A cooldown is a gameplay concern with a dozen reasonable implementations; gate RequestUseItem behind whatever your game already uses.

For conditions that are about the item — "requires a lit torch", "requires Strength 12" — use a Prerequisites fragment. Those are evaluated by the inventory at the acceptance gate and come back as player-readable text.

Where next​