Mercurial > hg > openttd
diff src/economy.cpp @ 7503:876e29bc9d5d draft
(svn r11018) -Fix [FS#1169]: Disallow buying/selling shares in your own company or a bankrupted/non-existant company.
author | rubidium <rubidium@openttd.org> |
---|---|
date | Fri, 31 Aug 2007 17:15:46 +0000 (2007-08-31) |
parents | 09743324277c |
children | 47b4eb921138 |
line wrap: on
line diff
--- a/src/economy.cpp +++ b/src/economy.cpp @@ -1802,11 +1802,16 @@ Player *p; CommandCost cost; - /* Check if buying shares is allowed (protection against modified clients */ - if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares) return CMD_ERROR; + /* Check if buying shares is allowed (protection against modified clients) */ + /* Cannot buy own shares */ + if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares || _current_player == (PlayerID)p1) return CMD_ERROR; + + p = GetPlayer((PlayerID)p1); + + /* Cannot buy shares of non-existent nor bankrupted company */ + if (!p->is_active) return CMD_ERROR; SET_EXPENSES_TYPE(EXPENSES_OTHER); - p = GetPlayer((PlayerID)p1); /* Protect new companies from hostile takeovers */ if (_cur_year - p->inaugurated_year < 6) return_cmd_error(STR_7080_PROTECTED); @@ -1848,11 +1853,16 @@ Player *p; Money cost; - /* Check if buying shares is allowed (protection against modified clients */ - if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares) return CMD_ERROR; + /* Check if selling shares is allowed (protection against modified clients) */ + /* Cannot sell own shares */ + if (!IsValidPlayer((PlayerID)p1) || !_patches.allow_shares || _current_player == (PlayerID)p1) return CMD_ERROR; + + p = GetPlayer((PlayerID)p1); + + /* Cannot sell shares of non-existent nor bankrupted company */ + if (!p->is_active) return CMD_ERROR; SET_EXPENSES_TYPE(EXPENSES_OTHER); - p = GetPlayer((PlayerID)p1); /* Those lines are here for network-protection (clients can be slow) */ if (GetAmountOwnedBy(p, _current_player) == 0) return CommandCost();