Анимации C++

ImmortalDev

Участник
Автор темы
90
50
Всем привет!
Решил поиграться с анимациями игрока.
В общем, имеется смещение - +0x15C, некоторые статусы анимации.
  • 0 = прыгает от земли
  • 61 = ударяет
  • 102 = остановился
  • 154 = спринт (бежит с ускорением)
  • 205 = бежит
Так вот, как установить одну из этих анимок игроку?
Пробовал так:
C++:
DWORD anim = *(DWORD*)0xB6F5F0 + 0x15C;
anim = 205;
Не работает.
Подскажите, как мне это сделать?
 

Vintik

Через тернии к звёздам
Проверенный
1,526
1,010
Ой, ужас, братишка, что ты творишь :)

0xB6F5F0 – указатель на CPed игрока (именно УКАЗАТЕЛЬ).
Ладно, напишу тебе:
C++:
DWORD CPedAdr = *(DWORD*)0xB6F5F0; // читаем адрес памяти CPED`а.
DWORD animAdr = CPedAdr + 0x15C; // вот на этом моменте к адресу CPED`а ты прибавляешь твой 0x15C (и получаешь адрес, где твоя анимка)
unsigned char anim = *(DWORD*)animAdr; // читаешь значение (анимации) из адреса, который хранит его.
// почему unsigned char? подозреваю, что там тип byte, который так записывается.


// А теперь как установить значение? Последнюю строку из кода выше тогда можно выкинуть (если тебе не надо его прочитать).
*(DWORD*)animAdr = (unsigned char)205; // это если ты хочешь выбрать "205 = бежит"
надеюсь, помог)

ты, кстати, хоть и неправильно прочитал адрес, а потом тупо В СВОЕЙ ПРОГРАММЕ изменил значение анимации и даже НЕ ЗАПИСАЛ НОВОЕ в игру =)
 
  • Нравится
Реакции: loganhackerdff

ImmortalDev

Участник
Автор темы
90
50
Ой, ужас, братишка, что ты творишь :)

0xB6F5F0 – указатель на CPed игрока (именно УКАЗАТЕЛЬ).
Ладно, напишу тебе:
C++:
DWORD CPedAdr = *(DWORD*)0xB6F5F0; // читаем адрес памяти CPED`а.
DWORD animAdr = CPedAdr + 0x15C; // вот на этом моменте к адресу CPED`а ты прибавляешь твой 0x15C (и получаешь адрес, где твоя анимка)
unsigned char anim = *(DWORD*)animAdr; // читаешь значение (анимации) из адреса, который хранит его.
// почему unsigned char? подозреваю, что там тип byte, который так записывается.


// А теперь как установить значение? Последнюю строку из кода выше тогда можно выкинуть (если тебе не надо его прочитать).
*(DWORD*)animAdr = (unsigned char)205; // это если ты хочешь выбрать "205 = бежит"
надеюсь, помог)

ты, кстати, хоть и неправильно прочитал адрес, а потом тупо В СВОЕЙ ПРОГРАММЕ изменил значение анимации и даже НЕ ЗАПИСАЛ НОВОЕ в игру =)
Я проверю, работает это или нет. Ибо мне уже ответили, что за установку анимации отвечает именно отдельная функция. Отпишу в общем сюда.
 

Vintik

Через тернии к звёздам
Проверенный
1,526
1,010
Опять же, я ничего касательно того, что отвечает за установку анимации – не знаю. Я лишь показал, как читать значение из определённого адреса памяти и записывать его туда.
Вообще рекомендую просто зайти в игру, предварительно скачав Cheat Engine, и найти адрес памяти, в котором хранится анимация (изменить анимацию - указать "Значение изменилось" или же "Changed value", не изменить анимацию - указать "Значение не изменилось" или же "Unchanged value"), после подключить инструкции, который записывают в этот адрес (F6 нажать, добавив и выделив нужный адрес в таблицу). Дальше уже что хочешь, то и делай – просто ноп или свой ассемблер-код: почитай стать, вот.

Дерзай, парень.