SRL Archive - Reflection Development

Procedure FindEmptyTiles


ZaSz

2009-05-22 04:00:22

Made with scar 3.20d

I made this for so it would pretty much detect spots open for firemaking, but it can be used for a number of other things.

Please note lengthbox is like a square around you. (like setting it to 4 with make it search 4 left,down,right,up, and anything in that box).

the bigger the box, the more time it takes to search.

Currently, takes about 3-5 seconds to do a lengthbox of 4.

procedure findemptytiles(var storeemptytiles:Tpointarray; var storetileswithobjects:Tpointarray;lengthbox:integer);
var
tempx, tempy, tempobject:integer;
temppoint :tpoint;
begin
p := getmypos;
for tempx := (p.x) to (p.x + lengthbox) do
begin
for tempy := (p.y) to (p.y + lengthbox) do
begin
wait(50);
tempobject := GetObjectAt(tempx,tempy).objType;
temppoint := point(tempx,tempy);
if(tempobject>0)then
begin
SetLength(storetileswithobjects, Length(storetileswithobjects) + 1);
storetileswithobjects[High(storetileswithobjects)] := temppoint;
end;
if(tempobject=0)then
begin
SetLength(storeemptytiles, Length(storeemptytiles) + 1);
storeemptytiles[High(storeemptytiles)] := temppoint;
end;
end;
end;
wait(500);
for tempx := (p.x) to (p.x - lengthbox) do
begin
for tempy := (p.y) to (p.y - lengthbox) do
begin
wait(50);
tempobject := GetObjectAt(tempx,tempy).objType;
temppoint := point(tempx,tempy);
if(tempobject>0)then
begin
SetLength(storetileswithobjects, Length(storetileswithobjects) + 1);
storetileswithobjects[High(storetileswithobjects)] := temppoint
end;
if(tempobject=0)then
begin
SetLength(storeemptytiles, Length(storeemptytiles) + 1);
storeemptytiles[High(storeemptytiles)] := temppoint;
end;
end;
end;
for tempx := (p.x) to (p.x + lengthbox) do
begin
for tempy := (p.y) to (p.y - lengthbox) do
begin
wait(50);
tempobject := GetObjectAt(tempx,tempy).objType;
temppoint := point(tempx,tempy);
if(tempobject>0)then
begin
SetLength(storetileswithobjects, Length(storetileswithobjects) + 1);
storetileswithobjects[High(storetileswithobjects)] := temppoint
end;
if(tempobject=0)then
begin
SetLength(storeemptytiles, Length(storeemptytiles) + 1);
storeemptytiles[High(storeemptytiles)] := temppoint;
end;
end;
end;
for tempx := (p.x) to (p.x - lengthbox) do
begin
for tempy := (p.y) to (p.y + lengthbox) do
begin
wait(50);
tempobject := GetObjectAt(tempx,tempy).objType;
temppoint := point(tempx,tempy);
if(tempobject>0)then
begin
SetLength(storetileswithobjects, Length(storetileswithobjects) + 1);
storetileswithobjects[High(storetileswithobjects)] := temppoint
end;
if(tempobject=0)then
begin
SetLength(storeemptytiles, Length(storeemptytiles) + 1);
storeemptytiles[High(storeemptytiles)] := temppoint;
end;
end;
end;
end;


An example of use:

procedure tellmethetiles;
var
storedtilez, emptiedtilez:tpointarray;
begin
findemptytiles(emptiedtilez,storedtilez,4);
writeln('Tiles with objects');
for i := 0 to high(storedtilez)do
begin
writeln('Point('+inttostr(storedtilez[i].x)+','+inttostr(storedtilez[i].y)+');');
end;
writeln('Tiles without objects');
for I := 0 to high(emptiedtilez)do
begin
writeln('Point('+inttostr(emptiedtilez[i].x)+','+inttostr(emptiedtilez[i].y)+');');
end;

S := random(2);
walktotile(point(emptiedtilez[S].x,emptiedtilez[S].y),2,1);
writeln('Walked to an empty tile for fire');
wait(3000);
end;