You are not logged in.
Pages: 1
У меня еще один вопрос по адресам, помогите пожалуйста.
cчитываю этот адрес (0xB6F3B8)+0x79C написано ,что в нем находится нацеленный пед.
Будет ли правильным следующий алгоритм?(при условии что (0xB6F3B8)+0x79C > 0)
n = 0xB74490;
x = (n)+12 //получить количество педов.
от 1 до x
{
Если (n) == (0xB6F3B8)+0x79C то a = (n) //получить пойнтер на нацеленного педа.
n = n + 0x7C4
}
Или надо по другому ?
Вообщем мне надо получить пойнтер на нацеленного педа, только мне не понятно как перенести эти две строки на C или delphi ,и нужно ли это вообще.
0AA8: call_function_method 0x4442D0 struct 2@ num_params 1 pop 0 ped 1@ store_to 0@
0AA6: call_method 0x4637E0 struct 0xA90850 num_params 2 pop 0 type 2 ped 1@
Из кода Alien'a.
Last edited by DimP (12-12-2009 09:18)
Offline
Если совсем уж в лоб, то можно так (Код для Visual C++):
DWORD GetTargetedPedHandle(void) { DWORD targetedPed, hTargetedPed; DWORD Target = *(DWORD*)0xB6F3B8; if (Target && (targetedPed = *(DWORD*)(Target + 0x79C), targetedPed)) hTargetedPed = ((DWORD (__thiscall*)(DWORD, DWORD))0x4442D0)(*(DWORD*)0xB74490, targetedPed); else hTargetedPed = 0; return hTargetedPed; }
С другими компилерами без асмовставок не обойтись. И не все они имеют встроенный ассемблер.
Приведенный ниже код не проверялся. Могут быть ошибки.
DWORD __declspec(naked) GetTargetedPedHandle(void) { __asm { mov eax, [0xB6F3B8] test eax, eax jz NoTarget mov eax, [eax + 0x79C] test eax, eax jz NoTarget mov ecx, [0xB74490] push eax mov eax, 0x4442D0 call eax retn NoTarget: mov eax, 0 retn } }
Offline
Спасибо ,круто даже на ассемблере вставка
hTargetedPed в эту переменную будет записываться пойнтер игрока(и хэндл это и есть пойнтер) ?
Аlien, скажи пожалуйста ,какая у тебя версия VC++ ? ,а то у меня VC6 не находит функцию __thiscall
Last edited by DimP (12-12-2009 13:43)
Offline
Ну я дурак , мне нужно было только понять что (0xB6F3B8)+0x79C это пойнтер нацеленного педа .
Спасибо огромное, заодно я стал понимать и функции
Offline
Pages: 1