Ashenex Stats
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.
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.
Installation
Ashenex Stats can be installed either through the Epic Games Launcher or manually by placing the plugin files into your project directory.
- Purchase and download Ashenex Stats from your Fab library in the Epic Games Launcher.
- Open your project in Unreal Engine.
- Go to Edit → Plugins.
- Search for Ashenex Stats and enable it.
- Restart the editor when prompted.
- Download the plugin package.
- Create a
Pluginsfolder in your project root if one doesn't exist. - Copy the plugin folder into:
YourProject/Plugins/AshenexTagStats - Open the project in Unreal Engine.
- Enable the plugin in Edit → Plugins if prompted.
- Compile the project when prompted.
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.
Ashenex Stats and select Ashenex Stats Component.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.
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.Current | Current health value |
Ashenex.Stat.Health.Max | Maximum health capacity |
Ashenex.Stat.Armor.Current | Current armor value |
Ashenex.Stat.Armor.Max | Maximum armor capacity |
Ashenex.Stat.Attack.Power | Attack power scalar |
Ashenex.Stat.Attack.Speed | Attack speed multiplier |
Ashenex.Stat.Vitality.Hydration | Custom 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.
DT_AshenexStatsTags and save it.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.
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.
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.
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.
Returns the current float value of a stat by its GameplayTag identifier. Returns the default value if the stat doesn't exist.
Sets a stat to an exact float value, replacing whatever the current value is. Fires OnStatChanged after updating.
Adds or subtracts from a stat's current value. Pass a negative delta to subtract. Fires OnStatChanged after updating.
Removes a stat entry entirely from the component. The stat will no longer exist until explicitly set or re-initialised.
Checks whether a stat entry currently exists on the component. Useful for conditional logic before reading or modifying a stat.
Adds multiple stat deltas at once from a Map<GameplayTag, float>. Useful for equipping items that modify several stats simultaneously.
Removes multiple stat deltas at once from a Map<GameplayTag, float>. Use this to reverse the effects of AddItemStats when unequipping an item.
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.
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.
Fires whenever a stat value is modified — via SetStatValue, AddStatValue, or any batch operation. Provides the old and new values for delta calculations.
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.