Hi,Morning/afternoon all (dependent on your location/perception). I've been banging my head against a virtual brick wall trying to get VA to be able to detect my manually selected destination system (not a mission destination) and hoping I can get some help. I am building a script to pull up the navigation panel after jumping to the destination system. I am using @Darkcyde 's VA profile as a base.
I am running a simple test script to see if it is captured, but I just can't get the wording down.
Any help is greatly apppreciated
Well... s**tHi,
I'm glad you've found my profile to be a useful start for your own.
Looking at your attachment, I noticed that you are missing an 'e' off the end of 'state' in 'EDDI state routedetails_destination'. Hopefully that's what is causing your problem.
DC
Thank you.Well... s**t
Sadly, that's not it either. I tried about 20 different state variables over the past few days. I am assuming that they are all triggered by the Route Details event in EDDI, but that only appears to be mission based, not "oh look, a shiny spot in the cosmos routing" that I have been doing. Basically, for example, I manually set a route to one of the engineers, I am looking for the variable that stores Deciat/Khun/etc to do a textcompare against the current system. In my mind:
Begin text Compare: [CurrentSystem] Equals [DestinationSystem]
Open Navigation Panel
End Condition
I have a few other profiles (KICS, ASTRA) that I have tried out, but yours is far more fleshed out IMO, specifically the mission routing. So thanks for your work on that!!
Thank you.The missions routing was something started by myself and another commander a few years ago, using just the scripts themselves, and VA was used mainly to save routes between game sessions. It was eventually added into the EDDI program by the team, and has been considerably enhanced further by them since then. I just like to keep my own little embellishments in my profile scripts.
So, I think I see what you're after, if I'm understanding you correctly. However, if you manually set a destination in-game (by selecting a body from the left nav panel, or a system from the GalMap), there is no way for EDDI or VA to know that you have done so, and as such no variables can be set. The game just doesn't write this info to any files, so there is nothing for EDDI to read.
The RouteDetails() function can only create routes (and associated variables) for the following types:
Encoded, Facilitator, Guardian, Human, Manufactured, Raw, Expiring, Farthest, Most, Nearest, Next, Route, Scoop, Set, Source, Update
These are all known values (i.e. the nearest materials trader). So if you're looking to make a route to a trader, or a scoopable star, etc, this is possible, but if you want to make a route to a random star system, then I'm afraid you're out of luck.
I've toyed with the idea of being able to tell EDDI to set a route to a system that I name via speech in VA, but it's much more difficult than I had imagined to convert speech to a valid system name, and so I kinda shelved the idea.
It's been a while since I looked at using VA to set a destination. If you can get it to work, you could get VA to set a variable to a converted spoken system name, and then pass that to EDDI RouteDetails() using the 'set' route type. In the EDDI help for this function, it says you can use it like this:Gotcha,
Thanks for that. The nearest event that comes close is the Next Jump event, as it can give the number of jumps to the final destination, but the destination variable in that one is the next system in the manual route.
{RouteDetails("set", "Achenar", "Macmillan Terminal")}
Well... s**t
Sadly, that's not it either. I tried about 20 different state variables over the past few days. I am assuming that they are all triggered by the Route Details event in EDDI, but that only appears to be mission based, not "oh look, a shiny spot in the cosmos routing" that I have been doing. Basically, for example, I manually set a route to one of the engineers, I am looking for the variable that stores Deciat/Khun/etc to do a textcompare against the current system. In my mind:
Begin text Compare: [CurrentSystem] Equals [DestinationSystem]
Open Navigation Panel
End Condition
I have a few other profiles (KICS, ASTRA) that I have tried out, but yours is far more fleshed out IMO, specifically the mission routing. So thanks for your work on that!!
I don't believe this would be possible. EDDI only responds to events in the player journal, and also obtains information from the games API. There is no way for EDDI to tell when you are any distance, or time, away from a target as this isn't provided by either source.Hoping someone can assist me.
I was wondering if its at all possibke to write a script to give a warning when you are say, 12 seconds (as in actual time, not light seconds/distance) away from a target in super cruise.
I'm basically wanting a voice prompt to tell me that I need to begin slowing down when approaching a destination in supercruise before it gets to the 7 second mark.
I'm very new at this, but I'm usually competent (or persistent) but could use a point in the right direction.
Yeah I'm aware of the supercruise assist, it's too damn slow though lol.I don't believe this would be possible. EDDI only responds to events in the player journal, and also obtains information from the games API. There is no way for EDDI to tell when you are any distance, or time, away from a target as this isn't provided by either source.
That being said, there is an in-game module you can buy that can help in this situation. It's called the 'Supercruise Assist' and will help by automatically slowing you down. It's not as efficient as doing it yourself, but if you need a helping hand, it will work fine. It's pretty cheap too, at around 8.5K Cr depending on where you buy it from.
The event for that is 'Ship targetted', as this deals with ship scanning. Within that, it adds any wanted ships scanned, to a list, and then ignores them if scanned again. Without looking at it too in-depth, I'd say it's possible to change this so it will always say if the target is wanted, whether you've already scanned them or not.Also was hoping for a prompt for killwarrant scanners for targetting a ship that's already been kw scanned, and a voice prompt when the scan completes, but I don't believe there's any events for the KW scanner![]()
{set wanted_list to split(state.eddi_context_wanted_list, "+=")}
{if find(wanted_list, event.name) < 0:
{event.name} {OneOf("has a bounty", "is fair game", "is a legitimate target")}.
{if len(wanted_list) = 0: {set sep to ""} |else: {set sep to "+="}}
{set wanted_list to cat(wanted_list, [event.name])}
{SetState('eddi_context_wanted_list', join(wanted_list, sep))}
}
{event.name} {OneOf("has a bounty", "is fair game", "is a legitimate target")}.
{if len(wanted_list) = 0: {set sep to ""} |else: {set sep to "+="}}
{set wanted_list to cat(wanted_list, [event.name])}
{SetState('eddi_context_wanted_list', join(wanted_list, sep))}
I usually bind the KWS to a weapon where I can just hold down a trigger long enough to complete the scan (using engineering to modify the scanner for fast scanning) then just let it scan as I shoot. If a ship ends up being scanned more than once then that's fine with me. I hardly have to think about scanning while I'm engaged in combat.Also was hoping for a prompt for killwarrant scanners for targetting a ship that's already been kw scanned, and a voice prompt when the scan completes, but I don't believe there's any events for the KW scanner![]()
If you were to take this approach, I don't think there would be any value in appending the value to the list so you could shorten the entire script toThe event for that is 'Ship targetted', as this deals with ship scanning. Within that, it adds any wanted ships scanned, to a list, and then ignores them if scanned again. Without looking at it too in-depth, I'd say it's possible to change this so it will always say if the target is wanted, whether you've already scanned them or not.
I think if you change this code:
Code:{set wanted_list to split(state.eddi_context_wanted_list, "+=")} {if find(wanted_list, event.name) < 0: {event.name} {OneOf("has a bounty", "is fair game", "is a legitimate target")}. {if len(wanted_list) = 0: {set sep to ""} |else: {set sep to "+="}} {set wanted_list to cat(wanted_list, [event.name])} {SetState('eddi_context_wanted_list', join(wanted_list, sep))} }
to this:
(just removing the initial 'set' and 'find' code, plus the corresponding end } ) will most likely do what you want. I've not tried it, so I can't guarantee it, but I think it should work.Code:{event.name} {OneOf("has a bounty", "is fair game", "is a legitimate target")}. {if len(wanted_list) = 0: {set sep to ""} |else: {set sep to "+="}} {set wanted_list to cat(wanted_list, [event.name])} {SetState('eddi_context_wanted_list', join(wanted_list, sep))}
EDIT: Ah, I've just re-read you post, and I think my answer might actually be irrelevant after all. Still, it's worth a try, to see if it works.![]()
{_ Ship targeted }
{_ Triggered when the player selects a target }
{_ event Parameters: targetlocked - bool (ie false when losing target) _}
{_ If target locked: name (of ship), scanstage (ie 0, 1, 2, 3) _}
{_ If Scan stage >= 1: name (of pilot), rank (of pilot) _}
{_ If scan stage >= 2: shieldhealth, hullhealth (both 0-100) _}
{_ If scan stage >= 3: faction, power (if player is pledged to a power), _}
{_ legalstatus (ie clean, wanted, etc), bounty (if applicable), _}
{_ subsystem (ie FSD, power plant, etc), subsystemhealth (0-100) _}
{_ Context }
{SetState('eddi_context_last_subject', 'ship')}
{SetState('eddi_context_last_action', 'targeted')}
{if event.targetlocked && event.scanstage > 2 && !event.subsystem:
{set legalstatus to event.legalstatus}
{if legalstatus = "Wanted" || legalstatus = "Wanted Enemy" || legalstatus = "Warrant":
{event.name} {OneOf("has a bounty", "is fair game", "is a legitimate target")}.
}
}
It isn't implemented but you aren't the first to request something like that. See https://github.com/EDCD/EDDI/issues/197Does EDDI have an event for a keypress?
I dont use VA, but I wouldnt mind adding the EDDI Shutup scripts for when im doing things like repetitive trading. Would like to bind it to a keyboard input if at all possible?
{_ Fetch from Context, if a context is set _}
{if state.eddi_context_system_name:
{set reportSystem to SystemDetails(state.eddi_context_system_name)}
|else:
{set reportSystem to SystemDetails(system.systemname)}
}
{set unreportedHighValue to true} {_ Reports a list of notable planets that have been scanned but not mapped _}
{set reportUndiscovered to true} {_ Reports any potential first discovery bodies _}
{F("Bodies notable")} {_ Fetches options stored in Bodies notable script to determine good candidates _}
{if !reportSystem.name || reportSystem.name = "":
I'm not sure which system you are asking about.
|else:
{pause(1000)}
{set totalBodies to 0}
{set mappedBodies to 0}
{set notableBodies to 0}
{set undiscoveredBodies to 0}
{set toMapList to []}
{set scannedNotableBodies to 0}
{set mappedNotableBodies to 0}
{for body in reportSystem.bodies:
{set totalBodies to totalBodies + 1}
{if body.mapped:
{set mappedBodies to mappedBodies +1}
}
{if body.bodyType.invariantName != "Star":
{if reportPlanetTypes[body.planetClass.invariantName]:
{if !body.alreadydiscovered:
{set undiscoveredBodies to undiscoveredBodies +1}
}
{if !toMapList[body.shortname]:
{set toMapList to cat(toMapList, [body.shortname])}
}
{if body.scanned:
{set scannedNotableBodies to scannedNotableBodies +1}
}
{if body.mapped:
{set mappedNotableBodies to mappedNotableBodies +1}
}
|elif body.estimatedvalue > highValueThreshold:
{if !body.alreadydiscovered:
{set undiscoveredBodies to undiscoveredBodies +1}
}
{if !toMapList[body.shortname]:
{set toMapList to cat(toMapList, [body.shortname])}
}
{if body.scanned:
{set scannedNotableBodies to scannedNotableBodies +1}
}
{if body.mapped:
{set mappedNotableBodies to mappedNotableBodies +1}
}
|elif body.terraformState.invariantName = "Candidate for terraforming" || body.terraformState.invariantName = "Terraformed":
{if reportTerraformables:
{if !body.alreadydiscovered:
{set undiscoveredBodies to undiscoveredBodies +1}
}
{if !toMapList[body.shortname]:
{set toMapList to cat(toMapList, [body.shortname])}
}
{if body.scanned:
{set scannedNotableBodies to scannedNotableBodies +1}
}
{if body.mapped:
{set mappedNotableBodies to mappedNotableBodies +1}
}
}
}
}
}
}
{set notableBodies to len(toMapList)}
{_ Begin talking _}
Scan Complete:
{if notableBodies != scannedNotableBodies || notableBodies = 0:
{totalBodies} bodies {Occasionally(2, "have been")} {OneOf("detected", "identified", "scanned", "indexed")},
{if scannedNotableBodies < 1:
{if notableBodies = 1:
One of which is potentially {OneOf("notable", "of interest", "interesting", "of high value")}.
|elif notableBodies > 1:
{notableBodies} of {OneOf("which are", "which may be", "these are")} {OneOf("potentially notable bodies", "potentially interesting bodies", "potentially high value", "of potential interest")}.
}
|elif notableBodies > 0:
There
{if (notableBodies - scannedNotableBodies) = 1:
is
|else:
are
}
still {notableBodies - scannedNotableBodies} potentially {OneOf("notable", "interesting", "high value")} bodies to be {OneOf("scanned", "identified", "indexed")}.
}
|elif mappedNotableBodies != notableBodies:
{if notableBodies = 1: Body |else: Bodies}
{set cur to 0}
{while cur < notableBodies:
{P(toMapList[cur], "body")}
{set cur to cur + 1}
{if cur = notableBodies - 1: and
|elif cur < notableBodies - 1:,
}
}
{if notableBodies = 1: has
|else: have
}
not yet been detail surface scanned.
|else:
{OneOf("You have mapped all {if mappedBodies < totalBodies: {OneOf(\"notable\", \"interesting\", \"high value\", \"worthwhile\")}} bodies.",
"All {OneOf(\"notable\", \"interesting\", \"high value\", \"worthwhile\")} bodies {OneOf(\"have been mapped\", \"are now mapped\")}")}
}
{if reportUndiscovered && undiscoveredBodies > 0:
There are {undiscoveredBodies} undiscovered bodies in this system.
}
Mining hotspots aren't revealed until you actually send a probe into the ring. Hotspot data is also not available from the EDSM server.So, my first question, is all of these things actually possible? if not, which bits aren't?
And secondly, I am trying to figure out what scripts would relate to each of these? I am unsure on which scripts are triggered for each scan type, like I can see there's a discovery scan script, and a body mapped script (which I believe is the DSS?), but I cant see one for the FSS.
Body scanned
script. Depending on your selections, that script would then invoke either the Body report
script or the Body report summary
script (the latter being the default). I would suggest that you scoop out the Body report summary
script, copy in the Body report
script, and then trim the contents down to suit your wishes and make comparisons against your Bodies notable
criteria. The script already includes a section that describes rings.Body mapped
script ("Mapping complete"), which then invokes the Body report
script to provide a detailed description of the mapped body. The default behavior here sounds similar to what you are trying to accomplish so you likely won't need to modify either script very much.