mirror of https://github.com/OpenTTD/OpenTTD
(svn r14383) -Fix [FS#2316](r14343): handle invalid 'v->u.air.targetairport' in the NewGRF code, too
parent
7ef5406946
commit
abbc9cd9cb
|
@ -973,10 +973,8 @@ static bool AircraftController(Vehicle *v)
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
StationID target = v->u.air.targetairport;
|
|
||||||
|
|
||||||
/* NULL if station is invalid */
|
/* NULL if station is invalid */
|
||||||
const Station *st = IsValidStationID(target) ? GetStation(target) : NULL;
|
const Station *st = IsValidStationID(v->u.air.targetairport) ? GetStation(v->u.air.targetairport) : NULL;
|
||||||
/* 0 if there is no station */
|
/* 0 if there is no station */
|
||||||
TileIndex tile = 0;
|
TileIndex tile = 0;
|
||||||
if (st != NULL) {
|
if (st != NULL) {
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "rail_map.h"
|
#include "rail_map.h"
|
||||||
#include "rail.h"
|
#include "rail.h"
|
||||||
#include "settings_type.h"
|
#include "settings_type.h"
|
||||||
|
#include "aircraft.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
|
||||||
|
@ -190,8 +191,8 @@ enum {
|
||||||
*/
|
*/
|
||||||
static byte MapAircraftMovementState(const Vehicle *v)
|
static byte MapAircraftMovementState(const Vehicle *v)
|
||||||
{
|
{
|
||||||
const Station *st = GetStation(v->u.air.targetairport);
|
const Station *st = GetTargetAirportIfValid(v);
|
||||||
if (st->airport_tile == 0) return AMS_TTDP_FLIGHT_TO_TOWER;
|
if (st == NULL) return AMS_TTDP_FLIGHT_TO_TOWER;
|
||||||
|
|
||||||
const AirportFTAClass *afc = st->Airport();
|
const AirportFTAClass *afc = st->Airport();
|
||||||
uint16 amdflag = afc->MovingData(v->u.air.pos)->flag;
|
uint16 amdflag = afc->MovingData(v->u.air.pos)->flag;
|
||||||
|
@ -550,22 +551,26 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by
|
||||||
{
|
{
|
||||||
const Vehicle *w = v->Next();
|
const Vehicle *w = v->Next();
|
||||||
uint16 altitude = v->z_pos - w->z_pos; // Aircraft height - shadow height
|
uint16 altitude = v->z_pos - w->z_pos; // Aircraft height - shadow height
|
||||||
byte airporttype;
|
byte airporttype = ATP_TTDP_LARGE;
|
||||||
|
|
||||||
switch (GetStation(v->u.air.targetairport)->airport_type) {
|
const Station *st = GetTargetAirportIfValid(v);
|
||||||
/* Note, Helidepot and Helistation are treated as small airports
|
|
||||||
* as they are at ground level. */
|
if (st != NULL) {
|
||||||
case AT_HELIDEPOT:
|
switch (st->airport_type) {
|
||||||
case AT_HELISTATION:
|
/* Note, Helidepot and Helistation are treated as small airports
|
||||||
case AT_COMMUTER:
|
* as they are at ground level. */
|
||||||
case AT_SMALL: airporttype = ATP_TTDP_SMALL; break;
|
case AT_HELIDEPOT:
|
||||||
case AT_METROPOLITAN:
|
case AT_HELISTATION:
|
||||||
case AT_INTERNATIONAL:
|
case AT_COMMUTER:
|
||||||
case AT_INTERCON:
|
case AT_SMALL: airporttype = ATP_TTDP_SMALL; break;
|
||||||
case AT_LARGE: airporttype = ATP_TTDP_LARGE; break;
|
case AT_METROPOLITAN:
|
||||||
case AT_HELIPORT: airporttype = ATP_TTDP_HELIPORT; break;
|
case AT_INTERNATIONAL:
|
||||||
case AT_OILRIG: airporttype = ATP_TTDP_OILRIG; break;
|
case AT_INTERCON:
|
||||||
default: airporttype = ATP_TTDP_LARGE; break;
|
case AT_LARGE: airporttype = ATP_TTDP_LARGE; break;
|
||||||
|
case AT_HELIPORT: airporttype = ATP_TTDP_HELIPORT; break;
|
||||||
|
case AT_OILRIG: airporttype = ATP_TTDP_OILRIG; break;
|
||||||
|
default: airporttype = ATP_TTDP_LARGE; break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (altitude << 8) | airporttype;
|
return (altitude << 8) | airporttype;
|
||||||
|
|
Loading…
Reference in New Issue