|
OpenTTD Source
1.11.0-RC1
|
Go to the documentation of this file.
42 #include "table/strings.h"
83 #define DEF_CONSOLE_CMD(function) static bool function(byte argc, char *argv[])
84 #define DEF_CONSOLE_HOOK(function) static ConsoleHookResult function(bool echo)
98 if (echo)
IConsoleError(
"You cannot use this command because there is no network available.");
113 if (echo)
IConsoleError(
"This command is only available to a network server.");
128 if (echo)
IConsoleError(
"This command is not available to a network server.");
143 if (echo)
IConsoleError(
"Not connected. This command is only available in multiplayer.");
156 if (echo)
IConsoleError(
"This command is forbidden in multiplayer.");
165 if (_game_mode == GM_MENU) {
166 if (echo)
IConsoleError(
"This command is only available in game and editor.");
169 return ConHookNoNetwork(echo);
190 IConsoleHelp(
"Reset status data of all engines. This might solve some issues with 'lost' engines. Usage: 'resetengines'");
206 IConsoleHelp(
"Reset NewGRF allocations of engine slots. This will remove invalid engine definitions, and might make default engines available again.");
210 if (_game_mode == GM_MENU) {
211 IConsoleError(
"This command is only available in game and editor.");
216 IConsoleError(
"This can only be done when there are no vehicles in the game.");
232 IConsoleHelp(
"Reset a tile to bare land. Usage: 'resettile <tile>'");
233 IConsoleHelp(
"Tile can be either decimal (34161) or hexadecimal (0x4a5B)");
263 IConsoleHelp(
"Usage: 'scrollto <tile>' or 'scrollto <x> <y>'");
264 IConsoleHelp(
"Numbers can be either decimal (34161) or hexadecimal (0x4a5B).");
305 IConsoleHelp(
"Save the current game. Usage: 'save <filename>'");
310 char *filename =
str_fmt(
"%s.sav", argv[1]);
332 IConsoleHelp(
"Saves the configuration for new games to the configuration file, typically 'openttd.cfg'.");
333 IConsoleHelp(
"It does not save the configuration of the current game to the configuration file.");
345 IConsoleHelp(
"Load a game by name or index. Usage: 'load <file | number>'");
349 if (argc != 2)
return false;
351 const char *file = argv[1];
354 if (item !=
nullptr) {
374 IConsoleHelp(
"Remove a savegame by name or index. Usage: 'rm <file | number>'");
378 if (argc != 2)
return false;
380 const char *file = argv[1];
383 if (item !=
nullptr) {
400 IConsoleHelp(
"List all loadable savegames and directories in the current dir via console. Usage: 'ls | dir'");
416 IConsoleHelp(
"Change the dir via console. Usage: 'cd <directory | number>'");
420 if (argc != 2)
return false;
422 const char *file = argv[1];
425 if (item !=
nullptr) {
426 switch (item->type) {
427 case FIOS_TYPE_DIR:
case FIOS_TYPE_DRIVE:
case FIOS_TYPE_PARENT:
445 IConsoleHelp(
"Print out the current working directory. Usage: 'pwd'");
461 IConsoleHelp(
"Clear the console buffer. Usage: 'clear'");
465 IConsoleClearBuffer();
475 static bool ConKickOrBan(
const char *argv,
bool ban,
const char *reason)
479 if (strchr(argv,
'.') ==
nullptr && strchr(argv,
':') ==
nullptr) {
521 IConsoleHelp(
"Kick a client from a network game. Usage: 'kick <ip | client-id> [<kick-reason>]'");
522 IConsoleHelp(
"For client-id's, see the command 'clients'");
526 if (argc != 2 && argc != 3)
return false;
529 if (argc == 2)
return ConKickOrBan(argv[1],
false,
nullptr);
532 size_t kick_message_length = strlen(argv[2]);
533 if (kick_message_length >= 255) {
534 IConsolePrintF(
CC_ERROR,
"ERROR: Maximum kick message length is 254 characters. You entered " PRINTF_SIZE
" characters.", kick_message_length);
537 return ConKickOrBan(argv[1],
false, argv[2]);
544 IConsoleHelp(
"Ban a client from a network game. Usage: 'ban <ip | client-id> [<ban-reason>]'");
545 IConsoleHelp(
"For client-id's, see the command 'clients'");
546 IConsoleHelp(
"If the client is no longer online, you can still ban his/her IP");
550 if (argc != 2 && argc != 3)
return false;
553 if (argc == 2)
return ConKickOrBan(argv[1],
true,
nullptr);
556 size_t kick_message_length = strlen(argv[2]);
557 if (kick_message_length >= 255) {
558 IConsolePrintF(
CC_ERROR,
"ERROR: Maximum kick message length is 254 characters. You entered " PRINTF_SIZE
" characters.", kick_message_length);
561 return ConKickOrBan(argv[1],
true, argv[2]);
568 IConsoleHelp(
"Unban a client from a network game. Usage: 'unban <ip | banlist-index>'");
569 IConsoleHelp(
"For a list of banned IP's, see the command 'banlist'");
573 if (argc != 2)
return false;
583 index = atoi(argv[1]) - 1U;
602 IConsoleHelp(
"List the IP's of banned clients: Usage 'banlist'");
637 IConsoleHelp(
"Unpause a network game. Usage: 'unpause'");
658 IConsoleHelp(
"Remote control the server from another client. Usage: 'rcon <password> <command>'");
659 IConsoleHelp(
"Remember to enclose the command in quotes, otherwise only the first parameter is sent");
663 if (argc < 3)
return false;
676 IConsoleHelp(
"List the status of all clients connected to the server. Usage 'status'");
687 IConsoleHelp(
"List current and maximum client/company limits. Usage 'server_info'");
688 IConsoleHelp(
"You can change these values by modifying settings 'network.max_clients', 'network.max_companies' and 'network.max_spectators'");
702 IConsoleHelp(
"Change the nickname of a connected client. Usage: 'client_name <client-id> <new-name>'");
703 IConsoleHelp(
"For client-id's, see the command 'clients'");
710 IConsoleError(
"Please use the command 'name' to change your own name!");
729 IConsoleHelp(
"Request joining another company. Usage: join <company-id> [<password>]");
730 IConsoleHelp(
"For valid company-id see company list, use 255 for spectator");
748 IConsoleError(
"Cannot join spectators, maximum number of spectators reached.");
776 IConsoleHelp(
"Move a client to another company. Usage: move <client-id> <company-id>");
777 IConsoleHelp(
"For valid client-id see 'clients', for valid company-id see 'companies', use 255 for moving to spectators");
786 IConsoleError(
"Invalid client-id, check the command 'clients' for valid client-id's.");
806 IConsoleError(
"You cannot move someone to where he/she already is!");
819 IConsoleHelp(
"Remove an idle company from the game. Usage: 'reset_company <company-id>'");
820 IConsoleHelp(
"For company-id's, see the list of companies from the dropdown menu. Company 1 is 1, etc.");
824 if (argc != 2)
return false;
840 IConsoleError(
"Cannot remove company: a client is connected to that company.");
845 IConsoleError(
"Cannot remove company: the server is connected to that company.");
859 IConsoleHelp(
"Get a list of connected clients including their ID, name, company-id, and IP. Usage: 'clients'");
871 IConsoleHelp(
"Reconnect to server to which you were connected last time. Usage: 'reconnect [<company>]'");
872 IConsoleHelp(
"Company 255 is spectator (default, if not specified), 0 means creating new company.");
873 IConsoleHelp(
"All others are a certain company with Company 1 being #1");
884 if (playas < COMPANY_FIRST + 1 || playas >
MAX_COMPANIES + 1)
return false;
903 IConsoleHelp(
"Connect to a remote OTTD server and join the game. Usage: 'connect <ip>'");
904 IConsoleHelp(
"IP can contain port and company: 'IP[:Port][#Company]', eg: 'server.ottd.org:443#2'");
905 IConsoleHelp(
"Company #255 is spectator all others are a certain company with Company 1 being #1");
909 if (argc < 2)
return false;
912 const char *port =
nullptr;
913 const char *company =
nullptr;
922 if (company !=
nullptr) {
933 if (port !=
nullptr) {
950 IConsoleHelp(
"Execute a local script file. Usage: 'exec <script> <?>'");
954 if (argc < 2)
return false;
958 if (script_file ==
nullptr) {
959 if (argc == 2 || atoi(argv[2]) != 0)
IConsoleError(
"script file not found");
964 IConsoleError(
"Maximum 'exec' depth reached; script A is calling script B is calling script C ... more than 10 times.");
972 while (fgets(cmdline,
sizeof(cmdline), script_file) !=
nullptr) {
974 for (
char *cmdptr = cmdline; *cmdptr !=
'\0'; cmdptr++) {
975 if (*cmdptr ==
'\n' || *cmdptr ==
'\r') {
988 if (ferror(script_file)) {
989 IConsoleError(
"Encountered error while trying to read from script file");
1000 IConsoleHelp(
"Stop executing a running script. Usage: 'return'");
1011 extern bool CloseConsoleLogIfActive();
1015 extern FILE *_iconsole_output_file;
1018 IConsoleHelp(
"Start or stop logging console output to a file. Usage: 'script <filename>'");
1019 IConsoleHelp(
"If filename is omitted, a running log is stopped if it is active");
1023 if (!CloseConsoleLogIfActive()) {
1024 if (argc < 2)
return false;
1027 _iconsole_output_file = fopen(argv[1],
"ab");
1028 if (_iconsole_output_file ==
nullptr)
IConsoleError(
"could not open file");
1038 IConsoleHelp(
"Print back the first argument to the console. Usage: 'echo <arg>'");
1042 if (argc < 2)
return false;
1050 IConsoleHelp(
"Print back the first argument to the console in a given colour. Usage: 'echoc <colour> <arg2>'");
1054 if (argc < 3)
return false;
1062 IConsoleHelp(
"Start a new game. Usage: 'newgame [seed]'");
1063 IConsoleHelp(
"The server can force a new game using 'newgame'; any client joined will rejoin after the server is done generating the new game.");
1075 IConsoleHelp(
"Restarts a game. It tries to reproduce the exact same map as the game started with.");
1077 IConsoleHelp(
" * restarting games started in another version might create another map due to difference in map generation");
1078 IConsoleHelp(
" * restarting games based on scenarios, loaded games or heightmaps will start a new game based on the settings stored in the scenario/savegame");
1094 IConsoleHelp(
" * if you started from a savegame / scenario / heightmap, that exact same savegame / scenario / heightmap will be loaded.");
1095 IConsoleHelp(
" * if you started from a new game, this acts the same as 'restart'.");
1115 for (
char *p2 = buf; *p2 !=
'\0'; p2++) {
1166 if (argc == 0 || argc > 3) {
1167 IConsoleHelp(
"Start a new AI. Usage: 'start_ai [<AI>] [<settings>]'");
1168 IConsoleHelp(
"Start a new AI. If <AI> is given, it starts that specific AI (if found).");
1169 IConsoleHelp(
"If <settings> is given, it is parsed and the AI settings are set to that.");
1173 if (_game_mode != GM_NORMAL) {
1187 IConsoleWarning(
"AIs are not allowed in multiplayer by configuration.");
1199 if (c->index != n)
break;
1205 config->
Change(argv[1], -1,
false);
1211 char *name =
stredup(argv[1]);
1212 char *e = strrchr(name,
'.');
1217 int version = atoi(e);
1218 config->
Change(name, version,
true);
1241 IConsoleHelp(
"Reload an AI. Usage: 'reload_ai <company-id>'");
1242 IConsoleHelp(
"Reload the AI with the given company id. For company-id's, see the list of companies from the dropdown menu. Company 1 is 1, etc.");
1246 if (_game_mode != GM_NORMAL) {
1279 IConsoleHelp(
"Stop an AI. Usage: 'stop_ai <company-id>'");
1280 IConsoleHelp(
"Stop the AI with the given company id. For company-id's, see the list of companies from the dropdown menu. Company 1 is 1, etc.");
1284 if (_game_mode != GM_NORMAL) {
1316 IConsoleHelp(
"Rescan the AI dir for scripts. Usage: 'rescan_ai'");
1321 IConsoleWarning(
"Only the server can rescan the AI dir for scripts.");
1333 IConsoleHelp(
"Rescan the Game Script dir for scripts. Usage: 'rescan_game'");
1338 IConsoleWarning(
"Only the server can rescan the Game Script dir for scripts.");
1350 IConsoleHelp(
"Rescan the data dir for NewGRFs. Usage: 'rescan_newgrf'");
1362 IConsoleHelp(
"Returns the seed used to create this game. Usage: 'getseed'");
1363 IConsoleHelp(
"The seed can be used to reproduce the exact same map as the game started with.");
1374 IConsoleHelp(
"Returns the current date (year-month-day) of the game. Usage: 'getdate'");
1387 IConsoleHelp(
"Returns the current date (year-month-day) of your system. Usage: 'getsysdate'");
1393 auto timeinfo = localtime(&t);
1394 IConsolePrintF(
CC_DEFAULT,
"System Date: %04d-%02d-%02d %02d:%02d:%02d", timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
1404 IConsoleHelp(
"Add a new alias, or redefine the behaviour of an existing alias . Usage: 'alias <name> <command>'");
1408 if (argc < 3)
return false;
1411 if (alias ==
nullptr) {
1423 IConsoleHelp(
"Create a screenshot of the game. Usage: 'screenshot [viewport | normal | big | giant | heightmap | minimap] [no_con] [size <width> <height>] [<filename>]'");
1424 IConsoleHelp(
"'viewport' (default) makes a screenshot of the current viewport (including menus, windows, ..), "
1425 "'normal' makes a screenshot of the visible area, "
1426 "'big' makes a zoomed-in screenshot of the visible area, "
1427 "'giant' makes a screenshot of the whole map, "
1428 "'heightmap' makes a heightmap screenshot of the map that can be loaded in as heightmap, "
1429 "'minimap' makes a top-viewed minimap screenshot of the whole world which represents one tile by one pixel. "
1430 "'no_con' hides the console to create the screenshot (only useful in combination with 'viewport'). "
1431 "'size' sets the width and height of the viewport to make a screenshot of (only useful in combination with 'normal' or 'big').");
1435 if (argc > 7)
return false;
1440 const char *name =
nullptr;
1441 uint32 arg_index = 1;
1443 if (argc > arg_index) {
1444 if (strcmp(argv[arg_index],
"viewport") == 0) {
1447 }
else if (strcmp(argv[arg_index],
"normal") == 0) {
1450 }
else if (strcmp(argv[arg_index],
"big") == 0) {
1453 }
else if (strcmp(argv[arg_index],
"giant") == 0) {
1456 }
else if (strcmp(argv[arg_index],
"heightmap") == 0) {
1459 }
else if (strcmp(argv[arg_index],
"minimap") == 0) {
1465 if (argc > arg_index && strcmp(argv[arg_index],
"no_con") == 0) {
1467 IConsoleError(
"'no_con' can only be used in combination with 'viewport'");
1474 if (argc > arg_index + 2 && strcmp(argv[arg_index],
"size") == 0) {
1477 IConsoleError(
"'size' can only be used in combination with 'normal' or 'big'");
1485 if (argc > arg_index) {
1487 name = argv[arg_index];
1491 if (argc > arg_index) {
1503 IConsoleHelp(
"Print out debugging information about a command. Usage: 'info_cmd <cmd>'");
1507 if (argc < 2)
return false;
1510 if (cmd ==
nullptr) {
1526 IConsoleHelp(
"Get/set the default debugging level for the game. Usage: 'debug_level [<level>]'");
1527 IConsoleHelp(
"Level can be any combination of names, levels. Eg 'net=5 ms=4'. Remember to enclose it in \"'s");
1531 if (argc > 2)
return false;
1558 IConsoleHelp(
"Leave the currently joined/running game (only ingame). Usage: 'part'");
1562 if (_game_mode != GM_NORMAL)
return false;
1576 if (cmd !=
nullptr) {
1577 cmd->
proc(0,
nullptr);
1582 if (alias !=
nullptr) {
1584 if (cmd !=
nullptr) {
1585 cmd->
proc(0,
nullptr);
1611 IConsoleHelp(
"List all registered commands. Usage: 'list_cmds [<pre-filter>]'");
1616 if (argv[1] ==
nullptr || strstr(cmd->
name, argv[1]) !=
nullptr) {
1627 IConsoleHelp(
"List all registered aliases. Usage: 'list_aliases [<pre-filter>]'");
1632 if (argv[1] ==
nullptr || strstr(alias->
name, argv[1]) !=
nullptr) {
1643 IConsoleHelp(
"List the details of all companies in the game. Usage 'companies'");
1649 char company_name[512];
1651 GetString(company_name, STR_COMPANY_NAME,
lastof(company_name));
1653 const char *password_state =
"";
1655 password_state =
"AI";
1662 IConsolePrintF(
CC_INFO,
"#:%d(%s) Company Name: '%s' Year Founded: %d Money: " OTTD_PRINTF64
" Loan: " OTTD_PRINTF64
" Value: " OTTD_PRINTF64
" (T:%d, R:%d, P:%d, S:%d) %s",
1663 c->index + 1, colour, company_name,
1666 c->group_all[
VEH_ROAD].num_vehicle,
1668 c->group_all[
VEH_SHIP].num_vehicle,
1678 IConsoleHelp(
"Chat to your fellow players in a multiplayer game. Usage: 'say \"<msg>\"'");
1682 if (argc != 2)
return false;
1697 IConsoleHelp(
"Chat to a certain company in a multiplayer game. Usage: 'say_company <company-no> \"<msg>\"'");
1698 IConsoleHelp(
"CompanyNo is the company that plays as company <companyno>, 1 through max_companies");
1702 if (argc != 3)
return false;
1723 IConsoleHelp(
"Chat to a certain client in a multiplayer game. Usage: 'say_client <client-no> \"<msg>\"'");
1724 IConsoleHelp(
"For client-id's, see the command 'clients'");
1728 if (argc != 3)
return false;
1743 const char *helpmsg;
1746 helpmsg =
"Change the password of a company. Usage: 'company_pw <company-no> \"<password>\"";
1748 helpmsg =
"Change the password of your or any other company. Usage: 'company_pw [<company-no>] \"<password>\"'";
1750 helpmsg =
"Change the password of your company. Usage: 'company_pw \"<password>\"'";
1759 const char *password;
1760 const char *errormsg;
1765 errormsg =
"You have to own a company to make use of this command.";
1767 company_id = (
CompanyID)(atoi(argv[1]) - 1);
1769 errormsg =
"You have to specify the ID of a valid human controlled company.";
1791 #if defined(WITH_ZLIB)
1797 static const char *
const inv_lookup[] = {
"",
"base",
"newgrf",
"ai",
"ailib",
"scenario",
"heightmap" };
1798 for (uint i = 1 ; i <
lengthof(inv_lookup); i++) {
1799 if (strcasecmp(str, inv_lookup[i]) == 0)
return (
ContentType)i;
1828 static const char *
const types[] = {
"Base graphics",
"NewGRF",
"AI",
"AI library",
"Scenario",
"Heightmap",
"Base sound",
"Base music",
"Game script",
"GS library" };
1830 static const char *
const states[] = {
"Not selected",
"Selected",
"Dep Selected",
"Installed",
"Unknown" };
1833 char buf[
sizeof(ci->
md5sum) * 2 + 1];
1835 IConsolePrintF(state_to_colour[ci->
state],
"%d, %s, %s, %s, %08X, %s", ci->
id, types[ci->
type - 1], states[ci->
state], ci->
name, ci->
unique_id, buf);
1841 if (cb ==
nullptr) {
1847 IConsoleHelp(
"Query, select and download content. Usage: 'content update|upgrade|select [id]|unselect [all|id]|state [filter]|download'");
1848 IConsoleHelp(
" update: get a new list of downloadable content; must be run first");
1849 IConsoleHelp(
" upgrade: select all items that are upgrades");
1850 IConsoleHelp(
" select: select a specific item given by its id. If no parameter is given, all selected content will be listed");
1851 IConsoleHelp(
" unselect: unselect a specific item given by its id or 'all' to unselect all");
1852 IConsoleHelp(
" state: show the download/select state of all downloadable content. Optionally give a filter string");
1853 IConsoleHelp(
" download: download all content you've selected");
1857 if (strcasecmp(argv[1],
"update") == 0) {
1862 if (strcasecmp(argv[1],
"upgrade") == 0) {
1867 if (strcasecmp(argv[1],
"select") == 0) {
1875 }
else if (strcasecmp(argv[2],
"all") == 0) {
1882 IConsoleError(
"'select all' is no longer supported since 1.11");
1889 if (strcasecmp(argv[1],
"unselect") == 0) {
1894 if (strcasecmp(argv[2],
"all") == 0) {
1902 if (strcasecmp(argv[1],
"state") == 0) {
1905 if (argc > 2 && strcasestr((*iter)->name, argv[2]) ==
nullptr)
continue;
1911 if (strcasecmp(argv[1],
"download") == 0) {
1926 IConsoleHelp(
"Change setting for all clients. Usage: 'setting <name> [<value>]'");
1927 IConsoleHelp(
"Omitting <value> will print out the current value of the setting.");
1931 if (argc == 1 || argc > 3)
return false;
1936 IConsoleSetSetting(argv[1], argv[2]);
1945 IConsoleHelp(
"Change setting for the next game. Usage: 'setting_newgame <name> [<value>]'");
1946 IConsoleHelp(
"Omitting <value> will print out the current value of the setting.");
1950 if (argc == 1 || argc > 3)
return false;
1955 IConsoleSetSetting(argv[1], argv[2],
true);
1964 IConsoleHelp(
"List settings. Usage: 'list_settings [<pre-filter>]'");
1968 if (argc > 2)
return false;
1983 IConsoleHelp(
"Reloads all active NewGRFs from disk. Equivalent to reapplying NewGRFs via the settings, but without asking for confirmation. This might crash OpenTTD!");
1994 IConsoleHelp(
"Collect performance data about NewGRF sprite requests and callbacks. Sub-commands can be abbreviated.");
1996 IConsoleHelp(
" List all NewGRFs that can be profiled, and their status.");
1997 IConsoleHelp(
"Usage: newgrf_profile select <grf-num>...");
1998 IConsoleHelp(
" Select one or more GRFs for profiling.");
1999 IConsoleHelp(
"Usage: newgrf_profile unselect <grf-num>...");
2000 IConsoleHelp(
" Unselect one or more GRFs from profiling. Use the keyword \"all\" instead of a GRF number to unselect all. Removing an active profiler aborts data collection.");
2001 IConsoleHelp(
"Usage: newgrf_profile start [<num-days>]");
2002 IConsoleHelp(
" Begin profiling all selected GRFs. If a number of days is provided, profiling stops after that many in-game days.");
2004 IConsoleHelp(
" End profiling and write the collected data to CSV files.");
2006 IConsoleHelp(
" End profiling and discard all collected data.");
2010 extern const std::vector<GRFFile *> &GetAllGRFFiles();
2011 const std::vector<GRFFile *> &files = GetAllGRFFiles();
2014 if (argc == 1 || strncasecmp(argv[1],
"lis", 3) == 0) {
2018 auto profiler = std::find_if(_newgrf_profilers.begin(), _newgrf_profilers.end(), [&](
NewGRFProfiler &pr) { return pr.grffile == grf; });
2019 bool selected = profiler != _newgrf_profilers.end();
2020 bool active = selected && profiler->active;
2022 const char *statustext = active ?
" (active)" : selected ?
" (selected)" :
"";
2030 if (strncasecmp(argv[1],
"sel", 3) == 0 && argc >= 3) {
2031 for (
size_t argnum = 2; argnum < argc; ++argnum) {
2032 int grfnum = atoi(argv[argnum]);
2033 if (grfnum < 1 || grfnum > (
int)files.size()) {
2037 GRFFile *grf = files[grfnum - 1];
2038 if (std::any_of(_newgrf_profilers.begin(), _newgrf_profilers.end(), [&](
NewGRFProfiler &pr) { return pr.grffile == grf; })) {
2042 _newgrf_profilers.emplace_back(grf);
2048 if (strncasecmp(argv[1],
"uns", 3) == 0 && argc >= 3) {
2049 for (
size_t argnum = 2; argnum < argc; ++argnum) {
2050 if (strcasecmp(argv[argnum],
"all") == 0) {
2051 _newgrf_profilers.clear();
2054 int grfnum = atoi(argv[argnum]);
2055 if (grfnum < 1 || grfnum > (
int)files.size()) {
2059 GRFFile *grf = files[grfnum - 1];
2060 auto pos = std::find_if(_newgrf_profilers.begin(), _newgrf_profilers.end(), [&](
NewGRFProfiler &pr) { return pr.grffile == grf; });
2061 if (pos != _newgrf_profilers.end()) _newgrf_profilers.erase(pos);
2067 if (strncasecmp(argv[1],
"sta", 3) == 0) {
2075 if (!grfids.empty()) grfids +=
", ";
2076 char grfidstr[12]{ 0 };
2084 int days = std::max(atoi(argv[2]), 1);
2085 _newgrf_profile_end_date =
_date + days;
2087 char datestrbuf[32]{ 0 };
2089 GetString(datestrbuf, STR_JUST_DATE_ISO,
lastof(datestrbuf));
2092 _newgrf_profile_end_date =
MAX_DAY;
2094 }
else if (_newgrf_profilers.empty()) {
2103 if (strncasecmp(argv[1],
"sto", 3) == 0) {
2104 NewGRFProfiler::FinishAll();
2109 if (strncasecmp(argv[1],
"abo", 3) == 0) {
2113 _newgrf_profile_end_date =
MAX_DAY;
2125 static void IConsoleDebugLibRegister()
2138 IConsoleHelp(
"Show frame rate and game speed information");
2156 IConsoleError(
"Can not open frame rate window on a dedicated server");
2164 static void ConDumpRoadTypes()
2173 std::map<uint32, const GRFFile *> grfs;
2176 if (rti->
label == 0)
continue;
2179 if (grf !=
nullptr) {
2181 grfs.emplace(grfid, grf);
2185 RoadTypeIsTram(rt) ?
"Tram" :
"Road",
2196 for (
const auto &grf : grfs) {
2201 static void ConDumpRailTypes()
2211 std::map<uint32, const GRFFile *> grfs;
2214 if (rti->
label == 0)
continue;
2217 if (grf !=
nullptr) {
2219 grfs.emplace(grfid, grf);
2234 for (
const auto &grf : grfs) {
2239 static void ConDumpCargoTypes()
2254 std::map<uint32, const GRFFile *> grfs;
2257 if (!spec->
IsValid())
continue;
2260 if (grf !=
nullptr) {
2262 grfs.emplace(grfid, grf);
2264 IConsolePrintF(
CC_DEFAULT,
" %02u Bit: %2u, Label: %c%c%c%c, Callback mask: 0x%02X, Cargo class: %c%c%c%c%c%c%c%c%c%c%c, GRF: %08X, %s",
2281 GetStringPtr(spec->
name)
2284 for (
const auto &grf : grfs) {
2294 IConsoleHelp(
"Usage: dump_info roadtypes|railtypes|cargotypes");
2295 IConsoleHelp(
" Show information about road/tram types, rail types or cargo types.");
2299 if (strcasecmp(argv[1],
"roadtypes") == 0) {
2304 if (strcasecmp(argv[1],
"railtypes") == 0) {
2309 if (strcasecmp(argv[1],
"cargotypes") == 0) {
2310 ConDumpCargoTypes();
2321 void IConsoleStdLibRegister()
2387 #if defined(WITH_ZLIB)
2446 IConsoleDebugLibRegister();
@ VEH_AIRCRAFT
Aircraft vehicle type.
static uint MapLogX()
Logarithm of the map size along the X side.
void StringToSettings(const char *value)
Convert a string which is stored in the config file or savegames to custom settings of this Script.
RoadTypeFlags flags
Bit mask of road type flags.
@ ROTF_NO_LEVEL_CROSSING
Bit number for disabling level crossing.
static ConsoleFileList _console_file_list
File storage cache for the console.
void NetworkClientSendRcon(const char *password, const char *command)
Send a remote console command.
Callbacks for notifying others about incoming data.
uint32 TileIndex
The index/ID of a Tile.
static const TextColour CC_INFO
Colour for information lines.
@ ROTSG_GROUND
Required: Main group of ground images.
@ CC_HAZARDOUS
Hazardous cargo (Nuclear Fuel, Explosives, etc.)
uint8 callback_mask
Bitmask of cargo callbacks that have to be called.
uint32 generation_seed
noise seed for world generation
@ CC_COVERED
Covered/Sheltered Freight (Transportation in Box Vans, Silo Wagons, etc.)
void SetDebugString(const char *s)
Set debugging levels by parsing the text in s.
IConsoleCmdProc * proc
process executed when command is typed
static bool ResetToCurrentNewGRFConfig()
Tries to reset the engine mapping to match the current NewGRF configuration.
static const uint16 NETWORK_DEFAULT_PORT
The default port of the game server (TCP & UDP)
bool ScrollMainWindowToTile(TileIndex tile, bool instant)
Scrolls the viewport of the main window to a given location.
CargoLabel label
Unique label of the cargo type.
StringID FiosGetDescText(const char **path, uint64 *total_free)
Get descriptive texts.
@ SAVE_DIR
Base directory for all savegames.
void NetworkServerShowStatusToConsole()
Show the status message of all clients on the console.
ContentType type
Type of content.
void SetWindowDirty(WindowClass cls, WindowNumber number)
Mark window as dirty (in need of repainting)
ConstContentIterator End() const
Get the end of the content inf iterator.
void ReloadNewGRFData()
Reload all NewGRF files during a running game.
uint8 max_spectators
maximum amount of spectators
bool newgrf_developer_tools
activate NewGRF developer tools and allow modifying NewGRFs in an existing game
@ ROTF_CATENARY
Bit number for adding catenary.
ScreenshotType
Type of requested screenshot.
@ SM_LOAD_GAME
Load game, Play Scenario.
static void OutputContentState(const ContentInfo *const ci)
Outputs content state information to console.
NetworkServerGameInfo _network_game_info
Information about our game.
ContentType
The values in the enum are important; they are used as database 'keys'.
struct RoadTypeInfo::@44 strings
Strings associated with the rail type.
uint8 map_y
Y size of map.
bool NetworkMaxSpectatorsReached()
Check if max_spectatos has been reached on the server (local check only).
void DoExitSave()
Do a save when exiting the game (_settings_client.gui.autosave_on_exit)
uint8 max_clients
maximum amount of clients
void SetTitle(const char *title)
Set the title of the file.
@ ROTF_TOWN_BUILD
Bit number for allowing towns to build this roadtype.
CompanyID client_playas
As which company is this client playing (CompanyID)
bool autosave_on_exit
save an autosave when you quit the game, but do not ask "Do you really want to quit?...
SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, DetailedFileType dft, Subdirectory sb, bool threaded)
Main Save or Load function where the high-level saveload functions are handled.
static const uint ICON_CMDLN_SIZE
maximum length of a typed in command
@ SC_HEIGHTMAP
Heightmap of the world.
@ CC_EXPRESS
Express cargo (Goods, Food, Candy, but also possible for passengers)
bool _network_server
network-server is active
const GRFFile * grffile
Which GRF is being profiled.
void SaveToConfig()
Save the values to the configuration file.
bool NetworkCompanyHasClients(CompanyID company)
Check whether a particular company has clients.
static CargoSpec * Get(size_t index)
Retrieve cargo details for the given cargo ID.
char * cmdline
command(s) that is/are being aliased
IConsoleCmd * _iconsole_cmds
list of registered commands
static bool HasBit(const T x, const uint8 y)
Checks if a bit in a value is set.
char password[NETWORK_PASSWORD_LENGTH]
The password for the company.
This struct contains all the info that is needed to draw and construct tracks.
void NetworkServerDoMove(ClientID client_id, CompanyID company_id)
Handle the tid-bits of moving a client from one company to another.
@ DFT_GAME_FILE
Save game or scenario file.
const GRFFile * grffile[RTSG_END]
NewGRF providing the Action3 for the railtype.
void SetName(const char *name)
Set the name of the file.
void ConPrintFramerate()
Print performance statistics to game console.
static bool CanStartNew()
Is it possible to start a new AI company?
TextColour
Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palett...
@ ROADTYPE_END
Used for iterations.
@ DESTTYPE_TEAM
Send message/notice to everyone playing the same company (Team)
ClientSettings _settings_client
The current settings for this game.
@ SC_ZOOMEDIN
Fully zoomed in screenshot of the visible area.
Specification of a cargo type.
static bool IsValidHumanID(size_t index)
Is this company a valid company, not controlled by a NoAI program?
@ CC_LIQUID
Liquids (Oil, Water, Rubber)
#define MAX_DAY
The number of days till the last day.
@ VEH_ROAD
Road vehicle type.
@ CC_PASSENGERS
Passengers.
ClientID _redirect_console_to_client
If not invalid, redirect the console output to a client.
void StartupEngines()
Start/initialise all our engines.
Owner
Enum for all companies/owners.
Money CalculateCompanyValue(const Company *c, bool including_loan=true)
Calculate the value of the company.
List of file information.
void InvalidateFileList()
Declare the file storage cache as being invalid, also clears all stored files.
const typedef ContentInfo *const * ConstContentIterator
Iterator for the constant content vector.
static void SetDParam(uint n, uint64 v)
Set a string parameter v at index n in the global string parameter array.
static const AdminIndex INVALID_ADMIN_ID
An invalid admin marker.
static const uint32 GENERATE_NEW_SEED
Create a new random seed.
AdminIndex _redirect_console_to_admin
Redirection of the (remote) console to the admin.
static const TextColour CC_DEFAULT
Default colour of the console.
IConsoleAlias * IConsoleAliasGet(const char *name)
Find the alias pointed to by its string.
uint8 bitnum
Cargo bit number, is INVALID_CARGO for a non-used spec.
IConsoleHook * hook
any special trigger action that needs executing
IConsoleCmd * IConsoleCmdGet(const char *name)
Find the command pointed to by its string.
GameCreationSettings game_creation
settings used during the creation of a game (map)
void Clear()
Remove all items from the list.
@ PM_UNPAUSED
A normal unpaused game.
static uint MapSizeX()
Get the size of the map along the X.
StringID name
Name of this rail type.
void RequestContentList(ContentType type)
Request the content list for the given type.
static const RailtypeInfo * GetRailTypeInfo(RailType railtype)
Returns a pointer to the Railtype information for a given railtype.
static NetworkClientInfo * GetByClientID(ClientID client_id)
Return the CI given it's client-identifier.
Colours _company_colours[MAX_COMPANIES]
NOSAVE: can be determined from company structs.
@ BASE_DIR
Base directory for all subdirectories.
static char * GetConsoleLibraryList(char *p, const char *last)
Wrapper function for AIScanner::GetAIConsoleLibraryList.
@ COMPANY_NEW_COMPANY
The client wants a new company.
static uint MapSize()
Get the size of the map.
@ SLO_LOAD
File is being loaded.
static uint _script_current_depth
Depth of scripts running (used to abort execution when #ConReturn is encountered).
RailType
Enumeration for all possible railtypes.
@ RTF_CATENARY
Bit number for drawing a catenary.
Date _date
Current date in days (day counter)
@ CC_SPECIAL
Special bit used for livery refit tricks instead of normal cargoes.
void OnDownloadComplete(ContentID cid)
We have finished downloading a file.
@ SLO_SAVE
File is being saved.
@ CCA_NEW_AI
Create a new AI company.
@ ROTF_HIDDEN
Bit number for hidden from construction.
bool DoCommandP(const CommandContainer *container, bool my_cmd)
Shortcut for the long DoCommandP when having a container with the data.
char last_host[NETWORK_HOSTNAME_LENGTH]
IP address of the last joined server.
bool FiosDelete(const char *name)
Delete a file.
@ RTF_HIDDEN
Bit number for hiding from selection.
@ CMD_PAUSE
pause the game
static const size_t MAX_SIZE
Make template parameter accessible from outside.
static bool IsConnected()
Check whether the client is actually connected (and in the game).
bool IsValid() const
Tests for validity of this cargospec.
FILE * FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize)
Opens a OpenTTD file somewhere in a personal or global directory.
void UnselectAll()
Unselect everything that we've not downloaded so far.
@ CC_PIECE_GOODS
Piece goods (Livestock, Wood, Steel, Paper)
void BuildFileList(AbstractFileType abstract_filetype, SaveLoadOperation fop)
Construct a file list with the given kind of files, for the stated purpose.
Container for all important information about a piece of content.
ClientID
'Unique' identifier to be given to clients
void OnDisconnect()
Callback for when the connection got disconnected.
@ RTF_DISALLOW_90DEG
Bit number for never allowed 90 degree turns, regardless of setting.
void ShowFramerateWindow()
Open the general framerate window.
@ CC_BULK
Bulk cargo (Coal, Grain etc., Ores, Fruit)
static AIConfig * GetConfig(CompanyID company, ScriptSettingSource source=SSS_DEFAULT)
Get the config of a company.
void IConsoleError(const char *string)
It is possible to print error information to the console.
void ParseConnectionString(const char **company, const char **port, char *connection_string)
Converts a string to ip/port/company Format: IP:port::company.
const struct GRFFile * grffile
NewGRF where #group belongs to.
Deals with finding savegames.
PauseMode _pause_mode
The current pause mode.
byte md5sum[16]
The MD5 checksum.
static void IConsoleHelp(const char *str)
Show help for the console.
void Unselect(ContentID cid)
Unselect a specific content id.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
@ CHR_ALLOW
Allow command execution.
bool GetArgumentInteger(uint32 *value, const char *arg)
Change a string into its number representation.
void ConvertDateToYMD(Date date, YearMonthDay *ymd)
Converts a Date to a Year, Month & Day.
void NetworkPrintClients()
Print all the clients to the console.
@ MAX_COMPANIES
Maximum number of companies.
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
const char * FiosBrowseTo(const FiosItem *item)
Browse to a new path based on the passed item, starting at #_fios_path.
void NetworkDisconnect(bool blocking, bool close_admins)
We want to disconnect from the host/clients.
const FiosItem * FindItem(const char *file)
Find file information of a file by its name from the file list.
@ ROTF_NO_HOUSES
Bit number for setting this roadtype as not house friendly.
char * RemoveUnderscores(char *name)
Remove underscores from a string; the string will be modified!
@ CLIENT_ID_SERVER
Servers always have this ID.
NetworkCompanyState * _network_company_states
Statistics about some companies.
static bool StrEmpty(const char *s)
Check if a string buffer is empty.
@ SELECTED
The content has been manually selected.
static const TextColour CC_DEBUG
Colour for debug output.
bool _networking
are we in networking mode?
uint16 last_port
port of the last joined server
void GamelogPrintConsole()
Print the gamelog data to the console.
@ RTSG_GROUND
Main group of ground images.
void ValidateFileList(bool force_reload=false)
(Re-)validate the file storage cache.
StringID name
Name of this rail type.
static uint MapSizeY()
Get the size of the map along the Y.
bool active
Is this profiler collecting data.
@ ROADTYPE_BEGIN
Used for iterations.
bool _network_dedicated
are we a dedicated server?
IConsoleAlias * _iconsole_aliases
list of registered aliases
@ CRR_MANUAL
The company is manually removed.
void DownloadSelectedContent(uint &files, uint &bytes, bool fallback=false)
Actually begin downloading the content we selected.
static bool IsHumanID(size_t index)
Is this company a company not controlled by a NoAI program?
@ FT_SAVEGAME
old or new savegame
void IConsolePrint(TextColour colour_code, const char *string)
Handle the printing of text entered into the console or redirected there by any other means.
RoadType
The different roadtypes we support.
static const TextColour CC_COMMAND
Colour for the console's commands.
static uint32 BSWAP32(uint32 x)
Perform a 32 bits endianness bitswap on x.
bool file_list_valid
If set, the file list is valid.
bool NetworkCompanyIsPassworded(CompanyID company_id)
Check if the company we want to join requires a password.
void StartNewGameWithoutGUI(uint32 seed)
Start a normal game without the GUI.
ClientID client_id
Client identifier (same as ClientState->client_id)
File list storage for the console, for caching the last 'ls' command.
static char * GetConsoleList(char *p, const char *last, bool newest_only=false)
Wrapper function for AIScanner::GetAIConsoleList.
ClientID _network_own_client_id
Our client identifier.
char * name
name of the alias
bool NetworkServerChangeClientName(ClientID client_id, const char *new_name)
Change the client name of the given client.
AISettings ai
what may the AI do?
void NetworkServerKickClient(ClientID client_id, const char *reason)
Kick a single client.
ClientNetworkContentSocketHandler _network_content_client
The client we use to connect to the server.
const GRFFile * grffile[ROTSG_END]
NewGRF providing the Action3 for the roadtype.
SwitchMode _switch_mode
The next mainloop command.
void OnConnect(bool success)
Callback for when the connection has finished.
void RequestNewGRFScan(NewGRFScanCallback *callback)
Request a new NewGRF scan.
Wrapper for (un)resolved network addresses; there's no reason to transform a numeric IP to a string a...
RailTypeFlags flags
Bit mask of rail type flags.
static T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
Callback profiler for NewGRF development.
void IConsoleListSettings(const char *prefilter)
List all settings and their value to the console.
bool MakeScreenshot(ScreenshotType t, const char *name, uint32 width, uint32 height)
Make a screenshot.
@ SC_WORLD
World screenshot.
@ CC_ARMOURED
Armoured cargo (Valuables, Gold, Diamonds)
static size_t GetNumItems()
Returns number of valid items in the pool.
static TileIndex TileXY(uint x, uint y)
Returns the TileIndex of a coordinate.
RoadTypeLabel label
Unique 32 bit road type identifier.
char *CDECL str_fmt(const char *str,...)
Format, "printf", into a newly allocated string.
uint8 map_x
X size of map.
IConsoleAlias * next
next alias in list
@ AUTOSELECTED
The content has been selected as dependency.
@ COMPANY_SPECTATOR
The client is spectating.
@ RAILTYPE_END
Used for iterations.
@ CC_REFRIGERATED
Refrigerated cargo (Food, Fruit)
DEF_CONSOLE_CMD(ConResetEngines)
Reset status of all engines.
@ WC_CONSOLE
Console; Window numbers:
const char * GetDebugString()
Print out the current debug-level.
static void PrintLineByLine(char *buf)
Print a text buffer line by line to the console.
FileToSaveLoad _file_to_saveload
File to save or load in the openttd loop.
void NetworkServerSendChat(NetworkAction action, DestType type, int dest, const char *msg, ClientID from_id, int64 data=0, bool from_admin=false)
Send an actual chat message.
uint NetworkServerKickOrBanIP(ClientID client_id, bool ban, const char *reason)
Ban, or kick, everyone joined from the given client's IP.
@ PM_PAUSED_NORMAL
A game normally paused.
–Aliases– Aliases are like shortcuts for complex functions, variable assignments, etc.
uint16 classes
Classes of this cargo type.
@ NUM_CARGO
Maximal number of cargo types in a game.
@ RTF_ALLOW_90DEG
Bit number for always allowed 90 degree turns, regardless of setting.
RailTypeLabel label
Unique 32 bit rail type identifier.
char * name
name of command
static ContentType StringToContentType(const char *str)
Resolve a string to a content type.
IConsoleCmd * next
next command in list
static const RoadTypeInfo * GetRoadTypeInfo(RoadType roadtype)
Returns a pointer to the Roadtype information for a given roadtype.
int CDECL seprintf(char *str, const char *last, const char *format,...)
Safer implementation of snprintf; same as snprintf except:
void Select(ContentID cid)
Select a specific content id.
StringID name
Name of this type of cargo.
@ SC_DEFAULTZOOM
Zoomed to default zoom level screenshot of the visible area.
struct RailtypeInfo::@41 strings
Strings associated with the rail type.
@ RTF_NO_SPRITE_COMBINE
Bit number for using non-combined junctions.
static const TextColour CC_ERROR
Colour for error lines.
@ SM_RELOADGAME
Reload the savegame / scenario / heightmap you started the game with.
@ SM_MENU
Switch to game intro menu.
@ CMD_COMPANY_CTRL
used in multiplayer to create a new companies etc.
void AddCallback(ContentCallback *cb)
Add a callback to this class.
char * stredup(const char *s, const char *last)
Create a duplicate of the given string.
static bool NetworkAvailable(bool echo)
Check network availability and inform in console about failure of detection.
@ CHR_DISALLOW
Disallow command execution.
void IConsoleGetSetting(const char *name, bool force_newgame)
Output value of a specific setting to the console.
const char * NetworkChangeCompanyPassword(CompanyID company_id, const char *password)
Change the company password of a given company.
State state
Whether the content info is selected (for download)
uint32 unique_id
Unique ID; either GRF ID or shortname.
@ CONTENT_TYPE_BEGIN
Helper to mark the begin of the types.
@ RTF_NO_LEVEL_CROSSING
Bit number for disallowing level crossings.
#define lengthof(x)
Return the length of an fixed size array.
Data structure to convert between Date and triplet (year, month, and day).
StringList _network_ban_list
The banned clients.
NetworkSettings network
settings related to the network
void IConsoleClose()
Close the in-game console.
@ SC_VIEWPORT
Screenshot of viewport.
byte CargoID
Cargo slots to indicate a cargo type within a game.
@ DESTTYPE_BROADCAST
Send message/notice to all clients (All)
void NetworkClientRequestMove(CompanyID company_id, const char *pass)
Notify the server of this client wanting to be moved to another company.
@ CHR_HIDE
Hide the existence of the command.
ContentID
Unique identifier for the content.
AbstractFileType GetAbstractFileType(FiosType fios_type)
Extract the abstract file type from a FiosType.
@ INVALID_COMPANY
An invalid company.
DEF_CONSOLE_HOOK(ConHookServerOnly)
Check whether we are a server.
void IConsoleCmdExec(const char *cmdstr, const uint recurse_count)
Execute a given command passed to us.
void Change(const char *name, int version=-1, bool force_exact_match=false, bool is_random=false)
Set another Script to be loaded in this slot.
void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *hook)
Register a new command to be used in the console.
void IConsoleAliasRegister(const char *name, const char *cmd)
Register a an alias for an already existing command in the console.
@ CCA_DELETE
Delete a company.
@ DESTTYPE_CLIENT
Send message/notice to only a certain client (Private)
char * md5sumToString(char *buf, const char *last, const uint8 md5sum[16])
Convert the md5sum to a hexadecimal string representation.
void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const char *msg, int64 data)
Send a chat message.
@ VEH_TRAIN
Train vehicle type.
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
char name[32]
Name of the content.
@ SC_MINIMAP
Minimap screenshot.
byte clients_on
Current count of clients on server.
bool _network_available
is network mode available?
void SelectUpgrade()
Select everything that's an update for something we've got.
static const TextColour CC_WARNING
Colour for warning lines.
static void free(const void *ptr)
Version of the standard free that accepts const pointers.
void SetMode(FiosType ft)
Set the mode and file type of the file to save or load based on the type of file entry at the file sy...
ContentID id
Unique (server side) ID for the content.
void IConsoleWarning(const char *string)
It is possible to print warnings to the console.
static void Rescan()
Rescans all searchpaths for available AIs.
@ VEH_SHIP
Ship vehicle type.
@ PM_PAUSED_ERROR
A game paused because a (critical) error.
static const TextColour CC_WHITE
White console lines for various things such as the welcome.
#define lastof(x)
Get the last element of an fixed size array.
@ SL_OK
completed successfully
static char * GetConsoleLibraryList(char *p, const char *last)
Wrapper function for GameScanner::GetConsoleLibraryList.
Container for all information known about a client.
bool HasScript() const
Is this config attached to an Script? In other words, is there a Script that is assigned to this slot...
@ CONTENT_TYPE_END
Helper to mark the end of the types.
void CDECL IConsolePrintF(TextColour colour_code, const char *format,...)
Handle the printing of text entered into the console or redirected there by any other means.
uint8 FindFirstBit(uint32 x)
Search the first set bit in a 32 bit variable.
bool ai_in_multiplayer
so we allow AIs in multiplayer
static char * GetConsoleList(char *p, const char *last, bool newest_only=false)
Wrapper function for GameScanner::GetConsoleList.
Dynamic data of a loaded NewGRF.
GUISettings gui
settings related to the GUI
void FioFCloseFile(FILE *f)
Close a file in a safe way.
size_t Length() const
Get the number of files in the list.
ConstContentIterator Begin() const
Get the begin of the content inf iterator.
uint8 max_companies
maximum amount of companies
@ SM_RESTARTGAME
Restart --> 'Random game' with current settings.
@ RAILTYPE_BEGIN
Used for iterations.