Index: src/network/network_client.cpp =================================================================== --- src/network/network_client.cpp (Revision 12751) +++ src/network/network_client.cpp (Arbeitskopie) @@ -519,9 +519,14 @@ _password_game_seed = p->Recv_uint32(); p->Recv_string(_password_server_unique_id, sizeof(_password_server_unique_id)); if (MY_CLIENT->has_quit) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - + if (_company_pw != NULL) _login_pw = _company_pw; case NETWORK_GAME_PASSWORD: - ShowNetworkNeedPassword(type); + if (_login_pw == NULL) { + ShowNetworkNeedPassword(type); + } else { + SEND_COMMAND(PACKET_CLIENT_PASSWORD)(type, _login_pw); + _login_pw = NULL; + } return NETWORK_RECV_STATUS_OKAY; default: return NETWORK_RECV_STATUS_MALFORMED_PACKET; Index: src/network/network_internal.h =================================================================== --- src/network/network_internal.h (Revision 12751) +++ src/network/network_internal.h (Arbeitskopie) @@ -192,6 +192,9 @@ VARDEF Year _network_restart_game_year; // If this year is reached, the server automaticly restarts VARDEF uint8 _network_min_players; // Minimum number of players for game to unpause +VARDEF char *_login_pw; // login password from -p argument +VARDEF char *_company_pw; // company password from -P argument + void NetworkTCPQueryServer(const char* host, unsigned short port); byte NetworkSpectatorCount(); Index: src/openttd.cpp =================================================================== --- src/openttd.cpp (Revision 12751) +++ src/openttd.cpp (Arbeitskopie) @@ -151,6 +151,8 @@ " -G seed = Set random seed\n" #if defined(ENABLE_NETWORK) " -n [ip:port#player] = Start networkgame\n" + " -p password = Join password\n" + " -P password = Company password\n" " -D [ip][:port] = Start dedicated server\n" " -l ip[:port] = Redirect DEBUG()\n" #if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32) @@ -359,7 +361,7 @@ * a letter means: it accepts that param (e.g.: -h) * a ':' behind it means: it need a param (e.g.: -m) * a '::' behind it means: it can optional have a param (e.g.: -d) */ - optformat = "m:s:v:b:hD::n::eit:d::r:g::G:c:xl:" + optformat = "m:s:v:b:hD::n::eit:d::r:g::G:c:xl:p:P:" #if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32) "f" #endif @@ -398,6 +400,12 @@ case 'l': debuglog_conn = mgo.opt; break; + case 'p': + _login_pw = mgo.opt; + break; + case 'P': + _company_pw = mgo.opt; + break; #endif /* ENABLE_NETWORK */ case 'r': ParseResolution(resolution, mgo.opt); break; case 't': startyear = atoi(mgo.opt); break;