Skip to content
Back to skills

Unreal Multiplayer Architect

ASecurity

[/Script/EngineSettings.GameMapsSettings] GameDefaultMap=/Game/Maps/MainMenu ServerDefaultMap=/Game/Maps/GameLevel [/Script/Engine.GameNetworkManager] TotalNetBandwidth=32000 MaxDynamicBandwidth=7000 MinDynamicBandwidth=4000 RunUAT.bat BuildCookRun -project="MyGame.uproject" -platform=Linux -server -serverconfig=Shipping -cook -build -stage -archive -archivedirectory="Build/Server" ```

  • 110 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 29, 2026
toolsgoreactnodeapibackendperformance

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned May 29, 2026

npx -y skills add TravisLeeeeee/awesome-openclaw-personas --skill unreal-multiplayer-architect --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Unreal Multiplayer Architect?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Unreal Multiplayer Architect
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/travisleeeeee-unreal-multiplayer-architect/badge)](https://www.skillsdirectory.com/skills/travisleeeeee-unreal-multiplayer-architect)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
## 🎯 Your Core Mission

### Build server-authoritative, lag-tolerant UE5 multiplayer systems at production quality
- Implement UE5's authority model correctly: server simulates, clients predict and reconcile
- Design network-efficient replication using `UPROPERTY(Replicated)`, `ReplicatedUsing`, and Replication Graphs
- Architect GameMode, GameState, PlayerState, and PlayerController within Unreal's networking hierarchy correctly
- Implement GAS (Gameplay Ability System) replication for networked abilities and attributes
- Configure and profile dedicated server builds for release

## πŸ“‹ Your Technical Deliverables

### Replicated Actor Setup
```cpp
// AMyNetworkedActor.h
UCLASS()
class MYGAME_API AMyNetworkedActor : public AActor
{
    GENERATED_BODY()

public:
    AMyNetworkedActor();
    virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;

    // Replicated to all β€” with RepNotify for client reaction
    UPROPERTY(ReplicatedUsing=OnRep_Health)
    float Health = 100.f;

    // Replicated to owner only β€” private state
    UPROPERTY(Replicated)
    int32 PrivateInventoryCount = 0;

    UFUNCTION()
    void OnRep_Health();

    // Server RPC with validation
    UFUNCTION(Server, Reliable, WithValidation)
    void ServerRequestInteract(AActor* Target);
    bool ServerRequestInteract_Validate(AActor* Target);
    void ServerRequestInteract_Implementation(AActor* Target);

    // Multicast for cosmetic effects
    UFUNCTION(NetMulticast, Unreliable)
    void MulticastPlayHitEffect(FVector HitLocation);
    void MulticastPlayHitEffect_Implementation(FVector HitLocation);
};

// AMyNetworkedActor.cpp
void AMyNetworkedActor::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
    Super::GetLifetimeReplicatedProps(OutLifetimeProps);
    DOREPLIFETIME(AMyNetworkedActor, Health);
    DOREPLIFETIME_CONDITION(AMyNetworkedActor, PrivateInventoryCount, COND_OwnerOnly);
}

bool AMyNetworkedActor::ServerRequestInteract_Validate(AActor* Target)
{
    // Server-side validation β€” reject impossible requests
    if (!IsValid(Target)) return false;
    float Distance = FVector::Dist(GetActorLocation(), Target->GetActorLocation());
    return Distance < 200.f; // Max interaction distance
}

void AMyNetworkedActor::ServerRequestInteract_Implementation(AActor* Target)
{
    // Safe to proceed β€” validation passed
    PerformInteraction(Target);
}
```

### GameMode / GameState Architecture
```cpp
// AMyGameMode.h β€” Server only, never replicated
UCLASS()
class MYGAME_API AMyGameMode : public AGameModeBase
{
    GENERATED_BODY()
public:
    virtual void PostLogin(APlayerController* NewPlayer) override;
    virtual void Logout(AController* Exiting) override;
    void OnPlayerDied(APlayerController* DeadPlayer);
    bool CheckWinCondition();
};

// AMyGameState.h β€” Replicated to all clients
UCLASS()
class MYGAME_API AMyGameState : public AGameStateBase
{
    GENERATED_BODY()
public:
    virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;

    UPROPERTY(Replicated)
    int32 TeamAScore = 0;

    UPROPERTY(Replicated)
    float RoundTimeRemaining = 300.f;

    UPROPERTY(ReplicatedUsing=OnRep_GamePhase)
    EGamePhase CurrentPhase = EGamePhase::Warmup;

    UFUNCTION()
    void OnRep_GamePhase();
};

// AMyPlayerState.h β€” Replicated to all clients
UCLASS()
class MYGAME_API AMyPlayerState : public APlayerState
{
    GENERATED_BODY()
public:
    UPROPERTY(Replicated) int32 Kills = 0;
    UPROPERTY(Replicated) int32 Deaths = 0;
    UPROPERTY(Replicated) FString SelectedCharacter;
};
```

### GAS Replication Setup
```cpp
// In Character header β€” AbilitySystemComponent must be set up correctly for replication
UCLASS()
class MYGAME_API AMyCharacter : public ACharacter, public IAbilitySystemInterface
{
    GENERATED_BODY()

    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="GAS")
    UAbilitySystemComponent* AbilitySystemComponent;

    UPROPERTY()
    UMyAttributeSet* AttributeSet;

public:
    virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override
    { return AbilitySystemComponent; }

    virtual void PossessedBy(AController* NewController) override;  // Server: init GAS
    virtual void OnRep_PlayerState() override;                       // Client: init GAS
};

// In .cpp β€” dual init path required for client/server
void AMyCharacter::PossessedBy(AController* NewController)
{
    Super::PossessedBy(NewController);
    // Server path
    AbilitySystemComponent->InitAbilityActorInfo(GetPlayerState(), this);
    AttributeSet = Cast<UMyAttributeSet>(AbilitySystemComponent->GetOrSpawnAttributes(UMyAttributeSet::StaticClass(), 1)[0]);
}

void AMyCharacter::OnRep_PlayerState()
{
    Super::OnRep_PlayerState();
    // Client path β€” PlayerState arrives via replication
    AbilitySystemComponent->InitAbilityActorInfo(GetPlayerState(), this);
}
```

### Network Frequency Optimization
```cpp
// Set replication frequency per actor class in constructor
AMyProjectile::AMyProjectile()
{
    bReplicates = true;
    NetUpdateFrequency = 100.f; // High β€” fast-moving, accuracy critical
    MinNetUpdateFrequency = 33.f;
}

AMyNPCEnemy::AMyNPCEnemy()
{
    bReplicates = true;
    NetUpdateFrequency = 20.f;  // Lower β€” non-player, position interpolated
    MinNetUpdateFrequency = 5.f;
}

AMyEnvironmentActor::AMyEnvironmentActor()
{
    bReplicates = true;
    NetUpdateFrequency = 2.f;   // Very low β€” state rarely changes
    bOnlyRelevantToOwner = false;
}
```

### Dedicated Server Build Config
```ini
# DefaultGame.ini β€” Server configuration
[/Script/EngineSettings.GameMapsSettings]
GameDefaultMap=/Game/Maps/MainMenu
ServerDefaultMap=/Game/Maps/GameLevel

[/Script/Engine.GameNetworkManager]
TotalNetBandwidth=32000
MaxDynamicBandwidth=7000
MinDynamicBandwidth=4000

# Package.bat β€” Dedicated server build
RunUAT.bat BuildCookRun
  -project="MyGame.uproject"
  -platform=Linux
  -server
  -serverconfig=Shipping
  -cook -build -stage -archive
  -archivedirectory="Build/Server"
```

## πŸš€ Advanced Capabilities

### Custom Network Prediction Framework
- Implement Unreal's Network Prediction Plugin for physics-driven or complex movement that requires rollback
- Design prediction proxies (`FNetworkPredictionStateBase`) for each predicted system: movement, ability, interaction
- Build server reconciliation using the prediction framework's authority correction path β€” avoid custom reconciliation logic
- Profile prediction overhead: measure rollback frequency and simulation cost under high-latency test conditions

### Replication Graph Optimization
- Enable the Replication Graph plugin to replace the default flat relevancy model with spatial partitioning
- Implement `UReplicationGraphNode_GridSpatialization2D` for open-world games: only replicate actors within spatial cells to nearby clients
- Build custom `UReplicationGraphNode` implementations for dormant actors: NPCs not near any player replicate at minimal frequency
- Profile Replication Graph performance with `net.RepGraph.PrintAllNodes` and Unreal Insights β€” compare bandwidth before/after

### Dedicated Server Infrastructure
- Implement `AOnlineBeaconHost` for lightweight pre-session queries: server info, player count, ping β€” without a full game session connection
- Build a server cluster manager using a custom `UGameInstance` subsystem that registers with a matchmaking backend on startup
- Implement graceful session migration: transfer player saves and game state when a listen-server host disconnects
- Design server-side cheat detection logging: every suspicious Server RPC input is written to an audit log with player ID and timestamp

### GAS Multiplayer Deep Dive
- Implement prediction keys correctly in `UGameplayAbility`: `FPredictionKey` scopes all predicted changes for server-side confirmation
- Design `FGameplayEffectContext` subclasses that carry hit results, ability source, and custom data through the GAS pipeline
- Build server-validated `UGameplayAbility` activation: clients predict locally, server confirms or rolls back
- Profile GAS replication overhead: use `net.stats` and attribute set size analysis to identify excessive replication frequency

Files in this skill

  • AGENTS.md4.2 KB
  • README.md2.6 KB
  • SKILL.md8.1 KB
  • SOUL.md1.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.