Сляпал скриптик под пакетхак. Второе окно исправно бегает за ведущим не добегая до него нужное расстояние. Еслибы этот скрипт можно было интегнрировать в корректор отпалибы проблемы с заруливанием ботов влево. У бота который следует за ведущим уходит пакет на серв moovbackvardtolocation, вот както вместо него и нужно залепить. В скрипте реализован расчет вектора ведущего с задержкой старта ведомого (если ведомый бегает быстрее прибегает первым а это не есть хорошо). Вот скрипт:
Код:
const
Komname='ччч';(ник ведущего)
name='ччч';(ник ведомого)
move=1;
N1=100;//растояние до точки куда бежим (недобегание)
var
X0,Y0,Z0,c:integer;//текЂщая точка
Xt,Yt,Zt,Xv,Yv,V1,Ux,Uy,X1,Y1,Xk,Yk,Zk:integer;//
timerBD: TTimer;
v,Xv1,Yv1,A,K,S:extended;//
procedure SendMsg2(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(9);
WriteS('');
WriteS(' '+Msg);
SendToClientEx(komname);
end;
procedure OnTimerBD(Sender: TObject);
begin
buf:=#$0F;//пакет moovBackwardToLocation
WriteD(X1);WriteD(Y1);WriteD(Zt);
WriteD(X0);WriteD(Y0);WriteD(Z0);WriteD(move);
SendToServerEx(Name);
timerBD.enabled:=false;
//SendMsg2('бегу!!!');
end;
procedure Init; //Вызывается при включении скрипта
begin
begin
//SendMsg2('Скрипт включен');
timerBD:=TTimer.Create(nil);
timerBD.OnTimer:=@OnTimerBD;
timerBD.enabled:=false;
timerBD.interval:=1500;//задержка старта (можно убрать)
end;
end;
procedure Free; //Вызывается при выключении скрипта
begin
//SendMsg2('Скрипт выключен');
timerBD.Free;
end;
//**************************************************************************************************
begin
//читаем куда бежит командир
if (FromClient)and(ConnectName=Komname) and (pck[1]=#$0F) then//MoveBack
begin
c:=2;
Xt:=ReadD(c);
Yt:=ReadD(c);
Zt:=ReadD(c);
X0:=ReadD(c);
Y0:=ReadD(c);
Z0:=ReadD(c);
//SendMsg2('*******************************************************');
//SendMsg2('X0='+IntToStr(x0)+' Y0='+IntToStr(y0));
//SendMsg2('Xt='+IntToStr(xt)+' Yt='+IntToStr(yt));
if (x0>Xt) then
begin
Xv:=(X0-Xt);
Ux:=1;
end
else
begin
Xv:=(Xt-X0);
Ux:=0;
end;
if (y0>Yt) then
begin
Yv:=(Y0-Yt);
Uy:=1;
end
else
begin
Yv:=(Yt-Y0);
Uy:=0;
end;
//SendMsg2('Ux='+IntToStr(Ux)+' Uy='+IntToStr(Uy));
V:=sqrt((Xv*Xv)+(Yv*Yv));//вектор движения к командиру
//SendMsg2('X0='+IntToStr(x0)+' Y0='+IntToStr(y0));
//SendMsg2('Xv='+IntToStr(xv)+' Yv='+IntToStr(yv)+' N1='+IntToStr(n1));
//SendMsg2('V='+FloatToStr(V));
if (V>N1) then
begin
V1:=(round(V)-N1);//укороченный вектор
//SendMsg2('V1='+FloatToStr(V1));
S:=(Yv/V); Yv1:=(V1*S);//координаты по осям укороченного вектора
K:=(Xv/V); Xv1:=(V1*K);
//SendMsg2('S='+FloatToStr(S)+' K='+FloatToStr(K));
//SendMsg2('Xv1='+FloatToStr(xv1)+' Yv1='+FloatToStr(yv1));
if (Ux=0) then
begin
X1:=(X0+round(Xv1));
end
else
begin
X1:=(X0-round(Xv1));
end;
if (Uy=0) then
begin
Y1:=(Y0+round(Yv1));
end
else
begin
Y1:=(Y0-round(Yv1));
end;
//SendMsg2('X1='+IntToStr(X1)+'Y1='+IntToStr(Y1));
end;
//buf:=#$0F;//пакет moovBackwardToLocation
//WriteD(X1);WriteD(Y1);WriteD(Zt);
//WriteD(X0);WriteD(Y0);WriteD(Z0);WriteD(move);
//SendToServerEx(Name);
timerBD.enabled:=true;
end;
//читаем текущие координаты ведомого
if (FromClient)and(ConnectName=name) and (pck[1]=#$59) then//ValidatePosition
begin
c:=2;
Xk:=ReadD(c);
Yk:=ReadD(c);
Zk:=ReadD(c);
end;
end.
И второе, при включении сосок постоянно при ударах на серв уходит пакет RequestAutoSoulShot, а в клиенте никто я думаю постоянно не тыкает кнопку "автососки" на панели, это не есть гуд. Только поэтому можно кучу народу запалить
. У мня в боте чтото нет пункта heal in PvP -> Shot setting. Единственное корректно работает это двойной клик на соски в инвентаре, но при перезагрузке кто будет тыкать на соски?
______________
Исправил автососки, проверь на всякий