# HG changeset patch # User celestar # Date 1105998885 0 # Node ID dfb5243315f1c01fd57f419d7785469a4695364b # Parent 53e6693712771e262e99779b378fe5325e1f90f3 (svn r1554) -Fix: [ 1103187 ] Order Check messages are now validated before displayed, so that there are no stray error messages any more. -Feature/Fix: Order Checking is only execute for ONE vehicle in an order-share system diff -r 53e669371277 -r dfb5243315f1 aircraft_cmd.c --- a/aircraft_cmd.c Mon Jan 17 13:21:10 2005 +0000 +++ b/aircraft_cmd.c Mon Jan 17 21:54:45 2005 +0000 @@ -528,7 +528,7 @@ if ((++v->day_counter & 7) == 0) DecreaseVehicleValue(v); - CheckOrders(v); + CheckOrders(v->index, OC_INIT); CheckVehicleBreakdown(v); AgeVehicle(v); diff -r 53e669371277 -r dfb5243315f1 order.h --- a/order.h Mon Jan 17 13:21:10 2005 +0000 +++ b/order.h Mon Jan 17 21:54:45 2005 +0000 @@ -33,6 +33,12 @@ CO_UNSHARE = 2 }; +/* Modes for the order checker */ +enum { + OC_INIT = 0, //the order checker can initialize a news message + OC_VALIDATE = 1, //the order checker validates a news message +}; + /* If you change this, keep in mind that it is saved on 3 places: - Load_ORDR, all the global orders - Vehicle -> current_order @@ -112,7 +118,7 @@ void DeleteDestinationFromVehicleOrder(Order dest); void InvalidateVehicleOrder(const Vehicle *v); bool VehicleHasDepotOrders(const Vehicle *v); -bool CheckOrders(const Vehicle *v); +bool CheckOrders(uint data_a, uint data_b); void DeleteVehicleOrders(Vehicle *v); bool IsOrderListShared(const Vehicle *v); void AssignOrder(Order *order, Order data); diff -r 53e669371277 -r dfb5243315f1 order_cmd.c --- a/order_cmd.c Mon Jan 17 13:21:10 2005 +0000 +++ b/order_cmd.c Mon Jan 17 21:54:45 2005 +0000 @@ -629,8 +629,9 @@ * Check the orders of a vehicle, to see if there are invalid orders and stuff * */ -bool CheckOrders(const Vehicle *v) +bool CheckOrders(uint data_a, uint data_b) { + Vehicle *v = GetVehicle(data_a); /* Does the user wants us to check things? */ if (_patches.order_review_system == 0) return false; @@ -643,6 +644,10 @@ if ( (_patches.order_review_system == 1) && (v->vehstatus & VS_STOPPED) ) return false; + /* do nothing we we're not the first vehicle in a share-chain */ + if (v->next_shared != NULL) + return false; + /* Only check every 20 days, so that we don't flood the message log */ if ( ( ( v->day_counter % 20) == 0 ) && (v->owner == _local_player) ) { int n_st, problem_type = -1; @@ -653,6 +658,12 @@ /* Check the order list */ n_st = 0; + /*if (data_b == OC_INIT) { + DEBUG(misc, 3) ("CheckOrder called in mode 0 (initiation mode) for %d", v->index); + } else { + DEBUG(misc, 3) ("CheckOrder called in mode 1 (validation mode) for %d", v->index); + }*/ + FOR_VEHICLE_ORDERS(v, order) { /* Dummy order? */ if (order->type == OT_DUMMY) { @@ -683,17 +694,32 @@ problem_type = 0; /* We don't have a problem */ - if (problem_type < 0) + if (problem_type < 0) { + /*if (data_b == OC_INIT) { + DEBUG(misc, 3) ("CheckOrder mode 0: no problems found for %d", v->index); + } else { + DEBUG(misc, 3) ("CheckOrder mode 1: news item surpressed for %d", v->index); + }*/ return false; + } + + /* we have a problem, are we're just in the validation process + so don't display an error message */ + if (data_b == OC_VALIDATE) { + /*DEBUG(misc, 3) ("CheckOrder mode 1: new item validated for %d", v->index);*/ + return true; + } message = (STR_TRAIN_HAS_TOO_FEW_ORDERS) + (((v->type) - VEH_Train) << 2) + problem_type; + /*DEBUG(misc, 3) ("Checkorder mode 0: Triggered News Item for %d", v->index);*/ SetDParam(0, v->unitnumber); - AddNewsItem( + AddValidatedNewsItem( message, NEWS_FLAGS(NM_SMALL, NF_VIEWPORT | NF_VEHICLE, NT_ADVICE, 0), v->index, - 0); + OC_VALIDATE, //next time, just validate the orders + CheckOrders); } return true; diff -r 53e669371277 -r dfb5243315f1 roadveh_cmd.c --- a/roadveh_cmd.c Mon Jan 17 13:21:10 2005 +0000 +++ b/roadveh_cmd.c Mon Jan 17 21:54:45 2005 +0000 @@ -1481,7 +1481,7 @@ AgeVehicle(v); CheckIfRoadVehNeedsService(v); - CheckOrders(v); + CheckOrders(v->index, OC_INIT); /* update destination */ if (v->current_order.type == OT_GOTO_STATION) { diff -r 53e669371277 -r dfb5243315f1 ship_cmd.c --- a/ship_cmd.c Mon Jan 17 13:21:10 2005 +0000 +++ b/ship_cmd.c Mon Jan 17 21:54:45 2005 +0000 @@ -145,7 +145,7 @@ AgeVehicle(v); CheckIfShipNeedsService(v); - CheckOrders(v); + CheckOrders(v->index, OC_INIT); if (v->vehstatus & VS_STOPPED) return; diff -r 53e669371277 -r dfb5243315f1 train_cmd.c --- a/train_cmd.c Mon Jan 17 13:21:10 2005 +0000 +++ b/train_cmd.c Mon Jan 17 21:54:45 2005 +0000 @@ -2756,7 +2756,7 @@ 0); } - CheckOrders(v); + CheckOrders(v->index, OC_INIT); /* update destination */ if (v->current_order.type == OT_GOTO_STATION &&