(svn r1554) -Fix: [ 1103187 ] Order Check messages are now validated before
authorcelestar
Mon, 17 Jan 2005 21:54:45 +0000
changeset 1053 dfb5243315f1
parent 1052 53e669371277
child 1054 1757eb9df0f6
(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
aircraft_cmd.c
order.h
order_cmd.c
roadveh_cmd.c
ship_cmd.c
train_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);
--- 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);
--- 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;
--- 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) {
--- 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;
--- 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 &&