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 for general documentation for a schema such as this.
The only data source for this schema is the ED Journal event
FSSSignalDiscovered
.
You MUST coalesce contiguous 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, if there is a different following event).
Suggested algorithm for batching:
-
You will need to track the current location from
Location
,FSDJump
andCarrierJump
events. This is in order to add the top-level augmentation ofStarSystem
(system name) andStarPos
. You will need to record:SystemAddress
- for cross-checking.StarSystem
- name of the star system.StarPos
- the galactic co-ordinates of the system.
-
If the event is
FSSSignalDiscovered
, store it to the temporal list. -
If the event is any other, then:
- check if it is
Location
,FSDJump
orCarrierJump
- if so you should use this new location in the message for the augmentations. - If it is not one of those events then you should use the tracked location from the prior such event for the augmentations.
Now construct the full
fsssignaldiscovered
schema message using the tracked location and the stored list of events. You MUST check that theSystemAddress
for eachFSSSignalDiscovered
event matches the tracked location. If there is a mis-match then drop that event. - check if it is
-
Use the
timestamp
of the first signal in the batch as the top-leveltimestamp
in themessage
object.
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.
Remove the event
key/pair from each member of the signals
array. Including
this would be redundant as by definition we're sending FSSSignalDiscovered
events on this schema.
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 of the location cross-check the SystemAddress
is in the top-level
message
object, and thus you MUST remove such from each signal in the
array.
Do NOT remove the timestamp
from each signal in the array. Whilst these
should be identical for a "just logged in or arrived in system" set of signals,
this is not true of manually FSS scanned USS signals.
You SHOULD add this key/value pair, using the value from the LoadGame
event.
You SHOULD add this key/value pair, using the value from the LoadGame
event.
You MUST always set these as per the relevant section of the Developers' documentation.
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.
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 should remember that horizons
and odyssey
augmentations
are optional key/value pairs. You SHOULD NOT rely on them being present
in any given event.
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).
This is a few example of messages that passes current FSSSignalDiscovered
schema.
- A message without
horizons
orodyssey
augmentations.
{
"$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":[
{
"timestamp":"2021-11-06T22:48:42Z",
"SignalName":"EXPLORER-CLASS X2X-74M",
"IsStation":true
}
],
"StarSystem":"HR 1185",
"StarPos": [
-64.66, -148.94, -330.41
]
}
}
- A message with
horizons
,odyssey
,systemName
,StarPos
fields which says it sent from Odyssey.
{
"$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":[
{
"timestamp":"2021-11-06T22:48:42Z",
"event":"FSSSignalDiscovered",
"SignalName":"EXPLORER-CLASS X2X-74M",
"IsStation":true
},
{
"timestamp":"2021-11-06T22:48:42Z",
"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
}
}