Index: src/console_cmds.cpp =================================================================== --- src/console_cmds.cpp (revision 16089) +++ src/console_cmds.cpp (working copy) @@ -746,6 +746,45 @@ return true; } +DEF_CONSOLE_CMD(ConNetworkReconnect) +{ + if (argc == 0) { + IConsoleHelp("Reconnect to server to which you were connected last time. Usage: 'reconnect []'"); + 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; + } + + const char *ip = _settings_client.network.last_host; + uint16 port = _settings_client.network.last_port; + _network_playas = COMPANY_SPECTATOR; + + if (argc >= 2) { + int playas = atoi(argv[1]); + if (playas < 0) return false; + if (playas > 255) return false; + _network_playas = (CompanyID)playas; + if (_network_playas == 0) { + _network_playas = COMPANY_NEW_COMPANY; + } else if (_network_playas != COMPANY_SPECTATOR) { + /* 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) */ + _network_playas--; + if (_network_playas >= MAX_COMPANIES) return false; + } + } + + if (StrEmpty(ip)) { + IConsolePrint(CC_DEFAULT, "No server for reconnecting."); + return true; + } + + IConsolePrintF(CC_DEFAULT, "Reconnecting to %s:%d...", ip, port); + + NetworkClientConnectGame(NetworkAddress(ip, port)); + return true; +}; + DEF_CONSOLE_CMD(ConNetworkConnect) { char *ip; @@ -1782,6 +1879,8 @@ IConsoleCmdRegister("server_info", ConServerInfo); IConsoleCmdHookAdd("server_info", ICONSOLE_HOOK_ACCESS, ConHookServerOnly); IConsoleAliasRegister("info", "server_info"); + IConsoleCmdRegister("reconnect", ConNetworkReconnect); + IConsoleCmdHookAdd("reconnect", ICONSOLE_HOOK_ACCESS, ConHookClientOnly); IConsoleCmdRegister("rcon", ConRcon); IConsoleCmdHookAdd("rcon", ICONSOLE_HOOK_ACCESS, ConHookNeedNetwork);