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

Код:
const
N=500; //расстояние до игрока
name='   123';//ник телепортера


f=0;

id1=0; //сюда вставляем ИД своих, причем в пати он или нет не важно  
id2=0; 
id3=0;
id4=0;
id5=0;
id6=0;
id7=0;
id8=0;

var

X,Y,i,j,r:integer;//координаты появившегося чара
ID:integer; //ид появившегося чара
IDd:integer;
IDc:integer;//ид перемещения появившегося чара
X0,Y0:integer; //координаты телепортера
Xv,Yv:integer; //расстояние между чарами
gam : array [0..20] of integer;
procedure SendMsg2(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS('  '+Msg);
SendToClientEx(name);
end;
procedure Rasstoyanie;
    begin
     //высчитываем расстояние до чара  
   if (x0>X) then 
    Xv:=(X0-X)
   else
    Xv:=(X-X0);
   if (y0>Y) then 
    Yv:=(Y0-Y)
   else
    Yv:=(Y-Y0); 

    end;

procedure Init; //Вызывается при включении скрипта
begin
 j:=0;
end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

begin
    //читаем текущие координаты перса 
   if (FromClient)and(ConnectName=name) and (pck[1]=#$59) then//ValidatePosition 
    begin  
       i:=2;
       X0:=ReadD(i);
       Y0:=ReadD(i); 
       //SendMsg2('юзеринфо X='+IntToStr(X0)+'   Y='+IntToStr(Y0));
      
    end;
   //читаем координаты перса при появлении
 if (FromServer) and (ConnectName=name) and (pck[1]=#$32) then//UserInfo
  begin
       i:=2;
       X0:=ReadD(i);
       Y0:=ReadD(i); 
       //SendMsg2('юзеринфо X='+IntToStr(X0)+'   Y='+IntToStr(Y0));
  end;
   //считываем ИД и координаты появившегося чара
   if (FromServer)and (ConnectName=name) and (pck[1]=#$31)then      
    begin
      r:=0;
      j:=0;
      i:=2;
      X:=ReadD(i);
      Y:=ReadD(i);
      ID:=ReadD(18);
    //проверяем есть ли в массиве уже такой ИД  
      while j<20 do
       begin
       if (gam[j]=ID) then
        begin   
          r:=1;//
          //SendMsg2('R '+IntToStr(r));
        end;
        //SendMsg2('чаринфо '+IntToStr(j+1)+'  '+IntToStr(gam[j]));  
       j:=j+1;
       end;
      
     if (id=id1) or 
        (id=id2) or
        (id=id3) or
        (id=id4) or
        (id=id5) or
        (id=id6) or
        (id=id7) or
        (id=id8) or
         then//если ИД чара не совпадает со своими то заносим ид в массив
     else
    begin
     if (r=0) then //проверяем если еще нет в массиве
     begin
     j:=0; 
      //SendMsg2('чаринфо X='+IntToStr(X)+'   Y='+IntToStr(Y)+'   ID='+IntToStr(ID));
      while j<20 do
      begin
       if (gam[j]=0) then //если в массиве 0 значит ИД еще не записан 
        begin
          gam[j]:=id;//записываем ИД
          SendMsg2('записали ИД '+IntToStr(j+1)+'  '+IntToStr(gam[j]));
          break;//когда записали останавливаем цыкл
        end 
       else
        begin
         //SendMsg2('gam[j]'+IntToStr(j)+'  '+IntToStr(gam[j]));
         j:=j+1; 
        end;
      
      end;
     end; 
    end;
   end;  
   
   
   //следим
   if (FromServer)and (ConnectName=name) and (pck[1]=#$2F)then      
     begin
       j:=0;
       i:=2;
      IDc:=ReadD(i);
      X:=ReadD(i);
      Y:=ReadD(i);
      Rasstoyanie;//процедура расчета расстояния до чара
      //SendMsg2('мув то лок X='+IntToStr(X)+'   Y='+IntToStr(Y)+'   IDc='+IntToStr(ID));
      //SendMsg2('1  Xv='+IntToStr(Xv)+'   Yv='+IntToStr(Yv));
      while j<20 do
      begin
       if (gam[j]=IDc) and (Xv<N) and (Yv<N) then
        begin
         buf:=hstr('39 E7 04 00 00 01 00 00 00 00');//рекол
         SendToServerEx(Name);
         SendMsg2('recal');
        end;
       j:=j+1;   
      end; 
     end;
   
   if (FromServer)and (ConnectName=name) and (pck[1]=#$79) then      
     begin
       j:=0;
       i:=2;
      IDc:=ReadD(i);
      X:=ReadD(i);
      Y:=ReadD(i);
      Rasstoyanie;//процедура расчета расстояния до чара
      //SendMsg2('валидейт лок X='+IntToStr(X)+'   Y='+IntToStr(Y)+'   IDc='+IntToStr(ID));
      //SendMsg2('2  Xv='+IntToStr(Xv)+'   Yv='+IntToStr(Yv));
      while j<20 do
       begin
       if (gam[j]=IDc) and (Xv<N) and (Yv<N) then
        begin
         buf:=hstr('39 E7 04 00 00 01 00 00 00 00');//рекол
         SendToServerEx(Name);
         SendMsg2('recal');
        end; 
       j:=j+1;
       end; 
     end;
    
    //если чар уходит стираем его из массива
   if (FromServer)and (ConnectName=name) and (pck[1]=#$08) then      
     begin
      j:=0;
      i:=2;
      IDd:=ReadD(i);
      while j<20 do
      begin
       if (gam[j]=IDd) then //если в массиве находим ИД стираем его и записываем 0 
        begin
         
         //SendMsg2('удалил '+IntToStr(j+1)+'  '+IntToStr(gam[j]));
         gam[j]:=0;//записываем ИД
        end; 
              //SendMsg2('gam[j]дилет обж'+IntToStr(j+1)+'  '+IntToStr(gam[j]));
       j:=j+1;
      end; 
     
     end; 

    
end.
__________________
Пока мы убиваем время,
время убивает нас...
Слова начальника: Ну как, все планеты победил?

Последний раз редактировалось michonik, 19.10.2011 в 17:54. Причина: нашел небольшой косячок) работа над скриптом продолжается
michonik вне форума   Ответить с цитированием
За это сообщение michonik нажился 2 спасибками от: