Skip to main content
The network object provides APIs for managing multiplayer games, including player management, groups, permissions, and messaging. Use network.mode to determine whether the game is running as a client, server, or in single player mode.

Properties

mode
NetworkMode
The current network mode:
  • "none" - Single player mode
  • "server" - Multiplayer server
  • "client" - Multiplayer client
if (network.mode === 'server') {
  console.log('Running as server');
}
numGroups
number
The number of multiplayer groups in the server.
console.log(`Groups: ${network.numGroups}`);
numPlayers
number
The number of players currently in the server.
console.log(`Players online: ${network.numPlayers}`);
groups
PlayerGroup[]
All multiplayer groups within the server. Groups are used to assign roles and permissions to players.
network.groups.forEach(group => {
  console.log(`${group.name}: ${group.permissions.length} permissions`);
});
players
Player[]
All players currently in the server.
network.players.forEach(player => {
  console.log(`${player.name} (Ping: ${player.ping}ms)`);
});
currentPlayer
Player
The player this instance of the game is controlling.
console.log(`You are: ${network.currentPlayer.name}`);
defaultGroup
number
The default group ID that new players joining the server should be assigned to.
network.defaultGroup = 1; // Assign new players to group 1
stats
NetworkStats
Various statistics related to networking.
console.log('Bytes received:', network.stats.bytesReceived);
console.log('Bytes sent:', network.stats.bytesSent);

Group Management

addGroup()

Creates a new multiplayer group for managing player permissions.
network.addGroup();
console.log('New group created');

getGroup()

Gets the player group with the specified ID.
id
number
required
The group ID (or group index prior to API version 77).
const group = network.getGroup(1);
console.log('Group name:', group.name);
console.log('Permissions:', group.permissions);

removeGroup()

Removes the player group with the specified ID.
id
number
required
The group ID (or group index prior to API version 77).
network.removeGroup(2);
console.log('Group removed');

Player Management

getPlayer()

Gets the player with the specified ID.
id
number
required
The player ID (or player index prior to API version 77).
const player = network.getPlayer(0);
console.log('Name:', player.name);
console.log('Group:', player.group);
console.log('Ping:', player.ping);
console.log('Commands ran:', player.commandsRan);
console.log('Money spent:', player.moneySpent);

kickPlayer()

Kicks the player with the specified ID from the server.
id
number
required
The player ID (or player index prior to API version 77).
network.kickPlayer(3);
console.log('Player kicked');

Messaging

sendMessage()

Sends a chat message to players.
message
string
required
The message text to broadcast to all players.
network.sendMessage('Welcome to the server!');
network.sendMessage('Server will restart in 5 minutes.');
Messages are transmitted via the server even if the server is not a recipient.

Socket Operations

createListener()

Creates a new listener that can accept TCP connections on a given port.
const listener = network.createListener();

listener.on('connection', (socket) => {
  console.log('New connection!');
  
  socket.on('data', (data) => {
    console.log('Received:', data);
    socket.write('Hello from OpenRCT2!');
  });
  
  socket.on('close', (hadError) => {
    console.log('Connection closed');
  });
});

listener.listen(8080, '0.0.0.0');
console.log('Listening on port 8080');

createSocket()

Creates a new TCP client that can connect to a server.
const socket = network.createSocket();

socket.on('data', (data) => {
  console.log('Received:', data);
});

socket.on('close', (hadError) => {
  console.log('Disconnected');
});

socket.on('error', (error) => {
  console.log('Error:', error);
});

socket.connect(8080, 'localhost', () => {
  console.log('Connected!');
  socket.write('Hello server!');
});

Type Definitions

Player

Represents a player within a network game.
id
number
The unique ID for the player.
name
string
The name of the player.
group
number
The group ID the player is a member of.
ping
number
The latest measured ping in milliseconds.
commandsRan
number
The number of actions successfully executed by the player.
moneySpent
number
The total amount of cash spent from actions performed by the player.
ipAddress
string
The player’s IP address.
publicKeyHash
string
A hash of the player’s public key used for authentication.

PlayerGroup

Represents a group for assigning roles and permissions.
id
number
The unique ID for the group.
name
string
The name of the group.
permissions
PermissionType[]
The permissions granted to players in this group. Can be:
  • "chat", "terraform", "set_water_level", "toggle_pause"
  • "create_ride", "remove_ride", "build_ride", "ride_properties"
  • "scenery", "path", "clear_landscape"
  • "guest", "staff", "park_properties", "park_funding"
  • "kick_player", "modify_groups", "set_player_group"
  • "cheat", "toggle_scenery_cluster", "passwordless_login"
  • "modify_tile", "edit_scenario_options"

Usage Examples

Server Welcome Message

if (network.mode === 'server') {
  context.subscribe('network.join', (e) => {
    const player = network.getPlayer(e.player);
    network.sendMessage(`Welcome ${player.name}!`);
  });
}

Admin Commands

context.subscribe('network.chat', (e) => {
  const player = network.getPlayer(e.player);
  const group = network.getGroup(player.group);
  
  if (e.message.startsWith('!kick ')) {
    if (group.permissions.includes('kick_player')) {
      const targetName = e.message.substring(6);
      const target = network.players.find(p => p.name === targetName);
      if (target) {
        network.kickPlayer(target.id);
        network.sendMessage(`${targetName} was kicked by ${player.name}`);
      }
    }
  }
});

Player Statistics

function showPlayerStats() {
  console.log('=== Player Statistics ===');
  network.players.forEach(player => {
    console.log(`${player.name}:`);
    console.log(`  Ping: ${player.ping}ms`);
    console.log(`  Actions: ${player.commandsRan}`);
    console.log(`  Spent: ${player.moneySpent}`);
  });
}