Код:
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.
Причина: нашел небольшой косячок) работа над скриптом продолжается
|