Release EDDI Scripts and EDDI enabled VA Commands Thread

Hmm... maybe there is something wrong with my english. I wrote:

"I tried to attach it to the 'Station no fire zone exited', it works in case of planetary stations, and in most cases when leaving orbital stations. But unfortunately, there are some situations, when the timing doesn't work."

I was trying to say, that I'm aware of the existence of the 'Station no fire zone exited' event, tried it, but it is not doing its job properly in case of the "mass locked off, turn on FSD" message.

Thanks anyway.

The no-fire zone entered/exited events are triggered when receiving the relevant message from the station. Sometimes these messages are not added to the journal log, hence the events don't trigger. As far as I'm aware this is an issue with Elite rather than EDDI, but if you do find it happening to you then if you can post the relevant excerpt of your journal log (from the 'Undocked' event to the 'FSDJump' event) it will help to clarify where the problem lies.
 
Ok I feel completely stupid, where do these script go and what is the syntax for using it with VA???

If I want to use this "enablespeechresponder/disablespeechresponder" with VA where do i put it and what is the syntax .....aggghhh give me a hammer and some metal, but this....

Hi,

I don't use VA, so in that case can't help. CTRL+C the "Check in" script, go to EDDI window, select Speech responder tab, search for Docking requested under Name, click Edit button at the end of the row, delete actual script, if exist, CTRL+V the new script. Click Test to see, if it works (be patient, there is a 8sec delay in the script). If you are happy with it, click OK, or you can edit the messages to your taste. The same goes for "check ot" message, look for Station no fire zone exited. However, the timing of this doesn't work always properly, this is more an experimentral approach.

Being patient and believing yourself helps more, than any hammer:)

Have fun!

Best regards!
 
The no-fire zone entered/exited events are triggered when receiving the relevant message from the station. Sometimes these messages are not added to the journal log, hence the events don't trigger. As far as I'm aware this is an issue with Elite rather than EDDI, but if you do find it happening to you then if you can post the relevant excerpt of your journal log (from the 'Undocked' event to the 'FSDJump' event) it will help to clarify where the problem lies.

Thanks!

I was afraid, that this is rather an Elite issue. Anyway, we have already lots of additional infos, events, triggers coming from the journal log, what we can use to personalize our ship computers responses. And a fantastic thing, that there are people around the world, who have common interests, a common hobby and they try to share the results of thier efforts with eachother:) Everybody has a special skill, you can do programming, I can ask stupid questions, etc...

Have a nice day, keep on "Elite-ing"!
 
I hadn't been to the moon for a long time but was visiting it now in beta to make a new "Earthrise" screenshot with the new Camera Suite.
When I entered normal space Eddi told me I'd entered normal space near Planet Moon.
Although it's a minor issue I didn't like it so I changed my "Entered Normal Space" script so Eddi will say "near the Moon" instead of "near Planet Moon"
After testing it I returned to my home system and entering normal space near it's star Eddi told me I'd entered normal space near Star Luyten's Star.
Since it's my home system I'm there pretty often so I made another change and now Eddi says "near Luyten's Star" instead of "near Star Luyten's Star"

Here's my altered script:
Code:
{Pause(5000)}

{OneOf("{ShipName()} has", "We've")} {OneOf("left supercruise", "{OneOf(\"entered\", \"returned to\", \"dropped to\")} normal space")}

{if event.body = 'Moon':
    {OneOf("near", "close to", "in the vicinity of")} the {P(event.body)}
|elif event.body = "Luyten's Star":
    {OneOf("near", "close to", "in the vicinity of")} {P(event.body)}
|elif event.bodytype = 'Planet':
    {OneOf("near", "close to", "in the vicinity of")} planet {P(event.body)}
|elif event.bodytype = 'Star':
    {OneOf("near", "close to", "in the vicinity of")} star {P(event.body)}
  |elif event.bodytype = 'Station':
    {OneOf("near", "close to", "in the vicinity of")} {P(event.body)}
}.
 
Ok been using Eddi for a while now, and man what a trip it has been! I just cant play the game without it! So i'm delving into all these amazing scripts and got to a point i'm very satisfied with eddi and astra! So i THANK YOU ALL for this! Now noob moment. I noticed there's some scripts that would perhaps require a voice commando to activate them. like damage report, where i'm i? etc... How can i trigger these using VA? I have the soooo handy and simple command "what time is it?"

Say, 'The time is {time}'

... and been wondering if these commands would function like it or not... Question is, how can i trigger some scripts in eddi+Va using voice commands?
Thank you so much!
 
Last edited:
Ok been using Eddi for a while now, and man what a trip it has been! I just cant play the game without it! So i'm delving into all these amazing scripts and got to a point i'm very satisfied with eddi and astra! So i THANK YOU ALL for this! Now noob moment. I noticed there's some scripts that would perhaps require a voice commando to activate them. like damage report, where i'm i? etc... How can i trigger these using VA? I have the soooo handy and simple command "what time is it?"



... and been wondering if these commands would function like it or not... Question is, how can i trigger some scripts in eddi+Va using voice commands?
Thank you so much!

EDDI comes with a VoiceAttack profile that you can import to provide you with voice-related functions. It's in your EDDI install directory, should be EDDI.vap
 
EDDI comes with a VoiceAttack profile that you can import to provide you with voice-related functions. It's in your EDDI install directory, should be EDDI.vap

Thank you very much for the info, i had some commands imported but ll i get in response is "I don't know what system you taking about" and "body report" lol!
Here are my scripts!

...

Can you help? Thanks in advance!
 
Last edited:
Thank you very much for the info, i had some commands imported but ll i get in response is "I don't know what system you taking about" and "body report" lol!
Here are my scripts!

...

Can you help? Thanks in advance!

EDDI has context in its scripts, which means that when you jump to a system (for example) it will make a note of said system so that when you run the system report it knows which system you are talking about. If you have modified the original scripts you might need to copy the top few lines from the original script (the ones about context) to ensure that it works.
 
EDDI has context in its scripts, which means that when you jump to a system (for example) it will make a note of said system so that when you run the system report it knows which system you are talking about. If you have modified the original scripts you might need to copy the top few lines from the original script (the ones about context) to ensure that it works.

Thankyou jgm!

i couldnt find the command or script that would let me edit the default system path used in EDDI
"D:\elite\eddi\logs\eddi_output_**_**.log
I have 4 hdds and none has the D mapped to drives lol...
Is it in VA or EDDI executable?

EDIT: Found it nvm!
 
Last edited:
Hi there,

After several attempts, I decided to come here and cry for help :)

I'm trying to get the AI to inform me about the materials (and other things) found on the world where I landed. I'm trying to understand the mechanics of EDDI but I might be completely wrong.
I understand that I have to set context the same way it is done when scanning an object.

For exemple, on "Location" I tried to add context (I assume I would need to do the same when "entering normal space" :

Code:
{_ Context }
{SetState('eddi_context_last_subject', 'body')}
{SetState('eddi_context_last_action', 'location')}
{SetState('eddi_context_body_system', event.system)}
{SetState('eddi_context_body_name', event.body)}


You are
{if event.docked:
    docked at the
    {if event.station = event.body:
        orbital station {P(event.station)}
    |else:
        ground station {P(event.station)} on {P(event.body)}
    }
|elif event.body:
    near {P(event.body)}
}
in the {P(event.system)} system.

Then, in my "Touchdown" script, I want the AI to tell me about the body I've just landed on:

Code:
{_ Fetch from context }
{set reportbody to BodyDetails(state.eddi_context_body_name, state.eddi_context_body_system)}

Touchdown.

{Pause(2000)}

{if !reportbody.name || reportbody.name = "":
    I'm not sure which body you are asking about.
|else:
    {P(reportbody.name)} is a
    {if reportbody.gravity < 0.5:
        low-gravity
    |elif reportbody.gravity <2:
        medium-gravity
    |elif reportbody.gravity <4:
        high-gravity
    |else:
        extremely high-gravity
    }
}

It keeps repeating it has no idea which body I'm talking about.... I'm going crazy.... I feel like I'm missing the biggest piece of that jigsaw but I can't figure out what it is. :S

Thank you for your help ! :)
 
Hi there,

After several attempts, I decided to come here and cry for help :)

I'm trying to get the AI to inform me about the materials (and other things) found on the world where I landed. I'm trying to understand the mechanics of EDDI but I might be completely wrong.
I understand that I have to set context the same way it is done when scanning an object.

For exemple, on "Location" I tried to add context (I assume I would need to do the same when "entering normal space" :

Code:
{_ Context }
{SetState('eddi_context_last_subject', 'body')}
{SetState('eddi_context_last_action', 'location')}
{SetState('eddi_context_body_system', event.system)}
{SetState('eddi_context_body_name', event.body)}


You are
{if event.docked:
    docked at the
    {if event.station = event.body:
        orbital station {P(event.station)}
    |else:
        ground station {P(event.station)} on {P(event.body)}
    }
|elif event.body:
    near {P(event.body)}
}
in the {P(event.system)} system.

Then, in my "Touchdown" script, I want the AI to tell me about the body I've just landed on:

Code:
{_ Fetch from context }
{set reportbody to BodyDetails(state.eddi_context_body_name, state.eddi_context_body_system)}

Touchdown.

{Pause(2000)}

{if !reportbody.name || reportbody.name = "":
    I'm not sure which body you are asking about.
|else:
    {P(reportbody.name)} is a
    {if reportbody.gravity < 0.5:
        low-gravity
    |elif reportbody.gravity <2:
        medium-gravity
    |elif reportbody.gravity <4:
        high-gravity
    |else:
        extremely high-gravity
    }
}

It keeps repeating it has no idea which body I'm talking about.... I'm going crazy.... I feel like I'm missing the biggest piece of that jigsaw but I can't figure out what it is. :S

Thank you for your help ! :)

I'm not sure there is anything wrong with your code. I've just been trying to scan bodies in the Tukatjanino system, and I'm getting exactly the same problem using the default 'Body Scanned' and 'Body Report' scripts. It would appear that for some reason the BodyDetails() isn't picking up the state variables. I've checked it by adding the following into the Body Report script:-

Code:
Report body name is: {reportbody.name}.
Event body name is: {event.name}.
Scanned body name is: {BodyDetails(state.eddi_context_body_name, state.eddi_context_body_system).name}.
State name is: {state.eddi_context_body_name}.
State system is: {state.eddi_context_body_system}.

(Although I'm not 100% sure Scanned Body Name will work like that).

With these, the Report Body Name and Scanned Body Name are blank. The other parts work fine. I get this as the speech out:-

Scan of Tukatjanino 3 complete. Report body name is:. Event body name is: Tukatjanino 3. Scanned body name is:. State name is: Tukatjanino 3. State system is: Tukatjanino. I'm not sure which body you are asking about.


This leads me to believe that something may not be right with the Body Report function, or maybe the BodyDetails() function.

I'm going to test this more in nearby systems to see if it happens there too, as I'm sure it's all been working fine recently.

EDIT: I just jumped to the next system, Ethet, and it's all working perfectly there (only one planet), including the Scanned Body Name part. I then jumped back to Tukatjanino, and it's working fine again. I even logged out to Main Menu and back in again, and still working fine. Maybe it just didn't like that I had logged into the game while in that system? Maybe it was just glitching for both of us? Who knows? Maybe try going to a different body in a different system to test?
 
Last edited:
Hi,

I'm having issues with the Body Report script as well, though on a different matter. The part of the script that is meant to list any materials present at a body exceeding a certain percent doesn't produce any results. From what I can tell the reason is that only the material presence percentage is stored in reportbody.materials.percentage, while the name of the material isn't stored in reportbody.materials.material (or in .name or similar) as it should be. The code in question is below along with a simple test to reproduce (as long as a proper context body is set):

{set goodmaterials to []}
{set greatmaterials to []}
{for material in reportbody.materials:
{if material.percentage >= MaterialDetails(material.material).greatpctbody:
{set greatmaterials to cat(greatmaterials, [material])}
|elif material.percentage >= MaterialDetails(material.material).goodpctbody:
{set goodmaterials to cat(goodmaterials, [material])}
}
}

{_ Testing}
Percentage is {reportbody.materials[0].percentage}. {_ Returns correct percentage of first item}
Name is {reportbody.materials[0].material}. {_ Is empty, should contain name of first item}

Does anyone else have this problem or is it just me? I've seen (and tried without different results) modified versions of the script (this one for example) that list all present materials regardless of presence percentage so I would assume it worked for them?
 
Hi,

I'm having issues with the Body Report script as well, though on a different matter. The part of the script that is meant to list any materials present at a body exceeding a certain percent doesn't produce any results. From what I can tell the reason is that only the material presence percentage is stored in reportbody.materials.percentage, while the name of the material isn't stored in reportbody.materials.material (or in .name or similar) as it should be. The code in question is below along with a simple test to reproduce (as long as a proper context body is set):

{set goodmaterials to []}
{set greatmaterials to []}
{for material in reportbody.materials:
{if material.percentage >= MaterialDetails(material.material).greatpctbody:
{set greatmaterials to cat(greatmaterials, [material])}
|elif material.percentage >= MaterialDetails(material.material).goodpctbody:
{set goodmaterials to cat(goodmaterials, [material])}
}
}

{_ Testing}
Percentage is {reportbody.materials[0].percentage}. {_ Returns correct percentage of first item}
Name is {reportbody.materials[0].material}. {_ Is empty, should contain name of first item}

Does anyone else have this problem or is it just me? I've seen (and tried without different results) modified versions of the script (this one for example) that list all present materials regardless of presence percentage so I would assume it worked for them?

You would seem to be correct. I've just tried this myself (it's my script you linked to in your post) and am getting the same thing. I rolled back to the script used in the previous version of EDDI and that worked fine. However, that is in the Body Scanned event rather than being a function that uses the SetState variables. I even tried setting the reportbody with the actual variables like this:
Code:
{set reportbody to BodyDetails(event.name, system.name)}
but that didn't work either.

......

After some other testing, I seem to have narrowed it down to the part of the code that allocated the materials to either great, good or all. Testing with this part of the code:

Code:
        {set goodmaterials to []}
        {set greatmaterials to []}
        {for material in reportbody.materials:
            {if material.percentage >= MaterialDetails(material.material).greatpctbody:
                {set greatmaterials to cat(greatmaterials, [material])}
            |elif material.percentage >= MaterialDetails(material.material).goodpctbody:
                {set goodmaterials to cat(goodmaterials, [material])}
            |else
                {set allmaterials to cat(allmaterials, [material])}[B][I] {material.name} {material.percentage} all,[/I][/B]
            }
        }

The part that is bold and italic, in the new version of the script (v2.2.0) material.name is always blank, while material.percentage is spoken correctly (I put 'all' in just so I knew when it was being processed). However, putting this code into the old version (v2.1.0) the material.name is spoken. The difference between the two is that the new one uses BodyDetails, while the old one uses event.name to get the materials. My conclusion is that BodyDetails() doesn't seem to be populating the material.name variable of the array.

In the new version, I changed the 'for material in reportbody.materials' to 'for material in event.materials' and the whole script worked perfectly, just as it should.

I'm going to open this as an issue on the EDDI GitHub site to see if the author can check if I'm right or not, and see if he can fix it.
 
The part that is bold and italic, in the new version of the script (v2.2.0) material.name is always blank, while material.percentage is spoken correctly (I put 'all' in just so I knew when it was being processed). However, putting this code into the old version (v2.1.0) the material.name is spoken. The difference between the two is that the new one uses BodyDetails, while the old one uses event.name to get the materials. My conclusion is that BodyDetails() doesn't seem to be populating the material.name variable of the array.

In the new version, I changed the 'for material in reportbody.materials' to 'for material in event.materials' and the whole script worked perfectly, just as it should.

I'm going to open this as an issue on the EDDI GitHub site to see if the author can check if I'm right or not, and see if he can fix it.


Be aware that the materials-array in reportbody and event seem to use different naming conventions. The reportbody equivalent of event.materials.name is reportbody.materials.material.


PS: My posts are probably still being sent to the moderation post-queue due to me being new here, so this post might be massively delayed.
 
Be aware that the materials-array in reportbody and event seem to use different naming conventions. The reportbody equivalent of event.materials.name is reportbody.materials.material.


PS: My posts are probably still being sent to the moderation post-queue due to me being new here, so this post might be massively delayed.

Yes, I see that now. I had missed it saying material.material in the new version of Body Report. I guess that makes my conclusion invalid. :( Still, the script doesn't work anymore, so something is not right, and all I can see being different is that reportbody is being set with BodyDetails(). I hadn't been doing any exploring since v2.2.0 came out so I hadn't noticed it not working.
 
Thank you Darkcyde for your dedication !

I tried the script we talked about in another system, with other bodies...and it didn't work either. I can figure out HOW to extract the information about a body and use it in text-to-speech or event scripts. Once again, I'd like to get planetary information at touchdown but I can't link it to my script :-(
I don't know if it's a problem with bodydetails() or how I'm setting context or what.... :'-(
 
Thank you Darkcyde for your dedication !

I tried the script we talked about in another system, with other bodies...and it didn't work either. I can figure out HOW to extract the information about a body and use it in text-to-speech or event scripts. Once again, I'd like to get planetary information at touchdown but I can't link it to my script :-(
I don't know if it's a problem with bodydetails() or how I'm setting context or what.... :'-(

I was just going to make this a suggestion to try, but decided I'd do the leg work for you and try it myself (I love coding these scripts! lol).

As well as using the 'Location' event (which will be important if you load a game on or above a planet), use the 'Entered Normal Space' event too. This is the last thing you do that provides planetary information before you touchdown on the surface. Then use 'Touchdown' event as you want.

So, in the 'Entered Normal Space' event, use this:-
Code:
{SetState('eddi_context_body_system', event.system)}
{SetState('eddi_context_body_name', event.body)}

{Pause(5000)}

{Occasionally(2,"{ShipName()} has")}
{OneOf("left supercruise", "{OneOf('entered','returned to','dropped to')} normal space")}

{if event.bodytype != null:
   {OneOf("near", "near to", "close to", "in the vicinity of")}

   {if event.bodytype = "Planet":
      planet {P(event.body)}
   |elif event.bodytype = "Star":
      star {P(event.body)}
   |elif event.bodytype = "Station":
      {P(event.body)}
   |elif event.bodytype = "PlanetaryRing":
      Planetary Ring {P(token(event.body," Ring",0))}
   }
}.
(This is my own version updated to include Planetary Rings.)

Then in 'Touchdown', use this:-
Code:
{_ Fetch from context }
{set reportbody to BodyDetails(state.eddi_context_body_name, state.eddi_context_body_system)}

Touchdown. {OneOf("Drives","Engines","Thrusters")} {OneOf("Offline","Disengaged","Powered Down")}

{Pause(1000)}

{Occasionally(2,"Current")}
{Occasionally(2,"Planetary")}
{Occasionally(2,"Location")}

coordinates {Occasionally(2,"are")} {round(event.longitude,4)} degrees longitude, {round(event.latitude,4)} degrees latitude.

{if !reportbody.name || reportbody.name = "":
    I'm not sure which body you are asking about.
|else:
    {P(reportbody.name)} is a
    {if reportbody.gravity < 0.5:
        low-gravity
    |elif reportbody.gravity <2:
        medium-gravity
    |elif reportbody.gravity <4:
        high-gravity
    |else:
        extremely high-gravity
    }
}
(Which is pretty much how you had it already.)

Now, in theory this should be working. It is, after all, how it's used in Body Report (but that's not working properly anymore either). However, like you, it just keeps telling me it doesn't know what body I'm talking about. I believe this may be caused by what appears to be a problem with the BodyDetails() function, as I am having trouble with this in other places too. Although, I could be wrong. [blah]
 
Yes, yes yes! I agree with your script, that's how I understand it, how it should work I guess. That's really weird. Are we missing something ? I just don't dare to report an issue on github and sound silly [big grin]
 
I'm back in front of my dev computer today so will be able to take a look at this issue. I'll let you know what I find.
 
Back
Top Bottom