Код:
const
Name='Ник перса тестера;
//первая координата квадрата
ax=-88370;
ay=142700;
az=3640;
//вторая координата квадрата
bx=-87427;
by=142700;
bz=-3640;
//третья координата квадрата
cx=-87427;
cy=141800;
cz=-3640;
//четвёртая координата квадрата
dx=-88368;
dy=141752;
dz=-3640;
var
mx, my: real;
MyID:integer;
pl,pl1,pl2,pl3,p2,p21,p22,p23:integer;
timer1 : TTimer;
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
procedure Init; //Вызывается при включении скрипта
begin
// дык таймер но он выключен он нам не нужен в этом скрипте, но мало ли
// timer1:=TTimer.Create(nil);
//timer1.OnTimer:=@OnTimer1;
// timer1.enabled:=false;//по начал не запускаем таймер, только по команде
//timer1.interval:=2000;// 2 секунды - начальный интервал таймера
end;
procedure InitStats;
begin
MyID:=ReadD(18);
Say('ID'+inttostr(MyID));
end;
procedure InitXYZ;
begin
mx:=ReadD(6);
my:=ReadD(10);
//нород если криво то помидорами не кидай те кто закодит для n угольника
//тому респект и уважуха, особенно если квадрат будет с возможность мёртвыъ координат внутри, но ет мат задача не для моих мозгов
//ет квадрат АБЦД
pl:=Ploshad(ax,ay,bx,by,cx,cy);
pl1:=Ploshad(mx,my,bx,by,cx,cy);
pl2:=Ploshad(ax,ay,mx,my,cx,cy);
pl3:=Ploshad(ax,ay,bx,by,mx,my);
p2:=Ploshad(ax,ay,dx,dy,cx,cy);
p21:=Ploshad(mx,my,dx,dy,cx,cy);
p22:=Ploshad(ax,ay,mx,my,cx,cy);
p23:=Ploshad(ax,ay,dx,dy,mx,my);
//проверяем условие принадлежиности наших координат к квадрату АБЦД
if (pl<pl1+pl2+pl3+50)and((pl>pl1+pl2+pl3-50))or (p2<p21+p22+p23+50)and((p2>p21+p22+p23-50)) then Say('Мы в квадрате!')
else Say('МЫ НЕ в квадрете!')
end;
function Ploshad(ax,ay,bx,by,cx,cy:real):integer;
var d1,d2,d3,per:real;
//описываем по какой то там формуле лощадь треугольника
begin
d1:=sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by)); // 1-я сторона (длина)
d2:=sqrt((cx-bx)*(cx-bx)+(cy-by)*(cy-by)); // 2-я сторона (длина)
d3:=sqrt((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy)); // 3-я сторона (длина)
per:=(d1+d2+d3)/2; // полуппериметр
Result:=Round(sqrt(per*(per-d1)*(per-d2)*(per-d3))); // считаем площадь
end;
procedure Free; //Вызывается при выключении скрипта
begin
//timer1.enabled:=false;
//timer1.Free;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck='' then exit; //убераем пусты пакеты
//думаем о нашем ИД думаем...
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then InitStats;
// думаем о координатах своих
if FromServer and (ConnectName=Name) and (pck[1]=#$01)and (ReadD(2)=myID) then InitXYZ;
end.