В этой статье я покажу как сделать трейнер , используя Visual C#.. Набрал немного опыта по этому языку по написанию трейнера, и сегодня я с вами поделюсь с опытом. в нашем трейнере будет одна функция добавляем х-количество Трутниц. Игра Amnesia: The Dark Deskent. Что такое трутница, трутница это по моему порошок для, скажем служат для разжигания огня. Количество трутниц в игре как всегда любой другой предмет мало.( Это не только мое мнение и мнение других Геймхакеров в игре всегда все мало.) Вот что нам понадобится, а точнее нам понадобилось : 1. Amnesia: The Dark Deskent . Сама игра 1. Cheat Engine 6.1 Программа для поиска нужных нам значение в игре. 2. Visual Studio C#2010 среда разработки, на языке C# мы создадим наш трейнер 3. Мозг Итак приступаем. Для начала соберем необходимую нам информацию, а именно найдем адреса в которых лежат нужные нам значения, с программой Cheat Engine. Я нашел нужный адрес и конечно он динамический при каждом запуске меняется, далее что делать! Мы не будем писать Ассемблерный скрипт, а просто находим статичный адрес указателя и Офсеты (Смещение) или иначе говорят Пойнтеры. Как надо найти статичный адрес указателя и смещение боле подробно в форуме. Так далее, нашли статичный адрес указателя плюс смещение (офсеты) Рис_1 и Рис_1,1. Запускаем VC# Создаем новый проект выбираем Приложение Windows Forms назначаем нужное имя и жмем окей и получаем готовую форму. Далее добавляем на форму один button (кнопка) один Timer и два Label. Рис 2.1 В свойствах кнопки изменяем: где Text убираем button1 пишем Добавить. Рис 2.2 а в свойствах Timer1 где Enabled поменяем значение с False на True в Label1 где Text пишем Игра Не Запущена а Label2 где Text просто стираем имя и все, оставляем пустое. После всего этого, наша форма будет смотреться так Рис 2.3 Далее два раза кликаем по кнопке Добавить переходим к написанию кода. В пространстве имен добавим следующие имена: using System.Diagnostics; using System.Runtime.InteropServices; using System.Globalization; using System.Threading; Далее пишем под public partial class Form1 : Form вот этот код: Memory oMemory = new Memory(); bool gamehacklab = true; Далее в обработчик кнопки пишем следующий код: Process[] aProcesses = Process.GetProcessesByName("Amnesia"); //Имя процесса игры в памяти, пишем без "exe" if (aProcesses.Length != 0) { oMemory.ReadProcess = aProcesses[0]; oMemory.Open(); int myGame_Address = Addr.ToDec("0072836C"); // Статичный адрес указателя int[] myGame_Offsets = { 0x84, 0x78 }; // Офсеты, смещение пишем в виде 0х-- int bytesWritten; // byte[] bValue_To_Write = BitConverter.GetBytes(999); //3аписиваем 999 количество трутниц string sWritten_Address = oMemory.PointerWrite((IntPtr)myGame_Address, bValue_To_Write, myGame_Offsets, out bytesWritten); if (bytesWritten == bValue_To_Write.Length) label1.Text = ("Добавлено 999Трутниц." + "!"); // Выводим текст если изменяется значение else label1.Text = ("Не Добавлено (Ошибка!). " + ".");// Выводим текст если ничего не получится oMemory.CloseHandle(); Два раза кликаем по Timer1 и пишем следующий код: Process[] aProcesses = Process.GetProcessesByName("Amnesia"); if (aProcesses.Length != 0) { gamehacklab = true; label2.Text = "Игра запущена"; } else { gamehacklab = false; label2.Text = "Игра Не запущена"; } И так пришло время писать класс чтобы программа имела доступ и изменение значение в памяти игры назовем клас по имени GmeHackLab. Нажимаем кнопку Проект далее Добавить класс в появившемся окне выбираем класс пишем имя класса GmeHackLab далее Добавить. Здесь тоже в пространстве имен добавим следующие имена: using System.Diagnostics; using System.Runtime.InteropServices; using System.Globalization; using System.Threading; Получится вот такой код: