Mercurial > hg > openttd
changeset 19:10ff2b3e2780 draft
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
author | dominik <dominik@openttd.org> |
---|---|
date | Wed, 11 Aug 2004 10:15:38 +0000 |
parents | 90238fa5e5dc |
children | 5c78444d3e3d |
files | aircraft_cmd.c lang/english.txt order_cmd.c roadveh_cmd.c ship_cmd.c train_cmd.c vehicle.h |
diffstat | 7 files changed, 102 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/aircraft_cmd.c +++ b/aircraft_cmd.c @@ -563,6 +563,8 @@ if ((++v->day_counter & 7) == 0) DecreaseVehicleValue(v); + CheckOrders(v); + CheckVehicleBreakdown(v); AgeVehicle(v); CheckIfAircraftNeedsService(v);
--- a/lang/english.txt +++ b/lang/english.txt @@ -903,6 +903,19 @@ STR_TRAIN_IS_UNPROFITABLE :{WHITE}Train {COMMA16}'s profit last year was {CURRENCY} STR_EURO_INTRODUCE :{BLACK}{BIGFONT}European Monetary Union!{}{}The Euro is introduced as the sole currency for everyday transactions in your country! +STR_TRAIN_HAS_TOO_FEW_ORDERS :{WHITE}Train {COMMA16} has too few orders in the schedule +STR_TRAIN_HAS_VOID_ORDER :{WHITE}Train {COMMA16} has a void order +STR_TRAIN_HAS_DUPLICATE_ENTRY :{WHITE}Train {COMMA16} has duplicate orders +STR_AIRCRAFT_HAS_TOO_FEW_ORDERS :{WHITE}Aircraft {COMMA16} has too few orders in the schedule +STR_AIRCRAFT_HAS_VOID_ORDER :{WHITE}Aircraft {COMMA16} has void order +STR_AIRCRAFT_HAS_DUPLICATE_ENTRY :{WHITE}Aircraft {COMMA16} has duplicate orders +STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Road Vehicle {COMMA16} has too few orders in the schedule +STR_ROADVEHICLE_HAS_VOID_ORDER :{WHITE}Road Vehicle {COMMA16} has void order +STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Road Vehicle {COMMA16} has duplicate orders +STR_SHIP_HAS_TOO_FEW_ORDERS :{WHITE}Ship {COMMA16} has too few orders in the schedule +STR_SHIP_HAS_VOID_ORDER :{WHITE}Ship {COMMA16} has void order +STR_SHIP_HAS_DUPLICATE_ENTRY :{WHITE}Ship {COMMA16} has duplicate orders + STR_CONFIG_PATCHES :{BLACK}Configure Patches STR_CONFIG_PATCHES_TIP :{BLACK}Configure the patches STR_CONFIG_PATCHES_CAPTION :{WHITE}Configure Patches
--- a/order_cmd.c +++ b/order_cmd.c @@ -4,6 +4,7 @@ #include "command.h" #include "station.h" #include "player.h" +#include "news.h" /* p1 & 0xFFFF = vehicle * p1 >> 16 = index in order list @@ -330,3 +331,80 @@ } return 0; } + +int CheckOrders(Vehicle *v) +{ + int i, n_st, duplicate; + uint16 order, old_orderer; + uint16 dummy; + int message=0; + + /* check the order list */ + order = v->schedule_ptr[0]; + n_st = duplicate = dummy = 0; + + /* only check every 20 days */ + if ( ( ( v->day_counter % 20) == 0 ) && (v->owner == _local_player) ) { + for(old_orderer = i = 0; order!=0; i++ ) { + order = v->schedule_ptr[i]; + if (order == old_orderer) duplicate = -1; + if ( (order & OT_MASK) == OT_DUMMY ) dummy = -1; + if ( ( (order & OT_MASK) == OT_GOTO_STATION ) /*&& (order != old_order) */) { + //I uncommented this in order not to get two error messages + //when two identical entries are in the list + n_st++; + } + old_orderer = order; //store the old order + } + + //Now, check the last and the first order + //as the last order is the end of order marker, jump back 2 + if ( (v->schedule_ptr[0] == v->schedule_ptr[i-2]) && ( i-2 != 0 ) ) duplicate = -1; + + SET_DPARAM16(0, v->unitnumber); + + if (n_st < 2) { + switch (v->type) { + case VEH_Train: message = STR_TRAIN_HAS_TOO_FEW_ORDERS; break; + case VEH_Road: message = STR_ROADVEHICLE_HAS_TOO_FEW_ORDERS; break; + case VEH_Ship: message = STR_SHIP_HAS_TOO_FEW_ORDERS; break; + case VEH_Aircraft: message = STR_AIRCRAFT_HAS_TOO_FEW_ORDERS; break; + } + AddNewsItem( + message, + NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0), + v->index, + 0); + } else if (duplicate) { + switch (v->type) { + case VEH_Train: message = STR_TRAIN_HAS_DUPLICATE_ENTRY; break; + case VEH_Road: message = STR_ROADVEHICLE_HAS_DUPLICATE_ENTRY; break; + case VEH_Ship: message = STR_SHIP_HAS_DUPLICATE_ENTRY; break; + case VEH_Aircraft: message = STR_AIRCRAFT_HAS_DUPLICATE_ENTRY; break; + } + AddNewsItem( + message, + NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0), + v->index, + 0); + } else if (dummy) { + switch (v->type) { + case VEH_Train: message = STR_TRAIN_HAS_VOID_ORDER; break; + case VEH_Road: message = STR_ROADVEHICLE_HAS_VOID_ORDER; break; + case VEH_Ship: message = STR_SHIP_HAS_VOID_ORDER; break; + case VEH_Aircraft: message = STR_AIRCRAFT_HAS_VOID_ORDER; break; + } + AddNewsItem( + message, + NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0), + v->index, + 0); + } + } + // End of order check + + if ( (n_st > 2) || (duplicate) || (dummy) ) + return 1; + else + return 0; +}
--- a/roadveh_cmd.c +++ b/roadveh_cmd.c @@ -1540,6 +1540,8 @@ AgeVehicle(v); CheckIfRoadVehNeedsService(v); + CheckOrders(v); + /* update destination */ if ((v->next_order & OT_MASK) == OT_GOTO_STATION) { st = DEREF_STATION(v->next_order_param);
--- a/ship_cmd.c +++ b/ship_cmd.c @@ -127,9 +127,13 @@ AgeVehicle(v); CheckIfShipNeedsService(v); + CheckOrders(v); + if (v->vehstatus & VS_STOPPED) return; + + cost = ship_vehicle_info(v->engine_type).running_cost * _price.ship_running / 364; v->profit_this_year -= cost >> 8;