Часть моего бота для получения инвентаря (используется только для банок). Может кому пригодится. Использую на известном фришарде с HF P5.
DELPHI Код:
const
InventoryCountMax=250;
var
Inventory:array[0..InventoryCountmax,1..3] of integer;
InventoryCount:integer;
procedure GetItemsList;
var
i:integer;
begin
InventoryCount:=readH(4);
for i:=0 to InventoryCountMax do begin
Inventory[i,1]:=0;Inventory[i,2]:=0;Inventory[i,3]:=0;
end;
for i:=0 to InventoryCount do begin
Inventory[i,1]:=ReadD(6+i*68); //ObjID
Inventory[i,2]:=ReadD(10+i*68); //ItemID
Inventory[i,3]:=ReadD(18+i*68); //Count
end;
end;
function GetFromInventoryByID(id:integer):integer;
var
i:integer;
begin
result:=-1;
for i:=0 to InventoryCount do begin
if Inventory[i,2]=id then begin
result:=i;
break;
end;
end;
end;
function GetFromInventoryByObjID(id:integer):integer;
var
i:integer;
begin
result:=-1;
for i:=0 to InventoryCount do begin
if Inventory[i,1]=id then begin
result:=i;
break;
end;
end;
end;
procedure UpdateInventory;
var
i,count,find,ObjID,m:integer;
begin
count:=readH(2);
m:=readH(4);
if m=2 then begin
for i:=0 to count do begin
ObjID:=ReadD(6+i*68);
find:=GetFromInventoryByObjID(ObjId);
if find>-1 then begin
Inventory[find,2]:=ReadD(10+i*68); //ItemID
Inventory[find,3]:=ReadD(18+i*68); //Count
end;
end;
end;
if m=3 then begin
for i:=0 to count do begin
ObjID:=ReadD(6+i*68);
find:=GetFromInventoryByObjID(ObjId);
if find>-1 then begin
Inventory[find,1]:=0;
Inventory[find,2]:=0;
Inventory[find,3]:=0;
end;
end;
end;
if m=1 then begin
for i:=0 to count do begin
InventoryCount:=InventoryCount+1;
Inventory[InventoryCount,1]:=ReadD(6+i*68); //ObjID
Inventory[InventoryCount,2]:=ReadD(10+i*68); //ItemID
Inventory[InventoryCount,3]:=ReadD(18+i*68); //Count
end;
end;
end;
DELPHI Код:
#$11: GetItemsList;
#$21: UpdateInventory;
p.s. спасибо dyh9l за тег делфи)