From 7164ff86f9e7c545febab03ea5dcb19b57ec8bbb Mon Sep 17 00:00:00 2001 From: Darkvater Date: Wed, 14 Sep 2005 22:03:27 +0000 Subject: (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 --- station_cmd.c | 89 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 46 insertions(+), 43 deletions(-) (limited to 'station_cmd.c') diff --git a/station_cmd.c b/station_cmd.c index 6bf8a66e8..1abdee7e4 100644 --- a/station_cmd.c +++ b/station_cmd.c @@ -2886,53 +2886,56 @@ uint MoveGoodsToStation(TileIndex tile, int w, int h, int type, uint amount) void BuildOilRig(TileIndex tile) { - Station *st; int j; + Station *st = AllocateStation(); - 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; - } + 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; + } - UpdateStationVirtCoordDirty(st); - UpdateStationAcceptance(st, false); - 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) -- cgit v1.2.3-54-g00ecf