 |
Координаты, Delphi - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
27.08.2013, 14:14
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 20.08.2013
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Координаты, Delphi
Всем привет, хочу узнать координаты персоонажа. Поставил на таймер с интервалом в 0.1 сек такой код:
buf: integer;
CORD: dword;
wkz, wky, wkx: single;
X, Y, Z: string;
ReadProcessMemory(hProcess, pointer(PW_BASE_ADDRESS), @buf, sizeof(buf), CORD);
ReadProcessMemory(hProcess, pointer(buf+$1C), @buf, sizeof(buf), CORD);
ReadProcessMemory(hProcess, pointer(buf+$34), @buf, sizeof(buf), CORD);
ReadProcessMemory(hProcess, pointer(buf+$3C), @wkx, sizeof(wkx), CORD);
ReadProcessMemory(hProcess, pointer(buf+$40), @wkz, sizeof(wkz), CORD);
ReadProcessMemory(hProcess, pointer(buf+$44), @wky, sizeof(wky), CORD);
y := FloatToStr((wky + 4000) / 10);
y := Copy(y, 1, Pos(',', y) - 1);
x := FloatToStr((wkx + 5500) / 10);
x := Copy(x, 1, Pos(',', x) - 1);
Z := FloatToStr((wkz) / 10);
Z := Copy(Z, 1, Pos(',', Z) - 1);
Label1.Caption:= X;
Label2.Caption:= Y;
Label3.Caption:= Z;
Но выводит в 2 лейбела неверные координаты (Х, Y).
Высоту выводит нормально.
Делаю по нынешний руофф!
В чем ошибка?
+++++
Еще надо рабочий инжект(или как его там) передвижения и рассказать о нем что там да как))
Последний раз редактировалось 228116; 27.08.2013 в 18:47.
|
|
|
28.08.2013, 08:54
|
#2
|
|
|
|
Разведчик
|
 Регистрация: 01.07.2009
 Сообщений: 21
 Популярность: 44
 Сказал(а) спасибо: 76
Поблагодарили 15 раз(а) в 5 сообщениях
|
Re: Координаты, Delphi
У тебя х и у не по тем формулам считает
Код:
// из клиентских в игровые
float GameX(float px) { return (px + 4000) / 10; }
float GameY(float py) { return (py + 5500) / 10; }
float GameZ(float pz) { return pz / 10; }
// из игровых в клиентские
float ProcX(float gx) { return (gx * 10) - 4000; }
float ProcY(float gy) { return (gy * 10) - 5500; }
float ProcZ(float gz) { return gz * 10; }
Вырезано из темки про создание ботов. Так же там написано как делать передвижение
|
|
|
28.08.2013, 10:33
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 20.08.2013
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Координаты, Delphi
|
|
|
29.08.2013, 21:12
|
#4
|
|
|
|
Разведчик
|
 Регистрация: 01.07.2009
 Сообщений: 21
 Популярность: 44
 Сказал(а) спасибо: 76
Поблагодарили 15 раз(а) в 5 сообщениях
|
Re: Координаты, Delphi
|
|
|
30.08.2013, 06:38
|
#5
|
|
|
|
Пехотинец
|
 Регистрация: 19.02.2010
 Сообщений: 98
 Популярность: 650
 Сказал(а) спасибо: 23
Поблагодарили 150 раз(а) в 45 сообщениях
|
Re: Координаты, Delphi
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Спасибо, все получилось. Но я не нашел в его 2-х темах:
|
|
 |
|
 |
|
получение кордов
Код:
Function GetXYZ(cordtype:string):string;
var
data,data2:dword;
dataX,dataY,dataZ:Single;
begin
result:='';
data2:= getDWORD(OffSets_GAME_ADD);
data:= getDWORD(data2+OffSets_Player_ADD);
dataX:= getSINGLE(data+OffSets_LocX);
dataZ:= getSINGLE(data+OffSets_LocZ);
dataY:= getSINGLE(data+OffSets_LocY);
if cordtype='x' then result:=FloatToStr((round(dataX)+4000)/10);
if cordtype='y' then result:=FloatToStr((round(dataY)+5500)/10);
if cordtype='z' then result:=FloatToStr(round(dataZ)/10);
end;
инжект движения
 |
Цитата: |
 |
|
|
|
|
|
|
|
unit walk_function;
interface
uses
Windows, Dialogs;
procedure Walk(x, y, z: single; WalkMode: dword);
type
PParams = ^TParams;
TParams = packed record
Param1: DWord;
Param2,Param3,Param4: Single;
PW_GAMERUN_ADDR,Walk1,Walk2,Walk3,Walk_Ofs1:Pointe r;
end;
implementation
uses func, main, setup;
const
PW_BASE_ADDRESS = $B8FBCC;
PW_GAMERUN_ADDR = $00B9029C;
var
rw: cardinal;
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer;
aParamsSize: DWord);
var
hThread: THandle;
lpNumberOfBytes: DWord;
ThreadAddr, ParamAddr: Pointer;
begin
if ProcessID<>0 then
begin
// ---- Âûäåëÿåì ìåñòî â ïàìÿòè ïðîöåññà, è çàïèñûâàåì òóäà íàøó ôóíêöèþ
ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);
// ---- Òàêæå çàïèøåì ïàðàìåòðû ê íåé
ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);
// ---- Ñîçäàåì ïîòîê, â êîòîðîì âñå ýòî áóäåò âûïîëíÿòüñÿ.
hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytes);
// ---- Îæèäàåì çàâåðøåíèÿ ôóíêöèè
WaitForSingleObject(hThread, INFINITE);
// ---- ïîä÷èùàåì çà ñîáîé
CloseHandle(hThread);
VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
end
end;
procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
x,y,z:single;
flying WORD;
_PW_GAMERUN_ADDR,_Walk_Ofs1:Pointer;
begin
try
CallAddress1:=aPParams^.Walk1;;
CallAddress2:=aPParams^.Walk2;
CallAddress3:=aPParams^.Walk3;
x:=aPParams^.Param2;
y:=aPParams^.Param3;
z:=aPParams^.Param4;
flying:=aPParams^.Param1;
_PW_GAMERUN_ADDR:=aPParams^.PW_GAMERUN_ADDR;
_Walk_Ofs1:=aPParams^.Walk_Ofs1;
asm
pushad
mov eax, dword ptr _PW_GAMERUN_ADDR
mov eax, dword ptr [eax]
mov esi, dword ptr [eax+$34]
mov ecx, dword ptr _Walk_Ofs1
mov ecx, dword ptr [esi+ecx]
push 1
call CallAddress1
mov edi, eax
lea eax, dword ptr [esp+$18]
push eax
push flying
mov ecx, edi
call CallAddress2
mov ecx, dword ptr _Walk_Ofs1
mov ecx, dword ptr [esi+ecx]
push 0
push 1
push edi
push 1
call CallAddress3
mov eax, dword ptr _PW_GAMERUN_ADDR
mov eax, dword ptr [eax]
mov eax, dword ptr [eax+$34]
mov esi, dword ptr _Walk_Ofs1
mov eax, dword ptr [eax+esi]
mov eax, dword ptr [eax+$30]
mov ecx, dword ptr [eax+$4]
mov eax, x
mov dword ptr[ecx+$20], eax
mov eax, z
mov dword ptr[ecx+$24], eax
mov eax, y
mov dword ptr[ecx+$28], eax
popad
end;
Except
showmessage ('ошибка WalkCall');
end;
end;
{function BaseWalkMode: dword;
var
addr: dword;
begin
try
readprocessmemory(hProcess, ptr(PW_GAMERUN_ADDR), @addr, sizeof(addr), rw);
readprocessmemory(hProcess, ptr(addr + $20), @addr, sizeof(addr), rw);
readprocessmemory(hProcess, ptr(addr + $61C), @addr, sizeof(addr), rw);
result := addr;
Except
showmessage ('ошибка тут 4');
end;
end; }
procedure Walk(x, y, z: single; WalkMode: dword);
var aParams: TParams;
begin
try
// showmessage(floatToStr(x)+' '+floatToStr(round(x/10+400))+' '+floatToStr(y)+' '+floatToStr(z)+' '+ IntToStr(WalkMode));
// ReadProcessMemory(hProcess, ptr(BaseWalkMode), @WalkMode, 1, rw); //BaseWalkMode = GA +20 +61C
if WalkMode = 0 then aParams.Param1:=0 else aParams.Param1:=1;
if WalkMode = 1 then aParams.Param1:=1;
if WalkMode = 2 then aParams.Param1:=1;
aParams.Param2:=(x-400)*10;
aParams.Param3:=(Y-550)*10;
aParams.Param4:=Z*10;
aParams.PW_GAMERUN_ADDR:=Pointer(OffSets_GAME_ADD) ;
aParams.Walk1:=Pointer(OffSets_walk1);
aParams.Walk2:=Pointer(OffSets_walk2);
aParams.Walk3:=Pointer(OffSets_walk3);
aParams.Walk_Ofs1:=Pointer(OffSets_Walk_Ofs1);
InjectFunc(hProcess,@WalkCall,@aParams,SizeOf(aPar ams));
Except
showmessage ('ошибка тут Walk');
end;
end;
end. |
|
 |
|
 |
|
главное правильно проставить адреса
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Автор программы PwRuf - Bot и PwRuf - Crafter
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 06:13.
|
 |