Page 1 of 1

Help!!! (Type mismatch)

Posted: 08.11.2009 21:13
by Apofis

Code: Select all

22:07:06 [Flash]: Compiling
22:07:06 [Flash]: Compiler: [Error] (move.inc at 126:34):  Type mismatch
22:07:06 [Flash]: Compiling failed
22:07:06 [Flash]: Script move.inc stopped successfuly
вышеуказанная проблема выскакивает при применение скрипта на ламбер. Лезем в инклуды открываем mobe.inc и наблюдаем:

Code: Select all

 // íàïèñàë Somebody. ICQ: 475728522 e-mail: [email protected]

// Ðåàëèçàöèÿ àëãîðèòìà "íà䏿íîé òðàññèðîâêè"
// http://pmg.org.ru/ai/stout.htm#robust_trace

const 
GateType=$0F6C;
FMoveArrMax = 300; // ñòàâü çäåñü áîëüøå, åñëè òâîé ÷àð õîäèò íà äèñòàíöèè áîëüøå 13 òàéëîâ èëè âîêðóã ÷àðà î÷åíü ìíîãî ïðåïÿòñòâèé. Åñëè ïðåïÿòñòâèé íà ïóòè ìàëî, òî ìîæíî îñòàâèòü êàê åñòü. 
var
PrognosisX, PrognosisY, FMoveArrCount : integer; 
FMoveArr : array [1..FMoveArrMax] of array [1..2] of smallint; 
sTimerHide: cardinal;
aMoveResult: byte;

procedure InitCheckHide;
Begin
sTimerHide:=timer;
wait(5100);
End;

procedure CheckLag_; 
var starttime : TDateTime; 
begin 
   repeat 
      starttime := Now; 
      ClickOnObject(backpack);
      wait(100); 
      WaitJournalLine(starttime,'backpack',10000);
   until (InJournalBetweenTimes('backpack', starttime, Now)<>-1); 
end;

Function Abs(A: integer): integer;
Begin
If A>=0 then result:=A 
Else result:=0-A;
End;

function SetDirection(x, y : integer) : integer; 
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 CalcPrognosis(Dir : integer); 
begin 
   if (Dir = 1) or (Dir = 2) or (Dir = 3) then PrognosisX := GetX(self) + 1; 
   if (Dir = 5) or (Dir = 6) or (Dir = 7) then PrognosisX := GetX(self) - 1; 
   if (Dir = 0) or (Dir = 4) then PrognosisX := GetX(self); 

   if (Dir = 3) or (Dir = 4) or (Dir = 5) then PrognosisY := GetY(self) + 1; 
   if (Dir = 7) or (Dir = 0) or (Dir = 1) then PrognosisY := GetY(self) - 1; 
   if (Dir = 2) or (Dir = 6) then PrognosisY := GetY(self); 
end; 

procedure TryToMove(Direction : byte; RunFlag : boolean); 
var 
   xSelf,ySelf,zSelf: word;
   selfDir: byte;
begin 
   wait(100);
   xSelf:=getX(self);
   ySelf:=getY(self);
   zSelf:=GetSurfaceZ(xSelf,ySelf,WorldNum);
   selfDir:=GetDirection(self);
   
   if selfDir <> Direction then Step(Direction, RunFlag);
   
   if Direction=1 then
      if (Not IsWorldCellPassable(xSelf,ySelf,xSelf,ySelf-1,zSelf,WorldNum)) OR (Not IsWorldCellPassable(xSelf,ySelf,xSelf+1,ySelf,zSelf,WorldNum))  then begin aMoveResult:=3;  exit; end;
   if Direction=3 then
      if (Not IsWorldCellPassable(xSelf,ySelf,xSelf,ySelf+1,zSelf,WorldNum)) OR (Not IsWorldCellPassable(xSelf,ySelf,xSelf+1,ySelf,zSelf,WorldNum))  then begin aMoveResult:=3;  exit; end;
   if Direction=5 then
      if (Not IsWorldCellPassable(xSelf,ySelf,xSelf,ySelf+1,zSelf,WorldNum)) OR (Not IsWorldCellPassable(xSelf,ySelf,xSelf-1,ySelf,zSelf,WorldNum))  then begin aMoveResult:=3;  exit; end;
   if Direction=7 then
      if (Not IsWorldCellPassable(xSelf,ySelf,xSelf-1,ySelf,zSelf,WorldNum)) OR (Not IsWorldCellPassable(xSelf,ySelf,xSelf,ySelf-1,zSelf,WorldNum))  then begin aMoveResult:=3;  exit; end;

  
   if IsWorldCellPassable(xSelf,ySelf,PrognosisX,PrognosisY,zSelf,WorldNum) then 
      begin
      if (Not RunFlag) AND (Not Dead) AND (Not Hidden) then
         begin
         If (Timer-sTimerHide)>5000 then 
	       begin 
	       If WarMode then SetWarMode(false);
	       UseSkill('Hiding');
	       sTimerHide:=Timer;
	       end;
	 end;
      if step(Direction,RunFlag) then 
         begin
	 
	 aMoveResult:=1;
	 end
      else
         begin
	 
	 wait(5050);
	 aMoveResult:=2;
	 end;
       
      end
   else
      begin
      
      aMoveResult:=2;
      end;
end; 

function WrongMove(x, y : integer) : boolean; 
var 
i : integer; 
begin 
   result := false; 
   if FMoveArrCount = 0 then exit; 
   for i := 1 to FMoveArrCount do 
      begin 
      if (x = FMoveArr[i][1]) and (y = FMoveArr[i][2]) then 
         begin 
         result := true; 
         exit; 
         end; 
      end; 
end; 


function Min(x,y: integer): integer;
begin
 if x>y then Result:=y else Result:=x;
end;

function HEst(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:= min(dx,dy)+Ddx;
end;

procedure SetWrongMove(x, y : integer); 
begin 
   FMoveArrCount := FMoveArrCount + 1; 
   FMoveArr[FMoveArrCount][1] := x; 
   FMoveArr[FMoveArrCount][2] := y; 
end; 

function RewindDir(Dir, c : integer) : integer; 
begin 
   result := Dir + c; 
   if result < 0 then result := result + 8; 
   if result > 7 then result := result - 8; 
end; 

function Move(x, y, tolerance : integer; RunFlag : boolean) : boolean; 
var 
Dir, Dist, lastX, lastY, t, i, timeout : integer; 
begin 
   FMoveArrCount := 0; 
   Dist := HEst(x, y); 
   timeout := Dist * 15000; // 5 ñåêóíä âðåìåíè íà øàã 
   t := timer; 
   while true do 
      begin 
      Dist := HEst(x, y); 
      if Dist <= tolerance then // ïðèø¸ë 
         begin 
         result := true; 
         exit; 
      end; 
      if timer - t > timeout then // ïðîâàë ïî òàéìàóòó 
      begin 
         AddToSystemJournal('Move: Time moved out!'); 
         result := false; 
         exit; 
      end; 
      if aMoveResult<>3 then 
      begin
         Dir := SetDirection(x, y); 
         CalcPrognosis(Dir); 
         if WrongMove(PrognosisX, PrognosisY) then 
            begin 
            for i := 1 to 7 do 
               begin 
               Dir := RewindDir(Dir,1); 
               CalcPrognosis(Dir); 
               if not WrongMove(PrognosisX, PrognosisY) then break; 
               end;
            
            if i = 8 then 
               begin 
               AddToSystemJournal('Move: Cannot move'); 
               result := false; 
               exit; 
               end; 
	    end;
      end	
      else 
         begin
	 for i:=1 to 7 do
	    begin
	    
	    Dir:=RewindDir(Dir,1);
	    
	    CalcPrognosis(Dir);
	    TryToMove(Dir, RunFlag);
	    If aMoveResult=1 then break;
	    end;
         if i = 8 then 
            begin 
            AddToSystemJournal('Moveeee: Cannot move'); 
            result := false; 
            exit; 
            end;  
	 end;
      
      timeout := timeout + CheckFlow; 
      lastX := GetX(self); lastY := GetY(self); 
      TryToMove(Dir, RunFlag);
      if aMoveResult=1 then SetWrongMove(lastX, lastY); // îòñþäà ÷àð ïðèø¸ë 
      if aMoveResult=2 then SetWrongMove(PrognosisX, PrognosisY); 
      end; 
end; 

procedure _move(x, y, tolerance : integer; runFlag : boolean); 
begin 
while not Move(x, y, tolerance,runFlag) do wait(100); 
end;
//

//   ...
//   begin
//   InitCheckFlow;
//   ...
//   move(1234, 1234, 0); // èëè _move(1234, 1234, 0);
//   ... 
126 строка:

Code: Select all

      if step(Direction,RunFlag) then 

посоветуйте что делать?

Posted: 08.11.2009 21:15
by grundick
заменить на if step(.....) = 7 then

Posted: 08.11.2009 21:27
by Apofis
теперь появилась следующая бяка:

Code: Select all

22:24:43 [Flash]: Compiling
22:24:43 [Flash]: Compiler: [Error] (checksave.inc at 1:11):  Duplicate identifier 'CHECKSAVE'
22:24:43 [Flash]: Compiling failed
22:24:43 [Flash]: Script LUMBER_with_newbye_axLLL.inc.sc stopped successfuly
открываем checksave.inc, получаем:

Code: Select all

procedure CheckSave; 
var Time : TDateTime; 
begin 
Time:= Now - (0.5 / 1440); 
if InJournalBetweenTimes('Saving World State',Time,Now) >= 0 then Wait(30000) 
end;

Posted: 08.11.2009 22:16
by grundick
Компилятор говорит тебе об ошибке, почему ты его не хочешь услышать? :/ Ошибка означает, что идентификатор CheckSvae дважды определён. Скорее всего, первый раз в твоём основном скрипте. Либо убери подключение checksave.inc , либо удали определение ф-ии checksave из основного скрипта.

Posted: 08.11.2009 22:27
by Apofis
благодарю, там пришлось еще несколько таких же файлов удалить.

Проехал дальше словил уже в самом макросе на ламбер:

Code: Select all

23:22:45 [Flash]: Compiling
23:22:45 [Flash]: Compiler: [Error] (Lumber.inc at 91:9):  Invalid number of parameters
23:22:45 [Flash]: Compiling failed
23:22:45 [Flash]: Script Lumber.inc stopped successfuly
В самом скрипте это:


Code: Select all

89Begin	
90If Dead  then Exit;
91checklag;
92While Not Connected Do Wait(500);

Posted: 09.11.2009 0:12
by WladL

Posted: 09.11.2009 18:09
by Apofis
Всем спасибо!)