@kayahr/ed-journal
Version:
Typescript library to read/watch the player journal of Frontier's game Elite Dangerous
119 lines (96 loc) • 2.84 kB
text/typescript
/*
* Copyright (C) 2022 Klaus Reimer <k@ailis.de>
* See LICENSE.md for licensing information.
*/
import { type JournalEvent, registerJournalEventUpdate } from "../../JournalEvent.js";
/**
* Written on basic or detailed discovery scan of a star, planet or moon.
*
* This is also generated when scanning a navigation beacon in a populated system, to record info
* about all the bodies in the system
*/
export interface Scan extends JournalEvent<"Scan"> {
ScanType?: string;
StarSystem?: string;
SystemAddress?: number;
/** Name of body. */
BodyName: string;
BodyID?: number;
DistanceFromArrivalLS: number;
/** Stellar classification. */
StarType?: string;
/** Star's heat classification (0-9). */
Subclass?: number;
/** Mass as multiple of Sol's mass. */
StellarMass?: number;
Radius?: number;
AbsoluteMagnitude?: number;
/** Rotation period in seconds. */
RotationPeriod?: number;
SurfaceTemperature?: number;
Luminosity?: string;
/** Age in millions of years. */
Age_MY?: number;
Rings?: Array<{
InnerRad: number;
MassMT: number;
Name: string;
OuterRad: number;
RingClass: string;
}>;
WasDiscovered?: boolean;
WasMapped?: boolean;
/** Array of BodyType:BodyID pairs. */
Parents?: Array<{
Null?: number;
Planet?: number;
Ring?: number;
Star?: number;
}>;
/** If planet/moon is tidally locked. */
TidalLock?: boolean;
/** Terraform state of planet/moon. */
TerraformState?: string;
PlanetClass?: string;
Atmosphere?: string;
AtmosphereType?: string;
AtmosphereComposition?: Array<{
Name: string;
Percent: number;
}>;
Volcanism?: string;
SurfaceGravity?: number;
SurfacePressure?: number;
Landable?: boolean;
Materials?: Array<{
Name: string;
Name_Localised?: string;
Percent: number;
}>;
Composition?: {
Ice: number;
Metal: number;
Rock: number;
};
ReserveLevel?: string;
/** Axial tilt if rotating. */
AxialTilt?: number;
SemiMajorAxis?: number;
Eccentricity?: number;
OrbitalInclination?: number;
Periapsis?: number;
OrbitalPeriod?: number;
MassEM?: number;
AscendingNode?: number;
MeanAnomaly?: number;
}
interface DeprecatedScan extends JournalEvent<"Scan"> {
// Changed from an object to an array of objects in newer versions.
Materials?: { [ name: string ]: number };
}
registerJournalEventUpdate<DeprecatedScan, Scan>("Scan", (from, to) => {
if (from.Materials != null && !(from.Materials instanceof Array)) {
to.Materials = Object.entries(from.Materials).map(
([ Name, Percent ]) => ({ Name, Percent }));
}
});