summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcelestar <celestar@openttd.org>2005-01-17 21:54:45 +0000
committercelestar <celestar@openttd.org>2005-01-17 21:54:45 +0000
commit6330806531ab7169d3c0f5372e68c18bbae3d05d (patch)
tree755e303bd69eb374f02087bee0e415a3f337a9c6
parentc2684258850df4c1ec5f471e4dfe08387998ad0f (diff)
downloadopenttd-6330806531ab7169d3c0f5372e68c18bbae3d05d.tar.xz
(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
-rw-r--r--aircraft_cmd.c2
-rw-r--r--order.h8
-rw-r--r--order_cmd.c34
-rw-r--r--roadveh_cmd.c2
-rw-r--r--ship_cmd.c2
-rw-r--r--train_cmd.c2
6 files changed, 41 insertions, 9 deletions
diff --git a/aircraft_cmd.c b/aircraft_cmd.c
index 4f61d21a7..06adeca0e 100644
--- a/aircraft_cmd.c
+++ b/aircraft_cmd.c
@@ -528,7 +528,7 @@ void OnNewDay_Aircraft(Vehicle *v)
if ((++v->day_counter & 7) == 0)
DecreaseVehicleValue(v);
- CheckOrders(v);
+ CheckOrders(v->index, OC_INIT);
CheckVehicleBreakdown(v);
AgeVehicle(v);
diff --git a/order.h b/order.h
index 07fd95e4a..97f823a54 100644
--- a/order.h
+++ b/order.h
@@ -33,6 +33,12 @@ enum {
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 RestoreVehicleOrders(Vehicle *v, BackuppedOrders *order);
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 --git a/order_cmd.c b/order_cmd.c
index 3a40e2241..24fe6809b 100644
--- a/order_cmd.c
+++ b/order_cmd.c
@@ -629,8 +629,9 @@ int32 CmdRestoreOrderIndex(int x, int y, uint32 flags, uint32 vehicle_id, uint32
* 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 @@ bool CheckOrders(const Vehicle *v)
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 @@ bool CheckOrders(const Vehicle *v)
/* 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 @@ bool CheckOrders(const Vehicle *v)
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 --git a/roadveh_cmd.c b/roadveh_cmd.c
index c86c52fc3..471cd99b7 100644
--- a/roadveh_cmd.c
+++ b/roadveh_cmd.c
@@ -1481,7 +1481,7 @@ void OnNewDay_RoadVeh(Vehicle *v)
AgeVehicle(v);
CheckIfRoadVehNeedsService(v);
- CheckOrders(v);
+ CheckOrders(v->index, OC_INIT);
/* update destination */
if (v->current_order.type == OT_GOTO_STATION) {
diff --git a/ship_cmd.c b/ship_cmd.c
index ba8e288ba..9b0233e93 100644
--- a/ship_cmd.c
+++ b/ship_cmd.c
@@ -145,7 +145,7 @@ void OnNewDay_Ship(Vehicle *v)
AgeVehicle(v);
CheckIfShipNeedsService(v);
- CheckOrders(v);
+ CheckOrders(v->index, OC_INIT);
if (v->vehstatus & VS_STOPPED)
return;
diff --git a/train_cmd.c b/train_cmd.c
index 06c09ce6e..783b5bbd0 100644
--- a/train_cmd.c
+++ b/train_cmd.c
@@ -2756,7 +2756,7 @@ void OnNewDay_Train(Vehicle *v)
0);
}
- CheckOrders(v);
+ CheckOrders(v->index, OC_INIT);
/* update destination */
if (v->current_order.type == OT_GOTO_STATION &&