added support for race 4, On the Rocks

This commit is contained in:
alterNERDtive 2022-05-04 17:58:39 +02:00
parent ba11903ecb
commit bba2ababd3
5 changed files with 430 additions and 1 deletions

View file

@ -1,3 +1,11 @@
# devel
## Added
* Support for race 4, On the Rocks
-----
# 3.1.1 (2022-04-19)
## Fixed

143
On the Rocks.asl Normal file
View file

@ -0,0 +1,143 @@
// Defines the process to monitor. We are not reading anything from the games memory, so its empty.
// We still need it though, LiveSplit will only run the auto splitter if the corresponding process is present.
// See https://github.com/LiveSplit/LiveSplit.AutoSplitters/blob/master/README.md#state-descriptors
state("EliteDangerous64") {}
// Executes when LiveSplit (re-)loads the auto splitter. Does general setup tasks.
// See https://github.com/LiveSplit/LiveSplit.AutoSplitters/blob/master/README.md#script-startup
startup {
// Relevant journal entries
vars.journalReader = null;
vars.journalEntries = new List<System.Text.RegularExpressions.Regex>(9);
vars.journalEntries.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""Undocked"", ""StationName"":""Rebuy Prospect"", ""StationType"":"".*"", ""MarketID"":\d+(, ""Taxi"":(true|false), ""Multicrew"":(true|false))? \}"));
System.Linq.Enumerable.Repeat<Action>(() => {
vars.journalEntries.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""FSDJump""(, ""Taxi"":(true|false), ""Multicrew"":(true|false))?, ""StarSystem"":""(Andhrimi|Artemis|Felkan|Nu Tauri|Othime)"", ""SystemAddress"":\d+, .*\}"));
vars.journalEntries.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""SupercruiseExit""(, ""Taxi"":(true|false), ""Multicrew"":(true|false))?, ""StarSystem"":""(Andhrimi|Artemis|Felkan|Nu Tauri|Othime)"", ""SystemAddress"":\d+, ""Body"":""(Big Pappa's Base|Freeholm|Jack's Town|Simbad's Refuge|Lone Rock)"", ""BodyID"":\d+, ""BodyType"":""Station"" \}"));
vars.journalEntries.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""MarketSell"", ""MarketID"":\d+, ""Type"":"".*""(, ""Type_Localised"":"".*"")?, ""Count"":\d+, ""SellPrice"":\d+, ""TotalSale"":\d+, ""AvgPricePaid"":\d+ \}"));
}, 5);
vars.journalEntries.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""FSDJump""(, ""Taxi"":(true|false), ""Multicrew"":(true|false))?, ""StarSystem"":""Fullerene C60"", ""SystemAddress"":4030566762835, .*\}"));
vars.journalEntries.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""SupercruiseExit""(, ""Taxi"":(true|false), ""Multicrew"":(true|false))?, ""StarSystem"":""Fullerene C60"", ""SystemAddress"":4030566762835, ""Body"":""Rebuy Prospect"", ""BodyID"":\d+, ""BodyType"":""Station"" \}"));
vars.journalEntries.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""Docked"", ""StationName"":""Rebuy Prospect"", ""StationType"":"".*""(, ""Taxi"":(true|false), ""Multicrew"":(true|false))?, ""StarSystem"":""Fullerene C60"", .*\}"));
// Reset conditions
vars.resetConditions = new List<System.Text.RegularExpressions.Regex>();
vars.resetConditions.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""Repair"", .*\}"));
vars.resetConditions.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""RepairAll"", ""Cost"":\d+ \}"));
vars.resetConditions.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""RefuelAll"", ""Cost"":\d+, ""Amount"":\d+\.\d+ \}"));
vars.resetConditions.Add(
new System.Text.RegularExpressions.Regex(@"\{ ""timestamp"":""(?<timestamp>.*)"", ""event"":""RefuelPartial"", ""Cost"":\d+, ""Amount"":\d+\.\d+ \}"));
// Journal file handling
vars.journalPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
"Saved Games",
"Frontier Developments",
"Elite Dangerous"
);
vars.currentJournal = "none";
vars.updateJournalReader = (Action)delegate() {
FileInfo journalFile = new DirectoryInfo(vars.journalPath).GetFiles("journal.*.log").OrderByDescending(file => file.LastWriteTime).First();
print("Current journal file: " + vars.currentJournal + ", latest journal file: " + journalFile.Name);
if (journalFile.Name != vars.currentJournal) {
vars.journalReader = new StreamReader(new FileStream(journalFile.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
vars.currentJournal = journalFile.Name;
}
};
vars.updateJournalReader();
vars.journalReader.ReadToEnd();
// Watch for new files
FileSystemWatcher journalWatcher = new FileSystemWatcher(vars.journalPath);
journalWatcher.Created += (object sender, FileSystemEventArgs eventArgs) => {
vars.updateJournalReader();
};
journalWatcher.EnableRaisingEvents = true;
// Initialize split counter
vars.currentSplit = 0;
}
// Executes when LiveSplit detects the game process (see “state” at the top of the file).
// In our case the journal and netlog files are unique to every execution of the game, so we need to prepare them here.
// We also need to check if file logging is enabled (the setting is not available in `startup`) and create/open our log file.
// See https://github.com/LiveSplit/LiveSplit.AutoSplitters/blob/master/README.md#script-initialization-game-start
init {
}
// Executes as long as the game process is running, by default 60 times per second.
// Unless explicitly returning `false`, `start`, `split` and `reset` are executed right after.
// See https://github.com/LiveSplit/LiveSplit.AutoSplitters/blob/master/README.md#generic-update
update {
current.journalString = vars.journalReader.ReadToEnd();
}
// Executes every `update`. Starts the timer if the first journal event is detected.
// See https://github.com/LiveSplit/LiveSplit.AutoSplitters/blob/master/README.md#automatic-timer-start-1
start {
bool start = false;
if (vars.journalEntries[0].Match(current.journalString).Success) {
start = true;
vars.currentSplit = 1;
}
return start;
}
// Executes every `update`. Triggers a split if the journal event triggering the next split is detected.
// See https://github.com/LiveSplit/LiveSplit.AutoSplitters/blob/master/README.md#automatic-splits-1
split {
bool split = false;
if (!String.IsNullOrEmpty(current.journalString)) {
if (vars.journalEntries[vars.currentSplit].Match(current.journalString).Success) {
split = true;
vars.currentSplit++;
}
}
return split;
}
// Executes every `update`. Triggers a reset if a reset condition is met.
// See https://github.com/LiveSplit/LiveSplit.AutoSplitters/blob/master/README.md#automatic-resets-1
reset {
bool reset = false;
if (settings["autoReset"] && !String.IsNullOrEmpty(current.journalString)) {
foreach (System.Text.RegularExpressions.Regex condition in vars.resetConditions)
{
if (condition.Match(current.journalString).Success) {
reset = true;
}
}
}
return reset;
}
// Executes when the game process is shut down.
// In our case were going to close the files we opened in `init`.
// See https://github.com/LiveSplit/LiveSplit.AutoSplitters/blob/master/README.md#game-exit
exit {
vars.journalReader.Close();
}
// Executes when LiveScript shuts the auto splitter down, e.g. on reloading it.
// When reloading the splitter with the game running, LiveSplit does **not** execute `exit`, but it does execute `shutdown`.
// see https://github.com/LiveSplit/LiveSplit.AutoSplitters/blob/master/README.md#script-shutdown
shutdown {
if (vars.journalReader != null) {
vars.journalReader.Close();
}
}

190
On the Rocks.lsl Normal file
View file

@ -0,0 +1,190 @@
<?xml version="1.0" encoding="UTF-8"?>
<Layout version="1.6.1">
<Mode>Vertical</Mode>
<X>51</X>
<Y>53</Y>
<VerticalWidth>286</VerticalWidth>
<VerticalHeight>386</VerticalHeight>
<HorizontalWidth>-1</HorizontalWidth>
<HorizontalHeight>-1</HorizontalHeight>
<Settings>
<TextColor>FFFFFFFF</TextColor>
<BackgroundColor>FF0F0F0F</BackgroundColor>
<BackgroundColor2>00000000</BackgroundColor2>
<ThinSeparatorsColor>03FFFFFF</ThinSeparatorsColor>
<SeparatorsColor>24FFFFFF</SeparatorsColor>
<PersonalBestColor>FF16A6FF</PersonalBestColor>
<AheadGainingTimeColor>FF00CC36</AheadGainingTimeColor>
<AheadLosingTimeColor>FF52CC73</AheadLosingTimeColor>
<BehindGainingTimeColor>FFCC5C52</BehindGainingTimeColor>
<BehindLosingTimeColor>FFCC1200</BehindLosingTimeColor>
<BestSegmentColor>FFD8AF1F</BestSegmentColor>
<UseRainbowColor>False</UseRainbowColor>
<NotRunningColor>FFACACAC</NotRunningColor>
<PausedColor>FF7A7A7A</PausedColor>
<TextOutlineColor>00000000</TextOutlineColor>
<ShadowsColor>80000000</ShadowsColor>
<TimesFont><![CDATA[AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5Gb250BAAAAAROYW1lBFNpemUFU3R5bGUEVW5pdAEABAQLGFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQIAAAAbU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AgAAAAIAAAAGAwAAAAhPcmJpdHJvbgAAQEEF/P///xhTeXN0ZW0uRHJhd2luZy5Gb250U3R5bGUBAAAAB3ZhbHVlX18ACAIAAAABAAAABfv///8bU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AQAAAAd2YWx1ZV9fAAgCAAAAAwAAAAs=]]></TimesFont>
<TimerFont><![CDATA[AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5Gb250BAAAAAROYW1lBFNpemUFU3R5bGUEVW5pdAEABAQLGFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQIAAAAbU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AgAAAAIAAAAGAwAAAA5DZW50dXJ5IEdvdGhpYwAAL0IF/P///xhTeXN0ZW0uRHJhd2luZy5Gb250U3R5bGUBAAAAB3ZhbHVlX18ACAIAAAABAAAABfv///8bU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AQAAAAd2YWx1ZV9fAAgCAAAAAgAAAAs=]]></TimerFont>
<TextFont><![CDATA[AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5Gb250BAAAAAROYW1lBFNpemUFU3R5bGUEVW5pdAEABAQLGFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQIAAAAbU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AgAAAAIAAAAGAwAAAAhPcmJpdHJvbgAAQEEF/P///xhTeXN0ZW0uRHJhd2luZy5Gb250U3R5bGUBAAAAB3ZhbHVlX18ACAIAAAAAAAAABfv///8bU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AQAAAAd2YWx1ZV9fAAgCAAAAAwAAAAs=]]></TextFont>
<AlwaysOnTop>True</AlwaysOnTop>
<ShowBestSegments>True</ShowBestSegments>
<AntiAliasing>True</AntiAliasing>
<DropShadows>True</DropShadows>
<BackgroundType>SolidColor</BackgroundType>
<BackgroundImage />
<ImageOpacity>1</ImageOpacity>
<ImageBlur>0</ImageBlur>
<Opacity>1</Opacity>
<MousePassThroughWhileRunning>False</MousePassThroughWhileRunning>
</Settings>
<Components>
<Component>
<Path>LiveSplit.Title.dll</Path>
<Settings>
<Version>1.7.3</Version>
<ShowGameName>True</ShowGameName>
<ShowCategoryName>True</ShowCategoryName>
<ShowAttemptCount>False</ShowAttemptCount>
<ShowFinishedRunsCount>False</ShowFinishedRunsCount>
<OverrideTitleFont>False</OverrideTitleFont>
<OverrideTitleColor>False</OverrideTitleColor>
<TitleFont><![CDATA[AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABNTeXN0ZW0uRHJhd2luZy5Gb250BAAAAAROYW1lBFNpemUFU3R5bGUEVW5pdAEABAQLGFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQIAAAAbU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AgAAAAIAAAAGAwAAAAhTZWdvZSBVSQAAUEEF/P///xhTeXN0ZW0uRHJhd2luZy5Gb250U3R5bGUBAAAAB3ZhbHVlX18ACAIAAAAAAAAABfv///8bU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AQAAAAd2YWx1ZV9fAAgCAAAAAgAAAAs=]]></TitleFont>
<SingleLine>False</SingleLine>
<TitleColor>FFFFFFFF</TitleColor>
<BackgroundColor>FF2A2A2A</BackgroundColor>
<BackgroundColor2>FF131313</BackgroundColor2>
<BackgroundGradient>Vertical</BackgroundGradient>
<DisplayGameIcon>True</DisplayGameIcon>
<ShowRegion>False</ShowRegion>
<ShowPlatform>False</ShowPlatform>
<ShowVariables>True</ShowVariables>
<TextAlignment>0</TextAlignment>
</Settings>
</Component>
<Component>
<Path>LiveSplit.Subsplits.dll</Path>
<Settings>
<Version>1.7</Version>
<CurrentSplitTopColor>FF3373F4</CurrentSplitTopColor>
<CurrentSplitBottomColor>FF153574</CurrentSplitBottomColor>
<VisualSplitCount>11</VisualSplitCount>
<SplitPreviewCount>1</SplitPreviewCount>
<MinimumMajorSplits>0</MinimumMajorSplits>
<DisplayIcons>True</DisplayIcons>
<ShowThinSeparators>False</ShowThinSeparators>
<AlwaysShowLastSplit>True</AlwaysShowLastSplit>
<SplitWidth>20</SplitWidth>
<SplitTimesAccuracy>Seconds</SplitTimesAccuracy>
<BeforeNamesColor>FFFFFFFF</BeforeNamesColor>
<CurrentNamesColor>FFFFFFFF</CurrentNamesColor>
<AfterNamesColor>FFFFFFFF</AfterNamesColor>
<OverrideTextColor>False</OverrideTextColor>
<BeforeTimesColor>FFFFFFFF</BeforeTimesColor>
<CurrentTimesColor>FFFFFFFF</CurrentTimesColor>
<AfterTimesColor>FFFFFFFF</AfterTimesColor>
<OverrideTimesColor>False</OverrideTimesColor>
<LockLastSplit>False</LockLastSplit>
<IconSize>24</IconSize>
<IconShadows>True</IconShadows>
<SplitHeight>6</SplitHeight>
<CurrentSplitGradient>Vertical</CurrentSplitGradient>
<BackgroundColor>00FFFFFF</BackgroundColor>
<BackgroundColor2>01FFFFFF</BackgroundColor2>
<BackgroundGradient>Alternating</BackgroundGradient>
<SeparatorLastSplit>True</SeparatorLastSplit>
<DeltasAccuracy>Tenths</DeltasAccuracy>
<DropDecimals>True</DropDecimals>
<OverrideDeltasColor>False</OverrideDeltasColor>
<DeltasColor>FFFFFFFF</DeltasColor>
<HeaderComparison>Current Comparison</HeaderComparison>
<HeaderTimingMethod>Current Timing Method</HeaderTimingMethod>
<Display2Rows>False</Display2Rows>
<IndentBlankIcons>True</IndentBlankIcons>
<IndentSubsplits>True</IndentSubsplits>
<HideSubsplits>False</HideSubsplits>
<ShowSubsplits>False</ShowSubsplits>
<CurrentSectionOnly>False</CurrentSectionOnly>
<OverrideSubsplitColor>False</OverrideSubsplitColor>
<SubsplitGradient>Plain</SubsplitGradient>
<ShowHeader>True</ShowHeader>
<IndentSectionSplit>True</IndentSectionSplit>
<ShowIconSectionSplit>True</ShowIconSectionSplit>
<ShowSectionIcon>True</ShowSectionIcon>
<HeaderGradient>Vertical</HeaderGradient>
<OverrideHeaderColor>False</OverrideHeaderColor>
<HeaderText>True</HeaderText>
<HeaderTimes>True</HeaderTimes>
<HeaderAccuracy>Tenths</HeaderAccuracy>
<SectionTimer>True</SectionTimer>
<SectionTimerGradient>True</SectionTimerGradient>
<SectionTimerAccuracy>Tenths</SectionTimerAccuracy>
<SubsplitTopColor>8D000000</SubsplitTopColor>
<SubsplitBottomColor>00FFFFFF</SubsplitBottomColor>
<HeaderTopColor>2BFFFFFF</HeaderTopColor>
<HeaderBottomColor>D8000000</HeaderBottomColor>
<HeaderTextColor>FFFFFFFF</HeaderTextColor>
<HeaderTimesColor>FFFFFFFF</HeaderTimesColor>
<SectionTimerColor>FF777777</SectionTimerColor>
<ShowColumnLabels>False</ShowColumnLabels>
<LabelsColor>FFFFFFFF</LabelsColor>
<Columns>
<Settings>
<Version>1.5</Version>
<Name>+/-</Name>
<Type>Delta</Type>
<Comparison>Personal Best</Comparison>
<TimingMethod>Real Time</TimingMethod>
</Settings>
<Settings>
<Version>1.5</Version>
<Name>Time</Name>
<Type>SplitTime</Type>
<Comparison>Personal Best</Comparison>
<TimingMethod>Real Time</TimingMethod>
</Settings>
</Columns>
</Settings>
</Component>
<Component>
<Path>LiveSplit.Timer.dll</Path>
<Settings>
<Version>1.5</Version>
<TimerHeight>69</TimerHeight>
<TimerWidth>225</TimerWidth>
<TimerFormat>1.23</TimerFormat>
<OverrideSplitColors>False</OverrideSplitColors>
<ShowGradient>True</ShowGradient>
<TimerColor>FFAAAAAA</TimerColor>
<BackgroundColor>00000000</BackgroundColor>
<BackgroundColor2>FF222222</BackgroundColor2>
<BackgroundGradient>Plain</BackgroundGradient>
<CenterTimer>False</CenterTimer>
<TimingMethod>Current Timing Method</TimingMethod>
<DecimalsSize>35</DecimalsSize>
</Settings>
</Component>
<Component>
<Path>LiveSplit.PreviousSegment.dll</Path>
<Settings>
<Version>1.6</Version>
<TextColor>FFFFFFFF</TextColor>
<OverrideTextColor>False</OverrideTextColor>
<BackgroundColor>FF1C1C1C</BackgroundColor>
<BackgroundColor2>FF0D0D0D</BackgroundColor2>
<BackgroundGradient>Vertical</BackgroundGradient>
<DeltaAccuracy>Seconds</DeltaAccuracy>
<DropDecimals>True</DropDecimals>
<Comparison>Personal Best</Comparison>
<Display2Rows>False</Display2Rows>
<ShowPossibleTimeSave>False</ShowPossibleTimeSave>
<TimeSaveAccuracy>Tenths</TimeSaveAccuracy>
</Settings>
</Component>
<Component>
<Path>LiveSplit.ScriptableAutoSplit.dll</Path>
<Settings>
</Settings>
</Component>
</Components>
</Layout>

75
On the Rocks.lss Normal file
View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<Run version="1.7.0">
<GameIcon />
<GameName>Elite Dangerous</GameName>
<CategoryName>On the Rocks</CategoryName>
<LayoutPath>
</LayoutPath>
<Metadata>
<Run id="" />
<Platform usesEmulator="False">
</Platform>
<Region>
</Region>
<Variables />
</Metadata>
<Offset>00:00:00</Offset>
<AttemptCount>0</AttemptCount>
<Segments>
<Segment>
<Name>-Jump to first stop</Name>
</Segment>
<Segment>
<Name>-Drop at first stop</Name>
</Segment>
<Segment>
<Name>{First stop}Sell at first stop</Name>
</Segment>
<Segment>
<Name>-Jump to second stop</Name>
</Segment>
<Segment>
<Name>-Drop at second stop</Name>
</Segment>
<Segment>
<Name>{Second stop}Sell at second stop</Name>
</Segment>
<Segment>
<Name>-Jump to third stop</Name>
</Segment>
<Segment>
<Name>-Drop at third stop</Name>
</Segment>
<Segment>
<Name>{Third stop}Sell at third stop</Name>
</Segment>
<Segment>
<Name>-Jump to fourth stop</Name>
</Segment>
<Segment>
<Name>-Drop at fourth stop</Name>
</Segment>
<Segment>
<Name>{Fourth stop}Sell at fourth stop</Name>
</Segment>
<Segment>
<Name>-Jump to fifth stop</Name>
</Segment>
<Segment>
<Name>-Drop at fifth stop</Name>
</Segment>
<Segment>
<Name>{Fifth stop}Sell at fifth stop</Name>
</Segment>
<Segment>
<Name>-Jump to Fullerene C60</Name>
</Segment>
<Segment>
<Name>-Drop at Rebuy Prospect</Name>
</Segment>
<Segment>
<Name>{Return to Rebuy Prospect}Dock at Rebuy Prospect</Name>
</Segment>
</Segments>
<AutoSplitterSettings />
</Run>

View file

@ -79,4 +79,17 @@ Interchange Hub, nor enforce the speed requirement.
There is one settings:
* `Automatically reset when refuelling or repairing`: Automatically reset when
you Refuel or repair, since that is against the rules. Disabled by default.
you Refuel or repair, since that is against the rules. Disabled by default.
### Race 4 On the Rocks
https://forums.frontier.co.uk/threads/the-buckyball-racing-club-presents-on-the-rocks-7th-15th-may-3307-magic-8-ball-championship-race-4.602955/
The AutoSplitter will start the timer once you undock from Rebuy Prospect. It
will **not** enforce selling 1t of beer mats (split will trigger at selling
_anything_), and **not** check if youre buying water at Jacks Town.
Since the order in which you visit the races stops is up to you, the splits
do not have a specific order and instead just list the `n`th stop.
There are no settings.