File diff r4351:04a502e12263 → r4352:460a517b040f
order_cmd.c
Show inline comments
 
@@ -179,9 +179,11 @@ int32 CmdInsertOrder(TileIndex tile, uin
 
	OrderID sel_ord = GB(p1, 16, 16);
 
	Order new_order = UnpackOrder(p2);
 

	
 
	if (!IsVehicleIndex(veh)) return CMD_ERROR;
 
	if (!IsValidVehicleID(veh)) return CMD_ERROR;
 

	
 
	v = GetVehicle(veh);
 
	if (!IsValidVehicle(v) || !CheckOwnership(v->owner)) return CMD_ERROR;
 

	
 
	if (!CheckOwnership(v->owner)) return CMD_ERROR;
 

	
 
	/* Check if the inserted order is to the correct destination (owner, type),
 
	 * and has the correct flags if any */
 
@@ -189,11 +191,10 @@ int32 CmdInsertOrder(TileIndex tile, uin
 
		case OT_GOTO_STATION: {
 
			const Station *st;
 

	
 
			if (!IsStationIndex(new_order.station)) return CMD_ERROR;
 
			if (!IsValidStationID(new_order.station)) return CMD_ERROR;
 
			st = GetStation(new_order.station);
 

	
 
			if (!IsValidStation(st) ||
 
					(st->airport_type != AT_OILRIG && !IsBuoy(st) && !CheckOwnership(st->owner))) {
 
			if (st->airport_type != AT_OILRIG && !IsBuoy(st) && !CheckOwnership(st->owner)) {
 
				return CMD_ERROR;
 
			}
 

	
 
@@ -251,11 +252,10 @@ int32 CmdInsertOrder(TileIndex tile, uin
 
			if (v->type == VEH_Aircraft) {
 
				const Station* st;
 

	
 
				if (!IsStationIndex(new_order.station)) return CMD_ERROR;
 
				if (!IsValidStationID(new_order.station)) return CMD_ERROR;
 
				st = GetStation(new_order.station);
 

	
 
				if (!IsValidStation(st) ||
 
						(st->airport_type != AT_OILRIG && !CheckOwnership(st->owner)) ||
 
				if ((st->airport_type != AT_OILRIG && !CheckOwnership(st->owner)) ||
 
						!(st->facilities & FACIL_AIRPORT) ||
 
						GetAirport(st->airport_type)->nof_depots == 0) {
 
					return CMD_ERROR;
 
@@ -263,11 +263,10 @@ int32 CmdInsertOrder(TileIndex tile, uin
 
			} else {
 
				const Depot* dp;
 

	
 
				if (!IsDepotIndex(new_order.station)) return CMD_ERROR;
 
				if (!IsValidDepotID(new_order.station)) return CMD_ERROR;
 
				dp = GetDepot(new_order.station);
 

	
 
				if (!IsValidDepot(dp) || !CheckOwnership(GetTileOwner(dp->xy)))
 
					return CMD_ERROR;
 
				if (!CheckOwnership(GetTileOwner(dp->xy))) return CMD_ERROR;
 

	
 
				switch (v->type) {
 
					case VEH_Train:
 
@@ -309,7 +308,7 @@ int32 CmdInsertOrder(TileIndex tile, uin
 

	
 
			if (v->type != VEH_Train) return CMD_ERROR;
 

	
 
			if (!IsWaypointIndex(new_order.station)) return CMD_ERROR;
 
			if (!IsValidWaypointID(new_order.station)) return CMD_ERROR;
 
			wp = GetWaypoint(new_order.station);
 

	
 
			if (!CheckOwnership(GetTileOwner(wp->xy))) return CMD_ERROR;
 
@@ -442,9 +441,11 @@ int32 CmdDeleteOrder(TileIndex tile, uin
 
	OrderID sel_ord = p2;
 
	Order *order;
 

	
 
	if (!IsVehicleIndex(veh_id)) return CMD_ERROR;
 
	if (!IsValidVehicleID(veh_id)) return CMD_ERROR;
 

	
 
	v = GetVehicle(veh_id);
 
	if (!IsValidVehicle(v) || !CheckOwnership(v->owner)) return CMD_ERROR;
 

	
 
	if (!CheckOwnership(v->owner)) return CMD_ERROR;
 

	
 
	/* If we did not select an order, we maybe want to de-clone the orders */
 
	if (sel_ord >= v->num_orders)
 
@@ -514,9 +515,11 @@ int32 CmdSkipOrder(TileIndex tile, uint3
 
	Vehicle *v;
 
	VehicleID veh_id = p1;
 

	
 
	if (!IsVehicleIndex(veh_id)) return CMD_ERROR;
 
	if (!IsValidVehicleID(veh_id)) return CMD_ERROR;
 

	
 
	v = GetVehicle(veh_id);
 
	if (!IsValidVehicle(v) || !CheckOwnership(v->owner)) return CMD_ERROR;
 

	
 
	if (!CheckOwnership(v->owner)) return CMD_ERROR;
 

	
 
	if (flags & DC_EXEC) {
 
		/* Goto next order */
 
@@ -561,11 +564,12 @@ int32 CmdModifyOrder(TileIndex tile, uin
 
	OrderID sel_ord = GB(p1, 16, 16); // XXX - automatically truncated to 8 bits.
 
	VehicleID veh   = GB(p1,  0, 16);
 

	
 
	if (!IsVehicleIndex(veh)) return CMD_ERROR;
 
	if (!IsValidVehicleID(veh)) return CMD_ERROR;
 
	if (p2 != OFB_FULL_LOAD && p2 != OFB_UNLOAD && p2 != OFB_NON_STOP && p2 != OFB_TRANSFER) return CMD_ERROR;
 

	
 
	v = GetVehicle(veh);
 
	if (!IsValidVehicle(v) || !CheckOwnership(v->owner)) return CMD_ERROR;
 

	
 
	if (!CheckOwnership(v->owner)) return CMD_ERROR;
 

	
 
	/* Is it a valid order? */
 
	if (sel_ord >= v->num_orders) return CMD_ERROR;
 
@@ -628,22 +632,22 @@ int32 CmdCloneOrder(TileIndex tile, uint
 
	VehicleID veh_src = GB(p1, 16, 16);
 
	VehicleID veh_dst = GB(p1,  0, 16);
 

	
 
	if (!IsVehicleIndex(veh_dst)) return CMD_ERROR;
 
	if (!IsValidVehicleID(veh_dst)) return CMD_ERROR;
 

	
 
	dst = GetVehicle(veh_dst);
 

	
 
	if (!IsValidVehicle(dst) || !CheckOwnership(dst->owner)) return CMD_ERROR;
 
	if (!CheckOwnership(dst->owner)) return CMD_ERROR;
 

	
 
	switch (p2) {
 
		case CO_SHARE: {
 
			Vehicle *src;
 

	
 
			if (!IsVehicleIndex(veh_src)) return CMD_ERROR;
 
			if (!IsValidVehicleID(veh_src)) return CMD_ERROR;
 

	
 
			src = GetVehicle(veh_src);
 

	
 
			/* Sanity checks */
 
			if (!IsValidVehicle(src) || !CheckOwnership(src->owner) || dst->type != src->type || dst == src)
 
			if (!CheckOwnership(src->owner) || dst->type != src->type || dst == src)
 
				return CMD_ERROR;
 

	
 
			/* Trucks can't share orders with busses (and visa versa) */
 
@@ -685,12 +689,12 @@ int32 CmdCloneOrder(TileIndex tile, uint
 
			Vehicle *src;
 
			int delta;
 

	
 
			if (!IsVehicleIndex(veh_src)) return CMD_ERROR;
 
			if (!IsValidVehicleID(veh_src)) return CMD_ERROR;
 

	
 
			src = GetVehicle(veh_src);
 

	
 
			/* Sanity checks */
 
			if (!IsValidVehicle(src) || !CheckOwnership(src->owner) || dst->type != src->type || dst == src)
 
			if (!CheckOwnership(src->owner) || dst->type != src->type || dst == src)
 
				return CMD_ERROR;
 

	
 
			/* Trucks can't copy all the orders from busses (and visa versa) */
 
@@ -844,11 +848,12 @@ int32 CmdRestoreOrderIndex(TileIndex til
 
	OrderID cur_ord = GB(p2,  0, 16);
 
	uint16 serv_int = GB(p2, 16, 16);
 

	
 
	if (!IsVehicleIndex(p1)) return CMD_ERROR;
 
	if (!IsValidVehicleID(p1)) return CMD_ERROR;
 

	
 
	v = GetVehicle(p1);
 

	
 
	/* Check the vehicle type and ownership, and if the service interval and order are in range */
 
	if (!IsValidVehicle(v) || !CheckOwnership(v->owner)) return CMD_ERROR;
 
	if (!CheckOwnership(v->owner)) return CMD_ERROR;
 
	if (serv_int != GetServiceIntervalClamped(serv_int) || cur_ord >= v->num_orders) return CMD_ERROR;
 

	
 
	if (flags & DC_EXEC) {