diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -888,6 +888,11 @@ CommandCost CmdCompanyCtrl(DoCommandFlag break; } + /* Send new companies, before potentially setting the password. Otherwise, + * the password update could be sent when the company is not yet known. */ + NetworkAdminCompanyNew(c); + NetworkServerNewCompany(c, ci); + /* This is the client (or non-dedicated server) who wants a new company */ if (client_id == _network_own_client_id) { assert(_local_company == COMPANY_SPECTATOR); @@ -906,8 +911,6 @@ CommandCost CmdCompanyCtrl(DoCommandFlag MarkWholeScreenDirty(); } - - NetworkServerNewCompany(c, ci); break; } @@ -923,7 +926,10 @@ CommandCost CmdCompanyCtrl(DoCommandFlag assert(company_id == INVALID_COMPANY || !Company::IsValidID(company_id)); Company *c = DoStartupNewCompany(true, company_id); - if (c != nullptr) NetworkServerNewCompany(c, nullptr); + if (c != nullptr) { + NetworkAdminCompanyNew(c); + NetworkServerNewCompany(c, nullptr); + } break; } diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -853,11 +853,10 @@ void NetworkAdminClientError(ClientID cl } /** - * Notify the admin network of company details. + * Notify the admin network of a new company. * @param company the company of which details will be sent into the admin network. - * @param new_company whether this is a new company or not. */ -void NetworkAdminCompanyInfo(const Company *company, bool new_company) +void NetworkAdminCompanyNew(const Company *company) { if (company == nullptr) { Debug(net, 1, "[admin] Empty company given for update"); @@ -867,10 +866,8 @@ void NetworkAdminCompanyInfo(const Compa for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_COMPANY_INFO] != ADMIN_FREQUENCY_AUTOMATIC) continue; + as->SendCompanyNew(company->index); as->SendCompanyInfo(company); - if (new_company) { - as->SendCompanyNew(company->index); - } } } diff --git a/src/network/network_admin.h b/src/network/network_admin.h --- a/src/network/network_admin.h +++ b/src/network/network_admin.h @@ -103,7 +103,7 @@ void NetworkAdminClientInfo(const Networ void NetworkAdminClientUpdate(const NetworkClientInfo *ci); void NetworkAdminClientQuit(ClientID client_id); void NetworkAdminClientError(ClientID client_id, NetworkErrorCode error_code); -void NetworkAdminCompanyInfo(const Company *company, bool new_company); +void NetworkAdminCompanyNew(const Company *company); void NetworkAdminCompanyUpdate(const Company *company); void NetworkAdminCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -2198,9 +2198,6 @@ void NetworkServerNewCompany(const Compa Command::SendNet(STR_NULL, c->index, ci->client_name); } - /* Announce new company on network. */ - NetworkAdminCompanyInfo(c, true); - if (ci != nullptr) { /* ci is nullptr when replaying, or for AIs. In neither case there is a client. We need to send Admin port update here so that they first know about the new company