Changeset - r6136:777f936d37dd
[Not reviewed]
master
0 1 0
tron - 17 years ago 2007-02-24 14:36:14
tron@openttd.org
(svn r8878) -Fix

-Fix: Do a better job when checking the parameters of CmdMoveRailVehicle()
NOTE: 0.5 candidate
1 file changed with 6 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/train_cmd.cpp
Show inline comments
 
@@ -1007,13 +1007,15 @@ int32 CmdMoveRailVehicle(TileIndex tile,
 

	
 
	src = GetVehicle(s);
 

	
 
	if (src->type != VEH_Train) return CMD_ERROR;
 
	if (src->type != VEH_Train || !CheckOwnership(src->owner)) return CMD_ERROR;
 

	
 
	// if nothing is selected as destination, try and find a matching vehicle to drag to.
 
	if (d == INVALID_VEHICLE) {
 
		dst = IsTrainEngine(src) ? NULL : FindGoodVehiclePos(src);
 
	} else {
 
		if (!IsValidVehicleID(d)) return CMD_ERROR;
 
		dst = GetVehicle(d);
 
		if (dst->type != VEH_Train || !CheckOwnership(dst->owner)) return CMD_ERROR;
 
	}
 

	
 
	// if an articulated part is being handled, deal with its parent vehicle
 
@@ -1025,17 +1027,15 @@ int32 CmdMoveRailVehicle(TileIndex tile,
 
	// don't move the same vehicle..
 
	if (src == dst) return 0;
 

	
 
	/* the player must be the owner */
 
	if (!CheckOwnership(src->owner) || (dst != NULL && !CheckOwnership(dst->owner)))
 
		return CMD_ERROR;
 

	
 
	/* locate the head of the two chains */
 
	src_head = GetFirstVehicleInChain(src);
 
	dst_head = NULL;
 
	if (dst != NULL) {
 
		dst_head = GetFirstVehicleInChain(dst);
 
		if (dst_head->tile != src_head->tile) return CMD_ERROR;
 
		// Now deal with articulated part of destination wagon
 
		dst = GetLastEnginePart(dst);
 
	} else {
 
		dst_head = NULL;
 
	}
 

	
 
	if (dst != NULL && IsMultiheaded(dst) && !IsTrainEngine(dst) && IsTrainWagon(src)) {
 
@@ -1092,8 +1092,6 @@ int32 CmdMoveRailVehicle(TileIndex tile,
 
				// check if all vehicles in the dest train are stopped.
 
				dst_len = CheckTrainStoppedInDepot(dst_head);
 
				if (dst_len < 0) return_cmd_error(STR_881A_TRAINS_CAN_ONLY_BE_ALTERED);
 

	
 
				assert(dst_head->tile == src_head->tile);
 
			}
 

	
 
			// We are moving between rows, so only count the wagons from the source
0 comments (0 inline, 0 general)