From d39c1fdbd2f3cc64723ed04e0cd99e3c8303c90b Mon Sep 17 00:00:00 2001 From: Athanasius Date: Tue, 12 Oct 2021 14:51:50 +0000 Subject: [PATCH] schemas: codexentry: README: Expand on how to get BodyName and ID Currently if Status.json BodyName doesn't match that from the journal we specify sending neither it nor the BodyID. We could still send the BodyName **from Status.json** as that's better than no data about the location. --- schemas/codexentry-README.md | 53 +++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/schemas/codexentry-README.md b/schemas/codexentry-README.md index f40778c..63008b4 100644 --- a/schemas/codexentry-README.md +++ b/schemas/codexentry-README.md @@ -31,14 +31,53 @@ e.g. if the system is `Alpha Centauri`: You SHOULD attempt to track the BodyName and BodyID where the player is and add keys/values for these. -For `BodyName` you MUST retrieve this from the latest `Status.json` data, -using the `Body` value there-in. +You MUST track `BodyName` both from Status.json *and* also from some +[Journal](./README-EDDN-schemas.md#journal-files) +events in order to cross-check it before using the `BodyID` from +[Journal](./README-EDDN-schemas.md#journal-files) events. -You SHOULD obtain the `BodyID` from an `ApproachBody` or `Location` event. -You MUST cross-check the `Body` value in this to ensure it has the same -name as you got from `Status.json`. One possible issue is binary bodies where -you might get an `ApproachBody` for one before descending towards the other, -without an additional `ApproachBody` to correct things. +The following is correct as of game version 4.0.0.801 (Odyssey initial +release, Update 7, plus one patch). + +1. Record `journal_body_name` and `journal_body_id` from the + `BodyName` and `BodyID` values in `ApproachBody` events. + + This will occur when the player flies below Orbital Cruise altitude + around a body. +2. Also record these from `Location` events to cover logging in already there. +3. Unset both `journal_body_name` and `journal_body_id` on `LeaveBody` and + `FSDJump` events. + Do NOT do so for `SupercruiseEntry`, because a player can enter supercruise + below max Orbital Cruise altitude and then come back down without a new + `ApproachBody` event occurring. +4. If Status.json has `BodyName` present, record that as `status_body_name`. + + This key and its value will be present whenever the player comes close + enough to a body for the Orbital Cruise/Glide HUD elements to appear. + It will disappear again when they fly back above that altitude, or jump + away. +5. If Status.json does **not** have `BodyName` then clear `status_body_name`. +6. For a `CodexEntry` event: + 1. Check that `status_body_name` is set. + 2. ONLY if it is, check if it matches `journal_body_name`. + 3. ONLY if they match, set both `BodyName` and `BodyID` in the EDDN + `codexentry` schema message to the recorded values. + As you just checked that `status_body_name` was set, and it matches + `journal_body_name` it doesn't matter which of the two you use. + +One possible issue is binary bodies where you might get an `ApproachBody` for +one before descending towards the other, without an additional `ApproachBody` +to correct things. + +An example of this is `Baliscii 7 a` and `Baliscii 7 b`. Approaching one +and going below Orbital Cruise altitude will set `journal_body_name` and +`journal_body_id` to it, but you can then turn and approach the other +without a new `ApproachBody` event, but `status_body_name` will change to +the other when you are close enough. + +In this case due to `status_body_name` and `journal_body_name` not matching +the `codexentry` message MUST be sent **without** either `BodyName` or +`BodyID`. e.g. for `Bestia A 2 a` ```json