Concept: Multiplayer and Prediction

Every system in this plugin is built for a dedicated server plus clients. This page states where each piece runs so you can stop guessing.

Where things run

OperationRuns onNotes
Granting abilities, effects, attribute setsServerReplicates to the owning client.
Ability activationOwning client predicts, server confirmsStandard GAS prediction.
Equipping augmentsServerReplicated as registered subobjects.
Stateful augment accumulationServerNever read it directly for UI.
Combo transitionsOwning client predicts, server validatesRejection rolls the client back.
Combo transition conditionsServer onlyClients skip evaluation entirely.
Game phasesServer onlyAuthority-only by construction.
Persistence snapshotsServerRestored state replicates normally.

How combo prediction works

The owning client runs the full state machine locally, writes no replicated property, and sends one RPC per decision. The server re-runs the same logic authoritatively and either commits - writing CurrentNodeID and CurrentCombo, which replicate back - or rejects.

Window validation is tolerant rather than exact: the server accepts a transition inside window +/- min(half-RTT, Server Ping Leniency Cap). Requiring frame agreement would make combos unplayable above trivial ping. Tune the cap in Project Settings - lower for competitive, higher for co-op.

What replicates

PropertyConditionWhy
ActiveComboGrantsCOND_OwnerOnlyOnly you need your unlock state; it is also progression data other players should not receive.
DynamicEventsCOND_OwnerOnlyConsumed by the owner's own prediction.
CurrentNodeIDCOND_OwnerOnlyUsed for rollback comparison on the owning client.
CurrentComboAll clientsSimulated proxies need it to resolve combo completion.
LastReachedEndPointID + counterAll clientsHow a remote client learns a combo finished.

Server trust

The server never acts on a client-supplied asset path
A transition request names a combo, but the server resolves it against its own armed watchers rather than loading whatever the client named. Both server RPCs are also rate limited, so a client cannot flood the reliable channel.

Testing it

Standalone PIE hides every one of these distinctions, because there is no client. Always finish a feature with Play As Client and at least 2 players. The two failures this catches most often are granting on the client instead of the server, and caching a PlayerState-owned ASC before it has replicated.

See also

  • Concept: Combo System
  • How-To: Debug Combos (Dev Tools)