1
0
Fork 0

(svn r20708) -Fix [FS#4101]: upon company bankruptcy some objects weren't removed properly

release/1.1
rubidium 2010-09-01 06:15:26 +00:00
parent b610b1af61
commit dd2c38ea82
2 changed files with 20 additions and 8 deletions

View File

@ -331,6 +331,17 @@ static Foundation GetFoundation_Object(TileIndex tile, Slope tileh)
return IsOwnedLand(tile) ? FOUNDATION_NONE : FlatteningFoundation(tileh); return IsOwnedLand(tile) ? FOUNDATION_NONE : FlatteningFoundation(tileh);
} }
/**
* Perform the actual removal of the object from the map.
* @param o The object to really clear.
*/
static void ReallyClearObjectTile(Object *o)
{
Object::DecTypeCount(GetObjectType(o->location.tile));
TILE_AREA_LOOP(tile_cur, o->location) MakeWaterKeepingClass(tile_cur, GetTileOwner(tile_cur));
delete o;
}
static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags) static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags)
{ {
ObjectType type = GetObjectType(tile); ObjectType type = GetObjectType(tile);
@ -391,11 +402,7 @@ static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags)
break; break;
} }
if (flags & DC_EXEC) { if (flags & DC_EXEC) ReallyClearObjectTile(o);
Object::DecTypeCount(type);
TILE_AREA_LOOP(tile_cur, ta) MakeWaterKeepingClass(tile_cur, GetTileOwner(tile_cur));
delete o;
}
return cost; return cost;
} }
@ -602,12 +609,12 @@ static void ChangeTileOwner_Object(TileIndex tile, Owner old_owner, Owner new_ow
SetBit(t->statues, new_owner); SetBit(t->statues, new_owner);
SetTileOwner(tile, new_owner); SetTileOwner(tile, new_owner);
} else { } else {
DoClearSquare(tile); ReallyClearObjectTile(Object::GetByTile(tile));
} }
SetWindowDirty(WC_TOWN_AUTHORITY, t->index); SetWindowDirty(WC_TOWN_AUTHORITY, t->index);
} else { } else {
DoClearSquare(tile); ReallyClearObjectTile(Object::GetByTile(tile));
} }
} }

View File

@ -52,8 +52,13 @@ static void Ptrs_OBJS()
Object *o; Object *o;
FOR_ALL_OBJECTS(o) { FOR_ALL_OBJECTS(o) {
SlObject(o, _object_desc); SlObject(o, _object_desc);
if (CheckSavegameVersion(148) && !IsTileType(o->location.tile, MP_OBJECT)) {
/* Due to a small bug stale objects could remain. */
delete o;
} else {
Object::IncTypeCount(GetObjectType(o->location.tile)); Object::IncTypeCount(GetObjectType(o->location.tile));
} }
}
} }
static void Save_OBID() static void Save_OBID()