diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index e58d29b2b5..1c79c4b8a5 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -67,7 +67,7 @@ Company::Company(uint16 name_1, bool is_ai) this->clear_limit = (uint32)_settings_game.construction.clear_frame_burst << 16; this->tree_limit = (uint32)_settings_game.construction.tree_frame_burst << 16; - for (uint j = 0; j < 4; j++) this->share_owners[j] = COMPANY_SPECTATOR; + for (uint j = 0; j < 4; j++) this->share_owners[j] = INVALID_OWNER; InvalidateWindowData(WC_PERFORMANCE_DETAIL, 0, INVALID_COMPANY); } diff --git a/src/economy.cpp b/src/economy.cpp index efea96806f..7f14bed8ad 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -324,10 +324,12 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) Backup cur_company2(_current_company, FILE_LINE); const Company *c = Company::Get(old_owner); for (i = 0; i < 4; i++) { + if (c->share_owners[i] == INVALID_OWNER) continue; + if (c->bankrupt_value == 0 && c->share_owners[i] == new_owner) { /* You are the one buying the company; so don't sell the shares back to you. */ - Company::Get(new_owner)->share_owners[i] = COMPANY_SPECTATOR; - } else if (c->share_owners[i] != INVALID_OWNER) { + Company::Get(new_owner)->share_owners[i] = INVALID_OWNER; + } else { cur_company2.Change(c->share_owners[i]); /* Sell the shares */ CommandCost res = DoCommand(0, old_owner, 0, DC_EXEC | DC_BANKRUPT, CMD_SELL_SHARE_IN_COMPANY);