From ddc5bd9bcbcd56c02f25079aba4b5cdce2f923f9 Mon Sep 17 00:00:00 2001 From: alterNERDtive Date: Mon, 25 Jan 2021 12:04:28 +0100 Subject: [PATCH] =?UTF-8?q?MOAR=20DOCS=20(we=E2=80=99re=20getting=20there?= =?UTF-8?q?=20:D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 9 +- docs/configuration/EliteAttack.md | 499 ++-------------------- docs/configuration/RatAttack.md | 311 +++----------- docs/configuration/SpanshAttack.md | 267 ++---------- docs/configuration/StreamAttack.md | 122 +----- docs/configuration/general.md | 16 +- docs/general.md | 41 +- docs/images/SpanshAttack-getshiprange.png | Bin 0 -> 41742 bytes docs/index.md | 4 + docs/upgrading.md | 26 +- mkdocs.yml | 2 +- plugins/VoiceAttack-base/util.cs | 23 +- 12 files changed, 239 insertions(+), 1081 deletions(-) create mode 100644 docs/images/SpanshAttack-getshiprange.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 97c8125..018e5ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,7 +24,7 @@ able to invoke that plugin. [You can safely ignore that](https://github.com/alte ### Added -* `alterNERDtive-base` plugin. FIXXME +* `alterNERDtive-base` plugin. Provides functionality common to all profiles. * Proper logging to the VoiceAttack log. You will notice a lot of useful information, more is available if you change the log level configuration option. Logging to a file for troubleshooting will be added at a later date. @@ -64,7 +64,7 @@ profile will keep the old name. Feel free to manually rename it. ### Added -* `EliteAttack` plugin. FIXXME +* `EliteAttack` plugin. Doesn’t do a lot yet. * `where is my landing pad` command: Will use EDDI to tell you about the landing pad location on star ports in relation to the mail slot. @@ -82,7 +82,10 @@ profile will keep the old name. Feel free to manually rename it. ### Added -* `RatAttack` plugin. FIXXME +* `RatAttack` plugin. Responsible for handling case data instead of having a way + too long and convoluted list of VoiceAttack variables. Also provides a way to + send RATSIGNALs to VoiceAttack via IPC. +* `RatAttack-cli.exe` helper tool. Used to send RATSIGNALs to the plugin via IPC. * Will now announce permit locks, including the name of the permit if available. * Now supports manually injected cases that might not provide a system. You will still have to manually copy the system from \#fuelrats or the dispatch board diff --git a/docs/configuration/EliteAttack.md b/docs/configuration/EliteAttack.md index 842e0c9..315e8ff 100644 --- a/docs/configuration/EliteAttack.md +++ b/docs/configuration/EliteAttack.md @@ -1,465 +1,34 @@ -# EliteAttack # - -This is my personal VoiceAttack profile for Elite: Dangerous. It started out -ages ago as a modification of [MalicVR’s public -profile](https://forums.frontier.co.uk/threads/malics-voice-attack-profile-for-vr.351050/), -then looked less and less and less like that and I added and cleaned up a lot of -things while removing the stuff I didn’t use anyway. By now it would have -probably been simpler to start from scratch. - -Some of it has grown to a state that it might be useful to others in its own -package, so I’ve separated the neutron jumping and Seals stuff into their own -profiles. - -The rest is a random conglomerate of all things VA and E:D; from various voice -commands to lots of EDDI event handlers. - -Speaking of EDDI; it has become in integral part of my Elite experience, -especially the plethora of information it extracts from the game’s journal and -presents to you via lots and lots of status variables and by firing various -events that can then be handled through VA commands. It’s great. Check it out. -(You might want to make it talk a lot less in it’s personality options, or -disable the speech responder entirely like I have.) - -## Requirements ## - -In addition to the bindED and EDDI VoiceAttack plugins, this profiles needs my -[Python elite-scripts](https://github.com/alterNERDtive/elite-scripts) to do -everything properly. The release page here includes a compiled version for -Windows that does not need Python installed. If you use the profile package from -the release page, they will be installed automatically. - -## Settings ## - -Because Elite’s keyboard handling is … weird you’ll have to set the key to use -for pasting text into Elite:Dangerous. If you are not using a “standard” -QWERT[YZ] layout, you will have to change it back to the key that is physically -in the place where `v` would be on QWERTY. - -For other settings, see the [Configuration Variables](#Configuration-Variables) -section. - -## Including the Profile In Another Profile ## - -This is meant to be a standalone profile, including the others in this repo (and -a couple more). It was never designed to be included into your existing profile. -Nevertheless, it _should_ work properly if you follow some guide lines: - -* Run the startup command. You will need to have a startup command in your - profile (= one that is run on profile loading) and call - `EliteDangerous.startup` by name from that one. -* Make sure all EDDI events that EliteDangerous needs are correctly handled. For - all events used in EliteDangerous that you already have handlers for in your - profile, you’ll have to include a call to `EliteDangerous.`. E.g. - for “EDDI Jumped”, call `EliteDangerous.EDDI Jumped` by name from your `((EDDI - Jumped))` command. - -## Usage ## - -### Chat Commands ### - -There’s a bunch of commands in here to send certain things to chat. Unless -stated otherwise, they will only work with the comms panel active, and you -should be in the edit window ready to send. They will _not_ hit Enter on their -own. - -* `clear [chat;text]`: Clears the chat window. Use from outside the comms panel. -* `[local;squad;system;wing] chat`: Puts you into the chosen chat channel. -* `paste text`: Pastes your clipboard into Elite. Works outside the comms panel - too, e.g. on the galaxy map inside the search field. -* `salute; oh seven`: Will put “o7” into the chat. - -### Engineering/Materials ### - -* `how many [] do i have`: Tells you how many of - the given g5 manufactured material you currently have on board. I’ve - restricted it to just those to not spam speech recognition with too many - phrases, and because those are the ones I usually want to know while jumping - around the bubble and having an eye on any HGE that might be around. -* `open e d engineer`: Opens the ED Engineer tool. -* `what [mats;materials] do i need?`: Runs the EDDI responder that tells you - which materials are below wanted threshold. Needs setting those first. Gets - very spammy if you do it for all of them; personally I only set them for g5 - manufactured, so I can quickly check if it’s worth looking for HGE in a system - I’m in. - -### Events ### - -The main point of this profile is to react to Elite’s journal events (powered by -EDDI). Each of the events listed here will trigger a `((EDDI ))` command -in VoiceAttack which in turn triggers `EliteDangerous.EDDI ` and all -included profiles’ similar commands, e.g. `SpanshAttack.EDDI `. - -The actual `((EDDI ))` command will only be executed once by VoiceAttack, -the first one it can find. Keeping it separate from the actual code to be run -makes it easier to handle (multiple) included profiles. - -If the command for an event will send key presses to Elite, it focuses the -client window first to make sure they get registered properly. If it is not in -focus, the first key press might be swallowed otherwise. - -For other commands, the profile just assumes that you are actively doing -something in game and it is already focused :) - -#### Body Mapped #### - -Announces an estimate for high-value bodies’ payouts and the remaining mapping -candidates in the system as given by EDDI. - -#### Body scanned #### - -Announces any interesting body traits found when scanning: - -* terraformable -* Earth-like World, Ammonia World or Water World -* landable and >5 g -* semimajor axis <1.5 ls (only really interesting for planets, but there’s no - proper way to separate them from moons, sadly) -* radius <300 km - -Feel free to suggest more! - -#### Carrier Cooldown #### - -Tells you when your carrier is able to do its next jump. Technically only works -if you were docked at it when it performed the jump, but I’m doing some -behind-the-scenes magic if you weren’t :) - -Might be slightly off (too early) in the latter case. - -#### Carrier Jumped #### - -Announces system and body your carrier has just jumped to. - -#### Carrier Jump Engaged #### - -This event fires when your carrier jumps but you are _not_ docked at it. It -provides way less information than the `Carrier Jumped` event, but hey, I don’t -use most of it anyway. - -Basically just calls `Carrier Jumped` (and makes sure that a `Carrier cooldown` -event is triggered manually at approximately the right time). - -#### Carrier Jump Request #### - -Announces the system and body your carrier has just been scheduled to jump to. -Use this to double check ingame information; I’ve had my carrier accept a body -as jump target, but then end up around the star. This _might_ give you a heads -up on that. - -#### Carrier Pads Locked #### - -Announces your carriers lockdown procedures. This _might_ only work when you are -docked (which would make it pretty useless). Feel free to open in issue if -that’s the case. - -#### Discovery Scan #### - -Announces the number of bodies (and non-body signals) found in the system. Also -compares the number of bodies to the amount reported by EDSM (requires Python -scripts). - -#### Docked #### - -Automatically gets your ship into the hangar and opens station services. - -#### Docking Denied #### - -Tells you the reason for docking denial. - -#### Entered Normal Space #### - -Throttles to 0 upon dropping from SC, if `EliteDangerous.hyperSpaceDethrottle` is set. - -#### Fighter Launched #### - -Orders your ship to hold position so it doesn’t chase after you immediately. - -#### Jet Cone Boost #### - -Sets your ship to full throttle immediately after you have supercharged. - -#### Jumped #### - -* zeroes throttle -* gets the system’s body count from EDSM (requires Python scripts) -* gets stations with outdated data (older than 1 year) from Spansh’s API -* if you haven’t visited the systems, starts a discovery scan (see the discovery - scan command) -* last but not least tells you about planets worth scanning if you are on the - R2R - -#### Liftoff #### - -Retracts landing gear for you. Seriously, is there any occasion in which you -_don’t_ immediately want to retract it after takeoff? - -#### Low Fuel #### - -Warns you when you reach 25% fuel. Also reports number of jumps you have left or -the (rough) range you still have on the fumes left in your tank. - -#### Material Threshold #### - -Warns you when a monitored material falls below it’s minimum stock level. You -will have to set a minimum desired amount in EDDI’s material monitor options -first for all materials you wish to be monitored. - -#### Message Sent #### - -Checks any message you send for a chat prefix and sends it to the proper chat -window. Probably largely useless to you without modification. - -* `.nc`: Actually doesn’t send anything, but runs the - `RatAttack.announceNearestCMDR` command with the system given in the rest of - the message. -* `.dc`: Sends the message to the Discord window. -* `.tc`: Sends the message to my twitch channel window (IRC #alternerdtive). - -There are similar event commands in RatAttack and SealAttack handling other chat -windows. - -#### Ship FSD #### - -This event actually is several different events in one. Currently the following -are handled: - -* charging: Warns you if your target system’s main star is not scoopable, - including an extra warning at low fuel levels. (__Note__: This only works if - the target system is in EDSM. So it’s kind of useless for its intended use - (exploration) and probably going to be removed at some point.) -* cooldown complete: Announces FSD cooldown if you are currently in normal - space. - -#### Ship interdicted #### - -Tells you when you have been interdicted by a player. Is also supposed to target -the interdictor automatically, but randomly sometimes just doesn’t work. Yay! - -#### Ship targeted #### - -This currently doesn’t do anything. I was fiddling around with automatically -targeting a certain module on ship targeting, but it was more hassle than I had -thought. - -#### SRV Launched #### - -Toggles SRV lights off after launching. Might not work if you drop particularly -far after deployment because it works off a timer. Conversely might take -a second to turn your lights off on a short drop and/or in high gravity. - -#### System Scan Complete #### - -Lists you all bodies EDDI considers worth mapping in the current system. - -#### Undocked #### - -Retracts landing gear for you. Seriously, is there any occasion in which you -_don’t_ immediately want to retract it after takeoff? - -#### VA initialized #### - -Fires when the EDDI VoiceAttack plugin is loaded. Makes sure that EDDI is set to -quite mode even if the profile was loaded before plugin initialization had -completed. - -### Misc ### - -The commands in here do random more or less useful things. - -* `bind keys;reset key binds`: Reloads your key binds through the bindED plugin. - You should do that after changing anything in the controls options. -* `copy current system`: Copies the current system name into the clipboard. -* `distance [from;to] […]`: Tells you the distance from your current position to - the other thing you mentioned and is supported in the command. (requires - Python scripts) -* `do a barrow roll`: WHOOOOOOO! -* `fix window dimensions`: When you start the game in VR, it forces into - windowed mode with weird resolution. This changes it back. Hover the “PLAY” - entry in the main menu, then run this. Will need adjustment for different - graphics cards/drivers and the resolution you want. -* `neutron [jump;trip] time`: Shorter version of the same thing in SpanshAttack. -* `neutron jumps left`: Shorter version of the same thing in SpanshAttack. -* `open copied system on EDSM`: Opens the system in your clipboard on EDSM in - your default browser. - * `open coriolis`: Opens Coriolis in your default browser. -* `open [current;] system on EDSM`: Opens your current system on EDSM in your - default browser. -* `open EDDI options; configure EDDI`: Opens the EDDI configuration window. -* `open e d d b [station;system;faction;] [search;]`: Opens EDDB in your default - browser. -* `open e d s m`: Opens EDSM in your default browser. -* `open inara`: Opens Inara in your default browser. -* `open materials finder`: Opens EDTutorials’ materials finder in your default - browser. -* `open miner’s tool`: Opens https://edtools.ddns.net/miner in your default - browser. -* `reload bindings`: Reloads your bindings for bindED. -* `shut up EDDI`: Immediately stops any ongoing (and queued) EDDI speech. -* `[start;stop] [EDISON;navigation]`: Hits `CTRL+ALT+E` which just so happens to - be the start/stop hotkey I have set in E.D.I.S.O.N. -* `[bodies;what’s;what is] left to [map;be mapped;scan]`: Tells you which bodies - EDDI thinks are worth mapping in the system that you haven’t mapped yet. - -### Navigation ### - -There are so many navigation-focused commands now, they deserve there own -category. Basically anything that helps you plot anywhere. A lot of those are -powered by awesome EDDI so I don’t have to do the work myself! - -* `plot course;[target;] next [waypoint;way point]`: Plots a course to the - system set in `~~system` or the one in your clipboard. The former way is - usually used by other commands to not interfere with your clipboard. -* `[find;target] nearest [encoded;manufactured;raw] material trader`: Targets - the nearest respective material trader. -* `[find;target] nearest [guardian;human] tech broker`: Targets the nearest respective - tech broker. -* `[find;target] nearest [interstellar factor;mission system;scoopable star]`: Well, - you know the drill by now. -* `[find;target] nearest mission system`: Targets the nearest system that has a mission - target. -* `[find;target] []`: Targets the given system on the galaxy map. There’s - a bunch in there, the list is easily extensible. Drop me a note if you want - something included. - -### Ship Controls ### - -Basically anything that is related to directly doing something with your ship. - -* `[abort;cancel;stop] jumping`: Stops a currently charging FSD jump. -* `[buggy;exploration] power`: Sets your PD to 0/4/2 or 2/4/0 respectively. - Works in SRV too. -* `[close;deploy;extend;open;retract;] […] [up;down;]`: Overly complicated - command to handle everything related to Cargo Scoop, Hard Points, Landing - Gear. You get the gist, I guess. Works in SRV too. -* `[disco;discovery scan]`: Executes a discovery scan. To work properly, you’ll - have to set the Discovery Scanner to your first fire group, secondary fire. -* `[dis;]engage silent running`: Turns silent running on and off. -* `[head;spot;] lights [on;off]`: Turns your lights on and off. Works in SRV - too, kinda; turning lights off there relies on the state updating fast enough, - which sometimes leads to weird results. -* `[jump;engage;get me out;punch it chewie] [and scan;] [when ready;]`: Retracts - everything that might be protruding from your ship, then jumps to the next - system. If the FSD isn’t charging within 1s, it gets you into SC instead (e.g. - if your target is obstructed). If given “and scan” runs a discovery scan. If - given “when ready” waits for mass lock to clear, your FSD to cool down and you - to leave scoop range before jumping. -* `night vision [on;off]`: Toggles your night vision on/off. Works in SRV too. -* `power to [engines;shields;systems;weapons`: Sets 4 pips to the thing you told - it, 1 to the others. -* `rapid fire lights`: Flashes your lights 5 times in a row. -* `retract [all;everything]`: Retracts, well, everything. -* `[start;stop] [firing;mining]`: Starts/stops holding down primary fire. Mostly - useful when mining. When triggered with “mining”, also deploys the cargo - scoop. -* `[super;] cruise [when ready;]`: Retracts everything, then jumps to SC. If - given “when ready” will wait for mass lock to clear and your FSD to cool down - first. - -### SRV controls ### - -Things relevant to your SRV, but not your ship. - -* `[recall;dismiss] ship`: Recalls or dismisses ship. Currently does the same - thing regardless of the state of your ship. I wish it would be possible to - restrict it to doing one thing each, but that’s currently not possible sadly. -* `[toggle;enable;disable] drive assist`: Handles all your drive assist needs! - -### Targeting ### - -Well … targeting stuff, I guess. Not really sure why I made that it’s own -category, but oh well :) - -* `target next system`: Selects the next system on your route. -* `target wing man [1;2;3]`: Targets your wing men. -* `target’s target`: Targets your target’s target. -* `wing man [1;2;3] target`: Targets your wing men’s target. -* `wing man nav lock`: Toggles wing man nav lock on the selected wing member. - -### UI Commands ### - -Everything handling stuff that’s not related to controlling your ship, but -manipulating some UI element(s). - -* `controls options`: Opens the controls options menu. -* `docking request;request dock[ing;]`: Sends a docking request. -* `[enter;leave] F S S`: Opens/closes FSS. -* `galaxy map`: Opens the galaxy map. -* `[main;game] menu`: Opens the ESC menu. -* `[relog;reset] to [open;solo]`: Relogs to Open or Solo mode, respectively. -* `restart from Desktop`: Quits the game and restarts from an open launcher by - clicking the play button. -* `set […] filter`: Sets a nav panel filter setting. See the command or just try - different things for what is possible. You need to clear filters and hover - over the filter button, then run this. -* `system map`: Opens the system map. -* `take [high res;] screenshot`: Takes a (high res) screenshot. -* `toggle orbit lines`: Toggles the visibility of orbit lines. -* `[toggle;show;hide] interface`: Toggles the cockpit interface (CTRL+ALT+G). - Probably needs to be adjusted if you are not playing with Neo2 keyboard layout - :) - -### Update Commands ### - -* `check for profiles update`: Does just that. Is also automatically run each - time the profile is started. -* `download profiles update`: Downloads a profiles update if applicable. Will - prompt you to restart VoiceAttack when the download has finished to import the - updated profiles. -* `open profiles change log`: Opens `CHANGELOG.md` on Github. - -## Logging ## - -The profile supports logging a bunch of stuff to the VoiceAttack event log. By -default, logging is concise and constrained to basically error messages. - -If you need more logging (usually for debugging purposes), say `enable logging`. -If you want to enable verbose logging _by default_, call the -`Logging.enableLogging` command from your custom profile’s `startup` command. - -## Configuration Variables ## - -There are a bunch of configuration variables. You should not overwrite those -manually, instead use the provided commands in the `_configuration` section! - -Basically all the settings are available using the `customize settings` prefix, -then saying `[enable;disable] ` for on/off switches and `set ` -for text variables. - -* `EDDI.quietMode` (boolean): whether or not to set EDDI to quite mode. Default: - true. -* `Elite.pasteKey` (string): the key used for pasting into Elite. On QWERTY this - is `v`. Default: `p`. -* `EliteDangerous.announceEdsmSystemStatus` (boolean): whether to announce the - system or some of its bodies missing on EDSM. Default: true. -* `EliteDangerous.announceMappingCandidates` (boolean): whether to announce - mapping candidates when they are scanned. Default: true. -* `EliteDangerous.announceOutdatedStationData` (boolean): whether to announce - stations with outdated data in systems you jump to. Default: true. -* `EliteDangerous.announceR2RMappingCandidates` (boolean): whether to announce - planets worth mapping when jumping into a known system. This is useful for - doing some R2R on the side. Default: false. -* `EliteDangerous.enableCarrierAnnouncements` (boolean): whether or not to - process fleet carrier events. Default: true. -* `EliteDangerous.enableAutoUpdateCheck` (boolean): whether or not to - automatically check for updates on profile startup. Default: true. -* `EliteDangerous.flightAssistOff` (boolean): whether to automatically toggle - FlightAssist off on liftoff. Default: true. -* `EliteDangerous.hyperspaceDethrottle` (boolean): same thing as the SC assist - setting; if on, will throttle to 0 automatically after jumping. Default: true. -* `EliteDangerous.oldStationThreshold` (int): Age in days that will cause - station data to be considered outdated. Default: 365 (1 year). -* `python.ScriptPath` (string): the path you have placed the compiled python - scripts in. Default: “{VA_DIR}\Sounds\scripts” (the “\Sounds\scripts” folder - in your VoiceAttack installation directory). - -#### Delays / Pauses #### - -Delays needed e.g. between key presses in UI navigation can vary wildly -depending on your PC’s specs and configuration. Therefore they should be -configurable, shouldn’t they? - -So far those actually are: - -* `EliteDangerous.delays.quitToDesktop`: Delay between quitting to desktop and hitting the - play button in the launcher. +# EliteAttack + +## Settings + +Toggles: + +* `auto honk all systems`: Automatically honk upon entering a system, each jump + without constraints. Default: false. +* `auto honk new systems`: Automatically honk upon entering as system if it is + your first visit. Default: true. +* `auto restock`: Automatically restock after docking at a station. You will + always refuel, repair and enter the Station Services menu. Default: true. +* `edsm system status`: Pull system data from EDSM and compare it + against your discovery scan. Default: true. +* `discovery scan on primary fire`: Use primary fire for honking instead of + secondary. Default: false. +* `flight assist off`: Permanent Flight Assist off mode. You should really do + that, it’s great. Default: false. +* `hyper space dethrottle`: Throttle down after a jump and when dropping from + SC. Like the SC Assist module does. Default: true. +* `mapping candidates`: Announce bodies worth mapping when you’ve finished + scanning a system. (Terraformables, Water Worlds, Earth-Like Worlds and + Ammonia Worlds that have not been mapped yet.) Default: true. +* `outdated stations`: Announce stations with outdated data in the online + databases. Default: true. +* `road to riches`: Announce bodies worth scanning if you are looking for some + starting cash on the Road to Riches. Default: false. + +Other settings: + +* `outdated station threshold`: The threshold for station data to count as + “outdated”, an days. Default: 365. +* `scanner fire group`: The fire group your discovery scanner is assigned to. + Default: 0 (the first one). \ No newline at end of file diff --git a/docs/configuration/RatAttack.md b/docs/configuration/RatAttack.md index 6884ced..58c9402 100644 --- a/docs/configuration/RatAttack.md +++ b/docs/configuration/RatAttack.md @@ -1,283 +1,92 @@ -# RatAttack # +# RatAttack -This profile facilitates [Fuel Ratting](https://www.fuelrats.com). It aims to -eliminate as much of the required manual task and attention switching as -possible via automation and voice commands. +## Getting Case Data From IRC -If you don’t know what the Fuel Rats are, come hang out and ask :) - -## Requirements ## - -Only vanilla VoiceAttack is absolutely required to use this profile. Optionally -you can install EDDI and my elite scripts for advanced features. - -* [EDDI](https://github.com/EDCD/EDDI) installed as a VoiceAttack plugin: This - will give you a better (IMO) way of using TTS. Be sure to set - `RatAttack.useEddiForVoice`. It will also enable you to have ingame chat be - transferred to IRC; see below. -* [elite-scripts](https://github.com/alterNERDtive/elite-scripts): Using the - Python scripts will give RatAttack a way to be aware of where your CMDRs are - and give you the nearest one to a rat case. That’s only really needed if you - actually _have_ multiple CMDRs, obviously. If you are using the profile - package from the release page, they will be installed automatically. - -### EDDI speech responder ### - -For the convenience of people that have not been using EDDI in the past, -RatAttack will deactivate the speech responder automatically to not clutter them -with unwanted TTS. - -If you are already an EDDI user and want to keep the default speech responder -functionality, you will have to disable the `EDDI.quietMode` setting by running -the `customize settings disable eddi quiet mode` command. - -## Settings ## - -There are a lot of preferences you can set, including some you really want to -concern yourself with before you start using the profile. Some of the more -advanced features heavily rely on you giving it the correct things to work with. - -See the [Configuration Variables](#Configuration-Variables) section. - -## Including the Profile ## - -When including the profile, be sure to - -* Run the startup command. You will need to have a startup command in your - profile (= one that is run on profile loading) and call `RatAttack.startup` - from that one. -* Make sure all EDDI events that RatAttack needs are correctly handled. For all - events used in RatAttack that you already have handlers for in your profile, - you’ll have to include a call to `RatAttack.`. E.g. for “EDDI - Message sent”, call `RatAttack.EDDI Message sent` by name from your `((EDDI - Message sent))` command. - -## Usage ## - -### Going On/Off Duty ### - -When you are on duty, RatAttack will automatically announce cases coming in -through IRC. When off duty, it won’t. - -* `[enable;disable] rat duty`: puts you on/off duty. -* `open [rat;] dispatch board`: opens the web dispatch board. - -### Handling a Case ### - -#### Getting Case Data From IRC #### - -You can setup your IRC client to pass incoming RATSIGNALS to VoiceAttack by -writing them to a file (`%appdata%\Ratattack\ratsignal.pipe`), then calling the -appropriate command (`RatAttack.announceCaseFromRatsignal` for notification, -`RatAttack.getInfoFromRatsignal` for silently putting it into the case list). +You can setup your IRC client to pass incoming RATSIGNALS to VoiceAttack by calling the +`RatAttack-cli.exe` helper tool with the RATSIGNAL as first argument and an +optional boolean that triggers a TTS case announcement. You can find it under +your VoiceAttack “Apps” folder, `\alterNERDtive\RatAttack-cli.exe`. This has two purposes: -1. announcing a new incoming case -1. storing case data and making it available to VoiceAttack, e.g. for copying - the case’s system into the clipboard +1. Announcing a new incoming case (if passing `true` as second argument). +1. Storing case data and making it available to VoiceAttack, e.g. for copying + the case’s system into the clipboard. -You need to make your IRC client +For my AdiIRC, it looks like this (obviously change the path, please): -1. wait until the file disappears (for several cases coming in at once) -1. write the RATSIGNAL to the file -1. run the VoiceAttack command - -In my case I am running AdiIRC and have the following script setup for handling -this: - -``` +```adiirc on *:TEXT:RATSIGNAL - CMDR*(??_SIGNAL):#fuelrats:{ - /mkdir C:\users\\appdata\roaming\RatAttack\ - /handleratsignal $1- -} -alias handleratsignal { - if ( $exists(C:\users\\appdata\roaming\RatAttack\ratsignal.pipe) ) { - /sleep 1 /handleratsignal $1- - } - else { - /write C:\users\\appdata\roaming\RatAttack\ratsignal.pipe $1- - if ( $away ) { - /run -h "X:\path\to\VoiceAttack\VoiceAttack.exe" -nofocus -command "RatAttack.getInfoFromRatSignal" - } - else { - /run -h "X:\path\to\VoiceAttack\VoiceAttack.exe" -nofocus -command "RatAttack.announceCaseFromRatSignal" - } - } + if ( $away ) { + /run -h "X:\path\to\VoiceAttack\Apps\alterNERDtive\RatAttack-cli.exe" " $+ $replace($1-,","") $+ " false + } + else { + /run -h "X:\path\to\VoiceAttack\Apps\alterNERDtive\RatAttack-cli.exe" " $+ $replace($1-,","") $+ " true + } } ``` -You get the gist; if not and you don’t know how to do the same thing for your -IRC client or it doesn’t support copying the control characters in the ratsignal -that the profile uses to split the information, either switch to AdiIRC or bribe -me to include some other way to get case data into VoiceAttack. +If I am away it will just add the new case to the list. If I am not away, it +will announce it using TTS. -**Note**: If you are running VoiceAttack as admin you need to run your IRC -client as admin, too! Otherwise it can’t talk to VoiceAttack for security -reasons. You really should _not_ run VoiceAttack with elevated privileges -though. Or anything. +The “replace” part handles the fact that announcements now put the system in +quotes. They have to be escaped as double quotes (`""`) to create a correct +command invocation. -#### Internal Case List #### +You get the gist; if not and you don’t know how to do the same thing for your +IRC client, either switch to AdiIRC or bribe me to make an example for yours. -If you have your IRC client setup properly, VoiceAttack will hold a list with -all rat cases that have come in while you had it running. It will save the case -number, CMDR name, system, O₂ status and platform. There are several commands -you can run on this list, giving it a case number: +Note: If you are not on duty (see below) you will _not_ get case announcements. -* `rat case number [0..19] details`: Will give you all stored info on a case. -* `[current;] rat case details`: Will give you all stored info on the currently - open case. -* `distance to current rat case`: Will give you the distance from your current - location to the currently opened rat case. Requires the use of my - `elite-scripts` Python scripts. -* `distance to rat case number [0..19]`: Will give you the distance from your - current system to a case’s system. Requires the use of my `elite-scripts` - Python scripts. -* `nearest commander to rat case number [0..19]`: Will give you the nearest of - your CMDRs with their distance to a case’s system. Requires some setup and the - use of my `elite-scripts` Python scripts. -* `nearest commander to [the;] rat case`: Will give you the nearest of your - CMDRs with their distance to the current case’s system. Requires some setup - and the use of my `elite-scripts` Python scripts. +## Announcing Your Nearest CMDR -#### Opening a Case #### +In case you have more than one CMDR registered as a Fuel Rat, you can have +VoiceAttack announce the nearest one to a case and the distance. You will have +to go through a couple steps to set that up: -* `open rat case number [0..19]`: Opens rat case with the given number. If there - is no case data for that case (e.g. because you don’t have your IRC client set - up properly), it will still open it, just not have any data on it. -* `open [latest;] rat case`: Opens the latest rat case that has come in through - IRC. Will probably error out in creative ways if you don’t have your IRC - client set up properly. Too tired right now to have proper error handling so - just open an issue if you run into problems (it’s 7am, I haven’t slept and - want to finish this doc to get the release out (yes, you are allowed to laugh - at this section)). +1. Have all CMDRs on EDSM. +1. Have all profiles on EDSM set to _public_ including your flight log (which + includes the current location). +1. Set the CMDR names you want to use (“customize setting set fuel rat + commanders”). +1. Enable the nearest CMDR announcements (“customize setting enable nearest + commander to fuel rat case”). -#### Closing a Case #### +You can use this for a single CMDR, too. A less convoluted setup for announcing +the distance to your location in that case is on the list™ but does not have an +ETA yet. -* `[close;clear] rat case`: Closes the currently open rat case. +Currently there is no way to specify a platform for each CMDR. -### Making Calls ### +## Ingame chat → FuelRats IRC -There are a bunch of calls you can make for a case, the most common are modelled -through VoiceAttack commands. The descriptive commands (e.g. “system confirmed”) -will be shortened to the usual IRC short hands (e.g. “sysconf”). If you need -something more unusual you can either still manually type it into your IRC -client or use the “General IRC Integration”, see below. +You can send messages from ingame chat directly to the “\#fuelrats” and +“\#ratchat” channels on FuelRats IRC. (See [[#FIXXME]]) -* `call [1..20] jumps [and login;and takeoff;left;]`: Calls jump for the - currently open case. You can optionally include that you will still have to - login to the game or have to take off from your current - station/port/outpost/planet. -* `call friend [positive;negative] [in pg;in private group;in solo;in main - meu;sysconf;system confirmed]`: Friend request confirmations, with all the - things you might want to / should call with it. -* `call [beacon;fuel;instance;pos;position;prep;sys;system;wing] - [positive;negative]`: All the stuff you usually need for ratting after you - have received the friend request. -* `call wing pending`: Calls “wr pending” for when it takes 30s again to - actually show up. -* `call client in [exclusion zone;main menu;open;open sysconf;pg;private - group;solo;super cruise]`: Callouts for all the various things a client could - get themselves into. -* `call [client destroyed;client offline;sysconf;system confirmed]`: This is the - command you don’t want to use. Include sysconf in your “friend+” or “in open” - calls, and make sure you will never have to call “client destroyed”, would - you? - -### General IRC Interaction ### - -(requires EDDI) - -Using EDDI to read the game’s journal, you can send messages to IRC from Elite’s -ingame chat. - -**Be aware that the chat message will still appear in the ingame chat channel -you send it to!** - -I recommend using local chat and limiting the use to instances that will -probably not have other players in it (e.g. instanced in normal space with the -client or in SC in some remote system out in the black on a long range rescue). - -* #fuelrats: Use “.fr \” to have VoiceAttack send “#\ - \” to the #fuelrats channel – or yell at you when you are not on - a case. -* #ratchat: Use “.rc \” to have VoiceAttack send “\” to - #ratchat. - -These commands send their text to windows with “#fuelrats” and “#ratchat” in +That will send text to windows with “#fuelrats” and “#ratchat” in their title, respectively. If your IRC client does not do that, you will have to change the “target” window of the `RatAttack.sendToFuelrats` and `RatAttack.sendToRatchat` commands to reflect the actual window titles on your system. I will look into making this more elegant to change in the future. -## Logging ## +## Settings -The profile supports logging a bunch of stuff to the VoiceAttack event log. By -default, logging is concise and constrained to basically error messages. +Toggles: -If you need more logging (usually for debugging purposes), say `enable logging`. -If you want to enable verbose logging _by default_, call the -`Logging.enableLogging` command from your custom profile’s `startup` command. - -## Exposed Variables ## - -The following Variables are _global_ and thus readable (and writeable! Please -don’t unless it’s a config variable …) from other profiles. - -### Configuration Variables ### - -There are a bunch of configuration variables. You should not overwrite those -manually, instead use the provided commands in the `_configuration` section! - -Basically all the settings are available using the `customize settings` prefix, -then saying `[enable;disable] ` for on/off switches and `set ` -for text variables. - -* `EDDI.quietMode` (boolean): whether or not to set EDDI to quite mode. Default: - true. -* `EDDI.useEddiForVoice` (boolean): whether to use the EDDI plugin to handle - text-to-speech over VoiceAttacks built-in speech function. Default: false. -* `Elite.pasteKey` (string): the key used for pasting into Elite. On QWERTY this - is `v`. Default: `v`. -* `RatAttack.announceNearestCMDR` (boolean): whether or not to automatically - announce your nearest CMDR to a case. Requires the `elite-scripts` Python - scripts. Will probably break in creative ways if you don’t have them and turn - it on anyway. Default: false. -* `RatAttack.announcePlatform` (boolean): whether or not to announce the case’s - platform by default. Useful to set if you are active on more than one - platform. Even with this off, you will still be warned when you open a case - that is _not_ on one of your platforms. Default: false. -* `RatAttack.CMDRs` (string): list of your CMDR names, delimited by spaces. If - your names include spaces, you will have to put them in quotes. Default: “"J - Jora Jameson" NameWithNoSpace”. -* `RatAttack.confirmCalls` (boolean): whether VoiceAttack should ask you before - posting to #fuelrats to make sure there hasn’t been an error in voice - recognition and you accidentally post the wrong thing. Default: true. -* `RatAttack.autoCloseCase` (boolean): whether or not to automatically close an - open rat case on calling “fuel+”. Default: false. -* `RatAttack.onDuty` (boolean): whether or not you are currently on rat duty. +* `auto close fuel rat case`: Automatically close a rat case when sending + “fuel+” via voice command or ingame chat. Default: false. +* `fuel rat call confirmation`: Only make calls in #fuelrats after vocal + confirmation to prevent mistakes. Default: true. +* `fuel rat duty`: Set FuelRats duty to active when the profile is loaded. Default: true. -* `RatAttack.platforms` (string): the platforms you want to be informed of - incoming cases for. If you are on console, you can still have VoiceAttack - running on the PC that you are using for IRC and handle calls and stuff using - voice! Delimited by whatever you want. Can include “PC”, “XB”, “PS4”. - Default: “PC”. -* `python.scriptPath` (string): the path you put the Python scripts in. Default: - “{VA_DIR}\Sounds\scripts”. +* `nearest commander to fuel rat case`: Announce the nearest commander to + incoming rat cases. Default: false. +* `platform for fuel rat case`: Announce the platform for incoming rat cases. + Default: false. -### Other Variables ### +Other Settings: -Current case data: - -* `RatAttack.caseNumber` (int): the number of the case you are currently on. - Will be `Not Set` if you are not on a case. -* `RatAttack.onCase` (boolean): whether or not you are currently on a case. - -Case list: - -* `RatAttack.caseList..cmdr` (string) -* `RatAttack.caseList..system` (string) -* `RatAttack.caseList..platform` (string) -* `RatAttack.caseList..codeRed` (boolean) - -… with `` being a number between 0 and 19. +* `fuel rat commanders`: All your CMDRs that are ready to take rat cases. Use + ‘;’ as separator, e.g. “Bud Spencer;Terrence Hill”. Default: "". +* `fuel rat platforms`: The platform(s) you want to get case announcements for + (PC, Xbox, Playstation). Use ‘;’ as separator, e.g. “PC;Xbox”. Default: "PC". \ No newline at end of file diff --git a/docs/configuration/SpanshAttack.md b/docs/configuration/SpanshAttack.md index f5d2422..b542dc8 100644 --- a/docs/configuration/SpanshAttack.md +++ b/docs/configuration/SpanshAttack.md @@ -1,241 +1,50 @@ -# SpanshAttack # +# SpanshAttack -This profile uses the -[ED-NeutronRouter](https://github.com/sc-pulgan/ED-NeutronRouter) plugin to plot -neutron jumps using [spansh](https://spansh.co.uk/plotter). It fully does -everything you need from within the game and VoiceAttack, you won’t have to -visit the site at any point. +## Supplying Your Ship’s Range -## Requirements ## +The ED-NeutronRouter plugin is technically supposed to read the current jump +range from EDDI; sadly a) it’s +[bugged](https://github.com/sc-pulgan/ED-NeutronRouter/issues/3) right now, and +b) EDDI is storing the _maximum_ distance for your ship instead of the current / +full on fuel one. -In addition to VoiceAttack, you will need the following plugins to use this -profile: +The “default to laden range” option works reasonably well, but it has a few +quirks. It always assumes full cargo, and it will take your _current_ fuel +levels for range calculations, disregrading the range loss if you fill your tank. -* [bindED](https://forum.voiceattack.com/smf/index.php?topic=564.0) -* [EDDI](https://github.com/EDCD/EDDI) installed as a VoiceAttack plugin -* [ED-NeutronRouter](https://github.com/sc-pulgan/ED-NeutronRouter): required - for SpanshAttack. **Make sure to [grab the pre-release - 1.02](https://github.com/sc-pulgan/ED-NeutronRouter/releases/tag/1.02)** since - 1.01 has a bug with a hardcoded 50 ly jump range. +For any ships that you regularly use for neutron jumping, e.g. long range Fuel +Rat ships, I recommend telling SpanshAttack about the range they are supposed to +have with full fuel and your preferred amount of cargo/limpets. -### EDDI speech responder ### +In oder to do that, copy the `SpanshAttack.getShipRange` command from +SpanshAttack or the example profile to your custom profile and add your ships. +Any ship listed in there will automatically have its jump range used instead of +EDDI’s reported laden range or VoiceAttack prompting you to manually supply it. -For the convenience of people that have not been using EDDI in the past, -SpanshAttack will deactivate the speech responder automatically to not clutter -them with unwanted TTS. +![[SpanshAttack-getshiprange.png]] -If you are already an EDDI user and want to keep the default speech responder -functionality, you will have to disable the `EDDI.quietMode` setting by running -the `customize settings disable eddi quiet mode` command. +You can override a saved range for your ship by using the +`plot neutron [course;route;trip] with custom range` command. -## Settings ## +## Settings -Because Elite’s keyboard handling is … weird you’ll have to set the key to use -for pasting text into Elite:Dangerous. If you are not using a “standard” -QWERT[YZ] layout, you will have to change it back to the key that is physically -in the place where `v` would be on QWERTY. +Toggles: -For other settings, see the [Configuration Variables](#Configuration-Variables) -section. +* `auto jump after scooping`: Automatically accelerate and jump out when fuel + scooping is complete. Default: true. +* `auto plot`: Automatically plot to the next waypoint after supercharging. + Default: true. +* `clear neutron route on shutdown`: Clear an active neutron route when the game + is shut down. Default: true. +* `copy neutron waypoints to clipboard`: Copy each neutron waypoint into the + Windows clipboard. Default: false. +* `default to laden range`: Default to the current ship’s laden range as + reported by EDDI instead of prompting for input. Default: false. +* `time neutron route`: Keep track of how long a neutron route takes you to + complete. Default: false. +* `waypoint announcements`: Announce each waypoint by name. Default: true. -The last “setting” in the not-so-strict sense of the word is the -`SpanshAttack.getShipRange` command. Any ship listed in there will automatically -have its jump range used instead of VA prompting you for it. Since, again, VA -will execute the first matching command found, you can create this command in -your own profile when you are using SpanshAttack by including it. You can -override a saved range for your ship by using the `plot neutron -[course;route;trip] with custom range` command. +Other Settings: -The ED-NeutronRouter plugin is technically supposed to read the current jump -range from EDDI; sadly a) it’s -[bugged](https://github.com/sc-pulgan/ED-NeutronRouter/issues/3) right now, and -b) EDDI is storing the _maximum_ distance for your ship instead of the current -/ full on fuel one. - -## Including the Profile ## - -When including the profile, be sure to - -* Run the startup command. You will need to have a startup command in your - profile (= one that is run on profile loading) and call `SpanshAttack.startup` - from that one. -* Make sure all EDDI events that SpanshAttack needs are correctly handled. For - all events used in SpanshAttack that you already have handlers for in your - profile, you’ll have to include a call to `SpanshAttack.`. E.g. - for “EDDI Jumped”, call `SpanshAttack.EDDI Jumped` by name from your `((EDDI - Jumped))` command. -* (Optional) Have a `SpanshAttack.getShipRange` command in your profile to - overwrite the default one with your ship’s ranges. See the default command for - pointers. - -## Usage ## - -### Plotting a Route ### - -1. _Target_ the system you want to be routed to (target, do not plot to it). -1. Either exit the galaxy map or make sure you are on its first tab (or - auto-plotting will break). -1. Trigger the `SpanshAttack.plotRoute` command either by voice (`plot neutron - [course;route;trip] [with custom range;]`) or calling it from another - command. -1. Enter your ship’s jump range if prompted. -1. Wait for the route to be calculated. The command will automatically open the - galaxy map and jump to the first waypoint on your route. If you run into - weird behaviour, it’s probably because your target system is not in EDDB. -1. Either target the first waypoint or plot to it. -1. Start jumping! - -#### Plotting to a System Unknown to the Neutron Router #### - -The router can only plot a route to a system that is in its data base (obviously -can also only give you way points that are). If your target system is not, there -are several levels of fallback handling to find a system that is. - -1. Check `Next system` coordinates provided by EDDI. If the system is in EDSM, - but has for some reason not been sent over EDDN to other sites including - Spansh we can get coordinates here. -1. If the system is not in EDSM check EDTS. It can calculate approximate - coordinates for a given procedurally generated system name. -1. If that fails prompt the user for input. -1. Query Spansh’ API for the closest system to these coordinates. -1. Plot a route to the closest system. - -Generally you should almost never be asked to input coordinates manually. If -EDTS provides coordinates with an accuracy that is worse than ±100 ly per axis, -you will be prompted to make sure you are going roughly to the right -coordinates. You will find the system that is used for plotting, its -coordinates and the accuracy in VoiceAttack’s log window. - -### Neutron Jumping ### - -With standard settings, just supercharge off a neutron cone. You should -automatically be taken to the galaxy map with the next waypoint selected. - -In case you have disabled auto-plotting to the next waypoint, manually invoke -the `SpanshAttack.targetNextNeutronWaypoint` command by voice (`[target;] next -neutron [waypoint; way point]`) or calling it from another command. - -Additionally, you can use the `SpanshAttack.copyNextNeutronWaypoint` -/ `[get;copy] next neutron [waypoint;way point]` command to copy the next -neutron waypoint to the clipboard. - -#### Manual Re-Plot #### - -Trigger the `SpanshAttack.replotRoute` command either by voice (`replot neutron -[course;route;trip]`) or calling it from another command. This will start -a re-plot of the current route with the same target system and jump range. - -### Refueling ### - -Whenever you refuel off a scoopable star, the profile will automatically -throttle back up to 100% speed. Unless you have disabled it in your -configuration, you will also automatically target the next system on your route -and jump to it once you leave fuel scoop range. - -### Clearing a Route ### - -When you reach your target system, the neutron route will automatically be -cleared. If you want to prematurely end your trip, call the -`SpanshAttack.clearRoute` / `clear neutron [course;route;trip]` command. - -## Other Commands ## - -### Announcing Jumps Left ### - -You can have VoiceAttack tell you the amount of jumps left on the current route -by invoking `SpanshAttack.announceJumpsLeft` or saying -`how many [neutron;] jumps [are;] left?`. - -**Note**: Because it’s pretty much impossible to calculate a 100% accurate value -for the total jumps left, it will just tell you the jump count _from the current -neutron waypoint_. - -### Announce elapsed time on the trip ### - -SpanshAttack keeps track of your start time, even if you have the option to time -your trip turned off. This way you can get the time you’ve been jumping with the -`SpanshAttack.announceTripTime` or -`how long have i been [jumping;on this trip;on this neutron trip]?` commands. - -### Reload bindings ### - -If you change any relevant bindings (e.g. the galaxy map key), you should run -the `reload bindings` command to make sure that SpanshAttack presses the right -thing for you. - -Eh, just do it every time you edit your controls without re-starting -VoiceAttack, just to be sure. - -### Helper Functions ### - -The profile contains a lot of helper functions that get called by the -aforementioned commands. Have a look around, maybe learn something about -VoiceAttack :) - -## Logging ## - -The profile supports logging a bunch of stuff to the VoiceAttack event log. By -default, logging is concise and constrained to basically error messages. - -If you need more logging (usually for debugging purposes), say `enable logging`. -If you want to enable verbose logging _by default_, call the -`Logging.enableLogging` command from your custom profile’s `startup` command. - -## Exposed Variables ## - -The following Variables are _global_ and thus readable (and writeable! Please -don’t unless it’s a config variable …) from other profiles: - -### Configuration Variables ### - -There are a bunch of configuration variables. You should not overwrite those -manually, instead use the provided commands in the `_configuration` section! - -Basically all the settings are available using the `customize settings` prefix, -then saying `[enable;disable] ` for on/off switches and `set ` -for text variables. - -* `EDDI.quietMode` (boolean): whether or not to set EDDI to quite mode. Default: - true. -* `EDDI.useEddiForVoice` (boolean): whether to use EDDI over VA’s builtin `say` - command. Default: false. -* `Elite.pasteKey` (string): the key used for pasting into Elite. On QWERTY this - is `v`. Default: `v`. -* `SpanshAttack.timeTrip` (boolean): whether to automatically tell you at the - end of a trip how long it took you to get there. Default: false. -* `SpanshAttack.announceWaypoints` (boolean): whether to announce each waypoint - of the neutron route. Default: true. -* `SpanshAttack.announceJumpsLeft` (string): `;`-separated list of remaining - jumps to announce when said amounts are reached. Right now only works if they - are _exactly_ reached when supercharging off a neutron. Note the extra `;` at - the beginning and end of the string. Default: `;1;3;5;10;15;20;30;50;75;100;` -* `SpanshAttack.autoJumpAfterScooping` (boolean): whether to automatically jump - after fuel scooping (and moving out of scoop range). Default: true. -* `SpanshAttack.autoPlot` (boolean): whether to automatically plot to the next - waypoint on supercharging. Default: true. -* `SpanshAttack.clearOnShutdown` (boolean): whether or not to automatically - clear an active neutron route on Elite client shutdown. Default: true. -* `SpanshAttack.defaultToLadenRange` (boolean): whether or not to default to - your ship’s laden range (as reported by EDDI) instead of asking for user - input. Sadly it’s with _current_ fuel, not full. Setting a ship’s jump range - in the `SpanshAttack.getShipRange` command will still overrule this. Default: - false. -* `SpanshAttack.copyWaypointToClipboard` (boolean): whether to copy the next - waypoint into the Windows clipboard for use in other programs. Default: false. -* `python.scriptPath` (string): the path you put the Python scripts in. - Default: “{VA_DIR}\Sounds\scripts”. - -### Other Variables ### - -These variables can be used to get information about the current neutron route. -Please do not set them manually and / or from outside the SpanshAttack profile. - -* `SpanshAttack.plotSystem` (string): the system actually plotted towards using - the neutron router (onley used/set if the target system is not in the data - base) -* `SpanshAttack.targetSystem` (string): the target system for the current - neutron route -* `SpanshAttack.nextNeutronWaypoint` (string): the next waypoint on the current - neutron route -* `SpanshAttack.neutronJumpMode` (boolean): neutron jump mode active/inactive -* `SpanshAttack.jumpRange` (decimal): the current ship’s jump range +* `announce jumps left`: Estimated jumps left to announce when reached. NEEDS to + have leading and trailing “;”. Default: ";1;3;5;10;15;20;30;50;75;100;" \ No newline at end of file diff --git a/docs/configuration/StreamAttack.md b/docs/configuration/StreamAttack.md index 36828dd..5b455d2 100644 --- a/docs/configuration/StreamAttack.md +++ b/docs/configuration/StreamAttack.md @@ -1,120 +1,6 @@ -# StreamAttack # +# StreamAttack -This profile uses the [EDDI](https://github.com/EDCD/EDDI) plugin to write -a bunch of information about your commander, your current location and your ship -to files that can be accessed e.g. by your streaming software to be displayed on -stream. +## Settings -Default folder is `%appdata%\StreamAttack\`. - -## Requirements ## - -In addition to VoiceAttack, you will need the following plugins to use this -profile: - -* [EDDI](https://github.com/EDCD/EDDI) installed as a VoiceAttack plugin - -### EDDI speech responder ### - -For the convenience of people that have not been using EDDI in the past, -StreamAttack will deactivate the speech responder automatically to not clutter -them with unwanted TTS. - -If you are already an EDDI user and want to keep the default speech responder -functionality, you will have to disable the `EDDI.quietMode` setting by running -the `customize settings disable eddi quiet mode` command. - -## Settings ## - -See the [Configuration Variables](#Configuration-Variables) section. - -## Including the Profile ## - -When including the profile, be sure to - -* Run the startup command. You will need to have a startup command in your - profile (= one that is run on profile loading) and call `StreamAttack.startup` - from that one. -* Make sure all EDDI events that StreamAttack needs are correctly handled. For - all events used in StreamAttack that you already have handlers for in your - profile, you’ll have to include a call to `StreamAttack.`. E.g. - for “EDDI Jumped”, call `StreamAttack.EDDI Jumped` by name from your `((EDDI - Jumped))` command. - -## Commands ## - -* `clear jump target`: clears the current jump target. -* `set jump target`: sets the jump target to the currently targeted system. - Distance will be written to the configured file. - -* `[copy;open] ship build`: copies the current ship build (coriolis) or opens it - in your default browser. -* `open StreamAttack folder`: opens the configured folder in Explorer. - -## Files the Profile Provides ## - -### Elite ### - -#### Commander #### - -* `Elite\cmdr\name`: the current commander’s name. - -#### Jump Target #### - -* `Elite\jumpTarget\distance`: distance to current jump target in light years. -* `Elite\jumpTarget\full`: pretty-printed ` ly to `. -* `Elite\jumpTarget\name`: the current jump target’s system name. - -#### Location #### - -* `Elite\location\full`: depending on your status, either the station you are - currently docked at (+ system), the body you are currently near, or the system - you are currently in. -* `Elite\location\system`: the system you are currently in. - -#### Ship #### - -* `Elite\ship\build`: your current ship’s loadout (link to coriolis). -* `Elite\ship\full`: `“” | | `. -* `Elite\ship\model`: your current ship’s model. -* `Elite\ship\name`: your current ship’s name. - -## Logging ## - -The profile supports logging a bunch of stuff to the VoiceAttack event log. By -default, logging is concise and constrained to basically error messages. - -If you need more logging (usually for debugging purposes), say `enable logging`. -If you want to enable verbose logging _by default_, call the -`Logging.enableLogging` command from your custom profile’s `startup` command. - -## Exposed Variables ## - -The following Variables are _global_ and thus readable (and writeable! Please -don’t unless it’s a config variable …) from other profiles: - -### Configuration Variables ### - -There are a bunch of configuration variables. You should not overwrite those -manually, instead use the provided commands in the `_configuration` section! - -Basically all the settings are available using the `customize settings` prefix, -then saying `[enable;disable] ` for on/off switches and `set ` -for text variables. - -* `EDDI.quietMode` (boolean): whether or not to set EDDI to quite mode. Default: - true. -* `EDDI.useEddiForVoice` (boolean): whether to use EDDI over VA’s builtin `say` - command. Default: false. -* `StreamAttack.outputDir` (string): the directory StreamAttack will save its - information to. Default: `%appdata%\StreamAttack\`. -* `python.ScriptPath` (string): the path you have placed the compiled Python - scripts in. Default: “{VA_DIR}\Sounds\scripts” (the “\Sounds\scripts” folder - in your VoiceAttack installation directory). - -### Other Variables ### - -These variables can be used to get information about the current neutron route. -Please do not set them manually and / or from outside the StreamAttack profile. - -* `StreamAttack.Elite.jumpTarget` (string): the current jump target. +* `StreamAttack output directory`: The directory the status files are written + to. Default: "%appdata%\StreamAttack\" \ No newline at end of file diff --git a/docs/configuration/general.md b/docs/configuration/general.md index 0fd4b2c..710cf64 100644 --- a/docs/configuration/general.md +++ b/docs/configuration/general.md @@ -33,14 +33,28 @@ selected, but be preserved if you switch around. Toggles: +* `auto update check`: Automatically check Github for profiles updates. * `eddi quiet mode`: Make EDDI shut up. Disables all built-in speech responders. Other settings: * `elite paste key`: The key used to paste in conjunction with CTRL. The - physical key in your layout that would be 'V' on QWERTY. + physical key in your layout that would be 'V' on QWERTY. Default: 'v'. * `log level`: The level of detail for logging to the VoiceAttack log. Valid levels are "ERROR", "WARN", "NOTICE", "INFO" and "DEBUG". Default: "NOTICE". + Default: "NOTICE". +* `quit to desktop delay`: The delay before restarting the game after hitting + “Exit to Desktop”. Default: 10.0 seconds. (Used by the `restart from desktop` + command) + +## Note on Non-Standard Keyboard Layouts + +Because Elite’s keyboard handling is … weird you’ll have to set the key to use +for pasting text into Elite:Dangerous. If you are not using a “standard” +QWERT[YZ] layout, you will have to change it back to the key that is physically +in the place where `v` would be on QWERTY. + +To set the key, say “customize setting set elite paste key”. ## Adding Commands diff --git a/docs/general.md b/docs/general.md index 71d400d..fcfa1d4 100644 --- a/docs/general.md +++ b/docs/general.md @@ -1 +1,40 @@ -# General Commands \ No newline at end of file +# General Commands + +## Configuration + +The base profile provides voice commands for changing the profiles’ settings. +See [the configuration section](/configuration/general#settings). + +## Chat + +* `paste text`: Pastes the contents of your current clipboard. Note that this + command is supposed to be used for pasting _into Elite_ and hence uses the + configured paste key. If you’re using a non-standard layout that means that + you can _not_ use this command to paste text into other applications. + +## Updating + +* `check for profiles update`: Checks Github for a new version, and alerts you + if there is one. +* `download profiles update`: Opens the latest release on Github and the + VoiceAttack import folder where you can drop it. +* `open profiles [docs;documentation;help] [file;site;]`: Opens this + documentation, either on the web or the PDF file supplied with the installed + release. +* `open profiles change log`: Opens the CHANGELOG on Github. +* `open voiceattack [apps;import;sounds] [folder;directory]`: Opens the + respective VoiceAttack-related folder. + +## Miscellaneous + +* `generate missing key binds report`: Generates a report of missing key binds + and places it on your Desktop. Note that this currently uses bindED’s built-in + report which will output _any_ bind that does not have a keyboard key set, + including axis binds and binds that are not actually used by the profiles. +* `open EDDI options;configure EDDI`: Displays EDDI’s configuration window. +* `open elite bindings folder`: Opens Elite’s bindings folder + (`%localappdata%\Frontier Developments\Elite Dangerous\Options\Bindings`) +* `reload elite key binds`: Forces a reload of your Elite binds. Should not be + necessary. +* `shut up EDDI`: Immediately interrupts any current and pending speech on + EDDI’s end. \ No newline at end of file diff --git a/docs/images/SpanshAttack-getshiprange.png b/docs/images/SpanshAttack-getshiprange.png new file mode 100644 index 0000000000000000000000000000000000000000..28b6407924d9bf85c8d3ca4cb942341a0b329df2 GIT binary patch literal 41742 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 + { new Option("delays.keyPressDuration", (decimal)0.01, voiceTrigger: "key press duration", description: "The time keys will be held down for.") }, + { new Option("delays.quitToDesktop", (decimal)10.0, voiceTrigger: "quit to desktop delay", + description: "The delay before restarting the game after hitting “Exit to Desktop”.\nDefault: 10.0 seconds. (Used by the `restart from desktop` command)") }, { new Option("eddi.quietMode", true, voiceTrigger: "eddi quiet mode", description: "Make EDDI shut up. Disables all built-in speech responders.") }, - { new Option("keyPressDuration", (decimal)0.01, voiceTrigger: "key press duration", description: "The time keys will be held down for.") }, { new Option("elite.pasteKey", "v", voiceTrigger: "elite paste key", description: "The key used to paste in conjunction with CTRL. The physical key in your layout that would be 'V' on QWERTY.") }, + { new Option("enableAutoUpdateCheck", true, voiceTrigger: "auto update check", description: "Automatically check Github for profiles updates.") }, { new Option("log.logLevel", "NOTICE", voiceTrigger: "log level", validValues: new List{ "ERROR", "WARN", "NOTICE", "INFO", "DEBUG" }, description: @"The level of detail for logging to the VoiceAttack log.\nValid levels are ""ERROR"", ""WARN"", ""NOTICE"", ""INFO"" and ""DEBUG"".\nDefault: ""NOTICE"".") }, } @@ -36,18 +39,17 @@ namespace alterNERDtive.util { new Option("announceMappingCandidates", true, voiceTrigger: "mapping candidates", description: "Announce bodies worth mapping when you’ve finished scanning a system.\n(Terraformables, Water Worlds, Earth-Like Worlds and Ammonia Worlds that have not been mapped yet.)") }, { new Option("announceOutdatedStationData", true, voiceTrigger: "outdated stations", description: "Announce stations with outdated data in the online databases.") }, - { new Option("announceR2RMappingCandidates", true, voiceTrigger: "road to riches", + { new Option("announceR2RMappingCandidates", false, voiceTrigger: "road to riches", description: "Announce bodies worth scanning if you are looking for some starting cash on the Road to Riches.") }, { new Option("autoHonkAllSystems", false, voiceTrigger: "auto honk all systems", description: "Automatically honk upon entering a system, each jump without constraints.") }, { new Option("autoHonkNewSystems", true, voiceTrigger: "auto honk new systems", description: "Automatically honk upon entering as system if it is your first visit.") }, { new Option("autoRestock", true, voiceTrigger: "auto restock", description: - "Automatically restock after docking at a station.\nYou will alywas refuel, repair and enter the Station Services menu.") }, - { new Option("delays.quitToDesktop", (decimal)10.0, voiceTrigger: "quit to desktop delay", - description: "The delay before restarting the game after hitting “Exit to Desktop”.\nDefault: 10.0 seconds.") }, - { new Option("enableAutoUpdateCheck", true, voiceTrigger: "auto update check", description: "Automatically check Github for profiles updates.") }, + "Automatically restock after docking at a station.\nYou will always refuel, repair and enter the Station Services menu.") }, { new Option("flightAssistOff", false, voiceTrigger: "flight assist off", description: "Permanent Flight Assist off mode. You should really do that, it’s great.") }, - { new Option("hyperspaceDethrottle", true, voiceTrigger: "hyper space dethrottle", description: "Throttle down after a jump and when dropping from SC. Like the SC Assist module does.") }, - { new Option("outdatedStationThreshold", 365, voiceTrigger: "outdated station threshold", description: "The threshold for station data to count as “outdated”.\nDefault: 365 days.") }, + { new Option("hyperspaceDethrottle", true, voiceTrigger: "hyper space dethrottle", + description: "Throttle down after a jump and when dropping from SC. Like the SC Assist module does.") }, + { new Option("outdatedStationThreshold", 365, voiceTrigger: "outdated station threshold", + description: "The threshold for station data to count as “outdated”, in days.\nDefault: 365.") }, { new Option("scannerFireGroup", 0, voiceTrigger: "scanner fire group", description: "The fire group your discovery scanner is assigned to.\nDefault: 0 (the first one).") }, { new Option("usePrimaryFireForDiscoveryScan", false, voiceTrigger: "discovery scan on primary fire", description: "Use primary fire for honking instead of secondary.") }, } @@ -69,10 +71,11 @@ namespace alterNERDtive.util { "SpanshAttack", new OptDict{ - { new Option("announceJumpsLeft", ";1;3;5;10;15;20;30;50;75;100;", voiceTrigger: "announce jumps left") }, + { new Option("announceJumpsLeft", ";1;3;5;10;15;20;30;50;75;100;", voiceTrigger: "announce jumps left", + description: "Estimated jumps left to announce when reached.\nNEEDS to have leading and trailing “;”.") }, { new Option("announceWaypoints", true, voiceTrigger: "waypoint announcements", description: "Announce each waypoint by name.") }, { new Option("autoJumpAfterScooping", true, voiceTrigger: "auto jump after scooping", description: "Automatically accelerate and jump out when fuel scooping is complete.") }, - { new Option("autoPlot", true, voiceTrigger: "auto plot", description: "Automatically plot to the next waypoint after super charging.") }, + { new Option("autoPlot", true, voiceTrigger: "auto plot", description: "Automatically plot to the next waypoint after supercharging.") }, { new Option("clearOnShutdown", true, voiceTrigger: "clear neutron route on shutdown", description: "Clear an active neutron route when the game is shut down.") }, { new Option("copyWaypointToClipboard", false, voiceTrigger: "copy neutron waypoints to clipboard", description: "Copy each neutron waypoint into the Windows clipboard.") }, { new Option("defaultToLadenRange", false, voiceTrigger: "default to laden range",