Показать сообщение отдельно
Старый 06.03.2011, 12:26   #25
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

хех) окей, где-то писал... ща найду..
delphi Код:
const Name='OldMen'; 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; end3: 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.
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
За это сообщение supernewbie нажился 4 спасибками от: