Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7 
	Если бежать надо далеко Move
Если бежать надо далеко Move
NewMoveXY Как сделать что бы на каждой клетке или через несколько он проверял на наличие персонажей бегая от одной точки к другой вобще реально ли это ?
			
			
									
									
						в твоем вопросе уже ответ.
распиши подряд действия нужные - вот тебе и блоксхема твоего скрипта.
и это, NewMoveXY не умеет делать ничего сверх бега из точки A в точку B
			
			
									
									распиши подряд действия нужные - вот тебе и блоксхема твоего скрипта.
и это, NewMoveXY не умеет делать ничего сверх бега из точки A в точку B
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						зачем?
GetPathArray.
потом идешь по точкам из полученного массива, и каждые пару точек делаешь что надо.
при большом желании можно еще и в цикле это сделать.
			
			
									
									GetPathArray.
потом идешь по точкам из полученного массива, и каждые пару точек делаешь что надо.
при большом желании можно еще и в цикле это сделать.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
						Code: Select all
// Функция easyMoveXY(X,Y,Accuracy : integer; Running : boolean): Boolean;
// Возвращает true если чар достиг цели. Если же не удалось найти пути- вернёт false.
// X,Y - пункт назначения.
// Accuracy - точность подхода.
// Running - если true, чар бегает. Если false - ходит пешком.
// Этот файл называете easyMoveXY.sc и кладёте в папку Include.
// Для использования в скрипте не забывайте его подключать! 
// Собственно смысл функции: При старте запускается функция GetPathArray.
// Чар бежит, используя созданный маршрут. При столкновении с препятствием,
// маршрут пересчитывается снова. 
//  example / пример
//  easyMoveXY(1279,540,1,true);
// function easyMoveXY(X,Y,Accuracy : integer; Running : boolean): Boolean;
// Return true if your character reached the destination, else - return false.
// X,Y - destination.
// Running: if true then char is running, else - walking.
// Rename this file to easyMoveXY.sc and put it in Include directory.
// Don't forget include that file in your scripts!
//  example :  easyMoveXY(1279,540,1,true);
var
 mPathArr : TPathArray;
procedure LocalWaitConnection(WaitTime : Integer);
begin
if Connected then Exit;
while not Connected do Wait(1000);
{WaitTime - Waiting After Connected}
wait(WaitTime);
end;
function FindMin(x,y: Integer): integer;
Begin
 if x>y then Result:=y else Result:=x;
End;
function sign(x : Integer) : Integer;
Begin
If x<0 then result:=-1;
If x=0 then result:=0;
If x>0 then  result:=1;
End;
function Dist(x,y: Integer): integer;
var dx,dy,Ddx : integer;
Begin
  dx:= GetX(self)-x;
  dy:= GetY(self)-y;
  Ddx:= dx-dy;
  If dx<0 then dx:=0-dx;
  If dy<0 then dy:=0-dy;
  If Ddx<0 then Ddx:=0-Ddx;
  Result:= FindMin(dx,dy)+Ddx;
End;
function MoveToPoint(X,Y: Integer; Running: Boolean) : boolean;
var 
  remap : array [0..8] of byte;
  dx,dy,dir,StepResult : Integer;
Begin
remap[0] := 7;
remap[1] := 6;
remap[2] := 5;
remap[3] := 0 ;
remap[4] := -1;
remap[5] := 4;
remap[6] := 1;
remap[7] := 2;
remap[8] := 3;
Result:=false;
While  true do
   begin
   dx:=X-getX(self); dy:=Y-getY(self);
   If (dx=0) AND (dy=0) then 
       begin
       Result:=true; 
       Exit; 
       end;
   dx:=sign(dx);
   dy:=sign(dy);
   dir := remap[(dx + 1)*3 + dy + 1];
   
   LocalWaitConnection(1000);
   While (Not Dead)  AND (Stam<=0) do Wait(1000);
   If GetDirection(self) <> dir then StepQ(dir, Running);
   StepResult:=StepQ(dir,Running);
   //If (StepResult=1) OR (StepResult=5) then Wait(5000);
   If StepResult<7 then
      begin
      result:=false;
      Exit;
      end; 
   end;
End;
function easyMoveXY(X,Y: integer; Optimized: boolean; Accuracy : Integer; Running: boolean): boolean;
var
   StepCnt,i : Integer;
Begin
Result:=false;
While true do
   begin
   //AddToSystemJournal('pathfinding...')
   StepCnt:=GetPathArray(X,Y,Optimized,Accuracy,mPathArr);
   If StepCnt<0 then Exit;
   If StepCnt=0 then
      begin
      Result:= true;
      Exit;
      end;
   For i:=0 to StepCnt do
      begin
      
      If Not IsWorldCellPassable(getX(self),getY(self),mPathArr[i].X,mPathArr[i].Y,WorldNum,getZ(self)) then  Break; 
      If Not MoveToPoint(mPathArr[i].X,mPathArr[i].Y,Running) then  Break;
      If Dist(X,Y)<=Accuracy then 
         begin
	 AddToSystemJournal('Location reached!');
	 Result:=true;
	 Exit;
	 end;
      end;
    end;
End;


