From 296987153b51c3583a1a1b85375d4f07126d9ec3 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 24 Oct 2021 00:11:51 +0100 Subject: [PATCH] Add console command to offer a company for sale --- src/company_cmd.cpp | 12 ++++++++++++ src/company_type.h | 1 + src/console_cmds.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index eba6cfa968..29824ff1ca 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -943,6 +943,18 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 break; } + case CCA_SALE: { + Company *c = Company::GetIfValid(company_id); + if (c == nullptr) return CMD_ERROR; + + if (!(flags & DC_EXEC)) return CommandCost(); + + c->bankrupt_value = CalculateCompanyValue(c, false); + c->bankrupt_asked = 1 << c->index; // Don't ask the owner + c->bankrupt_timeout = 0; + break; + } + default: return CMD_ERROR; } diff --git a/src/company_type.h b/src/company_type.h index de2556b914..740663a4cf 100644 --- a/src/company_type.h +++ b/src/company_type.h @@ -65,6 +65,7 @@ enum CompanyCtrlAction { CCA_NEW, ///< Create a new company. CCA_NEW_AI, ///< Create a new AI company. CCA_DELETE, ///< Delete a company. + CCA_SALE, ///< Offer a company for sale. CCA_END, ///< Sentinel for end. }; diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 27635eae96..f84db5a177 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -962,6 +962,30 @@ DEF_CONSOLE_CMD(ConResetCompany) return true; } +DEF_CONSOLE_CMD(ConOfferCompanySale) +{ + if (argc == 0) { + IConsoleHelp("Offer a company for sale. Usage: 'offer_company_sale '"); + IConsoleHelp("For company-id's, see the list of companies from the dropdown menu. Company 1 is 1, etc."); + return true; + } + + if (argc != 2) return false; + + CompanyID index = (CompanyID)(atoi(argv[1]) - 1); + + /* Check valid range */ + if (!Company::IsValidID(index)) { + IConsolePrintF(CC_ERROR, "Company does not exist. Company-id must be between 1 and %d.", MAX_COMPANIES); + return true; + } + + DoCommandP(0, CCA_SALE | index << 16, 0, CMD_COMPANY_CTRL); + IConsolePrint(CC_DEFAULT, "Company offered for sale."); + + return true; +} + DEF_CONSOLE_CMD(ConNetworkClients) { if (argc == 0) { @@ -3447,6 +3471,7 @@ void IConsoleStdLibRegister() IConsole::CmdRegister("move", ConMoveClient, ConHookServerOnly); IConsole::CmdRegister("reset_company", ConResetCompany, ConHookServerOnly); IConsole::AliasRegister("clean_company", "reset_company %A"); + IConsole::CmdRegister("offer_company_sale", ConOfferCompanySale, ConHookServerOrNoNetwork); IConsole::CmdRegister("client_name", ConClientNickChange, ConHookServerOnly); IConsole::CmdRegister("kick", ConKick, ConHookServerOnly); IConsole::CmdRegister("ban", ConBan, ConHookServerOnly);