Хроники Камаель.
Вобщем, в очередной раз сунувшись в кх и обнаружив полное отсутствие свитков для ТП решил посадить там перса с вот таким скриптом
delphi Код:
//Включить автоскупку - Да, выключить - Нет
const
name='';
var
OIDnpc:integer;
MyX,MyY,Myz:integer;
start:boolean;
startsk,startcmd:ttimer;
kolvocmd,i,j,jj,x,step,st,itemID,itemcount,count,IDlist:integer;
Buy:array[1..15,1..2] of integer; //массив для хранения ID и количества итемов в Buy-листе
CmdNpc:array[1..50] of string;
findt,oldpck,cmd,itemIDstr,countstr:string;
Ste:array[1..3] of integer; //в этом массиве содержится последовательность номеров нажимаемых кнопок в меню
procedure Init;
begin
OIDnpc:=0; //Ввести OID нпс кланхолла
startcmd:=TTimer.Create(nil); //счетчик для отсылки команд
startcmd.OnTimer:=@scmd;
startcmd.enabled:=false;
startcmd.interval:=1500;
startsk:=TTimer.Create(nil); //счетчик для частоты пробы покупки
startsk.OnTimer:=@skupka;
startsk.enabled:=false;
startsk.interval:=1000*60*1;
Ste[1]:= 3;
Ste[2]:= 4;
ste[3]:= 1;
step:=0;
count:=0;
end;
procedure Free;
begin
startsk.free;
end;
procedure scmd;
begin
sendmsg(cmd);
RequestByPassToServer(cmd);
startcmd.enabled:=false;
end;
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
procedure Skupka;
begin
target(OIDnpc);
delay(800);
target(OIDnpc);
delay(800);
end;
procedure Target(Attacker: Integer);
begin
buf:=#$1f;
WriteD(Attacker);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
end;
procedure CmdNpcParc;
Begin
kolvocmd:=0;
for j:=1 to 50 do begin
CmdNpc[j]:='';
end;
for j:=1 to length(oldpck) do begin
for x:=0 to 9 do begin
findt:=findt+oldpck[j+x];
end;
if findt='bypass -h ' then begin
for x:=10 to 25 do begin
CmdNpc[kolvocmd+1]:=CmdNpc[kolvocmd+1]+oldpck[j+x];
end;
kolvocmd:=kolvocmd+1;
end;
findt:='';
end;
end;
procedure RequestByPassToServer(cmd:string);
begin
buf:=#$23;
WriteS(cmd);
SendToServerEx(Name);
end;
procedure RequestBuyItem;
begin
buf:=#$40;
WriteD(IDlist);
WriteD(count);
for i:=1 to count do begin
WriteD(buy[i,1]);
WriteD(buy[i,2]);
end;
SendToServerEx(Name);
end;
//----------------------------------------------------------
begin
if FromClient and (ConnectName=name) and (pck[1]=#$59) then
begin
MyX:=ReadD(6);
MyY:=ReadD(10);
MyZ:=ReadD(14);
end;
if FromClient and (ConnectName=name) and (pck[1]=#$34) and (pck[2]=#$06) then startsk.enabled:=true;
if FromClient and (ConnectName=name) and (pck[1]=#$34) and (pck[2]=#$05) then startsk.enabled:=false;
if fromserver and (ConnectName=name) and (pck[1]=#$19) then begin
oldpck:=ReadS(6);
CmdNpcParc;
if not startcmd.enabled then step:=step+1;
if step=4 then step:=1;
cmd:=CmdNpc[ste[step]];
startcmd.enabled:=true;
end;
if fromserver and (ConnectName=name) and (pck[1]=#$07) then begin
IDlist:=ReadD(6);
jj:=1;
for j:=1 to 15 do begin //берем первые 15 итемов из buy-листа, мне более ненужно
i:=18+((j-1)*64);
itemID:=ReadD(i);
itemcount:=ReadD(i);
if (itemID=5858) or (itemid=1829) or (itemid=7134) or (itemid=7126) then begin //здесь ID вещей которые хотелось бы купить
buy[jj,1]:=ItemID;
buy[jj,2]:=itemcount;
count:=count+1;
inc(jj,1);
end;
end;
if count<>0 then begin
RequestBuyItem;
count:=0;
end;
end;
end.
Прошу вашей помощи в оптимизации скрипта, он как-то вышел кривобоко ппц