Changeset - r558:441d430e3bde
[Not reviewed]
master
0 3 0
darkvater - 20 years ago 2004-12-05 21:30:58
darkvater@openttd.org
(svn r960) -Fix: forgotten conversion of orders for the AI (Tron)
3 files changed with 89 insertions and 43 deletions:
ai.c
33
18
ai_new.c
20
12
0 comments (0 inline, 0 general)
ai.c
Show inline comments
 
@@ -2417,15 +2417,20 @@ handle_nocash:
 

	
 
	for(i=0; p->ai.order_list_blocks[i] != 0xFF; i++) {
 
		AiBuildRec *aib = (&p->ai.src) + p->ai.order_list_blocks[i];
 
		uint flags = (AiGetStationIdByDef(aib->use_tile, aib->cur_building_rule) << 8) + OT_GOTO_STATION;
 
		bool is_pass = (p->ai.cargo_type == CT_PASSENGERS ||
 
							p->ai.cargo_type == CT_MAIL ||
 
							(_opt.landscape==LT_NORMAL && p->ai.cargo_type == CT_VALUABLES));
 

	
 
		if (!is_pass && i == 1) flags |= OF_UNLOAD;
 
		if (p->ai.num_want_fullload != 0 && (is_pass || i == 0)) flags |= OF_FULL_LOAD;
 

	
 
		DoCommandByTile(0, loco_id + (i << 16),	flags, DC_EXEC, CMD_INSERT_ORDER);
 
		Order order;
 

	
 
		order.type = OT_GOTO_STATION;
 
		order.flags = 0;
 
		order.station = AiGetStationIdByDef(aib->use_tile, aib->cur_building_rule);
 

	
 
		if (!is_pass && i == 1) order.flags |= OF_UNLOAD;
 
		if (p->ai.num_want_fullload != 0 && (is_pass || i == 0))
 
			order.flags |= OF_FULL_LOAD;
 

	
 
		DoCommandByTile(0, loco_id + (i << 16),	PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
 
	}
 

	
 
	DoCommandByTile(0, loco_id, 0, DC_EXEC, CMD_START_STOP_TRAIN);
 
@@ -3164,15 +3169,20 @@ static void AiStateBuildRoadVehicles(Pla
 

	
 
	for(i=0; p->ai.order_list_blocks[i] != 0xFF; i++) {
 
		AiBuildRec *aib = (&p->ai.src) + p->ai.order_list_blocks[i];
 
		uint flags  = (AiGetStationIdFromRoadBlock(aib->use_tile, aib->cur_building_rule) << 8) + OT_GOTO_STATION;
 
		bool is_pass = (p->ai.cargo_type == CT_PASSENGERS ||
 
							p->ai.cargo_type == CT_MAIL ||
 
							(_opt.landscape==LT_NORMAL && p->ai.cargo_type == CT_VALUABLES));
 

	
 
		if (!is_pass && i == 1) flags |= OF_UNLOAD;
 
		if (p->ai.num_want_fullload != 0 && (is_pass || i == 0)) flags |= OF_FULL_LOAD;
 

	
 
		DoCommandByTile(0, loco_id + (i << 16),	flags, DC_EXEC, CMD_INSERT_ORDER);
 
		Order order;
 

	
 
		order.type = OT_GOTO_STATION;
 
		order.flags = 0;
 
		order.station = AiGetStationIdFromRoadBlock(aib->use_tile, aib->cur_building_rule);
 

	
 
		if (!is_pass && i == 1) order.flags |= OF_UNLOAD;
 
		if (p->ai.num_want_fullload != 0 && (is_pass || i == 0))
 
			order.flags |= OF_FULL_LOAD;
 

	
 
		DoCommandByTile(0, loco_id + (i << 16),	PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
 
	}
 

	
 
	DoCommandByTile(0, loco_id, 0, DC_EXEC, CMD_START_STOP_ROADVEH);
 
@@ -3474,13 +3484,18 @@ static void AiStateBuildAircraftVehicles
 

	
 
	for(i=0; p->ai.order_list_blocks[i] != 0xFF; i++) {
 
		AiBuildRec *aib = (&p->ai.src) + p->ai.order_list_blocks[i];
 
		uint flags = (AiGetStationIdFromAircraftBlock(aib->use_tile, aib->cur_building_rule) << 8) + OT_GOTO_STATION;
 
		bool is_pass = (p->ai.cargo_type == CT_PASSENGERS || p->ai.cargo_type == CT_MAIL);
 

	
 
		if (!is_pass && i == 1) flags |= OF_UNLOAD;
 
		if (p->ai.num_want_fullload != 0 && (is_pass || i == 0)) flags |= OF_FULL_LOAD;
 

	
 
		DoCommandByTile(0, loco_id + (i << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
 
		Order order;
 

	
 
		order.type = OT_GOTO_STATION;
 
		order.flags = 0;
 
		order.station = AiGetStationIdFromAircraftBlock(aib->use_tile, aib->cur_building_rule);
 

	
 
		if (!is_pass && i == 1) order.flags |= OF_UNLOAD;
 
		if (p->ai.num_want_fullload != 0 && (is_pass || i == 0))
 
			order.flags |= OF_FULL_LOAD;
 

	
 
		DoCommandByTile(0, loco_id + (i << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
 
	}
 

	
 
	DoCommandByTile(0, loco_id, 0, DC_EXEC, CMD_START_STOP_AIRCRAFT);
ai_new.c
Show inline comments
 
@@ -1114,7 +1114,9 @@ static void AiNew_State_BuildVehicle(Pla
 

	
 
// Put the stations in the order list
 
static void AiNew_State_GiveOrders(Player *p) {
 
    int order, flags;
 
		int idx;
 
		Order order;
 

	
 
    assert(p->ainew.state == AI_STATE_GIVE_ORDERS);
 

	
 
    if (p->ainew.veh_main_id != (VehicleID)-1) {
 
@@ -1131,23 +1133,29 @@ static void AiNew_State_GiveOrders(Playe
 
    }
 

	
 
    // When more then 1 vehicle, we send them to different directions
 
    order = 0;
 
    flags = (_map2[p->ainew.from_tile] << 8) | OT_GOTO_STATION;
 
		idx = 0;
 
		order.type = OT_GOTO_STATION;
 
		order.flags = 0;
 
		order.station = _map2[p->ainew.from_tile];
 
    if (p->ainew.tbt == AI_TRUCK && p->ainew.from_deliver)
 
    	flags |= OF_FULL_LOAD;
 
    DoCommandByTile(0, p->ainew.veh_id + (order << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
 
			order.flags |= OF_FULL_LOAD;
 
		DoCommandByTile(0, p->ainew.veh_id + (idx << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
 

	
 
    order = 1;
 
    flags = (_map2[p->ainew.to_tile] << 8) | OT_GOTO_STATION;
 
		idx = 1;
 
		order.type = OT_GOTO_STATION;
 
		order.flags = 0;
 
		order.station = _map2[p->ainew.to_tile];
 
    if (p->ainew.tbt == AI_TRUCK && p->ainew.to_deliver)
 
    	flags |= OF_FULL_LOAD;
 
    DoCommandByTile(0, p->ainew.veh_id + (order << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
 
			order.flags |= OF_FULL_LOAD;
 
		DoCommandByTile(0, p->ainew.veh_id + (idx << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
 

	
 
	// Very handy for AI, goto depot.. but yeah, it needs to be activated ;)
 
    if (_patches.gotodepot) {
 
    	order = 2;
 
	    flags = (GetDepotByTile(p->ainew.depot_tile) << 8) | OT_GOTO_DEPOT | OF_UNLOAD;
 
	    DoCommandByTile(0, p->ainew.veh_id + (order << 16), flags, DC_EXEC, CMD_INSERT_ORDER);
 
			idx = 2;
 
			order.type = OT_GOTO_DEPOT;
 
			order.flags = OF_UNLOAD;
 
			order.station = GetDepotByTile(p->ainew.depot_tile);
 
			DoCommandByTile(0, p->ainew.veh_id + (idx << 16), PackOrder(&order), DC_EXEC, CMD_INSERT_ORDER);
 
	}
 

	
 
    // Start the engines!
order_gui.c
Show inline comments
 
@@ -161,8 +161,9 @@ Vehicle *GetVehicleOnTile(TileIndex tile
 
	return VehicleFromPos(tile, &fs, (VehicleFromPosProc*)FindVehicleCallb);
 
}
 

	
 
static uint GetOrderCmdFromTile(Vehicle *v, uint tile)
 
static Order GetOrderCmdFromTile(Vehicle *v, uint tile)
 
{
 
	Order order;
 
	Station *st;
 
	int st_index;
 

	
 
@@ -172,19 +173,28 @@ static uint GetOrderCmdFromTile(Vehicle 
 
		case MP_RAILWAY:
 
			if (v->type == VEH_Train && _map_owner[tile] == _local_player) {
 
				if ((_map5[tile]&0xFC)==0xC0)
 
					return (GetDepotByTile(tile)<<8) | OT_GOTO_DEPOT | OF_UNLOAD;
 
					order.type = OT_GOTO_DEPOT;
 
					order.flags = OF_UNLOAD;
 
					order.station = GetDepotByTile(tile);
 
					return order;
 
			}
 
			break;
 

	
 
		case MP_STREET:
 
			if ((_map5[tile] & 0xF0) == 0x20 && v->type == VEH_Road && _map_owner[tile] == _local_player)
 
				return (GetDepotByTile(tile)<<8) | OT_GOTO_DEPOT | OF_UNLOAD;
 
				order.type = OT_GOTO_DEPOT;
 
				order.flags = OF_UNLOAD;
 
				order.station = GetDepotByTile(tile);
 
				return order;
 
			break;
 

	
 
		case MP_STATION:
 
			if (v->type != VEH_Aircraft) break;
 
			if ( IsAircraftHangarTile(tile) && _map_owner[tile] == _local_player)
 
				return (_map2[tile]<<8) | OF_UNLOAD | OT_GOTO_DEPOT | OF_NON_STOP;
 
				order.type = OT_GOTO_DEPOT;
 
				order.flags = OF_UNLOAD | OF_NON_STOP;
 
				order.station = _map2[tile];
 
				return order;
 
			break;
 

	
 
		case MP_WATER:
 
@@ -194,7 +204,10 @@ static uint GetOrderCmdFromTile(Vehicle 
 
				case 0x81: tile--; break;
 
				case 0x83: tile-= TILE_XY(0,1); break;
 
				}
 
				return (GetDepotByTile(tile)<<8) | OT_GOTO_DEPOT | OF_UNLOAD;
 
				order.type = OT_GOTO_DEPOT;
 
				order.flags = OF_UNLOAD;
 
				order.station = GetDepotByTile(tile);
 
				return order;
 
			}
 
		}
 
	}
 
@@ -203,8 +216,12 @@ static uint GetOrderCmdFromTile(Vehicle 
 
	if (IS_TILETYPE(tile, MP_RAILWAY)
 
	&& v->type == VEH_Train 
 
	&& _map_owner[tile] == _local_player
 
	&& (_map5[tile]&0xFE)==0xC4)
 
		return (GetWaypointByTile(tile)<<8) | OT_GOTO_WAYPOINT;
 
	&& (_map5[tile]&0xFE)==0xC4) {
 
		order.type = OT_GOTO_WAYPOINT;
 
		order.flags = 0;
 
		order.station = GetWaypointByTile(tile);
 
		return order;
 
	}
 

	
 
	if (IS_TILETYPE(tile, MP_STATION)) {
 
		st = DEREF_STATION(st_index = _map2[tile]);
 
@@ -216,13 +233,19 @@ static uint GetOrderCmdFromTile(Vehicle 
 
			(facil=FACIL_AIRPORT, v->type == VEH_Aircraft) ||
 
			(facil=FACIL_BUS_STOP, v->type == VEH_Road && v->cargo_type == CT_PASSENGERS) ||
 
			(facil=FACIL_TRUCK_STOP, 1);
 
			if (st->facilities & facil)
 
				return (st_index << 8) | OT_GOTO_STATION;
 
			if (st->facilities & facil) {
 
				order.type = OT_GOTO_STATION;
 
				order.flags = 0;
 
				order.station = st_index;
 
				return order;
 
			}
 
		}
 
	}
 

	
 
	// not found
 
	return (uint)-1;
 
	order.type = OT_NOTHING;
 
	order.flags = 0;
 
	return order;
 
}
 

	
 
static bool HandleOrderVehClick(Vehicle *v, Vehicle *u, Window *w)
 
@@ -251,7 +274,7 @@ static bool HandleOrderVehClick(Vehicle 
 

	
 
static void OrdersPlaceObj(Vehicle *v, uint tile, Window *w)
 
{
 
	uint cmd;
 
	Order cmd;
 
	Vehicle *u;
 

	
 
	// check if we're clicking on a vehicle first.. clone orders in that case.
 
@@ -260,9 +283,9 @@ static void OrdersPlaceObj(Vehicle *v, u
 
		return;
 

	
 
	cmd = GetOrderCmdFromTile(v, tile);
 
	if ( cmd == (uint)-1) return;
 
	if (cmd.type == OT_NOTHING) return;
 

	
 
	if (DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), cmd, NULL, CMD_INSERT_ORDER | CMD_MSG(STR_8833_CAN_T_INSERT_NEW_ORDER))) {
 
	if (DoCommandP(v->tile, v->index + (OrderGetSel(w) << 16), PackOrder(&cmd), NULL, CMD_INSERT_ORDER | CMD_MSG(STR_8833_CAN_T_INSERT_NEW_ORDER))) {
 
		if (WP(w,order_d).sel != -1)
 
			WP(w,order_d).sel++;
 
		ResetObjectToPlace();
0 comments (0 inline, 0 general)