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

Выбор квеста у НПС

-

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

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

Ответ
 
Опции темы
Старый 18.08.2012, 03:01   #1
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Выбор квеста у НПС

Проблема такова как выбрать квест в открытом диалоге с нпс? Пробовал делать так:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  PParams = ^TParams;
  TParams = packed record
    Packet: array [0..100] of byte;
    Param1: DWord;
  end;

const
  PW_BASE_ADDRESS = $00A571E0;
  GA = $00A57ACC;

var
  Form1: TForm1;
  rw: cardinal;
  hProcess: Dword;

implementation

{$R *.dfm}
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 PacketCall(aPParams:PParams); stdcall;
var
  CallAddress,pPacket:pointer;
  Len:DWord;
begin
  CallAddress:=Pointer($0063DB70);
  Len:=aPParams^.Param1;
  pPacket:=@aPParams^.Packet;
  asm
    pushad
    mov ecx, dword ptr [PW_BASE_ADDRESS]
    mov ecx, dword ptr [ecx+$20]
    push Len
    push pPacket
    call CallAddress
    popad
  end;
end;

procedure StrToByte(Packet:string; var aParams:TParams);
var
  i:integer;
begin
  i:=(length(Packet) div 2)-1;
  aParams.Param1:=i+1;
  for i:=0 to i do
    aParams.Packet[i]:=strtoint('$'+Packet[i*2+1]+Packet[i*2+2]);
end;

procedure Packet(Packet: string);
var
  aParams: TParams;
begin
  StrToByte(Packet,aParams);
  InjectFunc(hProcess,@PacketCall,@aParams,sizeof(aParams));
end;

procedure ConnectClient;
var
  PID: Dword;
  WID: Thandle;
begin
  WID := FindWindow(nil, 'Perfect World');
  GetWindowThreadProcessId(WID, @PID);
  hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, PID);
end;

function Read_32(Addr: Dword): Dword;
var value: Dword;
begin
  ReadProcessMemory(hProcess, ptr(addr), @value, sizeof(value), rw);
  result := value;
end;

function WinStruct(WinName: string): Dword;
var
  arr, addr, next, res: Dword;
  mass: array[1..20] of Char;
  name: String;
  i: integer;
begin
  arr := Read_32(GA);
  arr := Read_32(arr + $18);
  arr := Read_32(arr + $08);
  addr := Read_32(arr + $AC);
  while (addr <> 0) do
    begin
      next := Read_32(addr);
      addr := Read_32(addr + $08);
      res := addr;
      addr := Read_32(addr + $4C);
      ReadProcessMemory(hProcess, ptr(addr), @mass, sizeof(mass), rw);
      i := 1;
      name := '';
      while (mass[i] <> '') do
        begin
          name := name + mass[i];
          inc(i);
        end;
      if (name = WinName) then
        begin
          result := res;
          exit;
        end;
      addr := next;
    end;
  addr := Read_32(arr + $8C);
  while (addr <> 0) do
    begin
      next := Read_32(addr);
      addr := Read_32(addr + $08);
      res := addr;
      addr := Read_32(addr + $4C);
      ReadProcessMemory(hProcess, ptr(addr), @mass, sizeof(mass), rw);
      i := 1;
      name := '';
      while (mass[i] <> '') do
        begin
          name := name + mass[i];
          inc(i);
        end;
      if (name = WinName) then
        begin
          result := res;
          exit;
        end;
      addr := next;
    end;
  result := 0;
end;

function CtrlItemAddr(winstruct: Dword; nomctrl: integer): Dword;
var
  addr: Dword;
  i: integer;
begin
  addr := Read_32(winstruct + $1C8);
  for i := 1 to nomctrl do
    addr := Read_32(addr + $04);
  addr := Read_32(addr + $08);
  result := addr + $13C;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ItemAddr: Dword;
  numb: integer;
begin
  ConnectClient;
  Packet('2300ED111080');
  numb := 1;
  itemAddr := CtrlItemAddr(WinStruct('Win_NPC'), 1);
  WriteProcessMemory(hProcess, ptr(ItemAddr), @numb, sizeof(numb), rw);
end;

end.
диалог с нпс открывает, но квест не берет... Я думаю это конечно логически, т.к. перемешение выделения в диалоге не выход) квест то всеравно не берется... Пробовал отловить пакет на выбор квеста, эффекта нуль( так вот собственно помогите встать на путь истинный
  Ответить с цитированием
Старый 18.08.2012, 12:11   #2
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Выбор квеста у НПС

Пакет на взятие квеста:
Код:
25 00 07 00 00 00 0C 00 00 00 XX XX XX XX 00 00 00 00 00 00 00 00
XX XX XX XX - это айди квеста, можно узнать по pwdatabase.com
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Пользователь сказал cпасибо:
vladoscom93 (18.08.2012)
Старый 18.08.2012, 14:38   #3
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Выбор квеста у НПС

эм возникла другая проблема как например перейти по строчке в диалоге, к которой не привязан какой-то квест
  Ответить с цитированием
Старый 18.08.2012, 15:08   #4
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Выбор квеста у НПС

Цитата:
Сообщение от vladoscom93Посмотреть сообщение
перейти по строчке в диалоге, к которой не привязан какой-то квест

Приведи пример, что ты хочешь сделать то?
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 18.08.2012, 15:20   #5
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Выбор квеста у НПС

допустим у мистического торговца перейти к окну уже самих манипуляций с фишками

Добавлено через 2 минуты
аналогия как вот крафтят яшму, думаю система одна

Последний раз редактировалось vladoscom93; 18.08.2012 в 15:22. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 18.08.2012, 15:29   #6
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Выбор квеста у НПС

ну крафтить яшму, да и с фишками работать проще через пакеты.
однако говорят, что все равно надо открыть окно.
Почитай эту тему: http://zhyk.ru/forum/showthread.php?t=440606 там что-то такое разбирали
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Пользователь сказал cпасибо:
vladoscom93 (18.08.2012)
Старый 18.08.2012, 15:51   #7
 Разведчик
Аватар для vladoscom93
 
vladoscom93 никому не известный тип
Регистрация: 23.02.2011
Сообщений: 19
Популярность: 18
Сказал(а) спасибо: 30
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Выбор квеста у НПС

такс решение я нашел) и убедился, что для этого придется рыть в сторону oog... у меня теперь навязался вопрос насчет твоей программы по отлову пакетов... так и должно быть, что после отлова первого пакета клиент крашится?
  Ответить с цитированием
Старый 18.08.2012, 19:00   #8
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Выбор квеста у НПС

Цитата:
Сообщение от vladoscom93Посмотреть сообщение
так и должно быть, что после отлова первого пакета клиент крашится?

Лучше перейти в тему про PWPL и обсуждать это там.
Но вообще - нет конечно. Если используешь клиент от руофа, то все должно работать нормально
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Создание квеста. Нерос Вопросы и ответы, обсуждения 1 14.06.2012 22:03
[Уязвимость] Как взять 4 квеста Пенёк_возмездия Общение и обсуждение 0 29.12.2011 11:51
[Помогите!] на счет квеста на х-7 чужих Dr.Hooligan Общение и обсуждение 1 05.11.2011 17:53
[Баг] 4 квеста ProGamer63rus Общение и обсуждение 11 30.03.2011 18:27
[Обсуждение] баг епик квеста Л2 Exigodorei Баги и читы Lineage 2 2 06.03.2011 19:49

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

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

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