terminalCode Example
Multiplayer and Networking
Complete guide to multiplayer setup in s&box.
Creating a Lobby
CSHARP
Networking.CreateLobby(new LobbyConfig()
{
MaxPlayers = 8,
Privacy = LobbyPrivacy.Public,
Name = "My Game Server"
});Joining a Lobby
CSHARP
// Query lobbies
var lobbies = await Networking.QueryLobbies();
// Join by ID
Networking.Connect(lobbyId);Spawning Networked Players
CSHARP
public class GameManager : Component, INetworkListener
{
[Property] public GameObject PlayerPrefab { get; set; }
[Property] public Transform[] SpawnPoints { get; set; }
void INetworkListener.OnActive(Connection channel)
{
if (!Networking.IsHost) return;
var spawn = SpawnPoints[Random.Shared.Next(SpawnPoints.Length)];
var player = PlayerPrefab.Clone(spawn.WorldPosition);
// Spawn for specific connection
player.NetworkSpawn(channel.SteamId);
}
}Host/Client Checks
CSHARP
if (Networking.IsHost)
{
// Server-side only code
}
if (Networking.IsClient)
{
// Client-side only code
}
// Check if running in multiplayer
if (Networking.IsActive)
{
// Any network mode
}Connection Events
CSHARP
public class NetworkManager : Component, INetworkListener
{
void INetworkListener.OnActive(Connection channel)
{
Log.Info($"Player joined: {channel.DisplayName}");
}
void INetworkListener.OnDisconnected(Connection channel, Connection.Reason reason)
{
Log.Info($"Player left: {channel.DisplayName}");
}
}Networked Object Spawning
CSHARP
void SpawnProjectile()
{
var projectile = ProjectilePrefab.Clone(WorldPosition);
projectile.WorldRotation = WorldRotation;
// Spawn for all clients
projectile.NetworkSpawn();
// Set velocity if Rigidbody exists
if (projectile.Components.TryGet<Rigidbody>(out var rb))
{
rb.Velocity = WorldRotation.Forward * 1000f;
}
}Testing Multiplayer
Use F5 → Multiplayer Preview to test locally with multiple clients.
Was this helpful?