|
@@ -160,7 +160,7 @@ Order UnpackOldOrder(uint16 packed)
|
|
|
* Sanity check
|
|
|
* TTD stores invalid orders as OT_NOTHING with non-zero flags/station
|
|
|
*/
|
|
|
if (!order.IsValid() && (order.flags != 0 || order.dest != 0)) {
|
|
|
if (!order.IsValid() && (order.flags != 0 || order.GetDestination() != 0)) {
|
|
|
order.MakeDummy();
|
|
|
}
|
|
|
|
|
@@ -234,8 +234,8 @@ static TileIndex GetOrderLocation(const
|
|
|
{
|
|
|
switch (o.GetType()) {
|
|
|
default: NOT_REACHED();
|
|
|
case OT_GOTO_STATION: return GetStation(o.dest)->xy;
|
|
|
case OT_GOTO_DEPOT: return GetDepot(o.dest)->xy;
|
|
|
case OT_GOTO_STATION: return GetStation(o.GetDestination())->xy;
|
|
|
case OT_GOTO_DEPOT: return GetDepot(o.GetDestination())->xy;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -267,10 +267,9 @@ CommandCost CmdInsertOrder(TileIndex til
|
|
|
* and has the correct flags if any */
|
|
|
switch (new_order.GetType()) {
|
|
|
case OT_GOTO_STATION: {
|
|
|
const Station *st;
|
|
|
if (!IsValidStationID(new_order.GetDestination())) return CMD_ERROR;
|
|
|
|
|
|
if (!IsValidStationID(new_order.dest)) return CMD_ERROR;
|
|
|
st = GetStation(new_order.dest);
|
|
|
const Station *st = GetStation(new_order.GetDestination());
|
|
|
|
|
|
if (st->owner != OWNER_NONE && !CheckOwnership(st->owner)) {
|
|
|
return CMD_ERROR;
|
|
@@ -330,10 +329,9 @@ CommandCost CmdInsertOrder(TileIndex til
|
|
|
|
|
|
case OT_GOTO_DEPOT: {
|
|
|
if (v->type == VEH_AIRCRAFT) {
|
|
|
const Station* st;
|
|
|
if (!IsValidStationID(new_order.GetDestination())) return CMD_ERROR;
|
|
|
|
|
|
if (!IsValidStationID(new_order.dest)) return CMD_ERROR;
|
|
|
st = GetStation(new_order.dest);
|
|
|
const Station *st = GetStation(new_order.GetDestination());
|
|
|
|
|
|
if (!CheckOwnership(st->owner) ||
|
|
|
!(st->facilities & FACIL_AIRPORT) ||
|
|
@@ -342,10 +340,9 @@ CommandCost CmdInsertOrder(TileIndex til
|
|
|
return CMD_ERROR;
|
|
|
}
|
|
|
} else {
|
|
|
const Depot* dp;
|
|
|
if (!IsValidDepotID(new_order.GetDestination())) return CMD_ERROR;
|
|
|
|
|
|
if (!IsValidDepotID(new_order.dest)) return CMD_ERROR;
|
|
|
dp = GetDepot(new_order.dest);
|
|
|
const Depot *dp = GetDepot(new_order.GetDestination());
|
|
|
|
|
|
if (!CheckOwnership(GetTileOwner(dp->xy))) return CMD_ERROR;
|
|
|
|
|
@@ -385,12 +382,11 @@ CommandCost CmdInsertOrder(TileIndex til
|
|
|
}
|
|
|
|
|
|
case OT_GOTO_WAYPOINT: {
|
|
|
const Waypoint* wp;
|
|
|
|
|
|
if (v->type != VEH_TRAIN) return CMD_ERROR;
|
|
|
|
|
|
if (!IsValidWaypointID(new_order.dest)) return CMD_ERROR;
|
|
|
wp = GetWaypoint(new_order.dest);
|
|
|
if (!IsValidWaypointID(new_order.GetDestination())) return CMD_ERROR;
|
|
|
const Waypoint *wp = GetWaypoint(new_order.GetDestination());
|
|
|
|
|
|
if (!CheckOwnership(GetTileOwner(wp->xy))) return CMD_ERROR;
|
|
|
|
|
@@ -769,7 +765,7 @@ CommandCost CmdModifyOrder(TileIndex til
|
|
|
if (sel_ord >= v->num_orders) return CMD_ERROR;
|
|
|
|
|
|
order = GetVehicleOrder(v, sel_ord);
|
|
|
if ((!order->IsType(OT_GOTO_STATION) || GetStation(order->dest)->IsBuoy()) &&
|
|
|
if ((!order->IsType(OT_GOTO_STATION) || GetStation(order->GetDestination())->IsBuoy()) &&
|
|
|
(!order->IsType(OT_GOTO_DEPOT) || p2 == OF_UNLOAD) &&
|
|
|
(!order->IsType(OT_GOTO_WAYPOINT) || p2 != OF_NON_STOP)) {
|
|
|
return CMD_ERROR;
|
|
@@ -909,7 +905,7 @@ CommandCost CmdCloneOrder(TileIndex tile
|
|
|
|
|
|
FOR_VEHICLE_ORDERS(src, order) {
|
|
|
if (order->IsType(OT_GOTO_STATION)) {
|
|
|
const Station *st = GetStation(order->dest);
|
|
|
const Station *st = GetStation(order->GetDestination());
|
|
|
if (IsCargoInClass(dst->cargo_type, CC_PASSENGERS)) {
|
|
|
if (st->bus_stops != NULL) required_dst = st->bus_stops->xy;
|
|
|
} else {
|
|
@@ -1190,7 +1186,7 @@ void CheckOrders(const Vehicle* v)
|
|
|
}
|
|
|
/* Does station have a load-bay for this vehicle? */
|
|
|
if (order->IsType(OT_GOTO_STATION)) {
|
|
|
const Station* st = GetStation(order->dest);
|
|
|
const Station* st = GetStation(order->GetDestination());
|
|
|
TileIndex required_tile = GetStationTileForVehicle(v, st);
|
|
|
|
|
|
n_st++;
|
|
@@ -1251,7 +1247,7 @@ void RemoveOrderFromAllVehicles(OrderTyp
|
|
|
|
|
|
order = &v->current_order;
|
|
|
if ((v->type == VEH_AIRCRAFT && order->IsType(OT_GOTO_DEPOT) ? OT_GOTO_STATION : order->GetType()) == type &&
|
|
|
v->current_order.dest == destination) {
|
|
|
v->current_order.GetDestination() == destination) {
|
|
|
order->MakeDummy();
|
|
|
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
|
|
}
|
|
@@ -1260,7 +1256,7 @@ void RemoveOrderFromAllVehicles(OrderTyp
|
|
|
invalidate = false;
|
|
|
FOR_VEHICLE_ORDERS(v, order) {
|
|
|
if ((v->type == VEH_AIRCRAFT && order->IsType(OT_GOTO_DEPOT) ? OT_GOTO_STATION : order->GetType()) == type &&
|
|
|
order->dest == destination) {
|
|
|
order->GetDestination() == destination) {
|
|
|
order->MakeDummy();
|
|
|
invalidate = true;
|
|
|
}
|
|
@@ -1414,8 +1410,8 @@ bool ProcessOrders(Vehicle *v)
|
|
|
if (_patches.new_nonstop &&
|
|
|
v->current_order.flags & OFB_NON_STOP &&
|
|
|
IsTileType(v->tile, MP_STATION) &&
|
|
|
v->current_order.dest == GetStationIndex(v->tile)) {
|
|
|
v->last_station_visited = v->current_order.dest;
|
|
|
v->current_order.GetDestination() == GetStationIndex(v->tile)) {
|
|
|
v->last_station_visited = v->current_order.GetDestination();
|
|
|
UpdateVehicleTimetable(v, true);
|
|
|
v->cur_order_index++;
|
|
|
}
|
|
@@ -1442,7 +1438,7 @@ bool ProcessOrders(Vehicle *v)
|
|
|
|
|
|
/* If it is unchanged, keep it. */
|
|
|
if (order->Equals(v->current_order) &&
|
|
|
(v->type != VEH_SHIP || !order->IsType(OT_GOTO_STATION) || GetStation(order->dest)->dock_tile != 0)) {
|
|
|
(v->type != VEH_SHIP || !order->IsType(OT_GOTO_STATION) || GetStation(order->GetDestination())->dock_tile != 0)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -1466,15 +1462,15 @@ bool ProcessOrders(Vehicle *v)
|
|
|
|
|
|
switch (order->GetType()) {
|
|
|
case OT_GOTO_STATION:
|
|
|
v->dest_tile = v->GetOrderStationLocation(order->dest);
|
|
|
v->dest_tile = v->GetOrderStationLocation(order->GetDestination());
|
|
|
break;
|
|
|
|
|
|
case OT_GOTO_DEPOT:
|
|
|
if (v->type != VEH_AIRCRAFT) v->dest_tile = GetDepot(order->dest)->xy;
|
|
|
if (v->type != VEH_AIRCRAFT) v->dest_tile = GetDepot(order->GetDestination())->xy;
|
|
|
break;
|
|
|
|
|
|
case OT_GOTO_WAYPOINT:
|
|
|
v->dest_tile = GetWaypoint(order->dest)->xy;
|
|
|
v->dest_tile = GetWaypoint(order->GetDestination())->xy;
|
|
|
break;
|
|
|
|
|
|
default:
|