Release EDDI 3.3 - Bring your cockpit to life

It should show in the loading information when you start VA

"10:30:33.408 Plugin 'EDDI 3.7.2' initialized."
"10:30:33.403 The EDDI plugin is fully operational."

EDDI should also show in the VA settings.

Open VA - click on the little wrench at bottom right to open the settings.
It should be on the "General" tab when you open it, If not it's the left Tab (first on left).
On the General tab there's a box labeled "Plugin Manager" on the right in the top third of the screen.
Click on Plugin Manager and a box will open where your plugins will be listed.

EDDI should show there and have a checkmark in the box.

HTH
 
Last edited:
It should show in the loading information when you start VA
I know, I'm after a way of programmatically checking to see if the plugin is either installed and or available. So if it's not installed then the profile won't work as the profile relies on EDDI being there ... if EDDI is not installed/working then the profile is just not going to be much use.

Wonder if I could test to see if EDDI is in the Apps dir? That would get around the installed part, next the working part.
 
I know, I'm after a way of programmatically checking to see if the plugin is either installed and or available. So if it's not installed then the profile won't work as the profile relies on EDDI being there ... if EDDI is not installed/working then the profile is just not going to be much use.

Wonder if I could test to see if EDDI is in the Apps dir? That would get around the installed part, next the working part.
Dock at a station

EDDI should report the landing pad location on approach.

You can also open EDDI with a voice command from VA. The default is "Open EDDI" but I changed it to "Open Auxiliary Control" as the default frequently doesn't respond.

The General tab on the VA settings screen also lists the Apps folder location and clicking on the ... box opens a file browse that lets you select the "VoiceAttack/Apps" folder where each app should be listed in it's own sub-directory.

EDDI must be installed in the same folder listed as the Apps folder in VA to work properly.

In my case VA lists "C:\Program Files (x86)\VoiceAttack\Apps" as the VA App folder and EDDI is installed in "C:\Program Files (x86)\VoiceAttack\Apps\EDDI"
 
Last edited:
If you're running EDDI with an HCS Voicepack, you also want to include the EDDI profile into the HCS profile by opening the "Elite: Singularity profile, click on Options and then list the EDDI profile in the box "Include commands from other profiles"

In any event, if VA reports that the EDDI plugin is loaded and operational when VA loads - I can't think of why it wouldn't be working.
 
Dock at a station
OK lets do this this way instead ....

When VA starts I have the profile I use for Elite auto loaded. I then would like it to detect if EDDI is installed and if it is is it working? If it's not installed or not working (enabled as a plugin) then the profile won't work and the user will be given a log and audio message to let them know something is missing.

In order to use the profile they MUST install and enable EDDI.

So the methods you've suggested are fine however I want to test to see if EDDI is enabled/installed as soon as the profile is loaded or VA is started as I auto load the profile. Which is generally before I even start Elite.
 
Last edited:
OK lets do this this way instead ....

When VA starts I have the profile I use for Elite auto loaded. I then would like it to detect if EDDI is installed and if it is is it working? If it's not installed or not working (enabled as a plugin) then the profile won't work and the user will be given a log and audio message to let them know something is missing.

In order to use the profile they MUST install and enable EDDI.

So the methods you've suggested are fine however I want to test to see if EDDI is enabled/installed as soon as the profile is loaded or VA is started as I auto load the profile. Which is generally before I even start Elite.
In your profile that relies upon EDDI, just run a check for a known variable set by EDDI. If this variable is null or 'not set', then EDDI is not loaded. I do this for my AVCS4 Falcon BMS profile - I need to check if the end user is also using a plugin for Falcon BMS by another developer.

If you do this in an inline function in C#/VB.net you can get away with using a try-catch method so no errors are shown in the VA Event Log in the event that an error is thrown when you try your evaluation. This is usually not needed, but it's gonna depend on the plugin you are checking for. JanJan's BMS plugin happens to set a VA Global Variable so I can just check if that is set or 'not set', and go from there.

So just try to think of the most bog standard generic EDDI variable that would exist for anyone and everyone who has it installed and loaded, ready to go.

EDIT: to be clear, I had already asked along these lines and came to this method because apparently there is no way to know if a specific plugin is installed, loaded, or initialized in VA itself, using VA tokens or w/e.
 
Last edited:
In your profile that relies upon EDDI, just run a check for a known variable set by EDDI.
I was checking for EDDI status being equal to Operational but it no longer seems to work, and I cannot find it in the Wiki docs anymore so it may have been removed in a recent edit/update ... so I may have to go down the olde inline function route.

But the other thing is I was hoping to perform the check without Elite Dangerous running ... but not sure if that's possible.
 
I was checking for EDDI status being equal to Operational but it no longer seems to work, and I cannot find it in the Wiki docs anymore so it may have been removed in a recent edit/update ... so I may have to go down the olde inline function route.

But the other thing is I was hoping to perform the check without Elite Dangerous running ... but not sure if that's possible.
It's absolutely possible - EDDI does not need the game to run in order for you to check a few things, and get a return -- or a 'not set'.
Find something more generic, and more prevalent. I used to have the EDDI Wiki darn near memorize, but I've been away for several months working on my website and AVCS stuff. There are so many things you can check for, just a matter of figuring out which is the best route for this. Variables always return 'not set' when null, and EDDI gets some information from the Commands Log which is a file on the computer, right? So.... there should be a way to check for something that EDDI does even when ED is not running.

edit: Barring that - if you absolutely cannot fine one... maybe we could ask EDDI Team for a simple VA Global Variable to be set for profile makers to check if the plugin is initialized, such as EDDI_Plugin_Initialized?
 
Last edited:
Well I have the test to see if EDDI is installed working it's just the test to see if the plugin is enabled that's now causing an issue.

In the variables.md file in the EDDI dir there's a section that contains
Code:
## EDDI states

    - `capi_active` true when the companion API is active
    - `icao_active` true if ICAO is currently enabled
    - `ipa_active` true if phonetic speech ssml tags are currently enabled
    - `va_active` true when the Voice Attack plug-in is active
how would I go about testing for va_active being true?

I've already tried various things and ways to write the variable and none seem to work. Examples of what I've tried;
Code:
Begin Boolean Compare : [va_active] Equals True
Begin Boolean Compare : [va active] Equals True
Begin Boolean Compare : [EDDI va_active] Equals True
Begin Boolean Compare : [EDDI va active] Equals True
Even tried EDDI state and EDDI states and they don't work either.
 
Well I have the test to see if EDDI is installed working it's just the test to see if the plugin is enabled that's now causing an issue.

In the variables.md file in the EDDI dir there's a section that contains
Code:
## EDDI states

    - `capi_active` true when the companion API is active
    - `icao_active` true if ICAO is currently enabled
    - `ipa_active` true if phonetic speech ssml tags are currently enabled
    - `va_active` true when the Voice Attack plug-in is active
how would I go about testing for va_active being true?

I've already tried various things and ways to write the variable and none seem to work. Examples of what I've tried;
Code:
Begin Boolean Compare : [va_active] Equals True
Begin Boolean Compare : [va active] Equals True
Begin Boolean Compare : [EDDI va_active] Equals True
Begin Boolean Compare : [EDDI va active] Equals True
Even tried EDDI state and EDDI states and they don't work either.
Try checking if {TXT:EDDI status} is set (rather than checking if it's equal to "Operational")? It hasn't been removed but it may show text other than "Operational".
Try {TXT:EDDI version}?
 
A minor annoyance here, I am setting up my personality and I have it set that during FSD Engaged it will give a callout for the star type in the arrival system.
I know I can use StartsWithVowel() to see if the event.stellarclass is a vowel or not, but I am wondering if it's possible to detect a phonetic vowel?

EG: "a F class main sequence star", I would like to be pronounced as "AN F class main sequence star".
Here is the snippet of code in question:

C#:
{if find(scoopables, event.stellarclass) > -1 && reportmainsequence:
    Arrival star is
    {OneOf(
        "a {OneOf(\"class\", \"type\")} {ucase(event.stellarclass)} {OneOf(\"scoopable\", \"main sequence\")}",
        "{if StartsWithVowel(event.stellarclass): an |else: a} {ucase(event.stellarclass)} {OneOf(\"type\", \"class\")} {OneOf(\"scoopable\", \"main sequence\")}"
    )}
    star.
}
 
A minor annoyance here, I am setting up my personality and I have it set that during FSD Engaged it will give a callout for the star type in the arrival system.
I know I can use StartsWithVowel() to see if the event.stellarclass is a vowel or not, but I am wondering if it's possible to detect a phonetic vowel?

EG: "a F class main sequence star", I would like to be pronounced as "AN F class main sequence star".
Here is the snippet of code in question:

C#:
{if find(scoopables, event.stellarclass) > -1 && reportmainsequence:
    Arrival star is
    {OneOf(
        "a {OneOf(\"class\", \"type\")} {ucase(event.stellarclass)} {OneOf(\"scoopable\", \"main sequence\")}",
        "{if StartsWithVowel(event.stellarclass): an |else: a} {ucase(event.stellarclass)} {OneOf(\"type\", \"class\")} {OneOf(\"scoopable\", \"main sequence\")}"
    )}
    star.
}
Maybe something along the lines of this?
C#:
bool hasPhoneticVowel = false;
string[] PhoneticVowels = {"f", "m", "n", "s", "x"};
foreach (string v in PhoneticVowels) {
    if event.stellarclass.StartsWith(v) {
        hasPhoneticVowel = true;
    }
}
// ---Not at all sure on syntax here - consider as pseudo---
{if StartsWithVowel(event.stellarclass) OR (hasPhoneticVowel): an |else: a}
 
A minor annoyance here, I am setting up my personality and I have it set that during FSD Engaged it will give a callout for the star type in the arrival system.
I know I can use StartsWithVowel() to see if the event.stellarclass is a vowel or not, but I am wondering if it's possible to detect a phonetic vowel?

EG: "a F class main sequence star", I would like to be pronounced as "AN F class main sequence star".
Here is the snippet of code in question:

C#:
{if find(scoopables, event.stellarclass) > -1 && reportmainsequence:
    Arrival star is
    {OneOf(
        "a {OneOf(\"class\", \"type\")} {ucase(event.stellarclass)} {OneOf(\"scoopable\", \"main sequence\")}",
        "{if StartsWithVowel(event.stellarclass): an |else: a} {ucase(event.stellarclass)} {OneOf(\"type\", \"class\")} {OneOf(\"scoopable\", \"main sequence\")}"
    )}
    star.
}
To expand on SemlerPDX's reply, if you wish to just use the EDDI script, rather than C# (I'm guessing that was an accident that you posted your code in that?), you can use this:
Code:
{if find(scoopables, event.stellarclass) > -1 && reportmainsequence:
    {set phonetic_vowels to ["F", "M"]}
    Arrival star is
    {OneOf("a {OneOf(\"class\", \"type\")} {ucase(event.stellarclass)}",
           "{if StartsWithVowel(event.stellarclass) || find(phoenetic_vowels, slice(event.stellaclass, 0, 1)) > -1: an |else: a} {ucase(event.stellarclass)} {OneOf(\"type\", \"class\")}"
    )}
    {OneOf("scoopable", "main sequence")} star.
}

I'm not sure if event.stellarclass is in uppercase by default or not. If it isn't, then just change the 'phonetic_vowels' array to all lowercase.

EDIT: Trimmed the phonetic array down to the only two letters that are scoopable stars.
 
Last edited:
To expand on SemlerPDX's reply, if you wish to just use the EDDI script, rather than C# (I'm guessing that was an accident that you posted your code in that?), you can use this:
Code:
{if find(scoopables, event.stellarclass) > -1 && reportmainsequence:
    {set phonetic_vowels to ["F", "M"]}
    Arrival star is
    {OneOf("a {OneOf(\"class\", \"type\")} {ucase(event.stellarclass)}",
           "{if StartsWithVowel(event.stellarclass) || find(phoenetic_vowels, slice(event.stellaclass, 0, 1)) > -1: an |else: a} {ucase(event.stellarclass)} {OneOf(\"type\", \"class\")}"
    )}
    {OneOf("scoopable", "main sequence")} star.
}

I'm not sure if event.stellarclass is in uppercase by default or not. If it isn't, then just change the 'phonetic_vowels' array to all lowercase.

EDIT: Trimmed the phonetic array down to the only two letters that are scoopable stars.
This is perfect, thanks, and thanks to SemlerPDX as well.
Yes the C# was a mistake, I just wanted syntax highlighting and didn't know what else to post it as.

Just curious, could you by chance tell me what the P function does?
as in:
{P(event.body, "body")}
rather than just {event.body}
I see it often in the default scipts and not quite sure what it is or what it does.
 
Under what circumstances will ((EDDI route details)) be triggered?

Plotted a route from 1 system to another 120+ jumps away and would like to have gotten the name of the destination system, but the event doesn't seem to fire.

Is it at all possible to get the name of the destination system of a route with EDDI?
 
Last edited:
Under what circumstances will ((EDDI route details)) be triggered?

Plotted a route from 1 system to another 120+ jumps away and would like to have gotten the name of the destination system, but the event doesn't seem to fire.

Is it at all possible to get the name of the destination system of a route with EDDI?
((EDDI route details)) is triggered by the RouteDetails() function.
 
Top Bottom