Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Использование функций автопилота.

-

Разработка ПО для Perfect World

- Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World

Ответ
 
Опции темы
Старый 27.04.2012, 22:06   #1
 Разведчик
Аватар для vogel
 
vogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личность
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
 
По умолчанию Использование функций автопилота.

Решил вот поделиться с сообществом функциями управления игровым автопилотом.
Он, к сожалению, не настолько хорош как в JD или FW, но тем не менее мне нравится его использовать вместо стандартной функции движения.

Для начала определим необходимые константы :
Код:
Const                 
  PW_BASE_ADDRESS   = $00A571E0;
  PW_DYNAMIC_BASE_OFFSET = $001c;       // [base] + 1c = CECGameRun
  PW_ROLE_BASE_OFFSET = $0034;          // [base] + 1c + 34

  AutoRouteAddr     = $00478ED0; //$004551D0; //$00452B60;
и напишем функцию, которую будем инжектить :
Код:
procedure AutoRouteCall(cmd : Pointer); stdcall;
var
  addr: Pointer;
begin
  addr := Pointer(AutoRouteAddr);
  asm
    pushad
    mov eax, dword ptr [PW_BASE_ADDRESS]
    mov eax, dword ptr [eax + PW_DYNAMIC_BASE_OFFSET]
    mov ecx, dword ptr [eax + PW_ROLE_BASE_OFFSET]
    push cmd
    call addr
    popad
  end;
end;
Это - единственная точка входа для управления всем, что связано с автопилотом в игре.
Управление осуществляется передачей ей массива параметров :

Вот так, для того, чтобы начать движение к точке с координатами (x, y) :
Код:
procedure AutoRouteStart(x, y : integer);
var
  buf : array[0..6] of integer;
begin
  buf[0] := 330;
  buf[1] := 0;
  buf[2] := 0;
  buf[3] := 0; // Команда на взлёт
  buf[4] := x;
  buf[5] := y;
  buf[6] := 0;
  InjectFunc(@AutoRouteCall, @buf, SizeOf(buf));
end;
Вот так, чтобы начать плавный подъём к указанной высоте :
Код:
procedure AutoRouteAltitude(z : integer);
var
  buf : array[0..6] of integer;
begin
  buf[0] := 330;
  buf[1] := 0;
  buf[2] := 0;
  buf[3] := 1; // Команда сменить высоту
  buf[4] := z;
  buf[5] := 0; // Хз что, но может быть 0 или 1
  buf[6] := 0;
  InjectFunc(@AutoRouteCall, @buf, SizeOf(buf));
end;
И вот так, чтобы прекратить движение :
Код:
procedure AutoRouteStop();
var
  buf : array[0..6] of integer;
begin
  buf[0] := 330;
  buf[1] := 0;
  buf[2] := 0;
  buf[3] := 2; // Команда стоп
  buf[4] := 0; buf[5] := 0; buf[6] := 0;
  InjectFunc(@AutoRouteCall, @buf, SizeOf(buf));
end;
Использовать это можно вот так :

Код:
AutoRouteStart(1350, 345);
AutoRouteAltitude(75);
Комментируем, задаём вопросы, ставим спасибы...

Последний раз редактировалось vogel; 28.04.2012 в 00:12.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Jok3r666 (28.12.2012), Lermontov (10.05.2012)
Старый 28.04.2012, 18:41   #2
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Использование функций автопилота.

Куда "вставлять" эту функцию? В смысле перед чем или после чего?
Цитата:
procedure AutoRouteCall(cmd : Pointer); stdcall;
var
addr: Pointer;
begin
addr := Pointer(AutoRouteAddr);
asm
pushad
mov eax, dword ptr [PW_BASE_ADDRESS]
mov eax, dword ptr [eax + PW_DYNAMIC_BASE_OFFSET]
mov ecx, dword ptr [eax + PW_ROLE_BASE_OFFSET]
push cmd
call addr
popad
end;
end;

  Ответить с цитированием
Старый 28.04.2012, 21:46   #3
 Разведчик
Аватар для x3max
 
x3max никому не известный тип
Регистрация: 10.11.2010
Сообщений: 4
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 16 раз(а) в 8 сообщениях
 
По умолчанию Re: Использование функций автопилота.

Цитата:
Сообщение от LermontovПосмотреть сообщение
Куда "вставлять" эту функцию? В смысле перед чем или после чего?

повнимательнее на строку:
InjectFunc(@AutoRouteCall, @buf, SizeOf(buf));
  Ответить с цитированием
Старый 28.04.2012, 22:17   #4
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Использование функций автопилота.

Цитата:
Сообщение от x3maxПосмотреть сообщение
повнимательнее на строку:
InjectFunc(@AutoRouteCall, @buf, SizeOf(buf));

На этой строчке и выбивает ошибку
  Ответить с цитированием
Старый 28.04.2012, 22:39   #5
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Использование функций автопилота.

Цитата:
Сообщение от DinmaiteПосмотреть сообщение
Код:
procedure AutoPathCall(aPParams:PParams); stdcall;
var
  addr:pointer;
  x,y:dword;
begin
  x:=aPParams^.param1;
  y:=aPParams^.Param2;
  z:=aPParams^.Param3;
  addr := Pointer($00438770);
  asm
    pushad
      MOV EDI,y
      MOV ESI,x
      MOV EAX,DWORD PTR DS:[$9C0E6C]  // base_addr
      PUSH 0                          //     ; /Arg7 = 00000000
      PUSH EDI                        //     ; |Arg6
      MOV ECX,DWORD PTR DS:[EAX+$1C]  //     ; |
      PUSH ESI                        //     ; |Arg5
      PUSH 0                          //     ; |Arg4 = 00000000
      PUSH 0                          //     ; |Arg3 = 00000000
      PUSH 0                          //     ; |Arg2 = 00000000
      PUSH $14A                       //     ; |Arg1 = 0000014A
      call addr                       //     ; \elementc.00438770

      
      MOV EDX,DWORD PTR DS:[$9C0E6C]           //;  elementc.009C14F8
      XOR EAX,EAX
      MOV AL,0
      PUSH 0                                   //; /Arg7 = 00000000
      MOV ECX,DWORD PTR DS:[EDX+$1C]           //; |
      MOV EDX,z                                //; |
      PUSH EAX                                 //; |Arg6 = 00000000
      PUSH EDX                                 //; |Arg5 = Высота полета
      PUSH 1                                   //; |Arg4 = 00000001
      PUSH 0                                   //; |Arg3 = 00000000
      PUSH 0                                   //; |Arg2 = 00000000
      PUSH $14A                                //; |Arg1 = 0000014A
      CALL addr                                //; \elementc.00438770
    popad
  end;
end;


procedure AutoPath(realcoord_X,realcoord_Y,realcoord_Z:single);
begin
  aParams.Param1:=round(realcoord_X);
  aParams.Param2:=round(realcoord_Y);
  aParams.Param3:=round(realcoord_Z); // высота полета
  InjectFunc(aHandle,@AutoPathCall,@aParams,SizeOf(aParams));
end;


Молодец что поделился.
  Ответить с цитированием
Старый 29.04.2012, 14:05   #6
 Разведчик
Аватар для vogel
 
vogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личность
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
 
По умолчанию Re: Использование функций автопилота.

Цитата:
Сообщение от LermontovПосмотреть сообщение
На этой строчке и выбивает ошибку

Вот она, вотонаотонааа процедура инжекта моей мечты.
  Ответить с цитированием
Старый 30.04.2012, 14:44   #7
 Разведчик
Аватар для samosi
 
samosi на правильном путиsamosi на правильном пути
Регистрация: 23.12.2011
Сообщений: 42
Популярность: 192
Сказал(а) спасибо: 26
Поблагодарили 11 раз(а) в 9 сообщениях
 
По умолчанию Re: Использование функций автопилота.

хм... После инжекта он хрен пойми куда летит... Почему так?

Последний раз редактировалось samosi; 30.04.2012 в 15:40.
  Ответить с цитированием
Старый 02.05.2012, 00:18   #8
 Разведчик
Аватар для vogel
 
vogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личность
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
 
По умолчанию Re: Использование функций автопилота.

Он летит туда, куда посылаешь. Ровно в указанные координаты.
  Ответить с цитированием
Старый 02.05.2012, 11:52   #9
 Разведчик
Аватар для samosi
 
samosi на правильном путиsamosi на правильном пути
Регистрация: 23.12.2011
Сообщений: 42
Популярность: 192
Сказал(а) спасибо: 26
Поблагодарили 11 раз(а) в 9 сообщениях
 
По умолчанию Re: Использование функций автопилота.

хм не могли бы вы дать мне код? Так как у меня он летит всегда в правый верхний угл за картой.
  Ответить с цитированием
Старый 02.05.2012, 16:24   #10
 Разведчик
Аватар для vogel
 
vogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личность
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
 
По умолчанию Re: Использование функций автопилота.

Просьба не путать - куда он летит и куда показывает пунктирная линия.
Летит он куда послал из функции AutoRouteStart(х. у);
А пунктирную линию рисует либо к предыдущей точке, куда ты летел вручную либо в правый верхний угол.
За корректную отрисовку отвечает другая (хз какая) функция - я её пока не нашёл.
  Ответить с цитированием
Пользователь сказал cпасибо:
samosi (02.05.2012)
Старый 02.05.2012, 17:01   #11
 Разведчик
Аватар для samosi
 
samosi на правильном путиsamosi на правильном пути
Регистрация: 23.12.2011
Сообщений: 42
Популярность: 192
Сказал(а) спасибо: 26
Поблагодарили 11 раз(а) в 9 сообщениях
 
По умолчанию Re: Использование функций автопилота.

Спс все пашет. Но линию надо доделать.
P.S. Dinmaite твоя функу почему то не пашет...(Офсеты были поменяны.)

Последний раз редактировалось samosi; 02.05.2012 в 17:42.
  Ответить с цитированием
Старый 02.05.2012, 17:39   #12
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Использование функций автопилота.

samosi, он привёл старый пример со старыми оффсетами.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 06.05.2012, 22:34   #13
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Использование функций автопилота.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;

    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  KlientWindow:HWND; //Handle клиента
  ProcessId:Integer;
  hProcess:Integer;

implementation

{$R *.dfm}




  Const                 
  PW_BASE_ADDRESS   = $00A571E0;
  PW_DYNAMIC_BASE_OFFSET = $001c;       // [base] + 1c = CECGameRun
  PW_ROLE_BASE_OFFSET = $0034;          // [base] + 1c + 34

  AutoRouteAddr     = $00478ED0; //$004551D0; //$00452B60;

 
  procedure TForm1.Button1Click(Sender: TObject);
begin

 ProcessId:= FindWindow(nil, PChar('Perfect World')); //Находим Handle окна
GetWindowThreadProcessId(KlientWindow,@ProcessId); //Получаем Ид.П.
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,KlientWindow);
end;





  procedure InjectFunc(Func: Pointer; 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 AutoRouteCall(cmd : Pointer); stdcall;
var
  addr: Pointer;
begin
  addr := Pointer(AutoRouteAddr);
  asm
    pushad
    mov eax, dword ptr [PW_BASE_ADDRESS]
    mov eax, dword ptr [eax + PW_DYNAMIC_BASE_OFFSET]
    mov ecx, dword ptr [eax + PW_ROLE_BASE_OFFSET]
    push cmd
    call addr
    popad
  end;
end;

procedure AutoRouteStart(x, y : integer);
var
  buf : array[0..6] of integer;
begin
  buf[0] := 330;
  buf[1] := 0;
  buf[2] := 0;
  buf[3] := 0; // Команда на взлёт
  buf[4] := x;
  buf[5] := y;
  buf[6] := 0;
  InjectFunc(@AutoRouteCall, @buf, SizeOf(buf));
end;









 procedure TForm1.Button2Click(Sender: TObject);

begin

  AutoRouteStart(1350, 345);
end;
Что не так в моем бреде?
  Ответить с цитированием
Старый 07.05.2012, 00:33   #14
 Разведчик
Аватар для vogel
 
vogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личность
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
 
По умолчанию Re: Использование функций автопилота.

А что не работает-то ?
  Ответить с цитированием
Старый 13.05.2012, 20:29   #15
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Использование функций автопилота.

Как заставить программу лететь по координатам указанных в, допустим, Edit1 и Edit2?
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WallHack:функции,описание функций. GRoooV1k Общение и обсуждение, архив Point Blank 8 20.01.2012 14:46
[Подсказка] WallHack:функции,описание функций. Rickimaru Общение и обсуждение, архив Point Blank 1 02.11.2011 21:34
[Статья] Использование Internet-функций Win32 API [Delphi] Tem1q Pascal/Delphi 0 06.12.2010 16:30

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

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

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