Release EDDI Scripts and EDDI enabled VA Commands Thread

Really enjoying the faction gossip that EDDI provides when you jump into a system.
Thought i could use this to help targeting feedback in RES's.
Added these lines below to the default ship targeted script.
{if event.targetlocked && event.subsystem:
{set tsubsystem to event.subsystem}
{if tsubsystem = "Power Distributor" :
{OneOf(" Power Distributor sub system target locked")}.
{OneOf(" Target Power Distributor sub system ")}.
{event.subsystemhealth "percent"}.
{OneOf("percent")}.

}
{if tsubsystem = "Power Plant" :
{OneOf(" Power Plant sub system target locked")}.
}
{if tsubsystem = "FSD" :
{OneOf(" Frame Shift Drive sub system target locked")}.
}
{if tsubsystem = "Shield Generator" :
{OneOf(" Shield Generator sub system target locked")}.
}
{if tsubsystem = "Life Support" :
{OneOf(" Life Support sub system target locked")}.
}
{if tsubsystem = "Shield Booster" :
{OneOf(" Shield Booster sub system target locked")}.
}
{if tsubsystem = "Burst Laser" :
{OneOf(" Burst Laser sub system target locked")}.
}


}

The big question is, I prefer to target subsystems like power distributors all the time.
But have to bounce the Y key to get there. Does EDDI do autokey inputs to ED?
Not seem any info here so I expect not. I am wanting to make a Targeting computer, of sorts.
May be using voice attack to roll the targeting till the preferred module locks??

the basic logic would be

If wanted target is locked set targeting to preferred module
or
roll target sequence to a preferred set, like shield then power, then distributors....etc.

Any thoughts most welcome. Ps. would this be considered a cheat type of macro??
EDDI does not do this directly but it is certainly possible to do with VoiceAttack and I've attached an implementation which does this (originally authored by @Hoodathunk, I believe, who recently passed away 😢).

Small macros are generally considered to be ok, long macros that would allow you to walk away from the game are not. That said, please review the Terms of Use and other official statements if you'd like the official stance.
 

Attachments

  • Ship subsystem targeting-Profile.zip
    5.8 KB · Views: 326
Last edited:
EDDI does not do this directly but it is certainly possible to do with VoiceAttack and I've attached an implementation which does this (originally authored by @Hoodathunk, I believe, who recently passed away 😢).

Small macros are generally considered to be ok, long macros that would allow you to walk away from the game are not. That said, please review the Terms of Use and other official statements if you'd like the official stance.
Thanks, Sorry for the loss, condolences to the family.
It's good see that the ideas and spirit of the man can echo through the galaxy for ever.
 
Since most recent patch to ED I am getting multiple errors:

"Object reference not set to an instance of the object"

???
 
Since most recent patch to ED I am getting multiple errors:

"Object reference not set to an instance of the object"

???
Context? I know there's one issue that can be resolved by restarting EDDI (and that will be fixed in the next release) but that issue generally seems to occur only on the first run. Or if you deleted the config data in the %appdata%/EDDI folder.
 
Last edited:
EDDI is really awesome and I have tweaked it a lot to suit my needs.
I found out that there is a variable
Code:
alreadydiscovered
that I could use to tell me in the FSD engaged event if the target system has been discovered already (at least reported to EDSM).

I have tried some code
Code:
        {if reportsystem.alreadydiscovered:
            This system has already been discovered.
        |else:
            You are the first person to discover this system.
        }
but I'm not sure which object to get the alreadydiscovered variable from and if it's a boolean variable.

If I get this to work, I would like to add similar code to Next Jump when you target a system if possible.

Any help? Thanks :)
 
EDDI is really awesome and I have tweaked it a lot to suit my needs.
I found out that there is a variable
Code:
alreadydiscovered
that I could use to tell me in the FSD engaged event if the target system has been discovered already (at least reported to EDSM).

I have tried some code
Code:
        {if reportsystem.alreadydiscovered:
            This system has already been discovered.
        |else:
            You are the first person to discover this system.
        }
but I'm not sure which object to get the alreadydiscovered variable from and if it's a boolean variable.

If I get this to work, I would like to add similar code to Next Jump when you target a system if possible.

Any help? Thanks :)
Looking at the 'Variables' help page, it looks like 'alreadydiscovered' is for bodies only, it's not listed under star systems. Considering its context, I would assume it was a boolean, true or false, but I'm not in game to check at the moment.
 
EDDI is really awesome and I have tweaked it a lot to suit my needs.
I found out that there is a variable
Code:
alreadydiscovered
that I could use to tell me in the FSD engaged event if the target system has been discovered already (at least reported to EDSM).

I have tried some code
Code:
        {if reportsystem.alreadydiscovered:
            This system has already been discovered.
        |else:
            You are the first person to discover this system.
        }
but I'm not sure which object to get the alreadydiscovered variable from and if it's a boolean variable.

If I get this to work, I would like to add similar code to Next Jump when you target a system if possible.

Any help? Thanks :)
OK, I jumped in game to test some things out for you. First, yes it's a boolean, so set to true or false.

Second, try this code to get what you are after: reportsystem.bodies[0].alreadydiscovered. This uses the system data for the bodies, and returns the discovered status of the main star, which should also be the discovered status of the system.

Give it a go and let me know if it works. :)

EDIT: Oh, make sure to add your code after the line {set reportsystem to SystemDetails(event.system)} as this is where reportsystem is set. :)
 
Last edited:
OK, I jumped in game to test some things out for you. First, yes it's a boolean, so set to true or false.

Second, try this code to get what you are after: reportsystem.bodies[0].alreadydiscovered. This uses the system data for the bodies, and returns the discovered status of the main star, which should also be the discovered status of the system.

Give it a go and let me know if it works. :)

EDIT: Oh, make sure to add your code after the line {set reportsystem to SystemDetails(event.system)} as this is where reportsystem is set. :)
That's a clever approach but please allow me to add a bit of additional nuance.

The "alreadydiscovered" value is normally set to true when you scan a body and we learn from the player journal that the body is unknown to Universal Cartographics. In the case of EDSM data, however, the discoverer who reported the body to EDSM may have perished en route or may still be wandering the stars (in either case the discovery would remain unknown to Universal Cartographics). We do not assume a body known to EDSM is also known to Universal Cartographics so we do not set "alreadydiscovered" to true when we retrieve body data from EDSM.

TLDR: Since the default value for the boolean (false) remains until it is changed by a scan entry in your player journal, reportsystem.bodies[0].alreadydiscovered is best used after you have scanned the primary star.

We don't use your journal entries to begin filling in information about the bodies in a system until you jump in and begin scanning so if you are making a query before a jump (i.e. during a "Next jump" or "FSD engaged" event) for a system where system.visits = 0, and if len(system.bodies) > 0, then you can safely conclude that you're benefiting from the work of a prior discoverer via EDSM.
 
Last edited:
Thank you Darkcycle, I wasn't aware of how to use the objects in EDDI. It works now with

Code:
        {if reportsystem.bodies[0].alreadydiscovered:
            This system has already been discovered.
        |else:
            You are the first person to discover this system.
        }

For those looking for the same, I put it in the FSD engaged event where EDDI gives you facts about the destination system during hyperjumps. I put it just after the section where EDDI reports number of visits.

As T'kael notes, it will only report the EDSM data so the actual status might not be correct. Since I use EDSM's control panel to see if # systems discovered first increases, this is an improvement.

Next, I will try to implement it when you target a system, then you can plot a route around the already discovered systems during exploration.
 
Update:

Adding this to the end of the Next jump event will tell you if a target is reported as discovered.
Code:
{set reportsystem to SystemDetails(event.system)}
{if reportsystem.bodies[0].alreadydiscovered:
    Target system has already been discovered.
|else:
    Target system has not been discovered.
}
 
Update:

Adding this to the end of the Next jump event will tell you if a target is reported as discovered.
Code:
{set reportsystem to SystemDetails(event.system)}
{if reportsystem.bodies[0].alreadydiscovered:
    Target system has already been discovered.
|else:
    Target system has not been discovered.
}
@KayJayDK I think you may have misunderstood my comments. @Darkcyde's suggestion is valid after scanning the body but not before (since we don't learn whether a body has already been reported to Universal Cartographics until the scan event is completed).

We can still infer whether a system is known to EDSM during "FSD engaged" or "Next jump" with a script like:
Code:
{set reportsystem to SystemDetails(event.system)}
{if reportsystem.visits = 0 & reportsystem.population = 0:
    {if len(reportsystem.bodies) > 0:
        {_ The system contains body data fetched from EDSM }
        Target system has already been discovered.
    |else:
        {_ The system does not contain body data fetched from EDSM }
        Target system has not been discovered.
    }
}
 
Last edited:
Context? I know there's one issue that can be resolved by restarting EDDI (and that will be fixed in the next release) but that issue generally seems to occur only on the first run. Or if you deleted the config data in the %appdata%/EDDI folder.

Sorry for the delay getting back to this issue.

I was in my DBX collecting raw materials in the SRV.

The following were noted: "Object reference not set to an instance of the object" applies to all.

Recall ship - error on touchdown script
Jumping to another system - Error engaging FSD script
Refueling - fuel reports were not correct, either reporting very low or empty when tank was filled refueling after jump.
Dismmising the ship - "Object reference not set to an instance of the object"
Entering Supercruise - "Object reference not set to an instance of the object"
Error FSD Script
Dropping to normal space

Subsequently I thought maybe changing ships might resolve the problem so I've swapped out of the DBX and I am now using my Krait Phantom. In 2 sessions it appears that the errors have disappeared. I will update if they pop up again, and after I confirm resolution using the Phantom, I will swap back to the DBX to determine if it's an isolated problem with just that specific ship.

HTH - will update as I get more data.

EDIT: No joy. Errors returned after landing and using SRV at the next jump to another system. Fuel reports incorrect again as well.
 
Last edited:
Sorry for the delay getting back to this issue.

I was in my DBX collecting raw materials in the SRV.

The following were noted: "Object reference not set to an instance of the object" applies to all.

Recall ship - error on touchdown script
Jumping to another system - Error engaging FSD script
Refueling - fuel reports were not correct, either reporting very low or empty when tank was filled refueling after jump.
Dismmising the ship - "Object reference not set to an instance of the object"
Entering Supercruise - "Object reference not set to an instance of the object"
Error FSD Script
Dropping to normal space

Subsequently I thought maybe changing ships might resolve the problem so I've swapped out of the DBX and I am now using my Krait Phantom. In 2 sessions it appears that the errors have disappeared. I will update if they pop up again, and after I confirm resolution using the Phantom, I will swap back to the DBX to determine if it's an isolated problem with just that specific ship.

HTH - will update as I get more data.

EDIT: No joy. Errors returned after landing and using SRV at the next jump to another system. Fuel reports incorrect again as well.
Consistent with the ship definition issue that we've already identified previously. Should hopefully be fixed in the next release. In the meantime, if this occurs please give EDDI a restart.
 
So I am an absolute Dummy when it comes to writing even the simplest code, but I have a buch of Microsoft voices on my PC and wanted a bit of variety with EDDI. Is there some kind gentle-person out there who could add the code to say the following in a different voice. Is it a "top" and "Tail" code or just an opening bit of code? And how do I get it back to the default??

{Pause(2000)}

We have been denied docking

{if event.reason = "ActiveFighter":
because our fighter is deployed
|elif event.reason = "Distance":
because we are too far from the station
|elif event.reason = "Hostile":
because the station's controlling faction doesn't like us
|elif event.reason = "NoSpace":
because there is no space available
|elif event.reason = "Offences":
because we have recently committed an offence against them
|elif event.reason = "TooLarge":
because there are no landing pads that can accomodate the size of our ship
{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.
}}.

I chose this code because it has many variables in it, I only want the one voice. I thought if I had an example I could edit a few more for myself. Ha Ha. Thanks in advance.
 
In my "Message received" scrip I have this if the message comme from a npc

Code:
 {Transmit(Voice(cat("ici ", event.from, ": ", event.message), OneOf("Microsoft Hortense Desktop", "Microsoft Caroline", "Microsoft Claude", "Microsoft Nathalie(Canada)", "Microsoft Guillaume", "Microsoft Hortense", "Microsoft Julie", "Microsoft Paul")))}
Transmit is to have a distortion sound effect like if receive by radio.
Voice is the function to choose a different voice than the regular one and the OneOf is to take a random voice in all french and canadian french voices I have

In your case for exemple for the "TooLarge" event you can write
Code:
 {Transmit(Voice("Ship is too large." , OneOf( all of your voices you want to use like : "voice1", "voice2", ....)))}
 
Attention T'kael,
Alright. This is a good fit for https://forums.frontier.co.uk/threads/eddi-scripts-and-eddi-enabled-va-commands-thread.311614/ to let's take the conversation there.
1. I'd like to know exactly what you'd like said when you dock at your own fleet carrier.
2. I'd like to know the marketId for your fleet carrier. If you dock at your carrier, the value will be written to event.marketId during the "Docked" event. You can extract it by placing {Log(cat("My market ID is: ", event.marketId))} at the beginning or end of your "Docked" script, docking at your fleet carrier, and then reviewing (or pm'ing me to review) the most recent log written to %appdata%/EDDI/eddi.log on your system.

How do I send you a copy of the log?. I tried to send you a copy of the log for the last day or two in a pm but came up against the 420 character block and I can't see how to send the files themselves from the pm headers
 
In my "Message received" scrip I have this if the message comme from a npc

Code:
 {Transmit(Voice(cat("ici ", event.from, ": ", event.message), OneOf("Microsoft Hortense Desktop", "Microsoft Caroline", "Microsoft Claude", "Microsoft Nathalie(Canada)", "Microsoft Guillaume", "Microsoft Hortense", "Microsoft Julie", "Microsoft Paul")))}
Transmit is to have a distortion sound effect like if receive by radio.
Voice is the function to choose a different voice than the regular one and the OneOf is to take a random voice in all french and canadian french voices I have

In your case for exemple for the "TooLarge" event you can write
Code:
 {Transmit(Voice("Ship is too large." , OneOf( all of your voices you want to use like : "voice1", "voice2", ....)))}
@Wozzlebatneo , you could also do something like this:
Code:
{Pause(2000)}

{set response to:
    We have been denied docking
    {if event.reason = "ActiveFighter":
         because our fighter is deployed
    |elif event.reason = "Distance":
        because we are too far from the station
    |elif event.reason = "Hostile":
        because the station's controlling faction doesn't like us
    |elif event.reason = "NoSpace":
        because there is no space available
    |elif event.reason = "Offences":
        because we have recently committed an offence against them
    |elif event.reason = "TooLarge":
        because there are no landing pads that can accomodate the size of our ship
    }.
}

{for voice in VoiceDetails(): {set voiceCount to voiceCount + 1} }
{set randomVoice to VoiceDetails()[rand(0, voiceCount)].name}
{Transmit(Voice(response , randomVoice))}
Everything that should be spoken is added to the "response" variable, then we randomly select a voice from all available voices and pipe it all through the Transmit() function.

If you later decide that you'd like to return the script to the default, there is a handy "Reset to Default" button at the bottom center of the "Edit script" window.
 
@Wozzlebatneo , you could also do something like this:
Code:
{Pause(2000)}

{set response to:
    We have been denied docking
    {if event.reason = "ActiveFighter":
         because our fighter is deployed
    |elif event.reason = "Distance":
        because we are too far from the station
    |elif event.reason = "Hostile":
        because the station's controlling faction doesn't like us
    |elif event.reason = "NoSpace":
        because there is no space available
    |elif event.reason = "Offences":
        because we have recently committed an offence against them
    |elif event.reason = "TooLarge":
        because there are no landing pads that can accomodate the size of our ship
    }.
}

{for voice in VoiceDetails(): {set voiceCount to voiceCount + 1} }
{set randomVoice to VoiceDetails()[rand(0, voiceCount)].name}
{Transmit(Voice(response , randomVoice))}
Everything that should be spoken is added to the "response" variable, then we randomly select a voice from all available voices and pipe it all through the Transmit() function.

If you later decide that you'd like to return the script to the default, there is a handy "Reset to Default" button at the bottom center of the "Edit script" window.
Thank you very much, I will try it out. Appreciate you kindness and understanding.
WOZZ
 
In my "Message received" scrip I have this if the message comme from a npc

Code:
 {Transmit(Voice(cat("ici ", event.from, ": ", event.message), OneOf("Microsoft Hortense Desktop", "Microsoft Caroline", "Microsoft Claude", "Microsoft Nathalie(Canada)", "Microsoft Guillaume", "Microsoft Hortense", "Microsoft Julie", "Microsoft Paul")))}
Transmit is to have a distortion sound effect like if receive by radio.
Voice is the function to choose a different voice than the regular one and the OneOf is to take a random voice in all french and canadian french voices I have

In your case for exemple for the "TooLarge" event you can write
Code:
 {Transmit(Voice("Ship is too large." , OneOf( all of your voices you want to use like : "voice1", "voice2", ....)))}
Cool, that looks good to me. I will play around with the suggestions and report back. Thanks for your help.
WOZZ
 
Top Bottom