Здравствуйте. Прошу помочь разобраться в том, как находятся смещения для обьектов, при хуке нативных функций. Например:
local integer ConvertedHandle = ConvertHandle(handle)
local integer ReadedRealMem = ReadRealMemory( ConvertedHandle )
Далее, если передать значение переменной ReadedRealMem, например в CallCdeclWith5Args, в качестве аргумента к нативной функции, которая принимает обьект как void, происходит фатал. Это единственное, что вызывает у меня на данный момент трудности. Дополню, что если использовать вместо выше указанных переменных просто GetHandleId(handle), то хук работает замечательно, но к определенному типу обьекта, например если это SetUnitTimeScale(), и если передать в нее эффект, разрушаемый, и юнита, изменения применяться только к юниту, остальные в игноре, почему так происходит? И где можно об этом более детально почитать?

Принятый ответ

Ну сперва ты конвертируешь хендл в адресс, после ты задаёшь от адреса отступ, чтобы попасть в нужную ячейку структуры объекта, как до неё добраться нужно смотреть в чит енджине или дезасамблировать игру и вникать в логику работы интересующих тебя вещей.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
16
4 года назад
0
потому что эти функции проверяют, что ты им отправил, и ничего не делают в случае ошибки, очевидно же
потому что нужно понимать, что void означает пустой аргумент, ака ThisCall1Args(0) , где 0 =- просто потому что вызова без аргументов не предусмотрено в мх
без желания разбираться в этом можно и не начинать, я там года полтора бродил вслепую
1
32
4 года назад
1
Кое какие хуки выложены, щяс собираем все по мемхаку в одну карту +инструкцию.
Если DracoL1ch, поможет, мб будет больше функций.
0
1
4 года назад
0
DracoL1ch:
потому что эти функции проверяют, что ты им отправил, и ничего не делают в случае ошибки, очевидно же
потому что нужно понимать, что void означает пустой аргумент, ака ThisCall1Args(0) , где 0 =- просто потому что вызова без аргументов не предусмотрено в мх
без желания разбираться в этом можно и не начинать, я там года полтора бродил вслепую
Насчет проверки, логично, и я это прекрасно понимаю, так как очень даже знаком с с++, мне просто интересно, как можно это "обойти" или типо того. Желание разобраться как бы есть, мне это показалось очень интересным, именно по этому я задал этот вопрос, что бы получить совет у более опытных пользователей. Надеюсь, не слишком дерзко вышло, ведь по сути, вопрос задан для того, что бы сократить время в поиске обходных путей :)

quq_CCCP:
Кое какие хуки выложены, щяс собираем все по мемхаку в одну карту +инструкцию.
Если DracoL1ch, поможет, мб будет больше функций.
Это конечно хорошо, но использовать готовое не так интересно, как самому это сделать)
2
32
4 года назад
2
Undert4ker, ну да пройти многогодовой путь Человека + Комьюнити, ради результата который уже достигнут.. такое себе достижение.. Но если ты интересного пути, а не конечного результата, тогда это похвально
2
32
4 года назад
2
Undert4ker, смотря что тебе нужно, самое насущьное уже реализовали. Вроде детекта урона.
0
1
4 года назад
0
quq_CCCP:
Undert4ker, смотря что тебе нужно, самое насущьное уже реализовали. Вроде детекта урона.
Ну, я просто хочу понять как это делать самому, не более, после чего смогу со спокойной душой брать готовое, или дополнять своим, ибо функционал далеко не полон)
Как я уже написал, мне не до конца понятен конверт обьектов в целочисленные, а затем добавление к им смещения, а вернее, где их искать, как пример - вот эти hex значения 0x1F0 и 0xCC в данной функции:
function GetHeroPrimaryAttribute takes unit u returns integer
local integer a = ConvertHandle( u )
if a > 0 then
set a = ReadMemory( a + 0x1F0 )
if a > 0 then
return ReadMemory( a + 0xCC )
endif
endif
return 0
endfunction
0
32
4 года назад
0
Ну сперва ты конвертируешь хендл в адресс, после ты задаёшь от адреса отступ, чтобы попасть в нужную ячейку структуры объекта, как до неё добраться нужно смотреть в чит енджине или дезасамблировать игру и вникать в логику работы интересующих тебя вещей.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.