mirror of
https://github.com/EDCD/EDDN.git
synced 2025-05-17 23:36:33 +03:00
177 lines
6.5 KiB
Markdown
177 lines
6.5 KiB
Markdown
# EDDN FSSSignalDiscovered Schema
|
|
|
|
## Introduction
|
|
Here we document how to take data from an ED `FSSSignalDiscovered` Journal
|
|
Event and properly structure it for sending to EDDN.
|
|
|
|
Please consult [EDDN Schemas README](./README-EDDN-schemas.md) for general
|
|
documentation for a schema such as this.
|
|
|
|
## Senders
|
|
The only data source for this schema is the ED Journal event
|
|
`FSSSignalDiscovered`.
|
|
|
|
### Batching
|
|
You MUST coalesce contiguouys runs of `FSSSignalDiscovered` events into a
|
|
single `signals` array in the message. Minimum size of `signals` is 1 item.
|
|
|
|
Do not make a request for every single event other than where they occur
|
|
singly (such as when a player utilises the FSS to zoom into USS individually).
|
|
|
|
Suggested algorithm for batching:
|
|
|
|
1. You will need to track the current location from `Location`, `FSDJump` and
|
|
`CarrierJump` events. This is in order to add the top-level augmentation
|
|
of `StarSystem` (system name) and `StarPos`. You will need to record:
|
|
1. `SystemAddress` - for cross-checking.
|
|
2. `StarSystem` - name of the star system.
|
|
3. `StarPos` - the galactic co-ordinates of the system.
|
|
2. If the event is `FSSSignalDiscovered`, store it to the temporal list.
|
|
3. If the event is any other, then:
|
|
1. check if it is `Location`, `FSDJump` or `CarrierJump` - if so you should
|
|
use this new location in the message.
|
|
2. If it is not one of those events then you should use the tracked
|
|
location from the prior such event.
|
|
|
|
Now construct the full `fsssignaldiscovered` schema message using the
|
|
tracked location and the stored list of events. *You **MUST** check that
|
|
the `SystemAddress` for each `FSSSignalDiscovered` event matches the
|
|
tracked location.* If there is a mis-match then drop that event.
|
|
4. Each batch of signals will be contiguous and thus should have the same
|
|
timestamp, perhaps +/- 1 second at the ends. As such you only need one
|
|
single `timestamp` in the `message` and should use that of the first event
|
|
you include.
|
|
|
|
Point 3i/ii above are because in the current (3.8.0.406) Horizons client the
|
|
`FSSSignalDiscovered` events arrive after `Location`/`FSDJump`/`CarrierJump`,
|
|
but in the current (4.0.0.1302) Odyssey client they arrive before such events.
|
|
|
|
Thus, in Horizons you use the last-tracked location, but in Odyssey you use
|
|
the "just arrived" location.
|
|
|
|
Manually FSS-scanned USS type signals will come in one by one, possibly with
|
|
other events between them (such as `Music` due to zooming in/out in FSS).
|
|
There is no need to attempt batching these together if separated by other
|
|
events, even though you'll be using the `timestamp` of the first on the
|
|
message, despite the actual time-line being dependent on how quickly the
|
|
player scans them.
|
|
|
|
This batching is more concerned with not causing an EDDN message per event
|
|
upon entry into a system.
|
|
|
|
### Elisions
|
|
You MUST remove the following key/value pairs from the data:
|
|
|
|
- `TimeRemaining` key/value pair (will be present on USS). This has a slight
|
|
PII nature and is also very ephemeral.
|
|
|
|
You MUST drop the whole `FSSSignalDiscovered` event if `USSType` key
|
|
has `$USS_Type_MissionTarget;` value. Only the Cmdr with the mission has any
|
|
use of these. There's not even a statistical use.
|
|
|
|
Because we only have a `message` level `timestamp` and `SystemAddress` these
|
|
should be removed from each member of the `signals` array.
|
|
|
|
### Augmentations
|
|
#### horizons flag
|
|
You SHOULD add this key/value pair, using the value from the `LoadGame` event.
|
|
|
|
#### odyssey flag
|
|
You SHOULD add this key/value pair, using the value from the `LoadGame` event.
|
|
|
|
#### StarSystem
|
|
You **MUST** add a `StarSystem` string containing the system name from the last
|
|
tracked location. You **MUST** cross-check each `FSSSignalDiscovered`
|
|
->`SystemAddress` value to ensure it matches. If it does not, you **MUST**
|
|
drop the event.
|
|
|
|
#### StarPos
|
|
You **MUST** add a `StarPos` array containing the system co-ordinates from the
|
|
tracked location. You **MUST** cross-check each `FSSSignalDiscovered`
|
|
->`SystemAddress` value to ensure it matches. If it does not, you **MUST**
|
|
drop the event.
|
|
|
|
## Receivers
|
|
### Augmentations are 'SHOULD', not 'MUST'
|
|
Receivers should remember that `horizons`, `odyssey`, `StarSystem`, `StarPos`
|
|
are optional key/value pairs. You **SHOULD NOT** rely on them being present
|
|
in any given event.
|
|
|
|
### Duplicate messages from 'busy' systems
|
|
When a system is particularly full of signals, such as when many Fleet Carriers
|
|
are present, it has been observed that the game repeats the identical
|
|
sequence of `FSSSignalDiscovered` events. So you might receive what looks like
|
|
a duplicate message, other than the timestamp (if the timestamp is the same
|
|
then the EDDN Relay should drop the duplicate).
|
|
|
|
## Examples
|
|
This is a few example of messages that passes current `FSSSignalDiscovered` schema.
|
|
1. A message without `horizons` or `odyssey` augmentations.
|
|
```json
|
|
{
|
|
"$schemaRef":"https://eddn.edcd.io/schemas/fsssignaldiscovered/1",
|
|
"header":{
|
|
"gatewayTimestamp":"2021-11-06T22:48:43.483147Z",
|
|
"softwareName":"a software",
|
|
"softwareVersion":"a version",
|
|
"uploaderID":"an uploader"
|
|
},
|
|
"message":{
|
|
"timestamp":"2021-11-06T22:48:42Z",
|
|
"event":"FSSSignalDiscovered",
|
|
"SystemAddress":1774711381,
|
|
"signals":[
|
|
{
|
|
"SignalName":"EXPLORER-CLASS X2X-74M",
|
|
"IsStation":true
|
|
}
|
|
],
|
|
"StarSystem":"HR 1185",
|
|
"StarPos": [
|
|
-64.66, -148.94, -330.41
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
2. A message with `horizons`, `odyssey`, `systemName`, `StarPos` fields which says it sent from Odyssey.
|
|
```json
|
|
{
|
|
"$schemaRef":"https://eddn.edcd.io/schemas/fsssignaldiscovered/1",
|
|
"header":{
|
|
"gatewayTimestamp":"2021-11-06T22:48:43.483147Z",
|
|
"softwareName":"a software",
|
|
"softwareVersion":"a version",
|
|
"uploaderID":"an uploader"
|
|
},
|
|
"message":{
|
|
"timestamp":"2021-11-06T22:48:42Z",
|
|
"event":"FSSSignalDiscovered",
|
|
"SystemAddress":1350507186531,
|
|
"signals":[
|
|
{
|
|
"event":"FSSSignalDiscovered",
|
|
"SignalName":"EXPLORER-CLASS X2X-74M",
|
|
"IsStation":true
|
|
},
|
|
{
|
|
"event":"FSSSignalDiscovered",
|
|
"SignalName":"$USS_NonHumanSignalSource;",
|
|
"USSType":"$USS_Type_NonHuman;",
|
|
"SpawningState":"$FactionState_None;",
|
|
"SpawningFaction":"$faction_none;",
|
|
"ThreatLevel":5
|
|
}
|
|
],
|
|
"StarPos": [
|
|
8.1875,
|
|
124.21875,
|
|
-38.5
|
|
],
|
|
"StarSystem": "HIP 56186",
|
|
"horizons": true,
|
|
"odyssey": true
|
|
}
|
|
}
|
|
```
|