Показать сообщение отдельно
Старый 22.11.2007, 13:02   #32
Новичок
 
Регистрация: 05.11.2007
Сообщений: 10
Сказал Спасибо: 2
Имеет 5 спасибок в 2 сообщенях
OlegDX
По умолчанию Ну блин скоко воды а зачем ....... знает (сотрите)

Скрипт преследования таргета на растояни (H)

//////////////ОlegDX by USES.txt//////////////////////////////////////////////////////
Код:
//*****************************************************************
Procedure MoveXYZ(X1,Y1,Z1,X2,Y2,Z2:Integer);
Begin
  IF (X1=X2)and(Y1=Y2)and(Z1=Z2) Then Exit;
  buf:=#$01;
  WriteD(X1);WriteD(Y1);WriteD(Z1);
  WriteD(X2);WriteD(Y2);WriteD(Z2);
  WriteD(01);
  SendToServer
End;
//******************************************************************************
//                            /---|H|---\
// [  >>>|1|_______________|3|___________|2|>>  ]
Function GetMoveXYZ(X1,Y1,Z1,X2,Y2,Z2,H:Integer; var X,Y,Z:Integer):Boolean;
var AB:Double;
Begin
  Result:=False;
  AB:=Sqrt(sqr(X2-X1)+sqr(Y2-Y1)+sqr(Z2-Z1));
  IF abs(AB)<=H THEN EXIT;
  X:=X2-round(((X2-X1)*H)/AB);
  Y:=Y2-round(((Y2-Y1)*H)/AB);
  Z:=Z2-round(((Z2-Z1)*H)/AB);
  Result:=True;
End;
//******************************************************************************

Код:
///////////////////////////////////////////////////////////////////////////////////////////
Uses '.\Scripts\OlegDX by USES.txt';
Const ID=0;Xnow=1;Ynow=2;Znow=3;Xold=4;Yold=5;Zold=6;
var TargetID: Integer;
    MyObject: array[0..7] of Integer; //ID,X,Y,Z,Xd,Yd,Zd
    MyTarget: array[0..7] of Integer; //ID,X,Y,Z,Xd,Yd,Zd

//*** Вызывается при включении скрипта *****************************************
procedure Init;
begin
  MyObject[ID]:=0;
  MyTarget[ID]:=0;
end;
//*** Вызывается при выключении скрипта ****************************************
procedure Free;
begin
  //
end;
//*** Oсновная часть скрипта вызывается при приходе каждого пакета *************
Var  PosIndex,ObjectID,X,Y,Z,W:Integer;
     MesageStrg:String;
     MesageType:Integer;
begin
  if FromServer Then Begin
     case pck[1] of
     #$03:Begin //CharInfo
            PosIndex:=2;
            X:=ReadD(PosIndex);
            Y:=ReadD(PosIndex);
            Z:=ReadD(PosIndex);
            W:=ReadD(PosIndex);
            ObjectID:=ReadD(PosIndex);
            If ObjectID = MyTarget[ID] Then Begin
               SendMSGClient('CharInfo MyTarget');
               MyTarget[Xold]:=X; MyTarget[Xnow]:=MyTarget[Xold];
               MyTarget[Yold]:=Y; MyTarget[Xnow]:=MyTarget[Yold];
               MyTarget[Zold]:=Z; MyTarget[Xnow]:=MyTarget[Zold];
               MyTarget[  ID]:=ObjectID;
            End;
          End;
     #$04:Begin //UsrInfo
            SendMSGClient('UsrInfo');
            PosIndex:=2;
            MyObject[Xold]:=ReadD(PosIndex);  MyObject[Xnow]:=MyObject[Xold];
            MyObject[Yold]:=ReadD(PosIndex);  MyObject[Xnow]:=MyObject[Yold];
            MyObject[Zold]:=ReadD(PosIndex);  MyObject[Xnow]:=MyObject[Zold];
            W:=ReadD(PosIndex);
            MyObject[  ID]:=ReadD(PosIndex);
          End;
     #$01:Begin //MoveToLocation
            PosIndex:=2; ObjectID:=ReadD(PosIndex);
            If ObjectID = MyObject[ID] Then Begin
               //SendMSGClient('MoveToLocation MyObject');
               MyObject[  ID]:=ObjectID;
               MyObject[Xnow]:=ReadD(PosIndex);
               MyObject[Ynow]:=ReadD(PosIndex);
               MyObject[Znow]:=ReadD(PosIndex);
               MyObject[Xold]:=ReadD(PosIndex);
               MyObject[Yold]:=ReadD(PosIndex);
               MyObject[Zold]:=ReadD(PosIndex);
            End Else
            If ObjectID = MyTarget[ID] Then Begin
               SendMSGClient('MoveToLocation MyTarget');
               MyTarget[  ID]:=ObjectID;
               MyTarget[Xnow]:=ReadD(PosIndex);
               MyTarget[Ynow]:=ReadD(PosIndex);
               MyTarget[Znow]:=ReadD(PosIndex);
               MyTarget[Xold]:=ReadD(PosIndex);
               MyTarget[Yold]:=ReadD(PosIndex);
               MyTarget[Zold]:=ReadD(PosIndex);
               IF (MyObject[ID]<>0)and GetMoveXYZ(
                  //MyTarget[Xold],MyTarget[Yold],MyTarget[Zold],
                  MyObject[Xnow],MyObject[Ynow],MyObject[Znow],
                  MyTarget[Xnow],MyTarget[Ynow],MyTarget[Znow],130,
                  MyObject[Xnow],MyObject[Ynow],MyObject[Znow])
               THEN Begin
                  SendMSGClient('GetMoveXYZ MyTarget');
                  MoveXYZ(MyObject[Xnow],MyObject[Ynow],MyObject[Znow],
                          MyObject[Xold],MyObject[Yold],MyObject[Zold]);
               END;
            End Else;
          End;
     end;
  End Else
  IF FromClient Then begin
     Case pck[1] of
     //-------------------------------------------------------------------------
     #$04: TargetID:=ReadD(02);
     //-------------------------------------------------------------------------
     #$38:Begin
           PosIndex:=02;
           MesageStrg:=ReadS(PosIndex);
           MesageType:=ReadD(PosIndex);
           Case MesageType of
           0:Begin //Обычный чат
             End;
           1:Begin //Крик чат
             End;
           8:Begin //торговый чат
             End;
           3:Begin //Пати чат
               If (Length(MesageStrg)=1) and ((MesageStrg[1]='L')or(MesageStrg[1]='l')) Then begin
                  pck:='';
                  MyTarget[ID]:=TargetID;
               End Else
               If (Length(MesageStrg)=1) and ((MesageStrg[1]='M')or(MesageStrg[1]='m')) Then begin
                  pck:='';
                  MyTarget[ID]:=0;
               End Else
             End;
           Else End;
         End;
     //-------------------------------------------------------------------------
     end;
     //-------------------------------------------------------------------------
  End Else;
end.

И не нужно раздувать из ничего тему :(
__________________
[ HIGHLIGHT="delphi" ]ваш скрипт[ /HIGHLIGHT ]
OlegDX вне форума   Ответить с цитированием