mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r20970) -Add: company change notification to remote admins (dihedral)
This commit is contained in:
parent
fe44944f32
commit
ae20cb4f3d
|
@ -21,6 +21,7 @@
|
|||
#include "network/network.h"
|
||||
#include "network/network_func.h"
|
||||
#include "network/network_base.h"
|
||||
#include "network/network_admin.h"
|
||||
#include "ai/ai.hpp"
|
||||
#include "company_manager_face.h"
|
||||
#include "window_func.h"
|
||||
|
@ -739,6 +740,28 @@ void CompanyNewsInformation::FillData(const Company *c, const Company *other)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Called whenever company related information changes in order to notify admins.
|
||||
* @param company The company data changed of.
|
||||
*/
|
||||
void CompanyAdminUpdate(const Company *company)
|
||||
{
|
||||
#ifdef ENABLE_NETWORK
|
||||
if (_network_server) NetworkAdminCompanyUpdate(company);
|
||||
#endif /* ENABLE_NETWORK */
|
||||
}
|
||||
|
||||
/**
|
||||
* Called whenever a company goes bankrupt in order to notify admins.
|
||||
* @param company_id The company that went bankrupt.
|
||||
*/
|
||||
void CompanyAdminBankrupt(CompanyID company_id)
|
||||
{
|
||||
#ifdef ENABLE_NETWORK
|
||||
if (_network_server) NetworkAdminCompanyRemove(company_id, ADMIN_CRR_BANKRUPT);
|
||||
#endif /* ENABLE_NETWORK */
|
||||
}
|
||||
|
||||
/**
|
||||
* Control the companies: add, delete, etc.
|
||||
* @param tile unused
|
||||
|
@ -827,6 +850,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||
|
||||
/* Announce new company on network, if the client was a SPECTATOR before */
|
||||
if (old_playas == COMPANY_SPECTATOR) {
|
||||
NetworkAdminCompanyInfo(c, true);
|
||||
NetworkServerSendChat(NETWORK_ACTION_COMPANY_NEW, DESTTYPE_BROADCAST, 0, "", ci->client_id, ci->client_playas + 1);
|
||||
}
|
||||
}
|
||||
|
@ -865,6 +889,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||
CompanyID c_index = c->index;
|
||||
delete c;
|
||||
AI::BroadcastNewEvent(new AIEventCompanyBankrupt(c_index));
|
||||
CompanyAdminBankrupt(c_index);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -935,6 +960,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
|||
if (scheme == LS_DEFAULT) {
|
||||
_company_colours[_current_company] = colour;
|
||||
c->colour = colour;
|
||||
CompanyAdminUpdate(c);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1032,6 +1058,7 @@ CommandCost CmdRenameCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
|||
free(c->name);
|
||||
c->name = reset ? NULL : strdup(text);
|
||||
MarkWholeScreenDirty();
|
||||
CompanyAdminUpdate(c);
|
||||
}
|
||||
|
||||
return CommandCost();
|
||||
|
@ -1089,6 +1116,7 @@ CommandCost CmdRenamePresident(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
|||
}
|
||||
|
||||
MarkWholeScreenDirty();
|
||||
CompanyAdminUpdate(c);
|
||||
}
|
||||
|
||||
return CommandCost();
|
||||
|
|
|
@ -21,6 +21,8 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner);
|
|||
void GetNameOfOwner(Owner owner, TileIndex tile);
|
||||
void SetLocalCompany(CompanyID new_company);
|
||||
void ShowBuyCompanyDialog(CompanyID company);
|
||||
void CompanyAdminUpdate(const Company *company);
|
||||
void CompanyAdminBankrupt(CompanyID company_id);
|
||||
|
||||
extern CompanyByte _local_company;
|
||||
extern CompanyByte _current_company;
|
||||
|
|
|
@ -534,6 +534,7 @@ static void CompanyCheckBankrupt(Company *c)
|
|||
CompanyID c_index = c->index;
|
||||
delete c;
|
||||
AI::BroadcastNewEvent(new AIEventCompanyBankrupt(c_index));
|
||||
CompanyAdminBankrupt(c_index);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1534,6 +1535,7 @@ CommandCost CmdBuyShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
|||
}
|
||||
}
|
||||
SetWindowDirty(WC_COMPANY, target_company);
|
||||
CompanyAdminUpdate(c);
|
||||
}
|
||||
return cost;
|
||||
}
|
||||
|
@ -1568,6 +1570,7 @@ CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1
|
|||
while (*b != _current_company) b++; // share owners is guaranteed to contain company
|
||||
*b = COMPANY_SPECTATOR;
|
||||
SetWindowDirty(WC_COMPANY, target_company);
|
||||
CompanyAdminUpdate(c);
|
||||
}
|
||||
return CommandCost(EXPENSES_OTHER, cost);
|
||||
}
|
||||
|
|
|
@ -69,6 +69,10 @@ NetworkRecvStatus NetworkAdminSocketHandler::HandlePacket(Packet *p)
|
|||
ADMIN_COMMAND(ADMIN_PACKET_SERVER_CLIENT_UPDATE)
|
||||
ADMIN_COMMAND(ADMIN_PACKET_SERVER_CLIENT_QUIT)
|
||||
ADMIN_COMMAND(ADMIN_PACKET_SERVER_CLIENT_ERROR)
|
||||
ADMIN_COMMAND(ADMIN_PACKET_SERVER_COMPANY_NEW)
|
||||
ADMIN_COMMAND(ADMIN_PACKET_SERVER_COMPANY_INFO)
|
||||
ADMIN_COMMAND(ADMIN_PACKET_SERVER_COMPANY_UPDATE)
|
||||
ADMIN_COMMAND(ADMIN_PACKET_SERVER_COMPANY_REMOVE)
|
||||
|
||||
default:
|
||||
if (this->HasClientQuit()) {
|
||||
|
@ -133,5 +137,9 @@ DEFINE_UNAVAILABLE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_INFO)
|
|||
DEFINE_UNAVAILABLE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_UPDATE)
|
||||
DEFINE_UNAVAILABLE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_QUIT)
|
||||
DEFINE_UNAVAILABLE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_ERROR)
|
||||
DEFINE_UNAVAILABLE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_NEW)
|
||||
DEFINE_UNAVAILABLE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_INFO)
|
||||
DEFINE_UNAVAILABLE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_UPDATE)
|
||||
DEFINE_UNAVAILABLE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_REMOVE)
|
||||
|
||||
#endif /* ENABLE_NETWORK */
|
||||
|
|
|
@ -45,6 +45,10 @@ enum PacketAdminType {
|
|||
ADMIN_PACKET_SERVER_CLIENT_UPDATE, ///< The server gives the admin an information update on a client.
|
||||
ADMIN_PACKET_SERVER_CLIENT_QUIT, ///< The server tells the admin that a client quit.
|
||||
ADMIN_PACKET_SERVER_CLIENT_ERROR, ///< The server tells the admin that a client caused an error.
|
||||
ADMIN_PACKET_SERVER_COMPANY_NEW, ///< The server tells the admin that a new company has started.
|
||||
ADMIN_PACKET_SERVER_COMPANY_INFO, ///< The server gives the admin information about a company.
|
||||
ADMIN_PACKET_SERVER_COMPANY_UPDATE, ///< The server gives the admin an information update on a company.
|
||||
ADMIN_PACKET_SERVER_COMPANY_REMOVE, ///< The server tells the admin that a company was removed.
|
||||
|
||||
INVALID_ADMIN_PACKET = 0xFF, ///< An invalid marker for admin packets.
|
||||
};
|
||||
|
@ -60,6 +64,7 @@ enum AdminStatus {
|
|||
enum AdminUpdateType {
|
||||
ADMIN_UPDATE_DATE, ///< Updates about the date of the game.
|
||||
ADMIN_UPDATE_CLIENT_INFO, ///< Updates about the information of clients.
|
||||
ADMIN_UPDATE_COMPANY_INFO, ///< Updates about the generic information of companies.
|
||||
ADMIN_UPDATE_END ///< Must ALWAYS be on the end of this list!! (period)
|
||||
};
|
||||
|
||||
|
@ -75,6 +80,13 @@ enum AdminUpdateFrequency {
|
|||
};
|
||||
DECLARE_ENUM_AS_BIT_SET(AdminUpdateFrequency);
|
||||
|
||||
/** Reasons for removing a company - communicated to admins. */
|
||||
enum AdminCompanyRemoveReason {
|
||||
ADMIN_CRR_MANUAL, ///< The company is manually removed.
|
||||
ADMIN_CRR_AUTOCLEAN, ///< The company is removed due to autoclean.
|
||||
ADMIN_CRR_BANKRUPT ///< The company went belly-up.
|
||||
};
|
||||
|
||||
#define DECLARE_ADMIN_RECEIVE_COMMAND(type) virtual NetworkRecvStatus NetworkPacketReceive_## type ##_command(Packet *p)
|
||||
#define DEF_ADMIN_RECEIVE_COMMAND(cls, type) NetworkRecvStatus cls ##NetworkAdminSocketHandler::NetworkPacketReceive_ ## type ## _command(Packet *p)
|
||||
|
||||
|
@ -110,6 +122,7 @@ protected:
|
|||
* uint8 #AdminUpdateType the server should answer for, only if #AdminUpdateFrequency #ADMIN_FREQUENCY_POLL is advertised in the PROTOCOL packet.
|
||||
* uint32 ID relevant to the packet type, e.g.
|
||||
* - the client ID for #ADMIN_UPDATE_CLIENT_INFO. Use UINT32_MAX to show all clients.
|
||||
* - the company ID for #ADMIN_UPDATE_COMPANY_INFO. Use UINT32_MAX to show all companies.
|
||||
*/
|
||||
DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_ADMIN_POLL);
|
||||
|
||||
|
@ -206,6 +219,46 @@ protected:
|
|||
*/
|
||||
DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_CLIENT_ERROR);
|
||||
|
||||
/**
|
||||
* Notification of a new company:
|
||||
* uint8 ID of the new company.
|
||||
*/
|
||||
DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_NEW);
|
||||
|
||||
/**
|
||||
* Company information on a specific company:
|
||||
* uint8 ID of the company.
|
||||
* string Name of the company.
|
||||
* string Name of the companies manager.
|
||||
* uint8 Main company colour.
|
||||
* bool Company is password protected.
|
||||
* uint32 Year the company was inaugurated.
|
||||
* bool Company is an AI.
|
||||
*/
|
||||
DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_INFO);
|
||||
|
||||
/**
|
||||
* Company information of a specific company:
|
||||
* uint8 ID of the company.
|
||||
* string Name of the company.
|
||||
* string Name of the companies manager.
|
||||
* uint8 Main company colour.
|
||||
* bool Company is password protected.
|
||||
* uint8 Quarters of bankruptcy.
|
||||
* uint8 Owner of share 1.
|
||||
* uint8 Owner of share 2.
|
||||
* uint8 Owner of share 3.
|
||||
* uint8 Owner of share 4.
|
||||
*/
|
||||
DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_UPDATE);
|
||||
|
||||
/**
|
||||
* Notification about a removed company (e.g. due to banrkuptcy).
|
||||
* uint8 ID of the company.
|
||||
* uint8 Reason for being removed (see #AdminCompanyRemoveReason).
|
||||
*/
|
||||
DECLARE_ADMIN_RECEIVE_COMMAND(ADMIN_PACKET_SERVER_COMPANY_REMOVE);
|
||||
|
||||
NetworkRecvStatus HandlePacket(Packet *p);
|
||||
public:
|
||||
NetworkRecvStatus CloseConnection(bool error = true);
|
||||
|
|
|
@ -42,6 +42,7 @@ static const int ADMIN_AUTHORISATION_TIMEOUT = 10000;
|
|||
static const AdminUpdateFrequency _admin_update_type_frequencies[] = {
|
||||
ADMIN_FREQUENCY_POLL | ADMIN_FREQUENCY_DAILY | ADMIN_FREQUENCY_WEEKLY | ADMIN_FREQUENCY_MONTHLY | ADMIN_FREQUENCY_QUARTERLY | ADMIN_FREQUENCY_ANUALLY, ///< ADMIN_UPDATE_DATE
|
||||
ADMIN_FREQUENCY_POLL | ADMIN_FREQUENCY_AUTOMATIC, ///< ADMIN_UPDATE_CLIENT_INFO
|
||||
ADMIN_FREQUENCY_POLL | ADMIN_FREQUENCY_AUTOMATIC, ///< ADMIN_UPDATE_COMPANY_INFO
|
||||
};
|
||||
assert_compile(lengthof(_admin_update_type_frequencies) == ADMIN_UPDATE_END);
|
||||
|
||||
|
@ -241,6 +242,83 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientError(ClientID clie
|
|||
return NETWORK_RECV_STATUS_OKAY;
|
||||
}
|
||||
|
||||
NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyNew(CompanyID company_id)
|
||||
{
|
||||
Packet *p = new Packet(ADMIN_PACKET_SERVER_COMPANY_NEW);
|
||||
p->Send_uint8(company_id);
|
||||
|
||||
this->Send_Packet(p);
|
||||
|
||||
return NETWORK_RECV_STATUS_OKAY;
|
||||
}
|
||||
|
||||
NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyInfo(const Company *c)
|
||||
{
|
||||
char company_name[NETWORK_COMPANY_NAME_LENGTH];
|
||||
char manager_name[NETWORK_COMPANY_NAME_LENGTH];
|
||||
|
||||
SetDParam(0, c->index);
|
||||
GetString(company_name, STR_COMPANY_NAME, lastof(company_name));
|
||||
|
||||
SetDParam(0, c->index);
|
||||
GetString(manager_name, STR_PRESIDENT_NAME, lastof(manager_name));
|
||||
|
||||
Packet *p = new Packet(ADMIN_PACKET_SERVER_COMPANY_INFO);
|
||||
|
||||
p->Send_uint8 (c->index);
|
||||
p->Send_string(company_name);
|
||||
p->Send_string(manager_name);
|
||||
p->Send_uint8 (c->colour);
|
||||
p->Send_bool (NetworkCompanyIsPassworded(c->index));
|
||||
p->Send_uint32(c->inaugurated_year);
|
||||
p->Send_bool (c->is_ai);
|
||||
|
||||
this->Send_Packet(p);
|
||||
|
||||
return NETWORK_RECV_STATUS_OKAY;
|
||||
}
|
||||
|
||||
NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyUpdate(const Company *c)
|
||||
{
|
||||
char company_name[NETWORK_COMPANY_NAME_LENGTH];
|
||||
char manager_name[NETWORK_COMPANY_NAME_LENGTH];
|
||||
|
||||
SetDParam(0, c->index);
|
||||
GetString(company_name, STR_COMPANY_NAME, lastof(company_name));
|
||||
|
||||
SetDParam(0, c->index);
|
||||
GetString(manager_name, STR_PRESIDENT_NAME, lastof(manager_name));
|
||||
|
||||
Packet *p = new Packet(ADMIN_PACKET_SERVER_COMPANY_UPDATE);
|
||||
|
||||
p->Send_uint8 (c->index);
|
||||
p->Send_string(company_name);
|
||||
p->Send_string(manager_name);
|
||||
p->Send_uint8 (c->colour);
|
||||
p->Send_bool (NetworkCompanyIsPassworded(c->index));
|
||||
p->Send_uint8 (c->quarters_of_bankruptcy);
|
||||
|
||||
for (size_t i = 0; i < lengthof(c->share_owners); i++) {
|
||||
p->Send_uint8(c->share_owners[i]);
|
||||
}
|
||||
|
||||
this->Send_Packet(p);
|
||||
|
||||
return NETWORK_RECV_STATUS_OKAY;
|
||||
}
|
||||
|
||||
NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason acrr)
|
||||
{
|
||||
Packet *p = new Packet(ADMIN_PACKET_SERVER_COMPANY_REMOVE);
|
||||
|
||||
p->Send_uint8(company_id);
|
||||
p->Send_uint8(acrr);
|
||||
|
||||
this->Send_Packet(p);
|
||||
|
||||
return NETWORK_RECV_STATUS_OKAY;
|
||||
}
|
||||
|
||||
/***********
|
||||
* Receiving functions
|
||||
************/
|
||||
|
@ -321,6 +399,19 @@ DEF_ADMIN_RECEIVE_COMMAND(Server, ADMIN_PACKET_ADMIN_POLL)
|
|||
}
|
||||
break;
|
||||
|
||||
case ADMIN_UPDATE_COMPANY_INFO:
|
||||
/* The admin is asking for company info. */
|
||||
const Company *company;
|
||||
if (d1 == UINT32_MAX) {
|
||||
FOR_ALL_COMPANIES(company) {
|
||||
this->SendCompanyInfo(company);
|
||||
}
|
||||
} else {
|
||||
company = Company::GetIfValid(d1);
|
||||
if (company != NULL) this->SendCompanyInfo(company);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/* An unsupported "poll" update type. */
|
||||
DEBUG(net, 3, "[admin] Not supported poll %d (%d) from '%s' (%s).", type, d1, this->admin_name, this->admin_version);
|
||||
|
@ -395,6 +486,58 @@ void NetworkAdminClientError(ClientID client_id, NetworkErrorCode error_code)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the admin network of company details.
|
||||
* @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)
|
||||
{
|
||||
if (company == NULL) {
|
||||
DEBUG(net, 1, "[admin] Empty company given for update");
|
||||
return;
|
||||
}
|
||||
|
||||
ServerNetworkAdminSocketHandler *as;
|
||||
FOR_ALL_ADMIN_SOCKETS(as) {
|
||||
if (as->update_frequency[ADMIN_UPDATE_COMPANY_INFO] != ADMIN_FREQUENCY_AUTOMATIC) continue;
|
||||
|
||||
as->SendCompanyInfo(company);
|
||||
if (new_company) {
|
||||
as->SendCompanyNew(company->index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the admin network of company updates.
|
||||
* @param company company of which updates are going to be sent into the admin network.
|
||||
*/
|
||||
void NetworkAdminCompanyUpdate(const Company *company)
|
||||
{
|
||||
if (company == NULL) return;
|
||||
|
||||
ServerNetworkAdminSocketHandler *as;
|
||||
FOR_ALL_ADMIN_SOCKETS(as) {
|
||||
if (as->update_frequency[ADMIN_UPDATE_COMPANY_INFO] != ADMIN_FREQUENCY_AUTOMATIC) continue;
|
||||
|
||||
as->SendCompanyUpdate(company);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the admin network of a company to be removed (including the reason why).
|
||||
* @param company_id ID of the company that got removed.
|
||||
* @param bcrr the reason why the company got removed (e.g. bankruptcy).
|
||||
*/
|
||||
void NetworkAdminCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr)
|
||||
{
|
||||
ServerNetworkAdminSocketHandler *as;
|
||||
FOR_ALL_ADMIN_SOCKETS(as) {
|
||||
as->SendCompanyRemove(company_id, bcrr);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a Welcome packet to all connected admins
|
||||
*/
|
||||
|
|
|
@ -49,6 +49,10 @@ public:
|
|||
NetworkRecvStatus SendClientUpdate(const NetworkClientInfo *ci);
|
||||
NetworkRecvStatus SendClientQuit(ClientID client_id);
|
||||
NetworkRecvStatus SendClientError(ClientID client_id, NetworkErrorCode error);
|
||||
NetworkRecvStatus SendCompanyNew(CompanyID company_id);
|
||||
NetworkRecvStatus SendCompanyInfo(const Company *c);
|
||||
NetworkRecvStatus SendCompanyUpdate(const Company *c);
|
||||
NetworkRecvStatus SendCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr);
|
||||
|
||||
static void Send();
|
||||
static void AcceptConnection(SOCKET s, const NetworkAddress &address);
|
||||
|
@ -72,6 +76,9 @@ void NetworkAdminClientInfo(const NetworkClientInfo *ci, bool new_client = false
|
|||
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 NetworkAdminCompanyUpdate(const Company *company);
|
||||
void NetworkAdminCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr);
|
||||
void NetworkAdminUpdate(AdminUpdateFrequency freq);
|
||||
|
||||
#endif /* ENABLE_NETWORK */
|
||||
|
|
|
@ -1544,6 +1544,7 @@ static void NetworkAutoCleanCompanies()
|
|||
if (_settings_client.network.autoclean_unprotected != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_unprotected && StrEmpty(_network_company_states[c->index].password)) {
|
||||
/* Shut the company down */
|
||||
DoCommandP(0, 2 | c->index << 16, 0, CMD_COMPANY_CTRL);
|
||||
NetworkAdminCompanyRemove(c->index, ADMIN_CRR_AUTOCLEAN);
|
||||
IConsolePrintF(CC_DEFAULT, "Auto-cleaned company #%d with no password", c->index + 1);
|
||||
}
|
||||
/* Is the company empty for autoclean_protected-months, and there is a protection? */
|
||||
|
@ -1558,6 +1559,7 @@ static void NetworkAutoCleanCompanies()
|
|||
if (_settings_client.network.autoclean_novehicles != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_novehicles && vehicles_in_company[c->index] == 0) {
|
||||
/* Shut the company down */
|
||||
DoCommandP(0, 2 | c->index << 16, 0, CMD_COMPANY_CTRL);
|
||||
NetworkAdminCompanyRemove(c->index, ADMIN_CRR_AUTOCLEAN);
|
||||
IConsolePrintF(CC_DEFAULT, "Auto-cleaned company #%d with no vehicles", c->index + 1);
|
||||
}
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue