(svn r6738) - Fix (r2441): Only apply the virtual transfer profit if the order is a transfer order, rather than to any unload order. This fixes an issue where the AI doesn't know that a route is unprofitable.
This commit is contained in:
		
							
								
								
									
										23
									
								
								economy.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								economy.c
									
									
									
									
									
								
							@@ -1302,7 +1302,7 @@ static bool LoadWait(const Vehicle* v, const Vehicle* u)
 | 
				
			|||||||
int LoadUnloadVehicle(Vehicle *v)
 | 
					int LoadUnloadVehicle(Vehicle *v)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int profit = 0;
 | 
						int profit = 0;
 | 
				
			||||||
	int v_profit; //virtual profit for feeder systems
 | 
						int v_profit = 0; //virtual profit for feeder systems
 | 
				
			||||||
	int v_profit_total = 0;
 | 
						int v_profit_total = 0;
 | 
				
			||||||
	int unloading_time = 20;
 | 
						int unloading_time = 20;
 | 
				
			||||||
	Vehicle *u = v;
 | 
						Vehicle *u = v;
 | 
				
			||||||
@@ -1345,13 +1345,15 @@ int LoadUnloadVehicle(Vehicle *v)
 | 
				
			|||||||
				/* unload goods and let it wait at the station */
 | 
									/* unload goods and let it wait at the station */
 | 
				
			||||||
				st->time_since_unload = 0;
 | 
									st->time_since_unload = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				v_profit = GetTransportedGoodsIncome(
 | 
									if (u->current_order.flags & OF_TRANSFER) {
 | 
				
			||||||
					v->cargo_count,
 | 
										v_profit = GetTransportedGoodsIncome(
 | 
				
			||||||
					DistanceManhattan(GetStation(v->cargo_source)->xy, GetStation(last_visited)->xy),
 | 
											v->cargo_count,
 | 
				
			||||||
					v->cargo_days,
 | 
											DistanceManhattan(GetStation(v->cargo_source)->xy, GetStation(last_visited)->xy),
 | 
				
			||||||
					v->cargo_type) * 3 / 2;
 | 
											v->cargo_days,
 | 
				
			||||||
 | 
											v->cargo_type) * 3 / 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				v_profit_total += v_profit;
 | 
										v_profit_total += v_profit;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				unloading_time += v->cargo_count;
 | 
									unloading_time += v->cargo_count;
 | 
				
			||||||
				t = GB(ge->waiting_acceptance, 0, 12);
 | 
									t = GB(ge->waiting_acceptance, 0, 12);
 | 
				
			||||||
@@ -1368,8 +1370,11 @@ int LoadUnloadVehicle(Vehicle *v)
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
				// Update amount of waiting cargo
 | 
									// Update amount of waiting cargo
 | 
				
			||||||
				SB(ge->waiting_acceptance, 0, 12, min(v->cargo_count + t, 0xFFF));
 | 
									SB(ge->waiting_acceptance, 0, 12, min(v->cargo_count + t, 0xFFF));
 | 
				
			||||||
				ge->feeder_profit += v_profit;
 | 
					
 | 
				
			||||||
				u->profit_this_year += v_profit;
 | 
									if (u->current_order.flags & OF_TRANSFER) {
 | 
				
			||||||
 | 
										ge->feeder_profit += v_profit;
 | 
				
			||||||
 | 
										u->profit_this_year += v_profit;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				result |= 2;
 | 
									result |= 2;
 | 
				
			||||||
				v->cargo_count = 0;
 | 
									v->cargo_count = 0;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user