Release EDDI 3.3 - Bring your cockpit to life

If I understand you correctly, the 'terraformed' parts of 'Bodies to map' are only there to check if that particular body should be added to the "to map" list, and not to tell you if it is terraformed.

If you want it to do that, you need to make a few changes to the script so that it remembers the terraform state of each body it recommends to map. To make this easier for you, I have added your preferences to my version of the 'Bodies to map' script (and made a couple of other edits to tidy it up a bit). My version is quite different to the default, but gives the same results with extra information. So try this and see what you think:
Code:
{_ Preferences: _}

{set reportTerraformables to true}   {_ Reports all terraformable and terraformed bodies _}
{set highValueThreshold to 50000}   {_ The minimum threshold for estimated exploration value worth mapping _}
{set reportPlanetTypes to [
    "Ammonia world": true,
    "Earth-like world": true,
    "Gas giant with ammonia based life": false,
    "Gas giant with water based life": false,
    "Helium gas giant": false,
    "Helium-rich gas giant": false,
    "High metal content world": true,
    "Icy body": false,
    "Metal-rich body": true,
    "Rocky body": false,
    "Rocky ice world": false,
    "Class I gas giant": false,
    "Class II gas giant": true,
    "Class III gas giant": false,
    "Class IV gas giant": false,
    "Class V gas giant": false,
    "Water giant": false,
    "Water giant with life": false,
    "Water world": true,
]}

{_ Fetch from Context, if a context is set _}
{if state.eddi_context_system_name:
    {set reportSystem to SystemDetails(state.eddi_context_system_name)}
|else:
    {set reportSystem to SystemDetails(system.systemname)}
}

{_ Identify bodies worth mapping _}
{set totalBodies to reportSystem.totalbodies}
{set scannedBodies to reportSystem.scannedbodies}

{set toMapList to []}
{set mappedBodies to 0}
{set scannedStars to 0}
{set bodyDistance to []}
{set bodyType to []}
{set planetType to []}
{set bodyTerraform to []}
{set bodyValue to []}

{_ Collect system data _}
{for body in reportSystem.bodies:

    {_ Check if system name is at the beginning of the body name _}
    {if find(body.name, reportSystem.name) = 0:
        {set shortname to body.shortname}
    |else:
        {set shortname to body.name}
    }

    {if body.mapped:
        {set mappedBodies to mappedBodies + 1}
    |elif body.bodyType.invariantName = "Star":
        {set scannedStars to scannedStars + 1}
    |elif body.terraformState.invariantName != "Not terraformable":
        {if reportTerraformables && !toMapList[body.shortname]:
            {if body.distance <= mapDistance || body.estimatedvalue >= mapHighVal:
                {set toMapList to cat(toMapList, [shortname])}
                {set bodyDistance to cat(bodyDistance, [round(body.distance, 0)])}
                {set bodyType to cat(bodyType, [body.bodytype])}
                {set planetType to cat(planetType, [body.planettype])}
                {set bodyTerraform to cat(bodyTerraform, [body.terraformstate])}
                {set bodyValue to cat(bodyValue, [body.estimatedvalue])}
            }
        }
    |elif reportPlanetTypes[body.planetClass.invariantName] || body.estimatedvalue > highValueThreshold:
        {if (body.distance <= mapDistance || body.estimatedvalue >= mapHighVal)
          && !toMapList[body.shortname]:
            {set toMapList to cat(toMapList, [shortname])}
            {set bodyDistance to cat(bodyDistance, [round(body.distance, 0)])}
            {set bodyType to cat(bodyType, [body.bodytype])}
            {set planetType to cat(planetType, [body.planettype])}
            {if body.terraformState.invariantName != "Not terraformable":
                {set bodyTerraform to cat(bodyTerraform, [body.terraformstate])}
            |else:
                {set bodyTerraform to cat(bodyTerraform, [""])}
            }
            {set bodyValue to cat(bodyValue, [body.estimatedvalue])}
        }
    }
}
{set toMapCount to len(toMapList)}

{_ Begin speaking _}
{set worthy to OneOf("worthwhile", "interesting", "notable", "noteworthy")}

{if toMapCount > 0:

    {if hasSRV && ((system.isgold && reportGoldSystems) || (system.isgreen && reportGreenSystems)):
        {OneOf("Additionally", "Also")},
    |elif len(toMapList) = 1 && mappedBodies = 0:
        Only
    }

    {toMapCount} {if event.type = "Body mapped": other} {if toMapCount = 1: Body |else: Bodies}

    {if toMapCount = 1: is |else: are}
    {if event.type = "Body mapped": also}
    {if toMapCount = 1: a}
    {OneOf("recommended", "good", "viable")}
    {set candidates to when(toMapCount = 1, "candidate", "candidates")}
    {OneOf("{candidates} for mapping", "{candidates} to map", "mapping {candidates}")}:

    {set cur to 0}
    {set length to toMapCount - 1}

        {while cur < toMapCount:
            {char(10)}
            {bodyType[cur]}
            {P(toMapList[cur], "body")},
            {if bodyTerraform != "Not terraformable":
                {if StartsWithVowel(bodyTerraform[cur]): an |else: a}
                {bodyTerraform[cur]}
            |else:
                {if StartsWithVowel(planetType[cur]): an |else: a}
            }
            {planetType[cur]}
       
            {if bodyDistance[cur] > 800: {Humanise(bodyDistance[cur])}
            |else: {bodyDistance[cur]} }
            light seconds from arrival,
       
            currently estimated at {Humanise(bodyValue[cur])} credits

            {set cur to cur + 1}
            {if cur = length:, and
            |elif cur < length:,
            }
        }

|elif mappedBodies > 0:
    {OneOf("You have mapped all {if mappedBodies < (totalBodies - scannedStars): {worthy}}
            bodies scanned
            {if (scannedBodies < totalBodies) && (scannedStars < totalBodies): so far
            |else: in this system}.",
           "All {OneOf('{if mappedBodies < (totalBodies - scannedStars): {worthy}} bodies',
                       'bodies {if mappedBodies < (totalBodies - scannedStars): of interest}')}
            {if (scannedBodies < totalBodies) && (scannedStars < totalBodies): scanned so far
            |else: in this system}
            {OneOf('have been mapped', 'are now mapped')}."
    )}
|elif reportNoBodiesToMap = true:
    {if (scannedBodies < totalBodies) && (scannedStars < totalBodies):
        You have {OneOf("not yet scanned", "yet to scan")}
        any {worthy} bodies in this system
    |else:
        {if hasSRV && ((system.isgold && reportGoldSystems) || (system.isgreen && reportGreenSystems)):
            However,
        }

        {OneOf("There are no", "You have not found any")}
        {if totalBodies - scannedStars > 0:
            {Occasionally(2, "{worthy}")} bodies
            {OneOf("to map", "worth mapping")}
        |else:
            mappable bodies
        }

        {if hasSRV && ((system.isgold && reportGoldSystems) || (system.isgreen && reportGreenSystems)):
            here
        |else:
            in this system
        }
    }.
}

It will give a report like this (the system is Myrbat in this example):

I think you can ignore where it says 'zero credits' as I'm not in game at the moment, or at that system.

Let me know what you think. I can change it if you want less information spoken. :)
Thanks for that,much appreciated
brilliant work,the credit thing is brilliant as it auto updates after fss and then dss,so you can see if it’s worth the time to travel to
If I do want less info spoken what would I change
e.g if I wanted the distance not reporting?as The distance doesn’t seem to change if I get nearer or farther after each honk,but if this could be changed to real-time that would be fantastic
thanks
 
Last edited:
Thanks for that,much appreciated
brilliant work,the credit thing is brilliant as it auto updates after fss and then dss,so you can see if it’s worth the time to travel to
If I do want less info spoken what would I change
e.g if I wanted the distance not reporting?as The distance doesn’t seem to change if I get nearer or farther after each honk
thanks
To stop the distance report, just delete this section of code:
Code:
            {if bodyDistance[cur] > 800: {Humanise(bodyDistance[cur])}
            |else: {bodyDistance[cur]} }
            light seconds from arrival,
EDDI only knows the distance between the body and the main star, that is why it never changes. Unfortunately, there is no way to know the distance between you and the body.
 
If I understand you correctly, the 'terraformed' parts of 'Bodies to map' are only there to check if that particular body should be added to the "to map" list, and not to tell you if it is terraformed.

If you want it to do that, you need to make a few changes to the script so that it remembers the terraform state of each body it recommends to map. To make this easier for you, I have added your preferences to my version of the 'Bodies to map' script (and made a couple of other edits to tidy it up a bit). My version is quite different to the default, but gives the same results with extra information. So try this and see what you think:
Code:
{_ Preferences: _}

{set reportTerraformables to true}   {_ Reports all terraformable and terraformed bodies _}
{set highValueThreshold to 50000}   {_ The minimum threshold for estimated exploration value worth mapping _}
{set reportPlanetTypes to [
    "Ammonia world": true,
    "Earth-like world": true,
    "Gas giant with ammonia based life": false,
    "Gas giant with water based life": false,
    "Helium gas giant": false,
    "Helium-rich gas giant": false,
    "High metal content world": true,
    "Icy body": false,
    "Metal-rich body": true,
    "Rocky body": false,
    "Rocky ice world": false,
    "Class I gas giant": false,
    "Class II gas giant": true,
    "Class III gas giant": false,
    "Class IV gas giant": false,
    "Class V gas giant": false,
    "Water giant": false,
    "Water giant with life": false,
    "Water world": true,
]}

{_ Fetch from Context, if a context is set _}
{if state.eddi_context_system_name:
    {set reportSystem to SystemDetails(state.eddi_context_system_name)}
|else:
    {set reportSystem to SystemDetails(system.systemname)}
}

{_ Identify bodies worth mapping _}
{set totalBodies to reportSystem.totalbodies}
{set scannedBodies to reportSystem.scannedbodies}

{set toMapList to []}
{set mappedBodies to 0}
{set scannedStars to 0}
{set bodyDistance to []}
{set bodyType to []}
{set planetType to []}
{set bodyTerraform to []}
{set bodyValue to []}

{_ Collect system data _}
{for body in reportSystem.bodies:

    {_ Check if system name is at the beginning of the body name _}
    {if find(body.name, reportSystem.name) = 0:
        {set shortname to body.shortname}
    |else:
        {set shortname to body.name}
    }

    {if body.mapped:
        {set mappedBodies to mappedBodies + 1}
    |elif body.bodyType.invariantName = "Star":
        {set scannedStars to scannedStars + 1}
    |elif body.terraformState.invariantName != "Not terraformable":
        {if reportTerraformables && !toMapList[body.shortname]:
            {if body.distance <= mapDistance || body.estimatedvalue >= mapHighVal:
                {set toMapList to cat(toMapList, [shortname])}
                {set bodyDistance to cat(bodyDistance, [round(body.distance, 0)])}
                {set bodyType to cat(bodyType, [body.bodytype])}
                {set planetType to cat(planetType, [body.planettype])}
                {set bodyTerraform to cat(bodyTerraform, [body.terraformstate])}
                {set bodyValue to cat(bodyValue, [body.estimatedvalue])}
            }
        }
    |elif reportPlanetTypes[body.planetClass.invariantName] || body.estimatedvalue > highValueThreshold:
        {if (body.distance <= mapDistance || body.estimatedvalue >= mapHighVal)
          && !toMapList[body.shortname]:
            {set toMapList to cat(toMapList, [shortname])}
            {set bodyDistance to cat(bodyDistance, [round(body.distance, 0)])}
            {set bodyType to cat(bodyType, [body.bodytype])}
            {set planetType to cat(planetType, [body.planettype])}
            {if body.terraformState.invariantName != "Not terraformable":
                {set bodyTerraform to cat(bodyTerraform, [body.terraformstate])}
            |else:
                {set bodyTerraform to cat(bodyTerraform, [""])}
            }
            {set bodyValue to cat(bodyValue, [body.estimatedvalue])}
        }
    }
}
{set toMapCount to len(toMapList)}

{_ Begin speaking _}
{set worthy to OneOf("worthwhile", "interesting", "notable", "noteworthy")}

{if toMapCount > 0:

    {if hasSRV && ((system.isgold && reportGoldSystems) || (system.isgreen && reportGreenSystems)):
        {OneOf("Additionally", "Also")},
    |elif len(toMapList) = 1 && mappedBodies = 0:
        Only
    }

    {toMapCount} {if event.type = "Body mapped": other} {if toMapCount = 1: Body |else: Bodies}

    {if toMapCount = 1: is |else: are}
    {if event.type = "Body mapped": also}
    {if toMapCount = 1: a}
    {OneOf("recommended", "good", "viable")}
    {set candidates to when(toMapCount = 1, "candidate", "candidates")}
    {OneOf("{candidates} for mapping", "{candidates} to map", "mapping {candidates}")}:

    {set cur to 0}
    {set length to toMapCount - 1}

        {while cur < toMapCount:
            {char(10)}
            {bodyType[cur]}
            {P(toMapList[cur], "body")},
            {if bodyTerraform != "Not terraformable":
                {if StartsWithVowel(bodyTerraform[cur]): an |else: a}
                {bodyTerraform[cur]}
            |else:
                {if StartsWithVowel(planetType[cur]): an |else: a}
            }
            {planetType[cur]}
  
            {if bodyDistance[cur] > 800: {Humanise(bodyDistance[cur])}
            |else: {bodyDistance[cur]} }
            light seconds from arrival,
  
            currently estimated at {Humanise(bodyValue[cur])} credits

            {set cur to cur + 1}
            {if cur = length:, and
            |elif cur < length:,
            }
        }

|elif mappedBodies > 0:
    {OneOf("You have mapped all {if mappedBodies < (totalBodies - scannedStars): {worthy}}
            bodies scanned
            {if (scannedBodies < totalBodies) && (scannedStars < totalBodies): so far
            |else: in this system}.",
           "All {OneOf('{if mappedBodies < (totalBodies - scannedStars): {worthy}} bodies',
                       'bodies {if mappedBodies < (totalBodies - scannedStars): of interest}')}
            {if (scannedBodies < totalBodies) && (scannedStars < totalBodies): scanned so far
            |else: in this system}
            {OneOf('have been mapped', 'are now mapped')}."
    )}
|elif reportNoBodiesToMap = true:
    {if (scannedBodies < totalBodies) && (scannedStars < totalBodies):
        You have {OneOf("not yet scanned", "yet to scan")}
        any {worthy} bodies in this system
    |else:
        {if hasSRV && ((system.isgold && reportGoldSystems) || (system.isgreen && reportGreenSystems)):
            However,
        }

        {OneOf("There are no", "You have not found any")}
        {if totalBodies - scannedStars > 0:
            {Occasionally(2, "{worthy}")} bodies
            {OneOf("to map", "worth mapping")}
        |else:
            mappable bodies
        }

        {if hasSRV && ((system.isgold && reportGoldSystems) || (system.isgreen && reportGreenSystems)):
            here
        |else:
            in this system
        }
    }.
}

It will give a report like this (the system is Myrbat in this example):

I think you can ignore where it says 'zero credits' as I'm not in game at the moment, or at that system.

Let me know what you think. I can change it if you want less information spoken. :)
okay thanks about the distance
just I have the following issue, the mapping candidates info isnt working in every system after I honk,as I’m in a system now with 3 high metals and 1 ammonia worlds ,but I honk and nothing is mentioned about mapping candidates from eddi ,I’ve tried to exit the game and return ,but it is still the same ,any suggestions please?

update: after I scanned the 1st High metal planet the other 3 were mentioned as mapping candidates,but no mentioning mapping candidates after I honk still?
also it would be nice for eddi to say ‘no worthy mappable bodies available’ if there’s none in the list,after a honk,if that’s possible plaese
 
Last edited:
okay thanks about the distance
just I have the following issue, the mapping candidates info isnt working in every system after I honk,as I’m in a system now with 3 high metals and 1 ammonia worlds ,but I honk and nothing is mentioned about mapping candidates from eddi ,I’ve tried to exit the game and return ,but it is still the same ,any suggestions please?

update: after I scanned the 1st High metal planet the other 3 were mentioned as mapping candidates,but no mentioning mapping candidates after I honk still?
also it would be nice for eddi to say ‘no worthy mappable bodies available’ if there’s none in the list,after a honk,if that’s possible plaese
I'll take a look this evening, and get back to you as soon as I can.
 
okay thanks about the distance
just I have the following issue, the mapping candidates info isnt working in every system after I honk,as I’m in a system now with 3 high metals and 1 ammonia worlds ,but I honk and nothing is mentioned about mapping candidates from eddi ,I’ve tried to exit the game and return ,but it is still the same ,any suggestions please?

update: after I scanned the 1st High metal planet the other 3 were mentioned as mapping candidates,but no mentioning mapping candidates after I honk still?
also it would be nice for eddi to say ‘no worthy mappable bodies available’ if there’s none in the list,after a honk,if that’s possible plaese
Hmm, I've had a look and I'm not sure what could be happening for you. It works for me. Are you using the default 'Discovery scan' script? If so, have you set a role for your ship, like 'Exploration', or is it set to the default of 'Multipurpose' (in EDDI's Ship Monitor tab)? The system you are in, is it populated? The default 'Discovery scan' script (which runs when you 'honk') is set to work if you have set your ship role to 'Exploration', or if it is set to 'Multipurpose' AND the system is not populated.

Let me know what system you are in, and I'll see if I can figure it out.
 
Hmm, I've had a look and I'm not sure what could be happening for you. It works for me. Are you using the default 'Discovery scan' script? If so, have you set a role for your ship, like 'Exploration', or is it set to the default of 'Multipurpose' (in EDDI's Ship Monitor tab)? The system you are in, is it populated? The default 'Discovery scan' script (which runs when you 'honk') is set to work if you have set your ship role to 'Exploration', or if it is set to 'Multipurpose' AND the system is not populated.

Let me know what system you are in, and I'll see if I can figure it out.
Thanks for your help your a good one,just not had time to take a look yet
will probably get time tonight to see those ship settings,i’ll let you know
 
Hmm, I've had a look and I'm not sure what could be happening for you. It works for me. Are you using the default 'Discovery scan' script? If so, have you set a role for your ship, like 'Exploration', or is it set to the default of 'Multipurpose' (in EDDI's Ship Monitor tab)? The system you are in, is it populated? The default 'Discovery scan' script (which runs when you 'honk') is set to work if you have set your ship role to 'Exploration', or if it is set to 'Multipurpose' AND the system is not populated.

Let me know what system you are in, and I'll see if I can figure it out.
just noticed there is a discovery scanner script does this look okay to you
Code:
{_ Fetch from Context, if a context is set _}
{if state.eddi_context_system_name:
    {set reportSystem to SystemDetails(state.eddi_context_system_name)}
|else:
    {set reportSystem to SystemDetails(system.systemname)}
}

{if !reportSystem.name || reportSystem.name = "":
    I'm not sure which system you are asking about.
|else:
    {if ship.Role.edname = "Exploration" ||
        (ship.Role.edname = "Multipurpose" && len(reportSystem.factions) = 0):

        {if reportSystem:
            {set reportedBodies to len(reportSystem.bodies)}
            {if 0 < reportedBodies && reportedBodies < event.totalbodies:
                {Pause(1000)}

                {set scannedBodies to 0}
                {for body in reportSystem.bodies:
                    {if body.scanned:
                        {set scannedBodies to scannedBodies + 1}
                    }
                }
                {set bodiesToScan to (event.totalbodies- scannedBodies)}

                {if bodiesToScan = 1:
                    One body remains to be scanned
                |elif scannedBodies < event.totalbodies:
                    {OneOf(
                        "{scannedBodies} out of {event.totalbodies} bodies {if scannedBodies != 1: have been scanned |else: has been scanned}",
                        "{bodiesToScan} bodies remain to be scanned"
                    )}
                    {Occasionally(3, OneOf("here", "in this system"))}.
                }
            |else:
                {set bodiesToMap to F("Bodies to map")}
                {if bodiesToMap:
                    {bodiesToMap}
                }
            }
        }
    }
}
changed my ship role to exploration,but it should work as multipurpose according to that script,correct?
thanks
 
Last edited:
Minor bug l noticed...I ain't made any changes to the default install.
When scanning rings it gets them the wrong way round...
For example rocky ring and icy ring. Icy ring has 2 hotspots but rocky ring has none. It'll say the rocky ring has 2 hotspots and not mention the icy rings hotspots at all.
 
just noticed there is a discovery scanner script does this look okay to you
Code:
{_ Fetch from Context, if a context is set _}
{if state.eddi_context_system_name:
    {set reportSystem to SystemDetails(state.eddi_context_system_name)}
|else:
    {set reportSystem to SystemDetails(system.systemname)}
}

{if !reportSystem.name || reportSystem.name = "":
    I'm not sure which system you are asking about.
|else:
    {if ship.Role.edname = "Exploration" ||
        (ship.Role.edname = "Multipurpose" && len(reportSystem.factions) = 0):

        {if reportSystem:
            {set reportedBodies to len(reportSystem.bodies)}
            {if 0 < reportedBodies && reportedBodies < event.totalbodies:
                {Pause(1000)}

                {set scannedBodies to 0}
                {for body in reportSystem.bodies:
                    {if body.scanned:
                        {set scannedBodies to scannedBodies + 1}
                    }
                }
                {set bodiesToScan to (event.totalbodies- scannedBodies)}

                {if bodiesToScan = 1:
                    One body remains to be scanned
                |elif scannedBodies < event.totalbodies:
                    {OneOf(
                        "{scannedBodies} out of {event.totalbodies} bodies {if scannedBodies != 1: have been scanned |else: has been scanned}",
                        "{bodiesToScan} bodies remain to be scanned"
                    )}
                    {Occasionally(3, OneOf("here", "in this system"))}.
                }
            |else:
                {set bodiesToMap to F("Bodies to map")}
                {if bodiesToMap:
                    {bodiesToMap}
                }
            }
        }
    }
}
changed my ship role to exploration,but it should work as multipurpose according to that script,correct?
thanks
That is the default script, so it is all OK. It should work always when you ship is set to 'Exploration', but will only work for 'Multipurpose' if the system is unpopulated (specifically, when it has no factions present).

If you let me know what system(s) you are having problems with, I can try to visit them myself (if they are not too far away) and run some tests.
 
That is the default script, so it is all OK. It should work always when you ship is set to 'Exploration', but will only work for 'Multipurpose' if the system is unpopulated (specifically, when it has no factions present).

If you let me know what system(s) you are having problems with, I can try to visit them myself (if they are not too far away) and run some tests.
How can I stop the bodies to map mentioning the distance? ,as this is of no use and it adds to the time and eddi can back up with too much info
thanks
 
How can I stop the bodies to map mentioning the distance? ,as this is of no use and it adds to the time and eddi can back up with too much info
thanks
I already mentioned how to stop the distance report. You even acknowledged it.... 🤷‍♂️ 😁

To stop the distance report, just delete this section of code:
Code:
            {if bodyDistance[cur] > 800: {Humanise(bodyDistance[cur])}
            |else: {bodyDistance[cur]} }
            light seconds from arrival,
EDDI only knows the distance between the body and the main star, that is why it never changes. Unfortunately, there is no way to know the distance between you and the body.

okay thanks about the distance
just I have the following issue, the mapping candidates info isnt working in every system after I honk,as I’m in a system now with 3 high metals and 1 ammonia worlds ,but I honk and nothing is mentioned about mapping candidates from eddi ,I’ve tried to exit the game and return ,but it is still the same ,any suggestions please?

update: after I scanned the 1st High metal planet the other 3 were mentioned as mapping candidates,but no mentioning mapping candidates after I honk still?
also it would be nice for eddi to say ‘no worthy mappable bodies available’ if there’s none in the list,after a honk,if that’s possible plaese
 
Last edited:
I need assistance:
i haven't played for week or so, and now i can't make EDDI to talk.
This is what it logs (trying MS Elsa after Ivona Carla):

2022-07-17T17:06:22 [Warning] WindowsMediaSynthesizer:WindowsMediaSpeechSynthesis Speech failed. Stripping IPA tags and re-trying.: {"voice":{"name":"Microsoft Elsa","gender":"Female","culturecode":"it-IT","synthType":"SpeechSynthesis","cultureinvariantname":"Italian (Italy)","culturename":"italiano (Italia)","Culture":"it-IT"},"speech":"<?xml version=\"1.0\" encoding=\"UTF-8\"?><speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis/synthesis.xsd\" xml:lang=\"it-IT\"><lexicon uri=\"C:\\Users\\%USERNAME%\\AppData\\Roaming\\EDDI\\lexicons\\it-it.pls\" type=\"application/pls+xml\"/>Ecco come suonerò nel tuo Adder.</speak>","exception":{"ClassName":"System.AggregateException","Message":"Si sono verificati uno o più errori.","Data":null,"InnerException":{"ClassName":"System.Exception","Message":"Impossibile trovare il testo associato a questo codice di errore.\r\n\r\nInternal Speech Error.","Data":{"RestrictedDescription":"Internal Speech Error.","RestrictedErrorReference":null,"RestrictedCapabilitySid":null,"__RestrictedErrorObject":{"RealErrorObject":{}},"__HasRestrictedLanguageErrorObject":false},"InnerException":null,"HelpURL":null,"StackTraceString":null,"RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":null,"HResult":-2147199584,"Source":"","WatsonBuckets":null},"HelpURL":null,"StackTraceString":" in System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)\r\n in System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)\r\n in System.Threading.Tasks.Task`1.get_Result()\r\n in EddiSpeechService.SpeechSynthesizers.WindowsMediaSynthesizer.<>c__DisplayClass6_0.<WindowsMediaSpeechSynthesis>b__0()","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":"8\nThrowIfExceptional\nmscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.Threading.Tasks.Task\nVoid ThrowIfExceptional(Boolean)","HResult":-2146233088,"Source":"mscorlib","WatsonBuckets":null,"InnerExceptions":[{"ClassName":"System.Exception","Message":"Impossibile trovare il testo associato a questo codice di errore.\r\n\r\nInternal Speech Error.","Data":{"RestrictedDescription":"Internal Speech Error.","RestrictedErrorReference":null,"RestrictedCapabilitySid":null,"__RestrictedErrorObject":{"RealErrorObject":{}},"__HasRestrictedLanguageErrorObject":false},"InnerException":null,"HelpURL":null,"StackTraceString":null,"RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":null,"HResult":-2147199584,"Source":"","WatsonBuckets":null}]}}
2022-07-17T17:06:22 [Warning] WindowsMediaSynthesizer:WindowsMediaSpeechSynthesis Speech failed
2022-07-17T17:06:22 [Warning] SpeechService:getSpeechStream Speech failed (Europa occidentale (Windows)): {"ClassName":"System.ArgumentNullException","Message":"Il valore non può essere null.","Data":null,"InnerException":null,"HelpURL":null,"StackTraceString":" in System.IO.WindowsRuntimeStreamExtensions.AsStreamInternal(Object windowsRuntimeStream, Int32 bufferSize, String invokedMethodName, Boolean forceBufferSize)\r\n in System.IO.WindowsRuntimeStreamExtensions.AsStreamForRead(IInputStream windowsRuntimeStream)\r\n in EddiSpeechService.SpeechSynthesizers.WindowsMediaSynthesizer.Speak(VoiceDetails voiceDetails, String speech, SpeechServiceConfiguration Configuration)\r\n in EddiSpeechService.SpeechService.speak(VoiceDetails voiceDetails, String speech)\r\n in EddiSpeechService.SpeechService.speak(String voice, String speech)\r\n in EddiSpeechService.SpeechService.getSpeechStream(String voice, String speech)","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":"8\nAsStreamInternal\nSystem.Runtime.WindowsRuntime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.IO.WindowsRuntimeStreamExtensions\nSystem.IO.Stream AsStreamInternal(System.Object, Int32, System.String, Boolean)","HResult":-2147467261,"Source":"System.Runtime.WindowsRuntime","WatsonBuckets":null,"ParamName":"windowsRuntimeStream"}
2022-07-17T17:06:27 [Warning] WindowsMediaSynthesizer:WindowsMediaSpeechSynthesis Speech failed. Stripping IPA tags and re-trying.: {"voice":{"name":"Microsoft Elsa","gender":"Female","culturecode":"it-IT","synthType":"SpeechSynthesis","cultureinvariantname":"Italian (Italy)","culturename":"italiano (Italia)","Culture":"it-IT"},"speech":"<?xml version=\"1.0\" encoding=\"UTF-8\"?><speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis/synthesis.xsd\" xml:lang=\"it-IT\"><lexicon uri=\"C:\\Users\\%USERNAME%\\AppData\\Roaming\\EDDI\\lexicons\\it-it.pls\" type=\"application/pls+xml\"/>Ecco come suonerò nel tuo Adder.</speak>","exception":{"ClassName":"System.AggregateException","Message":"Si sono verificati uno o più errori.","Data":null,"InnerException":{"ClassName":"System.Exception","Message":"Impossibile trovare il testo associato a questo codice di errore.\r\n\r\nInternal Speech Error.","Data":{"RestrictedDescription":"Internal Speech Error.","RestrictedErrorReference":null,"RestrictedCapabilitySid":null,"__RestrictedErrorObject":{"RealErrorObject":{}},"__HasRestrictedLanguageErrorObject":false},"InnerException":null,"HelpURL":null,"StackTraceString":null,"RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":null,"HResult":-2147199584,"Source":"","WatsonBuckets":null},"HelpURL":null,"StackTraceString":" in System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)\r\n in System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)\r\n in System.Threading.Tasks.Task`1.get_Result()\r\n in EddiSpeechService.SpeechSynthesizers.WindowsMediaSynthesizer.<>c__DisplayClass6_0.<WindowsMediaSpeechSynthesis>b__0()","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":"8\nThrowIfExceptional\nmscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.Threading.Tasks.Task\nVoid ThrowIfExceptional(Boolean)","HResult":-2146233088,"Source":"mscorlib","WatsonBuckets":null,"InnerExceptions":[{"ClassName":"System.Exception","Message":"Impossibile trovare il testo associato a questo codice di errore.\r\n\r\nInternal Speech Error.","Data":{"RestrictedDescription":"Internal Speech Error.","RestrictedErrorReference":null,"RestrictedCapabilitySid":null,"__RestrictedErrorObject":{"RealErrorObject":{}},"__HasRestrictedLanguageErrorObject":false},"InnerException":null,"HelpURL":null,"StackTraceString":null,"RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":null,"HResult":-2147199584,"Source":"","WatsonBuckets":null}]}}
2022-07-17T17:06:27 [Warning] WindowsMediaSynthesizer:WindowsMediaSpeechSynthesis Speech failed
2022-07-17T17:06:27 [Warning] SpeechService:getSpeechStream Speech failed (Europa occidentale (Windows)): {"ClassName":"System.ArgumentNullException","Message":"Il valore non può essere null.","Data":null,"InnerException":null,"HelpURL":null,"StackTraceString":" in System.IO.WindowsRuntimeStreamExtensions.AsStreamInternal(Object windowsRuntimeStream, Int32 bufferSize, String invokedMethodName, Boolean forceBufferSize)\r\n in System.IO.WindowsRuntimeStreamExtensions.AsStreamForRead(IInputStream windowsRuntimeStream)\r\n in EddiSpeechService.SpeechSynthesizers.WindowsMediaSynthesizer.Speak(VoiceDetails voiceDetails, String speech, SpeechServiceConfiguration Configuration)\r\n in EddiSpeechService.SpeechService.speak(VoiceDetails voiceDetails, String speech)\r\n in EddiSpeechService.SpeechService.speak(String voice, String speech)\r\n in EddiSpeechService.SpeechService.getSpeechStream(String voice, String speech)","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":"8\nAsStreamInternal\nSystem.Runtime.WindowsRuntime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.IO.WindowsRuntimeStreamExtensions\nSystem.IO.Stream AsStreamInternal(System.Object, Int32, System.String, Boolean)","HResult":-2147467261,"Source":"System.Runtime.WindowsRuntime","WatsonBuckets":null,"ParamName":"windowsRuntimeStream"}

I have to say that i can hear the speech from Observatory Core, so i don't know really what to look for.
 
I already mentioned how to stop the distance report. You even acknowledged it.... 🤷‍♂️ 😁
yes sorry for that,I must of missed that
also if I wanted eddi not to report what is left to map after I had fully done a dss scan on a body,just to save speech time as I’m usually in another system when she’s finished ,if I could cut that out but leave it to report what there’s to map or left to map if I was only to honk
thanks
 
yes sorry for that,I must of missed that
also if I wanted eddi not to report what is left to map after I had fully done a dss scan on a body,just to save speech time as I’m usually in another system when she’s finished ,if I could cut that out but leave it to report what there’s to map or left to map if I was only to honk
thanks
In the 'Body mapped' script, there is a setting at the top called 'recommendOtherMapping'. Set this to 0 (zero) instead of 1 (one). That will turn it off.

EDDI scripting is very easy to learn. You should try it yourself, and you will find it easy to make any adjustments and edits to make it all sound just how you would like. It will also be faster, because you won't need to ask for help. Of course, if you ever get stuck doing it yourself, there are always people on here who are happy to help. 😊 I'm glad you are enjoying what EDDI has to offer. 👍
 
I need assistance:
i haven't played for week or so, and now i can't make EDDI to talk.
This is what it logs (trying MS Elsa after Ivona Carla):



I have to say that i can hear the speech from Observatory Core, so i don't know really what to look for.
Hi Parduz!

I'm sorry I can't help, as this is beyond my ability, but I thought I'd tag @T'kael and @VerticalBlank so they are aware and maybe can help you out. 😊

DC
 
I need assistance:
i haven't played for week or so, and now i can't make EDDI to talk.
This is what it logs (trying MS Elsa after Ivona Carla):



I have to say that i can hear the speech from Observatory Core, so i don't know really what to look for.
Hi Parduz, sorry you're running into this issue. Did something change in your speech setup?

It would be helpful if you could open an issue on Github and provide as much detail there as possible to help us to diagnose the issue.
 
So, with the recent CG for Thargoids, I decided to equip a Xeno Limpet controller to distribute repair/decontamination/research limpets.

EDDI keeps telling me I have limpets but no controller. I searched this long forum thread, doesn't seem that anyone else has this issue.

This is the limpet check script. I am not a programmer; is it possible to edit this to make it recognize it?

Code:
{set  controllers to 0}
{for compartment in ship.compartments:
    {if find(compartment.module.name, "Controller") != -1:
        {set controllers to controllers + 1}
    }
}

{set limpets to 0}
{for cargo in inventory:
    {if cargo.edname = "Drones":
        {set limpets to cargo.total}
    }
}

{set tenpercent to ship.cargocapacity / 10 - 1}
{if controllers > 0 && limpets = 0:
    Reminder: limpets.
|elif controllers = 0 && limpets > 0:
    You are carrying limpets but no controller.
|elif controllers > 0 && limpets < tenpercent:
    You have {limpets} {if limpets = 1: limpet |else: limpets} on-board.
}
This is probably due to the new limpet controllers that were added to the game a while ago. EDDI has been updated, but that version hasn't been released yet.
 
Hi!
With the EDDI plugin in VA
Is it possibly to, in station, get the stock of a specified commodity?

I want VA to trigger actions on different stock levels on different commodities.
 
Last edited:
Back
Top Bottom