Index: src/airport_gui.cpp =================================================================== --- src/airport_gui.cpp (revision 9518) +++ src/airport_gui.cpp (working copy) @@ -18,6 +18,7 @@ #include "station.h" #include "airport.h" #include "depot.h" +#include "engine.h" static byte _selected_airport_type; @@ -34,7 +35,13 @@ static void PlaceAirport(TileIndex tile) { - DoCommandP(tile, _selected_airport_type, 0, CcBuildAirport, CMD_BUILD_AIRPORT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_A001_CAN_T_BUILD_AIRPORT_HERE)); + if(IsEngineAvailable(VEH_AIRCRAFT)) { + DoCommandP(tile, _selected_airport_type, 0, CcBuildAirport, CMD_BUILD_AIRPORT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_A001_CAN_T_BUILD_AIRPORT_HERE)); + } + else + { + ShowErrorMessage(INVALID_STRING_ID, STR_CANT_BUILD_AIRPORT_YET, 0, 0); + } } static void PlaceAir_DemolishArea(TileIndex tile) Index: src/dock_gui.cpp =================================================================== --- src/dock_gui.cpp (revision 9518) +++ src/dock_gui.cpp (working copy) @@ -16,6 +16,7 @@ #include "sound.h" #include "command.h" #include "variables.h" +#include "engine.h" static void ShowBuildDockStationPicker(); static void ShowBuildDocksDepotPicker(); @@ -38,17 +39,35 @@ static void PlaceDocks_Dock(TileIndex tile) { - DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_DOCK | CMD_AUTO | CMD_MSG(STR_9802_CAN_T_BUILD_DOCK_HERE)); + if(IsEngineAvailable(VEH_SHIP)) { + DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_DOCK | CMD_AUTO | CMD_MSG(STR_9802_CAN_T_BUILD_DOCK_HERE)); + } + else + { + ShowErrorMessage(INVALID_STRING_ID, STR_CANT_BUILD_DOCK_YET, 0, 0); + } } static void PlaceDocks_Depot(TileIndex tile) { - DoCommandP(tile, _ship_depot_direction, 0, CcBuildDocks, CMD_BUILD_SHIP_DEPOT | CMD_AUTO | CMD_MSG(STR_3802_CAN_T_BUILD_SHIP_DEPOT)); + if(IsEngineAvailable(VEH_SHIP)) { + DoCommandP(tile, _ship_depot_direction, 0, CcBuildDocks, CMD_BUILD_SHIP_DEPOT | CMD_AUTO | CMD_MSG(STR_3802_CAN_T_BUILD_SHIP_DEPOT)); + } + else + { + ShowErrorMessage(INVALID_STRING_ID, STR_CANT_BUILD_SHIPDEPOT_YET, 0, 0); + } } static void PlaceDocks_Buoy(TileIndex tile) { - DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_BUOY | CMD_AUTO | CMD_MSG(STR_9835_CAN_T_POSITION_BUOY_HERE)); + if(IsEngineAvailable(VEH_SHIP)) { + DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_BUOY | CMD_AUTO | CMD_MSG(STR_9835_CAN_T_POSITION_BUOY_HERE)); + } + else + { + ShowErrorMessage(INVALID_STRING_ID, STR_CANT_BUILD_BUOY_YET, 0, 0); + } } static void PlaceDocks_DemolishArea(TileIndex tile) Index: src/engine.cpp =================================================================== --- src/engine.cpp (revision 9518) +++ src/engine.cpp (working copy) @@ -348,6 +348,24 @@ } } +bool IsEngineAvailable(uint32 engineType) +{ + + Engine *e; + + for(e = _engines; e != endof(_engines); e++) { + + if(e->type == engineType && e->player_avail) { + return true; + } + + } + + return false; + +} + + /** Rename an engine. * @param tile unused * @param p1 engine ID to rename Index: src/engine.h =================================================================== --- src/engine.h (revision 9518) +++ src/engine.h (working copy) @@ -153,6 +153,7 @@ void DeleteCustomEngineNames(); bool IsEngineBuildable(EngineID engine, byte type, PlayerID player); +bool IsEngineAvailable(uint32 engineType); enum { NUM_NORMAL_RAIL_ENGINES = 54, Index: src/lang/english.txt =================================================================== --- src/lang/english.txt (revision 9518) +++ src/lang/english.txt (working copy) @@ -3149,3 +3149,9 @@ ######## STR_FEEDER_CARGO_VALUE :{BLACK}Transfer Credits: {LTBLUE}{CURRENCY} + +STR_CANT_BUILD_AIRPORT_YET :{WHITE}No aircraft available to build an airport for! +STR_CANT_BUILD_DOCK_YET :{WHITE}No ships available to build a dock for! +STR_CANT_BUILD_SHIPDEPOT_YET :{WHITE}No ships available to build a depot for! +STR_CANT_BUILD_BUOY_YET :{WHITE}No ships available to build a buoy for! +STR_CANT_BUILD_VEHICLEDEPOT_YET :{WHITE}No road vehicles available to build a depot for! Index: src/lang/german.txt =================================================================== --- src/lang/german.txt (revision 9518) +++ src/lang/german.txt (working copy) @@ -3147,3 +3147,9 @@ ######## STR_FEEDER_CARGO_VALUE :{BLACK}Überweise Geld: {LTBLUE}{CURRENCY} + +STR_CANT_BUILD_AIRPORT_YET :{WHITE}Flughafen kann nicht gebaut werden - es existieren zu dieser Zeit noch keine Flugzeuge! +STR_CANT_BUILD_DOCK_YET :{WHITE}Dock kann nicht gebaut werden - es existieren zu dieser Zeit noch keine Schiffe! +STR_CANT_BUILD_SHIPDEPOT_YET :{WHITE}Schiffsdepot kann nicht gebaut werden - es existieren zu dieser Zeit noch keine Schiffe! +STR_CANT_BUILD_BUOY_YET :{WHITE}Boje kann nicht gebaut werden - es existieren zu dieser Zeit noch keine Schiffe! +STR_CANT_BUILD_VEHICLEDEPOT_YET :{WHITE}Fahrzeug-Depot kann nicht gebaut werden - es existieren zu dieser Zeit noch keine Strassenfahrzeuge! Index: src/road_gui.cpp =================================================================== --- src/road_gui.cpp (revision 9518) +++ src/road_gui.cpp (working copy) @@ -92,7 +92,13 @@ static void PlaceRoad_Depot(TileIndex tile) { - DoCommandP(tile, _road_depot_orientation, 0, CcRoadDepot, CMD_BUILD_ROAD_DEPOT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1807_CAN_T_BUILD_ROAD_VEHICLE)); + if(IsEngineAvailable(VEH_ROAD)) { + DoCommandP(tile, _road_depot_orientation, 0, CcRoadDepot, CMD_BUILD_ROAD_DEPOT | CMD_AUTO | CMD_NO_WATER | CMD_MSG(STR_1807_CAN_T_BUILD_ROAD_VEHICLE)); + } + else + { + ShowErrorMessage(INVALID_STRING_ID, STR_CANT_BUILD_VEHICLEDEPOT_YET, 0, 0); + } } static void PlaceRoadStop(TileIndex tile, uint32 p2, uint32 cmd)