Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Координаты, Delphi

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 27.08.2013, 14:14   #1
 Разведчик
Аватар для 228116
 
228116 никому не известный тип
Регистрация: 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
Читер-спонсор
 Разведчик
Аватар для 388672
 
388672 на правильном пути
Регистрация: 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
 Разведчик
Аватар для 228116
 
228116 никому не известный тип
Регистрация: 20.08.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Координаты, Delphi

Цитата:
Сообщение от 388672Посмотреть сообщение
У тебя х и у не по тем формулам считает

Код:
        // из клиентских в игровые
        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; }
Вырезано из темки про создание ботов. Так же там написано как делать передвижение

Спасибо, все получилось. Но я не нашел в его 2-х темах:
Цитата:
Так же там написано как делать передвижение

  Ответить с цитированием
Старый 29.08.2013, 21:12   #4
Читер-спонсор
 Разведчик
Аватар для 388672
 
388672 на правильном пути
Регистрация: 01.07.2009
Сообщений: 21
Популярность: 44
Сказал(а) спасибо: 76
Поблагодарили 15 раз(а) в 5 сообщениях
 
По умолчанию Re: Координаты, Delphi

http://zhyk.ru/forum/showthread.php?t=414162

В цикле этих статей было что то подобное
  Ответить с цитированием
Старый 30.08.2013, 06:38   #5
-= Мастер Света =-
 Пехотинец
Аватар для rufat2005
 
rufat2005 излучает ауруrufat2005 излучает ауруrufat2005 излучает ауруrufat2005 излучает ауруrufat2005 излучает ауруrufat2005 излучает ауру
Регистрация: 19.02.2010
Сообщений: 98
Популярность: 650
Сказал(а) спасибо: 23
Поблагодарили 150 раз(а) в 45 сообщениях
Отправить сообщение для rufat2005 с помощью ICQ Отправить сообщение для rufat2005 с помощью Skype™
 
По умолчанию Re: Координаты, Delphi

Цитата:
Сообщение от 228116Посмотреть сообщение
Спасибо, все получилось. Но я не нашел в его 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;
flyingWORD;
_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.

главное правильно проставить адреса
________________
PWA for PWPVP
Автор программы PwRuf - Bot и PwRuf - Crafter
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Руководство] Настраиваем Delphi 2010/XE, чтобы она выглядела как Delphi 7 RifmoGlas Pascal/Delphi 2 09.02.2013 13:09
Полярные координаты. Sinyss Вопросы и ответы, обсуждения 2 07.05.2012 22:47
[Информация] Помощь в Delphi 7 и в других версиях Delphi Babls77 Pascal/Delphi 4 03.11.2011 21:27
КООРДИНАТЫ WEH liovin Читы, баги и статьи по WoW 3 24.03.2011 21:58
координаты земель? ex3me Архив 6 16.07.2009 14:35

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 05:22.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net