Вопрос Как работают анимбрейкеры?

Femboy Access
Эксперт
Статус
Оффлайн
Регистрация
11 Ноя 2020
Сообщения
1,333
Реакции[?]
428
Поинты[?]
96K
И еще, что делает ffi.cast?
Допустим, у тебя есть участок памяти, который имеет в себе число, но твоя луашка не может знать число ли это, или строка, или вообще аррей с баранами которых трахал таджик
В данном случае ffi.cast позволяет тебе научить луашку что же это за тип данных, и все что тебе надо - это показать на участок памяти с этими данными и сам тип данных

Пример: у тебя по оффсету 0x666 + 0x10 + 0x33 находится циферка типа int

кастуешь local pointer_to_some_int = ffi.cast("int*", ffi.cast("uintptr_t", 0x666 + 0x10 + 0x33))

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

local current_value = pointer_to_some_int[0] -- получение
pointer_to_some_int[0] = 666 -- замена

Так же и с любыми другими типами данных, но я тебе советую выучить чутка типы данных C, это не сложно
 
znev1ne - pro hvh player since 2k20
Начинающий
Статус
Оффлайн
Регистрация
9 Дек 2018
Сообщения
203
Реакции[?]
14
Поинты[?]
3K
Допустим, у тебя есть участок памяти, который имеет в себе число, но твоя луашка не может знать число ли это, или строка, или вообще аррей с баранами которых трахал таджик
В данном случае ffi.cast позволяет тебе научить луашку что же это за тип данных, и все что тебе надо - это показать на участок памяти с этими данными и сам тип данных

Пример: у тебя по оффсету 0x666 + 0x10 + 0x33 находится циферка типа int

кастуешь local pointer_to_some_int = ffi.cast("int*", ffi.cast("uintptr_t", 0x666 + 0x10 + 0x33))

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

local current_value = pointer_to_some_int[0] -- получение
pointer_to_some_int[0] = 666 -- замена

Так же и с любыми другими типами данных, но я тебе советую выучить чутка типы данных C, это не сложно
:coldsideRage:
 
Начинающий
Статус
Оффлайн
Регистрация
18 Апр 2023
Сообщения
69
Реакции[?]
6
Поинты[?]
6K
Допустим, у тебя есть участок памяти, который имеет в себе число, но твоя луашка не может знать число ли это, или строка, или вообще аррей с баранами которых трахал таджик
В данном случае ffi.cast позволяет тебе научить луашку что же это за тип данных, и все что тебе надо - это показать на участок памяти с этими данными и сам тип данных

Пример: у тебя по оффсету 0x666 + 0x10 + 0x33 находится циферка типа int

кастуешь local pointer_to_some_int = ffi.cast("int*", ffi.cast("uintptr_t", 0x666 + 0x10 + 0x33))

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

local current_value = pointer_to_some_int[0] -- получение
pointer_to_some_int[0] = 666 -- замена

Так же и с любыми другими типами данных, но я тебе советую выучить чутка типы данных C, это не сложно
Типо так?

luavar = ffi.cast("int*", cvar)
print(luavar)
>> 83

Кстати, почему тип сначала - это указатель?
 
Пользователь
Статус
Оффлайн
Регистрация
3 Июл 2021
Сообщения
825
Реакции[?]
93
Поинты[?]
10K
Можно и напрямую через пропы сделать. (localplayer.m_flPoseParameter и погнал)
Посмотреть вложение 256330
10104 это и есть поспараметер
Посмотреть вложение 256331
А перед ним типа энтити адрес. И складывая этот адрес с пропом ты получаешь проп конкретного энтити (вроде бы этот так работает, не уверен). А потом ты его меняешь. Через ффи это делают потому что пошёл миф типа якобы анимбрикер через пропы ломает резик (он не может ломать резик если ты свои анимки меняешь лол) и так $$$ премиумнее $$$ и ещё какие то другие причины. Советую не парится и сделать через пропы.
какая замена есть этому?


code_language.lua:
ffi.cast("CAnimationLayer**", ffi.cast("uintptr_t", thisptr) + 0x2990)[0][6].m_flWeight
 
Privatny p100 DT Airlag Break LC Teleport Exploit
Read Only
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
951
Реакции[?]
150
Поинты[?]
74K
Femboy Access
Эксперт
Статус
Оффлайн
Регистрация
11 Ноя 2020
Сообщения
1,333
Реакции[?]
428
Поинты[?]
96K
Типо так?

luavar = ffi.cast("int*", cvar)
print(luavar)
>> 83

Кстати, почему тип сначала - это указатель?
Типо так, только для получения значения надо еще [0] после ффикаста

Указатель потому что ты передаешь адрес где находится значение, а не само значение. Хочешь не указатель -
local циферка_не_указашка = ffi.cast("int*", ...)[0]
 
Сверху Снизу