diff --git a/Marsey/Game/Patches/HWID.cs b/Marsey/Game/Patches/HWID.cs index 7eaae03..b3a4a01 100644 --- a/Marsey/Game/Patches/HWID.cs +++ b/Marsey/Game/Patches/HWID.cs @@ -1,4 +1,5 @@ using System.Text; +using System.Text.RegularExpressions; using HarmonyLib; using Marsey.Config; using Marsey.Handbreak; @@ -87,6 +88,11 @@ private static void PatchCalcMethod() ); } + public static bool CheckHWID(string hwid) + { + return Regex.IsMatch(hwid, "^$|^[A-F0-9]{64}$"); + } + private static void RecalcHwid(ref byte[] __result) { string hwidString = BitConverter.ToString(_hwId).Replace("-", ""); diff --git a/SS14.Launcher/ViewModels/MainWindowTabs/OptionsTabViewModel.cs b/SS14.Launcher/ViewModels/MainWindowTabs/OptionsTabViewModel.cs index 230320a..d718ae3 100644 --- a/SS14.Launcher/ViewModels/MainWindowTabs/OptionsTabViewModel.cs +++ b/SS14.Launcher/ViewModels/MainWindowTabs/OptionsTabViewModel.cs @@ -7,7 +7,10 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Input; +using Avalonia.Controls; using Avalonia.Data.Converters; +using Avalonia.Input; +using Avalonia.Media; using DynamicData; using Marsey; using Marsey.Config; @@ -61,6 +64,7 @@ public OptionsTabViewModel() DumpConfigCommand = new RelayCommand(DumpConfig.Dump); Persist.UpdateLauncherConfig(); + SetTempHwid(); } #if RELEASE @@ -271,7 +275,11 @@ public bool FakeRPC public string RPCUsername { get => Cfg.GetCVar(CVars.RPCUsername); - set => _RPCUsername = value; + set + { + Cfg.SetCVar(CVars.RPCUsername, value); + Cfg.CommitConfig(); + } } public bool ForcingHWID @@ -305,17 +313,36 @@ public bool RandHWID } } - private string _HWIdString = ""; - public string HWIdString + private void SetTempHwid() { - get + if (!LIHWIDBind) { - if (!LIHWIDBind) - return Cfg.GetCVar(CVars.ForcedHWId); + _hwidString = Cfg.GetCVar(CVars.ForcedHWId); + return; + } + + _hwidString = _loginManager.ActiveAccount != null ? _loginManager.ActiveAccount.LoginInfo.HWID : ""; + } + + private string _hwidString = ""; + public string HWIdString + { + get => _hwidString; + set => _hwidString = value; + } - return _loginManager.ActiveAccount != null ? _loginManager.ActiveAccount.LoginInfo.HWID : ""; + + // This is cancer, quite literally + // I hate this + private Brush? _hwidTextBoxBorderBrush = new SolidColorBrush(Color.Parse("#FF888888")); + public Brush? HWIDTextBoxBorderBrush + { + get => _hwidTextBoxBorderBrush; + set + { + _hwidTextBoxBorderBrush = value; + OnPropertyChanged(nameof(HWIDTextBoxBorderBrush)); } - set => _HWIdString = value; } private string _GuestUname; @@ -431,43 +458,30 @@ public string Username private void OnSetHWIdClick() { - string hwid = _HWIdString; + Cfg.SetCVar(CVars.ForcedHWId, _hwidString); - // Check if _HWIdString is a valid hex string (allowing empty string) and pad it if necessary - if (Regex.IsMatch(_HWIdString, "^$|^[A-F0-9]{64}$")) // '*' allows for zero or more characters + if (HWID.CheckHWID(_hwidString)) { - if (LIHWIDBind) - { - if (_loginManager.ActiveAccount != null) - { - Log.Debug($"Writing {hwid} to {_loginManager.ActiveAccount.Username}"); - _loginManager.ActiveAccount.LoginInfo.HWID = hwid; - } - } - else - { - Log.Debug($"Writing {hwid} to MarseyConf"); - Cfg.SetCVar(CVars.ForcedHWId, _HWIdString); - Cfg.CommitConfig(); - } - - OnPropertyChanged(nameof(HWIdString)); - return; + HWIDTextBoxBorderBrush = new SolidColorBrush(Color.Parse("#FF888888")); + Cfg.CommitConfig(); + } + else + { + HWIDTextBoxBorderBrush = new SolidColorBrush(Brushes.Red.Color); } - Log.Warning("Passed HWId is not a valid hexadecimal string! Refusing to apply."); + OnPropertyChanged(nameof(HWIdString)); } private void OnSetRPCUsernameClick() { - Cfg.SetCVar(CVars.RPCUsername, _RPCUsername); + Cfg.SetCVar(CVars.RPCUsername, RPCUsername); Cfg.CommitConfig(); } private void OnGenHWIdClick() { string hwid = HWID.GenerateRandom(); - _HWIdString = hwid; HWIdString = hwid; OnSetHWIdClick(); diff --git a/SS14.Launcher/Views/MainWindowTabs/OptionsTabView.xaml b/SS14.Launcher/Views/MainWindowTabs/OptionsTabView.xaml index 5bcb0e3..dc190f5 100644 --- a/SS14.Launcher/Views/MainWindowTabs/OptionsTabView.xaml +++ b/SS14.Launcher/Views/MainWindowTabs/OptionsTabView.xaml @@ -91,7 +91,7 @@ <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center" TextWrapping="NoWrap" Text="Set your username below. This username will be shown in the discord rich presence activity when hovering on the big icon." Margin="8"/> - <TextBox Grid.Row="1" Grid.Column="0" Width="600" MaxWidth="1000" HorizontalAlignment="Left" x:Name="RPCUsernameTextBox" VerticalAlignment="Center" Margin="4" Text="{Binding RPCUsername}"/> + <TextBox Grid.Row="1" Grid.Column="0" Width="600" MaxWidth="1000" HorizontalAlignment="Left" x:Name="RPCUsernameTextBox" VerticalAlignment="Center" Margin="4" Text="{Binding RPCUsername, Mode=TwoWay}" IsEnabled="True" IsReadOnly="False"/> <Button Grid.Row="2" Grid.Column="0" HorizontalAlignment="Left" Content="Set username" Command="{Binding SetRPCUsernameCommand}" VerticalAlignment="Center" Margin="4"/> </Grid> @@ -115,7 +115,8 @@ <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center" TextWrapping="NoWrap" Text="Change your HWID. Can be set to be empty or any hexadecimal string." Margin="8"/> - <TextBox Grid.Row="1" Grid.Column="0" Width="600" MaxWidth="1000" HorizontalAlignment="Left" x:Name="HWIdTextBox" VerticalAlignment="Center" Margin="4" Text="{Binding HWIdString}"/> + <TextBox Grid.Row="1" Grid.Column="0" Width="600" MaxWidth="1000" HorizontalAlignment="Left" BorderBrush="{Binding HWIDTextBoxBorderBrush}" + x:Name="HWIdTextBox" VerticalAlignment="Center" Margin="4" Text="{Binding HWIdString, Mode=TwoWay}"/> <Button Grid.Row="2" Grid.Column="0" HorizontalAlignment="Left" Content="Set HWID" Command="{Binding SetHWIdCommand}" VerticalAlignment="Center" Margin="4"/> <Button Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left" Content="Generate random" Command="{Binding GenHWIdCommand}" VerticalAlignment="Center" Margin="4"/> </Grid>