навело )
Избавляемся от инжекта )
Следующий скрипт предназначен для автоматического поиска и пометки деревьев. Зона поиска - квадрат, размером 180х180 тайлов , центр которого - координаты чара при запуске скрипта. Ищите поляну с неоходимым кол-вом деревьев, ставите чара примерно посреди этой поляны и запускаете скрипт. По спирали, начиная от координат чара, проверяются тайлы и если найдено дерево, чар идёт у нему. Если смог дойти- дерево сохраняется в файл. Сохраняется в виде 
Type X Y Z в файле C:/StealthTrees.dat . Собвсвенно , от Вас требуется настроить параметр  MaxTreesNumber. И ещё. Скрипт писался на коленке, тольком не проверялся. Вполне возможно, что какие то типы тайлов я упустил, а какие то вписал лишние. Поэтому, если какие то типы Ваш чар не сможет рубить (сообщение типа It appears immune to blow), попытайтесь обнаружить этот тип и сообщите об этом общественности )
Ещё ньанс! Если какая нибудь сволочь поставит на Вашей поляне дом, придётся перезапустить скрипт, создав новый файл деревьев.
Code: Select all
Program FindTreesAndSaveTheyInFile;
var
treeTile: array [0 .. 34] of word;
myX, myY :    word;
x, y     :    word;
treesNumber , Range : integer;
List : TStringList; 
Const
   MaxTreesNumber=200;         // Максимальное кол-во деревьев, которое нам нужно пометить. ))) Пометить :)   
   
   MaxRange=180;                  // зона поиска деревьев. 
   TypesCount = 34;            // Количество типов деревьев в нашем массиве.
// checks tile. if that what we need, it save file parameters in text file.
function CheckTile(x,y : word): boolean;
var
   Tile0: TStaticCell;
   LayersCount: word;
   i,j: integer;
      
Begin
Result:=false;
Tile0:=ReadStaticsXY(X,Y,WorldNum); 
LayersCount:=GetLayerCount(X,Y,WorldNum);
i:=0;
While i < LayersCount Do
   begin
   For j:=0 to TypesCount do
       If Tile0.Statics[i].Tile=TreeTile[j] then
           begin
	   //AddToSystemJournal('Tree founded!');
           If moveXY(X,Y,false,1,true) then 
	      begin
	         List.Add(IntToStr(Tile0.Statics[i].Tile)+' '+IntToStr(X)+' '+IntToStr(Y)+' '+IntToStr(Tile0.Statics[i].Z));
                 List.SaveToFile('C:/StealthTrees.dat');
		 treesNumber:= treesNumber+1;
                 If (treesNumber >= MaxTreesNumber)  then 
		    begin  
		    AddToSystemJournal('Пометили достаточное количество деревьев!');  
		    Result:= true; 
		    Exit; 
		    end;
	      end;
	   end;
   i := i+1;
   end;
End;
BEGIN
TreeTile[0]:=3274; 
TreeTile[1]:=3275; 
TreeTile[2]:=3276; 
TreeTile[3]:=3277;
TreeTile[4]:=3280; 
TreeTile[5]:=3283; 
TreeTile[6]:=3286; 
TreeTile[7]:=3288;
TreeTile[8]:=3290; 
TreeTile[9]:=3293; 
TreeTile[10]:=3296; 
TreeTile[11]:=3299;
TreeTile[12]:=3302; 
TreeTile[13]:=3320; 
TreeTile[14]:=3323; 
TreeTile[15]:=3326; 
TreeTile[16]:=3329;
TreeTile[17]:=3393;
TreeTile[18]:=3394; 
TreeTile[19]:=3395; 
TreeTile[20]:=3396;
TreeTile[22]:=3438; 
TreeTile[23]:=3439; 
TreeTile[24]:=3440; 
TreeTile[25]:=3441; 
TreeTile[26]:=3442; 
TreeTile[27]:=3460; 
TreeTile[28]:=3462; 
TreeTile[29]:=3476;
TreeTile[30]:=3480;
TreeTile[31]:=3484;
TreeTile[32]:=3488;
TreeTile[33]:=3492;
TreeTile[34]:=3496;
List := TStringList.Create;
Range:=1;
TreesNumber:=0;
myX:=getX(self);
myY:=getY(self);
While Range < maxRange do
   begin
   y:= myY-range;
   For x:= myX-range to myX+range do begin If CheckTile(x,y) then break ; end; 
   If treesNumber >= MaxTreesNumber  then break;
   x:= myX+range;
   For y:= myY-range+1 to myY+range  do begin If CheckTile(x,y) then break ; end; 
   If treesNumber >= MaxTreesNumber  then break;
   y:= myY+range;
   For x:= myX+range-1 downTo myX-range do begin If CheckTile(x,y) then break ; end; 
   If treesNumber >= MaxTreesNumber then break;
   x:=myX-range;
   For y:= myY+range-1 downTo myY-range+1 do begin If CheckTile(x,y) then break ; end; 
   If treesNumber >= MaxTreesNumber then break;
   Range:= Range+1;
   end;
List.Clear;
END.