diff options
author | tron <tron@openttd.org> | 2006-03-04 11:01:35 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2006-03-04 11:01:35 +0000 |
commit | 4270026b4248bbaa1b1b46b099baadbd24921dd0 (patch) | |
tree | 2eef654bc6b8956ee2e2ff73c1a3f6e72b920031 /order_cmd.c | |
parent | 006444a0dcb20f44d5be0f7827b68fa379c4d77a (diff) | |
download | openttd-4270026b4248bbaa1b1b46b099baadbd24921dd0.tar.xz |
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
This is used to delete
- all news about a vehicle, when it gets deleted
- "vehicle has stopped in depot" news, when it gets started
- "vehicle has invalid orders" news, when the orders get changed
Diffstat (limited to 'order_cmd.c')
-rw-r--r-- | order_cmd.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/order_cmd.c b/order_cmd.c index 22770eac4..c0b950952 100644 --- a/order_cmd.c +++ b/order_cmd.c @@ -143,6 +143,22 @@ void AssignOrder(Order *order, Order data) order->station = data.station; } + +/** + * Delete all news items regarding defective orders about a vehicle + * This could kill still valid warnings (for example about void order when just + * another order gets added), but assume the player will notice the problems, + * when (s)he's changing the orders. + */ +static void DeleteOrderWarnings(const Vehicle* v) +{ + DeleteVehicleNews(v->index, STR_TRAIN_HAS_TOO_FEW_ORDERS + (v->type - VEH_Train) * 4); + DeleteVehicleNews(v->index, STR_TRAIN_HAS_VOID_ORDER + (v->type - VEH_Train) * 4); + DeleteVehicleNews(v->index, STR_TRAIN_HAS_DUPLICATE_ENTRY + (v->type - VEH_Train) * 4); + DeleteVehicleNews(v->index, STR_TRAIN_HAS_INVALID_ENTRY + (v->type - VEH_Train) * 4); +} + + /** Add an order to the orderlist of a vehicle. * @param x,y unused * @param p1 various bitstuffed elements @@ -366,7 +382,9 @@ int32 CmdInsertOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2) } } - for (u = GetFirstVehicleFromSharedList(v); u != NULL; u = u->next_shared) { + u = GetFirstVehicleFromSharedList(v); + DeleteOrderWarnings(u); + for (; u != NULL; u = u->next_shared) { /* Increase amount of orders */ u->num_orders++; @@ -451,7 +469,9 @@ int32 CmdDeleteOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2) order->type = OT_NOTHING; order->next = NULL; - for (u = GetFirstVehicleFromSharedList(v); u != NULL; u = u->next_shared) { + u = GetFirstVehicleFromSharedList(v); + DeleteOrderWarnings(u); + for (; u != NULL; u = u->next_shared) { u->num_orders--; if (sel_ord < u->cur_order_index) @@ -575,7 +595,9 @@ int32 CmdModifyOrder(int x, int y, uint32 flags, uint32 p1, uint32 p2) { Vehicle* u; - for (u = GetFirstVehicleFromSharedList(v); u != NULL; u = u->next_shared) { + u = GetFirstVehicleFromSharedList(v); + DeleteOrderWarnings(u); + for (; u != NULL; u = u->next_shared) { /* toggle u->current_order "Full load" flag if it changed */ if (sel_ord == u->cur_order_index && HASBIT(u->current_order.flags, OFB_FULL_LOAD) != HASBIT(order->flags, OFB_FULL_LOAD)) { @@ -1006,6 +1028,8 @@ void DeleteVehicleOrders(Vehicle *v) { Order *order, *cur; + DeleteOrderWarnings(v); + /* If we have a shared order-list, don't delete the list, but just remove our pointer */ if (IsOrderListShared(v)) { |