mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r7330) -Fix (r7304): Data invalidation doesn't always happen as the local
player, resulting in an empty vehicle purchase list. Specify the player as an argument to IsEngineBuildable()
This commit is contained in:
parent
3f3a14d24b
commit
e205c58ddc
|
@ -207,7 +207,7 @@ int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
const AirportFTAClass* ap;
|
||||
Engine *e;
|
||||
|
||||
if (!IsEngineBuildable(p1, VEH_Aircraft)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
|
||||
if (!IsEngineBuildable(p1, VEH_Aircraft, _current_player)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
|
||||
|
||||
value = EstimateAircraftCost(p1);
|
||||
|
||||
|
|
|
@ -290,7 +290,7 @@ static void GenerateBuildAircraftList(Window *w)
|
|||
* when planes become obsolete and are removed */
|
||||
sel_id = INVALID_ENGINE;
|
||||
for (eid = AIRCRAFT_ENGINES_INDEX; eid < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; eid++) {
|
||||
if (IsEngineBuildable(eid, VEH_Aircraft)) {
|
||||
if (IsEngineBuildable(eid, VEH_Aircraft, _local_player)) {
|
||||
const AircraftVehicleInfo *avi = AircraftVehInfo(eid);
|
||||
switch (bv->filter.acc_planes) {
|
||||
case HELICOPTERS_ONLY:
|
||||
|
|
7
engine.c
7
engine.c
|
@ -401,12 +401,13 @@ int32 CmdRenameEngine(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
|
||||
/*
|
||||
* returns true if an engine is valid, of the specified type, and buildable by
|
||||
* the current player, false otherwise
|
||||
* the given player, false otherwise
|
||||
*
|
||||
* engine = index of the engine to check
|
||||
* type = the type the engine should be of (VEH_xxx)
|
||||
* player = index of the player
|
||||
*/
|
||||
bool IsEngineBuildable(uint engine, byte type)
|
||||
bool IsEngineBuildable(EngineID engine, byte type, PlayerID player)
|
||||
{
|
||||
const Engine *e;
|
||||
|
||||
|
@ -419,7 +420,7 @@ bool IsEngineBuildable(uint engine, byte type)
|
|||
if (e->type != type) return false;
|
||||
|
||||
// check if it's available
|
||||
if (!HASBIT(e->player_avail, _current_player)) return false;
|
||||
if (!HASBIT(e->player_avail, player)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
2
engine.h
2
engine.h
|
@ -137,7 +137,7 @@ void DrawAircraftEngine(int x, int y, EngineID engine, uint32 image_ormod);
|
|||
void LoadCustomEngineNames(void);
|
||||
void DeleteCustomEngineNames(void);
|
||||
|
||||
bool IsEngineBuildable(uint engine, byte type);
|
||||
bool IsEngineBuildable(EngineID engine, byte type, PlayerID player);
|
||||
|
||||
enum {
|
||||
NUM_NORMAL_RAIL_ENGINES = 54,
|
||||
|
|
|
@ -114,7 +114,7 @@ int32 CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
UnitID unit_num;
|
||||
Engine *e;
|
||||
|
||||
if (!IsEngineBuildable(p1, VEH_Road)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
|
||||
if (!IsEngineBuildable(p1, VEH_Road, _current_player)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
|
||||
|
||||
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
|
||||
|
||||
|
|
|
@ -814,7 +814,7 @@ int32 CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
UnitID unit_num;
|
||||
Engine *e;
|
||||
|
||||
if (!IsEngineBuildable(p1, VEH_Ship)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
|
||||
if (!IsEngineBuildable(p1, VEH_Ship, _current_player)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
|
||||
|
||||
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
|
||||
|
||||
|
|
|
@ -743,7 +743,7 @@ int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
uint num_vehicles;
|
||||
|
||||
/* Check if the engine-type is valid (for the player) */
|
||||
if (!IsEngineBuildable(p1, VEH_Train)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
|
||||
if (!IsEngineBuildable(p1, VEH_Train, _current_player)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
|
||||
|
||||
/* Check if the train is actually being built in a depot belonging
|
||||
* to the player. Doesn't matter if only the cost is queried */
|
||||
|
|
|
@ -393,7 +393,7 @@ static void GenerateBuildList(Window *w)
|
|||
const RailVehicleInfo *rvi = RailVehInfo(eid);
|
||||
|
||||
if (bv->filter.railtype != RAILTYPE_END && !HasPowerOnRail(e->railtype, bv->filter.railtype)) continue;
|
||||
if (!IsEngineBuildable(eid, VEH_Train)) continue;
|
||||
if (!IsEngineBuildable(eid, VEH_Train, _local_player)) continue;
|
||||
|
||||
EngList_Add(&bv->eng_list, eid);
|
||||
if ((rvi->flags & RVI_WAGON) == 0) {
|
||||
|
|
Loading…
Reference in New Issue