mirror of
https://github.com/OpenTTD/OpenTTD
synced 2026-02-01 00:24:27 +01:00
(svn r24116) [1.2] -Backport from trunk:
- Fix: When starting GS or AI, always use the settings of the game, not the new-game settings [FS#5142] (r24108) - Fix: Provide translated comments in the desktop file without language name postfix (r24100) - Fix: Cloning orders of aircraft with limited range failed [FS#5131] (r24086)
This commit is contained in:
@@ -1402,13 +1402,14 @@ CommandCost CmdModifyOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
|
||||
/**
|
||||
* Check if an aircraft has enough range for an order list.
|
||||
* @param v Aircraft to check.
|
||||
* @param v_new Aircraft to check.
|
||||
* @param v_order Vehicle currently holding the order list.
|
||||
* @param first First order in the source order list.
|
||||
* @return True if the aircraft has enough range for the orders, false otherwise.
|
||||
*/
|
||||
bool CheckAircraftOrderDistance(const Aircraft *v, const Order *first)
|
||||
static bool CheckAircraftOrderDistance(const Aircraft *v_new, const Vehicle *v_order, const Order *first)
|
||||
{
|
||||
if (first == NULL || v->acache.cached_max_range == 0) return true;
|
||||
if (first == NULL || v_new->acache.cached_max_range == 0) return true;
|
||||
|
||||
/* Iterate over all orders to check the distance between all
|
||||
* 'goto' orders and their respective next order (of any type). */
|
||||
@@ -1418,7 +1419,7 @@ bool CheckAircraftOrderDistance(const Aircraft *v, const Order *first)
|
||||
case OT_GOTO_DEPOT:
|
||||
case OT_GOTO_WAYPOINT:
|
||||
/* If we don't have a next order, we've reached the end and must check the first order instead. */
|
||||
if (GetOrderDistance(o, o->next != NULL ? o->next : first, v) > v->acache.cached_max_range_sqr) return false;
|
||||
if (GetOrderDistance(o, o->next != NULL ? o->next : first, v_order) > v_new->acache.cached_max_range_sqr) return false;
|
||||
break;
|
||||
|
||||
default: break;
|
||||
@@ -1478,7 +1479,7 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||
}
|
||||
|
||||
/* Check for aircraft range limits. */
|
||||
if (dst->type == VEH_AIRCRAFT && !CheckAircraftOrderDistance(Aircraft::From(dst), src->GetFirstOrder())) {
|
||||
if (dst->type == VEH_AIRCRAFT && !CheckAircraftOrderDistance(Aircraft::From(dst), src, src->GetFirstOrder())) {
|
||||
return_cmd_error(STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE);
|
||||
}
|
||||
|
||||
@@ -1525,7 +1526,7 @@ CommandCost CmdCloneOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||
}
|
||||
|
||||
/* Check for aircraft range limits. */
|
||||
if (dst->type == VEH_AIRCRAFT && !CheckAircraftOrderDistance(Aircraft::From(dst), src->GetFirstOrder())) {
|
||||
if (dst->type == VEH_AIRCRAFT && !CheckAircraftOrderDistance(Aircraft::From(dst), src, src->GetFirstOrder())) {
|
||||
return_cmd_error(STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user