Update to 12.0-RC1

This commit is contained in:
dP
2021-09-26 20:30:12 +03:00
parent c9765f712f
commit 4eb8b29dbf
173 changed files with 31125 additions and 9485 deletions

View File

@@ -1,3 +1,40 @@
12.0-RC1 (2021-09-25)
------------------------------------------------------------------------
Feature: Display icon/text whether vehicle is lost in vehicle (list) window (#9543)
Feature: [MacOS] Add selected toolbar buttons to MacBook Pro Touch Bar (#9511)
Feature: Button to open order window from vehicle shared orders window (#9325)
Feature: Ctrl-Clicking shared order vehicle list opens order window (#9325)
Feature: Multiple rotating views on title screen (#8980)
Feature: Hide block signals in GUI by default (#8688)
Add: [Script] Allow GameScripts to build neutral objects (#9568)
Add: [Network] Allow sending chat messages via admin port (#9563)
Add: [AI/GS] Missing water related functions and objects (#8390)
Fix: Industry funding window did not update when changing funding method (#9572)
Fix #9562: [NewGRF] Handle case of invalid Action2 with zero results (#9564)
Fix: Incorrect error messages when placing water in scenario editor (#9560)
Fix #9484: Update locale currencies settings config map (#9559)
Fix: Prevent train reversing when entirely inside a train depot (#9557)
Fix: [Network] Add back 'Spectate' option to company toolbar menu (#9556)
Fix #9463: [Win32] Work around XAudio2 crashes (#9549)
Fix #8603: Don't give focus to text filter when opening Object GUI (#9547)
Fix #9241: Grove and forest tree brushes did not also create rainforest terrain (#9542)
Fix: [Network] Several crashes in our network code (#9534, #9456)
Fix #9527: Crash when trying to place multi-tile objects at map edge (#9529)
Fix: [Network] SendCmdNames only sent one name per packet (#9528)
Fix #9407: Desync when founding a town nearby a station (#9526)
Fix #9521: Don't load at just removed docks that were part of a multi-dock station (#9524)
Fix: Ships always tried to avoid docking tiles when pathfinding (even if nothing was on them) (#9522)
Fix: [Network] Convert server_advertise to server_game_type in config file (#9515)
Fix #9490: [Network] A full server couldn't be queried (#9508)
Fix: [Network] Don't show GameScript " (v0)" for old servers (#9507)
Fix: [Network] Show query errors in the server listing instead of error popup (#9506)
Fix: [Network] Crash when last-joined server was no longer available (#9503)
Fix #9501: [Network] Crash when more than one game-info query was pending (#9502)
Fix: Wrong error message when building canals over ship depots / locks (#9410)
Fix: Reduce cost of building canals over objects on sea (#9410)
Change: [Linkgraph] Delete links only served by vehicles stopped in depot (#9499)
12.0-beta2 (2021-08-19) 12.0-beta2 (2021-08-19)
------------------------------------------------------------------------ ------------------------------------------------------------------------
Feature: [Linkgraph] Prioritize faster routes for passengers, mail and express cargo (#9457) Feature: [Linkgraph] Prioritize faster routes for passengers, mail and express cargo (#9457)

View File

@@ -39,6 +39,7 @@ Describe here
Some things are not automated, and forgotten often. This list is a reminder for the reviewers. Some things are not automated, and forgotten often. This list is a reminder for the reviewers.
* The bug fix is important enough to be backported? (label: 'backport requested') * The bug fix is important enough to be backported? (label: 'backport requested')
* This PR touches english.txt or translations? Check the [guidelines](https://github.com/OpenTTD/OpenTTD/blob/master/docs/eints.md)
* This PR affects the save game format? (label 'savegame upgrade') * This PR affects the save game format? (label 'savegame upgrade')
* This PR affects the GS/AI API? (label 'needs review: Script API') * This PR affects the GS/AI API? (label 'needs review: Script API')
* ai_changelog.hpp, gs_changelog.hpp need updating. * ai_changelog.hpp, gs_changelog.hpp need updating.

221
.github/unused-strings.py vendored Normal file
View File

@@ -0,0 +1,221 @@
"""
Script to scan the OpenTTD source-tree for STR_ entries that are defined but
no longer used.
This is not completely trivial, as OpenTTD references a lot of strings in
relation to another string. The most obvious example of this is a list. OpenTTD
only references the first entry in the list, and does "+ <var>" to get to the
correct string.
There are other ways OpenTTD does use relative values. This script tries to
account for all of them, to give the best approximation we have for "this
string is unused".
"""
import glob
import os
import re
import subprocess
import sys
from enum import Enum
LENGTH_NAME_LOOKUP = {
"VEHICLE_TYPES": 4,
}
class SkipType(Enum):
NONE = 1
LENGTH = 2
EXTERNAL = 3
ZERO_IS_SPECIAL = 4
EXPECT_NEWLINE = 5
def read_language_file(filename, strings_found, errors):
strings_defined = []
skip = SkipType.NONE
length = 0
common_prefix = ""
last_tiny_string = ""
with open(filename) as fp:
for line in fp.readlines():
if not line.strip():
if skip == SkipType.EXPECT_NEWLINE:
skip = SkipType.NONE
continue
line = line.strip()
if skip == SkipType.EXPECT_NEWLINE:
# The only thing allowed after a list, is this next marker, or a newline.
if line == "###next-name-looks-similar":
# "###next-name-looks-similar"
# Indicates the common prefix of the last list has a very
# similar name to the next entry, but isn't part of the
# list. So do not emit a warning about them looking very
# similar.
if length != 0:
errors.append(f"ERROR: list around {name} is shorted than indicated by ###length")
common_prefix = ""
else:
errors.append(f"ERROR: expected a newline after a list, but didn't find any around {name}. Did you add an entry to the list without increasing the length?")
skip = SkipType.NONE
if line[0] == "#":
if line.startswith("###length "):
# "###length <count>"
# Indicates the next few entries are part of a list. Only
# the first entry is possibly referenced, and the rest are
# indirectly.
if length != 0:
errors.append(f"ERROR: list around {name} is shorted than indicated by ###length")
length = line.split(" ")[1].strip()
if length.isnumeric():
length = int(length)
else:
length = LENGTH_NAME_LOOKUP[length]
skip = SkipType.LENGTH
elif line.startswith("###external "):
# "###external <count>"
# Indicates the next few entries are used outside the
# source and will not be referenced.
if length != 0:
errors.append(f"ERROR: list around {name} is shorted than indicated by ###length")
length = line.split(" ")[1].strip()
length = int(length)
skip = SkipType.EXTERNAL
elif line.startswith("###setting-zero-is-special"):
# "###setting-zero-is-special"
# Indicates the next entry is part of the "zero is special"
# flag of settings. These entries are not referenced
# directly in the code.
if length != 0:
errors.append(f"ERROR: list around {name} is shorted than indicated by ###length")
skip = SkipType.ZERO_IS_SPECIAL
continue
name = line.split(":")[0].strip()
strings_defined.append(name)
# If a string ends on _TINY or _SMALL, it can be the {TINY} variant.
# Check for this by some fuzzy matching.
if name.endswith(("_SMALL", "_TINY")):
last_tiny_string = name
elif last_tiny_string:
matching_name = "_".join(last_tiny_string.split("_")[:-1])
if name == matching_name:
strings_found.add(last_tiny_string)
else:
last_tiny_string = ""
if skip == SkipType.EXTERNAL:
strings_found.add(name)
skip = SkipType.LENGTH
if skip == SkipType.LENGTH:
skip = SkipType.NONE
length -= 1
common_prefix = name
elif skip == SkipType.ZERO_IS_SPECIAL:
strings_found.add(name)
elif length > 0:
strings_found.add(name)
length -= 1
# Find the common prefix of these strings
for i in range(len(common_prefix)):
if common_prefix[0 : i + 1] != name[0 : i + 1]:
common_prefix = common_prefix[0:i]
break
if length == 0:
skip = SkipType.EXPECT_NEWLINE
if len(common_prefix) < 6:
errors.append(f"ERROR: common prefix of block including {name} was reduced to {common_prefix}. This means the names in the list are not consistent.")
elif common_prefix:
if name.startswith(common_prefix):
errors.append(f"ERROR: {name} looks a lot like block above with prefix {common_prefix}. This mostly means that the list length was too short. Use '###next-name-looks-similar' if it is not.")
common_prefix = ""
return strings_defined
def scan_source_files(path, strings_found):
for new_path in glob.glob(f"{path}/*"):
if os.path.isdir(new_path):
scan_source_files(new_path, strings_found)
continue
if not new_path.endswith((".c", ".h", ".cpp", ".hpp", ".ini")):
continue
# Most files we can just open, but some use magic, that requires the
# G++ preprocessor before we can make sense out of it.
if new_path == "src/table/cargo_const.h":
p = subprocess.run(["g++", "-E", new_path], stdout=subprocess.PIPE)
output = p.stdout.decode()
else:
with open(new_path) as fp:
output = fp.read()
# Find all the string references.
matches = re.findall(r"[^A-Z_](STR_[A-Z0-9_]*)", output)
strings_found.update(matches)
def main():
strings_found = set()
errors = []
scan_source_files("src", strings_found)
strings_defined = read_language_file("src/lang/english.txt", strings_found, errors)
# STR_LAST_STRINGID is special, and not really a string.
strings_found.remove("STR_LAST_STRINGID")
# These are mentioned in comments, not really a string.
strings_found.remove("STR_XXX")
strings_found.remove("STR_NEWS")
strings_found.remove("STR_CONTENT_TYPE_")
# This string is added for completion, but never used.
strings_defined.remove("STR_JUST_DATE_SHORT")
strings_defined = sorted(strings_defined)
strings_found = sorted(list(strings_found))
for string in strings_found:
if string not in strings_defined:
errors.append(f"ERROR: {string} found but never defined.")
for string in strings_defined:
if string not in strings_found:
errors.append(f"ERROR: {string} is (possibly) no longer needed.")
if errors:
for error in errors:
print(error)
sys.exit(1)
else:
print("OK")
if __name__ == "__main__":
main()

18
.github/workflows/unused-strings.yml vendored Normal file
View File

@@ -0,0 +1,18 @@
name: Unused strings
on:
pull_request:
jobs:
unused-strings:
name: Unused strings
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Check for unused strings
run: |
set -ex
python3 .github/unused-strings.py

View File

@@ -1 +1 @@
12.0-beta2 20210819 0 778e196b55265c40191186c273b008356136e20d 1 0 2021 12.0-RC1 20210925 0 79dc634d41d04f4b48e8e284f2986a9cdb288946 1 0 2021

View File

@@ -1 +1 @@
2021-08-19 19:24 UTC 2021-09-25 14:00 UTC

View File

@@ -1 +1 @@
12.0-beta2 12.0-RC1

View File

@@ -1,3 +1,40 @@
12.0-RC1 (2021-09-25)
------------------------------------------------------------------------
Feature: Display icon/text whether vehicle is lost in vehicle (list) window (#9543)
Feature: [MacOS] Add selected toolbar buttons to MacBook Pro Touch Bar (#9511)
Feature: Button to open order window from vehicle shared orders window (#9325)
Feature: Ctrl-Clicking shared order vehicle list opens order window (#9325)
Feature: Multiple rotating views on title screen (#8980)
Feature: Hide block signals in GUI by default (#8688)
Add: [Script] Allow GameScripts to build neutral objects (#9568)
Add: [Network] Allow sending chat messages via admin port (#9563)
Add: [AI/GS] Missing water related functions and objects (#8390)
Fix: Industry funding window did not update when changing funding method (#9572)
Fix #9562: [NewGRF] Handle case of invalid Action2 with zero results (#9564)
Fix: Incorrect error messages when placing water in scenario editor (#9560)
Fix #9484: Update locale currencies settings config map (#9559)
Fix: Prevent train reversing when entirely inside a train depot (#9557)
Fix: [Network] Add back 'Spectate' option to company toolbar menu (#9556)
Fix #9463: [Win32] Work around XAudio2 crashes (#9549)
Fix #8603: Don't give focus to text filter when opening Object GUI (#9547)
Fix #9241: Grove and forest tree brushes did not also create rainforest terrain (#9542)
Fix: [Network] Several crashes in our network code (#9534, #9456)
Fix #9527: Crash when trying to place multi-tile objects at map edge (#9529)
Fix: [Network] SendCmdNames only sent one name per packet (#9528)
Fix #9407: Desync when founding a town nearby a station (#9526)
Fix #9521: Don't load at just removed docks that were part of a multi-dock station (#9524)
Fix: Ships always tried to avoid docking tiles when pathfinding (even if nothing was on them) (#9522)
Fix: [Network] Convert server_advertise to server_game_type in config file (#9515)
Fix #9490: [Network] A full server couldn't be queried (#9508)
Fix: [Network] Don't show GameScript " (v0)" for old servers (#9507)
Fix: [Network] Show query errors in the server listing instead of error popup (#9506)
Fix: [Network] Crash when last-joined server was no longer available (#9503)
Fix #9501: [Network] Crash when more than one game-info query was pending (#9502)
Fix: Wrong error message when building canals over ship depots / locks (#9410)
Fix: Reduce cost of building canals over objects on sea (#9410)
Change: [Linkgraph] Delete links only served by vehicles stopped in depot (#9499)
12.0-beta2 (2021-08-19) 12.0-beta2 (2021-08-19)
------------------------------------------------------------------------ ------------------------------------------------------------------------
Feature: [Linkgraph] Prioritize faster routes for passengers, mail and express cargo (#9457) Feature: [Linkgraph] Prioritize faster routes for passengers, mail and express cargo (#9457)

117
docs/eints.md Normal file
View File

@@ -0,0 +1,117 @@
# Translations for OpenTTD
Eints is [OpenTTD's WebTranslator](https://translator.openttd.org/).
- Registered translators translate from English to their language.
- Eints validates the translations syntactically and that parameter usage matches the English base language.
- Eints synchronises translations to OpenTTD's repository every day, shortly before the nightly build.
When adding or altering strings in english.txt, you should stick to some rules, so translations are handled smoothly by Eints and translators.
This document gives some guidelines.
## I want to change a translation.
### I want to become a regular translator.
Just [sign up](https://github.com/OpenTTD/team/issues/new/choose) as a translator.
### I only want to point out some issues / typos in the current translation, or suggest a change.
[Open an issue](https://github.com/OpenTTD/OpenTTD/issues/new/choose), so it can be assigned to the translation team of the language.
The translators will decide whether, where and how to apply your suggestion.
### I want to submit translations via PR.
Sorry, we don't offer this option.
### I want to change the language definition (plural form, genders, cases) of a translation.
Please [create an issue](https://github.com/OpenTTD/OpenTTD/issues/new/choose) for this.
### I want to add an entirely new translation language.
OpenTTD has more than 4000 strings, translating all of them is a lot of work.
Despite the initial enthusiasm, only few people have the endurance to get to even 20% translation progress.
As such, starting a new translation requires the prospect that there is also translation interest in the future.
And, frankly, OpenTTD probably already covers all languages to which this applies, and a few more.
If you still want to make the case, that your language is spoken by several 100 million people, please [create an issue](https://github.com/OpenTTD/OpenTTD/issues/new/choose) for adding a new language.
## I want to change the English base language (english.txt).
### I want to change the wording / fix a typo in an English string, without changing the meaning (drastically).
Just change it in your PR.
Translators will be notified that their translation became "outdated", so they can double-check whether the translation needs updating.
### I want to add/change/remove parameters from an English string.
Just change the parameters in english.txt in your PR.
Don't touch the translations, please ignore compile warnings about them.
Translators will be notified that their translation became "invalid", so they can adjust the translation.
Eints will remember the old translations for translators to view, but remove them from the git repository, while they are "invalid"; so there won't be any compile warnings after the nightly sync.
### I want to change the meaning of an English string, so that no existing translation makes any sense anymore.
In this case, please change the STR_xxx string identifier of the string; basically: remove the old string, add a new one.
Don't touch the translations, please ignore compile warnings about them.
Eints will discard all memory of the old strings in the nightly sync, and translators can start fresh with a new string.
### I want to add a new string.
Add the new string somewhere in english.txt, where it fits with the neighbouring strings.
Don't touch the translations, even if you can speak some of the languages.
### I want to remove an unused string.
Remove the string from english.txt.
Don't touch the translations, please ignore compile warnings about them.
Eints will remove the translations from the git repository in the nightly sync.
### I want to reorder strings in english.txt without changing them.
Reorder english.txt as you like. Don't touch the translations.
Eints will reorder all translations to match english.txt in the nightly sync.
### I want to add/change '#' comments.
Change comments in english.txt as you like. Don't touch the translations.
Eints will replicate comments into all translations in the nightly sync. Comments are not translated.
### I want to change the STR_xxx string identifier for code style reasons, without changing the English text.
This is the only case, where your PR should also edit translations.
The STR_xxx string identifier is used by Eints as key value to track strings and translations. If you change it, that's the same as deleting a string and adding an unrelated new one.
So, to keep translations, you have to replace the STR_xxx for all translations in the PR as well.
However, you will only be able to keep the translations which are part of the git repository.
Translation history and information about translations being "outdated" will be lost.
So, keep your code style OCD to a minimum :)
## I want to fight a bot and lose.
Here are some things, people sometimes want to do, but which won't work.
### I want to enforce re-translation by clearing current translations.
You have to change the STR_xxx string identifier, that's the only option.
You cannot "clear" translations by removing them via PR; eints will reinstall the previous "syntactically perfect valid" translation.
### I want to revert a broken change, some translator just did via eints.
You have to revert the translations via the WebTranslator interface.
If there are many changes, ask someone with Admin access to eints, so they can manually upload a fixed translation file to eints.
You cannot revert translations changes via PR. Eints merges translations from git and from web by keeping a translation history, and committing the newest translation to git.
If you revert to an old translation in git, eints will simply think git did not yet get the newer translation, and commit it again.

View File

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

BIN
media/openttd.1024.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
media/openttd.2048.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
media/openttd.512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -547,6 +547,8 @@ function Regression::Prices()
print(" BT_DOCK: " + AIMarine.GetBuildCost(AIMarine.BT_DOCK)); print(" BT_DOCK: " + AIMarine.GetBuildCost(AIMarine.BT_DOCK));
print(" BT_DEPOT: " + AIMarine.GetBuildCost(AIMarine.BT_DEPOT)); print(" BT_DEPOT: " + AIMarine.GetBuildCost(AIMarine.BT_DEPOT));
print(" BT_BUOY: " + AIMarine.GetBuildCost(AIMarine.BT_BUOY)); print(" BT_BUOY: " + AIMarine.GetBuildCost(AIMarine.BT_BUOY));
print(" BT_LOCK: " + AIMarine.GetBuildCost(AIMarine.BT_LOCK));
print(" BT_CANAL: " + AIMarine.GetBuildCost(AIMarine.BT_CANAL));
print(" -Tile-"); print(" -Tile-");
print(" BT_FOUNDATION: " + AITile.GetBuildCost(AITile.BT_FOUNDATION)); print(" BT_FOUNDATION: " + AITile.GetBuildCost(AITile.BT_FOUNDATION));
print(" BT_TERRAFORM: " + AITile.GetBuildCost(AITile.BT_TERRAFORM)); print(" BT_TERRAFORM: " + AITile.GetBuildCost(AITile.BT_TERRAFORM));
@@ -556,6 +558,7 @@ function Regression::Prices()
print(" BT_CLEAR_ROCKY: " + AITile.GetBuildCost(AITile.BT_CLEAR_ROCKY)); print(" BT_CLEAR_ROCKY: " + AITile.GetBuildCost(AITile.BT_CLEAR_ROCKY));
print(" BT_CLEAR_FIELDS: " + AITile.GetBuildCost(AITile.BT_CLEAR_FIELDS)); print(" BT_CLEAR_FIELDS: " + AITile.GetBuildCost(AITile.BT_CLEAR_FIELDS));
print(" BT_CLEAR_HOUSE: " + AITile.GetBuildCost(AITile.BT_CLEAR_HOUSE)); print(" BT_CLEAR_HOUSE: " + AITile.GetBuildCost(AITile.BT_CLEAR_HOUSE));
print(" BT_CLEAR_WATER: " + AITile.GetBuildCost(AITile.BT_CLEAR_WATER));
} }
function cost_callback(old_path, new_tile, new_direction, self) { if (old_path == null) return 0; return old_path.GetCost() + 1; } function cost_callback(old_path, new_tile, new_direction, self) { if (old_path == null) return 0; return old_path.GetCost() + 1; }
@@ -919,6 +922,9 @@ function Regression::Marine()
print(" BuildWaterDepot(): " + AIMarine.BuildWaterDepot(28479, 28480)); print(" BuildWaterDepot(): " + AIMarine.BuildWaterDepot(28479, 28480));
print(" BuildDock(): " + AIMarine.BuildDock(29253, AIStation.STATION_JOIN_ADJACENT)); print(" BuildDock(): " + AIMarine.BuildDock(29253, AIStation.STATION_JOIN_ADJACENT));
print(" BuildBuoy(): " + AIMarine.BuildBuoy(28481));
print(" BuildLock(): " + AIMarine.BuildLock(28487));
print(" BuildCanal(): " + AIMarine.BuildCanal(28744));
} }
function Regression::Order() function Regression::Order()
@@ -1470,9 +1476,41 @@ function Regression::TileList()
print(" " + i + " => " + list.GetValue(i)); print(" " + i + " => " + list.GetValue(i));
} }
list.AddRectangle(54421 - 256 * 2, 256 * 2 + 54421 + 8); list.AddRectangle(0x6F3F, 0x7248);
list.Valuate(AITile.IsWaterTile); list.Valuate(AITile.IsWaterTile);
print(" Water(): done"); print(" IsWaterTile(): done");
print(" Count(): " + list.Count());
print(" ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AITile.IsSeaTile);
print(" IsSeaTile(): done");
print(" Count(): " + list.Count());
print(" ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AITile.IsRiverTile);
print(" IsRiverTile() done");
print(" Count(): " + list.Count());
print(" ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AIMarine.IsCanalTile);
print(" IsCanalTile() done");
print(" Count(): " + list.Count());
print(" ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {
print(" " + i + " => " + list.GetValue(i));
}
list.Valuate(AITile.IsCoastTile);
print(" IsCoastTile() done");
print(" Count(): " + list.Count()); print(" Count(): " + list.Count());
print(" ListDump:"); print(" ListDump:");
for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) {

View File

@@ -7365,6 +7365,9 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetBankBalance(): 1999959285 GetBankBalance(): 1999959285
BuildWaterDepot(): true BuildWaterDepot(): true
BuildDock(): true BuildDock(): true
BuildBuoy(): true
BuildLock(): true
BuildCanal(): true
--Prices-- --Prices--
-Rail- -Rail-
@@ -7391,6 +7394,8 @@ ERROR: IsEnd() is invalid as Begin() is never called
BT_DOCK: 262 BT_DOCK: 262
BT_DEPOT: 525 BT_DEPOT: 525
BT_BUOY: 262 BT_BUOY: 262
BT_LOCK: 5625
BT_CANAL: 3750
-Tile- -Tile-
BT_FOUNDATION: 187 BT_FOUNDATION: 187
BT_TERRAFORM: 187 BT_TERRAFORM: 187
@@ -7400,6 +7405,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
BT_CLEAR_ROCKY: 150 BT_CLEAR_ROCKY: 150
BT_CLEAR_FIELDS: 375 BT_CLEAR_FIELDS: 375
BT_CLEAR_HOUSE: 1200 BT_CLEAR_HOUSE: 1200
BT_CLEAR_WATER: 7500
--Rail-- --Rail--
IsRailTile(): false IsRailTile(): false
@@ -8450,54 +8456,221 @@ ERROR: IsEnd() is invalid as Begin() is never called
KeepValue(1): done KeepValue(1): done
Count(): 0 Count(): 0
ListDump: ListDump:
Water(): done IsWaterTile(): done
Count(): 45 Count(): 40
ListDump: ListDump:
54941 => 1 29251 => 1
54940 => 1 29250 => 1
54939 => 1 29249 => 1
54938 => 1 29248 => 1
54937 => 1 29247 => 1
54936 => 1 28996 => 1
54935 => 1 28995 => 1
54934 => 1 28994 => 1
54933 => 1 28993 => 1
54685 => 1 28992 => 1
54684 => 1 28991 => 1
54683 => 1 28744 => 1
54682 => 1 28741 => 1
54681 => 1 28740 => 1
54680 => 1 28739 => 1
54679 => 1 28738 => 1
54678 => 1 28737 => 1
54677 => 1 28736 => 1
54429 => 1 28735 => 1
54428 => 1 28488 => 1
54427 => 1 28487 => 1
54426 => 1 28486 => 1
54425 => 1 28485 => 1
54424 => 1 28484 => 1
54423 => 1 28483 => 1
54422 => 1 28482 => 1
54421 => 1 28480 => 1
54173 => 1 28479 => 1
54172 => 1 29256 => 0
54171 => 1 29255 => 0
54170 => 1 29254 => 0
54169 => 1 29253 => 0
54168 => 0 29252 => 0
54167 => 0 29000 => 0
54166 => 0 28999 => 0
54165 => 0 28998 => 0
53917 => 0 28997 => 0
53916 => 0 28743 => 0
53915 => 0 28742 => 0
53914 => 0 28481 => 0
53913 => 0 IsSeaTile(): done
53912 => 0 Count(): 40
53911 => 0 ListDump:
53910 => 0 29251 => 1
53909 => 0 29250 => 1
29249 => 1
29248 => 1
29247 => 1
28996 => 1
28995 => 1
28994 => 1
28993 => 1
28992 => 1
28991 => 1
28741 => 1
28740 => 1
28739 => 1
28738 => 1
28737 => 1
28736 => 1
28735 => 1
28485 => 1
28484 => 1
28483 => 1
28482 => 1
29256 => 0
29255 => 0
29254 => 0
29253 => 0
29252 => 0
29000 => 0
28999 => 0
28998 => 0
28997 => 0
28744 => 0
28743 => 0
28742 => 0
28488 => 0
28487 => 0
28486 => 0
28481 => 0
28480 => 0
28479 => 0
IsRiverTile() done
Count(): 40
ListDump:
29256 => 0
29255 => 0
29254 => 0
29253 => 0
29252 => 0
29251 => 0
29250 => 0
29249 => 0
29248 => 0
29247 => 0
29000 => 0
28999 => 0
28998 => 0
28997 => 0
28996 => 0
28995 => 0
28994 => 0
28993 => 0
28992 => 0
28991 => 0
28744 => 0
28743 => 0
28742 => 0
28741 => 0
28740 => 0
28739 => 0
28738 => 0
28737 => 0
28736 => 0
28735 => 0
28488 => 0
28487 => 0
28486 => 0
28485 => 0
28484 => 0
28483 => 0
28482 => 0
28481 => 0
28480 => 0
28479 => 0
IsCanalTile() done
Count(): 40
ListDump:
28744 => 1
29256 => 0
29255 => 0
29254 => 0
29253 => 0
29252 => 0
29251 => 0
29250 => 0
29249 => 0
29248 => 0
29247 => 0
29000 => 0
28999 => 0
28998 => 0
28997 => 0
28996 => 0
28995 => 0
28994 => 0
28993 => 0
28992 => 0
28991 => 0
28743 => 0
28742 => 0
28741 => 0
28740 => 0
28739 => 0
28738 => 0
28737 => 0
28736 => 0
28735 => 0
28488 => 0
28487 => 0
28486 => 0
28485 => 0
28484 => 0
28483 => 0
28482 => 0
28481 => 0
28480 => 0
28479 => 0
IsCoastTile() done
Count(): 40
ListDump:
28998 => 1
28997 => 1
28743 => 1
28742 => 1
29256 => 0
29255 => 0
29254 => 0
29253 => 0
29252 => 0
29251 => 0
29250 => 0
29249 => 0
29248 => 0
29247 => 0
29000 => 0
28999 => 0
28996 => 0
28995 => 0
28994 => 0
28993 => 0
28992 => 0
28991 => 0
28744 => 0
28741 => 0
28740 => 0
28739 => 0
28738 => 0
28737 => 0
28736 => 0
28735 => 0
28488 => 0
28487 => 0
28486 => 0
28485 => 0
28484 => 0
28483 => 0
28482 => 0
28481 => 0
28480 => 0
28479 => 0
--TileList_IndustryAccepting-- --TileList_IndustryAccepting--
Count(): 47 Count(): 47
@@ -9099,12 +9272,12 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetLocation(): 33417 GetLocation(): 33417
GetEngineType(): 153 GetEngineType(): 153
GetUnitNumber(): 1 GetUnitNumber(): 1
GetAge(): 0 GetAge(): 1
GetMaxAge(): 5490 GetMaxAge(): 5490
GetAgeLeft(): 5490 GetAgeLeft(): 5489
GetCurrentSpeed(): 7 GetCurrentSpeed(): 7
GetRunningCost(): 421 GetRunningCost(): 421
GetProfitThisYear(): 0 GetProfitThisYear(): -1
GetProfitLastYear(): 0 GetProfitLastYear(): 0
GetCurrentValue(): 5947 GetCurrentValue(): 5947
GetVehicleType(): 1 GetVehicleType(): 1
@@ -9114,7 +9287,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
IsInDepot(): false IsInDepot(): false
GetNumWagons(): 1 GetNumWagons(): 1
GetWagonEngineType(): 153 GetWagonEngineType(): 153
GetWagonAge(): 0 GetWagonAge(): 1
GetLength(): 8 GetLength(): 8
GetOwner(): 1 GetOwner(): 1
BuildVehicle(): 14 BuildVehicle(): 14
@@ -9139,9 +9312,9 @@ ERROR: IsEnd() is invalid as Begin() is never called
GetNumWagons(): 3 GetNumWagons(): 3
GetLength(): 24 GetLength(): 24
GetWagonEngineType(): 9 GetWagonEngineType(): 9
GetWagonAge(): 1 GetWagonAge(): 0
GetWagonEngineType(): 27 GetWagonEngineType(): 27
GetWagonAge(): 1 GetWagonAge(): 0
GetWagonEngineType(): 27 GetWagonEngineType(): 27
GetWagonAge(): 0 GetWagonAge(): 0
GetWagonEngineType(): 65535 GetWagonEngineType(): 65535
@@ -9187,11 +9360,11 @@ ERROR: IsEnd() is invalid as Begin() is never called
14 => 1 14 => 1
12 => 1 12 => 1
Age ListDump: Age ListDump:
17 => 1
16 => 1
14 => 1
13 => 1 13 => 1
12 => 1 12 => 1
17 => 0
16 => 0
14 => 0
MaxAge ListDump: MaxAge ListDump:
16 => 10980 16 => 10980
14 => 10980 14 => 10980
@@ -9199,9 +9372,9 @@ ERROR: IsEnd() is invalid as Begin() is never called
13 => 5490 13 => 5490
12 => 5490 12 => 5490
AgeLeft ListDump: AgeLeft ListDump:
16 => 10979 16 => 10980
14 => 10979 14 => 10980
17 => 7319 17 => 7320
13 => 5489 13 => 5489
12 => 5489 12 => 5489
CurrentSpeed ListDump: CurrentSpeed ListDump:

View File

@@ -225,7 +225,7 @@ static const Command _command_proc_table[] = {
DEF_CMD(CmdBuildSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SIGNALS DEF_CMD(CmdBuildSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_SIGNALS
DEF_CMD(CmdRemoveSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_SIGNALS DEF_CMD(CmdRemoveSingleSignal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_SIGNALS
DEF_CMD(CmdTerraformLand, CMD_ALL_TILES | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_TERRAFORM_LAND DEF_CMD(CmdTerraformLand, CMD_ALL_TILES | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_TERRAFORM_LAND
DEF_CMD(CmdBuildObject, CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_OBJECT DEF_CMD(CmdBuildObject, CMD_DEITY | CMD_NO_WATER | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_OBJECT
DEF_CMD(CmdBuildTunnel, CMD_DEITY | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_TUNNEL DEF_CMD(CmdBuildTunnel, CMD_DEITY | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_TUNNEL
DEF_CMD(CmdRemoveFromRailStation, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_STATION DEF_CMD(CmdRemoveFromRailStation, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_REMOVE_FROM_RAIL_STATION
DEF_CMD(CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_RAILD DEF_CMD(CmdConvertRail, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_CONVERT_RAILD

View File

@@ -14,6 +14,7 @@
#include "string_func.h" #include "string_func.h"
#include "fileio_func.h" #include "fileio_func.h"
#include "settings_type.h" #include "settings_type.h"
#include <mutex>
#if defined(_WIN32) #if defined(_WIN32)
#include "os/windows/win32.h" #include "os/windows/win32.h"
@@ -26,6 +27,16 @@ SOCKET _debug_socket = INVALID_SOCKET;
#include "safeguards.h" #include "safeguards.h"
/** Element in the queue of debug messages that have to be passed to either NetworkAdminConsole or IConsolePrint.*/
struct QueuedDebugItem {
std::string level; ///< The used debug level.
std::string message; ///< The actual formatted message.
};
std::atomic<bool> _debug_remote_console; ///< Whether we need to send data to either NetworkAdminConsole or IConsolePrint.
std::mutex _debug_remote_console_mutex; ///< Mutex to guard the queue of debug messages for either NetworkAdminConsole or IConsolePrint.
std::vector<QueuedDebugItem> _debug_remote_console_queue; ///< Queue for debug messages to be passed to NetworkAdminConsole or IConsolePrint.
std::vector<QueuedDebugItem> _debug_remote_console_queue_spare; ///< Spare queue to swap with _debug_remote_console_queue.
int _debug_driver_level; int _debug_driver_level;
int _debug_grf_level; int _debug_grf_level;
int _debug_map_level; int _debug_map_level;
@@ -107,6 +118,11 @@ void DebugPrint(const char *level, const std::string &message)
{ {
if (_debug_socket != INVALID_SOCKET) { if (_debug_socket != INVALID_SOCKET) {
std::string msg = fmt::format("{}dbg: [{}] {}\n", GetLogPrefix(), level, message); std::string msg = fmt::format("{}dbg: [{}] {}\n", GetLogPrefix(), level, message);
/* Prevent sending a message concurrently, as that might cause interleaved messages. */
static std::mutex _debug_socket_mutex;
std::lock_guard<std::mutex> lock(_debug_socket_mutex);
/* Sending out an error when this fails would be nice, however... the error /* Sending out an error when this fails would be nice, however... the error
* would have to be send over this failing socket which won't work. */ * would have to be send over this failing socket which won't work. */
send(_debug_socket, msg.c_str(), (int)msg.size(), 0); send(_debug_socket, msg.c_str(), (int)msg.size(), 0);
@@ -130,8 +146,11 @@ void DebugPrint(const char *level, const std::string &message)
std::string msg = fmt::format("{}dbg: [{}] {}\n", GetLogPrefix(), level, message); std::string msg = fmt::format("{}dbg: [{}] {}\n", GetLogPrefix(), level, message);
fputs(msg.c_str(), stderr); fputs(msg.c_str(), stderr);
NetworkAdminConsole(level, message); if (_debug_remote_console.load()) {
if (_settings_client.gui.developer >= 2) IConsolePrint(CC_DEBUG, "dbg: [{}] {}", level, message); /* Only add to the queue when there is at least one consumer of the data. */
std::lock_guard<std::mutex> lock(_debug_remote_console_mutex);
_debug_remote_console_queue.push_back({ level, message });
}
} }
} }
@@ -229,3 +248,47 @@ const char *GetLogPrefix()
return _log_prefix; return _log_prefix;
} }
/**
* Send the queued Debug messages to either NetworkAdminConsole or IConsolePrint from the
* GameLoop thread to prevent concurrent accesses to both the NetworkAdmin's packet queue
* as well as IConsolePrint's buffers.
*
* This is to be called from the GameLoop thread.
*/
void DebugSendRemoteMessages()
{
if (!_debug_remote_console.load()) return;
{
std::lock_guard<std::mutex> lock(_debug_remote_console_mutex);
std::swap(_debug_remote_console_queue, _debug_remote_console_queue_spare);
}
for (auto &item : _debug_remote_console_queue_spare) {
NetworkAdminConsole(item.level, item.message);
if (_settings_client.gui.developer >= 2) IConsolePrint(CC_DEBUG, "dbg: [{}] {}", item.level, item.message);
}
_debug_remote_console_queue_spare.clear();
}
/**
* Reconsider whether we need to send debug messages to either NetworkAdminConsole
* or IConsolePrint. The former is when they have enabled console handling whereas
* the latter depends on the gui.developer setting's value.
*
* This is to be called from the GameLoop thread.
*/
void DebugReconsiderSendRemoteMessages()
{
bool enable = _settings_client.gui.developer >= 2;
for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) {
if (as->update_frequency[ADMIN_UPDATE_CONSOLE] & ADMIN_FREQUENCY_AUTOMATIC) {
enable = true;
break;
}
}
_debug_remote_console.store(enable);
}

View File

@@ -122,4 +122,7 @@ void CDECL ShowInfoF(const char *str, ...) WARN_FORMAT(1, 2);
const char *GetLogPrefix(); const char *GetLogPrefix();
void DebugSendRemoteMessages();
void DebugReconsiderSendRemoteMessages();
#endif /* DEBUG_H */ #endif /* DEBUG_H */

View File

@@ -1059,18 +1059,19 @@ void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub,
/** /**
* The code for setting up the blitter mode and sprite information before finally drawing the sprite. * The code for setting up the blitter mode and sprite information before finally drawing the sprite.
* @param sprite The sprite to draw. * @param sprite The sprite to draw.
* @param x The X location to draw. * @param x The X location to draw.
* @param y The Y location to draw. * @param y The Y location to draw.
* @param mode The settings for the blitter to pass. * @param mode The settings for the blitter to pass.
* @param sub Whether to only draw a sub set of the sprite. * @param sub Whether to only draw a sub set of the sprite.
* @param zoom The zoom level at which to draw the sprites. * @param zoom The zoom level at which to draw the sprites.
* @param dst Optional parameter for a different blitting destination.
* @tparam ZOOM_BASE The factor required to get the sub sprite information into the right size. * @tparam ZOOM_BASE The factor required to get the sub sprite information into the right size.
* @tparam SCALED_XY Whether the X and Y are scaled or unscaled. * @tparam SCALED_XY Whether the X and Y are scaled or unscaled.
*/ */
template <int ZOOM_BASE, bool SCALED_XY> template <int ZOOM_BASE, bool SCALED_XY>
static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mode, const SubSprite * const sub, SpriteID sprite_id, ZoomLevel zoom) static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mode, const SubSprite * const sub, SpriteID sprite_id, ZoomLevel zoom, const DrawPixelInfo *dst = nullptr)
{ {
const DrawPixelInfo *dpi = _cur_dpi; const DrawPixelInfo *dpi = (dst != nullptr) ? dst : _cur_dpi;
Blitter::BlitterParams bp; Blitter::BlitterParams bp;
if (SCALED_XY) { if (SCALED_XY) {
@@ -1185,6 +1186,47 @@ static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mo
BlitterFactory::GetCurrentBlitter()->Draw(&bp, mode, zoom); BlitterFactory::GetCurrentBlitter()->Draw(&bp, mode, zoom);
} }
/**
* Draws a sprite to a new RGBA buffer (see Colour union) instead of drawing to the screen.
*
* @param spriteId The sprite to draw.
* @return Pixel buffer, or nullptr if an 8bpp blitter is being used.
*/
std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId)
{
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
if (!blitter->Is32BppSupported()) return nullptr;
/* Gather information about the sprite to write, reserve memory */
const SpriteID real_sprite = GB(spriteId, 0, SPRITE_WIDTH);
const Sprite *sprite = GetSprite(real_sprite, ST_NORMAL);
std::unique_ptr<uint32[]> result(new uint32[sprite->width * sprite->height]);
/* Prepare new DrawPixelInfo - Normally this would be the screen but we want to draw to another buffer here.
* Normally, pitch would be scaled screen width, but in our case our "screen" is only the sprite width wide. */
DrawPixelInfo dpi;
dpi.dst_ptr = result.get();
dpi.pitch = sprite->width;
dpi.left = 0;
dpi.top = 0;
dpi.width = sprite->width;
dpi.height = sprite->height;
dpi.zoom = ZOOM_LVL_NORMAL;
/* Zero out the allocated memory, there may be garbage present. */
uint32 *writeHead = (uint32*)result.get();
for (int i = 0; i < sprite->width * sprite->height; i++) {
writeHead[i] = 0;
}
/* Temporarily disable screen animations while blitting - This prevents 40bpp_anim from writing to the animation buffer. */
_screen_disable_anim = true;
GfxBlitter<1, false>(sprite, 0, 0, BM_NORMAL, nullptr, real_sprite, ZOOM_LVL_NORMAL, &dpi);
_screen_disable_anim = false;
return result;
}
static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub, SpriteID sprite_id) static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub, SpriteID sprite_id)
{ {
GfxBlitter<ZOOM_LVL_BASE, false>(sprite, x, y, mode, sub, sprite_id, _cur_dpi->zoom); GfxBlitter<ZOOM_LVL_BASE, false>(sprite, x, y, mode, sub, sprite_id, _cur_dpi->zoom);

View File

@@ -68,6 +68,7 @@ extern std::vector<Dimension> _resolutions;
extern Dimension _cur_resolution; extern Dimension _cur_resolution;
extern Palette _cur_palette; ///< Current palette extern Palette _cur_palette; ///< Current palette
void HandleToolbarHotkey(int hotkey);
void HandleKeypress(uint keycode, WChar key); void HandleKeypress(uint keycode, WChar key);
void HandleTextInput(const char *str, bool marked = false, const char *caret = nullptr, const char *insert_location = nullptr, const char *replacement_end = nullptr); void HandleTextInput(const char *str, bool marked = false, const char *caret = nullptr, const char *insert_location = nullptr, const char *replacement_end = nullptr);
void HandleCtrlChanged(); void HandleCtrlChanged();
@@ -90,6 +91,7 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo);
Dimension GetSpriteSize(SpriteID sprid, Point *offset = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI); Dimension GetSpriteSize(SpriteID sprid, Point *offset = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI);
void DrawSpriteViewport(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr); void DrawSpriteViewport(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr);
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI); void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI);
std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId);
int DrawString(int left, int right, int top, const char *str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL); int DrawString(int left, int right, int top, const char *str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL);
int DrawString(int left, int right, int top, const std::string &str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL); int DrawString(int left, int right, int top, const std::string &str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL);

View File

@@ -24,6 +24,7 @@
#include "core/geometry_func.hpp" #include "core/geometry_func.hpp"
#include "company_base.h" #include "company_base.h"
#include "company_gui.h" #include "company_gui.h"
#include "gui.h"
#include "widgets/group_widget.h" #include "widgets/group_widget.h"
@@ -745,17 +746,19 @@ public:
NOT_REACHED(); NOT_REACHED();
} }
if (v) { if (v) {
this->vehicle_sel = v->index;
if (_ctrl_pressed) { if (_ctrl_pressed) {
this->SelectGroup(v->group_id); if (this->grouping == GB_NONE) {
this->SelectGroup(v->group_id);
} else {
ShowOrdersWindow(v);
}
} else {
this->vehicle_sel = v->index;
SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this);
SetMouseCursorVehicle(v, EIT_IN_LIST);
_cursor.vehchain = true;
this->SetDirty();
} }
SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this);
SetMouseCursorVehicle(v, EIT_IN_LIST);
_cursor.vehchain = true;
this->SetDirty();
} }
break; break;

View File

@@ -769,6 +769,7 @@ public:
const IndustrySpec *indsp = (this->selected_type == INVALID_INDUSTRYTYPE) ? nullptr : GetIndustrySpec(this->selected_type); const IndustrySpec *indsp = (this->selected_type == INVALID_INDUSTRYTYPE) ? nullptr : GetIndustrySpec(this->selected_type);
if (indsp == nullptr) this->enabled[this->selected_index] = _settings_game.difficulty.industry_density != ID_FUND_ONLY; if (indsp == nullptr) this->enabled[this->selected_index] = _settings_game.difficulty.industry_density != ID_FUND_ONLY;
this->SetButtons(); this->SetButtons();
this->SetDirty();
} }
}; };

View File

@@ -11,12 +11,14 @@
#include "error.h" #include "error.h"
#include "gui.h" #include "gui.h"
#include "window_gui.h" #include "window_gui.h"
#include "window_func.h"
#include "textbuf_gui.h" #include "textbuf_gui.h"
#include "network/network.h" #include "network/network.h"
#include "genworld.h" #include "genworld.h"
#include "network/network_gui.h" #include "network/network_gui.h"
#include "network/network_content.h" #include "network/network_content.h"
#include "landscape_type.h" #include "landscape_type.h"
#include "landscape.h"
#include "strings_func.h" #include "strings_func.h"
#include "fios.h" #include "fios.h"
#include "ai/ai_gui.hpp" #include "ai/ai_gui.hpp"
@@ -25,6 +27,10 @@
#include "language.h" #include "language.h"
#include "rev.h" #include "rev.h"
#include "highscore.h" #include "highscore.h"
#include "signs_base.h"
#include "viewport_func.h"
#include "vehicle_base.h"
#include <regex>
#include "widgets/intro_widget.h" #include "widgets/intro_widget.h"
@@ -33,13 +39,203 @@
#include "safeguards.h" #include "safeguards.h"
/**
* A viewport command for the main menu background (intro game).
*/
struct IntroGameViewportCommand {
/** Horizontal alignment value. */
enum AlignmentH : byte {
LEFT,
CENTRE,
RIGHT,
};
/** Vertical alignment value. */
enum AlignmentV : byte {
TOP,
MIDDLE,
BOTTOM,
};
int command_index = 0; ///< Sequence number of the command (order they are performed in).
Point position{ 0, 0 }; ///< Calculated world coordinate to position viewport top-left at.
VehicleID vehicle = INVALID_VEHICLE; ///< Vehicle to follow, or INVALID_VEHICLE if not following a vehicle.
uint delay = 0; ///< Delay until next command.
int zoom_adjust = 0; ///< Adjustment to zoom level from base zoom level.
bool pan_to_next = false; ///< If true, do a smooth pan from this position to the next.
AlignmentH align_h = CENTRE; ///< Horizontal alignment.
AlignmentV align_v = MIDDLE; ///< Vertical alignment.
/**
* Calculate effective position.
* This will update the position field if a vehicle is followed.
* @param vp Viewport to calculate position for.
* @return Calculated position in the viewport.
*/
Point PositionForViewport(const Viewport *vp)
{
if (this->vehicle != INVALID_VEHICLE) {
const Vehicle *v = Vehicle::Get(this->vehicle);
this->position = RemapCoords(v->x_pos, v->y_pos, v->z_pos);
}
Point p;
switch (this->align_h) {
case LEFT: p.x = this->position.x; break;
case CENTRE: p.x = this->position.x - vp->virtual_width / 2; break;
case RIGHT: p.x = this->position.x - vp->virtual_width; break;
}
switch (this->align_v) {
case TOP: p.y = this->position.y; break;
case MIDDLE: p.y = this->position.y - vp->virtual_height / 2; break;
case BOTTOM: p.y = this->position.y - vp->virtual_height; break;
}
return p;
}
};
struct SelectGameWindow : public Window { struct SelectGameWindow : public Window {
/** Vector of viewport commands parsed. */
std::vector<IntroGameViewportCommand> intro_viewport_commands;
/** Index of currently active viewport command. */
size_t cur_viewport_command_index;
/** Time spent (milliseconds) on current viewport command. */
uint cur_viewport_command_time;
/**
* Find and parse all viewport command signs.
* Fills the intro_viewport_commands vector and deletes parsed signs from the world.
*/
void ReadIntroGameViewportCommands()
{
intro_viewport_commands.clear();
/* Regular expression matching the commands: T, spaces, integer, spaces, flags, spaces, integer */
const char *sign_langauge = "^T\\s*([0-9]+)\\s*([-+A-Z0-9]+)\\s*([0-9]+)";
std::regex re(sign_langauge, std::regex_constants::icase);
/* List of signs successfully parsed to delete afterwards. */
std::vector<SignID> signs_to_delete;
for (const Sign *sign : Sign::Iterate()) {
std::smatch match;
if (std::regex_search(sign->name, match, re)) {
IntroGameViewportCommand vc;
/* Sequence index from the first matching group. */
vc.command_index = std::stoi(match[1].str());
/* Sign coordinates for positioning. */
vc.position = RemapCoords(sign->x, sign->y, sign->z);
/* Delay from the third matching group. */
vc.delay = std::stoi(match[3].str()) * 1000; // milliseconds
/* Parse flags from second matching group. */
enum IdType {
ID_NONE, ID_VEHICLE
} id_type = ID_NONE;
for (char c : match[2].str()) {
if (isdigit(c)) {
if (id_type == ID_VEHICLE) {
vc.vehicle = vc.vehicle * 10 + (c - '0');
}
} else {
id_type = ID_NONE;
switch (toupper(c)) {
case '-': vc.zoom_adjust = +1; break;
case '+': vc.zoom_adjust = -1; break;
case 'T': vc.align_v = IntroGameViewportCommand::TOP; break;
case 'M': vc.align_v = IntroGameViewportCommand::MIDDLE; break;
case 'B': vc.align_v = IntroGameViewportCommand::BOTTOM; break;
case 'L': vc.align_h = IntroGameViewportCommand::LEFT; break;
case 'C': vc.align_h = IntroGameViewportCommand::CENTRE; break;
case 'R': vc.align_h = IntroGameViewportCommand::RIGHT; break;
case 'P': vc.pan_to_next = true; break;
case 'V': id_type = ID_VEHICLE; vc.vehicle = 0; break;
}
}
}
/* Successfully parsed, store. */
intro_viewport_commands.push_back(vc);
signs_to_delete.push_back(sign->index);
}
}
/* Sort the commands by sequence index. */
std::sort(intro_viewport_commands.begin(), intro_viewport_commands.end(), [](const IntroGameViewportCommand &a, const IntroGameViewportCommand &b) { return a.command_index < b.command_index; });
/* Delete all the consumed signs, from last ID to first ID. */
std::sort(signs_to_delete.begin(), signs_to_delete.end(), [](SignID a, SignID b) { return a > b; });
for (SignID sign_id : signs_to_delete) {
delete Sign::Get(sign_id);
}
}
SelectGameWindow(WindowDesc *desc) : Window(desc) SelectGameWindow(WindowDesc *desc) : Window(desc)
{ {
this->CreateNestedTree(); this->CreateNestedTree();
this->FinishInitNested(0); this->FinishInitNested(0);
this->OnInvalidateData(); this->OnInvalidateData();
this->ReadIntroGameViewportCommands();
this->cur_viewport_command_index = (size_t)-1;
this->cur_viewport_command_time = 0;
}
void OnRealtimeTick(uint delta_ms) override
{
/* Move the main game viewport according to intro viewport commands. */
if (intro_viewport_commands.empty()) return;
/* Determine whether to move to the next command or stay at current. */
bool changed_command = false;
if (this->cur_viewport_command_index >= intro_viewport_commands.size()) {
/* Reached last, rotate back to start of the list. */
this->cur_viewport_command_index = 0;
changed_command = true;
} else {
/* Check if current command has elapsed and switch to next. */
this->cur_viewport_command_time += delta_ms;
if (this->cur_viewport_command_time >= intro_viewport_commands[this->cur_viewport_command_index].delay) {
this->cur_viewport_command_index = (this->cur_viewport_command_index + 1) % intro_viewport_commands.size();
this->cur_viewport_command_time = 0;
changed_command = true;
}
}
IntroGameViewportCommand &vc = intro_viewport_commands[this->cur_viewport_command_index];
Window *mw = FindWindowByClass(WC_MAIN_WINDOW);
Viewport *vp = mw->viewport;
/* Early exit if the current command hasn't elapsed and isn't animated. */
if (!changed_command && !vc.pan_to_next && vc.vehicle == INVALID_VEHICLE) return;
/* Reset the zoom level. */
if (changed_command) FixTitleGameZoom(vc.zoom_adjust);
/* Calculate current command position (updates followed vehicle coordinates). */
Point pos = vc.PositionForViewport(vp);
/* Calculate panning (linear interpolation between current and next command position). */
if (vc.pan_to_next) {
size_t next_command_index = (this->cur_viewport_command_index + 1) % intro_viewport_commands.size();
IntroGameViewportCommand &nvc = intro_viewport_commands[next_command_index];
Point pos2 = nvc.PositionForViewport(vp);
const double t = this->cur_viewport_command_time / (double)vc.delay;
pos.x = pos.x + (int)(t * (pos2.x - pos.x));
pos.y = pos.y + (int)(t * (pos2.y - pos.y));
}
/* Update the viewport position. */
mw->viewport->dest_scrollpos_x = mw->viewport->scrollpos_x = pos.x;
mw->viewport->dest_scrollpos_y = mw->viewport->scrollpos_y = pos.y;
UpdateViewportPosition(mw);
mw->SetDirty(); // Required during panning, otherwise logo graphics disappears
/* If there is only one command, we just executed it and don't need to do any more */
if (intro_viewport_commands.size() == 1 && vc.vehicle == INVALID_VEHICLE) intro_viewport_commands.clear();
} }
/** /**

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -134,7 +134,7 @@ STR_ABBREV_ALL :{TINY_FONT}ПӖ
# 'Mode' of transport for cargoes # 'Mode' of transport for cargoes
STR_PASSENGERS :{COMMA} пассажир{P "" сем} STR_PASSENGERS :{COMMA} пассажир{P "" сем}
# Colours, do not shuffle ###length 17
STR_COLOUR_DARK_BLUE :Тӗттӗм кӑвак STR_COLOUR_DARK_BLUE :Тӗттӗм кӑвак
STR_COLOUR_PALE_GREEN :Шупка симӗс STR_COLOUR_PALE_GREEN :Шупка симӗс
STR_COLOUR_PINK :Кӗрен STR_COLOUR_PINK :Кӗрен
@@ -169,7 +169,9 @@ STR_UNITS_POWER_SI :{COMMA}кВт
STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Чӳречене хуп STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Чӳречене хуп
# Show engines button # Show engines button
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Query window # Query window
STR_BUTTON_DEFAULT :{BLACK}Пӳрнӗ пек STR_BUTTON_DEFAULT :{BLACK}Пӳрнӗ пек
@@ -204,7 +206,10 @@ STR_SORT_BY_POPULATION :Ҫынисем
# Group by options for vehicle list # Group by options for vehicle list
# Order button in shared orders vehicle list
# Tooltips for the main toolbar # Tooltips for the main toolbar
###length 31
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Вӑййи тӑхтав STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Вӑййи тӑхтав
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Вӑййи хӑвӑртлат STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Вӑййи хӑвӑртлат
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Майлаштару STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Майлаштару
@@ -214,69 +219,71 @@ STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Аэро
STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Объект вырӑнӗ STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Объект вырӑнӗ
############ range for SE file menu starts # Scenario editor file menu
###length 7
STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_SEPARATOR :
STR_SCENEDIT_FILE_MENU_QUIT :Вӗҫле STR_SCENEDIT_FILE_MENU_QUIT :Вӗҫле
############ range for SE file menu starts
############ range for settings menu starts # Settings menu
###length 14
STR_SETTINGS_MENU_GAME_OPTIONS :Вӑййи майлаштару STR_SETTINGS_MENU_GAME_OPTIONS :Вӑййи майлаштару
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF майлаштару STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF майлаштару
############ range ends here
############ range for file menu starts # File menu
###length 5
STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_SEPARATOR :
STR_FILE_MENU_EXIT :Тух STR_FILE_MENU_EXIT :Тух
############ range ends here
# map menu # Map menu
###length 4
############ range for town menu starts # Town menu
############ range ends here ###length 2
############ range for subsidies menu starts # Subsidies menu
###length 1
STR_SUBSIDIES_MENU_SUBSIDIES :Грантсем STR_SUBSIDIES_MENU_SUBSIDIES :Грантсем
############ range ends here
############ range for graph menu starts # Graph menu
############ range ends here ###length 6
############ range for company league menu starts # Company league menu
############ range ends here ###length 3
############ range for industry menu starts # Industry menu
############ range ends here ###length 3
############ range for railway construction menu starts # URailway construction menu
############ range ends here ###length 4
############ range for road construction menu starts # Road construction menu
############ range ends here ###length 2
############ range for waterways construction menu starts # Waterways construction menu
############ range ends here ###length 1
############ range for airport construction menu starts # Aairport construction menu
###length 1
STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Аэропорт ҫурт STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Аэропорт ҫурт
############ range ends here
############ range for landscaping menu starts # Landscaping menu
############ range ends here ###length 3
############ range for music menu starts # Music menu
###length 1
STR_TOOLBAR_SOUND_MUSIC :Сасӑ/Юрӑ-кӗвӗ STR_TOOLBAR_SOUND_MUSIC :Сасӑ/Юрӑ-кӗвӗ
############ range ends here
############ range for message menu starts # Message menu
############ range ends here ###length 3
############ range for about menu starts # About menu
###length 10
STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_SEPARATOR :
STR_ABOUT_MENU_SCREENSHOT :Экран сӑнӗ STR_ABOUT_MENU_SCREENSHOT :Экран сӑнӗ
STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' çинчен STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' çинчен
############ range ends here
############ range for ordinal numbers used for the place in the highscore window # Place in highscore window
###length 15
STR_ORDINAL_NUMBER_1ST :1мӗш STR_ORDINAL_NUMBER_1ST :1мӗш
STR_ORDINAL_NUMBER_2ND :2мӗш STR_ORDINAL_NUMBER_2ND :2мӗш
STR_ORDINAL_NUMBER_3RD :3-мӗш STR_ORDINAL_NUMBER_3RD :3-мӗш
@@ -292,9 +299,8 @@ STR_ORDINAL_NUMBER_12TH :12-мӗш
STR_ORDINAL_NUMBER_13TH :13-мӗш STR_ORDINAL_NUMBER_13TH :13-мӗш
STR_ORDINAL_NUMBER_14TH :14-мӗш STR_ORDINAL_NUMBER_14TH :14-мӗш
STR_ORDINAL_NUMBER_15TH :15-мӗш STR_ORDINAL_NUMBER_15TH :15-мӗш
############ range for ordinal numbers ends
############ range for days starts ###length 31
STR_DAY_NUMBER_1ST :1мӗш STR_DAY_NUMBER_1ST :1мӗш
STR_DAY_NUMBER_2ND :2мӗш STR_DAY_NUMBER_2ND :2мӗш
STR_DAY_NUMBER_3RD :3-мӗш STR_DAY_NUMBER_3RD :3-мӗш
@@ -326,9 +332,8 @@ STR_DAY_NUMBER_28TH :28-мӗш
STR_DAY_NUMBER_29TH :29-мӗш STR_DAY_NUMBER_29TH :29-мӗш
STR_DAY_NUMBER_30TH :30-мӗш STR_DAY_NUMBER_30TH :30-мӗш
STR_DAY_NUMBER_31ST :31-мӗш STR_DAY_NUMBER_31ST :31-мӗш
############ range for days ends
############ range for months starts ###length 12
STR_MONTH_ABBREV_JAN :Кӑр STR_MONTH_ABBREV_JAN :Кӑр
STR_MONTH_ABBREV_FEB :Нар STR_MONTH_ABBREV_FEB :Нар
STR_MONTH_ABBREV_MAR :Пуш STR_MONTH_ABBREV_MAR :Пуш
@@ -342,6 +347,7 @@ STR_MONTH_ABBREV_OCT :Юпа
STR_MONTH_ABBREV_NOV :Чӳк STR_MONTH_ABBREV_NOV :Чӳк
STR_MONTH_ABBREV_DEC :Раш STR_MONTH_ABBREV_DEC :Раш
###length 12
STR_MONTH_JAN :Кӑрлач STR_MONTH_JAN :Кӑрлач
STR_MONTH_FEB :Нарӑс STR_MONTH_FEB :Нарӑс
STR_MONTH_MAR :Пуш STR_MONTH_MAR :Пуш
@@ -354,7 +360,6 @@ STR_MONTH_SEP :Авӑн
STR_MONTH_OCT :Юпа STR_MONTH_OCT :Юпа
STR_MONTH_NOV :Чӳк STR_MONTH_NOV :Чӳк
STR_MONTH_DEC :Раштав STR_MONTH_DEC :Раштав
############ range for months ends
# Graph window # Graph window
STR_GRAPH_KEY_BUTTON :{BLACK}Уҫӑ STR_GRAPH_KEY_BUTTON :{BLACK}Уҫӑ
@@ -381,14 +386,16 @@ STR_PERFORMANCE_DETAIL_KEY :{BLACK}Вакк
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}%
############ Those following lines need to be in this order!!
###length 10
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Ҫул-йӗр: STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Ҫул-йӗр:
STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Станцисем: STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Станцисем:
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Тиев: STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Тиев:
STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Укҫӑ: STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Укҫӑ:
STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Кивҫен: STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Кивҫен:
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Пурӗ: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Пурӗ:
############ End of order list
###length 10
# Music window # Music window
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
@@ -410,10 +417,12 @@ STR_HIGHSCORE_STATS :{BIG_FONT}'{STR
# Smallmap window # Smallmap window
STR_SMALLMAP_CAPTION :{WHITE}Карттӑ - {STRING} STR_SMALLMAP_CAPTION :{WHITE}Карттӑ - {STRING}
###length 7
STR_SMALLMAP_TYPE_VEHICLES :Ҫул-йӗр STR_SMALLMAP_TYPE_VEHICLES :Ҫул-йӗр
STR_SMALLMAP_TYPE_VEGETATION :Йывăç-курӑк STR_SMALLMAP_TYPE_VEGETATION :Йывăç-курӑк
STR_SMALLMAP_TYPE_OWNERS :Хуҫасем STR_SMALLMAP_TYPE_OWNERS :Хуҫасем
STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Ҫулсем STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Ҫулсем
STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Чукун ҫулсем STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Чукун ҫулсем
STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS :{TINY_FONT}{BLACK}Станцисем/Аэропортсем/Портсем STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS :{TINY_FONT}{BLACK}Станцисем/Аэропортсем/Портсем
@@ -455,6 +464,8 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Пӗлт
###length VEHICLE_TYPES
###next-name-looks-similar
# Order review system / warnings # Order review system / warnings
@@ -463,19 +474,20 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Пӗлт
###length 4
# Extra view window # Extra view window
# Game options window # Game options window
############ start of currency region ###length 42
STR_GAME_OPTIONS_CURRENCY_RUR :Вырӑсла тенкӗ (RUR) STR_GAME_OPTIONS_CURRENCY_RUR :Вырӑсла тенкӗ (RUR)
############ end of currency region
###length 2
###length 21
############ start of townname region
STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Акӑлчан STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Акӑлчан
STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Францири STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Францири
STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Нимӗҫ STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Нимӗҫ
@@ -495,13 +507,12 @@ STR_GAME_OPTIONS_TOWN_NAME_DANISH :Датчан
STR_GAME_OPTIONS_TOWN_NAME_TURKISH :Турккӑла STR_GAME_OPTIONS_TOWN_NAME_TURKISH :Турккӑла
STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :Итали STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :Итали
STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Катталун STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Катталун
############ end of townname region
STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Хӑй управ STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Хӑй управ
############ start of autosave dropdown # Autosave dropdown
###length 5
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Сӳнтер STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Сӳнтер
############ end of autosave dropdown
STR_GAME_OPTIONS_LANGUAGE :{BLACK}Чӗлхи STR_GAME_OPTIONS_LANGUAGE :{BLACK}Чӗлхи
@@ -539,66 +550,232 @@ STR_NUM_CUSTOM_NUMBER :Харпӑр х
STR_VARIETY_NONE :Ҫук STR_VARIETY_NONE :Ҫук
###length 5
###length 6
STR_SEA_LEVEL_CUSTOM :Харпӑр хӑй STR_SEA_LEVEL_CUSTOM :Харпӑр хӑй
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Харпӑр хӑй ({NUM}%) STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Харпӑр хӑй ({NUM}%)
###length 4
###length 3
STR_DISASTER_NONE :Ҫук STR_DISASTER_NONE :Ҫук
###length 4
STR_SUBSIDY_X1_5 :x1.5 STR_SUBSIDY_X1_5 :x1.5
STR_SUBSIDY_X2 :x2 STR_SUBSIDY_X2 :x2
STR_SUBSIDY_X3 :x3 STR_SUBSIDY_X3 :x3
STR_SUBSIDY_X4 :x4 STR_SUBSIDY_X4 :x4
###length 7
###length 3
# Settings tree window # Settings tree window
###length 3
###length 3
STR_CONFIG_SETTING_OFF :Сӳнтер STR_CONFIG_SETTING_OFF :Сӳнтер
STR_CONFIG_SETTING_ON :Ҫут STR_CONFIG_SETTING_ON :Ҫут
STR_CONFIG_SETTING_DISABLED :хастар мар STR_CONFIG_SETTING_DISABLED :хастар мар
###length 3
STR_CONFIG_SETTING_COMPANIES_OFF :Сӳнтер STR_CONFIG_SETTING_COMPANIES_OFF :Сӳнтер
###length 3
STR_CONFIG_SETTING_NONE :Ҫук STR_CONFIG_SETTING_NONE :Ҫук
STR_CONFIG_SETTING_ORIGINAL :Чӑн STR_CONFIG_SETTING_ORIGINAL :Чӑн
STR_CONFIG_SETTING_REALISTIC :Реалисмлӑ STR_CONFIG_SETTING_REALISTIC :Реалисмлӑ
###length 3
STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Сулахайра STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Сулахайра
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Варринче STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Варринче
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Сылтӑмра STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Сылтӑмра
###setting-zero-is-special
###setting-zero-is-special
###length 3
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :ҫук STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :ҫук
###length 3
###length 3
###length 4
###length 3
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :ҫук STR_CONFIG_SETTING_PLANE_CRASHES_NONE :ҫук
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аэропорт кивел мар: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аэропорт кивел мар: {STRING}
###length 3
###length 2
###setting-zero-is-special
###length 2
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Чӑн STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Чӑн
STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis
###length 4
###length 3
STR_CONFIG_SETTING_TREE_PLACER_NONE :Ҫук STR_CONFIG_SETTING_TREE_PLACER_NONE :Ҫук
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Чӑн STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Чӑн
###length 2
###length 2
###length 3
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Симĕс STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Симĕс
###length 4
###length 3
STR_CONFIG_SETTING_LIVERIES_NONE :Ҫук STR_CONFIG_SETTING_LIVERIES_NONE :Ҫук
###length 3
STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Сӳнтер STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Сӳнтер
###length 4
###length 3
###length 3
STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Сӳнтер STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Сӳнтер
###length 3
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :вӑрӑм (2008 раш 31меш) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :вӑрӑм (2008 раш 31меш)
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :кӗске (2008-12-31) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :кӗске (2008-12-31)
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31)
###length 4
###length 3
###setting-zero-is-special
###length 3
###setting-zero-is-special
@@ -607,28 +784,71 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31
STR_CONFIG_SETTING_NEWS_SUBSIDIES :Грантсем: {STRING} STR_CONFIG_SETTING_NEWS_SUBSIDIES :Грантсем: {STRING}
###length 3
STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Сӳнтер STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Сӳнтер
STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Кӗске STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Кӗске
STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Тулли STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Тулли
###setting-zero-is-special
###length 3
###length 2
###length 2
###length 5
STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :чӑн STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :чӑн
STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2 STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2
STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3
###length 3
###length 2
###length 4
###setting-zero-is-special
###setting-zero-is-special
###length 6
###length 3
###length 5
STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ҫук STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ҫук
STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Вӑрах STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Вӑрах
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Виҫеллӗ STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Виҫеллӗ
STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Хӑвӑрт STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Хӑвӑрт
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Питӗ хӑвӑрт STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Питӗ хӑвӑрт
###setting-zero-is-special
###length 3
###length 4
###length 3
###length 3
###length 3
###length 3
###length 3
STR_CONFIG_SETTING_INTERFACE :{ORANGE}Интерфейс STR_CONFIG_SETTING_INTERFACE :{ORANGE}Интерфейс
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Лартӑм STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Лартӑм
@@ -636,10 +856,10 @@ STR_CONFIG_SETTING_VEHICLES :{ORANGE}Ҫул-
STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Хуласем STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Хуласем
STR_CONFIG_SETTING_AI :{ORANGE}Ӑмӑртуҫӑсем STR_CONFIG_SETTING_AI :{ORANGE}Ӑмӑртуҫӑсем
###length 2
STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_NPF :NPF
# Config errors # Config errors
# Video initalization errors # Video initalization errors
@@ -666,15 +886,18 @@ STR_QUIT_NO :{BLACK}Ҫук
STR_ABANDON_GAME_CAPTION :{WHITE}Вӑййи ан килӗш STR_ABANDON_GAME_CAPTION :{WHITE}Вӑййи ан килӗш
# Cheat window # Cheat window
STR_CHEAT_CHANGE_DATE :{LTBLUE}Тӳрлет кун: {ORANGE}{DATE_SHORT}
###length 4
STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Виҫеллӗ климат STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Виҫеллӗ климат
STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Сивӗ климат STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Сивӗ климат
STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Тропик климат STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Тропик климат
STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Вӑйӑ пахчи STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Вӑйӑ пахчи
STR_CHEAT_CHANGE_DATE :{LTBLUE}Тӳрлет кун: {ORANGE}{DATE_SHORT}
# Livery window # Livery window
###length 23
STR_LIVERY_DEFAULT :Яланхи тӗс STR_LIVERY_DEFAULT :Яланхи тӗс
STR_LIVERY_STEAM :Пӑравус STR_LIVERY_STEAM :Пӑравус
STR_LIVERY_DIESEL :Ӑшӑвус(Diesel Engine) STR_LIVERY_DIESEL :Ӑшӑвус(Diesel Engine)
@@ -728,8 +951,8 @@ STR_FACE_COLLAR :Ҫуха:
STR_FACE_TIE :Галстук: STR_FACE_TIE :Галстук:
STR_FACE_EARRING :Алка: STR_FACE_EARRING :Алка:
############ Next lines match ServerGameType # Matches ServerGameType
############ End of leave-in-this-order ###length 3
# Network server list # Network server list
STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Вӑйӑҫӑ ят: STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Вӑйӑҫӑ ят:
@@ -748,7 +971,6 @@ STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Чӗлх
STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}ВӐЙЙИ ИНФОРМАЦИ STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}ВӐЙЙИ ИНФОРМАЦИ
STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Вӑйӑҫӑсем: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Вӑйӑҫӑсем: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
STR_NETWORK_SERVER_LIST_LANGUAGE :{SILVER}Чӗлхи: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Ҫӗр пичӗ: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Ҫӗр пичӗ: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Виҫе картти: {WHITE}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Виҫе картти: {WHITE}{COMMA}x{COMMA}
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Сервер версиӗ: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Сервер версиӗ: {WHITE}{STRING}
@@ -776,9 +998,8 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн
# Network connecting window # Network connecting window
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 8
@@ -786,8 +1007,8 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн
# Network client list # Network client list
############ Begin of ConnectionType # Matches ConnectionType
############ End of ConnectionType ###length 5
@@ -802,17 +1023,20 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн
# Network messages # Network messages
############ Leave those lines in this order!!
############ End of leave-in-this-order
###length 21
# Network related errors # Network related errors
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 12
# Content downloading window # Content downloading window
###length 5
STR_CONTENT_DETAIL_VERSION :{SILVER}Верси: {WHITE}{STRING} STR_CONTENT_DETAIL_VERSION :{SILVER}Верси: {WHITE}{STRING}
# Order of these is important! # Order of these is important!
@@ -966,10 +1190,10 @@ STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Маяк
STR_ABOUT_VERSION :{BLACK}OpenTTD верси {REV} STR_ABOUT_VERSION :{BLACK}OpenTTD верси {REV}
# Framerate display window # Framerate display window
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 15
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 15
# Save/load game/scenario # Save/load game/scenario
@@ -1022,6 +1246,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
# NewGRF status # NewGRF status
STR_NEWGRF_LIST_NONE :Ҫук STR_NEWGRF_LIST_NONE :Ҫук
###length 3
# NewGRF 'it's broken' warnings # NewGRF 'it's broken' warnings
@@ -1049,15 +1274,17 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
# Town local authority window # Town local authority window
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
###length 8
###length 8
# Goal window # Goal window
STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_TEXT :{ORANGE}{STRING}
# Goal question window # Goal question window
############ Start of Goal Question button list # Goal Question button list
############ End of Goal Question button list ###length 18
# Subsidies window # Subsidies window
STR_SUBSIDIES_NONE :{ORANGE}- Ҫук - STR_SUBSIDIES_NONE :{ORANGE}- Ҫук -
@@ -1078,8 +1305,7 @@ STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_L
############ range for rating starts ###length 8
############ range for rating ends
@@ -1091,6 +1317,9 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN
# Finances window # Finances window
STR_FINANCES_YEAR :{WHITE}{NUM} STR_FINANCES_YEAR :{WHITE}{NUM}
###length 13
STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG}
STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG}
@@ -1114,16 +1343,20 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ҫу
# Vehicle lists # Vehicle lists
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Group window # Group window
###length VEHICLE_TYPES
###length VEHICLE_TYPES
@@ -1132,22 +1365,34 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ҫу
# Build vehicle window # Build vehicle window
###length 4
############ range for vehicle availability starts # Vehicle availability
############ range for vehicle availability ends ###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Depot window # Depot window
STR_DEPOT_CAPTION :{WHITE}{DEPOT} STR_DEPOT_CAPTION :{WHITE}{DEPOT}
@@ -1157,18 +1402,29 @@ STR_DEPOT_NO_ENGINE :{BLACK}-
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING} STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Engine preview window # Engine preview window
@@ -1180,34 +1436,48 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG}
# Autoreplace window # Autoreplace window
###length VEHICLE_TYPES
###length 2
###next-name-looks-similar
# Vehicle view # Vehicle view
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Messages in the start stop button in the vehicle view # Messages in the start stop button in the vehicle view
# Vehicle stopped/started animations # Vehicle stopped/started animations
###length 2
###length 2
# Vehicle details # Vehicle details
###length VEHICLE_TYPES
# The next two need to stay in this order
@@ -1216,6 +1486,7 @@ STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Савӑ
###length VEHICLE_TYPES
# Extra buttons for train details windows # Extra buttons for train details windows
@@ -1225,8 +1496,11 @@ STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Савӑ
# Vehicle refit # Vehicle refit
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Order view # Order view
@@ -1242,6 +1516,8 @@ STR_ORDER_TEXT :{STRING} {STRIN
# Conditional order variables, must follow order of OrderConditionVariable enum # Conditional order variables, must follow order of OrderConditionVariable enum
###length 8
###next-name-looks-similar
@@ -1252,6 +1528,9 @@ STR_ORDER_TEXT :{STRING} {STRIN
# String parts to build the order string # String parts to build the order string
###length 3
###next-name-looks-similar
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
@@ -1262,6 +1541,7 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI
###length 3
@@ -1305,6 +1585,7 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
# Textfile window # Textfile window
###length 3
# Vehicle loading indicators # Vehicle loading indicators
@@ -1386,13 +1667,23 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Ҫул
# Generic vehicle errors # Generic vehicle errors
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
@@ -1409,8 +1700,10 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Ҫул
# Sign related errors # Sign related errors
# Translatable comment for OpenTTD's desktop shortcut # Translatable comment for OpenTTD's desktop shortcut
###external 1
# Translatable descriptions in media/baseset/*.ob* files # Translatable descriptions in media/baseset/*.ob* files
###external 10
##id 0x2000 ##id 0x2000
# Town building names # Town building names
@@ -1423,19 +1716,29 @@ STR_TOWN_BUILDING_NAME_STATUE_1 :Палӑк
############ WARNING, using range 0x6000 for strings that are stored in the savegame ############ WARNING, using range 0x6000 for strings that are stored in the savegame
############ These strings may never get a new id, or savegames will break! ############ These strings may never get a new id, or savegames will break!
##id 0x6000 ##id 0x6000
STR_SV_EMPTY : STR_SV_EMPTY :
###length 27
STR_SV_STNAME :{STRING} STR_SV_STNAME :{STRING}
STR_SV_STNAME_AIRPORT :{STRING} Аэропорт STR_SV_STNAME_AIRPORT :{STRING} Аэропорт
STR_SV_STNAME_BUOY :{STRING} STR_SV_STNAME_BUOY :{STRING}
STR_SV_STNAME_WAYPOINT :{STRING} STR_SV_STNAME_WAYPOINT :{STRING}
##id 0x6020 ##id 0x6020
############ end of savegame specific region! ############ end of savegame specific region!
##id 0x8000 ##id 0x8000
###length 116
# Vehicle names # Vehicle names
###length 88
###length 11
###length 41
##id 0x8800 ##id 0x8800
# Formatting of some strings # Formatting of some strings
STR_FORMAT_DATE_TINY :{STRING}.{STRING}.{NUM} STR_FORMAT_DATE_TINY :{STRING}.{STRING}.{NUM}
@@ -1444,6 +1747,14 @@ STR_FORMAT_DATE_LONG :{STRING} {STRIN
STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING} STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING}
###length 2
###length 2
###length 6
###next-name-looks-similar
# _SERIAL version of AIRACRAFT doesn't exist
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING} STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -57,7 +57,7 @@ STR_ABBREV_COAL :{TINY_FONT}क
# 'Mode' of transport for cargoes # 'Mode' of transport for cargoes
# Colours, do not shuffle ###length 17
STR_COLOUR_PINK :गुलाबी STR_COLOUR_PINK :गुलाबी
STR_COLOUR_RED :लाल STR_COLOUR_RED :लाल
@@ -77,7 +77,9 @@ STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp
STR_TOOLTIP_RESIZE :{BLACK}खिड़की का आकार बदलने के लिये क्लिक करके खींचें STR_TOOLTIP_RESIZE :{BLACK}खिड़की का आकार बदलने के लिये क्लिक करके खींचें
# Show engines button # Show engines button
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Query window # Query window
@@ -97,86 +99,89 @@ STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :पिछले
# Group by options for vehicle list # Group by options for vehicle list
# Order button in shared orders vehicle list
# Tooltips for the main toolbar # Tooltips for the main toolbar
###length 31
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}ध्वनि/संगीत विकल्प STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}ध्वनि/संगीत विकल्प
# Extra tooltips for the scenario editor toolbar # Extra tooltips for the scenario editor toolbar
STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}मानचित्र, नगर निर्देशिका दिखायें STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}मानचित्र, नगर निर्देशिका दिखायें
############ range for SE file menu starts # Scenario editor file menu
###length 7
STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_SEPARATOR :
STR_SCENEDIT_FILE_MENU_QUIT :निकास STR_SCENEDIT_FILE_MENU_QUIT :निकास
############ range for SE file menu starts
############ range for settings menu starts # Settings menu
###length 14
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :समायोजन STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :समायोजन
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :पथ-संकेतों के नाम दिखायें STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :पथ-संकेतों के नाम दिखायें
############ range ends here
############ range for file menu starts # File menu
###length 5
STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_SEPARATOR :
############ range ends here
# map menu # Map menu
###length 4
############ range for town menu starts # Town menu
############ range ends here ###length 2
############ range for subsidies menu starts # Subsidies menu
############ range ends here ###length 1
############ range for graph menu starts # Graph menu
############ range ends here ###length 6
############ range for company league menu starts # Company league menu
############ range ends here ###length 3
############ range for industry menu starts # Industry menu
###length 3
STR_INDUSTRY_MENU_INDUSTRY_CHAIN :औद्योगिक शृंखला STR_INDUSTRY_MENU_INDUSTRY_CHAIN :औद्योगिक शृंखला
############ range ends here
############ range for railway construction menu starts # URailway construction menu
###length 4
STR_RAIL_MENU_ELRAIL_CONSTRUCTION :विद्युतिकृत रेलवे निर्माण STR_RAIL_MENU_ELRAIL_CONSTRUCTION :विद्युतिकृत रेलवे निर्माण
############ range ends here
############ range for road construction menu starts # Road construction menu
############ range ends here ###length 2
############ range for waterways construction menu starts # Waterways construction menu
############ range ends here ###length 1
############ range for airport construction menu starts # Aairport construction menu
############ range ends here ###length 1
############ range for landscaping menu starts # Landscaping menu
############ range ends here ###length 3
############ range for music menu starts # Music menu
############ range ends here ###length 1
############ range for message menu starts # Message menu
############ range ends here ###length 3
############ range for about menu starts # About menu
###length 10
STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_SEPARATOR :
############ range ends here
############ range for ordinal numbers used for the place in the highscore window # Place in highscore window
###length 15
STR_ORDINAL_NUMBER_2ND :द्वितीय STR_ORDINAL_NUMBER_2ND :द्वितीय
############ range for ordinal numbers ends
############ range for days starts ###length 31
STR_DAY_NUMBER_14TH :१४ STR_DAY_NUMBER_14TH :१४
STR_DAY_NUMBER_15TH :१५ STR_DAY_NUMBER_15TH :१५
STR_DAY_NUMBER_23RD :२३ STR_DAY_NUMBER_23RD :२३
############ range for days ends
############ range for months starts ###length 12
STR_MONTH_ABBREV_JAN :जन STR_MONTH_ABBREV_JAN :जन
STR_MONTH_ABBREV_NOV :नव STR_MONTH_ABBREV_NOV :नव
###length 12
STR_MONTH_AUG :अगस्त STR_MONTH_AUG :अगस्त
############ range for months ends
# Graph window # Graph window
STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}
@@ -193,10 +198,12 @@ STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLA
STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}'
# Performance detail window # Performance detail window
############ Those following lines need to be in this order!!
###length 10
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}वाहन: STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}वाहन:
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}माल : STR_PERFORMANCE_DETAIL_CARGO :{BLACK}माल :
############ End of order list
###length 10
# Music window # Music window
STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM}
@@ -208,6 +215,8 @@ STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHIT
# Smallmap window # Smallmap window
###length 7
STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}ट्रक लदान वीथी STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}ट्रक लदान वीथी
STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}रिक्त भूमि STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}रिक्त भूमि
@@ -237,6 +246,8 @@ STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLAC
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING}{INDUSTRY} के उत्पादन में {COMMA}% कमी आयी! STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING}{INDUSTRY} के उत्पादन में {COMMA}% कमी आयी!
###length VEHICLE_TYPES
###next-name-looks-similar
# Order review system / warnings # Order review system / warnings
@@ -246,32 +257,32 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC
###length 4
# Extra view window # Extra view window
# Game options window # Game options window
############ start of currency region ###length 42
STR_GAME_OPTIONS_CURRENCY_FIM :फिनलैंड मार्का (FIM) STR_GAME_OPTIONS_CURRENCY_FIM :फिनलैंड मार्का (FIM)
STR_GAME_OPTIONS_CURRENCY_ISK :आइसलैंडिक क्रोना (ISK) STR_GAME_OPTIONS_CURRENCY_ISK :आइसलैंडिक क्रोना (ISK)
STR_GAME_OPTIONS_CURRENCY_HKD :हाँग काँग डॉलर (एचकेडी) STR_GAME_OPTIONS_CURRENCY_HKD :हाँग काँग डॉलर (एचकेडी)
############ end of currency region
###length 2
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :दाईं ओर वाहन चलाएँ STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :दाईं ओर वाहन चलाएँ
############ start of townname region ###length 21
STR_GAME_OPTIONS_TOWN_NAME_FRENCH :फ़्रेंच STR_GAME_OPTIONS_TOWN_NAME_FRENCH :फ़्रेंच
STR_GAME_OPTIONS_TOWN_NAME_POLISH :पोलिश STR_GAME_OPTIONS_TOWN_NAME_POLISH :पोलिश
STR_GAME_OPTIONS_TOWN_NAME_TURKISH :तुर्की STR_GAME_OPTIONS_TOWN_NAME_TURKISH :तुर्की
STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :इटैलियन STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :इटैलियन
############ end of townname region
############ start of autosave dropdown # Autosave dropdown
###length 5
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_1_MONTH :प्रत्येक माह STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_1_MONTH :प्रत्येक माह
############ end of autosave dropdown
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% पूर्ण) STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% पूर्ण)
@@ -302,51 +313,185 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}एक
STR_VARIETY_MEDIUM :मध्यम STR_VARIETY_MEDIUM :मध्यम
###length 5
STR_AI_SPEED_SLOW :धीमा STR_AI_SPEED_SLOW :धीमा
###length 6
###length 4
###length 3
###length 4
###length 7
###length 3
# Settings tree window # Settings tree window
###length 3
###length 3
###length 3
STR_CONFIG_SETTING_COMPANIES_OFF :बन्द STR_CONFIG_SETTING_COMPANIES_OFF :बन्द
###length 3
###length 3
###setting-zero-is-special
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :मानचित्र के भूभाग की अधिकतम ऊंचाई निर्धारित करें। "(स्वतः)" चुनने पर भूभाग जनन के बाद एक उपयुक्त संख्या चुन ली जायेगी। STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :मानचित्र के भूभाग की अधिकतम ऊंचाई निर्धारित करें। "(स्वतः)" चुनने पर भूभाग जनन के बाद एक उपयुक्त संख्या चुन ली जायेगी।
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :ट्रेन के लिये ढलान की तेजी की स्थापना। ऊँची संख्या से चढ़ान पर चढ़ना अधिक कठिन हो जाता है। STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :ट्रेन के लिये ढलान की तेजी की स्थापना। ऊँची संख्या से चढ़ान पर चढ़ना अधिक कठिन हो जाता है।
###length 3
###length 3
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :निर्दिष्ट करें कि ट्रेनों को स्टेशन पर कहाँ रुकना चाहिये। स्टेशन में प्रवेश के पास 'समीप का छोर', स्टेशन के बीच में 'मध्य', और प्रवेश की उलटी ओर 'दूर का छोर' है। ध्यान दें कि यह विन्यास केवल नये निर्देशों के लिये मानक स्थापित करता है। प्रत्येक निर्देश को अलग से किसी अन्य व्यवहार के लिये स्थापित किया जा सकता है। STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :निर्दिष्ट करें कि ट्रेनों को स्टेशन पर कहाँ रुकना चाहिये। स्टेशन में प्रवेश के पास 'समीप का छोर', स्टेशन के बीच में 'मध्य', और प्रवेश की उलटी ओर 'दूर का छोर' है। ध्यान दें कि यह विन्यास केवल नये निर्देशों के लिये मानक स्थापित करता है। प्रत्येक निर्देश को अलग से किसी अन्य व्यवहार के लिये स्थापित किया जा सकता है।
###length 3
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :समीप का छोर STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :समीप का छोर
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :मध्य STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :मध्य
STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :दूर का छोर STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :दूर का छोर
###length 4
STR_CONFIG_SETTING_BRIBE_HELPTEXT :कंपनियों को स्थानीय नगर प्रशासन को रिश्वत देने की अनुमति दें। यदि रिश्वत पर किसी निरीक्षक की दृष्टि पड़ती है तो कंपनी छः महीने के लिये नगर में काम नहीं कर पायेगी। STR_CONFIG_SETTING_BRIBE_HELPTEXT :कंपनियों को स्थानीय नगर प्रशासन को रिश्वत देने की अनुमति दें। यदि रिश्वत पर किसी निरीक्षक की दृष्टि पड़ती है तो कंपनी छः महीने के लिये नगर में काम नहीं कर पायेगी।
###length 3
STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :सक्षम होने पर वाहनों के निर्देशों की आवधिक जाँच की जाती है, और कुछ सुस्पष्ट मामलों का पता चलते ही एक संदेश द्वारा बताया जाता है। STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :सक्षम होने पर वाहनों के निर्देशों की आवधिक जाँच की जाती है, और कुछ सुस्पष्ट मामलों का पता चलते ही एक संदेश द्वारा बताया जाता है।
###length 3
STR_CONFIG_SETTING_ORDER_REVIEW_OFF :नहीं STR_CONFIG_SETTING_ORDER_REVIEW_OFF :नहीं
###length 2
###setting-zero-is-special
###length 2
###length 4
###length 3
###length 2
###length 2
STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :एक स्टेशन के हिस्सों के विस्तार हेतु अधिकतम क्षेत्र निर्धारित करें। ऊंची संख्या खेल को धीमा कर सकती है। STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :एक स्टेशन के हिस्सों के विस्तार हेतु अधिकतम क्षेत्र निर्धारित करें। ऊंची संख्या खेल को धीमा कर सकती है।
###length 3
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :बैंगनी STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :बैंगनी
###length 4
###length 3
###length 3
###length 4
STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :अक्षम STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :अक्षम
###length 3
###length 3
###length 3
###length 4
###length 3
###setting-zero-is-special
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :सीमाहीन (आपके कंप्यूटर द्वारा सीमित) STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :सीमाहीन (आपके कंप्यूटर द्वारा सीमित)
STR_CONFIG_SETTING_SOUND_NEWS :समाचार पत्र: {STRING} STR_CONFIG_SETTING_SOUND_NEWS :समाचार पत्र: {STRING}
@@ -354,29 +499,104 @@ STR_CONFIG_SETTING_SOUND_NEWS :समाचा
###length 3
###setting-zero-is-special
STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :दुर्घटनायें / आपदायें : {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :दुर्घटनायें / आपदायें : {STRING}
###length 3
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
###setting-zero-is-special
###length 3
###length 2
###length 2
###length 5
###length 3
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :नगर में माल उत्पादन: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE :नगर में माल उत्पादन: {STRING}
###length 2
###length 4
###setting-zero-is-special
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
###setting-zero-is-special
###length 6
###length 3
STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :२x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :२x
###length 5
###setting-zero-is-special
###length 3
###length 4
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :अंतर्राष्ट्रीय मानक (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :अंतर्राष्ट्रीय मानक (m/s)
###length 3
###length 3
###length 3
###length 3
###length 3
STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}सामान्य STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}सामान्य
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :नौकाओं द्वारा उपयोग किया जाने वाला पथान्वेषी STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :नौकाओं द्वारा उपयोग किया जाने वाला पथान्वेषी
###length 2
# Config errors # Config errors
@@ -405,17 +625,20 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}क्
# Cheat window # Cheat window
###length 4
# Livery window # Livery window
###length 23
# Face selection window # Face selection window
STR_FACE_LOAD_DONE :{WHITE}ओपनटीटीडी प्रारूप पत्र से आपका प्रिय चेहरा भर लिया गया है STR_FACE_LOAD_DONE :{WHITE}ओपनटीटीडी प्रारूप पत्र से आपका प्रिय चेहरा भर लिया गया है
STR_FACE_COLLAR_TOOLTIP :{BLACK}कॉलर बदलें STR_FACE_COLLAR_TOOLTIP :{BLACK}कॉलर बदलें
############ Next lines match ServerGameType # Matches ServerGameType
############ End of leave-in-this-order ###length 3
# Network server list # Network server list
@@ -434,9 +657,8 @@ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}सर
# Network connecting window # Network connecting window
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 8
@@ -444,8 +666,8 @@ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}सर
# Network client list # Network client list
############ Begin of ConnectionType # Matches ConnectionType
############ End of ConnectionType ###length 5
@@ -460,23 +682,26 @@ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}सर
# Network messages # Network messages
############ Leave those lines in this order!!
############ End of leave-in-this-order
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}संपर्क विच्छेद संभावित STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}संपर्क विच्छेद संभावित
###length 21
# Network related errors # Network related errors
############ Leave those lines in this order!!
###length 12
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :खेल अभी भी ठहरा हुआ है ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :खेल अभी भी ठहरा हुआ है ({STRING}, {STRING}, {STRING})
############ End of leave-in-this-order
STR_NETWORK_MESSAGE_CLIENT_LEAVING :छोड़ रहा है STR_NETWORK_MESSAGE_CLIENT_LEAVING :छोड़ रहा है
# Content downloading window # Content downloading window
STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}खोजी गयी सामग्री OpenTTD की सामग्री सेवा में उपलब्ध नहीं है, आप OpenTTD से असंबद्ध वेबसाइटों पर खोज सकते हैं STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}खोजी गयी सामग्री OpenTTD की सामग्री सेवा में उपलब्ध नहीं है, आप OpenTTD से असंबद्ध वेबसाइटों पर खोज सकते हैं
###length 5
STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}यह आपके पास पहले से मौजूद है STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}यह आपके पास पहले से मौजूद है
STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}यह सामग्री अज्ञात है और इसे ओपनटीटीडी में प्राप्त नहीं किया जा सकता है STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}यह सामग्री अज्ञात है और इसे ओपनटीटीडी में प्राप्त नहीं किया जा सकता है
# Order of these is important! # Order of these is important!
# Content downloading progress window # Content downloading progress window
@@ -596,13 +821,11 @@ STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :इस्पा
STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms
STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms
STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES}
STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES}
STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} ###length 15
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 15
############ Leave those lines in this order!!
STR_FRAMETIME_CAPTION_GL_ECONOMY :माल प्रबंधन STR_FRAMETIME_CAPTION_GL_ECONOMY :माल प्रबंधन
############ End of leave-in-this-order
# Save/load game/scenario # Save/load game/scenario
@@ -649,6 +872,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
# NewGRF status # NewGRF status
###length 3
# NewGRF 'it's broken' warnings # NewGRF 'it's broken' warnings
@@ -678,8 +902,10 @@ STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}फै
# Town local authority window # Town local authority window
###length 8
STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :लघु विज्ञापन अभियान STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :लघु विज्ञापन अभियान
###length 8
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}नगरों के सड़क तंत्र के पुनर्निर्माण में निवेश करें।{}इससे अधिकतम ६ महीने तक यातायात में बहुत विघ्न पड़ता है।{}मूल्य : {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}नगरों के सड़क तंत्र के पुनर्निर्माण में निवेश करें।{}इससे अधिकतम ६ महीने तक यातायात में बहुत विघ्न पड़ता है।{}मूल्य : {CURRENCY_LONG}
# Goal window # Goal window
@@ -689,8 +915,8 @@ STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING}
# Goal question window # Goal question window
############ Start of Goal Question button list # Goal Question button list
############ End of Goal Question button list ###length 18
# Subsidies window # Subsidies window
STR_SUBSIDIES_OFFERED_TITLE :{BLACK}इन सेवाओं के लिये अनुदान प्रस्तावित : STR_SUBSIDIES_OFFERED_TITLE :{BLACK}इन सेवाओं के लिये अनुदान प्रस्तावित :
@@ -714,8 +940,7 @@ STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_L
STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} {STATION} द्वारा STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} {STATION} द्वारा
############ range for rating starts ###length 8
############ range for rating ends
@@ -727,7 +952,10 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN
# Finances window # Finances window
STR_FINANCES_YEAR :{WHITE}{NUM} STR_FINANCES_YEAR :{WHITE}{NUM}
###length 13
STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}संपत्ति का रखरखाव STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}संपत्ति का रखरखाव
STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG}
STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG}
STR_FINANCES_BORROW_BUTTON :{BLACK}{CURRENCY_LONG} उधार STR_FINANCES_BORROW_BUTTON :{BLACK}{CURRENCY_LONG} उधार
@@ -759,16 +987,20 @@ STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING
# Vehicle lists # Vehicle lists
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Group window # Group window
###length VEHICLE_TYPES
###length VEHICLE_TYPES
@@ -777,27 +1009,39 @@ STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING
# Build vehicle window # Build vehicle window
###length 4
############ range for vehicle availability starts # Vehicle availability
###length VEHICLE_TYPES
STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :नई ट्रेनें STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :नई ट्रेनें
############ range for vehicle availability ends
STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}मूल्य : {GOLD}{CURRENCY_LONG}{BLACK} भार : {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}मूल्य : {GOLD}{CURRENCY_LONG}{BLACK} भार : {GOLD}{WEIGHT_SHORT}
STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}भार : {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}भार : {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT})
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}छिपायें STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}छिपायें
###length VEHICLE_TYPES
###length VEHICLE_TYPES
STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}नौका प्रकार को छिपायें/दिखायें STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}नौका प्रकार को छिपायें/दिखायें
###length VEHICLE_TYPES
# Depot window # Depot window
STR_DEPOT_CAPTION :{WHITE}{DEPOT} STR_DEPOT_CAPTION :{WHITE}{DEPOT}
@@ -805,18 +1049,29 @@ STR_DEPOT_CAPTION :{WHITE}{DEPOT}
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING} STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Engine preview window # Engine preview window
@@ -829,36 +1084,49 @@ STR_ENGINE_PREVIEW_SHIP :जहाज
# Autoreplace window # Autoreplace window
###length VEHICLE_TYPES
STR_REPLACE_VEHICLES_STOP :वाहन प्रतिस्थापित करना बन्द करें STR_REPLACE_VEHICLES_STOP :वाहन प्रतिस्थापित करना बन्द करें
###length 2
###next-name-looks-similar
# Vehicle view # Vehicle view
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}वर्तमान ट्रेन व्यवहार - ट्रेन रोकने/चलाने के लिये क्लिक करें STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}वर्तमान ट्रेन व्यवहार - ट्रेन रोकने/चलाने के लिये क्लिक करें
# Messages in the start stop button in the vehicle view # Messages in the start stop button in the vehicle view
# Vehicle stopped/started animations # Vehicle stopped/started animations
###length 2
###length 2
# Vehicle details # Vehicle details
###length VEHICLE_TYPES
# The next two need to stay in this order
@@ -867,6 +1135,8 @@ STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}वर
###length VEHICLE_TYPES
# Extra buttons for train details windows # Extra buttons for train details windows
STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} निर्माण: {LTBLUE}{NUM}{BLACK} मूल्य: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} निर्माण: {LTBLUE}{NUM}{BLACK} मूल्य: {LTBLUE}{CURRENCY_LONG}
@@ -876,8 +1146,11 @@ STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE
# Vehicle refit # Vehicle refit
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Order view # Order view
@@ -894,6 +1167,8 @@ STR_ORDER_REFIT_TOOLTIP :{BLACK}इस
# Conditional order variables, must follow order of OrderConditionVariable enum # Conditional order variables, must follow order of OrderConditionVariable enum
###length 8
###next-name-looks-similar
STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :के बराबर है STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :के बराबर है
@@ -906,6 +1181,9 @@ STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :के बर
STR_ORDER_NEAREST_DEPOT :निकटतम STR_ORDER_NEAREST_DEPOT :निकटतम
###length 3
###next-name-looks-similar
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
@@ -916,6 +1194,7 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI
###length 3
@@ -960,6 +1239,7 @@ STR_AI_CONFIG_CHANGE_NONE :
# Textfile window # Textfile window
###length 3
# Vehicle loading indicators # Vehicle loading indicators
@@ -1030,7 +1310,6 @@ STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}पट
# Road construction errors # Road construction errors
STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... असंगत ट्रामवे
# Waterway construction errors # Waterway construction errors
STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... पानी पर बनाया जाना चाहिये। STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... पानी पर बनाया जाना चाहिये।
@@ -1047,19 +1326,29 @@ STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... प
# Generic vehicle errors # Generic vehicle errors
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}जहाज का नामकरण नहीं कर सकते... STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}जहाज का नामकरण नहीं कर सकते...
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}रेल वाहन नहीं बेच सकते... STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}रेल वाहन नहीं बेच सकते...
# Specific vehicle errors # Specific vehicle errors
@@ -1073,8 +1362,10 @@ STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... व
# Sign related errors # Sign related errors
# Translatable comment for OpenTTD's desktop shortcut # Translatable comment for OpenTTD's desktop shortcut
###external 1
# Translatable descriptions in media/baseset/*.ob* files # Translatable descriptions in media/baseset/*.ob* files
###external 10
STR_BASESOUNDS_WIN_DESCRIPTION :ट्रांस्पोर्ट टायिकून डीलक्स के विंडोज संस्करण की मूल ध्वनियां। STR_BASESOUNDS_WIN_DESCRIPTION :ट्रांस्पोर्ट टायिकून डीलक्स के विंडोज संस्करण की मूल ध्वनियां।
##id 0x2000 ##id 0x2000
@@ -1088,9 +1379,11 @@ STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :बैंक
############ WARNING, using range 0x6000 for strings that are stored in the savegame ############ WARNING, using range 0x6000 for strings that are stored in the savegame
############ These strings may never get a new id, or savegames will break! ############ These strings may never get a new id, or savegames will break!
##id 0x6000 ##id 0x6000
STR_SV_EMPTY : STR_SV_EMPTY :
###length 27
STR_SV_STNAME :{STRING} STR_SV_STNAME :{STRING}
STR_SV_STNAME_NORTH :{STRING} उत्तर STR_SV_STNAME_NORTH :{STRING} उत्तर
STR_SV_STNAME_CENTRAL :{STRING} केंद्रीय STR_SV_STNAME_CENTRAL :{STRING} केंद्रीय
@@ -1098,9 +1391,11 @@ STR_SV_STNAME_AIRPORT :{STRING} हव
STR_SV_STNAME_BUOY :{STRING} STR_SV_STNAME_BUOY :{STRING}
STR_SV_STNAME_WAYPOINT :{STRING} STR_SV_STNAME_WAYPOINT :{STRING}
##id 0x6020 ##id 0x6020
############ end of savegame specific region! ############ end of savegame specific region!
##id 0x8000 ##id 0x8000
###length 116
# Vehicle names # Vehicle names
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :कोयला वाहन STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :कोयला वाहन
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FRUIT_TRUCK :फल वाहन STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FRUIT_TRUCK :फल वाहन
@@ -1108,10 +1403,16 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (वि
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :खिलौनों का डब्बा STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :खिलौनों का डब्बा
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :पानी का टैंकर STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :पानी का टैंकर
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :बबल वैन STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :बबल वैन
###length 88
STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :प्लॉडीपीहट एमके३ बस STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :प्लॉडीपीहट एमके३ बस
STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :मोरलैंड काष्ठ ट्रक STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :मोरलैंड काष्ठ ट्रक
STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :फोस्टर कवचयुक्त ट्रक STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :फोस्टर कवचयुक्त ट्रक
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :पावरनोट मिष्ठान्न ट्रक STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :पावरनोट मिष्ठान्न ट्रक
###length 11
###length 41
STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_COTSWALD_LB_3 :बेकवेल कॉट्सवॉल्ड एलबी-३ STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_COTSWALD_LB_3 :बेकवेल कॉट्सवॉल्ड एलबी-३
STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB_9 :बेकवेल लकेट एलबी-९ STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB_9 :बेकवेल लकेट एलबी-९
STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB80 :बेकवेल लकेट एलबी८० STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB80 :बेकवेल लकेट एलबी८०
@@ -1126,6 +1427,14 @@ STR_FORMAT_DATE_LONG :{STRING} {STRIN
STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING}
###length 2
###length 2
###length 6
###next-name-looks-similar
# _SERIAL version of AIRACRAFT doesn't exist

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -169,7 +169,7 @@ STR_LITERS :{COMMA} litri
STR_ITEMS :{COMMA} artikli STR_ITEMS :{COMMA} artikli
STR_CRATES :{COMMA} kesti STR_CRATES :{COMMA} kesti
# Colours, do not shuffle ###length 17
STR_COLOUR_DARK_BLUE :Obskur-blua STR_COLOUR_DARK_BLUE :Obskur-blua
STR_COLOUR_PALE_GREEN :Pal-verda STR_COLOUR_PALE_GREEN :Pal-verda
STR_COLOUR_PINK :Rozea STR_COLOUR_PINK :Rozea
@@ -221,7 +221,9 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Klozas f
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Baskulas granda/mikra fenestro grandeso STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Baskulas granda/mikra fenestro grandeso
# Show engines button # Show engines button
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Query window # Query window
STR_BUTTON_CANCEL :{BLACK}Anular STR_BUTTON_CANCEL :{BLACK}Anular
@@ -255,7 +257,10 @@ STR_SORT_BY_POPULATION :Populo
# Group by options for vehicle list # Group by options for vehicle list
# Order button in shared orders vehicle list
# Tooltips for the main toolbar # Tooltips for the main toolbar
###length 31
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzas ludo STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzas ludo
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Selekti STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Selekti
STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvas ludo, abandonas ludo, ekiras STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvas ludo, abandonas ludo, ekiras
@@ -276,77 +281,77 @@ STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantaca
STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Situas signalo STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Situas signalo
STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Pozez objekto STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Pozez objekto
############ range for SE file menu starts # Scenario editor file menu
###length 7
STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_SEPARATOR :
############ range for SE file menu starts
############ range for settings menu starts # Settings menu
###length 14
STR_SETTINGS_MENU_FULL_DETAIL :Plene detaloza STR_SETTINGS_MENU_FULL_DETAIL :Plene detaloza
STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Diafana konstrukturi STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Diafana konstrukturi
############ range ends here
############ range for file menu starts # File menu
###length 5
STR_FILE_MENU_SAVE_GAME :Salvas ludo STR_FILE_MENU_SAVE_GAME :Salvas ludo
STR_FILE_MENU_LOAD_GAME :Kargas ludo STR_FILE_MENU_LOAD_GAME :Kargas ludo
STR_FILE_MENU_QUIT_GAME :Abandonas ludo STR_FILE_MENU_QUIT_GAME :Abandonas ludo
STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_SEPARATOR :
STR_FILE_MENU_EXIT :Ekiras STR_FILE_MENU_EXIT :Ekiras
############ range ends here
# map menu # Map menu
###length 4
STR_MAP_MENU_MAP_OF_WORLD :Mapo di mondo STR_MAP_MENU_MAP_OF_WORLD :Mapo di mondo
STR_MAP_MENU_SIGN_LIST :Listo di signi STR_MAP_MENU_SIGN_LIST :Listo di signi
############ range for town menu starts # Town menu
############ range ends here ###length 2
############ range for subsidies menu starts # Subsidies menu
############ range ends here ###length 1
############ range for graph menu starts # Graph menu
###length 6
STR_GRAPH_MENU_INCOME_GRAPH :Revenuo grafiko STR_GRAPH_MENU_INCOME_GRAPH :Revenuo grafiko
STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Livrita kargajo grafiko STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Livrita kargajo grafiko
############ range ends here
############ range for company league menu starts # Company league menu
############ range ends here ###length 3
############ range for industry menu starts # Industry menu
############ range ends here ###length 3
############ range for railway construction menu starts # URailway construction menu
############ range ends here ###length 4
############ range for road construction menu starts # Road construction menu
############ range ends here ###length 2
############ range for waterways construction menu starts # Waterways construction menu
############ range ends here ###length 1
############ range for airport construction menu starts # Aairport construction menu
############ range ends here ###length 1
############ range for landscaping menu starts # Landscaping menu
############ range ends here ###length 3
############ range for music menu starts # Music menu
############ range ends here ###length 1
############ range for message menu starts # Message menu
############ range ends here ###length 3
############ range for about menu starts # About menu
############ range ends here ###length 10
############ range for ordinal numbers used for the place in the highscore window # Place in highscore window
############ range for ordinal numbers ends ###length 15
############ range for days starts ###length 31
############ range for days ends
############ range for months starts ###length 12
############ range for months ends ###length 12
# Graph window # Graph window
STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}
@@ -365,8 +370,10 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}%
############ Those following lines need to be in this order!!
############ End of order list ###length 10
###length 10
# Music window # Music window
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
@@ -384,12 +391,14 @@ STR_HIGHSCORE_STATS :{BIG_FONT}'{STR
# Smallmap window # Smallmap window
STR_SMALLMAP_CAPTION :{WHITE}Mapo - {STRING} STR_SMALLMAP_CAPTION :{WHITE}Mapo - {STRING}
###length 7
STR_SMALLMAP_TYPE_CONTOURS :Konturi STR_SMALLMAP_TYPE_CONTOURS :Konturi
STR_SMALLMAP_TYPE_VEHICLES :Vehili STR_SMALLMAP_TYPE_VEHICLES :Vehili
STR_SMALLMAP_TYPE_INDUSTRIES :Industrii STR_SMALLMAP_TYPE_INDUSTRIES :Industrii
STR_SMALLMAP_TYPE_ROUTES :Voyi STR_SMALLMAP_TYPE_ROUTES :Voyi
STR_SMALLMAP_TYPE_VEGETATION :Vejetado STR_SMALLMAP_TYPE_VEGETATION :Vejetado
STR_SMALLMAP_TYPE_OWNERS :Proprietanto STR_SMALLMAP_TYPE_OWNERS :Proprietanto
STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Montras transport-voyi sur la mapo STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Montras transport-voyi sur la mapo
STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Montrar vejetado ad la mapo STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Montrar vejetado ad la mapo
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Montrar proprietanti ad la mapo STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Montrar proprietanti ad la mapo
@@ -443,6 +452,8 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Sendajo
###length VEHICLE_TYPES
###next-name-looks-similar
# Order review system / warnings # Order review system / warnings
@@ -451,6 +462,7 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Sendajo
###length 4
# Extra view window # Extra view window
@@ -458,17 +470,16 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Sendajo
# Game options window # Game options window
STR_GAME_OPTIONS_CAPTION :{WHITE}Ludo Selekti STR_GAME_OPTIONS_CAPTION :{WHITE}Ludo Selekti
############ start of currency region ###length 42
############ end of currency region
###length 2
###length 21
############ start of townname region
############ end of townname region
############ start of autosave dropdown # Autosave dropdown
############ end of autosave dropdown ###length 5
@@ -506,32 +517,96 @@ STR_VARIETY_MEDIUM :Mezgrada
STR_VARIETY_HIGH :Alta STR_VARIETY_HIGH :Alta
STR_VARIETY_VERY_HIGH :Tre Alta STR_VARIETY_VERY_HIGH :Tre Alta
###length 5
STR_AI_SPEED_SLOW :Lenta STR_AI_SPEED_SLOW :Lenta
STR_AI_SPEED_MEDIUM :Meza STR_AI_SPEED_MEDIUM :Meza
STR_AI_SPEED_FAST :Rapida STR_AI_SPEED_FAST :Rapida
###length 6
STR_SEA_LEVEL_LOW :Basa STR_SEA_LEVEL_LOW :Basa
STR_SEA_LEVEL_MEDIUM :Meza STR_SEA_LEVEL_MEDIUM :Meza
STR_SEA_LEVEL_HIGH :Alta STR_SEA_LEVEL_HIGH :Alta
STR_SEA_LEVEL_CUSTOM :Kustumigita STR_SEA_LEVEL_CUSTOM :Kustumigita
STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Kustumigita ({NUM}%) STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Kustumigita ({NUM}%)
###length 4
###length 3
###length 4
###length 7
###length 3
# Settings tree window # Settings tree window
###length 3
###length 3
###length 3
###length 3
STR_CONFIG_SETTING_NONE :Nulo STR_CONFIG_SETTING_NONE :Nulo
###length 3
###setting-zero-is-special
###setting-zero-is-special
###length 3
###length 3
###length 3
###length 4
###length 3
STR_CONFIG_SETTING_PLANE_CRASHES_NONE :nulo STR_CONFIG_SETTING_PLANE_CRASHES_NONE :nulo
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normala STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normala
@@ -539,10 +614,107 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normala
###length 3
###length 2
###setting-zero-is-special
###length 2
###length 4
###length 3
###length 2
###length 2
###length 3
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verda STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verda
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Obskur-verda STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Obskur-verda
STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora
###length 4
###length 3
###length 3
###length 4
###length 3
###length 3
###length 3
###length 4
###length 3
###setting-zero-is-special
###length 3
###setting-zero-is-special
@@ -561,15 +733,63 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora
###length 3
###setting-zero-is-special
###length 3
###length 2
###length 2
###length 5
###length 3
###length 2
###length 4
###setting-zero-is-special
###setting-zero-is-special
###length 6
###length 3
###length 5
###setting-zero-is-special
###length 3
###length 4
###length 3
###length 3
###length 3
###length 3
###length 3
###length 2
# Config errors # Config errors
@@ -597,15 +817,18 @@ STR_QUIT_NO :{BLACK}Ne
# Cheat window # Cheat window
###length 4
# Livery window # Livery window
###length 23
# Face selection window # Face selection window
############ Next lines match ServerGameType # Matches ServerGameType
############ End of leave-in-this-order ###length 3
# Network server list # Network server list
@@ -624,9 +847,8 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x
# Network connecting window # Network connecting window
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 8
@@ -634,8 +856,8 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x
# Network client list # Network client list
############ Begin of ConnectionType # Matches ConnectionType
############ End of ConnectionType ###length 5
@@ -651,19 +873,22 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x
# Network messages # Network messages
STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Tu sendis tro multa imperi ad la servero STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Tu sendis tro multa imperi ad la servero
############ Leave those lines in this order!!
STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :sendinta tro multa imperi
############ End of leave-in-this-order
###length 21
STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :sendinta tro multa imperi
# Network related errors # Network related errors
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 12
# Content downloading window # Content downloading window
###length 5
# Order of these is important! # Order of these is important!
# Content downloading progress window # Content downloading progress window
@@ -786,10 +1011,10 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD
STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} La kruo OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} La kruo OpenTTD
# Framerate display window # Framerate display window
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 15
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 15
# Save/load game/scenario # Save/load game/scenario
@@ -845,6 +1070,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
# NewGRF status # NewGRF status
STR_NEWGRF_LIST_NONE :Nulo STR_NEWGRF_LIST_NONE :Nulo
###length 3
# NewGRF 'it's broken' warnings # NewGRF 'it's broken' warnings
@@ -872,15 +1098,17 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
# Town local authority window # Town local authority window
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
###length 8
###length 8
# Goal window # Goal window
STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_TEXT :{ORANGE}{STRING}
# Goal question window # Goal question window
############ Start of Goal Question button list # Goal Question button list
############ End of Goal Question button list ###length 18
# Subsidies window # Subsidies window
@@ -900,8 +1128,7 @@ STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Aceptas:
############ range for rating starts ###length 8
############ range for rating ends
@@ -913,6 +1140,9 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN
# Finances window # Finances window
STR_FINANCES_YEAR :{WHITE}{NUM} STR_FINANCES_YEAR :{WHITE}{NUM}
###length 13
STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG}
STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG}
STR_FINANCES_LOAN_TITLE :{WHITE}Prest-ajo STR_FINANCES_LOAN_TITLE :{WHITE}Prest-ajo
@@ -936,23 +1166,25 @@ STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehili:
# Vehicle lists # Vehicle lists
###length VEHICLE_TYPES
STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Tren{P o i} STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Tren{P o i}
STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Voyo-Vehil{P o i} STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Voyo-Vehil{P o i}
STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Nav{P o i} STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Nav{P o i}
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronavo STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronavo
###length VEHICLE_TYPES
STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Treni - klikigas sur treno por informeso STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Treni - klikigas sur treno por informeso
STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Voy-vehili - klikigas sur vehilo por informeso STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Voy-vehili - klikigas sur vehilo por informeso
STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Navi - klikigas sur navo por informeso STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Navi - klikigas sur navo por informeso
STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronavi - klikigas sur aeronavo por informeso STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronavi - klikigas sur aeronavo por informeso
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profito to yaro: {CURRENCY_LONG} (lasta yaro: {CURRENCY_LONG}) ###length VEHICLE_TYPES
STR_VEHICLE_LIST_AVAILABLE_TRAINS :Disponebla Treni STR_VEHICLE_LIST_AVAILABLE_TRAINS :Disponebla Treni
STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Disponebla Vehili STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Disponebla Vehili
STR_VEHICLE_LIST_AVAILABLE_SHIPS :Disponebla Navi STR_VEHICLE_LIST_AVAILABLE_SHIPS :Disponebla Navi
STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Disponebla Aeronavi STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Disponebla Aeronavi
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profito to yaro: {CURRENCY_LONG} (lasta yaro: {CURRENCY_LONG})
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Sendas ad Depozeyo STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Sendas ad Depozeyo
STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Sendas ad Depozeyo STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Sendas ad Depozeyo
@@ -962,11 +1194,13 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Sendas ad Hanga
# Group window # Group window
###length VEHICLE_TYPES
STR_GROUP_ALL_TRAINS :Omna treni STR_GROUP_ALL_TRAINS :Omna treni
STR_GROUP_ALL_ROAD_VEHICLES :Omna voy-vehili STR_GROUP_ALL_ROAD_VEHICLES :Omna voy-vehili
STR_GROUP_ALL_SHIPS :Omna navi STR_GROUP_ALL_SHIPS :Omna navi
STR_GROUP_ALL_AIRCRAFTS :Omna aeronavi STR_GROUP_ALL_AIRCRAFTS :Omna aeronavi
###length VEHICLE_TYPES
STR_GROUP_DEFAULT_TRAINS :Negrupigita treni STR_GROUP_DEFAULT_TRAINS :Negrupigita treni
STR_GROUP_DEFAULT_ROAD_VEHICLES :Negrupigita voy-vehili STR_GROUP_DEFAULT_ROAD_VEHICLES :Negrupigita voy-vehili
STR_GROUP_DEFAULT_SHIPS :Negrupigita navi STR_GROUP_DEFAULT_SHIPS :Negrupigita navi
@@ -979,22 +1213,34 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Negrupigita aer
# Build vehicle window # Build vehicle window
###length 4
############ range for vehicle availability starts # Vehicle availability
############ range for vehicle availability ends ###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Depot window # Depot window
STR_DEPOT_CAPTION :{WHITE}{DEPOT} STR_DEPOT_CAPTION :{WHITE}{DEPOT}
@@ -1006,18 +1252,29 @@ STR_DEPOT_NO_ENGINE :{BLACK}-
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING} STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Engine preview window # Engine preview window
@@ -1027,6 +1284,9 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG}
# Autoreplace window # Autoreplace window
###length VEHICLE_TYPES
STR_REPLACE_VEHICLE_TRAIN :Treno STR_REPLACE_VEHICLE_TRAIN :Treno
STR_REPLACE_VEHICLE_ROAD_VEHICLE :Voy-vehilo STR_REPLACE_VEHICLE_ROAD_VEHICLE :Voy-vehilo
STR_REPLACE_VEHICLE_SHIP :Navo STR_REPLACE_VEHICLE_SHIP :Navo
@@ -1035,6 +1295,8 @@ STR_REPLACE_VEHICLE_AIRCRAFT :Aeronavo
###length 2
###next-name-looks-similar
@@ -1042,30 +1304,38 @@ STR_REPLACE_VEHICLE_AIRCRAFT :Aeronavo
# Vehicle view # Vehicle view
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Messages in the start stop button in the vehicle view # Messages in the start stop button in the vehicle view
STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Servado ad {DEPOT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Servado ad {DEPOT}, {VELOCITY}
# Vehicle stopped/started animations # Vehicle stopped/started animations
###length 2
STR_VEHICLE_COMMAND_STOPPED_SMALL :{TINY_FONT}{RED}Haltinta STR_VEHICLE_COMMAND_STOPPED_SMALL :{TINY_FONT}{RED}Haltinta
STR_VEHICLE_COMMAND_STOPPED :{RED}Haltinta STR_VEHICLE_COMMAND_STOPPED :{RED}Haltinta
###length 2
STR_VEHICLE_COMMAND_STARTED_SMALL :{TINY_FONT}{GREEN}Komencinta STR_VEHICLE_COMMAND_STARTED_SMALL :{TINY_FONT}{GREEN}Komencinta
STR_VEHICLE_COMMAND_STARTED :{GREEN}Komencinta STR_VEHICLE_COMMAND_STARTED :{GREEN}Komencinta
# Vehicle details # Vehicle details
###length VEHICLE_TYPES
# The next two need to stay in this order
@@ -1074,6 +1344,8 @@ STR_VEHICLE_COMMAND_STARTED :{GREEN}Komencin
###length VEHICLE_TYPES
# Extra buttons for train details windows # Extra buttons for train details windows
@@ -1085,8 +1357,11 @@ STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kapacesi
# Vehicle refit # Vehicle refit
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Order view # Order view
@@ -1102,6 +1377,8 @@ STR_ORDER_TEXT :{STRING} {STRIN
# Conditional order variables, must follow order of OrderConditionVariable enum # Conditional order variables, must follow order of OrderConditionVariable enum
###length 8
###next-name-looks-similar
@@ -1112,6 +1389,9 @@ STR_ORDER_TEXT :{STRING} {STRIN
# String parts to build the order string # String parts to build the order string
###length 3
###next-name-looks-similar
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
@@ -1122,6 +1402,7 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI
###length 3
@@ -1165,6 +1446,7 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
# Textfile window # Textfile window
###length 3
# Vehicle loading indicators # Vehicle loading indicators
@@ -1258,13 +1540,23 @@ STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Ne povas
# Generic vehicle errors # Generic vehicle errors
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Tro multa vehili en la ludo STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Tro multa vehili en la ludo
@@ -1282,8 +1574,10 @@ STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Tro mult
# Sign related errors # Sign related errors
# Translatable comment for OpenTTD's desktop shortcut # Translatable comment for OpenTTD's desktop shortcut
###external 1
# Translatable descriptions in media/baseset/*.ob* files # Translatable descriptions in media/baseset/*.ob* files
###external 10
##id 0x2000 ##id 0x2000
# Town building names # Town building names
@@ -1293,18 +1587,28 @@ STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Tro mult
############ WARNING, using range 0x6000 for strings that are stored in the savegame ############ WARNING, using range 0x6000 for strings that are stored in the savegame
############ These strings may never get a new id, or savegames will break! ############ These strings may never get a new id, or savegames will break!
##id 0x6000 ##id 0x6000
STR_SV_EMPTY : STR_SV_EMPTY :
###length 27
STR_SV_STNAME :{STRING} STR_SV_STNAME :{STRING}
STR_SV_STNAME_BUOY :{STRING} STR_SV_STNAME_BUOY :{STRING}
STR_SV_STNAME_WAYPOINT :{STRING} STR_SV_STNAME_WAYPOINT :{STRING}
##id 0x6020 ##id 0x6020
############ end of savegame specific region! ############ end of savegame specific region!
##id 0x8000 ##id 0x8000
###length 116
# Vehicle names # Vehicle names
###length 88
###length 11
###length 41
##id 0x8800 ##id 0x8800
# Formatting of some strings # Formatting of some strings
STR_FORMAT_DATE_TINY :{STRING}-{STRING}-{NUM} STR_FORMAT_DATE_TINY :{STRING}-{STRING}-{NUM}
@@ -1313,11 +1617,19 @@ STR_FORMAT_DATE_LONG :{STRING} {STRIN
STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING} STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING}
###length 2
###length 2
###length 6
STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Treno-Depozeyo STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Treno-Depozeyo
STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Treno-Depozeyo #{COMMA} STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Treno-Depozeyo #{COMMA}
STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Navo-Depozeyo STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Navo-Depozeyo
STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Navo-Depozeyo #{COMMA} STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Navo-Depozeyo #{COMMA}
###next-name-looks-similar
STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangaro STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangaro
# _SERIAL version of AIRACRAFT doesn't exist
STR_COMPANY_SOMEONE :ulu STR_COMPANY_SOMEONE :ulu

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -123,7 +123,7 @@ STR_LITERS :{COMMA} litr{P
STR_ITEMS :{COMMA} oġġett{P "" i i i} STR_ITEMS :{COMMA} oġġett{P "" i i i}
STR_CRATES :{COMMA} kaxx{P a i i i} STR_CRATES :{COMMA} kaxx{P a i i i}
# Colours, do not shuffle ###length 17
STR_COLOUR_DARK_BLUE :Blu Skur STR_COLOUR_DARK_BLUE :Blu Skur
STR_COLOUR_PALE_GREEN :Aħdar ċar STR_COLOUR_PALE_GREEN :Aħdar ċar
STR_COLOUR_PINK :Roża STR_COLOUR_PINK :Roża
@@ -188,7 +188,9 @@ STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Faxxa bi
STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Waqqa bini, etc.., Ctrl tagħzel zona dijagonali. Shift taqleb bejn bini/turija ta' stima ta' l-ispiza STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Waqqa bini, etc.., Ctrl tagħzel zona dijagonali. Shift taqleb bejn bini/turija ta' stima ta' l-ispiza
# Show engines button # Show engines button
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Query window # Query window
STR_BUTTON_DEFAULT :{BLACK}Default STR_BUTTON_DEFAULT :{BLACK}Default
@@ -241,7 +243,10 @@ STR_SORT_BY_POPULATION :Popolazzjoni
# Group by options for vehicle list # Group by options for vehicle list
# Order button in shared orders vehicle list
# Tooltips for the main toolbar # Tooltips for the main toolbar
###length 31
STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Waqfa temporanja mil-logħba STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Waqfa temporanja mil-logħba
STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Għaġġel il-loghba STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Għaġġel il-loghba
STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Preferenzi STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Preferenzi
@@ -255,67 +260,67 @@ STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Ibni ind
# Extra tooltips for the scenario editor toolbar # Extra tooltips for the scenario editor toolbar
############ range for SE file menu starts # Scenario editor file menu
###length 7
STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_SEPARATOR :
############ range for SE file menu starts
############ range for settings menu starts # Settings menu
############ range ends here ###length 14
############ range for file menu starts # File menu
###length 5
STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_SEPARATOR :
############ range ends here
# map menu # Map menu
###length 4
############ range for town menu starts # Town menu
############ range ends here ###length 2
############ range for subsidies menu starts # Subsidies menu
############ range ends here ###length 1
############ range for graph menu starts # Graph menu
############ range ends here ###length 6
############ range for company league menu starts # Company league menu
############ range ends here ###length 3
############ range for industry menu starts # Industry menu
############ range ends here ###length 3
############ range for railway construction menu starts # URailway construction menu
############ range ends here ###length 4
############ range for road construction menu starts # Road construction menu
############ range ends here ###length 2
############ range for waterways construction menu starts # Waterways construction menu
############ range ends here ###length 1
############ range for airport construction menu starts # Aairport construction menu
############ range ends here ###length 1
############ range for landscaping menu starts # Landscaping menu
############ range ends here ###length 3
############ range for music menu starts # Music menu
############ range ends here ###length 1
############ range for message menu starts # Message menu
############ range ends here ###length 3
############ range for about menu starts # About menu
############ range ends here ###length 10
############ range for ordinal numbers used for the place in the highscore window # Place in highscore window
############ range for ordinal numbers ends ###length 15
############ range for days starts ###length 31
############ range for days ends
############ range for months starts ###length 12
############ range for months ends ###length 12
# Graph window # Graph window
STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING} STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}
@@ -334,8 +339,10 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM
STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT})
STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA})
STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}%
############ Those following lines need to be in this order!!
############ End of order list ###length 10
###length 10
# Music window # Music window
STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}--
@@ -352,6 +359,8 @@ STR_HIGHSCORE_STATS :{BIG_FONT}'{STR
# Smallmap window # Smallmap window
###length 7
STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY}
@@ -376,6 +385,8 @@ STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {C
###length VEHICLE_TYPES
###next-name-looks-similar
# Order review system / warnings # Order review system / warnings
@@ -385,23 +396,23 @@ STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE
###length 4
# Extra view window # Extra view window
# Game options window # Game options window
############ start of currency region ###length 42
############ end of currency region
###length 2
###length 21
############ start of townname region
############ end of townname region
############ start of autosave dropdown # Autosave dropdown
############ end of autosave dropdown ###length 5
@@ -429,45 +440,127 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :oħrajn
###length 5
###length 6
###length 4
###length 3
###length 4
###length 7
###length 3
# Settings tree window # Settings tree window
###length 3
###length 3
###length 3
###length 3
###length 3
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Stabbilixxi l-kosti għal manutenzjoni u servizzi fuq vetturi u infrastruttura STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Stabbilixxi l-kosti għal manutenzjoni u servizzi fuq vetturi u infrastruttura
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Veloċita' tal-kostruzzjoni: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Veloċita' tal-kostruzzjoni: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Illimita l-ammont massimu ta' kostruzzjonijiet għall-AI STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Illimita l-ammont massimu ta' kostruzzjonijiet għall-AI
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Ħsarat fil-vetturi: {STRING} STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Ħsarat fil-vetturi: {STRING}
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Ikkontrolla kemm-il darba vettura li ma ingħatatx servizz riċentament tieqaf STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Ikkontrolla kemm-il darba vettura li ma ingħatatx servizz riċentament tieqaf
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplikatur tas-sussidju: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplikatur tas-sussidju: {STRING}
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Stabbilixxi kemm jiġi mħallas għal konnessjonijiet sussidjati STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Stabbilixxi kemm jiġi mħallas għal konnessjonijiet sussidjati
###setting-zero-is-special
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Kosti tal-kostruzzjoni: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Kosti tal-kostruzzjoni: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Stabbilixxi l-livell ta' kostruzzjoni u l-prezz tax-xiri STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Stabbilixxi l-livell ta' kostruzzjoni u l-prezz tax-xiri
STR_CONFIG_SETTING_RECESSIONS :Riċessjonijiet: {STRING} STR_CONFIG_SETTING_RECESSIONS :Riċessjonijiet: {STRING}
STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Jekk mixgħula kull ftit snin tista' sseħħ riċessjoni. Waqt riċessjoni, il-produzzjoni ta' kollox tonqos (tirritorna għal kemm kienet qabel kif tgħaddi r-riċessjoni) STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Jekk mixgħula kull ftit snin tista' sseħħ riċessjoni. Waqt riċessjoni, il-produzzjoni ta' kollox tonqos (tirritorna għal kemm kienet qabel kif tgħaddi r-riċessjoni)
STR_CONFIG_SETTING_TRAIN_REVERSING :Tħallix li ferrovija ddur lura fi stazzjon: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING :Tħallix li ferrovija ddur lura fi stazzjon: {STRING}
STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Jekk tinxtegħel, ferroviji ma jdurux lura fi stazzjonijiet li mhumiex fit-tarf, jekk teżisti rotta iqsar għad-destinazzjoni li jmiss STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Jekk tinxtegħel, ferroviji ma jdurux lura fi stazzjonijiet li mhumiex fit-tarf, jekk teżisti rotta iqsar għad-destinazzjoni li jmiss
STR_CONFIG_SETTING_DISASTERS :Diżastri: {STRING} STR_CONFIG_SETTING_DISASTERS :Diżastri: {STRING}
STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ixgħel jew itfi diżastri li xi drabi jistgħu jaffetwaw jew ikissru vetturi jew infrastrutturi STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ixgħel jew itfi diżastri li xi drabi jistgħu jaffetwaw jew ikissru vetturi jew infrastrutturi
STR_CONFIG_SETTING_CITY_APPROVAL :L-attitudni tal-kunsill lokali lejn bidliet fil-viċinanzi: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL :L-attitudni tal-kunsill lokali lejn bidliet fil-viċinanzi: {STRING}
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Iddeċiedi kemm l-ammont ta storbju u danni lill-ambjent ta' kumpanija jaffetwaw il-klassifikazzjoni tagħhom mar-raħal u proġetti oħra tal-futur STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Iddeċiedi kemm l-ammont ta storbju u danni lill-ambjent ta' kumpanija jaffetwaw il-klassifikazzjoni tagħhom mar-raħal u proġetti oħra tal-futur
###setting-zero-is-special
###length 3
###length 3
###length 3
###length 4
###length 3
STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avza jekk jintilef il-vehikolu: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avza jekk jintilef il-vehikolu: {STRING}
###length 3
###length 2
###setting-zero-is-special
###length 2
@@ -475,8 +568,47 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avza jekk jinti
###length 4
###length 3
###length 2
###length 2
###length 3
###length 4
###length 3
###length 3
###length 4
###length 3
###length 3
###length 3
###length 4
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :L-ebda azzjoni STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :L-ebda azzjoni
STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :L-azzjonijiet kollha STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :L-azzjonijiet kollha
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Uza l-lista avvanzata tal-vetturi: {STRING} STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Uza l-lista avvanzata tal-vetturi: {STRING}
STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uzu tal-listi avvanzati tal-vetturi biex tghaqqad il-vetturi fi gruppi STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uzu tal-listi avvanzati tal-vetturi biex tghaqqad il-vetturi fi gruppi
@@ -484,6 +616,13 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz
###length 3
###setting-zero-is-special
@@ -501,6 +640,87 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz
###length 3
###setting-zero-is-special
###length 3
###setting-zero-is-special
###length 3
###length 2
###length 2
###length 5
###length 3
###length 2
###length 4
###setting-zero-is-special
###setting-zero-is-special
###length 6
###length 3
###length 5
###setting-zero-is-special
###length 3
###length 4
###length 3
###length 3
###length 3
###length 3
###length 3
###length 2
# Config errors # Config errors
@@ -523,15 +743,18 @@ STR_INTRO_CAPTION :{WHITE}OpenTTD
# Cheat window # Cheat window
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ibdel is-sena STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ibdel is-sena
###length 4
# Livery window # Livery window
###length 23
# Face selection window # Face selection window
############ Next lines match ServerGameType # Matches ServerGameType
############ End of leave-in-this-order ###length 3
# Network server list # Network server list
@@ -550,20 +773,19 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x
# Network connecting window # Network connecting window
############ Leave those lines in this order!!
############ End of leave-in-this-order
STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES} imnizzlin s'issa STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES} imnizzlin s'issa
STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} imnizzlin s'issa STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} imnizzlin s'issa
###length 8
# Network company list added strings # Network company list added strings
# Network client list # Network client list
############ Begin of ConnectionType # Matches ConnectionType
############ End of ConnectionType ###length 5
@@ -578,21 +800,24 @@ STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES}
# Network messages # Network messages
############ Leave those lines in this order!!
###length 21
STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :reviżjoni ħażina STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :reviżjoni ħażina
STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :isem diġa qed jintuża STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :isem diġa qed jintuża
STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :password ħażin STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :password ħażin
############ End of leave-in-this-order
# Network related errors # Network related errors
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 12
# Content downloading window # Content downloading window
###length 5
# Order of these is important! # Order of these is important!
# Content downloading progress window # Content downloading progress window
@@ -693,10 +918,10 @@ STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Aghzel i
# About OpenTTD window # About OpenTTD window
# Framerate display window # Framerate display window
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 15
############ Leave those lines in this order!!
############ End of leave-in-this-order ###length 15
# Save/load game/scenario # Save/load game/scenario
@@ -746,6 +971,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING
# NewGRF status # NewGRF status
###length 3
# NewGRF 'it's broken' warnings # NewGRF 'it's broken' warnings
@@ -774,15 +1000,17 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
# Town local authority window # Town local authority window
STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING}
###length 8
###length 8
# Goal window # Goal window
STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_TEXT :{ORANGE}{STRING}
# Goal question window # Goal question window
############ Start of Goal Question button list # Goal Question button list
############ End of Goal Question button list ###length 18
# Subsidies window # Subsidies window
@@ -801,8 +1029,7 @@ STR_STATION_VIEW_WAITING_CARGO :{WHITE}{CARGO_L
############ range for rating starts ###length 8
############ range for rating ends
@@ -814,6 +1041,9 @@ STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOIN
# Finances window # Finances window
STR_FINANCES_YEAR :{WHITE}{NUM} STR_FINANCES_YEAR :{WHITE}{NUM}
###length 13
STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG}
STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG}
@@ -835,16 +1065,20 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN
# Vehicle lists # Vehicle lists
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Group window # Group window
###length VEHICLE_TYPES
###length VEHICLE_TYPES
@@ -853,22 +1087,34 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN
# Build vehicle window # Build vehicle window
###length 4
############ range for vehicle availability starts # Vehicle availability
############ range for vehicle availability ends ###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Depot window # Depot window
STR_DEPOT_CAPTION :{WHITE}{DEPOT} STR_DEPOT_CAPTION :{WHITE}{DEPOT}
@@ -880,18 +1126,29 @@ STR_DEPOT_NO_ENGINE :{BLACK}-
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING} STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Engine preview window # Engine preview window
@@ -903,34 +1160,47 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG}
# Autoreplace window # Autoreplace window
###length VEHICLE_TYPES
###length 2
###next-name-looks-similar
# Vehicle view # Vehicle view
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Messages in the start stop button in the vehicle view # Messages in the start stop button in the vehicle view
# Vehicle stopped/started animations # Vehicle stopped/started animations
###length 2
###length 2
# Vehicle details # Vehicle details
###length VEHICLE_TYPES
# The next two need to stay in this order
@@ -939,6 +1209,8 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE
###length VEHICLE_TYPES
# Extra buttons for train details windows # Extra buttons for train details windows
@@ -947,8 +1219,11 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE
# Vehicle refit # Vehicle refit
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
# Order view # Order view
@@ -964,6 +1239,8 @@ STR_ORDER_TEXT :{STRING} {STRIN
# Conditional order variables, must follow order of OrderConditionVariable enum # Conditional order variables, must follow order of OrderConditionVariable enum
###length 8
###next-name-looks-similar
@@ -975,6 +1252,9 @@ STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Hassar l
# String parts to build the order string # String parts to build the order string
###length 3
###next-name-looks-similar
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING}
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
@@ -986,6 +1266,7 @@ STR_ORDER_IMPLICIT :(Awtomatiku)
###length 3
@@ -1035,10 +1316,11 @@ STR_AI_CONFIG_CHANGE_NONE :
# Textfile window # Textfile window
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} лиценца за {STRING}
STR_TEXTFILE_VIEW_README :{BLACK}Прикажи ги чита-ми STR_TEXTFILE_VIEW_README :{BLACK}Прикажи ги чита-ми
STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Промени се најавите STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Промени се најавите
STR_TEXTFILE_VIEW_LICENCE :{BLACK}Лиценца STR_TEXTFILE_VIEW_LICENCE :{BLACK}Лиценца
###length 3
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} лиценца за {STRING}
# Vehicle loading indicators # Vehicle loading indicators
@@ -1116,24 +1398,34 @@ STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Il-pont
# Generic vehicle errors # Generic vehicle errors
###length VEHICLE_TYPES
###length VEHICLE_TYPES
STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Ma tistax tbiddel l-isem ta' dan it-tip ta' vapur...
STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Ma tistax tbiddel l-isem ta' dan it-tip t' ajruplan...
STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Ma tistax tbigħ din il-ferrovija...
STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ma tistax tbigħ din il-karozza...
STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Ma tistax tbigħ dan il-vapur...
STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Ma tistax tbigħ dan l-ajruplan...
STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Din il-vettura mhix disponibbli STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Din il-vettura mhix disponibbli
STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Din il-vettura mhix disponibbli STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Din il-vettura mhix disponibbli
STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Dan il-vapur mhux disponibbli STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Dan il-vapur mhux disponibbli
STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Dan l-ajruplan mhux disponibbli STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Dan l-ajruplan mhux disponibbli
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
###length VEHICLE_TYPES
STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Ma tistax tbiddel l-isem ta' dan it-tip ta' vapur...
STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Ma tistax tbiddel l-isem ta' dan it-tip t' ajruplan...
###length VEHICLE_TYPES
STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Ma tistax tbigħ din il-ferrovija...
STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Ma tistax tbigħ din il-karozza...
STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Ma tistax tbigħ dan il-vapur...
STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Ma tistax tbigħ dan l-ajruplan...
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Hemm wisq vetturi fil-logħba STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Hemm wisq vetturi fil-logħba
@@ -1159,9 +1451,11 @@ STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Ma tista
# Sign related errors # Sign related errors
# Translatable comment for OpenTTD's desktop shortcut # Translatable comment for OpenTTD's desktop shortcut
###external 1
STR_DESKTOP_SHORTCUT_COMMENT :Logħba simulazzjoni bbażata fuq Transport Tycoon Deluxe STR_DESKTOP_SHORTCUT_COMMENT :Logħba simulazzjoni bbażata fuq Transport Tycoon Deluxe
# Translatable descriptions in media/baseset/*.ob* files # Translatable descriptions in media/baseset/*.ob* files
###external 10
##id 0x2000 ##id 0x2000
# Town building names # Town building names
@@ -1207,6 +1501,7 @@ STR_INDUSTRY_NAME_SUGAR_MINE :Minjiera taz-zo
############ WARNING, using range 0x6000 for strings that are stored in the savegame ############ WARNING, using range 0x6000 for strings that are stored in the savegame
############ These strings may never get a new id, or savegames will break! ############ These strings may never get a new id, or savegames will break!
##id 0x6000 ##id 0x6000
STR_SV_EMPTY : STR_SV_EMPTY :
STR_SV_UNNAMED :Bla isem STR_SV_UNNAMED :Bla isem
@@ -1215,6 +1510,7 @@ STR_SV_ROAD_VEHICLE_NAME :Vettura tat-tri
STR_SV_SHIP_NAME :Vapur {COMMA} STR_SV_SHIP_NAME :Vapur {COMMA}
STR_SV_AIRCRAFT_NAME :Ajruplan {COMMA} STR_SV_AIRCRAFT_NAME :Ajruplan {COMMA}
###length 27
STR_SV_STNAME :{STRING} STR_SV_STNAME :{STRING}
STR_SV_STNAME_NORTH :{STRING} Tramuntana STR_SV_STNAME_NORTH :{STRING} Tramuntana
STR_SV_STNAME_SOUTH :{STRING} Nofsinhar STR_SV_STNAME_SOUTH :{STRING} Nofsinhar
@@ -1241,9 +1537,11 @@ STR_SV_STNAME_LOWER :{STRING} t' isf
STR_SV_STNAME_HELIPORT :Ħeliport {STRING} STR_SV_STNAME_HELIPORT :Ħeliport {STRING}
STR_SV_STNAME_FOREST :Foresta {STRING} STR_SV_STNAME_FOREST :Foresta {STRING}
STR_SV_STNAME_FALLBACK :{STRING}, Stazzjon #{NUM} STR_SV_STNAME_FALLBACK :{STRING}, Stazzjon #{NUM}
############ end of savegame specific region! ############ end of savegame specific region!
##id 0x8000 ##id 0x8000
###length 116
# Vehicle names # Vehicle names
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Fwar) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Fwar)
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (Diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (Diesel)
@@ -1297,6 +1595,10 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Karru għall-pa
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Karru għall-posta STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Karru għall-posta
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COAL_CAR :Karru għall-faħam STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COAL_CAR :Karru għall-faħam
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Trakk tax-Xarbiet Karbonati STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Trakk tax-Xarbiet Karbonati
###length 88
###length 11
STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :Tanker taż-żejt MPS STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :Tanker taż-żejt MPS
STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :Tanker taż-żejt CS-Inc. STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :Tanker taż-żejt CS-Inc.
STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :Vapur tal-passiġġieri MPS STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :Vapur tal-passiġġieri MPS
@@ -1308,6 +1610,8 @@ STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Vapur tal-merka
STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Vapur tal-merkanzija Bakewell STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Vapur tal-merkanzija Bakewell
STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :Vapur tal-merkanzija MightyMover STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :Vapur tal-merkanzija MightyMover
STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Vapur tal-merkanzija Powernaut STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Vapur tal-merkanzija Powernaut
###length 41
STR_VEHICLE_NAME_AIRCRAFT_SAMPSON_U52 :Sampson U52 STR_VEHICLE_NAME_AIRCRAFT_SAMPSON_U52 :Sampson U52
STR_VEHICLE_NAME_AIRCRAFT_COLEMAN_COUNT :Coleman Count STR_VEHICLE_NAME_AIRCRAFT_COLEMAN_COUNT :Coleman Count
STR_VEHICLE_NAME_AIRCRAFT_FFP_DART :FFP Dart STR_VEHICLE_NAME_AIRCRAFT_FFP_DART :FFP Dart
@@ -1359,6 +1663,14 @@ STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRI
STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING}
###length 2
###length 2
###length 6
###next-name-looks-similar
# _SERIAL version of AIRACRAFT doesn't exist
STR_UNKNOWN_STATION :stazzjon mhux magħruf STR_UNKNOWN_STATION :stazzjon mhux magħruf
STR_DEFAULT_SIGN_NAME :Sinjal STR_DEFAULT_SIGN_NAME :Sinjal

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -447,6 +447,9 @@ public:
/** Minimum effective distance for timeout calculation. */ /** Minimum effective distance for timeout calculation. */
static const uint MIN_TIMEOUT_DISTANCE = 32; static const uint MIN_TIMEOUT_DISTANCE = 32;
/** Number of days before deleting links served only by vehicles stopped in depot. */
static const uint STALE_LINK_DEPOT_TIMEOUT = 1024;
/** Minimum number of days between subsequent compressions of a LG. */ /** Minimum number of days between subsequent compressions of a LG. */
static const uint COMPRESSION_INTERVAL = 256; static const uint COMPRESSION_INTERVAL = 256;

View File

@@ -152,12 +152,24 @@ void ZoomInOrOutToCursorWindow(bool in, Window *w)
} }
} }
void FixTitleGameZoom() void FixTitleGameZoom(int zoom_adjust)
{ {
if (_game_mode != GM_MENU) return; if (_game_mode != GM_MENU) return;
Viewport *vp = FindWindowByClass(WC_MAIN_WINDOW)->viewport; Viewport *vp = FindWindowByClass(WC_MAIN_WINDOW)->viewport;
/* Adjust the zoom in/out.
* Can't simply add, since operator+ is not defined on the ZoomLevel type. */
vp->zoom = _gui_zoom; vp->zoom = _gui_zoom;
while (zoom_adjust < 0 && vp->zoom != ZOOM_LVL_MIN) {
vp->zoom--;
zoom_adjust++;
}
while (zoom_adjust > 0 && vp->zoom != ZOOM_LVL_MAX) {
vp->zoom++;
zoom_adjust--;
}
vp->virtual_width = ScaleByZoom(vp->width, vp->zoom); vp->virtual_width = ScaleByZoom(vp->width, vp->zoom);
vp->virtual_height = ScaleByZoom(vp->height, vp->zoom); vp->virtual_height = ScaleByZoom(vp->height, vp->zoom);
} }

View File

@@ -22,6 +22,8 @@ add_files(
network_gui.cpp network_gui.cpp
network_gui.h network_gui.h
network_internal.h network_internal.h
network_query.cpp
network_query.h
network_server.cpp network_server.cpp
network_server.h network_server.h
network_stun.cpp network_stun.cpp

View File

@@ -53,6 +53,7 @@ NetworkRecvStatus NetworkAdminSocketHandler::HandlePacket(Packet *p)
case ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY: return this->Receive_ADMIN_UPDATE_FREQUENCY(p); case ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY: return this->Receive_ADMIN_UPDATE_FREQUENCY(p);
case ADMIN_PACKET_ADMIN_POLL: return this->Receive_ADMIN_POLL(p); case ADMIN_PACKET_ADMIN_POLL: return this->Receive_ADMIN_POLL(p);
case ADMIN_PACKET_ADMIN_CHAT: return this->Receive_ADMIN_CHAT(p); case ADMIN_PACKET_ADMIN_CHAT: return this->Receive_ADMIN_CHAT(p);
case ADMIN_PACKET_ADMIN_EXTERNAL_CHAT: return this->Receive_ADMIN_EXTERNAL_CHAT(p);
case ADMIN_PACKET_ADMIN_RCON: return this->Receive_ADMIN_RCON(p); case ADMIN_PACKET_ADMIN_RCON: return this->Receive_ADMIN_RCON(p);
case ADMIN_PACKET_ADMIN_GAMESCRIPT: return this->Receive_ADMIN_GAMESCRIPT(p); case ADMIN_PACKET_ADMIN_GAMESCRIPT: return this->Receive_ADMIN_GAMESCRIPT(p);
case ADMIN_PACKET_ADMIN_PING: return this->Receive_ADMIN_PING(p); case ADMIN_PACKET_ADMIN_PING: return this->Receive_ADMIN_PING(p);
@@ -132,6 +133,7 @@ NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_QUIT(Packet *p) { ret
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_UPDATE_FREQUENCY(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_UPDATE_FREQUENCY(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_UPDATE_FREQUENCY); }
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_POLL(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_POLL); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_POLL(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_POLL); }
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_CHAT(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_CHAT); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_CHAT(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_CHAT); }
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_EXTERNAL_CHAT(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_EXTERNAL_CHAT); }
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_RCON(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_RCON); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_RCON(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_RCON); }
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_GAMESCRIPT(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_GAMESCRIPT); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_GAMESCRIPT(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_GAMESCRIPT); }
NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_PING(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_PING); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_ADMIN_PING(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_ADMIN_PING); }

View File

@@ -30,6 +30,7 @@ enum PacketAdminType {
ADMIN_PACKET_ADMIN_RCON, ///< The admin sends a remote console command. ADMIN_PACKET_ADMIN_RCON, ///< The admin sends a remote console command.
ADMIN_PACKET_ADMIN_GAMESCRIPT, ///< The admin sends a JSON string for the GameScript. ADMIN_PACKET_ADMIN_GAMESCRIPT, ///< The admin sends a JSON string for the GameScript.
ADMIN_PACKET_ADMIN_PING, ///< The admin sends a ping to the server, expecting a ping-reply (PONG) packet. ADMIN_PACKET_ADMIN_PING, ///< The admin sends a ping to the server, expecting a ping-reply (PONG) packet.
ADMIN_PACKET_ADMIN_EXTERNAL_CHAT, ///< The admin sends a chat message from external source.
ADMIN_PACKET_SERVER_FULL = 100, ///< The server tells the admin it cannot accept the admin. ADMIN_PACKET_SERVER_FULL = 100, ///< The server tells the admin it cannot accept the admin.
ADMIN_PACKET_SERVER_BANNED, ///< The server tells the admin it is banned. ADMIN_PACKET_SERVER_BANNED, ///< The server tells the admin it is banned.
@@ -163,6 +164,17 @@ protected:
*/ */
virtual NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p); virtual NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p);
/**
* Send chat from the external source:
* string Name of the source this message came from.
* uint16 TextColour to use for the message.
* string Name of the user who sent the messsage.
* string Message.
* @param p The packet that was just received.
* @return The state the network should have.
*/
virtual NetworkRecvStatus Receive_ADMIN_EXTERNAL_CHAT(Packet *p);
/** /**
* Execute a command on the servers console: * Execute a command on the servers console:
* string Command to be executed. * string Command to be executed.

View File

@@ -205,9 +205,13 @@ void TCPConnecter::OnResolved(addrinfo *ai)
} }
if (_debug_net_level >= 6) { if (_debug_net_level >= 6) {
Debug(net, 6, "{} resolved in:", this->connection_string); if (this->addresses.size() == 0) {
for (const auto &address : this->addresses) { Debug(net, 6, "{} did not resolve", this->connection_string);
Debug(net, 6, "- {}", NetworkAddress(address->ai_addr, (int)address->ai_addrlen).GetAddressAsString()); } else {
Debug(net, 6, "{} resolved in:", this->connection_string);
for (const auto &address : this->addresses) {
Debug(net, 6, "- {}", NetworkAddress(address->ai_addr, (int)address->ai_addrlen).GetAddressAsString());
}
} }
} }

View File

@@ -26,7 +26,11 @@ protected:
/** /**
* Client requesting a list of content info: * Client requesting a list of content info:
* byte type * byte type
* uint32 openttd version * uint32 openttd version (or 0xFFFFFFFF if using a list)
* Only if the above value is 0xFFFFFFFF:
* uint8 count
* string branch-name ("vanilla" for upstream OpenTTD)
* string release version (like "12.0")
* @param p The packet that was just received. * @param p The packet that was just received.
* @return True upon success, otherwise false. * @return True upon success, otherwise false.
*/ */

View File

@@ -94,6 +94,7 @@ NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet *p)
case PACKET_SERVER_COMMAND: return this->Receive_SERVER_COMMAND(p); case PACKET_SERVER_COMMAND: return this->Receive_SERVER_COMMAND(p);
case PACKET_CLIENT_CHAT: return this->Receive_CLIENT_CHAT(p); case PACKET_CLIENT_CHAT: return this->Receive_CLIENT_CHAT(p);
case PACKET_SERVER_CHAT: return this->Receive_SERVER_CHAT(p); case PACKET_SERVER_CHAT: return this->Receive_SERVER_CHAT(p);
case PACKET_SERVER_EXTERNAL_CHAT: return this->Receive_SERVER_EXTERNAL_CHAT(p);
case PACKET_CLIENT_SET_PASSWORD: return this->Receive_CLIENT_SET_PASSWORD(p); case PACKET_CLIENT_SET_PASSWORD: return this->Receive_CLIENT_SET_PASSWORD(p);
case PACKET_CLIENT_SET_NAME: return this->Receive_CLIENT_SET_NAME(p); case PACKET_CLIENT_SET_NAME: return this->Receive_CLIENT_SET_NAME(p);
case PACKET_CLIENT_QUIT: return this->Receive_CLIENT_QUIT(p); case PACKET_CLIENT_QUIT: return this->Receive_CLIENT_QUIT(p);
@@ -180,6 +181,7 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_COMMAND(Packet *p) {
NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_COMMAND(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_COMMAND); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_COMMAND(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_COMMAND); }
NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_CHAT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_CHAT); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_CHAT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_CHAT); }
NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CHAT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_CHAT); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CHAT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_CHAT); }
NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_EXTERNAL_CHAT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_EXTERNAL_CHAT); }
NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_SET_PASSWORD(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_SET_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_SET_PASSWORD(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_SET_PASSWORD); }
NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_SET_NAME(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_SET_NAME); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_SET_NAME(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_SET_NAME); }
NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_QUIT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_QUIT); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_QUIT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_QUIT); }

View File

@@ -99,6 +99,7 @@ enum PacketGameType {
/* Human communication! */ /* Human communication! */
PACKET_CLIENT_CHAT, ///< Client said something that should be distributed. PACKET_CLIENT_CHAT, ///< Client said something that should be distributed.
PACKET_SERVER_CHAT, ///< Server distributing the message of a client (or itself). PACKET_SERVER_CHAT, ///< Server distributing the message of a client (or itself).
PACKET_SERVER_EXTERNAL_CHAT, ///< Server distributing the message from external source.
/* Remote console. */ /* Remote console. */
PACKET_CLIENT_RCON, ///< Client asks the server to execute some command. PACKET_CLIENT_RCON, ///< Client asks the server to execute some command.
@@ -378,6 +379,16 @@ protected:
*/ */
virtual NetworkRecvStatus Receive_SERVER_CHAT(Packet *p); virtual NetworkRecvStatus Receive_SERVER_CHAT(Packet *p);
/**
* Sends a chat-packet for external source to the client:
* string Name of the source this message came from.
* uint16 TextColour to use for the message.
* string Name of the user who sent the messsage.
* string Message (max NETWORK_CHAT_LENGTH).
* @param p The packet that was just received.
*/
virtual NetworkRecvStatus Receive_SERVER_EXTERNAL_CHAT(Packet *p);
/** /**
* Set the password for the clients current company: * Set the password for the clients current company:
* string The password. * string The password.

View File

@@ -14,6 +14,7 @@
#include "../date_func.h" #include "../date_func.h"
#include "network_admin.h" #include "network_admin.h"
#include "network_client.h" #include "network_client.h"
#include "network_query.h"
#include "network_server.h" #include "network_server.h"
#include "network_content.h" #include "network_content.h"
#include "network_udp.h" #include "network_udp.h"
@@ -216,7 +217,7 @@ bool NetworkCompanyIsPassworded(CompanyID company_id)
/* This puts a text-message to the console, or in the future, the chat-box, /* This puts a text-message to the console, or in the future, the chat-box,
* (to keep it all a bit more general) * (to keep it all a bit more general)
* If 'self_send' is true, this is the client who is sending the message */ * If 'self_send' is true, this is the client who is sending the message */
void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const std::string &name, const std::string &str, int64 data) void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send, const std::string &name, const std::string &str, int64 data, const std::string &data_str)
{ {
StringID strid; StringID strid;
switch (action) { switch (action) {
@@ -247,6 +248,7 @@ void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send,
case NETWORK_ACTION_CHAT_COMPANY: strid = self_send ? STR_NETWORK_CHAT_TO_COMPANY : STR_NETWORK_CHAT_COMPANY; break; case NETWORK_ACTION_CHAT_COMPANY: strid = self_send ? STR_NETWORK_CHAT_TO_COMPANY : STR_NETWORK_CHAT_COMPANY; break;
case NETWORK_ACTION_CHAT_CLIENT: strid = self_send ? STR_NETWORK_CHAT_TO_CLIENT : STR_NETWORK_CHAT_CLIENT; break; case NETWORK_ACTION_CHAT_CLIENT: strid = self_send ? STR_NETWORK_CHAT_TO_CLIENT : STR_NETWORK_CHAT_CLIENT; break;
case NETWORK_ACTION_KICKED: strid = STR_NETWORK_MESSAGE_KICKED; break; case NETWORK_ACTION_KICKED: strid = STR_NETWORK_MESSAGE_KICKED; break;
case NETWORK_ACTION_EXTERNAL_CHAT: strid = STR_NETWORK_CHAT_EXTERNAL; break;
default: strid = STR_NETWORK_CHAT_ALL; break; default: strid = STR_NETWORK_CHAT_ALL; break;
} }
@@ -254,6 +256,7 @@ void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send,
SetDParamStr(0, name); SetDParamStr(0, name);
SetDParamStr(1, str); SetDParamStr(1, str);
SetDParam(2, data); SetDParam(2, data);
SetDParamStr(3, data_str);
/* All of these strings start with "***". These characters are interpreted as both left-to-right and /* All of these strings start with "***". These characters are interpreted as both left-to-right and
* right-to-left characters depending on the context. As the next text might be an user's name, the * right-to-left characters depending on the context. As the next text might be an user's name, the
@@ -264,7 +267,7 @@ void NetworkTextMessage(NetworkAction action, TextColour colour, bool self_send,
Debug(desync, 1, "msg: {:08x}; {:02x}; {}", _date, _date_fract, message); Debug(desync, 1, "msg: {:08x}; {:02x}; {}", _date, _date_fract, message);
IConsolePrint(colour, message); IConsolePrint(colour, message);
NetworkAddChatMessage((TextColour)colour, _settings_client.gui.network_chat_timeout, message); NetworkAddChatMessage(colour, _settings_client.gui.network_chat_timeout, message);
} }
/* Calculate the frame-lag of a client */ /* Calculate the frame-lag of a client */
@@ -631,16 +634,14 @@ public:
void OnFailure() override void OnFailure() override
{ {
NetworkGameList *item = NetworkGameListAddItem(connection_string); NetworkGameList *item = NetworkGameListAddItem(connection_string);
item->online = false; item->status = NGLS_OFFLINE;
UpdateNetworkGameWindow(); UpdateNetworkGameWindow();
} }
void OnConnect(SOCKET s) override void OnConnect(SOCKET s) override
{ {
_networking = true; QueryNetworkGameSocketHandler::QueryServer(s, this->connection_string);
new ClientNetworkGameSocketHandler(s, this->connection_string);
MyClient::SendInformationQuery();
} }
}; };
@@ -652,8 +653,6 @@ void NetworkQueryServer(const std::string &connection_string)
{ {
if (!_network_available) return; if (!_network_available) return;
NetworkInitialize();
new TCPQueryConnecter(connection_string); new TCPQueryConnecter(connection_string);
} }
@@ -1020,6 +1019,7 @@ void NetworkBackgroundLoop()
_network_coordinator_client.SendReceive(); _network_coordinator_client.SendReceive();
TCPConnecter::CheckCallbacks(); TCPConnecter::CheckCallbacks();
NetworkHTTPSocketHandler::HTTPReceive(); NetworkHTTPSocketHandler::HTTPReceive();
QueryNetworkGameSocketHandler::SendReceive();
NetworkBackgroundUDPLoop(); NetworkBackgroundUDPLoop();
} }

View File

@@ -76,6 +76,11 @@ ServerNetworkAdminSocketHandler::~ServerNetworkAdminSocketHandler()
_network_admins_connected--; _network_admins_connected--;
Debug(net, 3, "[admin] '{}' ({}) has disconnected", this->admin_name, this->admin_version); Debug(net, 3, "[admin] '{}' ({}) has disconnected", this->admin_name, this->admin_version);
if (_redirect_console_to_admin == this->index) _redirect_console_to_admin = INVALID_ADMIN_ID; if (_redirect_console_to_admin == this->index) _redirect_console_to_admin = INVALID_ADMIN_ID;
if (this->update_frequency[ADMIN_UPDATE_CONSOLE] & ADMIN_FREQUENCY_AUTOMATIC) {
this->update_frequency[ADMIN_UPDATE_CONSOLE] = (AdminUpdateFrequency)0;
DebugReconsiderSendRemoteMessages();
}
} }
/** /**
@@ -594,7 +599,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCmdNames()
/* Should COMPAT_MTU be exceeded, start a new packet /* Should COMPAT_MTU be exceeded, start a new packet
* (magic 5: 1 bool "more data" and one uint16 "command id", one * (magic 5: 1 bool "more data" and one uint16 "command id", one
* byte for string '\0' termination and 1 bool "no more data" */ * byte for string '\0' termination and 1 bool "no more data" */
if (p->CanWriteToPacket(strlen(cmdname) + 5)) { if (!p->CanWriteToPacket(strlen(cmdname) + 5)) {
p->Send_bool(false); p->Send_bool(false);
this->SendPacket(p); this->SendPacket(p);
@@ -688,6 +693,8 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_UPDATE_FREQUENC
this->update_frequency[type] = freq; this->update_frequency[type] = freq;
if (type == ADMIN_UPDATE_CONSOLE) DebugReconsiderSendRemoteMessages();
return NETWORK_RECV_STATUS_OKAY; return NETWORK_RECV_STATUS_OKAY;
} }
@@ -783,6 +790,25 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_CHAT(Packet *p)
return NETWORK_RECV_STATUS_OKAY; return NETWORK_RECV_STATUS_OKAY;
} }
NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_EXTERNAL_CHAT(Packet *p)
{
if (this->status == ADMIN_STATUS_INACTIVE) return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
std::string source = p->Recv_string(NETWORK_CHAT_LENGTH);
TextColour colour = (TextColour)p->Recv_uint16();
std::string user = p->Recv_string(NETWORK_CHAT_LENGTH);
std::string msg = p->Recv_string(NETWORK_CHAT_LENGTH);
if (!IsValidConsoleColour(colour)) {
Debug(net, 1, "[admin] Not supported chat colour {} ({}, {}, {}) from '{}' ({}).", (uint16)colour, source, user, msg, this->admin_name, this->admin_version);
return this->SendError(NETWORK_ERROR_ILLEGAL_PACKET);
}
NetworkServerSendExternalChat(source, colour, user, msg);
return NETWORK_RECV_STATUS_OKAY;
}
/* /*
* Useful wrapper functions * Useful wrapper functions
*/ */

View File

@@ -29,6 +29,7 @@ protected:
NetworkRecvStatus Receive_ADMIN_UPDATE_FREQUENCY(Packet *p) override; NetworkRecvStatus Receive_ADMIN_UPDATE_FREQUENCY(Packet *p) override;
NetworkRecvStatus Receive_ADMIN_POLL(Packet *p) override; NetworkRecvStatus Receive_ADMIN_POLL(Packet *p) override;
NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p) override; NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p) override;
NetworkRecvStatus Receive_ADMIN_EXTERNAL_CHAT(Packet *p) override;
NetworkRecvStatus Receive_ADMIN_RCON(Packet *p) override; NetworkRecvStatus Receive_ADMIN_RCON(Packet *p) override;
NetworkRecvStatus Receive_ADMIN_GAMESCRIPT(Packet *p) override; NetworkRecvStatus Receive_ADMIN_GAMESCRIPT(Packet *p) override;
NetworkRecvStatus Receive_ADMIN_PING(Packet *p) override; NetworkRecvStatus Receive_ADMIN_PING(Packet *p) override;

Some files were not shown because too many files have changed in this diff Show More