Update 0.01 E
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<probing privatePath="lib;dependencies;bin" />
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
|
||||
</startup>
|
||||
</configuration>
|
||||
+7
-11
@@ -1,14 +1,12 @@
|
||||
// ConfigLoader.cs
|
||||
using System;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
|
||||
namespace Lua
|
||||
{
|
||||
internal static class ConfigLoader
|
||||
{
|
||||
// Basic flags / settings
|
||||
// Basic flags/settings
|
||||
public static bool debitFlag1 = false;
|
||||
public static bool betaTest = false;
|
||||
public static bool ttsEnabled = true;
|
||||
@@ -18,10 +16,8 @@ namespace Lua
|
||||
public static int prevSetKey = 0x06; // XBUTTON2
|
||||
public static int refreshKey = 0x50; // P
|
||||
public static int switchSideKey = 0x4D; // M
|
||||
public static int shootKey = 0x01; // Left mouse button
|
||||
public static int altShootKey = 0x02;
|
||||
|
||||
|
||||
public static int shootKey = 0x01; // Left mouse button
|
||||
public static int altShootKey = 0x02; // Right mouse button
|
||||
|
||||
// Favorites and user
|
||||
public static string favoriteAttackers = null;
|
||||
@@ -41,7 +37,7 @@ namespace Lua
|
||||
/// </summary>
|
||||
public static void LoadInitConfig()
|
||||
{
|
||||
// reset to defaults
|
||||
// Reset to defaults
|
||||
debitFlag1 = false;
|
||||
betaTest = false;
|
||||
ttsEnabled = true;
|
||||
@@ -64,7 +60,7 @@ namespace Lua
|
||||
if (string.IsNullOrWhiteSpace(raw)) continue;
|
||||
var line = raw.Trim();
|
||||
|
||||
// ignore comments
|
||||
// Ignore comments
|
||||
if (line.StartsWith("--") || line.StartsWith("#")) continue;
|
||||
|
||||
if (Helper.ParseBoolFromAssignment(line, "debitFlag1", out var b1))
|
||||
@@ -109,7 +105,7 @@ namespace Lua
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignore if console doesn't support color
|
||||
// Ignore if console doesn't support color
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+35
-23
@@ -8,12 +8,12 @@ namespace Lithium
|
||||
{
|
||||
private const int CAPSLOCK = 0x14;
|
||||
|
||||
private static bool nextSetHeld, prevSetHeld, refreshHeld, switchSideHeld, capsHeld;
|
||||
private static MainWindow mainWindow;
|
||||
private static bool _nextSetHeld, _prevSetHeld, _refreshHeld, _switchSideHeld, _capsHeld;
|
||||
private static MainWindow _mainWindow;
|
||||
|
||||
public static void Start(MainWindow window)
|
||||
{
|
||||
mainWindow = window;
|
||||
_mainWindow = window;
|
||||
|
||||
while (true)
|
||||
{
|
||||
@@ -29,52 +29,64 @@ namespace Lithium
|
||||
private static void HandleToggleCapsLock()
|
||||
{
|
||||
bool capsDown = Utils.IsPressed(CAPSLOCK);
|
||||
if (capsDown && !capsHeld)
|
||||
if (capsDown && !_capsHeld)
|
||||
{
|
||||
capsHeld = true;
|
||||
mainWindow.SetRecoilEnabled(!mainWindow.IsRecoilEnabled);
|
||||
_capsHeld = true;
|
||||
_mainWindow.SetRecoilEnabled(!_mainWindow.IsRecoilEnabled);
|
||||
}
|
||||
if (!capsDown) capsHeld = false;
|
||||
if (!capsDown) _capsHeld = false;
|
||||
}
|
||||
|
||||
private static void HandleNextSet()
|
||||
{
|
||||
if (Utils.IsPressed(ConfigLoader.nextSetKey) && !nextSetHeld)
|
||||
if (Utils.IsPressed(ConfigLoader.nextSetKey) && !_nextSetHeld)
|
||||
{
|
||||
nextSetHeld = true;
|
||||
mainWindow.HandleNextSet();
|
||||
_nextSetHeld = true;
|
||||
_mainWindow.HandleNextSet();
|
||||
}
|
||||
else if (!Utils.IsPressed(ConfigLoader.nextSetKey))
|
||||
{
|
||||
_nextSetHeld = false;
|
||||
}
|
||||
else if (!Utils.IsPressed(ConfigLoader.nextSetKey)) nextSetHeld = false;
|
||||
}
|
||||
|
||||
private static void HandlePrevSet()
|
||||
{
|
||||
if (Utils.IsPressed(ConfigLoader.prevSetKey) && !prevSetHeld)
|
||||
if (Utils.IsPressed(ConfigLoader.prevSetKey) && !_prevSetHeld)
|
||||
{
|
||||
prevSetHeld = true;
|
||||
mainWindow.HandlePrevSet();
|
||||
_prevSetHeld = true;
|
||||
_mainWindow.HandlePrevSet();
|
||||
}
|
||||
else if (!Utils.IsPressed(ConfigLoader.prevSetKey))
|
||||
{
|
||||
_prevSetHeld = false;
|
||||
}
|
||||
else if (!Utils.IsPressed(ConfigLoader.prevSetKey)) prevSetHeld = false;
|
||||
}
|
||||
|
||||
private static void HandleRefresh()
|
||||
{
|
||||
if (Utils.IsPressed(ConfigLoader.refreshKey) && !refreshHeld)
|
||||
if (Utils.IsPressed(ConfigLoader.refreshKey) && !_refreshHeld)
|
||||
{
|
||||
refreshHeld = true;
|
||||
mainWindow.HandleRefresh();
|
||||
_refreshHeld = true;
|
||||
_mainWindow.HandleRefresh();
|
||||
}
|
||||
else if (!Utils.IsPressed(ConfigLoader.refreshKey))
|
||||
{
|
||||
_refreshHeld = false;
|
||||
}
|
||||
else if (!Utils.IsPressed(ConfigLoader.refreshKey)) refreshHeld = false;
|
||||
}
|
||||
|
||||
private static void HandleSwitchSide()
|
||||
{
|
||||
if (Utils.IsPressed(ConfigLoader.switchSideKey) && !switchSideHeld)
|
||||
if (Utils.IsPressed(ConfigLoader.switchSideKey) && !_switchSideHeld)
|
||||
{
|
||||
switchSideHeld = true;
|
||||
mainWindow.HandleSwitchSide();
|
||||
_switchSideHeld = true;
|
||||
_mainWindow.HandleSwitchSide();
|
||||
}
|
||||
else if (!Utils.IsPressed(ConfigLoader.switchSideKey))
|
||||
{
|
||||
_switchSideHeld = false;
|
||||
}
|
||||
else if (!Utils.IsPressed(ConfigLoader.switchSideKey)) switchSideHeld = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
-7
@@ -52,7 +52,7 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>a23ae8c4c6863364165637fb70679eb3.ico</ApplicationIcon>
|
||||
<ApplicationIcon>A1\a23ae8c4c6863364165637fb70679eb3.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
@@ -109,19 +109,18 @@
|
||||
<Reference Include="PresentationFramework" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<ApplicationDefinition Include="A1\App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Compile Include="HotkeyHandler.cs" />
|
||||
<Compile Include="RecoilControl.cs" />
|
||||
<Compile Include="RecoilEngine.cs" />
|
||||
<Compile Include="Utils.cs" />
|
||||
<Page Include="MainWindow.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Compile Include="App.xaml.cs">
|
||||
<Compile Include="A1\App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
@@ -151,14 +150,14 @@
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<None Include="packages.config" />
|
||||
<None Include="A1\packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
<None Include="A1\App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
|
||||
@@ -188,10 +187,14 @@
|
||||
<ReferenceCopyLocalPaths Include="@(ReferencePath)" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="a23ae8c4c6863364165637fb70679eb3.ico" />
|
||||
<Resource Include="A1\a23ae8c4c6863364165637fb70679eb3.ico" />
|
||||
</ItemGroup>
|
||||
<Target Name="CopyDllsToLib" AfterTargets="Build">
|
||||
<MakeDir Directories="$(OutputPath)lib" />
|
||||
<Copy SourceFiles="@(ReferenceCopyLocalPaths)" DestinationFolder="$(OutputPath)lib" SkipUnchangedFiles="true" />
|
||||
</Target>
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
<!-- Left: Icon + Title -->
|
||||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="10,0,0,0">
|
||||
<Image Source="/a23ae8c4c6863364165637fb70679eb3.ico" Width="20" Height="20" Margin="0,0,10,0"/>
|
||||
<Image Source="/A1/a23ae8c4c6863364165637fb70679eb3.ico" Width="20" Height="20" Margin="0,0,10,0"/>
|
||||
<TextBlock Text="Lithium" Foreground="White" VerticalAlignment="Center" FontSize="14" FontWeight="SemiBold"/>
|
||||
</StackPanel>
|
||||
|
||||
|
||||
+65
-73
@@ -7,10 +7,7 @@ namespace Lua
|
||||
{
|
||||
static class OperatorSets
|
||||
{
|
||||
// ======================================================
|
||||
// DATA TABLES
|
||||
// ======================================================
|
||||
|
||||
// Data tables
|
||||
public static Dictionary<string, (double recoilX, double recoilY)> attackers =
|
||||
new Dictionary<string, (double, double)>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
@@ -27,9 +24,7 @@ namespace Lua
|
||||
public static int currentSetIndex = 0;
|
||||
public static bool onAttackers = true;
|
||||
|
||||
// ======================================================
|
||||
// ONLINE CONFIG URL
|
||||
// ======================================================
|
||||
// Online config URL
|
||||
private static string OnlineConfigUrl =>
|
||||
string.IsNullOrEmpty(ConfigLoader.userName)
|
||||
? null
|
||||
@@ -40,10 +35,7 @@ namespace Lua
|
||||
? null
|
||||
: $"https://jj.giggity.gay/exindex.html?name={Uri.EscapeDataString(ConfigLoader.userName)}";
|
||||
|
||||
// ======================================================
|
||||
// CURRENT SET + CURRENT OPERATOR
|
||||
// ======================================================
|
||||
|
||||
// Current set + current operator
|
||||
public static string CurrentSet
|
||||
{
|
||||
get
|
||||
@@ -59,11 +51,10 @@ namespace Lua
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(_currentOperator) &&
|
||||
mergedSets.ContainsKey(_currentOperator))
|
||||
if (!string.IsNullOrWhiteSpace(_currentOperator) && mergedSets.ContainsKey(_currentOperator))
|
||||
return _currentOperator;
|
||||
|
||||
return CurrentSet; // fallback
|
||||
return CurrentSet; // Fallback
|
||||
}
|
||||
set
|
||||
{
|
||||
@@ -72,9 +63,7 @@ namespace Lua
|
||||
}
|
||||
}
|
||||
|
||||
// ======================================================
|
||||
// GET CURRENT RECOIL
|
||||
// ======================================================
|
||||
// Get current recoil
|
||||
public static (double recoilX, double recoilY) GetCurrentRecoil()
|
||||
{
|
||||
string op = CurrentOperator;
|
||||
@@ -88,9 +77,7 @@ namespace Lua
|
||||
return (0, 0);
|
||||
}
|
||||
|
||||
// ======================================================
|
||||
// LOAD CONFIG
|
||||
// ======================================================
|
||||
// Load config
|
||||
public static void LoadOperatorSets(bool allowOnlineFetch = true)
|
||||
{
|
||||
attackers.Clear();
|
||||
@@ -100,7 +87,7 @@ namespace Lua
|
||||
|
||||
var allLines = new List<string>();
|
||||
|
||||
// ---------- ONLINE ----------
|
||||
// Online fetch
|
||||
if (allowOnlineFetch && !string.IsNullOrEmpty(OnlineConfigUrl))
|
||||
{
|
||||
try
|
||||
@@ -112,18 +99,18 @@ namespace Lua
|
||||
allLines.AddRange(txt.Split('\n'));
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
catch { /* Ignore online fetch errors */ }
|
||||
}
|
||||
|
||||
// ---------- LOCAL ----------
|
||||
// Local config
|
||||
var local = Helper.ReadLinesSafe("config.txt");
|
||||
if (local != null && local.Length > 0)
|
||||
allLines.AddRange(local);
|
||||
|
||||
bool inAtk = false;
|
||||
bool inDef = false;
|
||||
bool inAttackers = false;
|
||||
bool inDefenders = false;
|
||||
|
||||
// ---------- PARSE ----------
|
||||
// Parse lines
|
||||
foreach (var raw in allLines)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(raw)) continue;
|
||||
@@ -132,22 +119,34 @@ namespace Lua
|
||||
if (line.StartsWith("--") || line.StartsWith("#")) continue;
|
||||
|
||||
if (line.StartsWith("attackers", StringComparison.OrdinalIgnoreCase))
|
||||
{ inAtk = true; inDef = false; continue; }
|
||||
{
|
||||
inAttackers = true;
|
||||
inDefenders = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (line.StartsWith("defenders", StringComparison.OrdinalIgnoreCase))
|
||||
{ inAtk = false; inDef = true; continue; }
|
||||
{
|
||||
inAttackers = false;
|
||||
inDefenders = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (line == "}" || line == "]," || line == "],")
|
||||
{ inAtk = false; inDef = false; continue; }
|
||||
{
|
||||
inAttackers = false;
|
||||
inDefenders = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Helper.TryParseRecoilLine(line, out var name, out var x, out var y))
|
||||
{
|
||||
if (inAtk)
|
||||
if (inAttackers)
|
||||
{
|
||||
attackers[name] = (x, y);
|
||||
attackerNames.Add(name);
|
||||
}
|
||||
else if (inDef)
|
||||
else if (inDefenders)
|
||||
{
|
||||
defenders[name] = (x, y);
|
||||
defenderNames.Add(name);
|
||||
@@ -162,9 +161,7 @@ namespace Lua
|
||||
CurrentOperator = CurrentSet;
|
||||
}
|
||||
|
||||
// ======================================================
|
||||
// MERGE
|
||||
// ======================================================
|
||||
// Merge sets
|
||||
public static void MergeSets()
|
||||
{
|
||||
if (ConfigLoader.betaTest)
|
||||
@@ -192,22 +189,21 @@ namespace Lua
|
||||
currentSetIndex = Helper.SafeClampIndex(currentSetIndex, setNames.Count);
|
||||
}
|
||||
|
||||
// ======================================================
|
||||
// RESTORE
|
||||
// ======================================================
|
||||
// Restore set
|
||||
public static void RestoreSet(string oldSet)
|
||||
{
|
||||
if (setNames.Count == 0) { currentSetIndex = 0; return; }
|
||||
if (setNames.Count == 0)
|
||||
{
|
||||
currentSetIndex = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
int idx = setNames.FindIndex(s => string.Equals(s, oldSet, StringComparison.OrdinalIgnoreCase));
|
||||
currentSetIndex = idx >= 0 ? idx : 0;
|
||||
|
||||
CurrentOperator = CurrentSet;
|
||||
}
|
||||
|
||||
// ======================================================
|
||||
// SWITCH SIDE
|
||||
// ======================================================
|
||||
// Switch side
|
||||
public static void SwitchSide()
|
||||
{
|
||||
if (ConfigLoader.betaTest) return;
|
||||
@@ -217,9 +213,7 @@ namespace Lua
|
||||
RestoreFavorites();
|
||||
}
|
||||
|
||||
// ======================================================
|
||||
// CYCLING
|
||||
// ======================================================
|
||||
// Cycling
|
||||
public static void NextSet()
|
||||
{
|
||||
if (setNames.Count == 0) return;
|
||||
@@ -243,19 +237,19 @@ namespace Lua
|
||||
int idx = setNames.FindIndex(s => string.Equals(s, name, StringComparison.OrdinalIgnoreCase));
|
||||
if (idx >= 0)
|
||||
{
|
||||
currentSetIndex = idx; // set the current operator index
|
||||
CurrentOperator = CurrentSet; // update CurrentOperator
|
||||
currentSetIndex = idx;
|
||||
CurrentOperator = CurrentSet;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ======================================================
|
||||
// FAVORITES
|
||||
// ======================================================
|
||||
// Favorites
|
||||
private static void RestoreFavorites()
|
||||
{
|
||||
if (setNames.Count == 0) { currentSetIndex = 0; return; }
|
||||
if (setNames.Count == 0)
|
||||
{
|
||||
currentSetIndex = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (ConfigLoader.betaTest)
|
||||
{
|
||||
@@ -276,32 +270,30 @@ namespace Lua
|
||||
CurrentOperator = CurrentSet;
|
||||
return;
|
||||
}
|
||||
|
||||
currentSetIndex = 0;
|
||||
CurrentOperator = CurrentSet;
|
||||
return;
|
||||
}
|
||||
|
||||
if (onAttackers && !string.IsNullOrEmpty(ConfigLoader.favoriteAttackers) &&
|
||||
setNames.Contains(ConfigLoader.favoriteAttackers, StringComparer.OrdinalIgnoreCase))
|
||||
else
|
||||
{
|
||||
currentSetIndex = setNames.FindIndex(s =>
|
||||
string.Equals(s, ConfigLoader.favoriteAttackers, StringComparison.OrdinalIgnoreCase));
|
||||
CurrentOperator = CurrentSet;
|
||||
return;
|
||||
}
|
||||
if (onAttackers && !string.IsNullOrEmpty(ConfigLoader.favoriteAttackers) &&
|
||||
setNames.Contains(ConfigLoader.favoriteAttackers, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
currentSetIndex = setNames.FindIndex(s =>
|
||||
string.Equals(s, ConfigLoader.favoriteAttackers, StringComparison.OrdinalIgnoreCase));
|
||||
CurrentOperator = CurrentSet;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!onAttackers && !string.IsNullOrEmpty(ConfigLoader.favoriteDefenders) &&
|
||||
setNames.Contains(ConfigLoader.favoriteDefenders, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
currentSetIndex = setNames.FindIndex(s =>
|
||||
string.Equals(s, ConfigLoader.favoriteDefenders, StringComparison.OrdinalIgnoreCase));
|
||||
CurrentOperator = CurrentSet;
|
||||
return;
|
||||
if (!onAttackers && !string.IsNullOrEmpty(ConfigLoader.favoriteDefenders) &&
|
||||
setNames.Contains(ConfigLoader.favoriteDefenders, StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
currentSetIndex = setNames.FindIndex(s =>
|
||||
string.Equals(s, ConfigLoader.favoriteDefenders, StringComparison.OrdinalIgnoreCase));
|
||||
CurrentOperator = CurrentSet;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
currentSetIndex = 0;
|
||||
CurrentOperator = CurrentSet;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,102 +0,0 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
||||
namespace Lua
|
||||
{
|
||||
static class RecoilControl
|
||||
{
|
||||
const int VK_LBUTTON = 0x01;
|
||||
const int VK_RBUTTON = 0x02;
|
||||
|
||||
static Random rng = new Random();
|
||||
|
||||
static bool jitterActive = false;
|
||||
static int jitterStart = 0;
|
||||
static int lastJitterEnd = 0;
|
||||
|
||||
static double remX, remY;
|
||||
static double jitterMultX, jitterMultY;
|
||||
|
||||
public static void RecoilLoop()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
if (Utils.IsCapsLockOn() && Utils.IsPressed(VK_RBUTTON))
|
||||
{
|
||||
HandleRecoilTick();
|
||||
}
|
||||
else
|
||||
{
|
||||
remX = remY = 0;
|
||||
jitterActive = false;
|
||||
}
|
||||
|
||||
Thread.Sleep(2);
|
||||
}
|
||||
}
|
||||
|
||||
private static void HandleRecoilTick()
|
||||
{
|
||||
if (!Utils.IsPressed(VK_LBUTTON))
|
||||
return;
|
||||
|
||||
string setName = OperatorSets.CurrentSet;
|
||||
|
||||
if (!OperatorSets.mergedSets.TryGetValue(setName, out var recoil))
|
||||
return;
|
||||
|
||||
int now = Environment.TickCount;
|
||||
|
||||
// Jitter
|
||||
if (ConfigLoader.jitterEnabled)
|
||||
{
|
||||
if (!jitterActive && now - lastJitterEnd >= ConfigLoader.jitterCooldown)
|
||||
{
|
||||
jitterActive = true;
|
||||
jitterStart = now;
|
||||
|
||||
double strength = 0.1 + rng.NextDouble() * 0.8;
|
||||
jitterMultX = jitterMultY = 0;
|
||||
|
||||
switch (rng.Next(1, 5))
|
||||
{
|
||||
case 1: jitterMultX = -strength; break;
|
||||
case 2: jitterMultX = strength; break;
|
||||
case 3: jitterMultY = -strength; break;
|
||||
case 4: jitterMultY = strength; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (jitterActive && now - jitterStart >= ConfigLoader.jitterBurstTime)
|
||||
{
|
||||
jitterActive = false;
|
||||
lastJitterEnd = now;
|
||||
jitterMultX = jitterMultY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate precise movement with remainder tracking
|
||||
double jitterX = recoil.recoilX * jitterMultX;
|
||||
double jitterY = recoil.recoilY * jitterMultY;
|
||||
|
||||
double moveX = recoil.recoilX + remX + jitterX;
|
||||
double moveY = recoil.recoilY + remY + jitterY;
|
||||
|
||||
// Optional scaling for fine-tuning
|
||||
if (ConfigLoader.debitFlag1)
|
||||
{
|
||||
moveX *= 1.282;
|
||||
moveY *= 1.351;
|
||||
}
|
||||
|
||||
int ix = (int)Math.Round(moveX);
|
||||
int iy = (int)Math.Round(moveY);
|
||||
|
||||
// Store remainder for next tick (Ricoh-style smoothness)
|
||||
remX = moveX - ix;
|
||||
remY = moveY - iy;
|
||||
|
||||
Utils.MoveMouse(ix, iy);
|
||||
}
|
||||
}
|
||||
}
|
||||
+32
-34
@@ -8,12 +8,12 @@ namespace Lua
|
||||
private const int VK_LBUTTON = 0x01;
|
||||
private const int VK_RBUTTON = 0x02;
|
||||
|
||||
private static Random rng = new Random();
|
||||
private static bool jitterActive = false;
|
||||
private static int jitterStart = 0;
|
||||
private static int lastJitterEnd = 0;
|
||||
private static double remX, remY;
|
||||
private static double jitterMultX, jitterMultY;
|
||||
private static readonly Random _rng = new Random();
|
||||
private static bool _jitterActive = false;
|
||||
private static int _jitterStart = 0;
|
||||
private static int _lastJitterEnd = 0;
|
||||
private static double _remainderX, _remainderY;
|
||||
private static double _jitterMultiplierX, _jitterMultiplierY;
|
||||
|
||||
public static void Start()
|
||||
{
|
||||
@@ -25,8 +25,8 @@ namespace Lua
|
||||
}
|
||||
else
|
||||
{
|
||||
remX = remY = 0;
|
||||
jitterActive = false;
|
||||
_remainderX = _remainderY = 0;
|
||||
_jitterActive = false;
|
||||
}
|
||||
Thread.Sleep(2);
|
||||
}
|
||||
@@ -34,57 +34,55 @@ namespace Lua
|
||||
|
||||
private static void HandleRecoilTick()
|
||||
{
|
||||
if (!Utils.IsPressed(VK_LBUTTON))
|
||||
return;
|
||||
if (!Utils.IsPressed(VK_LBUTTON)) return;
|
||||
|
||||
string setName = OperatorSets.CurrentSet;
|
||||
|
||||
if (!OperatorSets.mergedSets.TryGetValue(setName, out var recoil))
|
||||
return;
|
||||
if (!OperatorSets.mergedSets.TryGetValue(setName, out var recoil)) return;
|
||||
|
||||
int now = Environment.TickCount;
|
||||
|
||||
HandleJitter(now);
|
||||
ApplyRecoil(recoil, now);
|
||||
ApplyRecoil(recoil);
|
||||
}
|
||||
|
||||
private static void HandleJitter(int now)
|
||||
{
|
||||
if (ConfigLoader.jitterEnabled)
|
||||
{
|
||||
if (!jitterActive && now - lastJitterEnd >= ConfigLoader.jitterCooldown)
|
||||
if (!_jitterActive && now - _lastJitterEnd >= ConfigLoader.jitterCooldown)
|
||||
{
|
||||
jitterActive = true;
|
||||
jitterStart = now;
|
||||
_jitterActive = true;
|
||||
_jitterStart = now;
|
||||
|
||||
double strength = 0.1 + rng.NextDouble() * 0.8;
|
||||
jitterMultX = jitterMultY = 0;
|
||||
double strength = 0.1 + _rng.NextDouble() * 0.8;
|
||||
_jitterMultiplierX = _jitterMultiplierY = 0;
|
||||
|
||||
switch (rng.Next(1, 5))
|
||||
switch (_rng.Next(1, 5))
|
||||
{
|
||||
case 1: jitterMultX = -strength; break;
|
||||
case 2: jitterMultX = strength; break;
|
||||
case 3: jitterMultY = -strength; break;
|
||||
case 4: jitterMultY = strength; break;
|
||||
case 1: _jitterMultiplierX = -strength; break;
|
||||
case 2: _jitterMultiplierX = strength; break;
|
||||
case 3: _jitterMultiplierY = -strength; break;
|
||||
case 4: _jitterMultiplierY = strength; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (jitterActive && now - jitterStart >= ConfigLoader.jitterBurstTime)
|
||||
if (_jitterActive && now - _jitterStart >= ConfigLoader.jitterBurstTime)
|
||||
{
|
||||
jitterActive = false;
|
||||
lastJitterEnd = now;
|
||||
jitterMultX = jitterMultY = 0;
|
||||
_jitterActive = false;
|
||||
_lastJitterEnd = now;
|
||||
_jitterMultiplierX = _jitterMultiplierY = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void ApplyRecoil((double recoilX, double recoilY) recoil, int now)
|
||||
private static void ApplyRecoil((double recoilX, double recoilY) recoil)
|
||||
{
|
||||
double jitterX = recoil.recoilX * jitterMultX;
|
||||
double jitterY = recoil.recoilY * jitterMultY;
|
||||
double jitterX = recoil.recoilX * _jitterMultiplierX;
|
||||
double jitterY = recoil.recoilY * _jitterMultiplierY;
|
||||
|
||||
double moveX = recoil.recoilX + remX + jitterX;
|
||||
double moveY = recoil.recoilY + remY + jitterY;
|
||||
double moveX = recoil.recoilX + _remainderX + jitterX;
|
||||
double moveY = recoil.recoilY + _remainderY + jitterY;
|
||||
|
||||
if (ConfigLoader.debitFlag1)
|
||||
{
|
||||
@@ -95,8 +93,8 @@ namespace Lua
|
||||
int ix = (int)Math.Round(moveX);
|
||||
int iy = (int)Math.Round(moveY);
|
||||
|
||||
remX = moveX - ix;
|
||||
remY = moveY - iy;
|
||||
_remainderX = moveX - ix;
|
||||
_remainderY = moveY - iy;
|
||||
|
||||
Utils.MoveMouse(ix, iy);
|
||||
}
|
||||
|
||||
+15
-9
@@ -10,17 +10,23 @@ namespace Lua
|
||||
public static readonly SpeechSynthesizer Tts = new SpeechSynthesizer();
|
||||
private static readonly object TtsLock = new object();
|
||||
|
||||
[DllImport("user32.dll")] public static extern short GetAsyncKeyState(int vKey);
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern short GetKeyState(int keyCode);
|
||||
[DllImport("user32.dll")] public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, UIntPtr dwExtraInfo);
|
||||
[DllImport("user32.dll")]
|
||||
public static extern short GetAsyncKeyState(int vKey);
|
||||
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
|
||||
public static extern short GetKeyState(int keyCode);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, UIntPtr dwExtraInfo);
|
||||
|
||||
public const uint MOUSEEVENTF_MOVE = 0x0001;
|
||||
|
||||
private const int VK_CAPITAL = 0x14;
|
||||
private static bool previousCapsState;
|
||||
private static bool _previousCapsState;
|
||||
|
||||
public static void InitializeCapsState()
|
||||
{
|
||||
previousCapsState = IsCapsLockOn();
|
||||
_previousCapsState = IsCapsLockOn();
|
||||
}
|
||||
|
||||
public static bool IsPressed(int vKey) => (GetAsyncKeyState(vKey) & 0x8000) != 0;
|
||||
@@ -38,7 +44,7 @@ namespace Lua
|
||||
Tts.SpeakAsyncCancelAll();
|
||||
Tts.SpeakAsync(text);
|
||||
}
|
||||
catch { }
|
||||
catch { /* Ignore TTS errors */ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,9 +58,9 @@ namespace Lua
|
||||
public static void CheckCapsLockChange()
|
||||
{
|
||||
bool caps = IsCapsLockOn();
|
||||
if (caps != previousCapsState)
|
||||
if (caps != _previousCapsState)
|
||||
{
|
||||
previousCapsState = caps;
|
||||
_previousCapsState = caps;
|
||||
ShowCapsLockStatus();
|
||||
}
|
||||
}
|
||||
@@ -77,7 +83,7 @@ namespace Lua
|
||||
try
|
||||
{
|
||||
int current = Console.CursorTop;
|
||||
int limit = Console.WindowHeight - 2;
|
||||
int limit = Console.WindowHeight - 2; // Keep 2-row buffer
|
||||
|
||||
if (current >= limit)
|
||||
{
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
attackers = {
|
||||
["Deimos"] = { recoilX = -0.19, recoilY = 0.89 },
|
||||
["Jackal"] = { recoilX = -0.1, recoilY = 1 },
|
||||
}
|
||||
|
||||
defenders = {
|
||||
["Doc/Rook"] = { recoilX = -0.1, recoilY = 1 },
|
||||
["Goyo/Mira"] = { recoilX = -0.05, recoilY = 1.45 },
|
||||
["Thunderbird"] = { recoilX = -0.13, recoilY = 1.3 },
|
||||
}
|
||||
Binary file not shown.
-5
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"description" : "AutoLaunch Protocols Preregistration",
|
||||
"name" : "Protocol Preregistration",
|
||||
"version" : "1.0.0.10"
|
||||
}
|
||||
-119
@@ -1,119 +0,0 @@
|
||||
{
|
||||
"allow": [
|
||||
{
|
||||
"origins": [
|
||||
"https://.get.microsoft.com",
|
||||
"https://.apps.microsoft.com"
|
||||
],
|
||||
"protocol": "ms-windows-store"
|
||||
},
|
||||
{
|
||||
"origins": [
|
||||
"https://.onedrive.com",
|
||||
"https://.onedrive.live.com",
|
||||
"https://sharepoint.com"
|
||||
],
|
||||
"protocol": "ms-word"
|
||||
},
|
||||
{
|
||||
"origins": [
|
||||
"https://[a-z1-9-]*word-edit.officeapps.live.com",
|
||||
"https://[a-z1-9-]*word-view.officeapps.live.com",
|
||||
"https://[a-z1-9-]*onenote.officeapps.live.com",
|
||||
"https://[a-z1-9-]*eap.officeapps.live.com",
|
||||
"https://[a-z1-9-]*shared.officeapps.live.com",
|
||||
"https://[a-z1-9-]*afhs.officeapps.live.com",
|
||||
"https://[a-z1-9-]*vhs.officeapps.live.com",
|
||||
"https://[a-z1-9-]*optin.online.office.com"
|
||||
],
|
||||
"use_regex": true,
|
||||
"protocol": "ms-word"
|
||||
},
|
||||
{
|
||||
"origins": [
|
||||
"https://.onedrive.com",
|
||||
"https://.onedrive.live.com",
|
||||
"https://sharepoint.com"
|
||||
],
|
||||
"protocol": "ms-excel"
|
||||
},
|
||||
{
|
||||
"origins": [
|
||||
"https://[a-z1-9-]*excel.officeapps.live.com",
|
||||
"https://[a-z1-9-]*onenote.officeapps.live.com",
|
||||
"https://[a-z1-9-]*eap.officeapps.live.com",
|
||||
"https://[a-z1-9-]*shared.officeapps.live.com",
|
||||
"https://[a-z1-9-]*afhs.officeapps.live.com",
|
||||
"https://[a-z1-9-]*vhs.officeapps.live.com",
|
||||
"https://[a-z1-9-]*optin.online.office.com"
|
||||
],
|
||||
"use_regex": true,
|
||||
"protocol": "ms-excel"
|
||||
},
|
||||
{
|
||||
"origins": [
|
||||
"https://.onedrive.com",
|
||||
"https://.onedrive.live.com",
|
||||
"https://sharepoint.com"
|
||||
],
|
||||
"protocol": "ms-powerpoint"
|
||||
},
|
||||
{
|
||||
"origins": [
|
||||
"https://[a-z1-9-]*powerpoint.officeapps.live.com",
|
||||
"https://[a-z1-9-]*onenote.officeapps.live.com",
|
||||
"https://[a-z1-9-]*eap.officeapps.live.com",
|
||||
"https://[a-z1-9-]*shared.officeapps.live.com",
|
||||
"https://[a-z1-9-]*afhs.officeapps.live.com",
|
||||
"https://[a-z1-9-]*vhs.officeapps.live.com",
|
||||
"https://[a-z1-9-]*optin.online.office.com"
|
||||
],
|
||||
"use_regex": true,
|
||||
"protocol": "ms-powerpoint"
|
||||
},
|
||||
{
|
||||
"origins": [
|
||||
"https://.onedrive.com",
|
||||
"https://.onedrive.live.com",
|
||||
"https://sharepoint.com"
|
||||
],
|
||||
"protocol": "ms-visio"
|
||||
},
|
||||
{
|
||||
"origins": [
|
||||
"https://[a-z1-9-]*visio.officeapps.live.com",
|
||||
"https://[a-z1-9-]*onenote.officeapps.live.com",
|
||||
"https://[a-z1-9-]*eap.officeapps.live.com",
|
||||
"https://[a-z1-9-]*shared.officeapps.live.com",
|
||||
"https://[a-z1-9-]*afhs.officeapps.live.com",
|
||||
"https://[a-z1-9-]*vhs.officeapps.live.com",
|
||||
"https://[a-z1-9-]*optin.online.office.com"
|
||||
],
|
||||
"use_regex": true,
|
||||
"protocol": "ms-visio"
|
||||
},
|
||||
{
|
||||
"origins": [
|
||||
"https://www.microsoft.com",
|
||||
"https://copilot.microsoft.com"
|
||||
],
|
||||
"protocol": "ms-copilot"
|
||||
}
|
||||
],
|
||||
"warn": [
|
||||
{
|
||||
"origins": [
|
||||
"*"
|
||||
],
|
||||
"protocol": "ms-test-warn"
|
||||
}
|
||||
],
|
||||
"block": [
|
||||
{
|
||||
"origins": [
|
||||
"*"
|
||||
],
|
||||
"protocol": "ms-test-block"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
0:00:00 Microsoft.NewBrowser_Popup
|
||||
0:00:00 Microsoft.BrowserList.AddBrowser
|
||||
0:00:00 Browser1 Insert active Tab1 at 0
|
||||
0:00:00 Tab1 StartNav1 #auto_toplevel
|
||||
0:00:00 Tab1 StartNav2 #typed
|
||||
0:00:00 Tab1 FinishNav1
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:11:19 Microsoft.UnloadController.IsUnclosableApp_IsNotWebApp
|
||||
0:00:00 Startup
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpEphemeralProfiles
|
||||
0:00:00 Microsoft.DeleteProfileHelper.CleanUpDeletedProfiles
|
||||
0:00:00 Microsoft.NewBrowser_Popup
|
||||
0:00:00 Microsoft.BrowserList.AddBrowser
|
||||
0:00:00 Browser1 Insert active Tab1 at 0
|
||||
0:00:00 Tab1 StartNav1 #auto_toplevel
|
||||
0:00:00 Tab1 StartNav2 #typed
|
||||
0:00:00 Tab1 FinishNav1
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:00:00 Tab1 FinishNav2
|
||||
0:00:00 Tab1 PageLoad
|
||||
0:00:01 Memory Pressure: Critical
|
||||
0:00:05 Memory Pressure: Critical
|
||||
0:00:20 Memory Pressure: Critical
|
||||
0:00:35 Memory Pressure: Critical
|
||||
0:00:45 Memory Pressure: Critical
|
||||
0:00:55 Memory Pressure: Critical
|
||||
0:01:00 Microsoft.UnloadController.IsUnclosableApp_IsNotWebApp
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
-5
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"description": "Microsoft CRLSet",
|
||||
"name": "MicrosoftCRLSet",
|
||||
"version": "6498.2025.9.4"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
||||
1
|
||||
@@ -1 +0,0 @@
|
||||
level=none expiry=0
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,2 +0,0 @@
|
||||
{
|
||||
}
|
||||
Binary file not shown.
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"epochs": [ {
|
||||
"calculation_time": "13408303630341617",
|
||||
"config_version": 0,
|
||||
"model_version": "0",
|
||||
"padded_top_topics_start_index": 0,
|
||||
"taxonomy_version": 0,
|
||||
"top_topics_and_observing_domains": [ ]
|
||||
} ],
|
||||
"hex_encoded_hmac_key": "DD3F99B10E966FB56BB27756D6CDEA15A3CF01A5C3F726FFE1A5D6722F72B652",
|
||||
"next_scheduled_calculation_time": "13408908430341785"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 86 KiB |
Binary file not shown.
@@ -1 +0,0 @@
|
||||
婁<M
|
||||
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
||||
MANIFEST-000001
|
||||
@@ -1,3 +0,0 @@
|
||||
2025/11/22-12:11:42.866 4448 Reusing MANIFEST D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension Rules/MANIFEST-000001
|
||||
2025/11/22-12:11:42.867 4448 Recovering log #3
|
||||
2025/11/22-12:11:42.868 4448 Reusing old log D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension Rules/000003.log
|
||||
@@ -1,3 +0,0 @@
|
||||
2025/11/22-12:08:22.467 6294 Reusing MANIFEST D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension Rules/MANIFEST-000001
|
||||
2025/11/22-12:08:22.468 6294 Recovering log #3
|
||||
2025/11/22-12:08:22.468 6294 Reusing old log D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension Rules/000003.log
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
MANIFEST-000001
|
||||
@@ -1,3 +0,0 @@
|
||||
2025/11/22-12:11:42.875 4448 Reusing MANIFEST D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension Scripts/MANIFEST-000001
|
||||
2025/11/22-12:11:42.876 4448 Recovering log #3
|
||||
2025/11/22-12:11:42.876 4448 Reusing old log D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension Scripts/000003.log
|
||||
@@ -1,3 +0,0 @@
|
||||
2025/11/22-12:08:22.471 6294 Reusing MANIFEST D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension Scripts/MANIFEST-000001
|
||||
2025/11/22-12:08:22.472 6294 Recovering log #3
|
||||
2025/11/22-12:08:22.472 6294 Reusing old log D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension Scripts/000003.log
|
||||
BIN
Binary file not shown.
@@ -1 +0,0 @@
|
||||
MANIFEST-000001
|
||||
@@ -1,3 +0,0 @@
|
||||
2025/11/22-12:39:29.368 36c8 Reusing MANIFEST D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
|
||||
2025/11/22-12:39:29.369 36c8 Recovering log #3
|
||||
2025/11/22-12:39:29.369 36c8 Reusing old log D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension State/000003.log
|
||||
@@ -1,3 +0,0 @@
|
||||
2025/11/22-12:17:26.345 2878 Reusing MANIFEST D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
|
||||
2025/11/22-12:17:26.345 2878 Recovering log #3
|
||||
2025/11/22-12:17:26.346 2878 Reusing old log D:\Pro\Lithium\Lithium\bin\Debug\Lithium.exe.WebView2\EBWebView\Default\Extension State/000003.log
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user