var
KlientWindow:HWND;
hProcess,PID,buf,ibuf,BC:DWord;
i:Integer;
j:array [0..31] of Integer;
begin
GetWindowThreadProcessId(KlientWindow,@PID);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
for i:=0 to 31 do
begin
ReadProcessMemory(hProcess,ptr($00B27A04),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$34),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$CAC),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$4*i),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$8),@buf,sizeof(buf),BC);
j[i]:=buf;
Edit1.Text:=inttostr(j[SpinEdit1.Value-1]);
end;
CloseHandle(hProcess);
end;
end.
Теперь, как реализовать выброс предмета. А то есть, если в инвентаре имеется такой - то ID предмета(Edit1.Text) и лежит он в какой то ячейке(?), то он выбросится.
Надо узнать в какой именно ячейке лежит нужный предмет и послать пакет на выброс,
(0E 00 + Ячейка + 01 00)
P.S В названии темы ошибка - Инвентаря
Последний раз редактировалось Bосh; 29.06.2012 в 19:32.
var
KlientWindow:HWND;
hProcess,PID,buf,ibuf,BC:DWord;
i,c:Integer;
j:array [0..31] of Integer;
begin
GetWindowThreadProcessId(KlientWindow,@PID);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
for i:=0 to 31 do
begin
ReadProcessMemory(hProcess,ptr($00B27A04),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$34),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$CAC),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$4*i),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$8),@buf,sizeof(buf),BC);
if buf={тут нужный ID предмета} then
begin
c:=i+1;
end;
j[i]:=buf;
Edit1.Text:=inttostr(j[SpinEdit1.Value-1]);
end;
CloseHandle(hProcess);
end;
end.
В "c" буде нужный тебе ID, дальше его и юзай
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Ввожу нужный мне ID проверяет нормально, но если в 1 ячейке лежат 2 предмета, он показывает что такого ID в инвентаре нету.
[Ссылки могут видеть только зарегистрированные пользователи. ] = Предмета нету.
[Ссылки могут видеть только зарегистрированные пользователи. ] = Предмет есть.
P.S А нет, все показывает. Но если предмет лежит не на первой и второй ячейке.
И еще, как узнать в какой ячейке инвентаря лежит нужный предмет?
Последний раз редактировалось Bосh; 29.06.2012 в 20:58.
function GetCall(id: Integer): Integer;
var
KlientWindow:HWND;
hProcess,PID,buf,ibuf,BC:DWord;
i:Integer;
begin
GetWindowThreadProcessId(KlientWindow,@PID);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
for i:=0 to 31 do
begin
ReadProcessMemory(hProcess,ptr($00B27A04),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$34),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$CAC),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$4*i),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$8),@buf,sizeof(buf),BC);
if buf=id then
begin
Result:=i;
break;
end;
end;
CloseHandle(hProcess);
end;
function GetCount(call: Integer): Integer;
var
KlientWindow:HWND;
hProcess,PID,buf,ibuf,BC:DWord;
i,r:Integer;
begin
GetWindowThreadProcessId(KlientWindow,@PID);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
ReadProcessMemory(hProcess,ptr($00B27A04),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$34),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$CAC),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$4*call),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$10),@r,sizeof(r),BC);
Result:=r;
CloseHandle(hProcess);
end;
function Drop(id : Integer): Integer;
begin
Packet('0E00' + GetCall(id) + GetCount(GetCall(id)) + '00');
end;
function GetCall(id: Integer): Integer;
var
KlientWindow:HWND;
hProcess,PID,buf,ibuf,BC:DWord;
i:Integer;
begin
GetWindowThreadProcessId(KlientWindow,@PID);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
for i:=0 to 31 do
begin
ReadProcessMemory(hProcess,ptr($00B27A04),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$34),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$CAC),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$4*i),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$8),@buf,sizeof(buf),BC);
if buf=id then
begin
Result:=i;
break;
end;
end;
CloseHandle(hProcess);
end;
function GetCount(call: Integer): Integer;
var
KlientWindow:HWND;
hProcess,PID,buf,ibuf,BC:DWord;
i,r:Integer;
begin
GetWindowThreadProcessId(KlientWindow,@PID);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
ReadProcessMemory(hProcess,ptr($00B27A04),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$34),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$CAC),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$4*call),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$10),@r,sizeof(r),BC);
Result:=r;
CloseHandle(hProcess);
end;
function Drop(id : Integer): Integer;
begin
Packet('0E00' + GetCall(id) + GetCount(GetCall(id)) + '00');
end;
На будущее: благодарность принимается нажатием соответствующей кнопки
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.