mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r6249) -Fix: fixed assert when pressing goto depot in an empty list (forgot to disable the button in this condition)
-Code cleanup r6246: simplified SendAllVehiclesToDepot() and moved an { in PlayerVehWndProc()
This commit is contained in:
parent
f91fce66cb
commit
7922c9ff84
25
vehicle.c
25
vehicle.c
|
@ -1908,31 +1908,22 @@ static void MaybeReplaceVehicle(Vehicle *v)
|
||||||
int32 SendAllVehiclesToDepot(byte type, uint32 flags, bool service, PlayerID owner)
|
int32 SendAllVehiclesToDepot(byte type, uint32 flags, bool service, PlayerID owner)
|
||||||
{
|
{
|
||||||
const uint subtype = (type != VEH_Aircraft) ? Train_Front : 2;
|
const uint subtype = (type != VEH_Aircraft) ? Train_Front : 2;
|
||||||
if (flags & DC_EXEC) {
|
const Vehicle *v;
|
||||||
|
|
||||||
/* Send all the vehicles to a depot */
|
/* Send all the vehicles to a depot */
|
||||||
const Vehicle *v;
|
|
||||||
FOR_ALL_VEHICLES(v) {
|
FOR_ALL_VEHICLES(v) {
|
||||||
if (v->type == type && v->owner == owner && (
|
if (v->type == type && v->owner == owner && (
|
||||||
(type == VEH_Train && IsFrontEngine(v)) ||
|
(type == VEH_Train && IsFrontEngine(v)) ||
|
||||||
(type != VEH_Train && v->subtype <= subtype))) {
|
(type != VEH_Train && v->subtype <= subtype))) {
|
||||||
DoCommand(v->tile, v->index, service, flags, CMD_SEND_TO_DEPOT(type));
|
/* Return 0 if DC_EXEC is not set and a DoCommand() returns 0 (valid goto depot command) */
|
||||||
}
|
/* In this case we know that at least one vehicle can be send to a depot and we will issue the command */
|
||||||
}
|
/* Since we will issue the command nomatter how many vehicles more than one it's valid for, we skip checking the rest */
|
||||||
} else {
|
/* When DC_EXEC is set, we need to run this loop for all vehicles nomatter return values from each vehicle */
|
||||||
/* See if we can find a vehicle to send to a depot */
|
if (!DoCommand(v->tile, v->index, service, flags, CMD_SEND_TO_DEPOT(type)) && !(flags & DC_EXEC)) return 0;
|
||||||
const Vehicle *v;
|
|
||||||
FOR_ALL_VEHICLES(v) {
|
|
||||||
if (v->type == type && v->owner == owner && (
|
|
||||||
(type == VEH_Train && IsFrontEngine(v)) ||
|
|
||||||
(type != VEH_Train && v->subtype <= subtype))) {
|
|
||||||
/* We found one vehicle to send to a depot. No need to search for more. The command is valid */
|
|
||||||
if (!DoCommand(v->tile, v->index, service, flags, CMD_SEND_TO_DEPOT(type))) return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return CMD_ERROR;
|
return (flags & DC_EXEC) ? 0 : CMD_ERROR;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1268,6 +1268,7 @@ void PlayerVehWndProc(Window *w, WindowEvent *e)
|
||||||
SetDParam(0, p->name_1);
|
SetDParam(0, p->name_1);
|
||||||
SetDParam(1, p->name_2);
|
SetDParam(1, p->name_2);
|
||||||
SetDParam(2, w->vscroll.count);
|
SetDParam(2, w->vscroll.count);
|
||||||
|
if (vl->list_length == 0) SETBIT(w->disabled_state, 9);
|
||||||
if (vehicle_type == VEH_Aircraft) {
|
if (vehicle_type == VEH_Aircraft) {
|
||||||
w->widget[9].unkA = STR_SEND_TO_HANGARS;
|
w->widget[9].unkA = STR_SEND_TO_HANGARS;
|
||||||
w->widget[9].tooltips = STR_SEND_TO_HANGARS_TIP;
|
w->widget[9].tooltips = STR_SEND_TO_HANGARS_TIP;
|
||||||
|
@ -1404,10 +1405,9 @@ void PlayerVehWndProc(Window *w, WindowEvent *e)
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case 9: /* Left button */
|
case 9: { /* Left button */
|
||||||
if (GB(w->window_number, 0, 8) /* OwnerID */ != _local_player) break;
|
|
||||||
{
|
|
||||||
uint16 window_type = w->window_number & VLW_FLAGS;
|
uint16 window_type = w->window_number & VLW_FLAGS;
|
||||||
|
if (GB(w->window_number, 0, 8) /* OwnerID */ != _local_player) break;
|
||||||
switch (window_type) {
|
switch (window_type) {
|
||||||
case VLW_STANDARD:
|
case VLW_STANDARD:
|
||||||
case VLW_SHARED_ORDERS: {
|
case VLW_SHARED_ORDERS: {
|
||||||
|
|
Loading…
Reference in New Issue