#
Quick Start Guide
Get up and running with AP Attribute Suite in minutes.
Support: discord.gg/n5HxmrkpC4
#
1. Installation
- Copy the
AfterPrimeAttributeSuite/folder into your project'sPlugins/directory. - Open your project in UE5 — go to Edit → Plugins, search "Attribute Suite", and enable it.
- Restart the editor when prompted.
#
2. Create an Attribute Set Data Asset
Attributes are defined as Data Assets — no code required.
- In the Content Browser: Right-click → Miscellaneous → Data Asset.
- Select AP_AttributeSet as the class.
- Name it (e.g.,
DA_PlayerAttributes). - Open it and add rows to the Definitions array:
#
Example Configuration
Custom Tags
You can use any FGameplayTag — not limited to the AP.Attribute.* namespace. Add your own tags in Project Settings → Gameplay Tags.
#
3. Add the Component
- Open your Character or Actor Blueprint.
- Click Add Component → search for AP_AttributeSuite → add it.
- Select the component in the Components panel.
- In the Details panel, find the AttributeSets array and add your
DA_PlayerAttributesasset. - Compile and save.
That's it.
Your actor now has fully replicated attribute state at runtime.
#
4. Mutate Attributes
Server Only
All mutations are server-authoritative. Call them through Server RPCs from your PlayerController or Character.
#
ApplyDelta
Adds a delta to the current value — negative values deal damage, positive values heal.
#
SetCurrentValue
Directly sets the current value, clamped to [MinValue, EffectiveMax].
#
SetBaseValue
Changes the base value. Recomputes EffectiveMax and clamps CurrentValue if it exceeds the new max.
#
ResetToBase
Restores CurrentValue to the BaseValue defined in the DataAsset. Clears the regen delay timer.
#
5. Query Attributes
Server + Client
All query functions are BlueprintPure — safe to call on any machine.
#
6. Bind Delegates
In your Actor's BeginPlay, get the component reference and bind:
Edge Detection
OnAttributeDepleted and OnAttributeRestored are edge-detected — they fire only on the transition between states, not repeatedly. OnAttributeDepleted will not fire again until the attribute is restored and depleted again.
Multiplayer Binding
OnAttributeChanged, OnAttributeDepleted, and OnAttributeRestored fire on both server and client independently. Bind on both — do not gate behind HasAuthority.
OnModifierAdded and OnModifierRemoved fire on the server only — modifiers are not replicated. Gate these bindings inside Switch Has Authority.
#
7. Add Modifiers
Server Only
Modifiers affect EffectiveMax — not CurrentValue directly. CurrentValue is clamped after EffectiveMax changes.
Call Add Modifier on the component with an FAP_AttributeModifier:
#
Modifier Evaluation Order
Base MaxValue
→ sum all Additive modifiers
→ apply Multiplicative modifiers sequentially
→ Override replaces EffectiveMax entirely (only one active at a time)
→ clamp result to >= MinValue
Returns an FAP_AttributeModifierHandle — store it to remove the modifier early:
Remove Modifier → ModifierHandle: (stored handle)
Call Remove All Modifiers with the attribute tag to clear everything at once.
Timed Modifiers
Set Duration > 0 for a modifier that auto-expires after that many seconds. The OnModifierRemoved delegate fires on expiry just as it does on manual removal.
#
8. Regeneration
Configure regen per attribute in the DataAsset — bRegenEnabled, RegenRatePerSecond, and RegenDelay. Override at runtime:
SetRegenEnabled → AttributeTag: AP.Attribute.Health, bEnabled: true
Regen activates when:
- Regen is enabled for the attribute
- CurrentValue is below EffectiveMax
- Enough time has passed since the last negative delta (
RegenDelay)
Server Only
Regen runs at 10 Hz on the server. No actor Tick dependency required.
#
9. Zero-Setup Access — Static Helpers
Access attributes from any Blueprint without interface implementation or storing component references:
#
10. Interface (Optional)
Implement IAP_AttributeInterface on your Actor for typed checking and custom component resolution:
- Open your Actor Blueprint → Class Settings → Interfaces → Add → search AP_AttributeInterface
- Override GetAttributeComponent to return your component reference
- Other systems can check
Does Implement Interface (AP Attribute Interface)for typed queries
Not required — the static helpers fall back to FindComponentByClass automatically.
#
11. Widget Setup
#
Single Attribute Bar
- Create a Widget Blueprint (e.g.,
WBP_HealthBar) - In Class Settings set Parent Class to
AP_AttributeWidgetBase - Add a Progress Bar and Text Block to the Designer
- Override OnDisplayUpdated in the Event Graph:
- Set Progress Bar Percent =
NormalizedValue - Set Text = format
CurrentValue/MaxValue
- Set Progress Bar Percent =
- In your HUD or character BeginPlay, call BindToAttribute on the widget passing the actor and tag
#
Multi-Attribute Panel
- Create a Widget Blueprint (e.g.,
WBP_AttributePanel) with parent classAP_AttributeWidgetBase - Add a Vertical Box to the canvas
- Override OnActorInitialized:
- Loop through the
AttributeTagsarray - For each tag: Create Widget (your bar class) → Add Child to the Vertical Box
- Call BindToAttribute on each created widget — use
AttributeComponent → GetOwnerfor the Target Actor parameter
- Loop through the
- In your HUD or PlayerController BeginPlay, call InitForActor passing the target actor
Target Actor in Panels
When calling BindToAttribute from OnActorInitialized, use AttributeComponent → GetOwner for the Target Actor — do not use GetBoundActor() as the actor reference may not be available on clients yet.
#
12. Debug Tools
Modifier Count
ActiveModifierCount in snapshots is accurate on the server only — always returns 0 on clients since modifiers are not replicated.
#
13. Multiplayer Checklist
- Configure PIE: Edit → Editor Preferences → Level Editor → Play → Number of Players: 2, enable Run Dedicated Server
- All mutation calls routed through Server RPCs
-
OnAttributeChanged,OnAttributeDepleted,OnAttributeRestoredbound on both server and client -
OnModifierAddedandOnModifierRemovedbound insideSwitch Has Authority— server only - Widget
BindToAttributeusesAttributeComponent → GetOwnerfor Target Actor in panel contexts
#
Next Steps
- API Reference — complete class, function, delegate, enum, and struct documentation
- Changelog — version history and fixes
AfterPrime Systems — Building the Gameplay Foundation