const
Name='';
offset=68;
var
Inventory:arrayofvariant;
procedure Init; //Вызывается при включении скриптаbegin
buf:=#$14;
SendToServerEx(Name);
SetLength(Inventory,0);
end;
procedure Free; //Вызывается при выключении скриптаbeginend;
procedure ItemList;
var
i:integer;
v:variant;
beginSetLength(Inventory,0);
if ReadH(4)<1thenexit;
for i:=0to ReadH(4)-1dobegin
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 - CountSetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
end;
procedure InventoryUpdate;
var
i,j:integer;
v:variant;
beginif ReadH(2)<1thenexit;
for i:=0to ReadH(2)-1dobegin
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)of1: beginSetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
2: begin
j:=FindItemByParams(v,0);
if j=-1thenexit;
Inventory[j]:=v;
end;
3: begin
j:=FindItemByParams(v,0);
if j=-1thenexit;
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:=0tolength(Inventory)-1dobegin
tempv:=Inventory[i];
if tempv[p]=v[p] thenbegin
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:=0tolength(Inventory)-1dobegin
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;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включенbeginif FromServer and(ConnectName=Name)thencase pck[1] of
#$11: ItemList;
#$21: InventoryUpdate;
end;
if FromClient and(ConnectName=Name)thencase pck[1] of
#$49: Say2;
end;
end.
__________________ Начало.
Последний раз редактировалось supernewbie, 11.01.2011 в 16:43.
За это сообщение supernewbie нажился спасибкой от:
if (v[1])=7134 then v[0]=OID
ет куда вписать то ?)))
извени конеш реально но не могу выехать у тебя идет проверка всех итемов а как зделоть из твоего скрипта на 1 ид?
begin
v:=[0,1,2];
v[1]:=7134;
i:=FindItemByParams(v,1);
Inventory[i] <--- это и будет вещь ИтемИДом 7134, если она существует.
end;
или просто добавль эту функцию
delphi Код:
function FindItemByItemID(ItemId:integer) : integer;
var
i:integer;
tempv:variant;
begin
result:=-1;
for i:=0tolength(Inventory)-1dobegin
tempv:=Inventory[i];
if tempv[1]=ItemId thenbegin
result:=i;
exit;
end;
end;
end;
__________________ Начало.
Последний раз редактировалось supernewbie, 11.01.2011 в 20:39.
За это сообщение supernewbie нажился спасибкой от:
та блин пытаюсь както учить...... проблема тока в objid вроде все правильно написал и все равно....не хочет он вписывать его... все пашыт кроме етого епаного юза скрола... он его юзает тока вот с objid 0.....что там не так я уже хз...