(svn r12906) -Fix: vehicle groups, engine replacement rules and player/company names were not properly reset/freed after bankrupt (before new player start)

pull/155/head
smatz 16 years ago
parent f129ba40a7
commit bf3542e9f7

@ -44,6 +44,7 @@
#include "rail_map.h" #include "rail_map.h"
#include "signal_func.h" #include "signal_func.h"
#include "gfx_func.h" #include "gfx_func.h"
#include "autoreplace_func.h"
#include "table/strings.h" #include "table/strings.h"
#include "table/sprites.h" #include "table/sprites.h"
@ -454,6 +455,19 @@ void ChangeOwnershipOfPlayerItems(PlayerID old_player, PlayerID new_player)
UpdateSignalsInBuffer(); UpdateSignalsInBuffer();
} }
/* In all cases clear replace engine rules.
* Even if it was copied, it could interfere with new owner's rules */
RemoveAllEngineReplacementForPlayer(GetPlayer(old_player));
if (new_player == PLAYER_SPECTATOR) {
RemoveAllGroupsForPlayer(old_player);
} else {
Group *g;
FOR_ALL_GROUPS(g) {
if (g->owner == old_player) g->owner = new_player;
}
}
/* Change color of existing windows */ /* Change color of existing windows */
if (new_player != PLAYER_SPECTATOR) ChangeWindowOwner(old_player, new_player); if (new_player != PLAYER_SPECTATOR) ChangeWindowOwner(old_player, new_player);

@ -461,6 +461,8 @@ static Player *AllocatePlayer()
/* Find a free slot */ /* Find a free slot */
FOR_ALL_PLAYERS(p) { FOR_ALL_PLAYERS(p) {
if (!p->is_active) { if (!p->is_active) {
free(p->name);
free(p->president_name);
PlayerID i = p->index; PlayerID i = p->index;
memset(p, 0, sizeof(Player)); memset(p, 0, sizeof(Player));
memset(&_players_ai[i], 0, sizeof(PlayerAI)); memset(&_players_ai[i], 0, sizeof(PlayerAI));
@ -918,9 +920,6 @@ CommandCost CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
ChangeOwnershipOfPlayerItems(p->index, PLAYER_SPECTATOR); ChangeOwnershipOfPlayerItems(p->index, PLAYER_SPECTATOR);
p->is_active = false; p->is_active = false;
} }
RemoveAllEngineReplacementForPlayer(p);
RemoveAllGroupsForPlayer(p->index);
} break; } break;
case 3: { /* Merge a company (#1) into another company (#2), elimination company #1 */ case 3: { /* Merge a company (#1) into another company (#2), elimination company #1 */

Loading…
Cancel
Save