delphi Код:
Const
Name='BloodOfEva';
offset=68;
ItemID=7134;
var
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
Timer04: TTimer;
Inventory:array of variant;
v:variant;
i:integer;
procedure Init;
begin
buf:=#$11;
SendToServerEx(Name);
SetLength(Inventory,0);
Timer01:=TTimer.Create(nil); //выделяем памать и т.п.
Timer01.OnTimer:=@OnTimer01; //привязываем процедуру к событию
Timer01.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer01.interval:=2000; //280000 интервал(в милисекундах) как часто таймер срабатывает
Timer02:=TTimer.Create(nil); //выделяем памать и т.п.
Timer02.OnTimer:=@OnTimer02; //привязываем процедуру к событию
Timer02.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer02.interval:=10; //10интервал(в милисекундах) как часто таймер срабатывает
Timer03:=TTimer.Create(nil); //выделяем памать и т.п.
Timer03.OnTimer:=@OnTimer03; //привязываем процедуру к событию
Timer03.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer03.interval:=3000; //310000 интервал(в милисекундах) как часто таймер срабатывает
Timer04:=TTimer.Create(nil); //выделяем памать и т.п.
Timer04.OnTimer:=@OnTimer04; //привязываем процедуру к событию
Timer04.enabled:=false; //начальное положение включен(true)/выключен(false)
Timer04.interval:=6000; //1200000 интервал(в милисекундах) как часто таймер срабатывает
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
Timer04.free;
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
a:integer;
tempv:variant;
begin
result:=-1;
for a:=0 to length(Inventory)-1 do
begin
tempv:=Inventory[a];
if tempv[p]=v[p] then
begin
result:=a;
exit;
end;
end;
end;
function FindItemByItemID(ItemId:integer) : integer;
var
i:integer;
tempv:variant;
begin
result:=-1;
for i:=0 to length(Inventory)-1 do
begin
tempv:=Inventory[i];
if tempv[1]=ItemID then
begin
result:=i;
exit;
end;
end;
end;
procedure OnTimer01(Sender: TObject);
begin
Timer01.enabled:=False;
Timer02.enabled:=True;
end;
procedure OnTimer02(Sender: TObject);
begin
pck:='';
buf:=HStr('C6 BF 07 00 00 01 00 00 00 03 00 00 00');
SendToServerEx(Name);
end;
procedure OnTimer03(Sender: TObject);
begin
Timer03.enabled:=False;
Timer02.enabled:=False;
end;
procedure OnTimer04(Sender: TObject);
begin
Timer04.enabled:=False;
begin
pck:='';
buf:=HStr('B3 00 00 00 00');
SendToServerEx(Name);
end;
end;
procedure Use;
begin
buf:=#$19;
WriteD(i);
WriteD(0);
SendToServerEx(Name);
end;
procedure Localchek;
begin
if (ReadD(2)=924) then Use;
end;
begin
IF FromServer and( pck[1]=#$4A) and (ReadS(12)='CTF: Старт через 5 мин. для уровней 76-85.')begin
Timer01.enabled:=True;
Timer03.enabled:=True;
Timer04.enabled:=True;
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList;
#$21: InventoryUpdate;
#$62: Localchek;
end;
end.
почините кто небуть я не могу уже мозги выносит жесть(((