Перейти к содержанию

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Сообщения, опубликованные MasterGH

  1. >>Кому-то, конечно, удобнее вводить команды, но их для начала надо запомнить - а это не всем, увы, под силу.

    :) Чтобы не запоминать команды делают команды по отображению команд в окне игры через help, cmdlist, varlist, cvarlist... Или делают help-файл по консольным командам. Так что какая-то невероятная сила и зубрёжка по запоминанию команд не требуется. Если команды выводимые через единственную запоминаемую Help все удобочитаемые, то понять какая команда за что отвечает не будет сложным. Пример. Запусти cmd.exe и введи Help. :)

  2. Попробуй выполнить код, который я привёл в автономном .exe трейнере. Ты же наверно такой тип трейнера используешь. Если использовать другие форматы: *.CT или *.CETRAINER или tiny exe, то их исполняет программа Cheat Engeine. Соответственно путь будет в первом случае трейнера, во втором случае Cheat Engine.

    Если нужно найти пути *.CT или *.CETRAINER или tiny exe, то такой функции я не нашёл. Можно конечно попробовать найти эти пути из внутренностей процесса CE, но мне лень.

  3. post 38: "в своих скриптах я не прописывал этот пункт dealloc(newmem). ..Может ли быть причина сбоя в этом?"

    Нет. Могут быть причины: античиты, вирусы и системные ошибки в Windows или кривые дрова у видеокарты, или перегрев оборудования... У синего экрана есть код ошибки. Было бы возможно яснее если бы ты его привёл.

  4. >> Вопрос - нафига, если я правильно описал результат.

    Я понимаю, что вопрос не мне. Но всё же ты сам ответ написал :) : "вводим туда ту или иную команду - в зависимости от команды, включаем ту или иную опцию в трейнере"

  5. 1) Как такое делать в других играх(ну например DarkSiders или DarkSector)?

    Такое можно сделать, если ты будешь копать как это сделать с нуля (знать программирование под Windows) или копать как это сделали те товарищи через отладчик.

    2) В каком направлении мне копать что-бы сделать консольный режим в игре?

    См. ответ к пункту 1.

    3) Какие плюсы и минусы видите Вы в консольном режиме?

    Плюсы: управление большим количеством настроек (если это количество имеется)

    Минусы: вряд ли этот ввод через консоль будет удобным для геймеров. Набивание текстовых команд в консоль и их утверждение понравится не всем.

    >>что бы сделать консольный ввод кодов, надо узнать у разрабов - предусмотрен ли он. И предусмотрены ли коды. Если нет, то ни как не сделаешь.

    Нет-нет, в любом случае можно встроить свою консоль :)

    Кстати CE позволяет отобразить консоль для ввода. Вот мой пример:


    d3dhook_enableConsole(virtualkey): Adds a (lua)console to the specific game. The given key will bring it up (0xc0=tilde)

    И ещё один минус консоли - с ней надо уметь работать. Так же тем, кто знает как с ней работать лень объяснять тем кто не знает.

    post-3-0-32773400-1337262432_thumb.jpg

  6. Cheat Engine 6.2 Release Candidate 3 (Thu May 17, 2012 10:09 am)

    Installer:

    http://cheatengine.o...Engine62RC3.exe

    Lose files:

    http://cheatengine.o...Engine62RC3.rar

    Изменения смотрите в SVN. От себя напишу. Я ждал эту версию, т.к. в ней появились, благодаря моим уговорам на форуме CE, новые Lua функции по работе с файлами *.CT и *.CETRAINER, что позволит мне продолжить дописывать Lua плагин.


    loadTable(filename, merge OPTIONAL): Loads a .ct or .cetrainer. If merge is provided and set to true it will not clear the old table
    17 + saveTable(filename, protect OPTIONAL): Saves the current table. If protect is provided and set to true and the filename has the .CETRAINER extension, it will protect it from reading normally
    17 18
    18 19 note: addresses can be strings, they will get interpreted by ce's symbolhandler
    19 20
    ...
    802 803
    803 804 addresslist_getSelectedRecords(Addresslist): Returns a table of all the selected records
    804 805
    806 + addresslist_doDescriptionChange(addresslist) : Will show the gui window to change the description of the selected entry
    807 + addresslist_doAddressChange(addresslist) : Will show the gui window to change the address of the selected entry
    808 + addresslist_doTypeChange(addresslist) : Will show the gui window to change the type of the selected entries
    809 + addresslist_doValueChange(addresslist) : Will show the gui window to change the value of the selected entries
    810 +
    811 + addresslist_getSelectedRecord(addresslist) : Gets the main selected memoryrecord
    812 + addresslist_setSelectedRecord(addresslist, memrec) : Sets the currently selected memoryrecord. This will unselect all other entries

  7. 1) Возможно процесс трейнера не закрылся (можно проверить в диспечере задач). Т.е. файл используется системой;

    2) Возможно где-то использовались русские символы и из-за них это ошибка

    Решения проблемы:

    1) Использовать CE 6.2 RC 3 (возможно не будет этой ошибки);

    Installer:

    http://cheatengine.o...Engine62RC3.exe

    Lose files:

    http://cheatengine.o...Engine62RC3.rar

    2) Искать самому ошибку в режиме отладки в IDE Lazarus.

  8. Версия плагина 0.4

    Plagin_MainWindow_FileList.rar

    post-3-0-24028600-1337004564_thumb.png

    Новое:

    1) Добавлена функция открытия таблицы через Notepad++ как xml документ. (моя версия Notepad++ 5.9);

    2) Реализованы функции конвертации в CETRAINER и в CT;

    3) Добавлено условие доступности функций - можно конвертировать только CETRAINER в CT или наоборот. На самом деле нет никакой конвертации, просто переименовывается файл;

    4) Реализована функция дублирования файла. Нельзя дублировать файл дважды, без изменения имени предыдущего дублированного файла;

    5) Переход на наш сайт по клику на меню;

    6) Реализованы функции создания файлов "New CT" и "New CETRAINER". Дублируется файл Temp.CETRAINER или Temp.CT в папку со скриптами. Нужно исправить это имя перед новый созданием фйла иначе создать новый файл с тем же именем будет невозможно. Внимание файлы Temp.CETRAINER и Temp.CT должны быть в папке autorun, т.е. там же где и плагин;

    7) Добавлена функция фильтра отображаемых файлов через поле ввода названия скрипта.

    Задачи на будущее для CE RC3 (ещё не вышла)

    8) Добавить функцию в меню "Переместить текущий открытый файл в директорию скриптов". Отключать эту функцию, если скрипт находится уже в этой директории

    9) Один клик при выделении записи тут же открывает файл.

    10) Передача фокусов на строку в Листбоксе. Передать фокус новому дублированному файлу. Передать фокус новому созданному файлу "New CT" или "New CETRAINER" (пока не знаю как это сделать лучшим способом)

  9. Как сделать в Cheat Engine 5.6.1 чтобы вместо "numeric" было "NUMPAD"?

    Это гемор. Либо делать перекомпиляцию исходников 5.6.1 предварительно исправив их. Исходники для этой версии ещё и откопать надо. Либо можешь попробовать найти все строки "numeric" в CE 5.6.1 с помощью OllyDbg и попытаться пропатчить их на "NUMPAD "

  10. Версия плагина 0.3

    Plagin_MainWindow_FileList.rar

    Протестировано на версии CE RC 2

    Installer:

    http://cheatengine.o...Engine62RC2.exe

    Lose files:

    http://cheatengine.o...Engine62RC2.rar

    1) Добавлен сплитер

    2) Добавлены новые пункты меню (работают не все):

    3) Исправлено отображение списка файлов по фильтрам;

    4) Теперь двойной клик приводит к редактированию имени файла. Подстветка поля и передача фокуса на редактирование;

    5) Теперь если ни один скрипт не выделен, то некоторые пункты меню визуально блокируются

    6) Работает Rename - переименовывание файла при нажатии на Enter.

    7) Снятие фокуса ввода с элемента, который находился в режиме переименовывания отменяет переименовывание;

    8) Добавлена функция Удалить.

    9) Добавлен диалог с подтверждением удаления

    10) Добавлено меню для обновления списка файлов

    11) Добавлено меню для перехода к списку файлов(таблиц) через файловый браузер

    Note: убедитесь что ваша папка со скриптами 'C:\\Users\\'..os.getenv("USERNAME")..'\\Documents\\My Cheat Tables\\' существует

  11. >> Есть методы лучше и вернее, о них читай статьи и темы на форуме и сайте.

    Например, это может быть поиск процесса из списка процессов по его имени. Ещё каких-либо методов поиска процесса кроме "как по окну" или "по его имени" я не припоминаю.

  12. post-3-0-15950500-1336504777_thumb.png

    О плагине

    Привет :) . Короче, плагин просто необходим для сверхбыстрых манипуляций со скриптами. Плагин позволяет работать со списком файлов открываемых при помощи Cheat Engine. Это файлы преимущественно *.CT и *.CETRAINER. Есть возможность видеть и другие файлы.

    Давным давно меня замучило создавать и искать временные мои таблицы для Cheat Engine и открывать их через кучу действий. Этот плагин должен помочь в этой задаче.

    Ну, и я держу прицел на будущие задачи: создание базы данных для множества игр в сочетании с этим плагином + плагин компактного вида CE + удалённая подгрузка скриптов с нашего ресурса.

    Если посмотрите мой исходник, то по умолчанию берётся папка со скриптами для CE в "Моих документах" текущего пользователя, но можно указать и любую другую.


    local path = 'C:\\Users\\'..os.getenv("USERNAME")..'\\Documents\\My Cheat Tables\\'

    Версия плагина 0.2

    Plagin_MainWindow_FileList.rar

    1) Просмотр списка файлов в директории

    2) Фильтрация списка для *.CT

    3) Фильтрация списка для *.CETRAINER

    Плагин ещё не доделан даже до версии 1,0. Если у Вас есть свободное время, можете попытаться помочь в дописывании этого плагина. Ваша помощь будет очень полезна.

  13. 1) Найти адрес;

    2) Найти инструкцию, которая с ним работает поставив на адрес брейкпоинт;

    3) Написать автоассемблерный скрипт, который будет записывать по адресу постоянное значение.

    На форуме можно найти много примеров.

    Дугой вариант искать цепочку указателей. Это может оказаться довольным долгим занятием. В прочем много времени может уйти на что угодно - это зависит от конкретной игры.

  14. Я думаю, что можно использовать. Работать можно с функцией

    PointerWrite(IntPtr MemoryAddress, byte[] bytesToWrite, int[] Offset, out int bytesWritten)

    Работать можно приблизительно так:


    Memory memory = new Memory(); // обычное действие при работе с классами
    memory.ReadProcess = ; // присвой процесс (ты уже знаешь как его найти)
    memory.Open(); // открыть процесс

    IntPtr MemoryAddress = ; // вводишь базовый адрес модуля
    byte[] bytesToWrite = new byte[]{0xff,0xff,0xff,0xff}; // записываемые байты можешь забить вручную или через конвертер из десятичного в шестнадцатеричную форму
    int[] Offset = new int[]{0xff,0xff,0xff,0xff}; // вводишь нужные оффсеты со своего скирншота
    int bytesWritten = 0; // просто инициализация
    memory.PointerWrite(MemoryAddress, bytesToWrite, Offset, out bytesWritten);

    if(bytesRead.Length < 1){ // было ли что-то записано?
    //выдать ошибку в консоли
    }
    else {
    // выдать сообщение в косоли о том что успешно
    }

    Можешь провести различные эксперименты долго и упорно, и тогда обязательно что-нибудь получится.

  15. Тема о GHLBook перенесена мной в подфорум "Быстрая информация". Теперь её могут видеть все и скачивать только пользователи форума.

    >> что надо бы отредактировать сайт, дабы скачивание шло через него, а не через форум.

    Ничего плохого не вижу, если скачивание будет через форум. Администрации не придётся отслеживать новые изменения в теме и вносить их на сайт.

  16. ICEBURG, хорошо бы делать проверки выполнения функций (в данном случае это поиск окна, открытие процесса) с выводом результата на консоль, если это консольное приложение и мессагами(окнами сообщений), если это консоль отсутствует;

    А по FindWindow при создании трейнеров в Интернете должно быть очень много примеров. Слова для поиска "C++ Trainer FindWindow"

  17. Если я правильно помню, то cheat engine 5.6 в генерируемых трейнерах не поддерживает функцию изменения скорости игры. Но в CE 6.1 и 6.2 (бета-версии) можно на Lua написать поддержку изменения скорости, а далее сгенерировать *.exe трейнер. Только размер последнего будет не меньше чем 2,4 мб. Могу посоветовать использовать Lua-трейнеры как файлы формата *.CTRAINER или *.CT- таблица. Эти файлы без CE не запускаются.

  18. Я немного прошлый код переписал


    using System;
    using System.Diagnostics;
    namespace ModuleBase
    {
    class Program
    {
    const string processName = "tutorial-i386"; // не пишем расширение "*.exe"
    const string someModuleName = "ole32.dll";

    static uint GetProcessBaseAddress(Process currentProcess) { return (uint)currentProcess.MainModule.BaseAddress; }
    static string GetProcessStringBaseAddress(Process currentProcess) { return "0x" + currentProcess.MainModule.BaseAddress.ToString("X"); }
    static uint GetModuleBaseAddress(Process currentProcess, string moduleName, bool ignoredCase)
    {
    var modules = currentProcess.Modules;
    var max = modules.Count;
    for (int i = 0; i < max; i++)
    if (String.Compare(modules[i].ModuleName, moduleName, ignoredCase) == 0)
    return (uint)modules[i].BaseAddress;
    return 0;
    }
    static string GetModuleStringBaseAddress(Process currentProcess, string moduleName, bool ignoredCase)
    {
    var modules = currentProcess.Modules;
    var max = modules.Count;
    for (int i = 0; i < max; i++)
    if (String.Compare(modules[i].ModuleName, moduleName, ignoredCase) == 0)
    return "0x" + modules[i].BaseAddress.ToString("X");
    return "";
    }

    static void Main(string[] args)
    {
    var arrayProcesses = Process.GetProcessesByName(processName);
    if (arrayProcesses == null || arrayProcesses.Length < 1)
    {
    Console.WriteLine("Process not found");
    return;
    }
    var currentProcess = arrayProcesses[0];

    // Получить строку базового адреса процесса
    var str1 = GetProcessStringBaseAddress(currentProcess);
    var line1 = String.Format("Address prosess: {0}.exe = {1}", processName, str1);
    Console.WriteLine(line1);

    // Получить строку базового адреса некотрого модуля someModuleName
    var str2 = GetModuleStringBaseAddress(currentProcess, someModuleName, true);
    var line2 = String.Format("Address module: {0} = {1}", someModuleName, str2);
    Console.WriteLine(line2);

    Console.Read();
    }
    }
    }

    >>Да уж, и все таки как все это приляпать к трейнеру?

    Если сложно встроить новый код, то могу посоветовать создать новый проект можно консольный или WinForms, или WPF в зависимости от опыта и от того что попроще. Для экспериментов по чтению и записи для адресов с цепочками указателей проще работать с консольным проектом.

    Так вот создаёшь пустой проект. Вставляешь в него мой код. Проверяешь со своими значениями. Если всё работает, то теперь думаешь как написать код по чтению и записи значений.

    На нашем форуме должны быть примеры кода чтения адресов по пути указателя. Тебе нужно поискать этот самый код. Копировать и вставить в проект. Далее его нужно изменить с учётом базового адреса модуля. т.е. к базовому адресу будешь прибавлять смещения и читать адреса. Получишь конечный адрес. В этот адрес осуществишь запись. Проверяешь если всё работает, то начинается следующий этап.

    Открываешь предыдущий свой проект и колдуешь в функции UpdateCheatsTMR_Tick(). Именно в ней может быть проверка существования адреса по указателю и запись по нему, если этот адрес существует.

  19. Ой, моя ошибка.

    Надо использовать:


    String.Compare(modules[i].ModuleName, someModuleName, true) == 0

    Эта строка возвращает истину, если строки равны без учёта регистра.

    А этот код возвращает немного другое


    modules[i].ModuleName.Contains(someModuleName)

    Он возвращает истину, если имя модуля содержит указанную подстроку someModuleName. И в роде с учётом регистра. Во всяком случае с учётом регистра или без решать не мне. Но, я обычно не учитываю регистр.

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.