Code: Select all
Program MoveInHide;
var
sTimerHide: cardinal;
BadObj: array [0 .. 4] of word;
const
TimeNeededToHide=5000; // время, которого гарантированно хватает чтобы войти в hide
Lysyi=$0040297B;
Function Abs(A: integer): integer;
Begin
If A>=0 then result:=A
Else result:=0-A;
End;
function Min(x,y: integer): integer;
begin
if x>y then Result:=y else Result:=x;
end;
function Dest(x,y: integer): integer;
var dx,dy,Ddx : integer;
begin
dx:= Abs(GetX(self)-x);
dy:= Abs(GetY(self)-y);
Ddx:=Abs(dx-dy);
Result:= min(dx,dy)+Ddx;
end;
function SetDirection(x, y : integer) : byte;
var
MyX,MyY,DiffX,DiffY,GoDir: integer;
Begin
MyX:=GetX(self);
MyY:=GetY(self);
DiffX:=Abs(MyX-x);
DiffY:=Abs(MyY-y);
if (DiffX/(DiffY+0.1))>=2 then
begin
if (MyX>X) then
GoDir:=6
else
GoDir:=2;
end
else
if (DiffY/(DiffX+0.1))>=2 then
begin
if (MyY>Y) then
GoDir:=0
else
GoDir:=4;
end
else
if (MyX>X) and (MyY>Y) then GoDir:=7
else
if (MyX>X) and (MyY<Y) then GoDir:=5
else
if (MyX<X) and (MyY>Y) then GoDir:=1
else
if (MyX<X) and (MyY<Y) then GoDir:=3;
result:=GoDir;
end;
Procedure HideMove(X,Y: integer; accurance: word);
var
i: integer;
Dir: byte;
PathArr: TPathArray;
Begin
While Dest(X,Y)>accurance do
begin
If (Not Dead) then
If (Stam<Dex) then
begin
// если стамины меньше чем дексы, устанавливаем хумов и элемов в bad objects
For i:=0 to 4 do
SetBadObject(BadObj[i],$FFFF,0);
end
Else
ClearBadObjectList;
// вычисляем следующую точку
repeat
i:= GetPathArray(X,Y,false,accurance,PathArr);
wait(100);
//WaitConnection(1000);
until i>-1;
// определяем направление шага.
Dir:=SetDirection(PathArr[0].x,PathArr[0].y);
If GetDirection(self)<> Dir then Step(Dir, false);
if ((Timer-sTimerHide)>TimeNeededToHide) AND (Not Dead) AND (Not Hidden) then
begin
If WarMode then SetWarMode(false);
UseSkill('Hiding');
wait(300);
sTimerHide:=Timer;
end;
Step(Dir, false);
end;
End;
BEGIN
BadObj[0]:=$0190; // man
BadObj[1]:=$0191; // woman
BadObj[2]:=$000E; // элемы
BadObj[3]:=$000E;
BadObj[4]:=AMSpirit; // энгрик
sTimerHide:= timer;
wait(5000);
hideMove(getX(Lysyi),getY(Lysyi),0);
END.