2005-07-24 14:12:37 +00:00
/* $Id$ */
2009-08-21 20:21:05 +00:00
/*
* This file is part of OpenTTD .
* OpenTTD is free software ; you can redistribute it and / or modify it under the terms of the GNU General Public License as published by the Free Software Foundation , version 2.
* OpenTTD is distributed in the hope that it will be useful , but WITHOUT ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
* See the GNU General Public License for more details . You should have received a copy of the GNU General Public License along with OpenTTD . If not , see < http : //www.gnu.org/licenses/>.
*/
2008-05-06 15:11:33 +00:00
/** @file console_cmds.cpp Implementation of the console hooks. */
2007-02-23 11:50:43 +00:00
2004-09-12 21:49:38 +00:00
# include "stdafx.h"
2008-05-24 10:15:06 +00:00
# include "console_internal.h"
2005-02-05 15:58:59 +00:00
# include "debug.h"
2008-03-31 00:17:39 +00:00
# include "engine_func.h"
2007-04-12 13:07:15 +00:00
# include "landscape.h"
2009-01-04 15:32:25 +00:00
# include "saveload/saveload.h"
2008-05-30 18:20:26 +00:00
# include "network/network.h"
# include "network/network_func.h"
2008-12-23 11:06:52 +00:00
# include "network/network_base.h"
2007-12-21 21:50:46 +00:00
# include "command_func.h"
2008-01-07 00:19:09 +00:00
# include "settings_func.h"
2006-08-05 00:59:45 +00:00
# include "fios.h"
2008-08-31 10:50:05 +00:00
# include "fileio_func.h"
2006-07-28 21:51:00 +00:00
# include "screenshot.h"
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
- New optional landscape generator (TerraGenesis Perlin)
- Load heightmaps (either BMP or PNG)
- Progress dialog while generating worlds (no longer a 'hanging' screen)
- New dialogs for NewGame, Create Scenario and Play Heightmap
- Easier to configure your landscape
- More things to configure (tree-placer, ..)
- Speedup of world generation
- New console command 'restart': restart the map EXACTLY as it was when you
first started it (needs a game made after or with this commit)
- New console command 'getseed': get the seed of your map and share it with
others (of course only works with generated maps)
- Many new, world generation related, things
- Many internal cleanups and rewrites
Many tnx to those people who helped making this:
Belugas, DaleStan, glx, KUDr, RichK67, Rubidium, and TrueLight (alfabetic)
Many tnx to those who helped testing:
Arnau, Bjarni, and tokai (alfabetic)
And to all other people who helped testing and sending comments / bugs
Stats: 673 lines changed, 3534 new lines, 79 new strings
2006-08-19 10:00:30 +00:00
# include "genworld.h"
2007-12-21 19:49:27 +00:00
# include "strings_func.h"
2008-01-09 09:57:48 +00:00
# include "viewport_func.h"
2007-12-25 11:26:07 +00:00
# include "window_func.h"
2007-12-26 13:50:40 +00:00
# include "date_func.h"
2007-12-27 13:35:39 +00:00
# include "vehicle_func.h"
2008-09-30 20:51:04 +00:00
# include "company_func.h"
# include "company_base.h"
2008-06-03 18:35:58 +00:00
# include "gamelog.h"
2009-01-12 17:11:45 +00:00
# include "ai/ai.hpp"
# include "ai/ai_config.hpp"
2010-01-15 16:41:15 +00:00
# include "console_func.h"
2004-09-12 21:49:38 +00:00
2008-01-13 01:21:35 +00:00
# ifdef ENABLE_NETWORK
# include "table/strings.h"
# endif /* ENABLE_NETWORK */
2009-03-15 00:32:18 +00:00
/* scriptfile handling */
2005-05-02 15:52:19 +00:00
static FILE * _script_file ;
2004-09-14 16:10:20 +00:00
static bool _script_running ;
2009-03-15 00:32:18 +00:00
/* console command / variable defines */
2005-05-02 15:52:19 +00:00
# define DEF_CONSOLE_CMD(function) static bool function(byte argc, char *argv[])
2007-03-07 11:47:46 +00:00
# define DEF_CONSOLE_HOOK(function) static bool function()
2004-09-12 21:49:38 +00:00
2004-09-14 16:10:20 +00:00
2009-03-15 00:32:18 +00:00
/*****************************
* variable and command hooks
* * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2004-09-12 21:49:38 +00:00
2004-12-04 17:54:56 +00:00
# ifdef ENABLE_NETWORK
2007-03-07 11:47:46 +00:00
static inline bool NetworkAvailable ( )
2004-09-12 21:49:38 +00:00
{
2005-05-02 15:52:19 +00:00
if ( ! _network_available ) {
IConsoleError ( " You cannot use this command because there is no network available. " ) ;
2004-09-12 21:49:38 +00:00
return false ;
2004-09-19 15:24:45 +00:00
}
2004-09-12 21:49:38 +00:00
return true ;
}
2005-05-02 15:52:19 +00:00
DEF_CONSOLE_HOOK ( ConHookServerOnly )
2004-09-12 21:49:38 +00:00
{
2005-05-02 15:52:19 +00:00
if ( ! NetworkAvailable ( ) ) return false ;
2004-12-04 17:54:56 +00:00
if ( ! _network_server ) {
2005-05-11 15:30:28 +00:00
IConsoleError ( " This command/variable is only available to a network server. " ) ;
2004-09-12 21:49:38 +00:00
return false ;
2004-09-19 15:24:45 +00:00
}
2004-09-12 21:49:38 +00:00
return true ;
}
2005-05-02 15:52:19 +00:00
DEF_CONSOLE_HOOK ( ConHookClientOnly )
2004-09-12 21:49:38 +00:00
{
2005-05-02 15:52:19 +00:00
if ( ! NetworkAvailable ( ) ) return false ;
if ( _network_server ) {
2005-05-11 15:30:28 +00:00
IConsoleError ( " This command/variable is not available to a network server. " ) ;
2004-12-04 17:54:56 +00:00
return false ;
}
return true ;
}
2005-05-02 15:52:19 +00:00
DEF_CONSOLE_HOOK ( ConHookNeedNetwork )
2004-12-04 17:54:56 +00:00
{
2005-05-02 15:52:19 +00:00
if ( ! NetworkAvailable ( ) ) return false ;
if ( ! _networking ) {
2005-05-11 15:30:28 +00:00
IConsoleError ( " Not connected. This command/variable is only available in multiplayer. " ) ;
2004-09-12 21:49:38 +00:00
return false ;
2004-09-19 15:24:45 +00:00
}
2004-09-12 21:49:38 +00:00
return true ;
}
2005-05-02 15:52:19 +00:00
DEF_CONSOLE_HOOK ( ConHookNoNetwork )
2004-12-04 17:54:56 +00:00
{
2005-05-02 15:52:19 +00:00
if ( _networking ) {
2005-05-11 15:30:28 +00:00
IConsoleError ( " This command/variable is forbidden in multiplayer. " ) ;
2004-12-04 17:54:56 +00:00
return false ;
}
return true ;
}
# endif /* ENABLE_NETWORK */
2005-05-02 15:52:19 +00:00
static void IConsoleHelp ( const char * str )
{
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_WARNING , " - %s " , str ) ;
2005-05-02 15:52:19 +00:00
}
2004-09-12 21:49:38 +00:00
DEF_CONSOLE_CMD ( ConResetEngines )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Reset status data of all engines. This might solve some issues with 'lost' engines. Usage: 'resetengines' " ) ;
return true ;
}
2004-09-12 21:49:38 +00:00
StartupEngines ( ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
2004-09-19 15:24:45 +00:00
# ifdef _DEBUG
2004-09-12 21:49:38 +00:00
DEF_CONSOLE_CMD ( ConResetTile )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Reset a tile to bare land. Usage: 'resettile <tile>' " ) ;
IConsoleHelp ( " Tile can be either decimal (34161) or hexadecimal (0x4a5B) " ) ;
return true ;
}
2004-09-12 21:49:38 +00:00
if ( argc = = 2 ) {
2005-05-02 15:52:19 +00:00
uint32 result ;
if ( GetArgumentInteger ( & result , argv [ 1 ] ) ) {
DoClearSquare ( ( TileIndex ) result ) ;
return true ;
}
2004-09-12 21:49:38 +00:00
}
2005-05-02 15:52:19 +00:00
return false ;
2004-09-12 21:49:38 +00:00
}
2006-04-23 22:06:52 +00:00
DEF_CONSOLE_CMD ( ConStopAllVehicles )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Stops all vehicles in the game. For debugging only! Use at your own risk... Usage: 'stopall' " ) ;
return true ;
}
2007-12-27 13:35:39 +00:00
StopAllVehicles ( ) ;
2006-04-23 22:06:52 +00:00
return true ;
}
2005-05-02 16:00:49 +00:00
# endif /* _DEBUG */
2004-09-12 21:49:38 +00:00
DEF_CONSOLE_CMD ( ConScrollToTile )
{
2009-05-26 13:16:58 +00:00
switch ( argc ) {
case 0 :
IConsoleHelp ( " Center the screen on a given tile. " ) ;
IConsoleHelp ( " Usage: 'scrollto <tile>' or 'scrollto <x> <y>' " ) ;
IConsoleHelp ( " Numbers can be either decimal (34161) or hexadecimal (0x4a5B). " ) ;
return true ;
2005-05-02 15:52:19 +00:00
2009-05-26 13:16:58 +00:00
case 2 : {
uint32 result ;
if ( GetArgumentInteger ( & result , argv [ 1 ] ) ) {
if ( result > = MapSize ( ) ) {
IConsolePrint ( CC_ERROR , " Tile does not exist " ) ;
return true ;
}
ScrollMainWindowToTile ( ( TileIndex ) result ) ;
2006-09-09 22:15:19 +00:00
return true ;
}
2009-05-26 13:16:58 +00:00
break ;
}
case 3 : {
uint32 x , y ;
if ( GetArgumentInteger ( & x , argv [ 1 ] ) & & GetArgumentInteger ( & y , argv [ 2 ] ) ) {
if ( x > = MapSizeX ( ) | | y > = MapSizeY ( ) ) {
IConsolePrint ( CC_ERROR , " Tile does not exist " ) ;
return true ;
}
ScrollMainWindowToTile ( TileXY ( x , y ) ) ;
return true ;
}
break ;
2005-05-02 15:52:19 +00:00
}
2004-09-12 21:49:38 +00:00
}
2005-05-02 15:52:19 +00:00
return false ;
2004-09-12 21:49:38 +00:00
}
2007-03-07 11:47:46 +00:00
extern void BuildFileList ( ) ;
2005-01-04 15:06:08 +00:00
extern void SetFiosType ( const byte fiostype ) ;
2005-03-25 18:26:49 +00:00
/* Save the map to a file */
DEF_CONSOLE_CMD ( ConSave )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Save the current game. Usage: 'save <filename>' " ) ;
return true ;
}
2005-03-25 18:26:49 +00:00
if ( argc = = 2 ) {
2007-06-17 15:48:57 +00:00
char * filename = str_fmt ( " %s.sav " , argv [ 1 ] ) ;
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , " Saving map... " ) ;
2005-05-02 15:52:19 +00:00
2007-06-17 15:48:57 +00:00
if ( SaveOrLoad ( filename , SL_SAVE , SAVE_DIR ) ! = SL_OK ) {
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_ERROR , " Saving map failed " ) ;
2006-06-27 21:25:53 +00:00
} else {
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " Map sucessfully saved to %s " , filename ) ;
2006-06-27 21:25:53 +00:00
}
2007-06-17 15:48:57 +00:00
free ( filename ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-03-25 18:26:49 +00:00
}
2005-05-02 15:52:19 +00:00
return false ;
2005-03-25 18:26:49 +00:00
}
2007-01-03 18:06:50 +00:00
/* Explicitly save the configuration */
DEF_CONSOLE_CMD ( ConSaveConfig )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Saves the current config, typically to 'openttd.cfg'. " ) ;
return true ;
}
SaveToConfig ( ) ;
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , " Saved config. " ) ;
2007-01-03 18:06:50 +00:00
return true ;
}
2009-01-10 00:31:47 +00:00
static const FiosItem * GetFiosItem ( const char * file )
2005-01-04 15:06:08 +00:00
{
2005-05-13 17:05:03 +00:00
_saveload_mode = SLD_LOAD_GAME ;
2005-03-27 12:48:25 +00:00
BuildFileList ( ) ;
2005-01-04 15:06:08 +00:00
2008-06-02 14:19:27 +00:00
for ( const FiosItem * item = _fios_items . Begin ( ) ; item ! = _fios_items . End ( ) ; item + + ) {
if ( strcmp ( file , item - > name ) = = 0 ) return item ;
if ( strcmp ( file , item - > title ) = = 0 ) return item ;
2005-03-27 12:48:25 +00:00
}
2005-01-04 15:06:08 +00:00
2008-06-02 14:19:27 +00:00
/* If no name matches, try to parse it as number */
char * endptr ;
int i = strtol ( file , & endptr , 10 ) ;
if ( file = = endptr | | * endptr ! = ' \0 ' ) i = - 1 ;
2005-01-04 15:06:08 +00:00
2008-06-02 14:19:27 +00:00
return IsInsideMM ( i , 0 , _fios_items . Length ( ) ) ? _fios_items . Get ( i ) : NULL ;
2005-01-04 15:06:08 +00:00
}
2005-03-27 12:48:25 +00:00
2005-01-04 15:06:08 +00:00
DEF_CONSOLE_CMD ( ConLoad )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2005-10-19 19:44:01 +00:00
IConsoleHelp ( " Load a game by name or index. Usage: 'load <file | number>' " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-01-04 15:06:08 +00:00
}
2005-05-02 15:52:19 +00:00
if ( argc ! = 2 ) return false ;
2008-06-02 14:19:27 +00:00
const char * file = argv [ 1 ] ;
const FiosItem * item = GetFiosItem ( file ) ;
2005-03-27 12:48:25 +00:00
if ( item ! = NULL ) {
switch ( item - > type ) {
2005-07-17 15:58:47 +00:00
case FIOS_TYPE_FILE : case FIOS_TYPE_OLDFILE : {
2005-03-27 12:48:25 +00:00
_switch_mode = SM_LOAD ;
SetFiosType ( item - > type ) ;
2005-07-17 15:58:47 +00:00
2008-11-02 11:20:15 +00:00
strecpy ( _file_to_saveload . name , FiosBrowseTo ( item ) , lastof ( _file_to_saveload . name ) ) ;
strecpy ( _file_to_saveload . title , item - > title , lastof ( _file_to_saveload . title ) ) ;
2005-07-17 15:58:47 +00:00
} break ;
2008-05-24 10:35:15 +00:00
default : IConsolePrintF ( CC_ERROR , " %s: Not a savegame. " , file ) ;
2005-03-27 12:48:25 +00:00
}
2006-06-27 21:25:53 +00:00
} else {
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_ERROR , " %s: No such file or directory. " , file ) ;
2006-06-27 21:25:53 +00:00
}
2005-01-04 15:06:08 +00:00
FiosFreeSavegameList ( ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-01-04 15:06:08 +00:00
}
2005-09-11 14:57:56 +00:00
DEF_CONSOLE_CMD ( ConRemove )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Remove a savegame by name or index. Usage: 'rm <file | number>' " ) ;
return true ;
}
if ( argc ! = 2 ) return false ;
2008-06-02 14:19:27 +00:00
const char * file = argv [ 1 ] ;
const FiosItem * item = GetFiosItem ( file ) ;
2005-09-11 14:57:56 +00:00
if ( item ! = NULL ) {
if ( ! FiosDelete ( item - > name ) )
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_ERROR , " %s: Failed to delete file " , file ) ;
2006-06-27 21:25:53 +00:00
} else {
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_ERROR , " %s: No such file or directory. " , file ) ;
2006-06-27 21:25:53 +00:00
}
2005-09-11 14:57:56 +00:00
FiosFreeSavegameList ( ) ;
return true ;
}
2005-03-27 12:48:25 +00:00
/* List all the files in the current dir via console */
DEF_CONSOLE_CMD ( ConListFiles )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2005-10-19 19:44:01 +00:00
IConsoleHelp ( " List all loadable savegames and directories in the current dir via console. Usage: 'ls | dir' " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2005-01-08 00:48:10 +00:00
BuildFileList ( ) ;
2008-06-02 14:19:27 +00:00
for ( uint i = 0 ; i < _fios_items . Length ( ) ; i + + ) {
IConsolePrintF ( CC_DEFAULT , " %d) %s " , i , _fios_items [ i ] . title ) ;
2005-01-08 00:48:10 +00:00
}
FiosFreeSavegameList ( ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-01-08 00:48:10 +00:00
}
2005-01-04 15:06:08 +00:00
/* Change the dir via console */
2005-03-27 12:48:25 +00:00
DEF_CONSOLE_CMD ( ConChangeDirectory )
2005-01-04 15:06:08 +00:00
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2005-10-19 19:44:01 +00:00
IConsoleHelp ( " Change the dir via console. Usage: 'cd <directory | number>' " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-01-04 15:06:08 +00:00
}
2005-05-02 15:52:19 +00:00
if ( argc ! = 2 ) return false ;
2008-06-02 14:19:27 +00:00
const char * file = argv [ 1 ] ;
const FiosItem * item = GetFiosItem ( file ) ;
2005-03-27 12:48:25 +00:00
if ( item ! = NULL ) {
switch ( item - > type ) {
2005-05-02 15:52:19 +00:00
case FIOS_TYPE_DIR : case FIOS_TYPE_DRIVE : case FIOS_TYPE_PARENT :
2005-03-27 12:48:25 +00:00
FiosBrowseTo ( item ) ;
break ;
2008-05-24 10:35:15 +00:00
default : IConsolePrintF ( CC_ERROR , " %s: Not a directory. " , file ) ;
2005-01-04 15:06:08 +00:00
}
2006-06-27 21:25:53 +00:00
} else {
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_ERROR , " %s: No such file or directory. " , file ) ;
2006-06-27 21:25:53 +00:00
}
2005-01-04 15:06:08 +00:00
2005-03-27 12:48:25 +00:00
FiosFreeSavegameList ( ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-03-27 12:48:25 +00:00
}
DEF_CONSOLE_CMD ( ConPrintWorkingDirectory )
{
2005-05-02 15:52:19 +00:00
const char * path ;
if ( argc = = 0 ) {
IConsoleHelp ( " Print out the current working directory. Usage: 'pwd' " ) ;
return true ;
}
2005-03-27 12:48:25 +00:00
2009-03-15 00:32:18 +00:00
/* XXX - Workaround for broken file handling */
2006-08-05 00:59:45 +00:00
FiosGetSavegameList ( SLD_LOAD_GAME ) ;
2005-01-04 15:06:08 +00:00
FiosFreeSavegameList ( ) ;
2005-03-28 13:30:51 +00:00
FiosGetDescText ( & path , NULL ) ;
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , path ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-01-04 15:06:08 +00:00
}
2005-05-16 13:46:26 +00:00
DEF_CONSOLE_CMD ( ConClearBuffer )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Clear the console buffer. Usage: 'clear' " ) ;
return true ;
}
IConsoleClearBuffer ( ) ;
2009-09-13 19:15:59 +00:00
SetWindowDirty ( WC_CONSOLE , 0 ) ;
2005-05-16 13:46:26 +00:00
return true ;
}
2004-12-04 17:54:56 +00:00
2009-03-15 00:32:18 +00:00
/**********************************
* Network Core Console Commands
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2004-09-12 21:49:38 +00:00
# ifdef ENABLE_NETWORK
2005-01-02 12:03:43 +00:00
DEF_CONSOLE_CMD ( ConBan )
{
NetworkClientInfo * ci ;
2006-01-29 18:04:52 +00:00
const char * banip = NULL ;
2008-12-22 12:59:31 +00:00
ClientID client_id ;
2005-01-02 12:03:43 +00:00
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2008-09-30 20:39:50 +00:00
IConsoleHelp ( " Ban a client from a network game. Usage: 'ban <ip | client-id>' " ) ;
2005-05-02 15:52:19 +00:00
IConsoleHelp ( " For client-id's, see the command 'clients' " ) ;
2006-01-29 18:04:52 +00:00
IConsoleHelp ( " If the client is no longer online, you can still ban his/her IP " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2005-01-02 12:03:43 +00:00
2005-05-02 15:52:19 +00:00
if ( argc ! = 2 ) return false ;
2005-01-02 12:03:43 +00:00
2009-04-04 00:48:48 +00:00
if ( strchr ( argv [ 1 ] , ' . ' ) = = NULL & & strchr ( argv [ 1 ] , ' : ' ) = = NULL ) { // banning with ID
2008-12-22 12:59:31 +00:00
client_id = ( ClientID ) atoi ( argv [ 1 ] ) ;
2008-12-22 21:30:21 +00:00
ci = NetworkFindClientInfoFromClientID ( client_id ) ;
2006-01-29 18:04:52 +00:00
} else { // banning IP
2006-01-19 16:12:24 +00:00
ci = NetworkFindClientInfoFromIP ( argv [ 1 ] ) ;
2006-01-29 18:04:52 +00:00
if ( ci = = NULL ) {
banip = argv [ 1 ] ;
2008-12-22 12:59:31 +00:00
client_id = ( ClientID ) - 1 ;
2006-01-29 18:04:52 +00:00
} else {
2008-12-22 12:59:31 +00:00
client_id = ci - > client_id ;
2006-01-29 18:04:52 +00:00
}
2006-01-19 15:58:57 +00:00
}
2005-01-02 12:03:43 +00:00
2008-12-22 12:59:31 +00:00
if ( client_id = = CLIENT_ID_SERVER ) {
2006-01-25 18:11:06 +00:00
IConsoleError ( " Silly boy, you can not ban yourself! " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2006-01-19 15:58:57 +00:00
2008-12-22 12:59:31 +00:00
if ( client_id = = INVALID_CLIENT_ID | | ( ci = = NULL & & client_id ! = ( ClientID ) - 1 ) ) {
2006-01-19 16:12:24 +00:00
IConsoleError ( " Invalid client " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-01-02 12:03:43 +00:00
}
2005-05-02 15:52:19 +00:00
if ( ci ! = NULL ) {
2008-06-30 14:48:44 +00:00
IConsolePrint ( CC_DEFAULT , " Client banned " ) ;
2008-09-30 20:39:50 +00:00
banip = GetClientIP ( ci ) ;
2006-06-27 21:25:53 +00:00
} else {
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , " Client not online, banned IP " ) ;
2006-06-27 21:25:53 +00:00
}
2006-01-29 18:04:52 +00:00
2009-03-06 12:42:01 +00:00
NetworkServerBanIP ( banip ) ;
2005-01-02 12:03:43 +00:00
2005-05-02 15:52:19 +00:00
return true ;
}
DEF_CONSOLE_CMD ( ConUnBan )
{
if ( argc = = 0 ) {
2008-09-30 20:39:50 +00:00
IConsoleHelp ( " Unban a client from a network game. Usage: 'unban <ip | client-id>' " ) ;
2005-10-19 19:38:35 +00:00
IConsoleHelp ( " For a list of banned IP's, see the command 'banlist' " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-01-02 12:03:43 +00:00
}
2005-05-02 15:52:19 +00:00
if ( argc ! = 2 ) return false ;
2009-04-03 12:49:58 +00:00
uint index = ( strchr ( argv [ 1 ] , ' . ' ) = = NULL ) ? atoi ( argv [ 1 ] ) : 0 ;
2005-10-19 19:38:35 +00:00
index - - ;
2009-04-03 12:49:58 +00:00
uint i = 0 ;
2005-10-19 19:38:35 +00:00
2009-04-03 12:49:58 +00:00
for ( char * * iter = _network_ban_list . Begin ( ) ; iter ! = _network_ban_list . End ( ) ; iter + + , i + + ) {
2006-06-14 12:30:31 +00:00
if ( strcmp ( _network_ban_list [ i ] , argv [ 1 ] ) = = 0 | | index = = i ) {
2006-01-29 18:04:52 +00:00
free ( _network_ban_list [ i ] ) ;
2009-04-03 12:49:58 +00:00
_network_ban_list . Erase ( iter ) ;
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , " IP unbanned. " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
}
2005-01-02 12:03:43 +00:00
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , " IP not in ban-list. " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2005-01-02 12:03:43 +00:00
}
DEF_CONSOLE_CMD ( ConBanList )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " List the IP's of banned clients: Usage 'banlist' " ) ;
return true ;
}
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , " Banlist: " ) ;
2005-01-02 12:03:43 +00:00
2009-04-03 12:49:58 +00:00
uint i = 1 ;
for ( char * * iter = _network_ban_list . Begin ( ) ; iter ! = _network_ban_list . End ( ) ; iter + + , i + + ) {
IConsolePrintF ( CC_DEFAULT , " %d) %s " , i , * iter ) ;
2005-01-02 12:03:43 +00:00
}
2005-05-02 15:52:19 +00:00
return true ;
2005-01-02 12:03:43 +00:00
}
2005-01-24 21:33:44 +00:00
DEF_CONSOLE_CMD ( ConPauseGame )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Pause a network game. Usage: 'pause' " ) ;
return true ;
}
2009-11-12 20:38:52 +00:00
if ( ( _pause_mode & PM_PAUSED_NORMAL ) = = PM_UNPAUSED ) {
2009-05-06 15:06:57 +00:00
DoCommandP ( 0 , PM_PAUSED_NORMAL , 1 , CMD_PAUSE ) ;
2009-11-12 20:38:52 +00:00
if ( ! _networking ) IConsolePrint ( CC_DEFAULT , " Game paused. " ) ;
2006-06-27 21:25:53 +00:00
} else {
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , " Game is already paused. " ) ;
2006-06-27 21:25:53 +00:00
}
2005-01-24 21:33:44 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2005-01-24 21:33:44 +00:00
}
DEF_CONSOLE_CMD ( ConUnPauseGame )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Unpause a network game. Usage: 'unpause' " ) ;
return true ;
}
2009-11-12 20:38:52 +00:00
if ( ( _pause_mode & PM_PAUSED_NORMAL ) ! = PM_UNPAUSED ) {
2009-05-06 15:06:57 +00:00
DoCommandP ( 0 , PM_PAUSED_NORMAL , 0 , CMD_PAUSE ) ;
2009-11-12 20:38:52 +00:00
if ( ! _networking ) IConsolePrint ( CC_DEFAULT , " Game unpaused. " ) ;
} else if ( ( _pause_mode & PM_PAUSED_ERROR ) ! = PM_UNPAUSED ) {
IConsolePrint ( CC_DEFAULT , " Game is in error state and cannot be unpaused via console. " ) ;
} else if ( _pause_mode ! = PM_UNPAUSED ) {
IConsolePrint ( CC_DEFAULT , " Game cannot be unpaused manually; disable pause_on_join/min_active_clients. " ) ;
2006-06-27 21:25:53 +00:00
} else {
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , " Game is already unpaused. " ) ;
2006-06-27 21:25:53 +00:00
}
2005-01-24 21:33:44 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2005-01-24 21:33:44 +00:00
}
2005-01-15 20:09:16 +00:00
DEF_CONSOLE_CMD ( ConRcon )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Remote control the server from another client. Usage: 'rcon <password> <command>' " ) ;
IConsoleHelp ( " Remember to enclose the command in quotes, otherwise only the first parameter is sent " ) ;
return true ;
2005-01-15 20:09:16 +00:00
}
2005-05-02 15:52:19 +00:00
if ( argc < 3 ) return false ;
2005-01-15 20:09:16 +00:00
2008-05-17 11:46:35 +00:00
if ( _network_server ) {
IConsoleCmdExec ( argv [ 2 ] ) ;
} else {
2008-05-30 18:20:26 +00:00
NetworkClientSendRcon ( argv [ 1 ] , argv [ 2 ] ) ;
2008-05-17 11:46:35 +00:00
}
2005-05-02 15:52:19 +00:00
return true ;
2005-01-15 20:09:16 +00:00
}
2004-12-04 17:54:56 +00:00
DEF_CONSOLE_CMD ( ConStatus )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2006-01-25 18:11:06 +00:00
IConsoleHelp ( " List the status of all clients connected to the server. Usage 'status' " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2008-05-30 18:20:26 +00:00
NetworkServerShowStatusToConsole ( ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-12-04 17:54:56 +00:00
}
2006-01-25 18:11:06 +00:00
DEF_CONSOLE_CMD ( ConServerInfo )
{
if ( argc = = 0 ) {
2008-09-30 20:39:50 +00:00
IConsoleHelp ( " List current and maximum client/company limits. Usage 'server_info' " ) ;
2006-01-25 18:11:06 +00:00
IConsoleHelp ( " You can change these values by setting the variables 'max_clients', 'max_companies' and 'max_spectators' " ) ;
return true ;
}
2008-06-03 08:04:35 +00:00
IConsolePrintF ( CC_DEFAULT , " Current/maximum clients: %2d/%2d " , _network_game_info . clients_on , _settings_client . network . max_clients ) ;
2009-05-22 15:23:47 +00:00
IConsolePrintF ( CC_DEFAULT , " Current/maximum companies: %2d/%2d " , ( int ) Company : : GetNumItems ( ) , _settings_client . network . max_companies ) ;
2008-06-03 08:04:35 +00:00
IConsolePrintF ( CC_DEFAULT , " Current/maximum spectators: %2d/%2d " , NetworkSpectatorCount ( ) , _settings_client . network . max_spectators ) ;
2006-01-25 18:11:06 +00:00
return true ;
}
2009-01-21 23:07:11 +00:00
DEF_CONSOLE_CMD ( ConClientNickChange )
{
if ( argc ! = 3 ) {
IConsoleHelp ( " Change the nickname of a connected client. Usage: 'client_name <client-id> <new-name>' " ) ;
IConsoleHelp ( " For client-id's, see the command 'clients' " ) ;
return true ;
}
ClientID client_id = ( ClientID ) atoi ( argv [ 1 ] ) ;
if ( client_id = = CLIENT_ID_SERVER ) {
IConsoleError ( " Please use the command 'name' to change your own name! " ) ;
return true ;
}
if ( NetworkFindClientInfoFromClientID ( client_id ) = = NULL ) {
IConsoleError ( " Invalid client " ) ;
return true ;
}
if ( ! NetworkServerChangeClientName ( client_id , argv [ 2 ] ) ) {
IConsoleError ( " Cannot give a client a duplicate name " ) ;
}
return true ;
}
2004-12-04 17:54:56 +00:00
DEF_CONSOLE_CMD ( ConKick )
{
NetworkClientInfo * ci ;
2008-12-22 12:59:31 +00:00
ClientID client_id ;
2004-12-04 17:54:56 +00:00
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2008-09-30 20:39:50 +00:00
IConsoleHelp ( " Kick a client from a network game. Usage: 'kick <ip | client-id>' " ) ;
2005-05-02 15:52:19 +00:00
IConsoleHelp ( " For client-id's, see the command 'clients' " ) ;
return true ;
}
2004-12-04 17:54:56 +00:00
2005-05-02 15:52:19 +00:00
if ( argc ! = 2 ) return false ;
2004-12-04 17:54:56 +00:00
2006-01-19 15:58:57 +00:00
if ( strchr ( argv [ 1 ] , ' . ' ) = = NULL ) {
2008-12-22 12:59:31 +00:00
client_id = ( ClientID ) atoi ( argv [ 1 ] ) ;
2008-12-22 21:30:21 +00:00
ci = NetworkFindClientInfoFromClientID ( client_id ) ;
2006-01-19 15:58:57 +00:00
} else {
2006-01-19 16:12:24 +00:00
ci = NetworkFindClientInfoFromIP ( argv [ 1 ] ) ;
2008-12-22 12:59:31 +00:00
client_id = ( ci = = NULL ) ? INVALID_CLIENT_ID : ci - > client_id ;
2006-01-19 15:58:57 +00:00
}
2008-12-22 12:59:31 +00:00
if ( client_id = = CLIENT_ID_SERVER ) {
2006-01-25 18:11:06 +00:00
IConsoleError ( " Silly boy, you can not kick yourself! " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-12-04 17:54:56 +00:00
}
2006-01-19 15:58:57 +00:00
2008-12-22 12:59:31 +00:00
if ( client_id = = INVALID_CLIENT_ID ) {
2006-01-19 16:12:24 +00:00
IConsoleError ( " Invalid client " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
if ( ci ! = NULL ) {
2009-03-06 12:42:01 +00:00
NetworkServerKickClient ( client_id ) ;
2006-06-27 21:25:53 +00:00
} else {
2006-01-19 16:12:24 +00:00
IConsoleError ( " Client not found " ) ;
2006-06-27 21:25:53 +00:00
}
2004-12-04 17:54:56 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-12-04 17:54:56 +00:00
}
2009-01-23 22:18:06 +00:00
DEF_CONSOLE_CMD ( ConJoinCompany )
{
if ( argc < 2 ) {
IConsoleHelp ( " Request joining another company. Usage: join <company-id> [<password>] " ) ;
IConsoleHelp ( " For valid company-id see company list, use 255 for spectator " ) ;
return true ;
}
CompanyID company_id = ( CompanyID ) ( atoi ( argv [ 1 ] ) < = MAX_COMPANIES ? atoi ( argv [ 1 ] ) - 1 : atoi ( argv [ 1 ] ) ) ;
/* Check we have a valid company id! */
2009-05-17 01:00:56 +00:00
if ( ! Company : : IsValidID ( company_id ) & & company_id ! = COMPANY_SPECTATOR ) {
2009-01-23 22:18:06 +00:00
IConsolePrintF ( CC_ERROR , " Company does not exist. Company-id must be between 1 and %d. " , MAX_COMPANIES ) ;
return true ;
}
if ( NetworkFindClientInfoFromClientID ( _network_own_client_id ) - > client_playas = = company_id ) {
IConsoleError ( " You are already there! " ) ;
return true ;
}
if ( company_id = = COMPANY_SPECTATOR & & NetworkMaxSpectatorsReached ( ) ) {
IConsoleError ( " Cannot join spectators, maximum number of spectators reached. " ) ;
return true ;
}
2009-06-23 12:11:35 +00:00
if ( company_id ! = COMPANY_SPECTATOR & & ! Company : : IsHumanID ( company_id ) ) {
2009-04-26 20:01:14 +00:00
IConsoleError ( " Cannot join AI company. " ) ;
return true ;
}
2009-01-23 22:18:06 +00:00
/* Check if the company requires a password */
if ( NetworkCompanyIsPassworded ( company_id ) & & argc < 3 ) {
IConsolePrintF ( CC_ERROR , " Company %d requires a password to join. " , company_id + 1 ) ;
return true ;
}
/* non-dedicated server may just do the move! */
if ( _network_server ) {
NetworkServerDoMove ( CLIENT_ID_SERVER , company_id ) ;
} else {
NetworkClientRequestMove ( company_id , NetworkCompanyIsPassworded ( company_id ) ? argv [ 2 ] : " " ) ;
}
return true ;
}
DEF_CONSOLE_CMD ( ConMoveClient )
{
if ( argc < 3 ) {
IConsoleHelp ( " Move a client to another company. Usage: move <client-id> <company-id> " ) ;
IConsoleHelp ( " For valid client-id see 'clients', for valid company-id see 'companies', use 255 for moving to spectators " ) ;
return true ;
}
const NetworkClientInfo * ci = NetworkFindClientInfoFromClientID ( ( ClientID ) atoi ( argv [ 1 ] ) ) ;
CompanyID company_id = ( CompanyID ) ( atoi ( argv [ 2 ] ) < = MAX_COMPANIES ? atoi ( argv [ 2 ] ) - 1 : atoi ( argv [ 2 ] ) ) ;
/* check the client exists */
if ( ci = = NULL ) {
IConsoleError ( " Invalid client-id, check the command 'clients' for valid client-id's. " ) ;
return true ;
}
2009-05-17 01:00:56 +00:00
if ( ! Company : : IsValidID ( company_id ) & & company_id ! = COMPANY_SPECTATOR ) {
2009-01-23 22:18:06 +00:00
IConsolePrintF ( CC_ERROR , " Company does not exist. Company-id must be between 1 and %d. " , MAX_COMPANIES ) ;
return true ;
}
2009-06-23 12:11:35 +00:00
if ( company_id ! = COMPANY_SPECTATOR & & ! Company : : IsHumanID ( company_id ) ) {
2009-04-26 20:01:14 +00:00
IConsoleError ( " You cannot move clients to AI companies. " ) ;
return true ;
}
2009-01-23 22:18:06 +00:00
if ( ci - > client_id = = CLIENT_ID_SERVER & & _network_dedicated ) {
IConsoleError ( " Silly boy, you cannot move the server! " ) ;
return true ;
}
if ( ci - > client_playas = = company_id ) {
IConsoleError ( " You cannot move someone to where he/she already is! " ) ;
return true ;
}
/* we are the server, so force the update */
NetworkServerDoMove ( ci - > client_id , company_id ) ;
return true ;
}
2004-12-16 11:36:57 +00:00
DEF_CONSOLE_CMD ( ConResetCompany )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2005-05-04 10:17:00 +00:00
IConsoleHelp ( " Remove an idle company from the game. Usage: 'reset_company <company-id>' " ) ;
2008-09-30 20:39:50 +00:00
IConsoleHelp ( " For company-id's, see the list of companies from the dropdown menu. Company 1 is 1, etc. " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2004-12-16 11:36:57 +00:00
2005-05-02 15:52:19 +00:00
if ( argc ! = 2 ) return false ;
2004-12-16 11:36:57 +00:00
2009-05-18 16:21:28 +00:00
CompanyID index = ( CompanyID ) ( atoi ( argv [ 1 ] ) - 1 ) ;
2004-12-16 11:36:57 +00:00
2005-05-02 15:52:19 +00:00
/* Check valid range */
2009-06-23 12:11:35 +00:00
if ( ! Company : : IsValidID ( index ) ) {
2008-09-30 20:39:50 +00:00
IConsolePrintF ( CC_ERROR , " Company does not exist. Company-id must be between 1 and %d. " , MAX_COMPANIES ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2004-12-16 11:36:57 +00:00
2009-06-23 12:11:35 +00:00
if ( ! Company : : IsHumanID ( index ) ) {
2005-05-04 10:17:00 +00:00
IConsoleError ( " Company is owned by an AI. " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2008-09-30 20:39:50 +00:00
if ( NetworkCompanyHasClients ( index ) ) {
2008-05-30 18:20:26 +00:00
IConsoleError ( " Cannot remove company: a client is connected to that company. " ) ;
return false ;
2005-05-02 15:52:19 +00:00
}
2008-12-22 21:30:21 +00:00
const NetworkClientInfo * ci = NetworkFindClientInfoFromClientID ( CLIENT_ID_SERVER ) ;
2006-10-17 22:16:46 +00:00
if ( ci - > client_playas = = index ) {
2005-05-04 10:17:00 +00:00
IConsoleError ( " Cannot remove company: the server is connected to that company. " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-12-16 11:36:57 +00:00
}
2005-05-02 15:52:19 +00:00
/* It is safe to remove this company */
2008-12-28 14:37:19 +00:00
DoCommandP ( 0 , 2 , index , CMD_COMPANY_CTRL ) ;
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , " Company deleted. " ) ;
2004-12-16 11:36:57 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-12-16 11:36:57 +00:00
}
2004-12-04 17:54:56 +00:00
DEF_CONSOLE_CMD ( ConNetworkClients )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2005-10-19 19:38:35 +00:00
IConsoleHelp ( " Get a list of connected clients including their ID, name, company-id, and IP. Usage: 'clients' " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2008-12-22 21:26:26 +00:00
NetworkPrintClients ( ) ;
2004-12-04 17:54:56 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-12-04 17:54:56 +00:00
}
2009-09-07 21:03:41 +00:00
DEF_CONSOLE_CMD ( ConNetworkReconnect )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Reconnect to server to which you were connected last time. Usage: 'reconnect [<company>]' " ) ;
IConsoleHelp ( " Company 255 is spectator (default, if not specified), 0 means creating new company. " ) ;
IConsoleHelp ( " All others are a certain company with Company 1 being #1 " ) ;
return true ;
}
CompanyID playas = ( argc > = 2 ) ? ( CompanyID ) atoi ( argv [ 1 ] ) : COMPANY_SPECTATOR ;
switch ( playas ) {
case 0 : playas = COMPANY_NEW_COMPANY ; break ;
case COMPANY_SPECTATOR : /* nothing to do */ break ;
default :
/* From a user pov 0 is a new company, internally it's different and all
* companies are offset by one to ease up on users ( eg companies 1 - 8 not 0 - 7 ) */
playas - - ;
if ( playas < COMPANY_FIRST | | playas > = MAX_COMPANIES ) return false ;
break ;
}
if ( StrEmpty ( _settings_client . network . last_host ) ) {
IConsolePrint ( CC_DEFAULT , " No server for reconnecting. " ) ;
return true ;
}
/* Don't resolve the address first, just print it directly as it comes from the config file. */
IConsolePrintF ( CC_DEFAULT , " Reconnecting to %s:%d... " , _settings_client . network . last_host , _settings_client . network . last_port ) ;
NetworkClientConnectGame ( NetworkAddress ( _settings_client . network . last_host , _settings_client . network . last_port ) , playas ) ;
return true ;
} ;
2004-09-12 21:49:38 +00:00
DEF_CONSOLE_CMD ( ConNetworkConnect )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Connect to a remote OTTD server and join the game. Usage: 'connect <ip>' " ) ;
2008-09-30 20:39:50 +00:00
IConsoleHelp ( " IP can contain port and company: 'IP[[#Company]:Port]', eg: 'server.ottd.org#2:443' " ) ;
IConsoleHelp ( " Company #255 is spectator all others are a certain company with Company 1 being #1 " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
if ( argc < 2 ) return false ;
2006-10-18 13:17:46 +00:00
if ( _networking ) NetworkDisconnect ( ) ; // we are in network-mode, first close it!
2004-12-04 17:54:56 +00:00
2009-05-19 21:20:14 +00:00
const char * port = NULL ;
const char * company = NULL ;
char * ip = argv [ 1 ] ;
2006-10-15 23:48:34 +00:00
/* Default settings: default port and new company */
2009-05-19 21:20:14 +00:00
uint16 rport = NETWORK_DEFAULT_PORT ;
CompanyID join_as = COMPANY_NEW_COMPANY ;
2004-09-12 21:49:38 +00:00
2008-09-30 20:39:50 +00:00
ParseConnectionString ( & company , & port , ip ) ;
2004-09-12 23:35:01 +00:00
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " Connecting to %s... " , ip ) ;
2008-09-30 20:39:50 +00:00
if ( company ! = NULL ) {
2009-05-19 21:20:14 +00:00
join_as = ( CompanyID ) atoi ( company ) ;
IConsolePrintF ( CC_DEFAULT , " company-no: %d " , join_as ) ;
2006-10-15 23:48:34 +00:00
2008-09-30 20:39:50 +00:00
/* From a user pov 0 is a new company, internally it's different and all
* companies are offset by one to ease up on users ( eg companies 1 - 8 not 0 - 7 ) */
2009-05-19 21:20:14 +00:00
if ( join_as ! = COMPANY_SPECTATOR ) {
if ( join_as > MAX_COMPANIES ) return false ;
join_as - - ;
2006-10-15 23:48:34 +00:00
}
2004-09-12 21:49:38 +00:00
}
2004-12-04 17:54:56 +00:00
if ( port ! = NULL ) {
2004-09-12 21:49:38 +00:00
rport = atoi ( port ) ;
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " port: %s " , port ) ;
2004-09-12 21:49:38 +00:00
}
2009-05-19 21:20:14 +00:00
NetworkClientConnectGame ( NetworkAddress ( ip , rport ) , join_as ) ;
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
2004-12-04 17:54:56 +00:00
# endif /* ENABLE_NETWORK */
2004-09-12 21:49:38 +00:00
2009-03-15 00:32:18 +00:00
/*********************************
* script file console commands
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2004-09-14 16:10:20 +00:00
DEF_CONSOLE_CMD ( ConExec )
{
2005-05-02 15:52:19 +00:00
char cmdline [ ICON_CMDLN_SIZE ] ;
2005-05-02 17:05:59 +00:00
char * cmdptr ;
2004-09-14 16:10:20 +00:00
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Execute a local script file. Usage: 'exec <script> <?>' " ) ;
return true ;
}
if ( argc < 2 ) return false ;
2004-09-14 16:10:20 +00:00
2008-02-07 10:01:18 +00:00
_script_file = FioFOpenFile ( argv [ 1 ] , " r " , BASE_DIR ) ;
2004-09-14 16:10:20 +00:00
if ( _script_file = = NULL ) {
2005-05-02 15:52:19 +00:00
if ( argc = = 2 | | atoi ( argv [ 2 ] ) ! = 0 ) IConsoleError ( " script file not found " ) ;
return true ;
2005-02-18 08:49:04 +00:00
}
2004-09-14 16:10:20 +00:00
_script_running = true ;
2005-05-02 17:05:59 +00:00
while ( _script_running & & fgets ( cmdline , sizeof ( cmdline ) , _script_file ) ! = NULL ) {
/* Remove newline characters from the executing script */
2005-05-15 18:43:36 +00:00
for ( cmdptr = cmdline ; * cmdptr ! = ' \0 ' ; cmdptr + + ) {
2005-05-02 17:05:59 +00:00
if ( * cmdptr = = ' \n ' | | * cmdptr = = ' \r ' ) {
* cmdptr = ' \0 ' ;
break ;
}
}
2005-05-02 15:52:19 +00:00
IConsoleCmdExec ( cmdline ) ;
2005-05-02 17:05:59 +00:00
}
2005-02-18 08:36:11 +00:00
2005-05-02 15:52:19 +00:00
if ( ferror ( _script_file ) )
2005-02-18 08:36:11 +00:00
IConsoleError ( " Encountered errror while trying to read from script file " ) ;
2004-09-14 16:10:20 +00:00
_script_running = false ;
2008-02-07 10:01:18 +00:00
FioFCloseFile ( _script_file ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-09-14 16:10:20 +00:00
}
DEF_CONSOLE_CMD ( ConReturn )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Stop executing a running script. Usage: 'return' " ) ;
return true ;
}
2004-09-14 16:10:20 +00:00
_script_running = false ;
2005-05-02 15:52:19 +00:00
return true ;
2004-09-14 16:10:20 +00:00
}
2009-03-15 00:32:18 +00:00
/*****************************
* default console commands
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-03-07 11:47:46 +00:00
extern bool CloseConsoleLogIfActive ( ) ;
2005-01-15 16:38:10 +00:00
DEF_CONSOLE_CMD ( ConScript )
{
2009-01-10 00:31:47 +00:00
extern FILE * _iconsole_output_file ;
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Start or stop logging console output to a file. Usage: 'script <filename>' " ) ;
IConsoleHelp ( " If filename is omitted, a running log is stopped if it is active " ) ;
return true ;
}
2005-01-15 16:38:10 +00:00
if ( ! CloseConsoleLogIfActive ( ) ) {
2005-05-02 15:52:19 +00:00
if ( argc < 2 ) return false ;
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " file output started to: %s " , argv [ 1 ] ) ;
2004-09-19 15:24:45 +00:00
_iconsole_output_file = fopen ( argv [ 1 ] , " ab " ) ;
2004-09-14 16:10:20 +00:00
if ( _iconsole_output_file = = NULL ) IConsoleError ( " could not open file " ) ;
}
2005-01-15 16:38:10 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-09-14 16:10:20 +00:00
}
2004-09-12 21:49:38 +00:00
DEF_CONSOLE_CMD ( ConEcho )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Print back the first argument to the console. Usage: 'echo <arg>' " ) ;
return true ;
}
if ( argc < 2 ) return false ;
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_DEFAULT , argv [ 1 ] ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
DEF_CONSOLE_CMD ( ConEchoC )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Print back the first argument to the console in a given colour. Usage: 'echoc <colour> <arg2>' " ) ;
return true ;
}
if ( argc < 3 ) return false ;
2008-05-24 10:35:15 +00:00
IConsolePrint ( ( ConsoleColour ) atoi ( argv [ 1 ] ) , argv [ 2 ] ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
- New optional landscape generator (TerraGenesis Perlin)
- Load heightmaps (either BMP or PNG)
- Progress dialog while generating worlds (no longer a 'hanging' screen)
- New dialogs for NewGame, Create Scenario and Play Heightmap
- Easier to configure your landscape
- More things to configure (tree-placer, ..)
- Speedup of world generation
- New console command 'restart': restart the map EXACTLY as it was when you
first started it (needs a game made after or with this commit)
- New console command 'getseed': get the seed of your map and share it with
others (of course only works with generated maps)
- Many new, world generation related, things
- Many internal cleanups and rewrites
Many tnx to those people who helped making this:
Belugas, DaleStan, glx, KUDr, RichK67, Rubidium, and TrueLight (alfabetic)
Many tnx to those who helped testing:
Arnau, Bjarni, and tokai (alfabetic)
And to all other people who helped testing and sending comments / bugs
Stats: 673 lines changed, 3534 new lines, 79 new strings
2006-08-19 10:00:30 +00:00
DEF_CONSOLE_CMD ( ConNewGame )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Start a new game. Usage: 'newgame [seed]' " ) ;
IConsoleHelp ( " The server can force a new game using 'newgame'; any client joined will rejoin after the server is done generating the new game. " ) ;
return true ;
}
StartNewGameWithoutGUI ( ( argc = = 2 ) ? ( uint ) atoi ( argv [ 1 ] ) : GENERATE_NEW_SEED ) ;
return true ;
}
2009-02-25 00:45:52 +00:00
extern void SwitchToMode ( SwitchMode new_mode ) ;
2004-12-04 17:54:56 +00:00
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
- New optional landscape generator (TerraGenesis Perlin)
- Load heightmaps (either BMP or PNG)
- Progress dialog while generating worlds (no longer a 'hanging' screen)
- New dialogs for NewGame, Create Scenario and Play Heightmap
- Easier to configure your landscape
- More things to configure (tree-placer, ..)
- Speedup of world generation
- New console command 'restart': restart the map EXACTLY as it was when you
first started it (needs a game made after or with this commit)
- New console command 'getseed': get the seed of your map and share it with
others (of course only works with generated maps)
- Many new, world generation related, things
- Many internal cleanups and rewrites
Many tnx to those people who helped making this:
Belugas, DaleStan, glx, KUDr, RichK67, Rubidium, and TrueLight (alfabetic)
Many tnx to those who helped testing:
Arnau, Bjarni, and tokai (alfabetic)
And to all other people who helped testing and sending comments / bugs
Stats: 673 lines changed, 3534 new lines, 79 new strings
2006-08-19 10:00:30 +00:00
DEF_CONSOLE_CMD ( ConRestart )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Restart game. Usage: 'restart' " ) ;
IConsoleHelp ( " Restarts a game. It tries to reproduce the exact same map as the game started with. " ) ;
2009-08-06 22:00:32 +00:00
IConsoleHelp ( " However: " ) ;
IConsoleHelp ( " * restarting games started in another version might create another map due to difference in map generation " ) ;
IConsoleHelp ( " * restarting games based on scenarios, loaded games or heightmaps will start a new game based on the settings stored in the scenario/savegame " ) ;
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
- New optional landscape generator (TerraGenesis Perlin)
- Load heightmaps (either BMP or PNG)
- Progress dialog while generating worlds (no longer a 'hanging' screen)
- New dialogs for NewGame, Create Scenario and Play Heightmap
- Easier to configure your landscape
- More things to configure (tree-placer, ..)
- Speedup of world generation
- New console command 'restart': restart the map EXACTLY as it was when you
first started it (needs a game made after or with this commit)
- New console command 'getseed': get the seed of your map and share it with
others (of course only works with generated maps)
- Many new, world generation related, things
- Many internal cleanups and rewrites
Many tnx to those people who helped making this:
Belugas, DaleStan, glx, KUDr, RichK67, Rubidium, and TrueLight (alfabetic)
Many tnx to those who helped testing:
Arnau, Bjarni, and tokai (alfabetic)
And to all other people who helped testing and sending comments / bugs
Stats: 673 lines changed, 3534 new lines, 79 new strings
2006-08-19 10:00:30 +00:00
return true ;
}
2009-02-25 00:45:52 +00:00
/* Don't copy the _newgame pointers to the real pointers, so call SwitchToMode directly */
2008-05-29 15:13:28 +00:00
_settings_game . game_creation . map_x = MapLogX ( ) ;
_settings_game . game_creation . map_y = FindFirstBit ( MapSizeY ( ) ) ;
2009-08-06 22:00:32 +00:00
SwitchToMode ( SM_RESTARTGAME ) ;
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
- New optional landscape generator (TerraGenesis Perlin)
- Load heightmaps (either BMP or PNG)
- Progress dialog while generating worlds (no longer a 'hanging' screen)
- New dialogs for NewGame, Create Scenario and Play Heightmap
- Easier to configure your landscape
- More things to configure (tree-placer, ..)
- Speedup of world generation
- New console command 'restart': restart the map EXACTLY as it was when you
first started it (needs a game made after or with this commit)
- New console command 'getseed': get the seed of your map and share it with
others (of course only works with generated maps)
- Many new, world generation related, things
- Many internal cleanups and rewrites
Many tnx to those people who helped making this:
Belugas, DaleStan, glx, KUDr, RichK67, Rubidium, and TrueLight (alfabetic)
Many tnx to those who helped testing:
Arnau, Bjarni, and tokai (alfabetic)
And to all other people who helped testing and sending comments / bugs
Stats: 673 lines changed, 3534 new lines, 79 new strings
2006-08-19 10:00:30 +00:00
return true ;
}
2009-01-12 17:11:45 +00:00
DEF_CONSOLE_CMD ( ConListAI )
{
char buf [ 4096 ] ;
char * p = & buf [ 0 ] ;
p = AI : : GetConsoleList ( p , lastof ( buf ) ) ;
p = & buf [ 0 ] ;
/* Print output line by line */
for ( char * p2 = & buf [ 0 ] ; * p2 ! = ' \0 ' ; p2 + + ) {
if ( * p2 = = ' \n ' ) {
* p2 = ' \0 ' ;
IConsolePrintF ( CC_DEFAULT , " %s " , p ) ;
p = p2 + 1 ;
}
}
return true ;
}
DEF_CONSOLE_CMD ( ConStartAI )
{
if ( argc = = 0 | | argc > 3 ) {
IConsoleHelp ( " Start a new AI. Usage: 'start_ai [<AI>] [<settings>]' " ) ;
IConsoleHelp ( " Start a new AI. If <AI> is given, it starts that specific AI (if found). " ) ;
IConsoleHelp ( " If <settings> is given, it is parsed and the AI settings are set to that. " ) ;
return true ;
}
2009-01-13 11:06:21 +00:00
if ( _game_mode ! = GM_NORMAL ) {
IConsoleWarning ( " AIs can only be managed in a game. " ) ;
return true ;
}
2009-05-22 15:23:47 +00:00
if ( Company : : GetNumItems ( ) = = CompanyPool : : MAX_SIZE ) {
2009-01-12 17:11:45 +00:00
IConsoleWarning ( " Can't start a new AI (no more free slots). " ) ;
return true ;
}
if ( _networking & & ! _network_server ) {
IConsoleWarning ( " Only the server can start a new AI. " ) ;
return true ;
}
if ( _networking & & ! _settings_game . ai . ai_in_multiplayer ) {
IConsoleWarning ( " AIs are not allowed in multiplayer by configuration. " ) ;
IConsoleWarning ( " Switch AI -> AI in multiplayer to True. " ) ;
return true ;
}
if ( ! AI : : CanStartNew ( ) ) {
IConsoleWarning ( " Can't start a new AI. " ) ;
return true ;
}
int n = 0 ;
Company * c ;
/* Find the next free slot */
FOR_ALL_COMPANIES ( c ) {
if ( c - > index ! = n ) break ;
n + + ;
}
AIConfig * config = AIConfig : : GetConfig ( ( CompanyID ) n ) ;
if ( argc > = 2 ) {
2009-01-13 00:08:38 +00:00
config - > ChangeAI ( argv [ 1 ] ) ;
if ( ! config - > HasAI ( ) ) {
2009-01-12 17:11:45 +00:00
IConsoleWarning ( " Failed to load the specified AI " ) ;
return true ;
}
if ( argc = = 3 ) {
config - > StringToSettings ( argv [ 2 ] ) ;
}
}
/* Start a new AI company */
2009-08-28 15:23:11 +00:00
DoCommandP ( 0 , 1 , INVALID_COMPANY , CMD_COMPANY_CTRL ) ;
2009-01-12 17:11:45 +00:00
return true ;
}
2009-01-14 15:39:05 +00:00
DEF_CONSOLE_CMD ( ConReloadAI )
{
if ( argc ! = 2 ) {
IConsoleHelp ( " Reload an AI. Usage: 'reload_ai <company-id>' " ) ;
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. " ) ;
return true ;
}
if ( _game_mode ! = GM_NORMAL ) {
IConsoleWarning ( " AIs can only be managed in a game. " ) ;
return true ;
}
if ( _networking & & ! _network_server ) {
IConsoleWarning ( " Only the server can reload an AI. " ) ;
return true ;
}
CompanyID company_id = ( CompanyID ) ( atoi ( argv [ 1 ] ) - 1 ) ;
2009-05-17 01:00:56 +00:00
if ( ! Company : : IsValidID ( company_id ) ) {
2009-01-14 15:39:05 +00:00
IConsolePrintF ( CC_DEFAULT , " Unknown company. Company range is between 1 and %d. " , MAX_COMPANIES ) ;
return true ;
}
2009-06-23 12:11:35 +00:00
if ( Company : : IsHumanID ( company_id ) ) {
2009-01-14 15:39:05 +00:00
IConsoleWarning ( " Company is not controlled by an AI. " ) ;
return true ;
}
/* First kill the company of the AI, then start a new one. This should start the current AI again */
DoCommandP ( 0 , 2 , company_id , CMD_COMPANY_CTRL ) ;
2009-08-28 15:23:11 +00:00
DoCommandP ( 0 , 1 , company_id , CMD_COMPANY_CTRL ) ;
2009-01-14 15:39:05 +00:00
IConsolePrint ( CC_DEFAULT , " AI reloaded. " ) ;
return true ;
}
2009-01-12 17:11:45 +00:00
DEF_CONSOLE_CMD ( ConStopAI )
{
if ( argc ! = 2 ) {
IConsoleHelp ( " Stop an AI. Usage: 'stop_ai <company-id>' " ) ;
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. " ) ;
return true ;
}
2009-01-13 11:06:21 +00:00
if ( _game_mode ! = GM_NORMAL ) {
IConsoleWarning ( " AIs can only be managed in a game. " ) ;
return true ;
}
2009-01-12 17:11:45 +00:00
if ( _networking & & ! _network_server ) {
IConsoleWarning ( " Only the server can stop an AI. " ) ;
return true ;
}
CompanyID company_id = ( CompanyID ) ( atoi ( argv [ 1 ] ) - 1 ) ;
2009-05-17 01:00:56 +00:00
if ( ! Company : : IsValidID ( company_id ) ) {
2009-01-12 17:11:45 +00:00
IConsolePrintF ( CC_DEFAULT , " Unknown company. Company range is between 1 and %d. " , MAX_COMPANIES ) ;
return true ;
}
2009-06-23 12:11:35 +00:00
if ( Company : : IsHumanID ( company_id ) ) {
2009-01-12 17:11:45 +00:00
IConsoleWarning ( " Company is not controlled by an AI. " ) ;
return true ;
}
/* Now kill the company of the AI. */
DoCommandP ( 0 , 2 , company_id , CMD_COMPANY_CTRL ) ;
IConsolePrint ( CC_DEFAULT , " AI stopped, company deleted. " ) ;
return true ;
}
DEF_CONSOLE_CMD ( ConRescanAI )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Rescan the AI dir for scripts. Usage: 'rescan_ai' " ) ;
return true ;
}
if ( _networking & & ! _network_server ) {
IConsoleWarning ( " Only the server can rescan the AI dir for scripts. " ) ;
return true ;
}
AI : : Rescan ( ) ;
return true ;
}
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
- New optional landscape generator (TerraGenesis Perlin)
- Load heightmaps (either BMP or PNG)
- Progress dialog while generating worlds (no longer a 'hanging' screen)
- New dialogs for NewGame, Create Scenario and Play Heightmap
- Easier to configure your landscape
- More things to configure (tree-placer, ..)
- Speedup of world generation
- New console command 'restart': restart the map EXACTLY as it was when you
first started it (needs a game made after or with this commit)
- New console command 'getseed': get the seed of your map and share it with
others (of course only works with generated maps)
- Many new, world generation related, things
- Many internal cleanups and rewrites
Many tnx to those people who helped making this:
Belugas, DaleStan, glx, KUDr, RichK67, Rubidium, and TrueLight (alfabetic)
Many tnx to those who helped testing:
Arnau, Bjarni, and tokai (alfabetic)
And to all other people who helped testing and sending comments / bugs
Stats: 673 lines changed, 3534 new lines, 79 new strings
2006-08-19 10:00:30 +00:00
DEF_CONSOLE_CMD ( ConGetSeed )
2004-12-04 17:54:56 +00:00
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
- New optional landscape generator (TerraGenesis Perlin)
- Load heightmaps (either BMP or PNG)
- Progress dialog while generating worlds (no longer a 'hanging' screen)
- New dialogs for NewGame, Create Scenario and Play Heightmap
- Easier to configure your landscape
- More things to configure (tree-placer, ..)
- Speedup of world generation
- New console command 'restart': restart the map EXACTLY as it was when you
first started it (needs a game made after or with this commit)
- New console command 'getseed': get the seed of your map and share it with
others (of course only works with generated maps)
- Many new, world generation related, things
- Many internal cleanups and rewrites
Many tnx to those people who helped making this:
Belugas, DaleStan, glx, KUDr, RichK67, Rubidium, and TrueLight (alfabetic)
Many tnx to those who helped testing:
Arnau, Bjarni, and tokai (alfabetic)
And to all other people who helped testing and sending comments / bugs
Stats: 673 lines changed, 3534 new lines, 79 new strings
2006-08-19 10:00:30 +00:00
IConsoleHelp ( " Returns the seed used to create this game. Usage: 'getseed' " ) ;
IConsoleHelp ( " The seed can be used to reproduce the exact same map as the game started with. " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2008-05-29 15:13:28 +00:00
IConsolePrintF ( CC_DEFAULT , " Generation Seed: %u " , _settings_game . game_creation . generation_seed ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
2007-06-13 14:52:41 +00:00
DEF_CONSOLE_CMD ( ConGetDate )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Returns the current date (day-month-year) of the game. Usage: 'getdate' " ) ;
return true ;
}
YearMonthDay ymd ;
ConvertDateToYMD ( _date , & ymd ) ;
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " Date: %d-%d-%d " , ymd . day , ymd . month + 1 , ymd . year ) ;
2007-06-13 14:52:41 +00:00
return true ;
}
2004-12-13 18:51:08 +00:00
DEF_CONSOLE_CMD ( ConAlias )
{
2005-05-02 15:52:19 +00:00
IConsoleAlias * alias ;
2004-12-13 22:13:02 +00:00
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Add a new alias, or redefine the behaviour of an existing alias . Usage: 'alias <name> <command>' " ) ;
return true ;
}
if ( argc < 3 ) return false ;
2004-12-13 22:13:02 +00:00
alias = IConsoleAliasGet ( argv [ 1 ] ) ;
if ( alias = = NULL ) {
2005-05-02 15:52:19 +00:00
IConsoleAliasRegister ( argv [ 1 ] , argv [ 2 ] ) ;
2004-12-13 22:13:02 +00:00
} else {
free ( alias - > cmdline ) ;
alias - > cmdline = strdup ( argv [ 2 ] ) ;
}
2005-05-02 15:52:19 +00:00
return true ;
2004-12-13 18:51:08 +00:00
}
2004-09-12 21:49:38 +00:00
DEF_CONSOLE_CMD ( ConScreenShot )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2009-11-01 18:15:35 +00:00
IConsoleHelp ( " Create a screenshot of the game. Usage: 'screenshot [big | no_con] [file name]' " ) ;
2009-11-01 20:40:36 +00:00
IConsoleHelp ( " 'big' makes a screenshot of the whole map, 'no_con' hides the console to create "
2009-11-01 18:15:35 +00:00
" the screenshot. Screenshots of whole map are always drawn without console " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
2005-10-19 19:41:38 +00:00
if ( argc > 3 ) return false ;
2009-11-01 18:15:35 +00:00
ScreenshotType type = SC_VIEWPORT ;
const char * name = NULL ;
2005-05-02 15:52:19 +00:00
2009-11-01 18:15:35 +00:00
if ( argc > 1 ) {
if ( strcmp ( argv [ 1 ] , " big " ) = = 0 ) {
/* screenshot big [filename] */
type = SC_WORLD ;
if ( argc > 2 ) name = argv [ 2 ] ;
} else if ( strcmp ( argv [ 1 ] , " no_con " ) = = 0 ) {
/* screenshot no_con [filename] */
2004-09-12 21:49:38 +00:00
IConsoleClose ( ) ;
2009-11-01 18:15:35 +00:00
if ( argc > 2 ) name = argv [ 2 ] ;
} else if ( argc = = 2 ) {
/* screenshot filename */
name = argv [ 1 ] ;
} else {
2009-11-17 23:08:55 +00:00
/* screenshot argv[1] argv[2] - invalid */
2009-11-01 18:15:35 +00:00
return false ;
}
2004-09-19 15:24:45 +00:00
}
2005-10-19 19:41:38 +00:00
2009-12-19 19:21:37 +00:00
MakeScreenshot ( type , name ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
2004-09-13 06:56:30 +00:00
DEF_CONSOLE_CMD ( ConInfoVar )
2004-09-12 21:49:38 +00:00
{
2009-09-20 23:11:01 +00:00
static const char * const _icon_vartypes [ ] = { " boolean " , " byte " , " uint16 " , " uint32 " , " int16 " , " int32 " , " string " } ;
2005-05-02 15:52:19 +00:00
const IConsoleVar * var ;
if ( argc = = 0 ) {
IConsoleHelp ( " Print out debugging information about a variable. Usage: 'info_var <var>' " ) ;
return true ;
}
if ( argc < 2 ) return false ;
var = IConsoleVarGet ( argv [ 1 ] ) ;
if ( var = = NULL ) {
IConsoleError ( " the given variable was not found " ) ;
return true ;
}
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " variable name: %s " , var - > name ) ;
IConsolePrintF ( CC_DEFAULT , " variable type: %s " , _icon_vartypes [ var - > type ] ) ;
2009-05-10 17:27:25 +00:00
IConsolePrintF ( CC_DEFAULT , " variable addr: %p " , var - > addr ) ;
2005-05-02 15:52:19 +00:00
if ( var - > hook . access ) IConsoleWarning ( " variable is access hooked " ) ;
if ( var - > hook . pre ) IConsoleWarning ( " variable is pre hooked " ) ;
if ( var - > hook . post ) IConsoleWarning ( " variable is post hooked " ) ;
return true ;
2004-09-14 16:10:20 +00:00
}
DEF_CONSOLE_CMD ( ConInfoCmd )
{
2005-05-02 15:52:19 +00:00
const IConsoleCmd * cmd ;
if ( argc = = 0 ) {
IConsoleHelp ( " Print out debugging information about a command. Usage: 'info_cmd <cmd>' " ) ;
return true ;
}
if ( argc < 2 ) return false ;
cmd = IConsoleCmdGet ( argv [ 1 ] ) ;
if ( cmd = = NULL ) {
IConsoleError ( " the given command was not found " ) ;
return true ;
2004-09-19 15:24:45 +00:00
}
2005-05-02 15:52:19 +00:00
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " command name: %s " , cmd - > name ) ;
2009-05-10 17:27:25 +00:00
IConsolePrintF ( CC_DEFAULT , " command proc: %p " , cmd - > proc ) ;
2005-05-02 15:52:19 +00:00
if ( cmd - > hook . access ) IConsoleWarning ( " command is access hooked " ) ;
if ( cmd - > hook . pre ) IConsoleWarning ( " command is pre hooked " ) ;
if ( cmd - > hook . post ) IConsoleWarning ( " command is post hooked " ) ;
return true ;
2004-09-12 21:49:38 +00:00
}
DEF_CONSOLE_CMD ( ConDebugLevel )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2005-05-20 17:59:24 +00:00
IConsoleHelp ( " Get/set the default debugging level for the game. Usage: 'debug_level [<level>]' " ) ;
2005-05-02 15:52:19 +00:00
IConsoleHelp ( " Level can be any combination of names, levels. Eg 'net=5 ms=4'. Remember to enclose it in \" 's " ) ;
return true ;
}
2005-05-20 17:59:24 +00:00
if ( argc > 2 ) return false ;
if ( argc = = 1 ) {
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " Current debug-level: '%s' " , GetDebugString ( ) ) ;
2006-06-27 21:25:53 +00:00
} else {
SetDebugString ( argv [ 1 ] ) ;
}
2005-05-20 17:59:24 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
DEF_CONSOLE_CMD ( ConExit )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Exit the game. Usage: 'exit' " ) ;
return true ;
}
2008-05-29 15:13:28 +00:00
if ( _game_mode = = GM_NORMAL & & _settings_client . gui . autosave_on_exit ) DoExitSave ( ) ;
2007-07-23 15:28:02 +00:00
2004-09-12 21:49:38 +00:00
_exit_game = true ;
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
2005-05-15 10:40:53 +00:00
DEF_CONSOLE_CMD ( ConPart )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Leave the currently joined/running game (only ingame). Usage: 'part' " ) ;
return true ;
}
if ( _game_mode ! = GM_NORMAL ) return false ;
_switch_mode = SM_MENU ;
return true ;
}
2004-09-12 21:49:38 +00:00
DEF_CONSOLE_CMD ( ConHelp )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 2 ) {
2005-05-02 17:05:59 +00:00
const IConsoleCmd * cmd ;
const IConsoleVar * var ;
const IConsoleAlias * alias ;
2005-05-02 15:52:19 +00:00
cmd = IConsoleCmdGet ( argv [ 1 ] ) ;
2005-07-08 22:25:24 +00:00
if ( cmd ! = NULL ) {
cmd - > proc ( 0 , NULL ) ;
return true ;
}
alias = IConsoleAliasGet ( argv [ 1 ] ) ;
if ( alias ! = NULL ) {
cmd = IConsoleCmdGet ( alias - > cmdline ) ;
if ( cmd ! = NULL ) {
cmd - > proc ( 0 , NULL ) ;
return true ;
}
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_ERROR , " ERROR: alias is of special type, please see its execution-line: '%s' " , alias - > cmdline ) ;
2005-07-08 22:25:24 +00:00
return true ;
}
var = IConsoleVarGet ( argv [ 1 ] ) ;
if ( var ! = NULL & & var - > help ! = NULL ) {
IConsoleHelp ( var - > help ) ;
return true ;
}
IConsoleError ( " command or variable not found " ) ;
return true ;
}
2005-05-02 15:52:19 +00:00
2008-05-24 10:35:15 +00:00
IConsolePrint ( CC_WARNING , " ---- OpenTTD Console Help ---- " ) ;
IConsolePrint ( CC_DEFAULT , " - variables: [command to list all variables: list_vars] " ) ;
IConsolePrint ( CC_DEFAULT , " set value with '<var> = <value>', use '++/--' to in-or decrement " ) ;
IConsolePrint ( CC_DEFAULT , " or omit '=' and just '<var> <value>'. get value with typing '<var>' " ) ;
IConsolePrint ( CC_DEFAULT , " - commands: [command to list all commands: list_cmds] " ) ;
IConsolePrint ( CC_DEFAULT , " call commands with '<command> <arg2> <arg3>...' " ) ;
IConsolePrint ( CC_DEFAULT , " - to assign strings, or use them as arguments, enclose it within quotes " ) ;
IConsolePrint ( CC_DEFAULT , " like this: '<command> \" string argument with spaces \" ' " ) ;
IConsolePrint ( CC_DEFAULT , " - use 'help <command> | <variable>' to get specific information " ) ;
IConsolePrint ( CC_DEFAULT , " - scroll console output with shift + (up | down) | (pageup | pagedown)) " ) ;
IConsolePrint ( CC_DEFAULT , " - scroll console input history with the up | down arrows " ) ;
IConsolePrint ( CC_DEFAULT , " " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
DEF_CONSOLE_CMD ( ConListCommands )
{
2005-05-02 15:52:19 +00:00
const IConsoleCmd * cmd ;
2004-09-19 15:24:45 +00:00
size_t l = 0 ;
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " List all registered commands. Usage: 'list_cmds [<pre-filter>]' " ) ;
return true ;
}
2004-09-19 15:24:45 +00:00
if ( argv [ 1 ] ! = NULL ) l = strlen ( argv [ 1 ] ) ;
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
for ( cmd = _iconsole_cmds ; cmd ! = NULL ; cmd = cmd - > next ) {
if ( argv [ 1 ] = = NULL | | strncmp ( cmd - > name , argv [ 1 ] , l ) = = 0 ) {
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " %s " , cmd - > name ) ;
2005-05-02 15:52:19 +00:00
}
}
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
DEF_CONSOLE_CMD ( ConListVariables )
{
2005-05-02 15:52:19 +00:00
const IConsoleVar * var ;
2004-09-19 15:24:45 +00:00
size_t l = 0 ;
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " List all registered variables. Usage: 'list_vars [<pre-filter>]' " ) ;
return true ;
}
2004-09-19 15:24:45 +00:00
if ( argv [ 1 ] ! = NULL ) l = strlen ( argv [ 1 ] ) ;
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
for ( var = _iconsole_vars ; var ! = NULL ; var = var - > next ) {
if ( argv [ 1 ] = = NULL | | strncmp ( var - > name , argv [ 1 ] , l ) = = 0 )
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " %s " , var - > name ) ;
2005-05-02 15:52:19 +00:00
}
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
2004-12-13 18:51:08 +00:00
DEF_CONSOLE_CMD ( ConListAliases )
{
2005-05-02 15:52:19 +00:00
const IConsoleAlias * alias ;
2004-12-13 18:51:08 +00:00
size_t l = 0 ;
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " List all registered aliases. Usage: 'list_aliases [<pre-filter>]' " ) ;
return true ;
}
2004-09-12 21:49:38 +00:00
2004-09-19 15:24:45 +00:00
if ( argv [ 1 ] ! = NULL ) l = strlen ( argv [ 1 ] ) ;
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
for ( alias = _iconsole_aliases ; alias ! = NULL ; alias = alias - > next ) {
if ( argv [ 1 ] = = NULL | | strncmp ( alias - > name , argv [ 1 ] , l ) = = 0 )
2008-05-24 10:35:15 +00:00
IConsolePrintF ( CC_DEFAULT , " %s => %s " , alias - > name , alias - > cmdline ) ;
2005-05-02 15:52:19 +00:00
}
2004-09-12 21:49:38 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-09-12 21:49:38 +00:00
}
2004-12-04 17:54:56 +00:00
# ifdef ENABLE_NETWORK
DEF_CONSOLE_CMD ( ConSay )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
IConsoleHelp ( " Chat to your fellow players in a multiplayer game. Usage: 'say \" <msg> \" ' " ) ;
return true ;
}
if ( argc ! = 2 ) return false ;
if ( ! _network_server ) {
2008-05-30 18:20:26 +00:00
NetworkClientSendChat ( NETWORK_ACTION_CHAT , DESTTYPE_BROADCAST , 0 /* param does not matter */ , argv [ 1 ] ) ;
2006-06-27 21:25:53 +00:00
} else {
2008-12-22 12:59:31 +00:00
NetworkServerSendChat ( NETWORK_ACTION_CHAT , DESTTYPE_BROADCAST , 0 , argv [ 1 ] , CLIENT_ID_SERVER ) ;
2006-06-27 21:25:53 +00:00
}
2005-05-02 15:52:19 +00:00
return true ;
2004-12-04 17:54:56 +00:00
}
2008-09-30 20:39:50 +00:00
DEF_CONSOLE_CMD ( ConCompanies )
2006-05-11 14:08:03 +00:00
{
2008-09-30 20:39:50 +00:00
Company * c ;
2006-05-11 14:08:03 +00:00
if ( argc = = 0 ) {
2008-09-30 20:39:50 +00:00
IConsoleHelp ( " List the in-game details of all clients connected to the server. Usage 'companies' " ) ;
2006-05-11 14:08:03 +00:00
return true ;
}
2008-12-22 18:40:57 +00:00
NetworkCompanyStats company_stats [ MAX_COMPANIES ] ;
NetworkPopulateCompanyStats ( company_stats ) ;
2006-05-11 14:08:03 +00:00
2008-09-30 20:39:50 +00:00
FOR_ALL_COMPANIES ( c ) {
2008-12-22 18:40:57 +00:00
/* Grab the company name */
char company_name [ NETWORK_COMPANY_NAME_LENGTH ] ;
SetDParam ( 0 , c - > index ) ;
GetString ( company_name , STR_COMPANY_NAME , lastof ( company_name ) ) ;
2006-05-14 23:01:11 +00:00
2008-12-22 18:40:57 +00:00
char buffer [ 512 ] ;
const NetworkCompanyStats * stats = & company_stats [ c - > index ] ;
2007-05-02 19:00:59 +00:00
2009-04-21 23:40:56 +00:00
GetString ( buffer , STR_COLOUR_DARK_BLUE + _company_colours [ c - > index ] , lastof ( buffer ) ) ;
2009-05-10 17:27:25 +00:00
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) %sprotected " ,
2008-12-22 18:40:57 +00:00
c - > index + 1 , buffer , company_name , c - > inaugurated_year , ( int64 ) c - > money , ( int64 ) c - > current_loan , ( int64 ) CalculateCompanyValue ( c ) ,
/* trains */ stats - > num_vehicle [ 0 ] ,
/* lorry + bus */ stats - > num_vehicle [ 1 ] + stats - > num_vehicle [ 2 ] ,
/* planes */ stats - > num_vehicle [ 3 ] ,
/* ships */ stats - > num_vehicle [ 4 ] ,
/* protected */ StrEmpty ( _network_company_states [ c - > index ] . password ) ? " un " : " " ) ;
2006-05-11 14:08:03 +00:00
}
return true ;
}
2008-09-30 20:39:50 +00:00
DEF_CONSOLE_CMD ( ConSayCompany )
2004-12-04 17:54:56 +00:00
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2008-09-30 20:39:50 +00:00
IConsoleHelp ( " Chat to a certain company in a multiplayer game. Usage: 'say_company <company-no> \" <msg> \" ' " ) ;
IConsoleHelp ( " CompanyNo is the company that plays as company <companyno>, 1 through max_companies " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
if ( argc ! = 3 ) return false ;
2004-12-04 17:54:56 +00:00
2008-09-30 20:39:50 +00:00
CompanyID company_id = ( CompanyID ) ( atoi ( argv [ 1 ] ) - 1 ) ;
2009-05-17 01:00:56 +00:00
if ( ! Company : : IsValidID ( company_id ) ) {
2008-09-30 20:39:50 +00:00
IConsolePrintF ( CC_DEFAULT , " Unknown company. Company range is between 1 and %d. " , MAX_COMPANIES ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
if ( ! _network_server ) {
2008-09-30 20:39:50 +00:00
NetworkClientSendChat ( NETWORK_ACTION_CHAT_COMPANY , DESTTYPE_TEAM , company_id , argv [ 2 ] ) ;
2006-06-27 21:25:53 +00:00
} else {
2008-12-22 12:59:31 +00:00
NetworkServerSendChat ( NETWORK_ACTION_CHAT_COMPANY , DESTTYPE_TEAM , company_id , argv [ 2 ] , CLIENT_ID_SERVER ) ;
2006-06-27 21:25:53 +00:00
}
2005-05-02 15:52:19 +00:00
return true ;
2004-12-04 17:54:56 +00:00
}
DEF_CONSOLE_CMD ( ConSayClient )
{
2005-05-02 15:52:19 +00:00
if ( argc = = 0 ) {
2008-09-30 20:39:50 +00:00
IConsoleHelp ( " Chat to a certain client in a multiplayer game. Usage: 'say_client <client-no> \" <msg> \" ' " ) ;
2005-07-08 22:25:24 +00:00
IConsoleHelp ( " For client-id's, see the command 'clients' " ) ;
2005-05-02 15:52:19 +00:00
return true ;
}
if ( argc ! = 3 ) return false ;
if ( ! _network_server ) {
2008-05-30 18:20:26 +00:00
NetworkClientSendChat ( NETWORK_ACTION_CHAT_CLIENT , DESTTYPE_CLIENT , atoi ( argv [ 1 ] ) , argv [ 2 ] ) ;
2006-06-27 21:25:53 +00:00
} else {
2008-12-22 12:59:31 +00:00
NetworkServerSendChat ( NETWORK_ACTION_CHAT_CLIENT , DESTTYPE_CLIENT , atoi ( argv [ 1 ] ) , argv [ 2 ] , CLIENT_ID_SERVER ) ;
2006-06-27 21:25:53 +00:00
}
2005-05-02 15:52:19 +00:00
return true ;
2004-12-04 17:54:56 +00:00
}
2008-12-22 18:20:28 +00:00
extern void HashCurrentCompanyPassword ( const char * password ) ;
2007-12-02 15:12:19 +00:00
2008-09-30 20:39:50 +00:00
/* Also use from within company_gui to change the password graphically */
2005-05-02 15:52:19 +00:00
bool NetworkChangeCompanyPassword ( byte argc , char * argv [ ] )
{
if ( argc = = 0 ) {
2008-12-22 18:20:28 +00:00
IConsoleHelp ( " Change the password of your company. Usage: 'company_pw \" <password> \" ' " ) ;
IConsoleHelp ( " Use \" * \" to disable the password. " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-12-04 17:54:56 +00:00
}
2009-05-17 01:00:56 +00:00
if ( ! Company : : IsValidID ( _local_company ) ) {
2005-05-02 15:52:19 +00:00
IConsoleError ( " You have to own a company to make use of this command. " ) ;
return false ;
2005-01-15 20:09:16 +00:00
}
2005-05-02 15:52:19 +00:00
if ( argc ! = 1 ) return false ;
2004-12-13 15:07:33 +00:00
2006-06-14 13:22:30 +00:00
if ( strcmp ( argv [ 0 ] , " * " ) = = 0 ) argv [ 0 ] [ 0 ] = ' \0 ' ;
2004-12-13 15:07:33 +00:00
2007-12-02 15:12:19 +00:00
if ( ! _network_server ) {
2008-12-22 18:20:28 +00:00
NetworkClientSetPassword ( argv [ 0 ] ) ;
2007-12-02 15:12:19 +00:00
} else {
2008-12-22 18:20:28 +00:00
HashCurrentCompanyPassword ( argv [ 0 ] ) ;
2007-12-02 15:12:19 +00:00
}
2005-05-02 15:52:19 +00:00
2008-12-22 18:20:28 +00:00
IConsolePrintF ( CC_WARNING , " 'company_pw' changed to: %s " , argv [ 0 ] ) ;
2005-05-28 16:59:51 +00:00
2005-05-02 15:52:19 +00:00
return true ;
}
2004-12-04 17:54:56 +00:00
2009-05-24 17:49:08 +00:00
/* Content downloading only is available with ZLIB */
# if defined(WITH_ZLIB)
2009-01-21 09:22:49 +00:00
# include "network/network_content.h"
/** Resolve a string to a content type. */
static ContentType StringToContentType ( const char * str )
{
2009-09-20 23:11:01 +00:00
static const char * const inv_lookup [ ] = { " " , " base " , " newgrf " , " ai " , " ailib " , " scenario " , " heightmap " } ;
2009-01-21 09:22:49 +00:00
for ( uint i = 1 /* there is no type 0 */ ; i < lengthof ( inv_lookup ) ; i + + ) {
if ( strcasecmp ( str , inv_lookup [ i ] ) = = 0 ) return ( ContentType ) i ;
}
return CONTENT_TYPE_END ;
}
/** Asynchronous callback */
struct ConsoleContentCallback : public ContentCallback {
void OnConnect ( bool success )
{
IConsolePrintF ( CC_DEFAULT , " Content server connection %s " , success ? " established " : " failed " ) ;
}
void OnDisconnect ( )
{
IConsolePrintF ( CC_DEFAULT , " Content server connection closed " ) ;
}
void OnDownloadComplete ( ContentID cid )
{
IConsolePrintF ( CC_DEFAULT , " Completed download of %d " , cid ) ;
}
} ;
DEF_CONSOLE_CMD ( ConContent )
{
static ContentCallback * cb = NULL ;
if ( cb = = NULL ) {
cb = new ConsoleContentCallback ( ) ;
_network_content_client . AddCallback ( cb ) ;
}
if ( argc < = 1 ) {
IConsoleHelp ( " Query, select and download content. Usage: 'content update|upgrade|select [all|id]|unselect [all|id]|state|download' " ) ;
IConsoleHelp ( " update: get a new list of downloadable content; must be run first " ) ;
IConsoleHelp ( " upgrade: select all items that are upgrades " ) ;
2009-01-24 14:02:21 +00:00
IConsoleHelp ( " select: select a specific item given by its id or 'all' to select all " ) ;
IConsoleHelp ( " unselect: unselect a specific item given by its id or 'all' to unselect all " ) ;
2009-01-21 09:22:49 +00:00
IConsoleHelp ( " state: show the download/select state of all downloadable content " ) ;
IConsoleHelp ( " download: download all content you've selected " ) ;
return true ;
}
if ( strcasecmp ( argv [ 1 ] , " update " ) = = 0 ) {
_network_content_client . RequestContentList ( ( argc > 2 ) ? StringToContentType ( argv [ 2 ] ) : CONTENT_TYPE_END ) ;
return true ;
}
if ( strcasecmp ( argv [ 1 ] , " upgrade " ) = = 0 ) {
_network_content_client . SelectUpgrade ( ) ;
return true ;
}
if ( strcasecmp ( argv [ 1 ] , " select " ) = = 0 ) {
if ( argc < = 2 ) {
IConsoleError ( " You must enter the id. " ) ;
return false ;
}
if ( strcasecmp ( argv [ 2 ] , " all " ) = = 0 ) {
_network_content_client . SelectAll ( ) ;
} else {
_network_content_client . Select ( ( ContentID ) atoi ( argv [ 2 ] ) ) ;
}
return true ;
}
if ( strcasecmp ( argv [ 1 ] , " unselect " ) = = 0 ) {
if ( argc < = 2 ) {
IConsoleError ( " You must enter the id. " ) ;
return false ;
}
if ( strcasecmp ( argv [ 2 ] , " all " ) = = 0 ) {
_network_content_client . UnselectAll ( ) ;
} else {
_network_content_client . Unselect ( ( ContentID ) atoi ( argv [ 2 ] ) ) ;
}
return true ;
}
if ( strcasecmp ( argv [ 1 ] , " state " ) = = 0 ) {
IConsolePrintF ( CC_WHITE , " id, type, state, name " ) ;
for ( ConstContentIterator iter = _network_content_client . Begin ( ) ; iter ! = _network_content_client . End ( ) ; iter + + ) {
2009-12-22 21:40:29 +00:00
static const char * const types [ ] = { " Base graphics " , " NewGRF " , " AI " , " AI library " , " Scenario " , " Heightmap " , " Base sound " , " Base music " } ;
2009-12-12 21:56:13 +00:00
assert_compile ( lengthof ( types ) = = CONTENT_TYPE_END - CONTENT_TYPE_BEGIN ) ;
2009-10-02 15:13:15 +00:00
static const char * const states [ ] = { " Not selected " , " Selected " , " Dep Selected " , " Installed " , " Unknown " } ;
2009-09-20 23:11:01 +00:00
static const ConsoleColour state_to_colour [ ] = { CC_COMMAND , CC_INFO , CC_INFO , CC_WHITE , CC_ERROR } ;
2009-01-21 09:22:49 +00:00
const ContentInfo * ci = * iter ;
IConsolePrintF ( state_to_colour [ ci - > state ] , " %d, %s, %s, %s " , ci - > id , types [ ci - > type - 1 ] , states [ ci - > state ] , ci - > name ) ;
}
return true ;
}
if ( strcasecmp ( argv [ 1 ] , " download " ) = = 0 ) {
uint files ;
uint bytes ;
_network_content_client . DownloadSelectedContent ( files , bytes ) ;
IConsolePrintF ( CC_DEFAULT , " Downloading %d file(s) (%d bytes) " , files , bytes ) ;
return true ;
}
return false ;
}
2009-05-24 17:49:08 +00:00
# endif /* defined(WITH_ZLIB) */
2006-09-17 11:33:19 +00:00
# endif /* ENABLE_NETWORK */
2004-12-16 13:59:23 +00:00
2009-02-08 12:25:13 +00:00
DEF_CONSOLE_CMD ( ConSetting )
2005-05-02 15:52:19 +00:00
{
if ( argc = = 0 ) {
2009-02-08 12:25:13 +00:00
IConsoleHelp ( " Change setting for all clients. Usage: 'setting <name> [<value>]' " ) ;
IConsoleHelp ( " Omitting <value> will print out the current value of the setting. " ) ;
2005-05-02 15:52:19 +00:00
return true ;
2004-12-16 13:59:23 +00:00
}
2005-05-02 15:52:19 +00:00
if ( argc = = 1 | | argc > 3 ) return false ;
2004-12-16 13:59:23 +00:00
2005-05-02 15:52:19 +00:00
if ( argc = = 2 ) {
2009-02-08 12:25:13 +00:00
IConsoleGetSetting ( argv [ 1 ] ) ;
2006-06-27 21:25:53 +00:00
} else {
2009-02-08 12:25:13 +00:00
IConsoleSetSetting ( argv [ 1 ] , argv [ 2 ] ) ;
2006-06-27 21:25:53 +00:00
}
2004-12-23 17:37:26 +00:00
2005-05-02 15:52:19 +00:00
return true ;
}
2004-12-13 15:07:33 +00:00
2010-01-28 23:17:28 +00:00
DEF_CONSOLE_CMD ( ConSettingNewgame )
{
if ( argc = = 0 ) {
IConsoleHelp ( " Change setting for the next game. Usage: 'setting_newgame <name> [<value>]' " ) ;
IConsoleHelp ( " Omitting <value> will print out the current value of the setting. " ) ;
return true ;
}
if ( argc = = 1 | | argc > 3 ) return false ;
if ( argc = = 2 ) {
IConsoleGetSetting ( argv [ 1 ] , true ) ;
} else {
IConsoleSetSetting ( argv [ 1 ] , argv [ 2 ] , true ) ;
}
return true ;
}
2009-02-08 12:25:13 +00:00
DEF_CONSOLE_CMD ( ConListSettings )
2007-04-05 12:59:57 +00:00
{
if ( argc = = 0 ) {
2009-02-08 12:25:13 +00:00
IConsoleHelp ( " List settings. Usage: 'list_settings [<pre-filter>]' " ) ;
2007-04-05 12:59:57 +00:00
return true ;
}
2008-08-11 17:15:31 +00:00
if ( argc > 2 ) return false ;
2007-04-05 12:59:57 +00:00
2009-02-08 12:25:13 +00:00
IConsoleListSettings ( ( argc = = 2 ) ? argv [ 1 ] : NULL ) ;
2007-04-05 12:59:57 +00:00
return true ;
}
2005-05-02 15:52:19 +00:00
DEF_CONSOLE_CMD ( ConListDumpVariables )
{
const IConsoleVar * var ;
size_t l = 0 ;
if ( argc = = 0 ) {
IConsoleHelp ( " List all variables with their value. Usage: 'dump_vars [<pre-filter>]' " ) ;
return true ;
2004-12-13 16:16:28 +00:00
}
2005-05-02 15:52:19 +00:00
if ( argv [ 1 ] ! = NULL ) l = strlen ( argv [ 1 ] ) ;
2004-12-13 16:16:28 +00:00
2005-05-02 15:52:19 +00:00
for ( var = _iconsole_vars ; var ! = NULL ; var = var - > next ) {
if ( argv [ 1 ] = = NULL | | strncmp ( var - > name , argv [ 1 ] , l ) = = 0 )
IConsoleVarPrintGetValue ( var ) ;
}
2004-12-13 15:07:33 +00:00
2005-05-02 15:52:19 +00:00
return true ;
2004-12-04 17:54:56 +00:00
}
2008-06-03 18:35:58 +00:00
DEF_CONSOLE_CMD ( ConGamelogPrint )
{
GamelogPrintConsole ( ) ;
return true ;
}
2004-12-04 17:54:56 +00:00
2004-09-12 21:49:38 +00:00
# ifdef _DEBUG
2009-03-15 00:32:18 +00:00
/*******************************************
* debug commands and variables
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2004-09-12 21:49:38 +00:00
2007-03-07 11:47:46 +00:00
static void IConsoleDebugLibRegister ( )
2004-09-12 21:49:38 +00:00
{
2007-02-23 11:50:43 +00:00
/* debugging variables and functions */
extern bool _stdlib_con_developer ; // XXX extern in .cpp
2004-09-19 15:24:45 +00:00
2005-05-02 15:52:19 +00:00
IConsoleVarRegister ( " con_developer " , & _stdlib_con_developer , ICONSOLE_VAR_BOOLEAN , " Enable/disable console debugging information (internal) " ) ;
IConsoleCmdRegister ( " resettile " , ConResetTile ) ;
2006-04-22 08:45:58 +00:00
IConsoleCmdRegister ( " stopall " , ConStopAllVehicles ) ;
2005-05-02 15:52:19 +00:00
IConsoleAliasRegister ( " dbg_echo " , " echo %A; echo %B " ) ;
IConsoleAliasRegister ( " dbg_echo2 " , " echo %! " ) ;
2004-09-12 21:49:38 +00:00
}
# endif
2009-03-15 00:32:18 +00:00
/*******************************************
* console command and variable registration
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2004-09-12 21:49:38 +00:00
2007-03-07 11:47:46 +00:00
void IConsoleStdLibRegister ( )
2004-09-12 21:49:38 +00:00
{
2007-02-23 11:50:43 +00:00
/* stdlib */
extern byte _stdlib_developer ; // XXX extern in .cpp
2004-09-12 21:49:38 +00:00
2007-02-23 11:50:43 +00:00
/* default variables and functions */
2004-09-19 15:24:45 +00:00
IConsoleCmdRegister ( " debug_level " , ConDebugLevel ) ;
IConsoleCmdRegister ( " dump_vars " , ConListDumpVariables ) ;
IConsoleCmdRegister ( " echo " , ConEcho ) ;
IConsoleCmdRegister ( " echoc " , ConEchoC ) ;
IConsoleCmdRegister ( " exec " , ConExec ) ;
IConsoleCmdRegister ( " exit " , ConExit ) ;
2005-05-15 10:40:53 +00:00
IConsoleCmdRegister ( " part " , ConPart ) ;
2004-09-19 15:24:45 +00:00
IConsoleCmdRegister ( " help " , ConHelp ) ;
IConsoleCmdRegister ( " info_cmd " , ConInfoCmd ) ;
IConsoleCmdRegister ( " info_var " , ConInfoVar ) ;
2009-01-12 17:11:45 +00:00
IConsoleCmdRegister ( " list_ai " , ConListAI ) ;
2004-09-19 15:24:45 +00:00
IConsoleCmdRegister ( " list_cmds " , ConListCommands ) ;
IConsoleCmdRegister ( " list_vars " , ConListVariables ) ;
2005-05-02 15:52:19 +00:00
IConsoleCmdRegister ( " list_aliases " , ConListAliases ) ;
IConsoleCmdRegister ( " newgame " , ConNewGame ) ;
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
- New optional landscape generator (TerraGenesis Perlin)
- Load heightmaps (either BMP or PNG)
- Progress dialog while generating worlds (no longer a 'hanging' screen)
- New dialogs for NewGame, Create Scenario and Play Heightmap
- Easier to configure your landscape
- More things to configure (tree-placer, ..)
- Speedup of world generation
- New console command 'restart': restart the map EXACTLY as it was when you
first started it (needs a game made after or with this commit)
- New console command 'getseed': get the seed of your map and share it with
others (of course only works with generated maps)
- Many new, world generation related, things
- Many internal cleanups and rewrites
Many tnx to those people who helped making this:
Belugas, DaleStan, glx, KUDr, RichK67, Rubidium, and TrueLight (alfabetic)
Many tnx to those who helped testing:
Arnau, Bjarni, and tokai (alfabetic)
And to all other people who helped testing and sending comments / bugs
Stats: 673 lines changed, 3534 new lines, 79 new strings
2006-08-19 10:00:30 +00:00
IConsoleCmdRegister ( " restart " , ConRestart ) ;
IConsoleCmdRegister ( " getseed " , ConGetSeed ) ;
2007-06-13 14:52:41 +00:00
IConsoleCmdRegister ( " getdate " , ConGetDate ) ;
2004-09-19 15:24:45 +00:00
IConsoleCmdRegister ( " quit " , ConExit ) ;
2009-01-14 15:39:05 +00:00
IConsoleCmdRegister ( " reload_ai " , ConReloadAI ) ;
2009-01-12 17:11:45 +00:00
IConsoleCmdRegister ( " rescan_ai " , ConRescanAI ) ;
2004-09-19 15:24:45 +00:00
IConsoleCmdRegister ( " resetengines " , ConResetEngines ) ;
2005-05-02 15:52:19 +00:00
IConsoleCmdRegister ( " return " , ConReturn ) ;
IConsoleCmdRegister ( " screenshot " , ConScreenShot ) ;
IConsoleCmdRegister ( " script " , ConScript ) ;
IConsoleCmdRegister ( " scrollto " , ConScrollToTile ) ;
2005-07-08 22:25:24 +00:00
IConsoleCmdRegister ( " alias " , ConAlias ) ;
IConsoleCmdRegister ( " load " , ConLoad ) ;
2005-09-11 14:57:56 +00:00
IConsoleCmdRegister ( " rm " , ConRemove ) ;
2005-07-08 22:25:24 +00:00
IConsoleCmdRegister ( " save " , ConSave ) ;
2007-01-03 18:06:50 +00:00
IConsoleCmdRegister ( " saveconfig " , ConSaveConfig ) ;
2009-01-12 17:11:45 +00:00
IConsoleCmdRegister ( " start_ai " , ConStartAI ) ;
IConsoleCmdRegister ( " stop_ai " , ConStopAI ) ;
2005-05-02 15:52:19 +00:00
IConsoleCmdRegister ( " ls " , ConListFiles ) ;
IConsoleCmdRegister ( " cd " , ConChangeDirectory ) ;
IConsoleCmdRegister ( " pwd " , ConPrintWorkingDirectory ) ;
2005-05-16 13:46:26 +00:00
IConsoleCmdRegister ( " clear " , ConClearBuffer ) ;
2009-02-08 12:25:13 +00:00
IConsoleCmdRegister ( " setting " , ConSetting ) ;
2010-01-28 23:17:28 +00:00
IConsoleCmdRegister ( " setting_newgame " , ConSettingNewgame ) ;
2009-02-08 12:25:13 +00:00
IConsoleCmdRegister ( " list_settings " , ConListSettings ) ;
2008-06-03 18:35:58 +00:00
IConsoleCmdRegister ( " gamelog " , ConGamelogPrint ) ;
2005-05-02 15:52:19 +00:00
2009-02-08 12:25:13 +00:00
IConsoleAliasRegister ( " dir " , " ls " ) ;
IConsoleAliasRegister ( " del " , " rm %+ " ) ;
IConsoleAliasRegister ( " newmap " , " newgame " ) ;
IConsoleAliasRegister ( " new_map " , " newgame " ) ;
IConsoleAliasRegister ( " new_game " , " newgame " ) ;
IConsoleAliasRegister ( " patch " , " setting %+ " ) ;
2009-02-08 12:42:45 +00:00
IConsoleAliasRegister ( " set " , " setting %+ " ) ;
2010-01-28 23:17:28 +00:00
IConsoleAliasRegister ( " set_newgame " , " setting_newgame %+ " ) ;
2009-02-08 12:25:13 +00:00
IConsoleAliasRegister ( " list_patches " , " list_settings %+ " ) ;
2004-12-05 12:25:25 +00:00
2005-05-02 15:52:19 +00:00
IConsoleVarRegister ( " developer " , & _stdlib_developer , ICONSOLE_VAR_BYTE , " Redirect debugging output from the console/command line to the ingame console (value 2). Default value: 1 " ) ;
2005-01-08 00:48:10 +00:00
2005-05-02 15:52:19 +00:00
/* networking variables and functions */
2004-12-04 17:54:56 +00:00
# ifdef ENABLE_NETWORK
2006-01-25 18:40:12 +00:00
/* Network hooks; only active in network */
IConsoleCmdHookAdd ( " resetengines " , ICONSOLE_HOOK_ACCESS , ConHookNoNetwork ) ;
2009-05-24 17:49:08 +00:00
/* Content downloading is only available with ZLIB */
# if defined(WITH_ZLIB)
2009-01-21 09:22:49 +00:00
IConsoleCmdRegister ( " content " , ConContent ) ;
2009-05-24 17:49:08 +00:00
# endif /* defined(WITH_ZLIB) */
2006-01-25 18:40:12 +00:00
2005-05-02 15:52:19 +00:00
/*** Networking commands ***/
IConsoleCmdRegister ( " say " , ConSay ) ;
IConsoleCmdHookAdd ( " say " , ICONSOLE_HOOK_ACCESS , ConHookNeedNetwork ) ;
2008-09-30 20:39:50 +00:00
IConsoleCmdRegister ( " companies " , ConCompanies ) ;
IConsoleCmdHookAdd ( " companies " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
IConsoleAliasRegister ( " players " , " companies " ) ;
IConsoleCmdRegister ( " say_company " , ConSayCompany ) ;
IConsoleCmdHookAdd ( " say_company " , ICONSOLE_HOOK_ACCESS , ConHookNeedNetwork ) ;
IConsoleAliasRegister ( " say_player " , " say_company %+ " ) ;
2005-05-02 15:52:19 +00:00
IConsoleCmdRegister ( " say_client " , ConSayClient ) ;
IConsoleCmdHookAdd ( " say_client " , ICONSOLE_HOOK_ACCESS , ConHookNeedNetwork ) ;
2006-01-25 18:40:12 +00:00
2005-05-02 15:52:19 +00:00
IConsoleCmdRegister ( " connect " , ConNetworkConnect ) ;
IConsoleCmdHookAdd ( " connect " , ICONSOLE_HOOK_ACCESS , ConHookClientOnly ) ;
IConsoleCmdRegister ( " clients " , ConNetworkClients ) ;
2005-05-04 10:17:00 +00:00
IConsoleCmdHookAdd ( " clients " , ICONSOLE_HOOK_ACCESS , ConHookNeedNetwork ) ;
2005-05-02 15:52:19 +00:00
IConsoleCmdRegister ( " status " , ConStatus ) ;
IConsoleCmdHookAdd ( " status " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
2006-01-25 18:40:12 +00:00
IConsoleCmdRegister ( " server_info " , ConServerInfo ) ;
IConsoleCmdHookAdd ( " server_info " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
IConsoleAliasRegister ( " info " , " server_info " ) ;
2009-09-07 21:03:41 +00:00
IConsoleCmdRegister ( " reconnect " , ConNetworkReconnect ) ;
IConsoleCmdHookAdd ( " reconnect " , ICONSOLE_HOOK_ACCESS , ConHookClientOnly ) ;
2005-05-02 15:52:19 +00:00
IConsoleCmdRegister ( " rcon " , ConRcon ) ;
IConsoleCmdHookAdd ( " rcon " , ICONSOLE_HOOK_ACCESS , ConHookNeedNetwork ) ;
2009-01-23 22:18:06 +00:00
IConsoleCmdRegister ( " join " , ConJoinCompany ) ;
2009-02-18 15:17:27 +00:00
IConsoleCmdHookAdd ( " join " , ICONSOLE_HOOK_ACCESS , ConHookNeedNetwork ) ;
2009-01-23 22:18:06 +00:00
IConsoleAliasRegister ( " spectate " , " join 255 " ) ;
IConsoleCmdRegister ( " move " , ConMoveClient ) ;
IConsoleCmdHookAdd ( " move " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
2006-01-25 18:40:12 +00:00
IConsoleCmdRegister ( " reset_company " , ConResetCompany ) ;
IConsoleCmdHookAdd ( " reset_company " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
IConsoleAliasRegister ( " clean_company " , " reset_company %A " ) ;
2009-01-21 23:07:11 +00:00
IConsoleCmdRegister ( " client_name " , ConClientNickChange ) ;
IConsoleCmdHookAdd ( " client_name " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
2006-01-25 18:40:12 +00:00
IConsoleCmdRegister ( " kick " , ConKick ) ;
IConsoleCmdHookAdd ( " kick " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
2005-05-02 15:52:19 +00:00
IConsoleCmdRegister ( " ban " , ConBan ) ;
IConsoleCmdHookAdd ( " ban " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
IConsoleCmdRegister ( " unban " , ConUnBan ) ;
IConsoleCmdHookAdd ( " unban " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
IConsoleCmdRegister ( " banlist " , ConBanList ) ;
IConsoleCmdHookAdd ( " banlist " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
2006-01-25 18:40:12 +00:00
2005-05-02 15:52:19 +00:00
IConsoleCmdRegister ( " pause " , ConPauseGame ) ;
IConsoleCmdHookAdd ( " pause " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
IConsoleCmdRegister ( " unpause " , ConUnPauseGame ) ;
IConsoleCmdHookAdd ( " unpause " , ICONSOLE_HOOK_ACCESS , ConHookServerOnly ) ;
/*** Networking variables ***/
IConsoleVarStringRegister ( " company_pw " , NULL , 0 , " Set a password for your company, so no one without the correct password can join. Use '*' to clear the password " ) ;
IConsoleVarHookAdd ( " company_pw " , ICONSOLE_HOOK_ACCESS , ConHookNeedNetwork ) ;
IConsoleVarProcAdd ( " company_pw " , NetworkChangeCompanyPassword ) ;
IConsoleAliasRegister ( " company_password " , " company_pw %+ " ) ;
2009-02-08 12:25:13 +00:00
IConsoleAliasRegister ( " net_frame_freq " , " setting frame_freq %+ " ) ;
IConsoleAliasRegister ( " net_sync_freq " , " setting sync_freq %+ " ) ;
IConsoleAliasRegister ( " server_pw " , " setting server_password %+ " ) ;
IConsoleAliasRegister ( " server_password " , " setting server_password %+ " ) ;
IConsoleAliasRegister ( " rcon_pw " , " setting rcon_password %+ " ) ;
IConsoleAliasRegister ( " rcon_password " , " setting rcon_password %+ " ) ;
IConsoleAliasRegister ( " name " , " setting client_name %+ " ) ;
IConsoleAliasRegister ( " server_name " , " setting server_name %+ " ) ;
IConsoleAliasRegister ( " server_port " , " setting server_port %+ " ) ;
IConsoleAliasRegister ( " server_advertise " , " setting server_advertise %+ " ) ;
IConsoleAliasRegister ( " max_clients " , " setting max_clients %+ " ) ;
IConsoleAliasRegister ( " max_companies " , " setting max_companies %+ " ) ;
IConsoleAliasRegister ( " max_spectators " , " setting max_spectators %+ " ) ;
IConsoleAliasRegister ( " max_join_time " , " setting max_join_time %+ " ) ;
IConsoleAliasRegister ( " pause_on_join " , " setting pause_on_join %+ " ) ;
IConsoleAliasRegister ( " autoclean_companies " , " setting autoclean_companies %+ " ) ;
IConsoleAliasRegister ( " autoclean_protected " , " setting autoclean_protected %+ " ) ;
IConsoleAliasRegister ( " autoclean_unprotected " , " setting autoclean_unprotected %+ " ) ;
IConsoleAliasRegister ( " restart_game_year " , " setting restart_game_year %+ " ) ;
IConsoleAliasRegister ( " min_players " , " setting min_active_clients %+ " ) ;
IConsoleAliasRegister ( " reload_cfg " , " setting reload_cfg %+ " ) ;
2004-12-04 17:54:56 +00:00
# endif /* ENABLE_NETWORK */
2004-09-12 21:49:38 +00:00
2009-03-15 00:32:18 +00:00
/* debugging stuff */
2004-12-05 12:25:25 +00:00
# ifdef _DEBUG
IConsoleDebugLibRegister ( ) ;
# endif
2004-09-12 21:49:38 +00:00
}