короче как-то так
delphi Код:
const
Name='';
offset=68;
var
Inventory:array of variant;
procedure Init; //Вызывается при включении скрипта
begin
buf:=#$14;
SendToServerEx(Name);
SetLength(Inventory,0);
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
procedure ItemList;
var
i:integer;
v:variant;
begin
SetLength(Inventory,0);
if ReadH(4)<1 then exit;
for i:=0 to ReadH(4)-1 do
begin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6); //0 - OID
v[1]:=ReadD(i*offset+10); //1 - ItemID
v[2]:=ReadQ(i*offset+18); //2 - Count
SetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
end;
procedure InventoryUpdate;
var
i,j:integer;
v:variant;
begin
if ReadH(2)<1 then exit;
for i:=0 to ReadH(2)-1 do
begin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6);
v[1]:=ReadD(i*offset+10);
v[2]:=ReadQ(i*offset+18);
case ReadH(i*offset+4) of
1: begin
SetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
2: begin
j:=FindItemByParams(v,0);
if j=-1 then exit;
Inventory[j]:=v;
end;
3: begin
j:=FindItemByParams(v,0);
if j=-1 then exit;
if (j<>length(Inventory)-1) then Inventory[j]:=Inventory[length(Inventory)-1];
SetLength(Inventory,length(Inventory)-1);
end;
end;
end;
end;
function FindItemByParams(v:variant;p:byte) : integer;
var
i:integer;
tempv:variant;
begin
result:=-1;
for i:=0 to length(Inventory)-1 do
begin
tempv:=Inventory[i];
if tempv[p]=v[p] then
begin
result:=i;
exit;
end;
end;
end;
function Say2 : boolean;
var
i:integer;
v:variant;
begin
result:=true;
case ReadS(2) of
'how': CreatureSay('Всего вещей '+inttostr(length(Inventory)));
'say all' :
for i:=0 to length(Inventory)-1 do
begin
v:=Inventory[i];
CreatureSay(IntToStr(i+1)+'. OID='+inttostr(v[0])+'; ItemID='+inttostr(v[1])+'; Count='+inttostr(v[2]));
end;
else result:=false;
end;
if result then pck:='';
end;
procedure CreatureSay(s:string);
begin
buf:=#$4A;
WriteMask('ddss',[0,3,'Инфо',s]);
SendToClientEx(Name);
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList;
#$21: InventoryUpdate;
end;
if FromClient and (ConnectName=Name) then
case pck[1] of
#$49: Say2;
end;
end.