навело )
Избавляемся от инжекта )
Следующий скрипт предназначен для автоматического поиска и пометки деревьев. Зона поиска - квадрат, размером 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.