HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #10  
Старый 07.01.2026, 06:51
Tema05
Познавший АНТИЧАТ
Регистрация: 05.10.2019
Сообщений: 1,649
С нами: 3477805

Репутация: 168


По умолчанию

Цитата:
Сообщение от wafq  

Пробовал твой метод, не сработало. Тут уж не знаю, то ли я криворукий то ли амазинг не дает
Это не мой метод. Это то как в принципе все делают) И с широкой точки зрения единственный правильный вариант, кроме изобретения велосипеда.

А слова "не сработало" я честно говоря не понимаю. Что значит не сработало? Дебаггером ставить брейпоинты, смотришь что там вызывается, кто куда обращается, что записывает в память. Если не понятно ищешь через что угодно, хоть изменение координат персонажа, зависимость между движением и где в памяти триггерятся кнопки, смотришь кто и откуда их вызывает. Нельзя просто сказать "не сработало". Твой код же исполняется, значит что-то да и делает, хотя и не то что ты ожидал. Опять же ты не говоришь и не показываешь что именно ты пробуешь вызвать и как.

Цитата:
Сообщение от wafq  

Я хочу получать навыки
Ок, молодец, получай, одобряем.

Цитата:
Сообщение от wafq  

реверсом я ранее не занимался, мой максимум был циферки в чит энжин вводить
Я так и подумал, в целом через чит энджин можно +- всё необходимые раскопать (другие программы разве что более удобны в определённых задачах).

Цитата:
Сообщение от wafq  

То что сейчас - часть познания и развития. Я делаю софт под себя не больше
Не знаю что ты подумал, но я тебе ни в чём не упрекал, тут большинство даже не поняли бы, что я написал. Попробуй щас найти исполнителя не за 25к, который после слова "ревёрс" не сольётся)

Цитата:
Сообщение от wafq  

Зареверсил, вышло B72D50, спасибо тебе большое, теперь все работает у мя
Адреса всегда принято указывать с названием файла. И смещение от него. Также нужно учесть, что конкретно у gta_sa.exe базовый адрес 40000, а не 1000 как у большинства. Ну ладно, я могу понять, что речь про абсолютный адрес gta_sa.exe.

Ты делаешь не очень хорошую практику. Потому что твой адрес это какое-то место в CPad::TempKeyState (CKeyboardState) (вероятно конкретная клавиша). Так лучше не делать, а указывать оффсеты в структуре и вычислять их (даже когда ты просто хочешь привести пример или указать пишут что-то вроде file.dll+0x55555+4*i (где i индекс чего-то там)).



Далее можно увидеть, что обращение к этим данным есть в 3 местах. В 2 из них это просто очистка.



В 3 же они тупо перезаписываются в CPad:NewKeyState.



И как я выше приводил пример реализации из мунлоадера у нас запись идёт без смешения по структуре CPad. Только считается смещение в 2 байта по индексу клавиши.



А в CPad в начале т.е. без смещения у нас идут NewState клавиши.



Это я всё к тому, что ты пишешь в TempKeyState, которые нигде не используются кроме как записываются в NewKeyState. А реализация из мунлоадера пишет сразу в NewState. И тут как говорится "А не ебанёт? Да не должно.". Может быть обязательно нужно сразу писать в NewState, а может можно и в TempState и оно само запишется туда. Из последствий может быть нарушена поочередность обработки внутри кадра, но хз важно ли это КОНКРЕТНО В ЭТОЙ ситуации.

Также прошу обратить внимание, что CPad::NewKeyState с структурой CKeyboardState это по сути вся клавиатура ближе к уровню винды:


А реализация муна получает указатель на нашу структуру CPad и далее пишет в поле NewState, которое является структурой CControllerState. Отличие этих структур в том, что последние являются так называемыми "gamekey", т.е. набором из состояний 24 игровых клавиш, которые непосредственно влиют на управление персонажам на уровне игры. Это по сути те клавиши, что у нас указаны в настройках. Проше говоря ты записываешь состояния нажатий на уровне самой клавиатуры, а функция муна непосредственно игровые нажатия. Вероятно первые где-то конвертируются в последние.

Я это всё пишу не потому что ты что-то неправильно сделал, нет. А просто, чтоб ты задумался, что именно ты делаешь. В работе с памятью можно запросто выстрелить себе в ногу так, что ты даже не поймёшь, а потом будешь ломать голову. Принято использовать уже существующие реализации от более опытных разработчиков если они есть. Фип сделал эмуляцию клавиш через получение структуры CPad при помощи CPad::GetPad(0) и последующие записи в поле NewState, значит это лучшее решение. Были у этого реальные основания или нет уже другой вопрос, как и то будут ли проблемы в твоей реализации.

Опять же в Амазинге возможны изменения, которые усложняют эту реализацию и надо разбираться почему оно так не работает. Возможно тупо адрес другой или структура CPad у них перенесена в другое место. Тут только ревёрсить докапываясь до всех нюансов или смотреть на практике. Опять же повторюсь, если ты сделал как-то по другому и оно так заработало это не плохо, просто желательно понимать, почему так, чтобы позже не столкнуться с большими проблемами. Очень часто действия в 1 месте могут ломать что-то абсолютно с этим не связанное, через супер косвенные моменты. А могут и не сломать)
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...