diff --git a/src/economy.cpp b/src/economy.cpp index 50d1fa32da..af93834e7b 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -481,22 +481,22 @@ static void CompanyCheckBankrupt(Company *c) c->quarters_of_bankruptcy++; - CompanyNewsInformation *cni = MallocT(1); - cni->FillData(c); - switch (c->quarters_of_bankruptcy) { case 0: case 1: - free(cni); break; - case 2: + case 2: { + CompanyNewsInformation *cni = MallocT(1); + cni->FillData(c); SetDParam(0, STR_NEWS_COMPANY_IN_TROUBLE_TITLE); SetDParam(1, STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION); SetDParamStr(2, cni->company_name); AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_TROUBLE, cni); AI::BroadcastNewEvent(new AIEventCompanyInTrouble(c->index)); break; + } + case 3: { /* Check if the company has any value.. if not, declare it bankrupt * right now */ @@ -505,7 +505,6 @@ static void CompanyCheckBankrupt(Company *c) c->bankrupt_value = val; c->bankrupt_asked = 1 << c->index; // Don't ask the owner c->bankrupt_timeout = 0; - free(cni); break; } /* FALL THROUGH to case 4... */ @@ -518,27 +517,12 @@ static void CompanyCheckBankrupt(Company *c) * he/she is no long in control of this company. However... when you * join another company (cheat) the "unowned" company can bankrupt. */ c->bankrupt_asked = MAX_UVALUE(CompanyMask); - free(cni); break; } - /* Close everything the owner has open */ - DeleteCompanyWindows(c->index); - - /* Show bankrupt news */ - SetDParam(0, STR_NEWS_COMPANY_BANKRUPT_TITLE); - SetDParam(1, STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION); - SetDParamStr(2, cni->company_name); - AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_BANKRUPT, cni); - - ChangeOwnershipOfCompanyItems(c->index, INVALID_OWNER); - - if (c->is_ai) AI::Stop(c->index); - - CompanyID c_index = c->index; - delete c; - AI::BroadcastNewEvent(new AIEventCompanyBankrupt(c_index)); - CompanyAdminBankrupt(c_index); + /* Actually remove the company. */ + DoCommand(0, 2 | (c->index << 16), 0, DC_EXEC, CMD_COMPANY_CTRL); + break; } }