Stickymaddness / Sextant

Exploration Assistant for Elite Dangerous
Apache License 2.0
22 stars 3 forks source link

ED 3.3 Compatibility - Exploration Update #10

Open Smiffleblurf opened 5 years ago

Smiffleblurf commented 5 years ago

Since the exploration updates in ED 3.3 I've noticed while using the new Full Spectral System (FSS) scanner mode with Sextant that after locating any of the expedition bodies listed will mark them off since you don't have the fly directly to them anymore. However, you still get another layer of credit bonus for flying to them to surface map those bodies with probes.

Currently after surface mapping those listed expedition bodies Sextant just repeats the same dialogs "All systems celestial have been scanned commander" or "All bodies scanned. You can move onto the next system commander." after each one is mapped. Which I assume is because it isn't tracking surface mapping since they were already marked off at the FSS level.

Not sure if Sextant can support the tracking of surface mapping as well or should just be tracking the surface maps of these bodies instead?

Stickymaddness commented 5 years ago

Thanks for the details, I haven't actually played in a while, and haven't tested the exploration updates, it sounds like Sextant will have to be updated due to the changes.

It's likely that Elite is writing the same log messages when doing a FSS as it does when you do a surface scan, so Sextant thinks that everything has been surface scanned, which is why you get the dialog for "All bodies scanned" etc after surface scanning.

rumpled commented 5 years ago

@Stickymaddness Just got Sextant running set up this morning and decided to dig into this. The new FSS scan as well as the DSS scan both return the "ScanType":"Detailed" event, but the DSS scan has an extra sibling element "event": "SAAScanComplete". Hope this helps. Let me know if there's any more relevant help I can provide, just started playing last week. Thanks for the tool!

Formatted FSS Scan:

{
  "timestamp": "2018-12-30T17:44:22Z",
  "event": "Scan",
  "ScanType": "Detailed",
  "BodyName": "Col 285 Sector YK-O d6-132 A 11",
  "BodyID": 26,
  "Parents": [
    {
      "Star": 1
    },
    {
      "Null": 0
    }
  ],
  "DistanceFromArrivalLS": 956.85144,
  "TidalLock": false,
  "TerraformState": "Terraformable",
  "PlanetClass": "Water world",
  "Atmosphere": "thick ammonia atmosphere",
  "AtmosphereType": "Ammonia",
  "AtmosphereComposition": [
    {
      "Name": "Ammonia",
      "Percent": 74.275467
    },
    {
      "Name": "Nitrogen",
      "Percent": 21.827797
    },
    {
      "Name": "Oxygen",
      "Percent": 3.555722
    }
  ],
  "Volcanism": "minor silicate vapour geysers volcanism",
  "MassEM": 1.550519,
  "Radius": 6931869.0,
  "SurfaceGravity": 12.861323,
  "SurfaceTemperature": 358.949554,
  "SurfacePressure": 1069735.0,
  "Landable": false,
  "Composition": {
    "Ice": 0.0,
    "Rock": 0.675449,
    "Metal": 0.32455
  },
  "SemiMajorAxis": 286680219648.0,
  "Eccentricity": 0.000625,
  "OrbitalInclination": -0.052961,
  "Periapsis": 19.003445,
  "OrbitalPeriod": 76438320.0,
  "RotationPeriod": 134973.84375,
  "AxialTilt": 0.11896
}

Formatted DSS Scan Complete

{
  "timestamp": "2018-12-30T17:44:22Z",
  "event": "Scan",
  "ScanType": "Detailed",
  "BodyName": "Col 285 Sector YK-O d6-132 A 11",
  "BodyID": 26,
  "Parents": [
    {
      "Star": 1
    },
    {
      "Null": 0
    }
  ],
  "DistanceFromArrivalLS": 956.85144,
  "TidalLock": false,
  "TerraformState": "Terraformable",
  "PlanetClass": "Water world",
  "Atmosphere": "thick ammonia atmosphere",
  "AtmosphereType": "Ammonia",
  "AtmosphereComposition": [
    {
      "Name": "Ammonia",
      "Percent": 74.275467
    },
    {
      "Name": "Nitrogen",
      "Percent": 21.827797
    },
    {
      "Name": "Oxygen",
      "Percent": 3.555722
    }
  ],
  "Volcanism": "minor silicate vapour geysers volcanism",
  "MassEM": 1.550519,
  "Radius": 6931869.0,
  "SurfaceGravity": 12.861323,
  "SurfaceTemperature": 358.949554,
  "SurfacePressure": 1069735.0,
  "Landable": false,
  "Composition": {
    "Ice": 0.0,
    "Rock": 0.675449,
    "Metal": 0.32455
  },
  "SemiMajorAxis": 286680219648.0,
  "Eccentricity": 0.000625,
  "OrbitalInclination": -0.052961,
  "Periapsis": 19.003445,
  "OrbitalPeriod": 76438320.0,
  "RotationPeriod": 134973.84375,
  "AxialTilt": 0.11896
}
{
  "timestamp": "2018-12-30T17:52:30Z",
  "event": "SAAScanComplete",
  "BodyName": "Col 285 Sector YK-O d6-132 A 11",
  "BodyID": 26,
  "ProbesUsed": 7,
  "EfficiencyTarget": 7
}

Raw Log Lines

{ "timestamp":"2018-12-30T17:44:09Z", "event":"FSSSignalDiscovered", "SystemAddress":4545962838395, "SignalName":"$USS;", "SignalName_Localised":"Unidentified signal source", "USSType":"$USS_Type_Salvage;", "USSType_Localised":"Degraded emissions", "SpawningState":"$FactionState_None;", "SpawningState_Localised":"None", "SpawningFaction":"$faction_none;", "SpawningFaction_Localised":"None", "ThreatLevel":0, "TimeRemaining":993.348572 }
{ "timestamp":"2018-12-30T17:44:12Z", "event":"FSSSignalDiscovered", "SystemAddress":4545962838395, "SignalName":"$USS;", "SignalName_Localised":"Unidentified signal source", "USSType":"$USS_Type_Salvage;", "USSType_Localised":"Degraded emissions", "SpawningState":"$FactionState_None;", "SpawningState_Localised":"None", "SpawningFaction":"$faction_none;", "SpawningFaction_Localised":"None", "ThreatLevel":0, "TimeRemaining":1098.331787 }
{ "timestamp":"2018-12-30T17:44:22Z", "event":"Scan", "ScanType":"Detailed", "BodyName":"Col 285 Sector YK-O d6-132 A 11", "BodyID":26, "Parents":[ {"Star":1}, {"Null":0} ], "DistanceFromArrivalLS":956.851440, "TidalLock":false, "TerraformState":"Terraformable", "PlanetClass":"Water world", "Atmosphere":"thick ammonia atmosphere", "AtmosphereType":"Ammonia", "AtmosphereComposition":[ { "Name":"Ammonia", "Percent":74.275467 }, { "Name":"Nitrogen", "Percent":21.827797 }, { "Name":"Oxygen", "Percent":3.555722 } ], "Volcanism":"minor silicate vapour geysers volcanism", "MassEM":1.550519, "Radius":6931869.000000, "SurfaceGravity":12.861323, "SurfaceTemperature":358.949554, "SurfacePressure":1069735.000000, "Landable":false, "Composition":{ "Ice":0.000000, "Rock":0.675449, "Metal":0.324550 }, "SemiMajorAxis":286680219648.000000, "Eccentricity":0.000625, "OrbitalInclination":-0.052961, "Periapsis":19.003445, "OrbitalPeriod":76438320.000000, "RotationPeriod":134973.843750, "AxialTilt":0.118960 }
{ "timestamp":"2018-12-30T17:44:46Z", "event":"Music", "MusicTrack":"Supercruise" }
{ "timestamp":"2018-12-30T17:47:49Z", "event":"Music", "MusicTrack":"SystemAndSurfaceScanner" }
{ "timestamp":"2018-12-30T17:48:33Z", "event":"SAAScanComplete", "BodyName":"Col 285 Sector YK-O d6-132 A 10", "BodyID":25, "ProbesUsed":7, "EfficiencyTarget":7 }
{ "timestamp":"2018-12-30T17:48:34Z", "event":"Scan", "ScanType":"Detailed", "BodyName":"Col 285 Sector YK-O d6-132 A 10", "BodyID":25, "Parents":[ {"Star":1}, {"Null":0} ], "DistanceFromArrivalLS":714.722412, "TidalLock":false, "TerraformState":"Terraformable", "PlanetClass":"High metal content body", "Atmosphere":"hot thick carbon dioxide atmosphere", "AtmosphereType":"CarbonDioxide", "AtmosphereComposition":[ { "Name":"CarbonDioxide", "Percent":64.975319 }, { "Name":"Water", "Percent":32.210083 }, { "Name":"Nitrogen", "Percent":2.164607 } ], "Volcanism":"metallic magma volcanism", "MassEM":2.903839, "Radius":8294285.000000, "SurfaceGravity":16.823801, "SurfaceTemperature":1137.234741, "SurfacePressure":62808664.000000, "Landable":false, "Composition":{ "Ice":0.000000, "Rock":0.675450, "Metal":0.324550 }, "SemiMajorAxis":214220898304.000000, "Eccentricity":0.000228, "OrbitalInclination":0.018259, "Periapsis":218.703415, "OrbitalPeriod":49375028.000000, "RotationPeriod":134319.296875, "AxialTilt":-2.790806 }
{ "timestamp":"2018-12-30T17:48:42Z", "event":"Music", "MusicTrack":"Supercruise" }
{ "timestamp":"2018-12-30T17:51:34Z", "event":"Music", "MusicTrack":"SystemAndSurfaceScanner" }
{ "timestamp":"2018-12-30T17:52:30Z", "event":"SAAScanComplete", "BodyName":"Col 285 Sector YK-O d6-132 A 11", "BodyID":26, "ProbesUsed":7, "EfficiencyTarget":7 }
{ "timestamp":"2018-12-30T17:52:31Z", "event":"Scan", "ScanType":"Detailed", "BodyName":"Col 285 Sector YK-O d6-132 A 11", "BodyID":26, "Parents":[ {"Star":1}, {"Null":0} ], "DistanceFromArrivalLS":956.851440, "TidalLock":false, "TerraformState":"Terraformable", "PlanetClass":"Water world", "Atmosphere":"thick ammonia atmosphere", "AtmosphereType":"Ammonia", "AtmosphereComposition":[ { "Name":"Ammonia", "Percent":74.275467 }, { "Name":"Nitrogen", "Percent":21.827797 }, { "Name":"Oxygen", "Percent":3.555722 } ], "Volcanism":"minor silicate vapour geysers volcanism", "MassEM":1.550519, "Radius":6931869.000000, "SurfaceGravity":12.861323, "SurfaceTemperature":358.949554, "SurfacePressure":1069735.000000, "Landable":false, "Composition":{ "Ice":0.000000, "Rock":0.675449, "Metal":0.324550 }, "SemiMajorAxis":286680219648.000000, "Eccentricity":0.000625, "OrbitalInclination":-0.052961, "Periapsis":19.003445, "OrbitalPeriod":76438320.000000, "RotationPeriod":134973.843750, "AxialTilt":0.118960 }
Smiffleblurf commented 5 years ago

@Stickymaddness It appears @rumpled is spot on here.

Currently if you jump into a system where a player has already 100% claimed all bodies using the FSS scanner, Sextant will just start checking them off in a string of verbal response spam one after the other upon entry into the system. Which seems to align with Rumpled's call findings.

It looks like that is correct that it needs to keep a count and verify that both the FSS and DSS level scans are both complete.

Again thanks for making this tool and definitely check out the new exploration update. It has definitely made exploration way more fun, credit rewarding, and has given a second chance of having your name added as a surface "Mapped by" next to the Discovered by person in the system map info. Also with this FSS system people are surprisingly discovering new bodies for the first time near the bubble still.

Stickymaddness commented 5 years ago

Thanks very much for the logs and details, it seems that using the "event": "SAAScanComplete" element to differentiate between FSS and DSS should be sufficient.

A simple approach could be for Sextant to simply ignore FSS scans, but I think it'll be nice to add some voice lines with the extra details for FSS.

rumpled commented 5 years ago

Heh, that sounds ideal. Potentially a configurable option for the end user?

I've never done C# before this. I was looking but could you give me a pointer to where you're filtering on event type in order to take action?

Stickymaddness commented 5 years ago

Yeah definitely, configurable would be the way to go.

I'd recommend taking a look at the tests to get an idea of how everything runs, GameLoadCommandTests.cs is a nice basic example of how Sextant handles the event for the game loading, and CelestialScanCommandTests has some more complex scenarios on how Sextant reacts to a scan event.

Essentially everything Sextant does is an ICommand, and the commands themselves define what they support. When an event fires, for example a VoiceAttackEvent when you say something, or a JournalEvent from a journal change, CommandExecutor.cs will loop through all the commands it was registered with at boot time and pass the event to all commands that handle it.

You can test pretty much everything from the tests, but for testing changes at runtime you can use the Sextant.TestHarness console project so that you don't have to run Sextant under voice attack.