mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
This commit is contained in:
parent
a778b317f6
commit
6f8e7943c5
|
@ -563,6 +563,8 @@ void OnNewDay_Aircraft(Vehicle *v)
|
||||||
if ((++v->day_counter & 7) == 0)
|
if ((++v->day_counter & 7) == 0)
|
||||||
DecreaseVehicleValue(v);
|
DecreaseVehicleValue(v);
|
||||||
|
|
||||||
|
CheckOrders(v);
|
||||||
|
|
||||||
CheckVehicleBreakdown(v);
|
CheckVehicleBreakdown(v);
|
||||||
AgeVehicle(v);
|
AgeVehicle(v);
|
||||||
CheckIfAircraftNeedsService(v);
|
CheckIfAircraftNeedsService(v);
|
||||||
|
|
|
@ -903,6 +903,19 @@ STR_TRAIN_IS_LOST :{WHITE}Train {COMMA16} is lost.
|
||||||
STR_TRAIN_IS_UNPROFITABLE :{WHITE}Train {COMMA16}'s profit last year was {CURRENCY}
|
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_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 :{BLACK}Configure Patches
|
||||||
STR_CONFIG_PATCHES_TIP :{BLACK}Configure the patches
|
STR_CONFIG_PATCHES_TIP :{BLACK}Configure the patches
|
||||||
STR_CONFIG_PATCHES_CAPTION :{WHITE}Configure Patches
|
STR_CONFIG_PATCHES_CAPTION :{WHITE}Configure Patches
|
||||||
|
|
78
order_cmd.c
78
order_cmd.c
|
@ -4,6 +4,7 @@
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
#include "station.h"
|
#include "station.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
#include "news.h"
|
||||||
|
|
||||||
/* p1 & 0xFFFF = vehicle
|
/* p1 & 0xFFFF = vehicle
|
||||||
* p1 >> 16 = index in order list
|
* p1 >> 16 = index in order list
|
||||||
|
@ -330,3 +331,80 @@ int32 CmdRestoreOrderIndex(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||||
}
|
}
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -1540,6 +1540,8 @@ void OnNewDay_RoadVeh(Vehicle *v)
|
||||||
AgeVehicle(v);
|
AgeVehicle(v);
|
||||||
CheckIfRoadVehNeedsService(v);
|
CheckIfRoadVehNeedsService(v);
|
||||||
|
|
||||||
|
CheckOrders(v);
|
||||||
|
|
||||||
/* update destination */
|
/* update destination */
|
||||||
if ((v->next_order & OT_MASK) == OT_GOTO_STATION) {
|
if ((v->next_order & OT_MASK) == OT_GOTO_STATION) {
|
||||||
st = DEREF_STATION(v->next_order_param);
|
st = DEREF_STATION(v->next_order_param);
|
||||||
|
|
|
@ -127,9 +127,13 @@ void OnNewDay_Ship(Vehicle *v)
|
||||||
AgeVehicle(v);
|
AgeVehicle(v);
|
||||||
CheckIfShipNeedsService(v);
|
CheckIfShipNeedsService(v);
|
||||||
|
|
||||||
|
CheckOrders(v);
|
||||||
|
|
||||||
if (v->vehstatus & VS_STOPPED)
|
if (v->vehstatus & VS_STOPPED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cost = ship_vehicle_info(v->engine_type).running_cost * _price.ship_running / 364;
|
cost = ship_vehicle_info(v->engine_type).running_cost * _price.ship_running / 364;
|
||||||
v->profit_this_year -= cost >> 8;
|
v->profit_this_year -= cost >> 8;
|
||||||
|
|
||||||
|
|
|
@ -2578,6 +2578,8 @@ void OnNewDay_Train(Vehicle *v)
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CheckOrders(v);
|
||||||
|
|
||||||
/* update destination */
|
/* update destination */
|
||||||
if ((v->next_order & OT_MASK) == OT_GOTO_STATION &&
|
if ((v->next_order & OT_MASK) == OT_GOTO_STATION &&
|
||||||
(tile=DEREF_STATION(v->next_order_param)->train_tile) != 0)
|
(tile=DEREF_STATION(v->next_order_param)->train_tile) != 0)
|
||||||
|
|
|
@ -354,6 +354,7 @@ int32 GetTrainRunningCost(Vehicle *v);
|
||||||
int CheckStoppedInDepot(Vehicle *v);
|
int CheckStoppedInDepot(Vehicle *v);
|
||||||
|
|
||||||
int ScheduleHasDepotOrders(uint16 *schedule);
|
int ScheduleHasDepotOrders(uint16 *schedule);
|
||||||
|
int CheckOrders(Vehicle *v);
|
||||||
|
|
||||||
typedef struct GetNewVehiclePosResult {
|
typedef struct GetNewVehiclePosResult {
|
||||||
int x,y;
|
int x,y;
|
||||||
|
|
Loading…
Reference in New Issue