src/ai/default/default.cpp
branchgamebalance
changeset 9911 0b8b245a2391
parent 9910 0b2aebc8283e
child 9912 1ac8aac92385
--- a/src/ai/default/default.cpp	Wed Jun 13 11:17:30 2007 +0000
+++ b/src/ai/default/default.cpp	Wed Jun 13 11:45:14 2007 +0000
@@ -543,6 +543,7 @@
 static void AiFindRandomIndustryRoute(FoundRoute *fr)
 {
 	Industry* i;
+	const IndustrySpec *indsp;
 	uint32 r;
 	CargoID cargo;
 
@@ -556,8 +557,9 @@
 	if (i == NULL) return;
 
 	// pick a random produced cargo
-	cargo = i->produced_cargo[0];
-	if (r & 1 && i->produced_cargo[1] != CT_INVALID) cargo = i->produced_cargo[1];
+	indsp = GetIndustrySpec(i->type);
+	cargo = indsp->produced_cargo[0];
+	if (r & 1 && indsp->produced_cargo[1] != CT_INVALID) cargo = indsp->produced_cargo[1];
 
 	fr->cargo = cargo;
 
@@ -567,12 +569,16 @@
 	if (cargo != CT_GOODS && cargo != CT_FOOD) {
 		// pick a dest, and see if it can receive
 		Industry* i2 = AiFindRandomIndustry();
-
-		if (i2 == NULL || i == i2 || (
-					i2->accepts_cargo[0] != cargo &&
-					i2->accepts_cargo[1] != cargo &&
-					i2->accepts_cargo[2] != cargo)
-				) {
+		if (i2 == NULL) {
+			return;
+		}
+
+		indsp = GetIndustrySpec(i2->type);
+
+		if (i == i2 ||
+				(indsp->accepts_cargo[0] != cargo &&
+				indsp->accepts_cargo[1] != cargo &&
+				indsp->accepts_cargo[2] != cargo)) {
 			return;
 		}
 
@@ -664,9 +670,10 @@
 		}
 	} else {
 		const Industry* i = (const Industry*)fr->from;
-
-		if (i->pct_transported[fr->cargo != i->produced_cargo[0]] > 0x99 ||
-				i->total_production[fr->cargo != i->produced_cargo[0]] == 0) {
+		const IndustrySpec *indsp = GetIndustrySpec(i->type);
+
+		if (i->pct_transported[fr->cargo != indsp->produced_cargo[0]] > 0x99 ||
+				i->total_production[fr->cargo != indsp->produced_cargo[0]] == 0) {
 			return false;
 		}
 	}
@@ -1792,17 +1799,15 @@
 					p->ai.state_mode = -p->ai.state_mode;
 				}
 			} else if (CheckPlayerHasMoney(cost)) {
-				int32 r;
 				// player has money, build it.
 				aib->cur_building_rule = rule;
 
-				r = AiDoBuildDefaultRailTrack(
+				AiDoBuildDefaultRailTrack(
 					aib->use_tile,
 					_default_rail_track_data[rule]->data,
 					p->ai.railtype_to_use,
 					DC_EXEC | DC_NO_TOWN_RATING
 				);
-				assert(!CmdFailed(r));
 			}
 		} while (++aib, --j);
 	}
@@ -2574,11 +2579,11 @@
 		if (p->mode == 2) {
 			if (IsTileType(c, MP_STREET) &&
 					GetRoadTileType(c) == ROAD_TILE_NORMAL &&
-					(GetRoadBits(c) & p->attr) != 0) {
+					(GetRoadBits(c, ROADTYPE_ROAD) & p->attr) != 0) {
 				roadflag |= 2;
 
 				// all bits are already built?
-				if ((GetRoadBits(c) & p->attr) == p->attr) continue;
+				if ((GetRoadBits(c, ROADTYPE_ROAD) & p->attr) == p->attr) continue;
 			}
 
 			ret = DoCommand(c, p->attr, 0, flag | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD);