summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/multiplayer.md338
1 files changed, 160 insertions, 178 deletions
diff --git a/docs/multiplayer.md b/docs/multiplayer.md
index c7e1839cf..6ef14c4e7 100644
--- a/docs/multiplayer.md
+++ b/docs/multiplayer.md
@@ -1,225 +1,207 @@
# Multiplayer manual for OpenTTD
-Last updated: 2011-02-16
-
-
## Table of contents
- 1.0) [Starting a server](#10-starting-a-server)
- 2.0) [Connecting to a server](#20-connecting-to-a-server)
- - 2.1) [Connecting to a server over the console](#21-connecting-to-a-server-over-the-console)
+ - 2.1) [Connecting to a server over the console](#21-connecting-to-a-server-over-the-console)
- 3.0) [Playing internet games](#30-playing-internet-games)
- 4.0) [Tips for servers](#40-tips-for-servers)
- - 4.1)[Imposing landscaping limits](#41-imposing-landscaping-limits)
+ - 4.1)[Imposing landscaping limits](#41-imposing-landscaping-limits)
- 5.0) [Some useful things](#50-some-useful-things)
- 6.0) [Troubleshooting](#60-troubleshooting)
## 1.0) Starting a server
- - Make sure that you have your firewall of the computer as well as possible
- routers or modems of the server configured such that:
- - port 3979 is free for both UDP and TCP connections in- and outgoing
- - port 3978 is free outbound for UDP in order to advertise with the master
- server (if desired). Otherwise you'll have to tell players your IP.
- - port 3977 if use of the admin interface is desired (see admin_network.txt)
- - Click "multiplayer" on the startup screen
- - Click "start server"
- - Type in a game name
- - Select the type of game ('LAN/Internet' or 'Internet (advertise)'. With the
- last one other people are able to see you online. Else they need your IP and
- port to join)
- - Click "start game", "load game" or "load scenario"
- - Start playing
-
+- Click on "Multiplayer" in the Start Menu.
+- Click on "Start Server".
+- Give your server a name.
+- Select the visibility of your server:
+ - "Public": your server will be publicly listed.
+ - "Invite Only": only players who have the invite code for your server can
+ join.
+ - "Local": only players on your local network can join.
+- (optional) Set a password for your server.
+- Click "New Game", "Load Game", or "Play Scenario".
+- Start playing.
## 2.0) Connecting to a server
- - Click "multiplayer" on the startup screen
- - If you want to connect to any network game in your LAN click on 'LAN', then
- on 'Find Server'
- - If you want to see which servers all online on the Internet, click on
- 'Internet' and 'Find Server'
- - If there were more than one server
- - select one in the list below the buttons
- - click on 'join game'
- - If you want to play and you have the ip or hostname of the game server you
- want connect to.
- - click add server
- - type in the ip address or hostname
- - if you want to add a port use :<port>
- - If you want to play and you have the invite code of the game server you
- want connect to.
- - click add server
- - type in the invite code
- - Now you can select a company and press: "Join company", to help that company
- - Or you can press "Spectate game", to spectate the game
- - Or you can press "New company", and start your own company (if there are
- slots free)
- - You see a progressbar how far you are with joining the server.
- - Happy playing
+- Click on "Multiplayer" in the Start Menu.
+- There are three ways to join a server:
+ - If you want to connect to a local server, click "Search LAN".
+ - If you want to connect to a public game, click "Search internet".
+ - If the server-owner shared an invite code with you:
+ - Click "Add Server".
+ - Fill in the invite code, which always starts with a `+`.
+ - Click "OK".
+- Click on the server you want to join.
+- Click "Join Game".
+- If the server has a password, it will ask you for this.
+- You see a progressbar how far you are with joining the server.
+- Happy playing.
## 2.1) Connecting to a server over the console
- - Open the console and type in the following command:
- connect `<ip/host>:<port>#<company-no>`
-
+- Open the console and type `connect` for help how to connect via the console.
## 3.0) Playing internet games
- - Servers with a red dot behind it have a different version then you have. You
- will not be able to join those servers.
+- Servers with a red dot behind it have a different version then you have. You
+ will not be able to join those servers.
+
+- Servers with a yellow dot behind it have NewGRFs that you do not have. You
+ will not be able to join those servers. However, via "NewGRF Settings" and
+ "Find missing content online" you might be able to download the needed
+ NewGRFs after which you can join the server.
+
+- It can happen that a connection is that slow, or you have that many clients
+ connected to your server, that your clients start to loose their connection.
+ Some things you can do about it:
+ - `[network] frame_freq`:
+ change it in console with: `set network.frame_freq <number>`
+ the number should be between the 0 and 10, not much higher. It indicates
+ the delay between clicking and showing up. The higher, the more you notice
+ it, but the less bandwidth you use.
+ A good value for Internet-games is 2 or 3.
+
+ - `[network] sync_freq`:
+ change it in console with: `set network.sync_freq <number>`
+ the number should be between the 50 and 1000, not much lower, not much
+ higher. It indicates the time between sync-frames. A sync-frame is a frame
+ which checks if all clients are still in sync. When the value it too high,
+ clients can desync in 1960, but the server detects it in 1970. Not really
+ handy. The lower the value, the more bandwidth it uses.
+
+ NB: changing `frame_freq` has more effect on the bandwidth then `sync_freq`.
- - Servers with a yellow dot behind it have NewGRFs that you do not have. You
- will not be able to join those servers. However, via "NewGRF Settings" and
- "Find missing content online" you might be able to download the needed
- NewGRFs after which you can join the server.
-
- - It can happen that a connection is that slow, or you have that many clients
- connected to your server, that your clients start to loose their connection.
- Some things you can do about it:
- - [network] frame_freq:
- change it in console with: 'set network.frame_freq <number>'
- the number should be between the 0 and 10, not much higher. It indicates
- the delay between clicking and showing up. The higher, the more you notice
- it, but the less bandwidth you use.
- A good value for Internet-games is 2 or 3.
-
- - [network] sync_freq:
- change it in console with: 'set network.sync_freq <number>'
- the number should be between the 50 and 1000, not much lower, not much
- higher. It indicates the time between sync-frames. A sync-frame is a frame
- which checks if all clients are still in sync. When the value it too high,
- clients can desync in 1960, but the server detects it in 1970. Not really
- handy. The lower the value, the more bandwidth it uses.
+## 4.0) Tips for servers
- NB: changing frame_freq has more effect on the bandwidth then sync_freq.
+- You can launch a dedicated server by adding `-D` as parameter.
+- In UNIX like systems, you can fork your dedicated server by adding `-f` as
+ parameter.
+
+- You can automatically clean companies that do not have a client connected to
+ them, for, let's say, 3 years. You can do this via: `set autoclean_companies`
+ and `set autoclean_protected` and `set autoclean_unprotected`. Unprotected
+ removes a password from a company when it is not used for more then the
+ defined amount of months. `set autoclean_novehicles` can be used to remove
+ companies without any vehicles quickly.
+
+- You can also do this manually via the console: `reset_company`.
+
+- You can let your server automatically restart a map when, let's say,
+ year 2030 is reached. See `set restart_game_date` for detail.
+
+- If you want to be on the server-list, make your server public. You can do
+ this either from the Start Server window, via the in-game Online Players
+ window, or by typing in the console: `set server_game_type public`.
+
+- You can protect your server with a password via the console: `set server_pw`,
+ or via the Start Server menu.
+
+- When you have many clients connected to your server via Internet, watch your
+ bandwidth (if you have any limit on it, set by your ISP). One client uses
+ about 1.5 kilobytes per second up and down. To decrease this amount, setting
+ `frame_freq` to 1 will reduce it to roughly 1 kilobyte per second per client.
+
+- OpenTTD's default settings for maximum number of clients, and amount of data
+ from clients to process are chosen to not influence the normal playing of
+ people, but to prevent or at least make it less likely that someone can
+ perform a (distributed) denial-of-service attack on your server by causing
+ an out-of-memory event by flooding the server with data to send to all
+ clients. The major factor in this is the maximum number of clients; with
+ 32 clients "only" sending one chat message causes 1024 messages to be
+ distributed in total, with 64 clients that already quadruples to 4096. Given
+ that upstream bandwidth is usually the limiting factor, a queue of packets
+ that need to be sent will be created.
+ To prevent clients from exploiting this "explosion" of packets to send we
+ limit the number of incoming data, resulting in effectively limiting the
+ amount of data that OpenTTD will send to the clients. Even with the default
+ limits it is possible to generate about 70.000 packets per second, or about
+ 7 megabit per second of traffic.
+ Given that OpenTTD kicks clients after they have not reacted within about 9
+ seconds from sending a frame update packet it would be possible that OpenTTD
+ keeps about 600.000 packets in memory, using about 50 megabytes of memory.
+ Given that OpenTTD allows short bursts of packets, you can have slightly
+ more packets in memory in case of a distributed denial of service attack.
+ When increasing the amount of incoming data, or the maximum number of
+ clients the amount of memory OpenTTD needs in case of a distributed denial
+ of service attack is linearly related to the amount of incoming data and
+ quadratic to the amount of clients. In short, a rule of thumb for, the
+ maximum memory usage for packets is:
+ `#max_clients * #max_clients * bytes_per_frame * 10 KiB`.
+### 4.1) Imposing landscaping limits
-## 4.0) Tips for servers
+- You can impose limits on companies by the following 4 settings:
+ - `terraform_per_64k_frames`
+ - `terraform_frame_burst`
+ - `clear_per_64k_frames`
+ - `clear_frame_burst`
- - You can launch a dedicated server by adding -D as parameter.
- - In UNIX like systems, you can fork your dedicated server by adding -f as
- parameter.
-
- - You can automatically clean companies that do not have a client connected to
- them, for, let's say, 3 years. You can do this via: 'set autoclean_companies'
- and 'set autoclean_protected' and 'set autoclean_unprotected'. Unprotected
- removes a password from a company when it is not used for more then the
- defined amount of months. 'set autoclean_novehicles' can be used to remove
- companies without any vehicles quickly.
-
- - You can also do this manually via the console: 'reset_company'.
-
- - You can let your server automatically restart a map when, let's say, year 2030
- is reached. See 'set restart_game_date' for detail.
-
- - If you want to be on the server-list, make your server public. You can do
- this either from the Start Server GUI, via the in-game Online Players GUI,
- or by typing in the console:
- 'set server_game_type public'.
-
- - You can protect your server with a password via the console: 'set server_pw',
- or via the Start Server menu.
-
- - When you have many clients connected to your server via Internet, watch your
- bandwidth (if you have any limit on it, set by your ISP). One client uses
- about 1.5 kilobytes per second up and down. To decrease this amount, setting
- 'frame_freq' to 1 will reduce it to roughly 1 kilobyte per second per client.
-
- - OpenTTD's default settings for maximum number of clients, and amount of data
- from clients to process are chosen to not influence the normal playing of
- people, but to prevent or at least make it less likely that someone can
- perform a (distributed) denial-of-service attack on your server by causing
- an out-of-memory event by flooding the server with data to send to all
- clients. The major factor in this is the maximum number of clients; with
- 32 clients "only" sending one chat message causes 1024 messages to be
- distributed in total, with 64 clients that already quadruples to 4096. Given
- that upstream bandwidth is usually the limiting factor, a queue of packets
- that need to be sent will be created.
- To prevent clients from exploiting this "explosion" of packets to send we
- limit the number of incoming data, resulting in effectively limiting the
- amount of data that OpenTTD will send to the clients. Even with the default
- limits it is possible to generate about 70.000 packets per second, or about
- 7 megabit per second of traffic.
- Given that OpenTTD kicks clients after they have not reacted within about 9
- seconds from sending a frame update packet it would be possible that OpenTTD
- keeps about 600.000 packets in memory, using about 50 megabytes of memory.
- Given that OpenTTD allows short bursts of packets, you can have slightly
- more packets in memory in case of a distributed denial of service attack.
- When increasing the amount of incoming data, or the maximum number of
- clients the amount of memory OpenTTD needs in case of a distributed denial
- of service attack is linearly related to the amount of incoming data and
- quadratic to the amount of clients. In short, a rule of thumb for, the
- maximum memory usage for packets is:
- #max_clients * #max_clients * bytes_per_frame * 10 KiB.
+- Explaining `NNN_burst` and `NNN_per_64K_frames`
+ - `NNN_burst` defines 3 things, the maximum limit, the limit of a single
+ action, and the initial value for the limit assigned to a new company.
+ This setting is fairly simple and requires no math.
-### 4.1) Imposing landscaping limits
+ A value of 1 means a single tile can be affected by a single action.
+ This results in having to click 400 times when wanting to cover an area
+ of 20 x 20 tiles.
- - You can impose limits on companies by the following 4 settings:
- - terraform_per_64k_frames
- - terraform_frame_burst
- - clear_per_64k_frames
- - clear_frame_burst
+ The default value 4096 covers an area of 64 x 64 tiles.
- - Explaining 'per_64K_frames' and 'burst'
- - 'burst' defines 3 things, the maximum limit, the limit of a single action,
- and the initial value for the limit assigned to a new company.
- This setting is fairly simple and requires no math.
+ - `NNN_per_64K_frames` defines the number of tiles added to each companies
+ limit per frame (however not past the possible maximum value,the
+ `NNN_burst`). 64k rather resembles the exact number of 65536 frames. So
+ setting this variable to 65536 means: `65536 / 65536 = 1 tile per frame`.
- A value of 1 means a single tile can be affected by a single action.
- This results in having to click 400 times when wanting to cover an area
- of 20 x 20 tiles.
+ As a day consists of 74 frames, a company's limit is increased by 74
+ tiles during the course of a single day (2.22 seconds).
+ To achieve a 1 tile per day increase the following calculation is needed:
+ `1 / 74 (frames per day) * 65536 (per_64k_frames) = 885.62...`.
+ After rounding: a value of 886 means adding a bit over 1 tile per day.
- The default value 4096 covers an area of 64 x 64 tiles.
+ There is still enough space to scale this value downwards:
+ decreasing this value to 127 results in a bit over 1 tile added to the
+ allowance per week (7 days).
- - 'per_64k_frames' defines the number of tiles added to each companies limit
- per frame (however not past the possible maximum value,the 'burst').
- 64k rather resembles the exact number of 65536 frames. So setting this
- variable to 65536 means: 65536 / 65536 = 1 tile per frame.
- As a day consists of 74 frames, a company's limit is increased by 74
- tiles during the course of a single day (2.22 seconds).
+ To create a setup in which a company gets an initial allowance only,
+ set the value to 0 - no increase of the allowance per frame.
- To achieve a 1 tile per day increase the following calculation is needed:
- 1 / 74 (frames per day) * 65536 (per_64k_frames) = 885.62...
- after rounding: a value of 886 means adding a bit over 1 tile per day.
+- Even though construction actions include a clear tile action, they are not
+ affected by the above settings.
- There is still enough space to scale this value downwards:
- decreasing this value to 127 results in a bit over 1 tile added to the
- allowance per week (7 days).
+## 5.0) Some useful things
- To create a setup in which a company gets an initial allowance only,
- set the value to 0 - no increase of the allowance per frame.
+- You can protect your company so nobody else can join uninvited. To do this,
+ set a password in your Company window.
- - Even though construction actions include a clear tile action, they are not
- affected by the above settings.
+- You can chat with other players via ENTER or via SHIFT+T or via the Online
+ Players window
+- Servers can kick players, so don't make them use it!
-## 5.0) Some useful things
+## 6.0) Troubleshooting
- - You can protect your company so nobody else can join uninvited. To do this,
- set a password in your Company Screen
+### My server does not show up in the serverlist
- - You can give other players some money via the ClientList (under the 'head'
- in the mainbar).
+Check if the visibility of your server is set to `public`.
- - You can chat with other players via ENTER or via SHIFT+T or via the ClientList
+If it is, and your server still isn't showing up, start OpenTTD with
+`-d net=4` as extra argument. This will show debug message related to the
+network, including communication to/from the Game Coordinator.
- - Servers can now kick players, so don't make them use it!
+### My server warns a lot about getaddrinfo taking N seconds
+This could be a transient issue with your (local) DNS server, but if the
+problem persists there is likely a configuration issue in DNS resolving on
+your computer.
-## 6.0) Troubleshooting
+#### Running OpenTTD in a Docker container?
- - My advertising server does not show up in list at servers.openttd.org
- Run openttd with the '-d net=2' parameter. That will show which incoming
- communication is received, whether the replies from the master server or
- communication from an admin tool reach the programme. See section 1
- 'Starting a server' further up for the ports and protocols used by OpenTTD.
- The ports can be configured in the config file.
-
- - My advertising server warns a lot about getaddrinfo taking N seconds
- This could be a transient issue with your (local) DNS server, but if the
- problem persists there is likely a configuration issue in DNS resolving
- on your computer. This seems to be a common configuration issue for
- Docker instances, where the DNS resolving waits for a time out of usually
- 5 seconds.
+This is an issue with dual-stack Docker containers. If there is no default
+IPv6 resolver and IPv6 traffic is preferred, DNS requests will time out after
+5 seconds. To resolve this, use an IPv4 DNS server for your Docker container,
+for example by adding `--dns 1.1.1.1` to your `docker run` command.