Documentation · C++ Plugin · UE5

Ashenex Stats

v1.0 UE5 C++ GameplayTags Multiplayer

A flexible stat system for Unreal Engine built around a reusable Actor Component. Allows any actor to store, modify, and replicate gameplay statistics using GameplayTags as identifiers. Written in C++ for performance and fully exposed to Blueprints for easy integration.

01

Overview

Ashenex Stats stores all stat values as GameplayTag → float pairs. This means you define any stat type — Health, Stamina, Armor, custom attributes — without touching code. The system is data-driven by design: add new stats by creating new GameplayTags, no recompilation required.

The component handles multiplayer replication automatically. Stats changed on the server are replicated to all clients, making it suitable for co-op and competitive projects out of the box.

Reusable Actor Component — add to any actor via the Blueprint editor
GameplayTag-driven stat system — define any stat without code changes
Multiplayer replication — server-authoritative, automatic client sync
High performance C++ backend — no Blueprint overhead in the critical path
Blueprint accessible functions — full Blueprint API for all operations
DataTable support — manage stat tag definitions in a structured table
Event system — bind to stat changes and refresh events from any Blueprint
02

Installation

Ashenex Stats can be installed either through the Epic Games Launcher or manually by placing the plugin files into your project directory.

Method A — Epic Games Launcher
  1. Purchase and download Ashenex Stats from your Fab library in the Epic Games Launcher.
  2. Open your project in Unreal Engine.
  3. Go to Edit → Plugins.
  4. Search for Ashenex Stats and enable it.
  5. Restart the editor when prompted.
Method B — Manual Install
  1. Download the plugin package.
  2. Create a Plugins folder in your project root if one doesn't exist.
  3. Copy the plugin folder into: YourProject/Plugins/AshenexTagStats
  4. Open the project in Unreal Engine.
  5. Enable the plugin in Edit → Plugins if prompted.
  6. Compile the project when prompted.
03

Getting Started

Once the plugin is installed, add the Stats Component to any actor that needs stat tracking. This can be a Character, Enemy, Item — anything that extends AActor.

01
Open the Blueprint for the actor you want to add stats to.
02
In the Components panel, click Add Component.
03
Search for Ashenex Stats and select Ashenex Stats Component.
04
The component will appear in your component list. You can now configure default stats and reference it from any Blueprint node.
Recommended Order

Set up your GameplayTags and DataTable before configuring the component. The component reads tags at runtime, so having them defined first makes the setup process cleaner. See section 04 — Gameplay Tags.

04

Gameplay Tags

Ashenex Stats uses GameplayTags as stat identifiers. Before assigning or modifying stat values, these tags must exist in your project. The recommended approach is to define them in a dedicated DataTable, which keeps your stat structure organised and easy to extend.

Stats follow a dot-separated naming convention. A consistent structure makes filtering and debugging much easier as your project grows.

Example Tag Represents
Ashenex.Stat.Health.CurrentCurrent health value
Ashenex.Stat.Health.MaxMaximum health capacity
Ashenex.Stat.Armor.CurrentCurrent armor value
Ashenex.Stat.Armor.MaxMaximum armor capacity
Ashenex.Stat.Attack.PowerAttack power scalar
Ashenex.Stat.Attack.SpeedAttack speed multiplier
Ashenex.Stat.Vitality.HydrationCustom vitality stat

The above are examples only — you define exactly the tags your project needs. The system is not limited to any fixed set of stat names.

01
In Unreal Engine, create a new Data Table asset.
02
Select the GameplayTag table row structure when prompted.
03
Name it something like DT_AshenexStatsTags and save it.
04
Add rows for each stat tag your project will use.
05
Go to Edit → Project Settings → GameplayTags → Gameplay Tag Table List and add your DataTable to the list.
Important

Adding the DataTable to the Project Settings Gameplay Tag Table List causes your tags to update automatically whenever the DataTable changes. Without this step, tag edits won't propagate correctly at runtime.

05

Default Stats

Default stat values are defined directly on the component using the Default Stats map in the component's Details panel. Each entry is a GameplayTag → float pair. These values are applied automatically when the component initialises, or manually via ApplyDefaultStats.

Ashenex.Stat.Health.Current100
Ashenex.Stat.Health.Max100
Ashenex.Stat.Armor.Current50
Ashenex.Stat.Armor.Max50
Ashenex.Stat.Attack.Power20
Ashenex.Stat.Attack.Speed1.5

You are not limited to this set. Add any GameplayTag you've defined and assign its starting float value. Tags not listed here start with no value until explicitly set at runtime.

06

Blueprint Functions

The Ashenex Stats Component exposes the following Blueprint-callable functions. All functions target the component directly — get a reference to it on your actor, then call from there.

GetStatValue Function

Returns the current float value of a stat by its GameplayTag identifier. Returns the default value if the stat doesn't exist.

InputStat TagGameplayTag
InputDefault Valuefloat— returned if tag not found
OutputReturn Valuefloat
ExampleGetStatValue(Ashenex.Stat.Health.Current, 0.0)
SetStatValue Function

Sets a stat to an exact float value, replacing whatever the current value is. Fires OnStatChanged after updating.

InputStat TagGameplayTag
InputNew Valuefloat
ExampleSetStatValue(Ashenex.Stat.Health.Current, 80.0)
AddStatValue Function

Adds or subtracts from a stat's current value. Pass a negative delta to subtract. Fires OnStatChanged after updating.

InputStat TagGameplayTag
InputDeltafloat— positive to add, negative to subtract
Example — deal 10 damageAddStatValue(Ashenex.Stat.Health.Current, -10.0)
RemoveStat Function

Removes a stat entry entirely from the component. The stat will no longer exist until explicitly set or re-initialised.

InputStat TagGameplayTag
ExampleRemoveStat(Ashenex.Stat.Armor.Current)
HasStat Function

Checks whether a stat entry currently exists on the component. Useful for conditional logic before reading or modifying a stat.

InputStat TagGameplayTag
OutputReturn Valuebool
ExampleHasStat(Ashenex.Stat.Health.Current)
AddItemStats Function

Adds multiple stat deltas at once from a Map<GameplayTag, float>. Useful for equipping items that modify several stats simultaneously.

InputStat DeltasMap<GameplayTag, float>
Example — equip weaponAddItemStats({Ashenex.Stat.Attack.Power: 10.0, Ashenex.Stat.Attack.Speed: 0.5})
RemoveItemStats Function

Removes multiple stat deltas at once from a Map<GameplayTag, float>. Use this to reverse the effects of AddItemStats when unequipping an item.

InputStat DeltasMap<GameplayTag, float>
Example — unequip weaponRemoveItemStats({Ashenex.Stat.Attack.Power: 10.0, Ashenex.Stat.Attack.Speed: 0.5})
ApplyDefaultStats Function

Applies the Default Stats map configured on the component. Can optionally clear existing stats before applying. Useful for resetting an actor to its initial state.

InputClear Existingbool— wipe current stats before applying defaults
Example — respawn resetApplyDefaultStats(true)
07

Events

The component exposes two dynamic multicast delegates that you can bind to from any Blueprint. Use these to drive UI updates, trigger game logic, or react to stat changes without polling.

OnStatChanged Event

Fires whenever a stat value is modified — via SetStatValue, AddStatValue, or any batch operation. Provides the old and new values for delta calculations.

ParamStat TagGameplayTag— which stat changed
ParamOld Valuefloat— value before the change
ParamNew Valuefloat— value after the change
Common UseBind to update a health bar, play a hurt animation, or check for death condition when Health.Current reaches 0.
OnStatsRefreshed Event

Fires when the entire stat container is refreshed — for example after ApplyDefaultStats is called. Use this to do a full UI redraw rather than reacting to individual stat changes.

Common UseBind to rebuild a full stats display widget, or re-evaluate all buff/debuff conditions after a reset.