Показать сообщение отдельно
Старый 19.09.2011, 16:48   #38
Пользователь
 
Аватар для michonik
 
Регистрация: 21.01.2011
Сообщений: 49
Сказал Спасибо: 8
Имеет 8 спасибок в 6 сообщенях
michonik пока неопределено
По умолчанию

Сляпал скриптик под пакетхак. Второе окно исправно бегает за ведущим не добегая до него нужное расстояние. Еслибы этот скрипт можно было интегнрировать в корректор отпалибы проблемы с заруливанием ботов влево. У бота который следует за ведущим уходит пакет на серв 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. Единственное корректно работает это двойной клик на соски в инвентаре, но при перезагрузке кто будет тыкать на соски?
______________
Исправил автососки, проверь на всякий
__________________
Пока мы убиваем время,
время убивает нас...
Слова начальника: Ну как, все планеты победил?

Последний раз редактировалось Alexxxxx, 19.09.2011 в 20:49.
michonik вне форума   Ответить с цитированием
За это сообщение michonik нажился 2 спасибками от: