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

keng

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

    1 635
  • Зарегистрирован

  • Посещение

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

    55

Весь контент keng

  1. Другие оси поискать, структуру поискать, всё ведь разжёвывали уже. 0_о
  2. Эээ, и всё-таки? Один из вариантов нерабочего скрипта?
  3. Что "тоже вариант"? Тоже не работает? Тоже работает? 0_о
  4. А почему нельзя вместо: mov [eax+000000b4],(float)1 mov ecx,[eax+000000b4] Сделать: mov ecx,(float)1 ?
  5. Просто float - это тоже четыре байта, просто дробное.
  6. Дык если там целое один байт - то и надо будет один байт записать. Просто я сразу байты из СЕ взял, чтобы из float не конвертировать.
  7. А что у тебя пишет? Я-то показывал float-значение в виде отдельных байт - оно как раз четыре байта занимает.
  8. Так будут ведь, будут! Всему своё время. А лс я не закрыл - просто место под них кончилось. Если что-то нужно - найди во флудилке тему "Заметочки кенга" и задавай вопросы там.
  9. Для начала - найди указатель на скорость атаки в структуре героя и возьми двух героев с разной скоростью атаки, повесь брейкпоинт на чтение на указатель и потрейси код - там должна быть функция изменения внутриигрового значения и экранного (надписи). Вот и посмотри, как это происходит.
  10. Вторая тема-сборник, куда я буду скидывать все видео про создание трейнеров на C#. Visual Studio можно бесплатно скачать [тут]. Понаехали: 27.03.2012: [первая запись] - создаём простенький каркас, учимся находить процесс и писать в память. 06.04.2012: [вторая запись] - улучшаем внешний вид, повторяем немного теорию про события, работаем с мышкой\клавиатурой.
  11. Это не обязательно текст - вполне может быть текстура, т.е. картинка с надписью, которую игра и отображает. В этом случае поиск затянется - но на всякий случай погугли на тему "замена текстур".
  12. Как вариант - собирать длл-ку с нужным асм-кодом и подгружать в своём проекте, просто так инлайн-ассемблер не поддерживается. Ещё можно попробовать часть проекта написать на C++, где этот самый ассемблер присутствует.
  13. Бывает и так, что автор сам пишет музыку к трейнеру (или пишет участник той же команды), а так - вырежешь музыку, может захотеться вырезать nfo, иконку, картинку, байт-код. Чаще всего всё это - уникальные вещи, так что я предпочитаю чужими трейнерами максимум пользоваться.
  14. Уважай чужой труд - не курочь чужие трейнеры. (:
  15. Посмотри, что игра делает с регистром eax выше твоей инструкции. Раз говорят, что там значение шифрованное - вот и выясни, как оно шифруется.
  16. Не факт, что у него код будет находиться по тем же смещениям. Ramil, ты инструкцию нашёл - поставь на неё брейкпоинт и посмотри, что в регистрах. В одном будет указатель на твои текущие патроны, в другом - новое значение патронов, т.е. как будто ты уже пострелял. Надо будет в тот регистр, где хранится новое значение патронов, записать (int)99, судя по скриптам выше.
  17. Оно не может быть "байт или флоат", адрес реального значения может быть только один и только одного типа, если находится несколько - это или идентичные значения или экранные. Игровой код работает всегда с одним адресом.
  18. Представим себе игровой экран, на котором написано слово "Здоровье" и рядом циферки 100. Ищем "100", три варианта: 1. Ты находишь два разных адреса с одинаковым значением "100", значения обоих изменяются при изменении нужной тебе переменной (здоровья). Как выяснить, который из адресов реальный? Заморозь значение одного из адресов. Если здоровье всё ещё убавляется (не на экране, а в принципе) - значит замороженный адрес отвечает за экранное значение. 2. Находишь один адрес, но при заморозке умереть всё равно можно. Тут посложнее - ставишь на адрес брейкпоинт (лучше сразу и на запись и на чтение) и натыкаешься на примерно такой код: MOV [EAX+19], EBX ... ... CALL 0012345 Здесь первая инструкция будет отвечать за экранное значение, код внутри второй - за истинное (или наоборот). Берёшь и отлаживаешь, ища регистр с нужным адресом. Такая ситуация происходит в том случае, если одна и та же инструкция работает с адресами игрока и противников, но отличие в том, что ботам совершенно не нужно видеть здоровье на экране - у них экрана банально нет. 3. Если значение не ищется или ищется только экранное, а отладить не получается - пробуем другие типы данных. Для верности ищем "неизвестное" всех типов сразу - байт, 2 байта, 4\8\float\double, затем - "уменьшилось\увеличилось". Может быть так, что истинное значение чуток зашифровано. Например, то ли в какой-то из GTA то ли в какой-то из Half-Life истинное значение здоровья можно было получить, умножив экранное на 16. Вроде того, я не помню сейчас конкретных цифр.
  19. А что с таймером не получилось? По идее, оно таймером как раз и делается. Или создавай отдельный поток, в котором делай типа: While(1) { WriteFloat(); Sleep(10); }
  20. Как бы, есть некоторая функция, типа: DamageCar(carObj, playerObj); Ей в аргументах приходит объект carObj, который представляет собой структуру машины и playerObj - объект, предствляющий структуру того, кто стреляет по этой машине, будь то игрок или кто-нибудь ещё. В структуре carObj творится что-то вроде: CarObj struct { int id; int type; float health; bool isPlayer; float x; float y; float z; } id - номер объекта в мире, глобальный. type - тип транспортного средства, машина\мотоцикл\самолёт и т.д. health - здоровье объекта. isPlayer - показывает, принадлежит ли этот объект игроку. Скажем, сидит ли он в ней. x\y\z - координаты этого объекта в игровом мире. Когда вызывается функция DamageCar(), ей абсолютно пофиг, кто стреляет по машине - она просто берёт из структуры playerObj оружие этого игрока (если это полицейский - то пистолет, если спецназовец - то М4А1 и т.п.), берёт урон этого оружия и отнимает его из поля health в структуре carObj, которая пришла в аргументы. Получается, что такой-то playerObj нанёс урон такой-то carObj, всё круто. В этот момент вклиниваемся мы и ставим дополнительное условие - "Если playerObj = наш игрок или же carObj.isPlayer = true, то урон не наносить". Мол, нафига наносить урон по нашей машине? Вот как-то так и выходит.
  21. Было бы удобно, ящитаю, прикрутить отправку сообщений по Ctrl+Enter.
  22. keng

    keng trnme

    Попробую что-нибудь придумать, но я никогда их не писал - это был первый.
×
×
  • Создать...

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

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