Release EDDI 3.3 - Bring your cockpit to life

Wow, thank you guys! You gave me all the solutions I've been looking for :D

Will try everything out at the weekend!

P.S.: @nepomuk: your English is completely fine, aber ich glaube, zur Not können wir uns auch auf Deutsch unterhalten, falls ich mich recht erinnere und aus irgendeinem Post mal hervorging, dass Du dort irgendwo heimisch bist :D

;) da hast Du vollkommen recht ! Ich wohne in der Nähe von Berlin.
Na dann kennst Du ja sicherlich auch das deutsche Elite-Forum. Wir haben dort auch eine Ecke für EDDI.
Wenn Du Lust hast, schau' doch einfach mal vorbei. :cool:
 
Thanks @Darkcyde.
Note: scannedStars is a subset of reportSystem.scannedbodies (both stars and bodies are included in that count). ;-)
Ahh, of course it does. 🤦‍♂️ I use the count of only stars in my script for some specific speech, and automatically just went with it here too. Thanks for the reminder. 🙂

@Belandriel you can use the below as a shorter version that behaves the same as the script I posted above...
Code:
{_ Fetch from context _}
{set reportSystem to SystemDetails(state.eddi_context_system_name)}

{_ Initialise variables _}
{set totalBodies to reportSystem.totalbodies}
{set scannedBodies to reportSystem.scannedbodies}
{set prescannedBodies to len(reportSystem.bodies)}

{_ Start Speaking _}
{if scannedBodies >= prescannedBodies || (scannedBodies = totalBodies && totalBodies > 0):
    Yes
|elif scannedBodies > 0:
    Partially
|else:
    No
}
 
Ahh, of course it does. 🤦‍♂️ I use the count of only stars in my script for some specific speech, and automatically just went with it here too. Thanks for the reminder. 🙂

@Belandriel you can use the below as a shorter version that behaves the same as the script I posted above...
Code:
{_ Fetch from context _}
{set reportSystem to SystemDetails(state.eddi_context_system_name)}

{_ Initialise variables _}
{set totalBodies to reportSystem.totalbodies}
{set scannedBodies to reportSystem.scannedbodies}
{set prescannedBodies to len(reportSystem.bodies)}

{_ Start Speaking _}
{if scannedBodies >= prescannedBodies || (scannedBodies = totalBodies && totalBodies > 0):
    Yes
|elif scannedBodies > 0:
    Partially
|else:
    No
}
Awesome :D Will try it out after work... can't wait :DDD
 
(just asking for a "simple and fast" answer, and a pointer to a source file for the hard details)

Could it be possible to obtain the same (invoke a script) by sending Windows custom messages (events?) to the EDDI.exe process/window?
Or to write a simple "host" to use EDDI as a plugin so to have keystrokes or screen buttons to fire EDDI events? (sort of that tiny hosts that runs VST plugins instead of loading a full DAW)
...cough... :)
 
...cough... :)
😆

Hmm, thinking about it, I had a custom transparent overlay I made for The Division, about five years ago. I made it in Rainmeter, so it was quick and simple. I'm wondering if it could be adapted and enhanced to provide the functionality you're looking for. :unsure:
1639151923476.png


Rainmeter can easily make buttons to click. I guess they could be made to trigger VA commands, which in turn, trigger the specified EDDI scripts. Something like:
Click overlay button -> Rainmeter activates a key -> Key activates VA command -> VA runs EDDI script.

Going this route, you could make whatever buttons you want, to do whatever you want. It's been a while since I've done any Rainmeter scripting though, so I'd have to get back into it, but I think this would work perfectly for you. :) The downside to it would be that you need Rainemeter installed, but it's very small and doesn't take up much resources (unless you're like me and have a ton of Rainmeter 'skins' all over your desktop like below... 😂)
All the stuff at the top and bottom, are many different 'skins'. All animated, providing data on my PC. And this is only screen 1 of 2. 😆
Untitled.jpg

EDIT: Ahh, @T'kael replied while I was writing this! 🤦‍♂️

EDIT 2: Looking into this, it is very possible to achieve, but would also need another utility to enable keypresses to be sent to VA. The Rainmeter forums recommend NirCmd.
 
Last edited:
Rainmaker! It's a lot that i don't tamper with it :) (basically, from when my son, as an adult, ceased to need me for his own PC :D )
That's very interesting: I'd be more towards keypresses than icons to click but i see that when you start building a thing, why not get it "complete" ;)

So, is'nt VA looking for "global" (out of his own window) keypresses?

VA runs EDDI script
Do you know what "mechanism" uses VA to do this? by function(s) calls exposed by EDDI as a plugin? via WM_USER messages sent to EDDI queue? A file that EDDI watchs like it does for the game journal?
I tried to seach in the EDDI sources to get some clue but i don't know what and where to look...
 
Rainmaker! It's a lot that i don't tamper with it :) (basically, from when my son, as an adult, ceased to need me for his own PC :D )
That's very interesting: I'd be more towards keypresses than icons to click but i see that when you start building a thing, why not get it "complete" ;)

So, is'nt VA looking for "global" (out of his own window) keypresses?


Do you know what "mechanism" uses VA to do this? by function(s) calls exposed by EDDI as a plugin? via WM_USER messages sent to EDDI queue? A file that EDDI watchs like it does for the game journal?
I tried to seach in the EDDI sources to get some clue but i don't know what and where to look...
What do you want to do ? VA is to trigger EDDI scripts. Is that correct ? This works via the plugin function. With "say" you can have the EDDI voice say a sentence formulated in VA, with "speech" you can have EDDI scripts announced.

 
Rainmaker! It's a lot that i don't tamper with it :) (basically, from when my son, as an adult, ceased to need me for his own PC :D )
That's very interesting: I'd be more towards keypresses than icons to click but i see that when you start building a thing, why not get it "complete" ;)

So, is'nt VA looking for "global" (out of his own window) keypresses?


Do you know what "mechanism" uses VA to do this? by function(s) calls exposed by EDDI as a plugin? via WM_USER messages sent to EDDI queue? A file that EDDI watchs like it does for the game journal?
I tried to seach in the EDDI sources to get some clue but i don't know what and where to look...
Hmm, then I am a little confused as to what it is that you are looking for. I was working on the idea that, first, you wanted an overlay onscreen that you could click buttons to activate scripts (useful if you only have one monitor on your PC). However, if you only want to press keys to active them, then VA will do that just fine by itself, although you could still use a Rainmeter overlay to remind you which keys to press to active which scripts.

As for how VA sends things to EDDI, that would be something that @T'kael or @VerticalBlank would have to answer. If I had to guess, then I think it is one of two options. First, it could be that the EDDI plugin for VA loads the EDDI .exe and acts as an interface between VA and EDDI (but I wouldn't know how they talk to each other). Or, second, the EDDI plugin is a copy of EDDI itself and works natively 'inside' VA (and so they don't need to talk to each other, as EDDI is then a part of VA). But I'm only guessing here, and things could be very different in reality. 🤷‍♂️
 
Yup, i was wondering if i could write a small (= short developing time) client program that triggers EDDI scripts like VA does. If it could be done, then i could use the keyboard of a small laptop i have on the side of my "main" PC to "control" EDDI sending keystrokes via ethernet to that "client".

Just a programmer wondering programmer's stuffs :D
 
Yup, i was wondering if i could write a small (= short developing time) client program that triggers EDDI scripts like VA does. If it could be done, then i could use the keyboard of a small laptop i have on the side of my "main" PC to "control" EDDI sending keystrokes via ethernet to that "client".

Just a programmer wondering programmer's stuffs :D
Ahh, I see now. :) Well, a quick Google and I've come up with this that someone made some time ago: https://code.google.com/archive/p/netkeys/

If you want other options, then all I did was to Google "send keypresses across network" and there seem to be quite a few different solutions. Many of them will do what you require, and then VA on your main PC can pick them up from your laptop. :)
 
Yup, i was wondering if i could write a small (= short developing time) client program that triggers EDDI scripts like VA does. If it could be done, then i could use the keyboard of a small laptop i have on the side of my "main" PC to "control" EDDI sending keystrokes via ethernet to that "client".

Just a programmer wondering programmer's stuffs :D
OK, you want to use your small laptop, otherwise you could also take a small extra keyboard (USB) supported by Windows.
Or maybe the tool "Touch Portal" and the laptop would be an alternative. In the German forum there is a separate thread about it.
 
Yup, i was wondering if i could write a small (= short developing time) client program that triggers EDDI scripts like VA does. If it could be done, then i could use the keyboard of a small laptop i have on the side of my "main" PC to "control" EDDI sending keystrokes via ethernet to that "client".

Just a programmer wondering programmer's stuffs :D
EDDI connects to VoiceAttack by using a .dll file that conforms to VoiceAttack's plugin architecture (documented within the VoiceAttack Help document, starting at about page 187). If you were to spoof the essential elements of that interface then I see no reason that you couldn't get EDDI to run happily inside of your host application. Hope that helps. ;)
 
Ahh, of course it does. 🤦‍♂️ I use the count of only stars in my script for some specific speech, and automatically just went with it here too. Thanks for the reminder. 🙂

@Belandriel you can use the below as a shorter version that behaves the same as the script I posted above...
Code:
{_ Fetch from context _}
{set reportSystem to SystemDetails(state.eddi_context_system_name)}

{_ Initialise variables _}
{set totalBodies to reportSystem.totalbodies}
{set scannedBodies to reportSystem.scannedbodies}
{set prescannedBodies to len(reportSystem.bodies)}

{_ Start Speaking _}
{if scannedBodies >= prescannedBodies || (scannedBodies = totalBodies && totalBodies > 0):
    Yes
|elif scannedBodies > 0:
    Partially
|else:
    No
}
Hm.... I had some scanned systems, but EDDI said "no"
 
Hm.... I had some scanned systems, but EDDI said "no"
Hmm, well, this does work, so there must be something else causing your problem... :unsure:

Were they systems you scanned before you started to use EDDI? Or were they scanned when EDDI was not running?

For this to work properly, EDDI (or any other tool that reports to EDSM) must have been running when you scanned the system (and the EDSM plugin must be enabled). If you scanned them before you started using EDDI, or EDDI wasn't running at the time, then this would result in EDDI not knowing that you had scanned them, and so would result in 'no' being said.

If this is the case, once a system has been scanned in game, the only way to make EDDI aware of it, is to scan a nav beacon if there is one. This will behave like a fresh scan of the system, but nav beacons are only in populated systems. If the system has no nav beacon, then I think you're out of luck. Otherwise I don't think there is any other way to let EDDI know that you have already scanned a system.

Going through the code, the first line checks to see if the number of bodies you have scanned (scannedBodies) is equal or higher than the number of bodies reported from EDSM (prescannedBodies), or the number reported after a 'honk' (totalBodies). If not, then it checks to see how many bodies that EDDI knows you have scanned (scannedBodies > 0). If EDDI knows about any bodies you have scanned, then either 'yes' or 'partial' would get spoken. The only time 'no' should be spoken is when EDDI thinks you have not scanned anything in that system.

Try a nav beacon scan, if those systems have them. See if that helps.

-------------------------------------------------------------
Not that this will help in your situation right now, but I have updated the first check line to:
{if scannedBodies >= max(prescannedBodies, totalBodies):
This will automatically choose the highest of prescannedBodies or totalBodies, and test scannedBodies against the one that is higher. This is more efficient than the previous code. :)
 
Ahh, it's almost Christmas, so have a Christmas gift from me... a new version of my EDDI personality. ;) I've made a lot of updates since my last version three months ago, so be sure to check out the change log! 😁

Seems my last version was downloaded 95 times (or at least viewed that many times). I never realised that so many would like it... well, interested enough to take a look at it anyway. ;) Thanks everyone! 😊

As always, let me know if you find any bugs, or anything wrong. 👍

Download here.
 
How can I avoid EDDI to call me by my federal rank when I enter a federal system to fight them?

I deeply love EDDI and can't be without her anymore. But I am an imperial citizen and this greeting makes me to want to push EDDI out of the airlock.
 
How can I avoid EDDI to call me by my federal rank when I enter a federal system to fight them?

I deeply love EDDI and can't be without her anymore. But I am an imperial citizen and this greeting makes me to want to push EDDI out of the airlock.
Hallo @CMDR Darth Vater , warum stellst Du die Frage nicht im deutschen Forum ? Spielst Du auf Englisch ?
Das Skript "Honorific" beinhaltet die Ansage. Du kannst das Skript nicht einfach abstellen (Kästchen und Haken).
Du musst den Aufruf unterdrücken. Das Skript wird so {F("Honorific")} aufgerufen z.B. im Skript "FSD engaged"
und Du kannst den Aufruf so {_ F("Honorific") _} unterdrücken. Oder Du editierst das Skript "Honorific"
nach deinen Wünschen.
 
Hallo @CMDR Darth Vater , warum stellst Du die Frage nicht im deutschen Forum ? Spielst Du auf Englisch ?
Das Skript "Honorific" beinhaltet die Ansage. Du kannst das Skript nicht einfach abstellen (Kästchen und Haken).
Du musst den Aufruf unterdrücken. Das Skript wird so {F("Honorific")} aufgerufen z.B. im Skript "FSD engaged"
und Du kannst den Aufruf so {_ F("Honorific") _} unterdrücken. Oder Du editierst das Skript "Honorific"
nach deinen Wünschen.
ich spiele tatsächlich auf englisch. Dann muss ich das Skript anpassen. Imperial passt ja, aber sobald in den föderalen Raum sollte sowas kommen wie "Attention, you're entering hostile space".
 
ich spiele tatsächlich auf englisch. Dann muss ich das Skript anpassen. Imperial passt ja, aber sobald in den föderalen Raum sollte sowas kommen wie "Attention, you're entering hostile space".
Nutzt Du den Originalen EDDI-Charakter oder nimmst Du vielleicht den von @Darkcyde ?
Ist aber wahrscheinlich egal, ich denke, @Darkcyde wird sich bald melden. Deine Idee lässt sich bestimmt umsetzen.
 
Back
Top Bottom