Audit your GAS setup in five minutes
Most GAS multiplayer bugs come from a handful of settings: a net policy, a replication mode, an OnRep, a commit node in the wrong place. They are easy to fix and hard to spot by reading a hundred assets. This plugin reads them for you.
What it checks
The GAS Net Audit loads every Gameplay Ability, PlayerState and AttributeSet class in your project (Blueprint and C++, not engine or marketplace classes unless you ask) plus your network settings, and runs 15 checks:
| Area | Checks |
|---|---|
| Abilities | Net execution policy, input replication, replicated instances, triggers on predicted abilities, cooldown effect that never blocks, cost effect with a duration or no modifiers |
| Blueprint graphs | CommitAbility that runs after a Delay, a montage task or any other latent node |
| PlayerStates | ASC not replicated, Minimal or Full replication mode, low net update frequency |
| AttributeSets | Attributes without an OnRep, OnReps without GAMEPLAYATTRIBUTE_REPNOTIFY, registration without REPNOTIFY_Always, clamping only in PreAttributeChange |
| Network | Per-client bandwidth cap set too low |
Each finding has a severity, the class or asset it is about, what goes wrong in multiplayer, the fix, and a link to the tutorial that explains it. The report ends with an inventory of everything it read: every ability's net policy, cost and cooldown, every PlayerState ASC's replication mode, every attribute's OnRep. That page alone is a quick review of a GAS setup.
Install
- Download the ZIP from GAS Net Audit and unzip it into
YourProject/Plugins/RSNetAudit. - Regenerate project files and build the editor.
It is an editor-only module. Nothing ships with your game.
Run it three ways
From the editor. Tools > Multiplayer > Run GAS Net Audit. When it finishes, a notification shows the counts and an Open report link.
From the console. Type RSNetAudit.Run in the editor console. Same result.
Headless. For a build machine, or a quick check without opening the editor:
UnrealEditor-Cmd.exe MyGame.uproject -run=RSNetAudit -FailOn=ErrorThe commandlet exits with 1 when it finds an error, so a CI step fails on a new one. Use -FailOn=Warning to be stricter, or -FailOn=None to only write the report.
Read the report
Reports land in Saved/RSNetAudit/ as HTML, Markdown, JSON and JUnit XML. GASNetAudit-latest.html is always the newest; dated copies are kept so you can compare runs.
Fix errors first. They break multiplayer outright:
- GA-03: a cooldown effect that is Instant, or grants no tags. The ability has no cooldown at all. See predicted cost and cooldown.
- PS-02 / PS-03: a player ASC that does not replicate, or runs in Minimal mode. The owning client cannot confirm its own predictions. See ASC on the PlayerState.
Warnings cause the "it feels laggy" class of bug:
- GA-05: commit after a latent node, so cost and cooldown jump a round trip late.
- AS-02 / AS-03: OnReps that drop predicted values, so stamina and health bars snap back.
- PS-01: a PlayerState that replicates a few times a second while it carries every ability.
Info findings are things that are often fine but worth a look, like a LocalOnly ability or a non-replicated meta attribute.
Checked a finding and it is fine, like a server-only Damage meta attribute? Copy the Ignore line shown under it into Config/RSNetAudit.ignore with a reason:
AS-01 UMyAttributeSet.Damage # server-only meta attributeIt moves to a Suppressed list in the report and stops counting toward CI.
How the graph check works
GA-05 opens each Blueprint ability, finds every Commit Ability node, and walks the execution wires backwards to the event that starts the chain. If it passes through a latent node on the way (an ability task, a Delay, any async action), the commit runs after the prediction window has closed.
It does not read C++ abilities. For those, search your ActivateAbility implementations for CommitAbility calls inside task callbacks.
What it cannot see
A clean report is not a clean game. Static checks miss whether a triggered ability is also bound to input, side effects spawned on both client and server, InitAbilityActorInfo missing on the client, and abilities granted twice on respawn. The ability fires twice tutorial covers those, and the latency tutorial shows how to catch them.
Keep it clean
Run it in CI on every merge with -FailOn=Error, and point the test-report step at Saved/RSNetAudit/GASNetAudit-latest.junit.xml so each finding shows as a test. New abilities are where these mistakes come back: someone duplicates an old ability with an Instant cooldown, or adds an attribute without an OnRep. The build tells them before a playtest does.
Get the code
GAS Net Audit v0.2.0, free under the MIT license. Read the runner source to see exactly what each check does.
The audit finds settings. If your abilities still desync after the report is clean, the cause is in how the systems fit together, and that is what the Diagnostic is for.