OpenTTD Source  20241121-master-g67a0fccfad
console_cmds.cpp File Reference

Implementation of the console hooks. More...

#include "stdafx.h"
#include "console_internal.h"
#include "debug.h"
#include "engine_func.h"
#include "landscape.h"
#include "saveload/saveload.h"
#include "network/core/network_game_info.h"
#include "network/network.h"
#include "network/network_func.h"
#include "network/network_base.h"
#include "network/network_admin.h"
#include "network/network_client.h"
#include "command_func.h"
#include "settings_func.h"
#include "fios.h"
#include "fileio_func.h"
#include "fontcache.h"
#include "screenshot.h"
#include "genworld.h"
#include "strings_func.h"
#include "viewport_func.h"
#include "window_func.h"
#include "timer/timer.h"
#include "company_func.h"
#include "gamelog.h"
#include "ai/ai.hpp"
#include "ai/ai_config.hpp"
#include "newgrf.h"
#include "newgrf_profiling.h"
#include "console_func.h"
#include "engine_base.h"
#include "road.h"
#include "rail.h"
#include "game/game.hpp"
#include "table/strings.h"
#include "3rdparty/fmt/chrono.h"
#include "company_cmd.h"
#include "misc_cmd.h"
#include <sstream>
#include "safeguards.h"
#include "network/network_content.h"

Go to the source code of this file.

Data Structures

class  ConsoleFileList
 File list storage for the console, for caching the last 'ls' command. More...
 
struct  ConsoleContentCallback
 Asynchronous callback. More...
 

Macros

#define DEF_CONSOLE_CMD(function)   static bool function([[maybe_unused]] uint8_t argc, [[maybe_unused]] char *argv[])
 
#define DEF_CONSOLE_HOOK(function)   static ConsoleHookResult function(bool echo)
 

Enumerations

enum  ConNetworkAuthorizedKeyAction { CNAKA_LIST , CNAKA_ADD , CNAKA_REMOVE }
 

Functions

static bool NetworkAvailable (bool echo)
 Check network availability and inform in console about failure of detection. More...
 
 DEF_CONSOLE_HOOK (ConHookServerOnly)
 Check whether we are a server. More...
 
 DEF_CONSOLE_HOOK (ConHookClientOnly)
 Check whether we are a client in a network game. More...
 
 DEF_CONSOLE_HOOK (ConHookNeedNetwork)
 Check whether we are in a multiplayer game. More...
 
 DEF_CONSOLE_HOOK (ConHookNeedNonDedicatedNetwork)
 Check whether we are in a multiplayer game and are playing, i.e. More...
 
 DEF_CONSOLE_HOOK (ConHookNoNetwork)
 Check whether we are in singleplayer mode. More...
 
 DEF_CONSOLE_HOOK (ConHookServerOrNoNetwork)
 Check if are either in singleplayer or a server. More...
 
 DEF_CONSOLE_HOOK (ConHookNewGRFDeveloperTool)
 
 DEF_CONSOLE_CMD (ConResetEngines)
 Reset status of all engines. More...
 
 DEF_CONSOLE_CMD (ConResetEnginePool)
 Reset status of the engine pool. More...
 
 DEF_CONSOLE_CMD (ConZoomToLevel)
 Zoom map to given level. More...
 
 DEF_CONSOLE_CMD (ConScrollToTile)
 Scroll to a tile on the map. More...
 
 DEF_CONSOLE_CMD (ConSave)
 Save the map to a file. More...
 
 DEF_CONSOLE_CMD (ConSaveConfig)
 Explicitly save the configuration. More...
 
 DEF_CONSOLE_CMD (ConLoad)
 
 DEF_CONSOLE_CMD (ConLoadScenario)
 
 DEF_CONSOLE_CMD (ConLoadHeightmap)
 
 DEF_CONSOLE_CMD (ConRemove)
 
 DEF_CONSOLE_CMD (ConListFiles)
 
 DEF_CONSOLE_CMD (ConListScenarios)
 
 DEF_CONSOLE_CMD (ConListHeightmaps)
 
 DEF_CONSOLE_CMD (ConChangeDirectory)
 
 DEF_CONSOLE_CMD (ConPrintWorkingDirectory)
 
 DEF_CONSOLE_CMD (ConClearBuffer)
 
static bool ConKickOrBan (const char *argv, bool ban, const std::string &reason)
 
 DEF_CONSOLE_CMD (ConKick)
 
 DEF_CONSOLE_CMD (ConBan)
 
 DEF_CONSOLE_CMD (ConUnBan)
 
 DEF_CONSOLE_CMD (ConBanList)
 
 DEF_CONSOLE_CMD (ConPauseGame)
 
 DEF_CONSOLE_CMD (ConUnpauseGame)
 
 DEF_CONSOLE_CMD (ConRcon)
 
 DEF_CONSOLE_CMD (ConStatus)
 
 DEF_CONSOLE_CMD (ConServerInfo)
 
 DEF_CONSOLE_CMD (ConClientNickChange)
 
 DEF_CONSOLE_CMD (ConJoinCompany)
 
 DEF_CONSOLE_CMD (ConMoveClient)
 
 DEF_CONSOLE_CMD (ConResetCompany)
 
 DEF_CONSOLE_CMD (ConNetworkClients)
 
 DEF_CONSOLE_CMD (ConNetworkReconnect)
 
 DEF_CONSOLE_CMD (ConNetworkConnect)
 
 DEF_CONSOLE_CMD (ConExec)
 
 DEF_CONSOLE_CMD (ConSchedule)
 
 DEF_CONSOLE_CMD (ConReturn)
 
bool CloseConsoleLogIfActive ()
 
const std::vector< GRFFile * > & GetAllGRFFiles ()
 
void ConPrintFramerate ()
 Print performance statistics to game console.
 
void ShowFramerateWindow ()
 Open the general framerate window.
 
 DEF_CONSOLE_CMD (ConScript)
 
 DEF_CONSOLE_CMD (ConEcho)
 
 DEF_CONSOLE_CMD (ConEchoC)
 
 DEF_CONSOLE_CMD (ConNewGame)
 
 DEF_CONSOLE_CMD (ConRestart)
 
 DEF_CONSOLE_CMD (ConReload)
 
static void PrintLineByLine (const std::string &full_string)
 Print a text buffer line by line to the console. More...
 
template<typename F , typename ... Args>
bool PrintList (F list_function, Args... args)
 
 DEF_CONSOLE_CMD (ConListAILibs)
 
 DEF_CONSOLE_CMD (ConListAI)
 
 DEF_CONSOLE_CMD (ConListGameLibs)
 
 DEF_CONSOLE_CMD (ConListGame)
 
 DEF_CONSOLE_CMD (ConStartAI)
 
 DEF_CONSOLE_CMD (ConReloadAI)
 
 DEF_CONSOLE_CMD (ConStopAI)
 
 DEF_CONSOLE_CMD (ConRescanAI)
 
 DEF_CONSOLE_CMD (ConRescanGame)
 
 DEF_CONSOLE_CMD (ConRescanNewGRF)
 
 DEF_CONSOLE_CMD (ConGetSeed)
 
 DEF_CONSOLE_CMD (ConGetDate)
 
 DEF_CONSOLE_CMD (ConGetSysDate)
 
 DEF_CONSOLE_CMD (ConAlias)
 
 DEF_CONSOLE_CMD (ConScreenShot)
 
 DEF_CONSOLE_CMD (ConInfoCmd)
 
 DEF_CONSOLE_CMD (ConDebugLevel)
 
 DEF_CONSOLE_CMD (ConExit)
 
 DEF_CONSOLE_CMD (ConPart)
 
 DEF_CONSOLE_CMD (ConHelp)
 
 DEF_CONSOLE_CMD (ConListCommands)
 
 DEF_CONSOLE_CMD (ConListAliases)
 
 DEF_CONSOLE_CMD (ConCompanies)
 
 DEF_CONSOLE_CMD (ConSay)
 
 DEF_CONSOLE_CMD (ConSayCompany)
 
 DEF_CONSOLE_CMD (ConSayClient)
 
static void PerformNetworkAuthorizedKeyAction (std::string_view name, NetworkAuthorizedKeys *authorized_keys, ConNetworkAuthorizedKeyAction action, const std::string &authorized_key, CompanyID company=INVALID_COMPANY)
 
 DEF_CONSOLE_CMD (ConNetworkAuthorizedKey)
 
static ContentType StringToContentType (const char *str)
 Resolve a string to a content type.
 
static void OutputContentState (const ContentInfo *const ci)
 Outputs content state information to console. More...
 
 DEF_CONSOLE_CMD (ConContent)
 
 DEF_CONSOLE_CMD (ConFont)
 
 DEF_CONSOLE_CMD (ConSetting)
 
 DEF_CONSOLE_CMD (ConSettingNewgame)
 
 DEF_CONSOLE_CMD (ConListSettings)
 
 DEF_CONSOLE_CMD (ConGamelogPrint)
 
 DEF_CONSOLE_CMD (ConNewGRFReload)
 
 DEF_CONSOLE_CMD (ConListDirs)
 
 DEF_CONSOLE_CMD (ConNewGRFProfile)
 
 DEF_CONSOLE_CMD (ConFramerate)
 
 DEF_CONSOLE_CMD (ConFramerateWindow)
 
static std::string FormatLabel (uint32_t label)
 Format a label as a string. More...
 
static void ConDumpRoadTypes ()
 
static void ConDumpRailTypes ()
 
static void ConDumpCargoTypes ()
 
 DEF_CONSOLE_CMD (ConDumpInfo)
 
void IConsoleStdLibRegister ()
 

Variables

static uint _script_current_depth
 Depth of scripts running (used to abort execution when #ConReturn is encountered).
 
static std::string _scheduled_monthly_script
 Script scheduled to execute by the 'schedule' console command (empty if no script is scheduled).
 
static IntervalTimer< TimerGameCalendar_scheduled_monthly_timer
 Timer that runs every month of game time for the 'schedule' console command. More...
 
static ConsoleFileList _console_file_list_savegame {FT_SAVEGAME, true}
 File storage cache for savegames.
 
static ConsoleFileList _console_file_list_scenario {FT_SCENARIO, false}
 File storage cache for scenarios.
 
static ConsoleFileList _console_file_list_heightmap {FT_HEIGHTMAP, false}
 File storage cache for heightmaps.
 
static std::vector< std::pair< std::string_view, NetworkAuthorizedKeys * > > _console_cmd_authorized_keys
 All the known authorized keys with their name. More...
 

Detailed Description

Implementation of the console hooks.

Definition in file console_cmds.cpp.

Function Documentation

◆ DEF_CONSOLE_CMD() [1/7]

DEF_CONSOLE_CMD ( ConListDirs  )

< Index of subdirectory type

< UI name for the directory

< Whether only the default (first existing) directory for this is interesting

Definition at line 2365 of file console_cmds.cpp.

References AI_DIR, AI_LIBRARY_DIR, AUTOSAVE_DIR, BASESET_DIR, CC_HELP, GAME_DIR, GAME_LIBRARY_DIR, HEIGHTMAP_DIR, IConsolePrint(), NEWGRF_DIR, SAVE_DIR, SCENARIO_DIR, SCREENSHOT_DIR, SOCIAL_INTEGRATION_DIR, and StrEqualsIgnoreCase().

◆ DEF_CONSOLE_CMD() [2/7]

DEF_CONSOLE_CMD ( ConResetEnginePool  )

Reset status of the engine pool.

Returns
Will always return true.
Note
Resetting the pool only succeeds when there are no vehicles ingame.

Definition at line 249 of file console_cmds.cpp.

References CC_HELP, and IConsolePrint().

◆ DEF_CONSOLE_CMD() [3/7]

DEF_CONSOLE_CMD ( ConResetEngines  )

Reset status of all engines.

Returns
Will always succeed.

Definition at line 233 of file console_cmds.cpp.

References CC_HELP, IConsolePrint(), and StartupEngines().

◆ DEF_CONSOLE_CMD() [4/7]

DEF_CONSOLE_CMD ( ConSave  )

Save the map to a file.

param filename the filename to save the map to.

Returns
True when help was displayed or the file attempted to be saved.

Definition at line 413 of file console_cmds.cpp.

References CC_DEFAULT, CC_ERROR, CC_HELP, CC_INFO, DFT_GAME_FILE, IConsolePrint(), SAVE_DIR, SaveOrLoad(), SL_OK, and SLO_SAVE.

◆ DEF_CONSOLE_CMD() [5/7]

DEF_CONSOLE_CMD ( ConSaveConfig  )

Explicitly save the configuration.

Returns
True.

Definition at line 440 of file console_cmds.cpp.

References CC_DEFAULT, CC_HELP, IConsolePrint(), and SaveToConfig().

◆ DEF_CONSOLE_CMD() [6/7]

DEF_CONSOLE_CMD ( ConScrollToTile  )

Scroll to a tile on the map.

param x tile number or tile x coordinate. param y optional y coordinate.

Note
When only one argument is given it is interpreted as the tile number. When two arguments are given, they are interpreted as the tile's x and y coordinates.
Returns
True when either console help was shown or a proper amount of parameters given.

Definition at line 359 of file console_cmds.cpp.

References CC_HELP, and IConsolePrint().

◆ DEF_CONSOLE_CMD() [7/7]

DEF_CONSOLE_CMD ( ConZoomToLevel  )

Zoom map to given level.

param level As defined by ZoomLevel and as limited by zoom_min/zoom_max from GUISettings.

Returns
True when either console help was shown or a proper amount of parameters given.

Definition at line 300 of file console_cmds.cpp.

References _settings_client, CC_ERROR, CC_HELP, DoZoomInOutWindow(), GetArgumentInteger(), GetMainWindow(), ClientSettings::gui, IConsolePrint(), Window::viewport, Viewport::zoom, ZOOM_IN, ZOOM_LVL_MAX, ZOOM_LVL_MIN, GUISettings::zoom_max, GUISettings::zoom_min, and ZOOM_OUT.

◆ DEF_CONSOLE_HOOK() [1/6]

DEF_CONSOLE_HOOK ( ConHookClientOnly  )

Check whether we are a client in a network game.

Returns
Are we a client in a network game? True when yes, false otherwise.

Definition at line 150 of file console_cmds.cpp.

References _network_server, CC_ERROR, CHR_ALLOW, CHR_DISALLOW, IConsolePrint(), and NetworkAvailable().

◆ DEF_CONSOLE_HOOK() [2/6]

DEF_CONSOLE_HOOK ( ConHookNeedNetwork  )

Check whether we are in a multiplayer game.

Returns
True when we are client or server in a network game.

Definition at line 165 of file console_cmds.cpp.

References _network_server, _networking, CC_ERROR, CHR_ALLOW, CHR_DISALLOW, IConsolePrint(), ClientNetworkGameSocketHandler::IsConnected(), and NetworkAvailable().

◆ DEF_CONSOLE_HOOK() [3/6]

DEF_CONSOLE_HOOK ( ConHookNeedNonDedicatedNetwork  )

Check whether we are in a multiplayer game and are playing, i.e.

we are not the dedicated server.

Returns
Are we a client or non-dedicated server in a network game? True when yes, false otherwise.

Definition at line 180 of file console_cmds.cpp.

References _network_dedicated, CC_ERROR, CHR_ALLOW, CHR_DISALLOW, IConsolePrint(), and NetworkAvailable().

◆ DEF_CONSOLE_HOOK() [4/6]

DEF_CONSOLE_HOOK ( ConHookNoNetwork  )

Check whether we are in singleplayer mode.

Returns
True when no network is active.

Definition at line 195 of file console_cmds.cpp.

References _networking, CC_ERROR, CHR_ALLOW, CHR_DISALLOW, and IConsolePrint().

◆ DEF_CONSOLE_HOOK() [5/6]

DEF_CONSOLE_HOOK ( ConHookServerOnly  )

Check whether we are a server.

Returns
Are we a server? True when yes, false otherwise.

Definition at line 135 of file console_cmds.cpp.

References _network_server, CC_ERROR, CHR_ALLOW, CHR_DISALLOW, IConsolePrint(), and NetworkAvailable().

◆ DEF_CONSOLE_HOOK() [6/6]

DEF_CONSOLE_HOOK ( ConHookServerOrNoNetwork  )

Check if are either in singleplayer or a server.

Returns
True iff we are either in singleplayer or a server.

Definition at line 208 of file console_cmds.cpp.

References _network_server, _networking, CC_ERROR, CHR_ALLOW, CHR_DISALLOW, and IConsolePrint().

◆ FormatLabel()

static std::string FormatLabel ( uint32_t  label)
static

Format a label as a string.

If all elements are visible ASCII (excluding space) then the label will be formatted as a string of 4 characters, otherwise it will be output as an 8-digit hexadecimal value.

Parameters
labelLabel to format.
Returns
string representation of label.

Definition at line 2599 of file console_cmds.cpp.

References BSWAP32(), and GB().

◆ NetworkAvailable()

static bool NetworkAvailable ( bool  echo)
inlinestatic

Check network availability and inform in console about failure of detection.

Returns
Network availability.

Definition at line 122 of file console_cmds.cpp.

References _network_available, CC_ERROR, and IConsolePrint().

Referenced by DEF_CONSOLE_HOOK().

◆ OutputContentState()

static void OutputContentState ( const ContentInfo *const  ci)
static

◆ PrintLineByLine()

static void PrintLineByLine ( const std::string &  full_string)
static

Print a text buffer line by line to the console.

Lines are separated by '
'.

Parameters
full_stringThe multi-line string to print.

Definition at line 1327 of file console_cmds.cpp.

References CC_DEFAULT, and IConsolePrint().

Variable Documentation

◆ _console_cmd_authorized_keys

std::vector<std::pair<std::string_view, NetworkAuthorizedKeys *> > _console_cmd_authorized_keys
static
Initial value:
{
}
ClientSettings _settings_client
The current settings for this game.
Definition: settings.cpp:56
NetworkSettings network
settings related to the network
NetworkAuthorizedKeys admin_authorized_keys
Public keys of clients that are authorized to use the admin network.
NetworkAuthorizedKeys rcon_authorized_keys
Public keys of clients that are authorized to use the rconsole (server side).
NetworkAuthorizedKeys server_authorized_keys
Public keys of clients that are authorized to connect to the game.

All the known authorized keys with their name.

Definition at line 1956 of file console_cmds.cpp.

◆ _scheduled_monthly_timer

IntervalTimer<TimerGameCalendar> _scheduled_monthly_timer
static
Initial value:
= {{TimerGameCalendar::MONTH, TimerGameCalendar::Priority::NONE}, [](auto) {
return;
}
const std::string filename = _scheduled_monthly_script;
IConsolePrint(CC_DEFAULT, "Executing scheduled script file '{}'...", filename);
IConsoleCmdExec(std::string("exec") + " " + filename);
}}
void IConsoleCmdExec(const std::string &command_string, const uint recurse_count)
Execute a given command passed to us.
Definition: console.cpp:291
void IConsolePrint(TextColour colour_code, const std::string &string)
Handle the printing of text entered into the console or redirected there by any other means.
Definition: console.cpp:89
static std::string _scheduled_monthly_script
Script scheduled to execute by the 'schedule' console command (empty if no script is scheduled).
static const TextColour CC_DEFAULT
Default colour of the console.
Definition: console_type.h:23

Timer that runs every month of game time for the 'schedule' console command.

Definition at line 60 of file console_cmds.cpp.