diff --git a/cs2_chs/Advance.xaml b/cs2_chs/Advance.xaml index 4ab9f58..d0f051a 100644 --- a/cs2_chs/Advance.xaml +++ b/cs2_chs/Advance.xaml @@ -10,6 +10,7 @@ + @@ -23,7 +24,7 @@ - + @@ -32,5 +33,17 @@ + + + + + + + + + + + + diff --git a/cs2_chs/Advance.xaml.cs b/cs2_chs/Advance.xaml.cs index e0579ef..eb02ac1 100644 --- a/cs2_chs/Advance.xaml.cs +++ b/cs2_chs/Advance.xaml.cs @@ -11,6 +11,9 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; +using System.Threading; +using System.Windows.Threading; + namespace cs2_chs { /// @@ -19,10 +22,68 @@ namespace cs2_chs public partial class Advance : Window { public bool enChanged = false; + static public Thread threadRestore; + bool enFaileden = false; + public Advance() { InitializeComponent(); + REASE.IsChecked = false; this.Closing += Window_Closing; + Thread threadExit = new Thread(delegate () + { + while (true) + { + unsafe + { + this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate () + { + if (MainWindow.nID != 0) + IDnPut.Text = Convert.ToString((*(uint*)MainWindow.nID) - 1, 10); + }); + Thread.Sleep(100); + } + } + }); + threadExit.Start(); + + threadRestore = new Thread(delegate () + { + unsafe + { + + while (true) + { + + string loacl = new string((char*)MainWindow.ns_str); + string lobnob = ""; + if (enFaileden) + { + char lob = '\0'; + foreach (char t in loacl) + { + if (t != lob) + { + lobnob += t; + lob = t; + } + } + } + else + { + lobnob = loacl; + //MessageBox.Show(""); + } + this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate () + { + TRAN_OPT.Text = lobnob; + OutPutLog.Text = loacl; + }); + Thread.Sleep(50); + } + } + }); + } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { @@ -55,6 +116,11 @@ namespace cs2_chs OM_TOT.IsEnabled = true; OutPutLog.IsEnabled = true; MainWindow.EndReplace(); + MainWindow.thisPfc.SRC_OUTPUT.IsReadOnly = false; + unsafe + { + (*(bool*)MainWindow.pblockRestoreSrc) = true; + } } else { @@ -62,6 +128,11 @@ namespace cs2_chs OM_TOT.IsEnabled = false; OutPutLog.IsEnabled = false; MainWindow.StartReplace(); + MainWindow.thisPfc.SRC_OUTPUT.IsReadOnly = true; + unsafe + { + (*(bool*)MainWindow.pblockRestoreSrc) = false; + } } MessageBox.Show("👴知道🌶!\n🍋の🐍☞已经应用🌶!\n暴力提取之外的设置将会在下次启动时按照更改后的设置工作。"); } @@ -111,9 +182,18 @@ namespace cs2_chs { unsafe { - string loacl = new string((char*)MainWindow.ns_str); - OutPutLog.Text = loacl; + } } + + private void CheckBox_Checked(object sender, RoutedEventArgs e) + { + enFaileden = true; + } + + private void REASE_Unchecked(object sender, RoutedEventArgs e) + { + enFaileden = false; + } } } diff --git a/cs2_chs/MainWindow.xaml b/cs2_chs/MainWindow.xaml index acb8f15..c10d244 100644 --- a/cs2_chs/MainWindow.xaml +++ b/cs2_chs/MainWindow.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:cs2_chs" mc:Ignorable="d" - Title="Text Controler" Height="200" Width="600" ResizeMode="NoResize" Visibility="Visible" UseLayoutRounding="False"> + Title="Text Controler" Height="284.5" Width="600" ResizeMode="NoResize" Visibility="Visible" UseLayoutRounding="False"> @@ -14,7 +14,7 @@ - + @@ -29,7 +29,7 @@ - - - + + + + + + + + + + + + + + + diff --git a/cs2_chs/MainWindow.xaml.cs b/cs2_chs/MainWindow.xaml.cs index c172dc2..1713086 100644 --- a/cs2_chs/MainWindow.xaml.cs +++ b/cs2_chs/MainWindow.xaml.cs @@ -38,6 +38,7 @@ namespace cs2_chs //TestA public static InitData initdata = new InitData(); public Advance AdvanceSetting = new Advance();//ChangeGToT + public static MainWindow thisPfc; [DllImport("cs2_patch.dll", EntryPoint = "ChangeGToT")] public static extern void ChangeGToT(); @@ -50,12 +51,17 @@ namespace cs2_chs public static extern void StartReplace(); [DllImport("cs2_patch.dll", EntryPoint = "EndReplace")] public static extern void EndReplace(); + [DllImport("Kernel32.dll", EntryPoint = "WaitOnAddress")] + public extern static bool WaitOnAddress(uint Address, uint CompareAddress, uint AddressSize, uint dwMilliseconds); + [DllImport("Kernel32.dll", EntryPoint = "WakeByAddressSingle")] + public extern static void WakeByAddressSingle(uint Address); + [DllImport("Kernel32.dll", EntryPoint = "WaitForSingleObject")] public extern static int WaitForSingleObject(uint hHandle, uint dwMilliseconds); [DllImport("cs2_patch.dll", EntryPoint = "InjectSelfTo")] public static extern uint pStart(string path); [DllImport("cs2_patch.dll", EntryPoint = "CreateDataExport")] - public static extern void CreateData([MarshalAs(UnmanagedType.LPWStr)] string path); + public static extern void CreateData([MarshalAs(UnmanagedType.LPWStr)] string src,[MarshalAs(UnmanagedType.LPWStr)] string path); [DllImport("Kernel32.dll", EntryPoint = "TerminateProcess")] public static extern bool TerminateProcess(uint hThread, uint dwExitCode); [DllImport("Kernel32.dll", EntryPoint = "OpenProcess")] @@ -68,6 +74,8 @@ namespace cs2_chs public static uint ns_str = 0; public static uint ptPid = 0; public static uint ppMode; + public static uint nID; + public static uint pblockRestoreSrc; private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if(this.Visibility != Visibility.Visible){ @@ -105,7 +113,7 @@ namespace cs2_chs // MessageBox.Show(""); TestA(); int hMod = DllTools.GetModuleHandleA("cs2_patch.dll"); - + thisPfc = this; if (!initdata.successedLoad) { MessageBox.Show("error:failed to load Init.xml!","Error!",MessageBoxButton.OK,MessageBoxImage.Error); @@ -126,8 +134,13 @@ namespace cs2_chs AdvanceSetting.AddressEdit.Foreground = new SolidColorBrush(Colors.Black); AdvanceSetting.EnvioMode.IsChecked = initdata.Envio; AdvanceSetting.EnvioMode.Foreground = new SolidColorBrush(Colors.Black); - + pblockRestoreSrc = (uint)DllTools.GetProcAddress(hMod, "blockRestoreSrc"); + unsafe + { + (*(bool*)pblockRestoreSrc) = initdata.Envio; + } + // MessageBox.Show(""); switch (initdata.VioMode) { @@ -148,6 +161,7 @@ namespace cs2_chs AdvanceSetting.OM_GPY.IsEnabled = true; AdvanceSetting.OM_TOT.IsEnabled = true; AdvanceSetting.OutPutLog.IsEnabled = true; + SRC_OUTPUT.IsReadOnly = false; EndReplace(); } else @@ -163,7 +177,8 @@ namespace cs2_chs ms_str = (uint)DllTools.GetProcAddress(hMod, "ms_str"); ns_str = (uint)DllTools.GetProcAddress(hMod, "ns_str"); ptPid = (uint)DllTools.GetProcAddress(hMod, "tPid"); - + nID= (uint)DllTools.GetProcAddress(hMod, "nID"); + Thread threadExit = new Thread(delegate () { WaitForSingleObject(hThread, 0xFFFFFFFF); @@ -173,6 +188,35 @@ namespace cs2_chs }); }); threadExit.Start(); + + Thread thread3 = new Thread(delegate () + { + while (true) + { + + unsafe + { + while (*(bool*)pblockRestoreSrc) + { + // bool aloc = true; + //MessageBox.Show(""); + //WaitOnAddress(pblockRestoreSrc, (uint)&aloc, sizeof(bool), 0xFFFFFFFF); + Thread.Sleep(10); + } + + char* pms_str = (char*)ms_str; + string MsStr = new string(pms_str); + this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate () + { + SRC_OUTPUT.Text = MsStr; + }); + } + Thread.Sleep(50); + } + }); + thread3.Start(); + // MessageBox.Show(""); + Advance.threadRestore.Start(); } private void Grid_MouseUp(object sender, MouseButtonEventArgs e) @@ -187,13 +231,15 @@ namespace cs2_chs Thread thread1 = new Thread(delegate () { string LocalS = ""; + string LocalP = ""; this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate () { LocalS = TEXT_INPUT.Text; + LocalP = SRC_OUTPUT.Text; }); - CreateData(LocalS); + CreateData(LocalP, LocalS); }); - thread1.Start(); + Thread thread2 = new Thread(delegate () { unsafe @@ -204,6 +250,7 @@ namespace cs2_chs apply.IsEnabled = false; PBS.Visibility = Visibility.Visible; }); + *saveProcess = 0; while (*saveProcess != 1) { this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate () @@ -221,6 +268,7 @@ namespace cs2_chs } }); thread2.Start(); + thread1.Start(); } private void Button_Click_1(object sender, RoutedEventArgs e) { diff --git a/cs2_chs/obj/x86/Release/Advance.baml b/cs2_chs/obj/x86/Release/Advance.baml index d54d7dd..46e1403 100644 Binary files a/cs2_chs/obj/x86/Release/Advance.baml and b/cs2_chs/obj/x86/Release/Advance.baml differ diff --git a/cs2_chs/obj/x86/Release/Advance.g.cs b/cs2_chs/obj/x86/Release/Advance.g.cs index 9a5dd9c..37da883 100644 --- a/cs2_chs/obj/x86/Release/Advance.g.cs +++ b/cs2_chs/obj/x86/Release/Advance.g.cs @@ -1,4 +1,4 @@ -#pragma checksum "..\..\..\Advance.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "7023714179C69488DCE97B057C3E8A24BD5443F9A245B9FFE55E6AE4581D23C4" +#pragma checksum "..\..\..\Advance.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "14B36F89504AB322533CA92CB6E5863D180B432811F8A590F6262841788C94E3" //------------------------------------------------------------------------------ // // 此代码由工具生成。 @@ -41,7 +41,7 @@ namespace cs2_chs { public partial class Advance : System.Windows.Window, System.Windows.Markup.IComponentConnector { - #line 14 "..\..\..\Advance.xaml" + #line 15 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.TextBox StartUpEdit; @@ -49,7 +49,7 @@ namespace cs2_chs { #line hidden - #line 22 "..\..\..\Advance.xaml" + #line 23 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.TextBox AddressEdit; @@ -57,7 +57,7 @@ namespace cs2_chs { #line hidden - #line 23 "..\..\..\Advance.xaml" + #line 24 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.CheckBox EnvioMode; @@ -65,7 +65,7 @@ namespace cs2_chs { #line hidden - #line 24 "..\..\..\Advance.xaml" + #line 25 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.RadioButton OM_GPY; @@ -73,7 +73,7 @@ namespace cs2_chs { #line hidden - #line 25 "..\..\..\Advance.xaml" + #line 26 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.RadioButton OM_TOT; @@ -81,13 +81,37 @@ namespace cs2_chs { #line hidden - #line 26 "..\..\..\Advance.xaml" + #line 27 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.TextBox OutPutLog; #line default #line hidden + + #line 37 "..\..\..\Advance.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBox IDnPut; + + #line default + #line hidden + + + #line 38 "..\..\..\Advance.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBox TRAN_OPT; + + #line default + #line hidden + + + #line 47 "..\..\..\Advance.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.CheckBox REASE; + + #line default + #line hidden + private bool _contentLoaded; /// @@ -129,7 +153,7 @@ namespace cs2_chs { case 2: this.StartUpEdit = ((System.Windows.Controls.TextBox)(target)); - #line 14 "..\..\..\Advance.xaml" + #line 15 "..\..\..\Advance.xaml" this.StartUpEdit.TextChanged += new System.Windows.Controls.TextChangedEventHandler(this.StartUpEdit_TextChanged); #line default @@ -137,7 +161,7 @@ namespace cs2_chs { return; case 3: - #line 16 "..\..\..\Advance.xaml" + #line 17 "..\..\..\Advance.xaml" ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.Button_Click); #line default @@ -146,7 +170,7 @@ namespace cs2_chs { case 4: this.AddressEdit = ((System.Windows.Controls.TextBox)(target)); - #line 22 "..\..\..\Advance.xaml" + #line 23 "..\..\..\Advance.xaml" this.AddressEdit.TextChanged += new System.Windows.Controls.TextChangedEventHandler(this.AddressEdit_TextChanged); #line default @@ -155,7 +179,7 @@ namespace cs2_chs { case 5: this.EnvioMode = ((System.Windows.Controls.CheckBox)(target)); - #line 23 "..\..\..\Advance.xaml" + #line 24 "..\..\..\Advance.xaml" this.EnvioMode.Click += new System.Windows.RoutedEventHandler(this.EnvioMode_Click); #line default @@ -164,7 +188,7 @@ namespace cs2_chs { case 6: this.OM_GPY = ((System.Windows.Controls.RadioButton)(target)); - #line 24 "..\..\..\Advance.xaml" + #line 25 "..\..\..\Advance.xaml" this.OM_GPY.Checked += new System.Windows.RoutedEventHandler(this.OM_GPY_Checked); #line default @@ -173,7 +197,7 @@ namespace cs2_chs { case 7: this.OM_TOT = ((System.Windows.Controls.RadioButton)(target)); - #line 25 "..\..\..\Advance.xaml" + #line 26 "..\..\..\Advance.xaml" this.OM_TOT.Checked += new System.Windows.RoutedEventHandler(this.OM_TOT_Checked); #line default @@ -182,6 +206,27 @@ namespace cs2_chs { case 8: this.OutPutLog = ((System.Windows.Controls.TextBox)(target)); return; + case 9: + this.IDnPut = ((System.Windows.Controls.TextBox)(target)); + return; + case 10: + this.TRAN_OPT = ((System.Windows.Controls.TextBox)(target)); + return; + case 11: + this.REASE = ((System.Windows.Controls.CheckBox)(target)); + + #line 47 "..\..\..\Advance.xaml" + this.REASE.Checked += new System.Windows.RoutedEventHandler(this.CheckBox_Checked); + + #line default + #line hidden + + #line 47 "..\..\..\Advance.xaml" + this.REASE.Unchecked += new System.Windows.RoutedEventHandler(this.REASE_Unchecked); + + #line default + #line hidden + return; } this._contentLoaded = true; } diff --git a/cs2_chs/obj/x86/Release/Advance.g.i.cs b/cs2_chs/obj/x86/Release/Advance.g.i.cs index 9a5dd9c..37da883 100644 --- a/cs2_chs/obj/x86/Release/Advance.g.i.cs +++ b/cs2_chs/obj/x86/Release/Advance.g.i.cs @@ -1,4 +1,4 @@ -#pragma checksum "..\..\..\Advance.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "7023714179C69488DCE97B057C3E8A24BD5443F9A245B9FFE55E6AE4581D23C4" +#pragma checksum "..\..\..\Advance.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "14B36F89504AB322533CA92CB6E5863D180B432811F8A590F6262841788C94E3" //------------------------------------------------------------------------------ // // 此代码由工具生成。 @@ -41,7 +41,7 @@ namespace cs2_chs { public partial class Advance : System.Windows.Window, System.Windows.Markup.IComponentConnector { - #line 14 "..\..\..\Advance.xaml" + #line 15 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.TextBox StartUpEdit; @@ -49,7 +49,7 @@ namespace cs2_chs { #line hidden - #line 22 "..\..\..\Advance.xaml" + #line 23 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.TextBox AddressEdit; @@ -57,7 +57,7 @@ namespace cs2_chs { #line hidden - #line 23 "..\..\..\Advance.xaml" + #line 24 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.CheckBox EnvioMode; @@ -65,7 +65,7 @@ namespace cs2_chs { #line hidden - #line 24 "..\..\..\Advance.xaml" + #line 25 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.RadioButton OM_GPY; @@ -73,7 +73,7 @@ namespace cs2_chs { #line hidden - #line 25 "..\..\..\Advance.xaml" + #line 26 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.RadioButton OM_TOT; @@ -81,13 +81,37 @@ namespace cs2_chs { #line hidden - #line 26 "..\..\..\Advance.xaml" + #line 27 "..\..\..\Advance.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.TextBox OutPutLog; #line default #line hidden + + #line 37 "..\..\..\Advance.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBox IDnPut; + + #line default + #line hidden + + + #line 38 "..\..\..\Advance.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBox TRAN_OPT; + + #line default + #line hidden + + + #line 47 "..\..\..\Advance.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.CheckBox REASE; + + #line default + #line hidden + private bool _contentLoaded; /// @@ -129,7 +153,7 @@ namespace cs2_chs { case 2: this.StartUpEdit = ((System.Windows.Controls.TextBox)(target)); - #line 14 "..\..\..\Advance.xaml" + #line 15 "..\..\..\Advance.xaml" this.StartUpEdit.TextChanged += new System.Windows.Controls.TextChangedEventHandler(this.StartUpEdit_TextChanged); #line default @@ -137,7 +161,7 @@ namespace cs2_chs { return; case 3: - #line 16 "..\..\..\Advance.xaml" + #line 17 "..\..\..\Advance.xaml" ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.Button_Click); #line default @@ -146,7 +170,7 @@ namespace cs2_chs { case 4: this.AddressEdit = ((System.Windows.Controls.TextBox)(target)); - #line 22 "..\..\..\Advance.xaml" + #line 23 "..\..\..\Advance.xaml" this.AddressEdit.TextChanged += new System.Windows.Controls.TextChangedEventHandler(this.AddressEdit_TextChanged); #line default @@ -155,7 +179,7 @@ namespace cs2_chs { case 5: this.EnvioMode = ((System.Windows.Controls.CheckBox)(target)); - #line 23 "..\..\..\Advance.xaml" + #line 24 "..\..\..\Advance.xaml" this.EnvioMode.Click += new System.Windows.RoutedEventHandler(this.EnvioMode_Click); #line default @@ -164,7 +188,7 @@ namespace cs2_chs { case 6: this.OM_GPY = ((System.Windows.Controls.RadioButton)(target)); - #line 24 "..\..\..\Advance.xaml" + #line 25 "..\..\..\Advance.xaml" this.OM_GPY.Checked += new System.Windows.RoutedEventHandler(this.OM_GPY_Checked); #line default @@ -173,7 +197,7 @@ namespace cs2_chs { case 7: this.OM_TOT = ((System.Windows.Controls.RadioButton)(target)); - #line 25 "..\..\..\Advance.xaml" + #line 26 "..\..\..\Advance.xaml" this.OM_TOT.Checked += new System.Windows.RoutedEventHandler(this.OM_TOT_Checked); #line default @@ -182,6 +206,27 @@ namespace cs2_chs { case 8: this.OutPutLog = ((System.Windows.Controls.TextBox)(target)); return; + case 9: + this.IDnPut = ((System.Windows.Controls.TextBox)(target)); + return; + case 10: + this.TRAN_OPT = ((System.Windows.Controls.TextBox)(target)); + return; + case 11: + this.REASE = ((System.Windows.Controls.CheckBox)(target)); + + #line 47 "..\..\..\Advance.xaml" + this.REASE.Checked += new System.Windows.RoutedEventHandler(this.CheckBox_Checked); + + #line default + #line hidden + + #line 47 "..\..\..\Advance.xaml" + this.REASE.Unchecked += new System.Windows.RoutedEventHandler(this.REASE_Unchecked); + + #line default + #line hidden + return; } this._contentLoaded = true; } diff --git a/cs2_chs/obj/x86/Release/MainWindow.baml b/cs2_chs/obj/x86/Release/MainWindow.baml index 9d0ba4e..3af3e64 100644 Binary files a/cs2_chs/obj/x86/Release/MainWindow.baml and b/cs2_chs/obj/x86/Release/MainWindow.baml differ diff --git a/cs2_chs/obj/x86/Release/MainWindow.g.cs b/cs2_chs/obj/x86/Release/MainWindow.g.cs index 8102799..3bdda75 100644 --- a/cs2_chs/obj/x86/Release/MainWindow.g.cs +++ b/cs2_chs/obj/x86/Release/MainWindow.g.cs @@ -1,4 +1,4 @@ -#pragma checksum "..\..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "F004E4358EBAA317663957C95CDCBDC56C5FFAC230C7FE76F16BF31B44EE5CE4" +#pragma checksum "..\..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "E730C4B41ACFA459AE58B693C6D867B376E7BBEDF7DBBB52809F64EFDB38EDA1" //------------------------------------------------------------------------------ // // 此代码由工具生成。 @@ -64,6 +64,14 @@ namespace cs2_chs { #line default #line hidden + + #line 49 "..\..\..\MainWindow.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBox SRC_OUTPUT; + + #line default + #line hidden + private bool _contentLoaded; /// @@ -144,14 +152,17 @@ namespace cs2_chs { #line hidden return; case 6: + this.SRC_OUTPUT = ((System.Windows.Controls.TextBox)(target)); + return; + case 7: - #line 58 "..\..\..\MainWindow.xaml" + #line 73 "..\..\..\MainWindow.xaml" ((System.Windows.Input.CommandBinding)(target)).CanExecute += new System.Windows.Input.CanExecuteRoutedEventHandler(this.CommandBinding_ShowMainWindow_CanExecute); #line default #line hidden - #line 59 "..\..\..\MainWindow.xaml" + #line 74 "..\..\..\MainWindow.xaml" ((System.Windows.Input.CommandBinding)(target)).Executed += new System.Windows.Input.ExecutedRoutedEventHandler(this.CommandBinding_ShowMainWindow_Executed); #line default diff --git a/cs2_chs/obj/x86/Release/MainWindow.g.i.cs b/cs2_chs/obj/x86/Release/MainWindow.g.i.cs index 8102799..3bdda75 100644 --- a/cs2_chs/obj/x86/Release/MainWindow.g.i.cs +++ b/cs2_chs/obj/x86/Release/MainWindow.g.i.cs @@ -1,4 +1,4 @@ -#pragma checksum "..\..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "F004E4358EBAA317663957C95CDCBDC56C5FFAC230C7FE76F16BF31B44EE5CE4" +#pragma checksum "..\..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "E730C4B41ACFA459AE58B693C6D867B376E7BBEDF7DBBB52809F64EFDB38EDA1" //------------------------------------------------------------------------------ // // 此代码由工具生成。 @@ -64,6 +64,14 @@ namespace cs2_chs { #line default #line hidden + + #line 49 "..\..\..\MainWindow.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBox SRC_OUTPUT; + + #line default + #line hidden + private bool _contentLoaded; /// @@ -144,14 +152,17 @@ namespace cs2_chs { #line hidden return; case 6: + this.SRC_OUTPUT = ((System.Windows.Controls.TextBox)(target)); + return; + case 7: - #line 58 "..\..\..\MainWindow.xaml" + #line 73 "..\..\..\MainWindow.xaml" ((System.Windows.Input.CommandBinding)(target)).CanExecute += new System.Windows.Input.CanExecuteRoutedEventHandler(this.CommandBinding_ShowMainWindow_CanExecute); #line default #line hidden - #line 59 "..\..\..\MainWindow.xaml" + #line 74 "..\..\..\MainWindow.xaml" ((System.Windows.Input.CommandBinding)(target)).Executed += new System.Windows.Input.ExecutedRoutedEventHandler(this.CommandBinding_ShowMainWindow_Executed); #line default diff --git a/cs2_chs/obj/x86/Release/cs2_chs.csprojAssemblyReference.cache b/cs2_chs/obj/x86/Release/cs2_chs.csprojAssemblyReference.cache index 2dfd684..61e42e6 100644 Binary files a/cs2_chs/obj/x86/Release/cs2_chs.csprojAssemblyReference.cache and b/cs2_chs/obj/x86/Release/cs2_chs.csprojAssemblyReference.cache differ diff --git a/cs2_chs/obj/x86/Release/cs2_chs.exe b/cs2_chs/obj/x86/Release/cs2_chs.exe index 28fabe2..ba95fcb 100644 Binary files a/cs2_chs/obj/x86/Release/cs2_chs.exe and b/cs2_chs/obj/x86/Release/cs2_chs.exe differ diff --git a/cs2_chs/obj/x86/Release/cs2_chs.g.resources b/cs2_chs/obj/x86/Release/cs2_chs.g.resources index d349643..589b163 100644 Binary files a/cs2_chs/obj/x86/Release/cs2_chs.g.resources and b/cs2_chs/obj/x86/Release/cs2_chs.g.resources differ diff --git a/cs2_chs/obj/x86/Release/cs2_chs.pdb b/cs2_chs/obj/x86/Release/cs2_chs.pdb index 38cb733..67850de 100644 Binary files a/cs2_chs/obj/x86/Release/cs2_chs.pdb and b/cs2_chs/obj/x86/Release/cs2_chs.pdb differ diff --git a/cs2_patch/BuildIn.cpp b/cs2_patch/BuildIn.cpp index 499a055..a1916de 100644 --- a/cs2_patch/BuildIn.cpp +++ b/cs2_patch/BuildIn.cpp @@ -198,11 +198,11 @@ DWORD WINAPI fGetGlyphOutlineW( if(lstrlenW(ns_str)>=5999) ns_str[0] = L'\0'; lstrcatW(ns_str, loca.c_str()); - return pGetGlyphOutlineW(hdc, L'A', fuFormat, lpgm, cjBuffer, pvBuffer, lpmat2); + return pGetGlyphOutlineW(hdc, L' ', fuFormat, lpgm, cjBuffer, pvBuffer, lpmat2); } BOOL WINAPI fTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(c) LPCWSTR lpString, _In_ int c) { - return pTextOutW(hdc, x, y, L"A", c); + return pTextOutW(hdc, x, y, L"\0", c); } void start() { diff --git a/cs2_patch/Data.cpp b/cs2_patch/Data.cpp index 28d9825..6fe0fae 100644 --- a/cs2_patch/Data.cpp +++ b/cs2_patch/Data.cpp @@ -7,117 +7,221 @@ extern HMODULE hMod; extern "C" extern DLLAPI wchar_t ms_str[3096]; extern "C" extern DLLAPI int nID; extern "C" extern DLLAPI DWORD tPid; -DWORD CreateDataExportEx(LPCWSTR data) +extern "C" extern DLLAPI bool blockRestoreSrc; +struct ExportParam { + WCHAR data[1024]; + WCHAR src[1024]; +}; +DWORD CreateDataExportEx(LPVOID data) { - // MessageBoxW(0, data,L"",0); - WCHAR sjp[3096]; - WCHAR scn[3096]; - int lasger = GEtLargestID(); - if (nID == 0) { - MessageBox(0, L"the ID value seems not available,therefore this action has been refused", L"error", MB_ICONERROR); - saveProcess = 1.0; - return 1; - } - if (nID - lasger > 2) { - MessageBox(0, L"the ID value seems not available,therefore this action has been refused", L"error", MB_ICONERROR); - saveProcess = 1.0; - return 1; - } - if (!GetDataByID(nID - 1, sjp, scn)) { - CreateDataByID(nID - 1, ms_str, 2 * (lstrlenW(ms_str) + 1), data, 2 * (lstrlenW(data) + 1)); - WCHAR abv[16]; - _itow_s(nID - 1, abv, 10); - wstring str; - str += L"Apply ID:"; - str += abv; - str += L"\n"; - str += ms_str; - str += L"->"; - str += data; - MessageBoxW(NULL, str.c_str(), L"successed to add rule", MB_ICONINFORMATION); - saveProcess = 1.0; - return 1; - } - else { - wstring nString = L"This rule is already exist,do you want still to replace it?(according to your PC,it may take you a short time)\n"; - WCHAR abv[16]; - _itow_s(nID - 1, abv, 10); - nString += L"ID:"; - nString += abv; - nString += L"\n"; - nString += sjp; - saveProcess = 0.0; - int result = MessageBoxW(NULL, nString.c_str(), L"information", MB_ICONINFORMATION | MB_OKCANCEL); - if (result != IDOK) { + + ExportParam* bData = (ExportParam*)data; + if (!blockRestoreSrc) { + // MessageBoxW(0, data,L"",0); + WCHAR sjp[3096]; + WCHAR scn[3096]; + int lasger = GEtLargestID(); + if (nID == 0) { + MessageBox(0, L"the ID value seems not available,therefore this action has been refused", L"error", MB_ICONERROR); saveProcess = 1.0; return 1; } - int p = 0; - MicroData *_Index=new MicroData(L"~Index.ax", sizeof(IndexData)); - MicroBinary* _Data = new MicroBinary(L"~Data.ax"); - IndexData createData; - while (GetDataByID(p, sjp, scn)) { - if (p == (nID - 1)) { - createData.Id = p; - createData.JpLength = 2 * (lstrlenW(sjp) + 1); - createData.CnLength = 2 * (lstrlenW(data) + 1); - createData.JpBass = _Data->Size(); - _Data->Push(sjp, 2 * (lstrlenW(sjp) + 1)); - createData.CnBass = _Data->Size(); - _Data->Push(data, 2 * (lstrlenW(data) + 1)); - _Index->Push(&createData); - _Index->Save(); - _Data->Save(); - } - else - { - createData.Id = p; - createData.JpLength = 2 * (lstrlenW(sjp) + 1); - createData.CnLength = 2 * (lstrlenW(scn) + 1); - createData.JpBass = _Data->Size(); - _Data->Push(sjp, 2 * (lstrlenW(sjp) + 1)); - createData.CnBass = _Data->Size(); - _Data->Push(scn, 2 * (lstrlenW(scn) + 1)); - _Index->Push(&createData); - _Index->Save(); - _Data->Save(); - } - saveProcess = (double)p / (double)(lasger); - p++; + if (nID - lasger > 2) { + MessageBox(0, L"the ID value seems not available,therefore this action has been refused", L"error", MB_ICONERROR); + saveProcess = 1.0; + return 1; + } + if (!GetDataByID(nID - 1, sjp, scn)) { + CreateDataByID(nID - 1, bData->src, 2 * (lstrlenW(bData->src) + 1), bData->data, 2 * (lstrlenW(bData->data) + 1)); + WCHAR abv[16]; + _itow_s(nID - 1, abv, 10); + wstring str; + str += L"Apply ID:"; + str += abv; + str += L"\n"; + str += bData->src; + str += L"->"; + str += bData->data; + MessageBoxW(NULL, str.c_str(), L"successed to add rule", MB_ICONINFORMATION); + saveProcess = 1.0; + return 1; + } + else { + wstring nString = L"This rule is already exist,do you want still to replace it?(according to your PC,it may take you a short time)\n"; + WCHAR abv[16]; + _itow_s(nID - 1, abv, 10); + nString += L"ID:"; + nString += abv; + nString += L"\n"; + nString += sjp; + saveProcess = 0.0; + int result = MessageBoxW(NULL, nString.c_str(), L"information", MB_ICONINFORMATION | MB_OKCANCEL); + if (result != IDOK) { + saveProcess = 1.0; + return 1; + } + int p = 0; + MicroData* _Index = new MicroData(L"~Index.ax", sizeof(IndexData)); + MicroBinary* _Data = new MicroBinary(L"~Data.ax"); + IndexData createData; + while (GetDataByID(p, sjp, scn)) { + if (p == (nID - 1)) { + createData.Id = p; + createData.JpLength = 2 * (lstrlenW(sjp) + 1); + createData.CnLength = 2 * (lstrlenW(bData->data) + 1); + createData.JpBass = _Data->Size(); + _Data->Push(sjp, 2 * (lstrlenW(sjp) + 1)); + createData.CnBass = _Data->Size(); + _Data->Push(bData->data, 2 * (lstrlenW(bData->data) + 1)); + _Index->Push(&createData); + _Index->Save(); + _Data->Save(); + } + else + { + createData.Id = p; + createData.JpLength = 2 * (lstrlenW(sjp) + 1); + createData.CnLength = 2 * (lstrlenW(scn) + 1); + createData.JpBass = _Data->Size(); + _Data->Push(sjp, 2 * (lstrlenW(sjp) + 1)); + createData.CnBass = _Data->Size(); + _Data->Push(scn, 2 * (lstrlenW(scn) + 1)); + _Index->Push(&createData); + _Index->Save(); + _Data->Save(); + } + saveProcess = (double)p / (double)(lasger); + p++; + } + + delete _Index; + delete _Data; + delete Index; + delete ::Data; + // saveProcess = 0.0; + saveProcess = 1; + DeleteFile(L"Data.ax"); + DeleteFile(L"Index.ax"); + rename("~Data.ax", "Data.ax"); + rename("~Index.ax", "Index.ax"); + Index = new MicroData(L"Index.ax", sizeof(IndexData)); + ::Data = new MicroBinary(L"Data.ax"); + Index->Load(); + ::Data->Load(); + return 1; + } + } + else { + WCHAR sjp[3096]; + WCHAR scn[3096]; + int lasger = GEtLargestID(); + int jkID; + + if (!GetDataByJP(&jkID, bData->src, scn)) { + CreateDataByID(lasger + 1, bData->src, 2 * (lstrlenW(bData->src) + 1), bData->data, 2 * (lstrlenW(bData->data) + 1)); + WCHAR abv[16]; + _itow_s(lasger + 1, abv, 10); + wstring str; + str += L"Apply ID:"; + str += abv; + str += L"\n"; + str += bData->src; + str += L"->"; + str += bData->data; + MessageBoxW(NULL, str.c_str(), L"successed to add rule", MB_ICONINFORMATION); + saveProcess = 1.0; + return 1; + } + else { + wstring nString = L"This rule is already exist,do you want still to replace it?(according to your PC,it may take you a short time)\n"; + WCHAR abv[16]; + _itow_s(jkID, abv, 10); + nString += L"ID:"; + nString += abv; + nString += L"\n"; + nString += bData->src; + + int result = MessageBoxW(NULL, nString.c_str(), L"information", MB_ICONINFORMATION | MB_OKCANCEL); + if (result != IDOK) { + saveProcess = 1.0; + return 1; + } + + int p = 0; + MicroData* _Index = new MicroData(L"~Index.ax", sizeof(IndexData)); + MicroBinary* _Data = new MicroBinary(L"~Data.ax"); + IndexData createData; + while (GetDataByID(p, sjp, scn)) { + if (p == jkID) { + createData.Id = p; + createData.JpLength = 2 * (lstrlenW(sjp) + 1); + createData.CnLength = 2 * (lstrlenW(bData->data) + 1); + createData.JpBass = _Data->Size(); + _Data->Push(sjp, 2 * (lstrlenW(sjp) + 1)); + createData.CnBass = _Data->Size(); + _Data->Push(bData->data, 2 * (lstrlenW(bData->data) + 1)); + _Index->Push(&createData); + _Index->Save(); + _Data->Save(); + } + else + { + createData.Id = p; + createData.JpLength = 2 * (lstrlenW(sjp) + 1); + createData.CnLength = 2 * (lstrlenW(scn) + 1); + createData.JpBass = _Data->Size(); + _Data->Push(sjp, 2 * (lstrlenW(sjp) + 1)); + createData.CnBass = _Data->Size(); + _Data->Push(scn, 2 * (lstrlenW(scn) + 1)); + _Index->Push(&createData); + _Index->Save(); + _Data->Save(); + } + saveProcess = (double)p / (double)(lasger); + p++; + } + + delete _Index; + delete _Data; + delete Index; + delete ::Data; + // saveProcess = 0.0; + saveProcess = 1; + DeleteFile(L"Data.ax"); + DeleteFile(L"Index.ax"); + rename("~Data.ax", "Data.ax"); + rename("~Index.ax", "Index.ax"); + Index = new MicroData(L"Index.ax", sizeof(IndexData)); + ::Data = new MicroBinary(L"Data.ax"); + Index->Load(); + ::Data->Load(); + return 1; } - - delete _Index; - delete _Data; - delete Index; - delete Data; - // saveProcess = 0.0; - saveProcess = 1; - DeleteFile(L"Data.ax"); - DeleteFile(L"Index.ax"); - rename("~Data.ax", "Data.ax"); - rename("~Index.ax", "Index.ax"); - Index = new MicroData(L"Index.ax", sizeof(IndexData)); - Data = new MicroBinary(L"Data.ax"); - Index->Load(); - Data->Load(); - return 1; } } -void CreateDataExport(WCHAR data[]) +void CreateDataExport(WCHAR src[],WCHAR data[]) { + ExportParam alc; + lstrcpyW(alc.data, data); + lstrcpyW(alc.src, src); + DWORD dwOld; HANDLE hTr = OpenProcess(PROCESS_ALL_ACCESS, FALSE, tPid); - if (!hTr) - MessageBoxA(0,"","",0); - LPWSTR PszLibFileRemote = (LPWSTR)VirtualAllocEx(hTr, NULL, 2*(lstrlenW(data)+1), MEM_COMMIT, PAGE_READWRITE); - if (!PszLibFileRemote) - MessageBoxA(0, "", "", 0); - WriteProcessMemory(hTr, PszLibFileRemote, data, 2 * (lstrlenW(data) + 1), &dwOld); + + + + BYTE* PszLibFileRemote = (PBYTE)VirtualAllocEx(hTr, NULL, sizeof(ExportParam), MEM_COMMIT, PAGE_READWRITE); + + + WriteProcessMemory(hTr, PszLibFileRemote, &alc, sizeof(ExportParam), &dwOld); + HANDLE hHookStart = CreateRemoteThread(hTr, NULL, 0, (LPTHREAD_START_ROUTINE) ::GetProcAddress(hMod, "CreateDataExportEx"), PszLibFileRemote, 0, NULL); if (!hHookStart) MessageBoxA(0, "", "", 0); WaitForSingleObject(hHookStart, INFINITE); + VirtualFreeEx(hTr, PszLibFileRemote, sizeof(ExportParam), MEM_RELEASE); + CloseHandle(hTr); } BOOL CreateDataByID(int ID, LPCWSTR jpBuff, int ljp, LPCWSTR cnBuffer, int lcn) { @@ -156,6 +260,7 @@ BOOL GetDataByJP(int* ID, LPCWSTR jpBuff, LPWSTR cnBuffer) if ((*Index)++) continue; else { + *ID = index.Id; (*Data) = 0; (*Index) = 0; return 0; diff --git a/cs2_patch/Data.h b/cs2_patch/Data.h index 1dd3a53..5be88da 100644 --- a/cs2_patch/Data.h +++ b/cs2_patch/Data.h @@ -1,9 +1,9 @@ #pragma once #include #define DLLAPI __declspec(dllexport) -extern "C" DLLAPI void CreateDataExport(WCHAR data[]); +extern "C" DLLAPI void CreateDataExport(WCHAR scr[],WCHAR data[]); BOOL CreateDataByID(int ID, LPCWSTR jpBuff, int ljp, LPCWSTR cnBuffer, int lcn); BOOL GetDataByJP(int* ID, LPCWSTR jpBuff, LPWSTR cnBuffer); BOOL GetDataByID(int ID, LPWSTR jpBuff, LPWSTR cnBuffer); int GEtLargestID(); -extern "C" DLLAPI DWORD CreateDataExportEx(LPCWSTR path); \ No newline at end of file +extern "C" DLLAPI DWORD CreateDataExportEx(LPVOID path); \ No newline at end of file diff --git a/cs2_patch/Release/BuildIn.obj b/cs2_patch/Release/BuildIn.obj index 1f8f20c..5148757 100644 Binary files a/cs2_patch/Release/BuildIn.obj and b/cs2_patch/Release/BuildIn.obj differ diff --git a/cs2_patch/Release/Data.obj b/cs2_patch/Release/Data.obj index 0f388c6..a974dd4 100644 Binary files a/cs2_patch/Release/Data.obj and b/cs2_patch/Release/Data.obj differ diff --git a/cs2_patch/Release/Replace.obj b/cs2_patch/Release/Replace.obj index d5035e6..3958f08 100644 Binary files a/cs2_patch/Release/Replace.obj and b/cs2_patch/Release/Replace.obj differ diff --git a/cs2_patch/Release/cs2_patch.log b/cs2_patch/Release/cs2_patch.log index 91fae4f..fb754f2 100644 --- a/cs2_patch/Release/cs2_patch.log +++ b/cs2_patch/Release/cs2_patch.log @@ -1,9 +1,8 @@  BuildIn.cpp - dllmain.cpp 正在创建库 D:\VSProject\cs2\cs2_united\Release\cs2_patch.lib 和对象 D:\VSProject\cs2\cs2_united\Release\cs2_patch.exp 正在生成代码 - 79 of 129 functions (61.2%) were compiled, the rest were copied from previous compilation. + 1 of 129 functions ( 0.8%) were compiled, the rest were copied from previous compilation. 0 functions were new in current compilation - 6 functions had inline decision re-evaluated but remain unchanged + 2 functions had inline decision re-evaluated but remain unchanged 已完成代码的生成 cs2_patch.vcxproj -> D:\VSProject\cs2\cs2_united\Release\cs2_patch.dll diff --git a/cs2_patch/Release/cs2_patch.tlog/CL.command.1.tlog b/cs2_patch/Release/cs2_patch.tlog/CL.command.1.tlog index f082450..08c70b9 100644 Binary files a/cs2_patch/Release/cs2_patch.tlog/CL.command.1.tlog and b/cs2_patch/Release/cs2_patch.tlog/CL.command.1.tlog differ diff --git a/cs2_patch/Release/cs2_patch.tlog/CL.read.1.tlog b/cs2_patch/Release/cs2_patch.tlog/CL.read.1.tlog index 6619fa0..b574b9f 100644 Binary files a/cs2_patch/Release/cs2_patch.tlog/CL.read.1.tlog and b/cs2_patch/Release/cs2_patch.tlog/CL.read.1.tlog differ diff --git a/cs2_patch/Release/cs2_patch.tlog/CL.write.1.tlog b/cs2_patch/Release/cs2_patch.tlog/CL.write.1.tlog index c3bad9f..11d3096 100644 Binary files a/cs2_patch/Release/cs2_patch.tlog/CL.write.1.tlog and b/cs2_patch/Release/cs2_patch.tlog/CL.write.1.tlog differ diff --git a/cs2_patch/Release/cs2_patch.tlog/cs2_patch.write.1u.tlog b/cs2_patch/Release/cs2_patch.tlog/cs2_patch.write.1u.tlog index ac43161..dcbf6f5 100644 Binary files a/cs2_patch/Release/cs2_patch.tlog/cs2_patch.write.1u.tlog and b/cs2_patch/Release/cs2_patch.tlog/cs2_patch.write.1u.tlog differ diff --git a/cs2_patch/Release/cs2_patch.tlog/link.delete.1.tlog b/cs2_patch/Release/cs2_patch.tlog/link.delete.1.tlog index 2e8c7ca..068fdc0 100644 Binary files a/cs2_patch/Release/cs2_patch.tlog/link.delete.1.tlog and b/cs2_patch/Release/cs2_patch.tlog/link.delete.1.tlog differ diff --git a/cs2_patch/Release/dllmain.obj b/cs2_patch/Release/dllmain.obj index cebb4a1..98ec692 100644 Binary files a/cs2_patch/Release/dllmain.obj and b/cs2_patch/Release/dllmain.obj differ diff --git a/cs2_patch/Release/vc142.pdb b/cs2_patch/Release/vc142.pdb index 5e448ee..eb295c6 100644 Binary files a/cs2_patch/Release/vc142.pdb and b/cs2_patch/Release/vc142.pdb differ diff --git a/cs2_patch/dllmain.cpp b/cs2_patch/dllmain.cpp index ee28e5f..1e5fd06 100644 --- a/cs2_patch/dllmain.cpp +++ b/cs2_patch/dllmain.cpp @@ -12,6 +12,8 @@ extern "C" DLLAPI int nID = 0; extern "C" DLLAPI DWORD tPid = 0; extern "C" DLLAPI DWORD m_Addr = 0xFFFFFFFF; extern "C" DLLAPI DWORD VioMode = 0; + +extern "C" DLLAPI bool blockRestoreSrc = false; #pragma data_seg() #pragma comment(linker, "/section:PublicData,rws")