# HG changeset patch # User Darkvater # Date 2005-09-14 22:03:27 # Node ID ab70d019f40eccfa74cc7c7f189d3bbd9e13437e # Parent 1d5351f3f44829ad88746da11f52b4c9010b153a (svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all diff --git a/station_cmd.c b/station_cmd.c --- a/station_cmd.c +++ b/station_cmd.c @@ -2886,53 +2886,56 @@ uint MoveGoodsToStation(TileIndex tile, void BuildOilRig(TileIndex tile) { - Station *st; int j; - - FOR_ALL_STATIONS(st) { - if (st->xy == 0) { - st->town = ClosestTownFromTile(tile, (uint)-1); - st->sign.width_1 = 0; - if (!GenerateStationName(st, tile, 2)) - return; - - SetTileType(tile, MP_STATION); - _m[tile].m5 = 0x4B; - SetTileOwner(tile, OWNER_NONE); - _m[tile].m3 = 0; - _m[tile].m4 = 0; - _m[tile].m2 = st->index; - - st->owner = OWNER_NONE; - st->airport_flags = 0; - st->airport_type = AT_OILRIG; - st->xy = tile; - st->bus_stops = NULL; - st->truck_stops = NULL; - st->airport_tile = tile; - st->dock_tile = tile; - st->train_tile = 0; - st->had_vehicle_of_type = 0; - st->time_since_load = 255; - st->time_since_unload = 255; - st->delete_ctr = 0; - st->last_vehicle = INVALID_VEHICLE; - st->facilities = FACIL_AIRPORT | FACIL_DOCK; - st->build_date = _date; - for(j=0; j!=NUM_CARGO; j++) { - st->goods[j].waiting_acceptance = 0; - st->goods[j].days_since_pickup = 0; - st->goods[j].enroute_from = INVALID_STATION; - st->goods[j].rating = 175; - st->goods[j].last_speed = 0; - st->goods[j].last_age = 255; - } - - UpdateStationVirtCoordDirty(st); - UpdateStationAcceptance(st, false); - return; - } + Station *st = AllocateStation(); + + if (st == NULL) { + DEBUG(misc, 0) ("Couldn't allocate station for oilrig at %#X, reverting to oilrig only...", tile); + return; + } + if (!GenerateStationName(st, tile, 2)) { + DEBUG(misc, 0) ("Couldn't allocate station-name for oilrig at %#X, reverting to oilrig only...", tile); + return; } + + st->town = ClosestTownFromTile(tile, (uint)-1); + st->sign.width_1 = 0; + + SetTileType(tile, MP_STATION); + _m[tile].m5 = 0x4B; + SetTileOwner(tile, OWNER_NONE); + _m[tile].m3 = 0; + _m[tile].m4 = 0; + _m[tile].m2 = st->index; + + st->owner = OWNER_NONE; + st->airport_flags = 0; + st->airport_type = AT_OILRIG; + st->xy = tile; + st->bus_stops = NULL; + st->truck_stops = NULL; + st->airport_tile = tile; + st->dock_tile = tile; + st->train_tile = 0; + st->had_vehicle_of_type = 0; + st->time_since_load = 255; + st->time_since_unload = 255; + st->delete_ctr = 0; + st->last_vehicle = INVALID_VEHICLE; + st->facilities = FACIL_AIRPORT | FACIL_DOCK; + st->build_date = _date; + + for (j = 0; j != NUM_CARGO; j++) { + st->goods[j].waiting_acceptance = 0; + st->goods[j].days_since_pickup = 0; + st->goods[j].enroute_from = INVALID_STATION; + st->goods[j].rating = 175; + st->goods[j].last_speed = 0; + st->goods[j].last_age = 255; + } + + UpdateStationVirtCoordDirty(st); + UpdateStationAcceptance(st, false); } void DeleteOilRig(TileIndex tile)