Release EDDI Scripts and EDDI enabled VA Commands Thread

Hi Guys,

please excuse the Noob question. Ive got the Beta of voiceattack and I have EDDI. Ive connected all various logs etc and everything from the perspective of the speech responder functions perfectly. However what I want to do is use commands inside of Voiceattack, in particular ((EDDI docking granted)), ((EDDI shields up)) and ((EDDIE shields down)) to trigger actions within voiceattack. For example when docking is granted I want to be able use a voiceattack command to change my music through voiceattack.

When I use EDDI and voiceattack in game it seems that they are both working. When I request docking I get the speech responder giving me information on my landing pad, however, if I try and use the Voiceattack command it doesn't seem to be getting the trigger from EDDI, in fact none of the voiceattack commands seem to be working. I can however use the commands in the EDDI profile, just not receiving automatic updates to status of various systems. Anybody know what I'm doing wrong ? Ive been trying to figure this out for over a week and have read various blogs and forums, but I'm stuck.

Thanks in advance
Hello again guys,

I just realized why this is not working !!!!

I have multiple profiles strung together. Journal entries will only work with the current profile. So I have to set my EDDI commands and then import them all into my various HCS profiles which is a real drag and pretty untidy. Anyone know a way around this or if it is going to be fixed ?

Thanks again for the attention
 
Hi Guys,

please excuse the Noob question. Ive got the Beta of voiceattack and I have EDDI. Ive connected all various logs etc and everything from the perspective of the speech responder functions perfectly. However what I want to do is use commands inside of Voiceattack, in particular ((EDDI docking granted)), ((EDDI shields up)) and ((EDDIE shields down)) to trigger actions within voiceattack. For example when docking is granted I want to be able use a voiceattack command to change my music through voiceattack.

When I use EDDI and voiceattack in game it seems that they are both working. When I request docking I get the speech responder giving me information on my landing pad, however, if I try and use the Voiceattack command it doesn't seem to be getting the trigger from EDDI, in fact none of the voiceattack commands seem to be working. I can however use the commands in the EDDI profile, just not receiving automatic updates to status of various systems. Anybody know what I'm doing wrong ? Ive been trying to figure this out for over a week and have read various blogs and forums, but I'm stuck.

Thanks in advance
Have you tried the simple example shown in the video at [video=youtube;VQbR8SfCTRk]https://www.youtube.com/watch?v=VQbR8SfCTRk[/video]? If that doesn't work then chances are that there is something wrong with your integration of VoiceAttack and EDDI. There are a number of troubleshooting steps available at https://github.com/cmdrmcdonald/EliteDangerousDataProvider/blob/master/TROUBLESHOOTING.md#issues-with-voiceattack-integration

If everything there looks good then please post a screenshot of your ((EDDI docking granted)) VoiceAttack script and I'll take a look.
 
As for keeping a running tally, what you can do is set profile variables in VA. Set up an INT variable called RunningTally and click "Save to profile" at the bottom. This is like setting up a "global" variable in a programming language, that variable becomes available to all VA commands. This is actually how I set up the Filename and Directory variables in my profile so I could change just one when I wanted to move the file as opposed to changing all ~50 actions. Then you could do a conditional block against the RunningTally variable, if RunningTally is less than 5, append to the text file and add 1 to RunningTally, if RunningTally is greater than or equal to 5, overwrite the text file. You can get pretty convoluted in VA using variables [big grin]. I'll play around with it and see if I can make you an example profile to start with.

As for the rounding, what you have to do is pass the EDDI variable into a VA variable. For example, create a "Set a decimal value" action, name it FuelUsed. Then, choose the "Convert Text/Token" option and in the box, put {DEC:EDDI jumped fuelused}. Finally, check the "Round value to" box and choose your decimal places, 0 removing all decimals. It will look like this:

http://www.jeremyedwardkellogg.com/images/roundvariable.jpg

Then you would write this to your text file:

Code:
{TXT:EDDI jumped system} Fuel: {DEC:FuelUsed}T ({DEC:Last jump})
If you look at the action I set up for ((EDDI star scanned)) I used this technique a lot for the star values.

Thus endeth the lesson. Let me know if you have any issues!
***MIND EXPLODED***

Damn man I was expecting some feed back but man I wasn't expecting this.

Big thanks for helping me out with this stuff I think I managed to get the variables set up

Just wanted to make sure I got the setting up of variables bit right.

So I just make a VA Command called "Reset for exploration" (only used when starting a big trip & Ghosted)

Set decimal [BeeTotalDistance] value to 0 (round to 3 decimal place) (save value to profile)
Set decimal [BeeTotalJumps] value to 0 (round to 0 decimal place) (save value to profile)
Set decimal [BeeTotalFuelScooped] value to 0 (round to 0 decimal place) (save value to profile)
Set decimal [BeeTotalFuelUsed] value to 0 (round to 0 decimal place) (save value to profile)
Set decimal [BeeTotalHeatWarnings] value to 0 (round to 0 decimal place) (save value to profile)

In the ((EDDI Jumped))
Set decimal [BeeTotalDistance] to [BeeTotalDistance] plus [{DEC:Last Jump}] (round to 3 decimal places) (save value to profile)
Set decimal [BeeTotalJumps] to [BeeTotalJumps] plus 1 (round to 0 decimal places) (save value to profile)
.....


Only thing I'm currently not sure about is getting the scooped fuel variable from EDDI, oh and the only having the last 5 jumps as a txt file bit which you was going to do a VA profile on :D
 
Last edited:
punkerich has a cool idea using VA. What I usually do is just mute VA and ED in Windows. In Windows 7, 8, and 10, if you right click your speaker down by the clock and click "Open volume mixer", you can mute and adjust the volume on a per-program basis. I just mute VA and the ED client when I am going to be watching something on Netflix or Plex.
Would be cool if there was a Silent per session command in EDDI. Like you could silence EDDI til the next time EDDI starts up or a true false built in.
 
Hello again guys,

I just realized why this is not working !!!!

I have multiple profiles strung together. Journal entries will only work with the current profile. So I have to set my EDDI commands and then import them all into my various HCS profiles which is a real drag and pretty untidy. Anyone know a way around this or if it is going to be fixed ?

Thanks again for the attention
Okay I just saw this. What you can do in this situation is select the EDDI profile and then bring up the options for it. There should be an option "Include commands from another profile", where you can set your other profile and this will chain the profiles together so you can use commands from both.
 
It's coming...
Can't wait... want to make my 'test' personality permanent! ;)


Edit: Lol, ignore my last. I see from github you're hard-coding enable/disable VA commands instead of passing a state variable... even better!
 
Last edited:
A simple script I've added to the existing 'Docking denied' script...

Code:
{Pause(2000)}

{if event.reason = "ActiveFighter":
    Fighter is still active.
|elif event.reason = "Distance":
    Excessive distance from station.
|elif event.reason = "Hostile":
    Currently hostile with the controlling faction
|elif event.reason = "NoSpace":
    Landing pad not available.
|elif event.reason = "Offences":
    Pending offence with the station.
|elif event.reason = "TooLarge":
    Ship is too large.
}
 
Last edited:
A few scripts I've cobbled together:

Cargo Collected:
Code:
{event.cargo} {OneOf("now on board","collected","added to cargo hold")}.

{if event.stolen:
  Warning this cargo is marked as stolen.
}
Fuel report after jumping, Jumped Event:
Code:
{set currentfuel to (event.fuelremaining / ship.fueltanktotalcapacity)}

{Pause(2000)}

Your last Jump used up {Humanise(event.fuelused)} Tons of Fuel, leaving you with {Humanise(event.fuelremaining)} Tons remaining.
{Occasionally(5,"with a total fuel capacity of {ship.fueltanktotalcapacity} tons.")}

{if icurrentfuel < 0.08:
  Danger! {P(ShipName())}s Fueltanks depleted! Running on reserves. Shutdown of non-essential Systems is adviced!. Emergency call transmitter standing by.  
|elif currentfuel < 0.16:
  Warning! {P(ShipName())}s Fueltanks almost depleted. Refueling is strongly recommended. 
|elif currentfuel <= 0.25:
  Attention! Fuel reserves below 25%. 
|elif currentfuel <= 0.5:
  Attention! Fuel reserves below 50%. 
}
Security presence report:
Code:
{if system.security = "None":
        Warning there is no {OneOf("police", "security", "law enforcement")} presence {OneOf("here", "in this system")}.
|elif system.security = "Low":
        Caution there is {OneOf("minimal", "low", "weak")}  {OneOf("police", "security", "law enforcement")} presence {OneOf("here", "in this system")}.
|elif system.security = "Medium":
        There is {OneOf("standard", "medium", "average")}  {OneOf("police", "security", "law enforcement")} presence {OneOf("here", "in this system")}.
|elif system.security = "High":
        There is {OneOf("high", "heavy", "strong")} {OneOf("police", "security", "law enforcement")} presence {OneOf("here", "in this system")}. You should be safe.
|elif system.security = "Lawless":
        Warning this is a Anarchy system. There is no {OneOf("police", "security", "law enforcement")} presence {OneOf("here", "in this system")}.
|else:
        There is {system.security} {OneOf("police", "security", "law enforcement")} presence {OneOf("here", "in this system")}.
}
Ship Refueled, by buying fuel or scooping:
Code:
{set currentfuel to (event.total / ship.fueltanktotalcapacity)}

{if event.source = "Scoop":
   {ShipName()} refueled  by fuel scoop with {Humanise(event.amount)} Tons.
|else
   {set currentfuel to ship.fueltanktotalcapacity}
        {ShipName()} refuelled with {Humanise(event.amount)} Tons for {event.price} Credits.}
Station Report:

Code:
{P(station.name)}, in the {P(system.name)} system is controlled by the {P(station.faction)} faction, in a state of {P(station.state)}, with a {P(station.government)} government, and {system.security} security level. It is a {station.model}. This station is {(station.distancefromstar)} light seconds from the star and alligned to {P(station.allegiance)}, with an economy of 

{for economy in station.economies:
  {economy}
}
System Report read on jumping event:
Code:
{OneOf("This is", "This system is", "{P(system.name)} is")}
{if system.allegiance = "Federation":
    a Federation
|elif system.allegiance = "Empire":
    an Empire
|else:
    an independent
}
{if system.government:
    {system.government} government,
|else:
  system
}
{OneOf("of", "with a population of", "home to", "supporting")} {Humanise(system.population)} {OneOf("people", "souls")}
{if system.power:
    {P(system.powerstate)} by {P(system.power)}.
}

{if system.power="Li Yong-Rui":
  Warning, this system is hostile to you.
|elif system.power="Zachary Hudson":
  Warning, this system is hostile to you.
|elif system.power="Felicia Winters":
  Warning, this system is hostile to you.
|elif system.power="Edmund Mahon":
  Warning, this system is hostile to you.
|elif system.power="Pranav Antal":
  Warning, this system is hostile to you.
|elif system.power="Archon Delaine":
  Warning, this system is hostile to you.
|elif system.power="Yuri Grom":
  Warning, this system is hostile to you.
}

{if system.faction:
  {OneOf("The controlling faction","The primary faction")} is {P(system.faction)}.
}


{if system.primaryeconomy:
  {P(system.name)} has a {OneOf("primary","main")} economy of {P(system.primaryeconomy)}.
}




{if system.state = "Boom":
    This system is undergoing a boom; there might be good trading profits to be made here.
|elif system.state = "Civil War":
    This system is in civil war; caution is advised.
|elif system.state = "Famine":
    This system is in a state of famine; caution is advised.
|elif system.state = "Lockdown":
    This system is in lockdown; caution is advised.
|elif system.state = "Outbreak":
    This system is attempting to contain an outbreak of disease; caution is advised.
|elif system.state = "War":
    This system is at war; caution is advised.
}

{if len(system.stations) = 0:
  There are no stations
|else:
    {if len(system.orbitalstations) = 0:
        {if len(system.planetarystations) = 1:
            There is {OneOf("a single", "a lone", "just one", "one")} planetary station
        |else:
            There are {len(system.planetarystations)} planetary stations
        }
    |elif len(system.orbitalstations) = 1:
        There is {OneOf("a single", "a lone", "just one", "one")} orbital station
        {if len(system.planetarystations) = 1:
            and {OneOf("a lone", "a single", "one")} planetary station
        |elif len(system.planetarystations) > 1:
            and {len(system.planetarystations)} planetary stations
        }
    |else:
        There are {len(system.orbitalstations)} orbital stations
        {if len(system.planetarystations) = 1:
            and {OneOf("a lone", "a single", "one")} planetary station
        |elif len(system.planetarystations) > 1:
            and {len(system.planetarystations)} planetary stations
        }
{OneOf("here.", "in this system.", "in {P(system.name)}.")}
    }
}
{F("Security presence report")}
 
Just got reminded by the last posting about cargo, anybody written a script for when you jump into a system and you have cargo thats illegal in that system and gives you a warning of this?
 
Yes, I was considering writing one, but ran into a snag. There is only one event in the log that reports on the legality of cargo, that is when you pick it up, and it only checks for the the current jurisdiction (since the legality of a certain commodity is based on the jurisdiction you are in).

I wanted to add a check to the Jump event, to check your list of cargo against the list of illegal wares in the current system. I digged through the EDDI raws on github, but there is actually no object or function I could find that would return a list of illegal wares. I also digged through EDDB's System raws, but no luck there either. Looks like other than ED's proprietary check in the cargo pickup event, there is no way to know if something is illegal or not.
 
After installing EDDI and running for over a week or so I'm now having problems, each time I reinstall it and try to run it I get this message 'EDDI has stopped working' and nothing else. Voice attack is still working as it should though, I tried attaching a jpeg but says invalid file,can anyone please help me out.
 
Last edited:
UPDATE: I found a property in the EDDB "stations.json" called "prohibited_commodities", that gives a list of the illegal wares at that station. The only problem is, I found no reference to this in the EDDI raws, the "station" object doesn't query for this property, so I can't access it from whitin EDDI. If it did, it would be possible to get the list of stations of the target system when jumping and then match the ship's cargo against the list of illegal wares for each station in the system.
I might post about it in the main thread.

After installing EDDI and running for over a week or so I'm now having problems, each time I reinstall it and try to run it I get this message 'EDDI has stopped working' and nothing else. Voice attack is still working as it should though, I tried attaching a jpeg but says invalid file,can anyone please help me out.
This is a topic for user created scripts for EDDI. You need to post this in the main thread: https://forums.frontier.co.uk/showthread.php/294579-EDDI-Windows-app-for-immersion-and-more
 
Last edited:
UPDATE: I found a property in the EDDB "stations.json" called "prohibited_commodities", that gives a list of the illegal wares at that station. The only problem is, I found no reference to this in the EDDI raws, the "station" object doesn't query for this property, so I can't access it from whitin EDDI. If it did, it would be possible to get the list of stations of the target system when jumping and then match the ship's cargo against the list of illegal wares for each station in the system.
I might post about it in the main thread.



This is a topic for user created scripts for EDDI. You need to post this in the main thread: https://forums.frontier.co.uk/showthread.php/294579-EDDI-Windows-app-for-immersion-and-more
thanks for that
 
Okay I just saw this. What you can do in this situation is select the EDDI profile and then bring up the options for it. There should be an option "Include commands from another profile", where you can set your other profile and this will chain the profiles together so you can use commands from both.
That's exactly ho my profiles are setup. For example I have 9 of the HCS voicepacks and I have a prfile switcher which is another profile to manage them. I have a profile which is a variable manager and I have a profile for managing VLC. These are all linked as per your note, however this DOES NOT WORK with EDDI API calls. For example ((EDDI docking granted)) will not work unless the command is within the currently selected profile, it doesn't work in sub profiles.

I was wondering if this is expected behavior or if it is a bug ?

Thanks
 
That's exactly ho my profiles are setup. For example I have 9 of the HCS voicepacks and I have a prfile switcher which is another profile to manage them. I have a profile which is a variable manager and I have a profile for managing VLC. These are all linked as per your note, however this DOES NOT WORK with EDDI API calls. For example ((EDDI docking granted)) will not work unless the command is within the currently selected profile, it doesn't work in sub profiles.

I was wondering if this is expected behavior or if it is a bug ?

Thanks
I have no idea if this is a bug or expected behaviour; you should check on the VoiceAttack thread.

My suggestion was to put your HCS profile as a sub-profile of EDDI rather than the other way around, in which case it would work, but obviously that's not a lot of use to you if you have multiple independent HCS profiles.
 
Function Do like this station
Description to be called when docking granted or requested

{set vote to OneOf("system security matters", "alien policy", "military matters", "internal matters", "production", "quotas")}
{set person to OneOf("administrator", "general", "commodore", "station scientists", "doctor", "faction council")}
{set greet to OneOf("meet you on the landing pad old friend.","meet you in the pilot's bar comrade.")}
{set commander to F("Honorific")}

{OneOf(
" Incoming message from the station: It reads. Glad to have you back {commander}. we have prepared the landing pad for your arrival.",
" Incoming message from the station: It reads. Great to see you. I'll {greet}",
" Incoming message from the station: It reads. Your back. Please make your way to the council chambers for a vote on {vote} .",
" Incoming message from the station: It reads. The {person} wants to talk with you.",
" Incoming message from the station: It reads. You made it back. I've been waiting for you. I'll be in the usual place."
)}
 
Docking denied II

Thanks hoodothunk

Event - Docking Denied

{set happend to OneOf(
"We have been denied docking by the Station commander ",
"They won't let us in ",
"We are not allowed to dock ",
"Docking request denied ",
"I've got a bad feeling about this ",
"We must leave here ",
"We are not welcome here ",
"Turn the ship around"
)}

{Pause(2000)}

{happend},

{if event.reason = "ActiveFighter":
because our Fighter is still active.
|elif event.reason = "Distance":
because we are an Excessive distance from the station.
|elif event.reason = "Hostile":
because we are Currently hostile with the controlling faction.
|elif event.reason = "NoSpace":
because no Landing pads are available.
|elif event.reason = "Offences":
because we have a Pending offence with the station.
|elif event.reason = "TooLarge":
because our Ship is too large.
}
 
Galnet news published

I've refined the code for the 'Galnet news published' event to only read uncommon / interesting articles in full:

Code:
{set regexfilter to "^(?!(.*Weekly|Report.*)|(.*Powerplay|Update.*)|(.*Starport|Update.*)).*$"}


{if len(event.items) = 1:
    A new Galnet article has been published, entitled {event.items[0].title}.
    {if match(event.items[item].title, regexfilter):
         it reads 
         {Pause(1000)}
         {event.items[0].content}.
    }


|elif len(event.items) > 1:
    {len(event.items)} new Galnet articles have been published.  
    {set item to 0}
    {while item < len(event.items):


        {if item = 0:
          The first is entitled {event.items[item].title}, 
          {if match(event.items[item].title, regexfilter):
              and reads 
              {Pause(1000)}
              {event.items[item].content}.
          }


        |elif item = 1:
          The second is entitled {event.items[item].title}, 
          {if match(event.items[item].title, regexfilter):
              and reads 
              {Pause(1000)}
              {event.items[item].content}.
          }


        |elif item = len(event.items) - 1:
          The last is entitled {event.items[item].title}, 
          {if (match(event.items[item].title, regexfilter)):
              and reads 
              {Pause(1000)}
              {event.items[item].content}.
          }


        |else:
          The next is entitled {event.items[item].title},
          {if (match(event.items[item].title, regexfilter)):
              and reads 
              {Pause(1000)}
              {event.items[item].content}
          }


        }


        {set item to item + 1}
        {Pause(1000)}
    }.
}
EDIT: Fixed code for items 3 - end. Regex was inverted for those items.
 
Last edited:
A simple script I've added to the existing 'Docking denied' script...

Code:
{Pause(2000)}

{if event.reason = "ActiveFighter":
    Fighter is still active.
|elif event.reason = "Distance":
    Excessive distance from station.
|elif event.reason = "Hostile":
    Currently hostile with the controlling faction
|elif event.reason = "NoSpace":
    Landing pad not available.
|elif event.reason = "Offences":
    Pending offence with the station.
|elif event.reason = "TooLarge":
    Ship is too large.
}
Nice. I've done something similar with bounties and fines incurred.
Code:
{OneOf("Careful", "Watch yourself", "Caution", "Consider your actions", "")}
{OneOf("Commander", F("Honorific"), "")}.
{OneOf("{P(event.faction)} just put a bounty of {Humanise(event.bounty)} credits on")}
{OneOf("your head", "us")}

{if event.crimetype = "illegalCargo":
   {OneOf("for smuggling.", "for transporting illegal cargo.", "")}
|elif event.crimetype = "disobeyPolice":
   {OneOf("for disobeying police forces.", "for disobediance to police forces.", "")}
|elif event.crimetype = "fireInNoFireZone":
   {OneOf("for firing in a no fire zone.", "for discharging your weapons in a no fire zone.", "")}
|elif event.crimetype = "fireInStation":
   {OneOf("for firing within a station.", "for discharging your weapons within a station.", "")}
|elif event.crimetype = "dumpingDangerous":
   {OneOf("for jettisoning dangerous substances.", "")}
|elif event.crimetype = "dumpingNearStation":
   {OneOf("for jettisoning substances in close proximity to a station.", "")}
|elif event.crimetype = "dockingMinor_BlockingAirlock":
   {OneOf("for blocking the airlock.", "")}
|elif event.crimetype = "dockingMajor_BlockingAirlock":
   {OneOf("for blocking the airlock.", "")}
|elif event.crimetype = "dockingMinor_BlockingLandingPad":
   {OneOf("for blocking access to a landing pad.", "")}
|elif event.crimetype = "dockingMajor_BlockingLandingPad":
   {OneOf("for blocking access to a landing pad.", "")}
|elif event.crimetype = "dockingMinor_Trespass":
   {OneOf("for trespassing in an area where you are not authorized.", "")}
|elif event.crimetype = "dockingMajor_Trespass":
   {OneOf("for trespassing in an area where you are not authorized.", "")}
|elif event.crimetype = "collidedAtSpeedInNoFireZone":
   {OneOf("for colliding at high speed within the no fire zone.", "")}
|elif event.crimetype = "collidedAtSpeedInNoFireZone_HullDamage":
   {OneOf("for colliding at high speed within the no fire zone and causing hull damage.", "")}
|else: 
   {OneOf("for {event.crimetype}", "")}
}
Code:
You 
{OneOf("now owe", "have incurred a fine of", "have been assigned a fine of", "have received a citation for")}
{Humanise(event.fine)} credits, 
payable to {P(event.faction)}, 

{if event.crimetype = "illegalCargo":
   {OneOf("for smuggling.", "for transporting illegal cargo.", "")}
|elif event.crimetype = "disobeyPolice":
   {OneOf("for disobeying police forces.", "for disobediance to police forces.", "")}
|elif event.crimetype = "fireInNoFireZone":
   {OneOf("for firing in a no fire zone.", "for discharging your weapons in a no fire zone.", "")}
|elif event.crimetype = "fireInStation":
   {OneOf("for firing within a station.", "for discharging your weapons within a station.", "")}
|elif event.crimetype = "dumpingDangerous":
   {OneOf("for jettisoning dangerous substances.", "")}
|elif event.crimetype = "dumpingNearStation":
   {OneOf("for jettisoning substances in close proximity to a station.", "")}
|elif event.crimetype = "dockingMinor_BlockingAirlock":
   {OneOf("for blocking the airlock.", "")}
|elif event.crimetype = "dockingMajor_BlockingAirlock":
   {OneOf("for blocking the airlock.", "")}
|elif event.crimetype = "dockingMinor_BlockingLandingPad":
   {OneOf("for blocking access to a landing pad.", "")}
|elif event.crimetype = "dockingMajor_BlockingLandingPad":
   {OneOf("for blocking access to a landing pad.", "")}
|elif event.crimetype = "dockingMinor_Trespass":
   {OneOf("for trespassing in an area where you are not authorized.", "")}
|elif event.crimetype = "dockingMajor_Trespass":
   {OneOf("for trespassing in an area where you are not authorized.", "")}
|elif event.crimetype = "collidedAtSpeedInNoFireZone":
   {OneOf("for colliding at high speed within the no fire zone.", "")}
|elif event.crimetype = "collidedAtSpeedInNoFireZone_HullDamage":
   {OneOf("for colliding at high speed within the no fire zone and causing hull damage.", "")}
|else: 
   {OneOf("for {event.crimetype}", "")}
}
 
Last edited:
Top Bottom