Pegar Loot de Monstro Longe

var
go:boolean;
X1,Y1,Z1,I:integer;
procedure WalkTo(X, Y, Z: integer);
begin
repeat
Sleep(1000);
Self.MoveTo(X, Y, Z);
UpdateWorld;
until ((abs(Self.X - X) < 2) and (abs(Self.Y - Y) < 2)) or terminated end; function GetTileFromXYZ(X, Y, Z: integer): TTile; begin Result := nil; if abs((Self.X - 7) - X) > 14 then Exit;
if abs((Self.Y - 5) - Y) > 11 then Exit;
if Self.Z <> Z then Exit;
Result := Screen.Tile[abs((Self.X - 7) - X), abs((Self.Y - 5) - Y)];
end;

function GetItemOnTile(ID: integer; Tile: TTile): TItem;
var
Z: integer;
begin
Result := nil;
for Z := 0 to Tile.Count - 1 do
begin
if Z >= Tile.Count then Break;
if Tile.Item[Z].ID = ID then
begin
Result := Tile.Item[Z];
Break;
end;
end;
end;

procedure Event_ItemCreated(ID, X, Y, Z: integer);
var body:TItem;
begin
updateworld;
c:=Self.containers.COunt;
if Self.z=Z then
begin
Tile:=GetTileFromXYZ(X,Y,Z);
if Tile<> nil then
begin
updateworld;
Body:=GetItemOnTile(ID,Tile);
if body<>nil then
if (Body.Properties.Container=true)and (Body.Properties.Movable=False) then
if not((abs(Self.X - X) < 2) and (abs(Self.Y - Y) < 2)) then
begin
I:=ID;
X1:=x; Y1:=y; Z1:=Z;
self.DisplayText('Body found on '+IntToStr(x)+','+IntToStr(y)+','+IntToStr(z));
Go:=true;
end
else self.DisplayText('The Item on '+IntToStr(x)+','+IntToStr(y)+','+IntToStr(z)+' is not a body');
end;
end;
end;

begin
Go:=false;
while not terminated do
begin
ProcessEvents;
sleep(100);
if Go then
begin
WalkTo(X1,Y1,Z1);
sleep(200);
updateworld;
Tile:=GetTileFromXYZ(X1,Y1,Z1);
Body:=GetItemOnTile(I,Tile);
Body.open;
end;
Go:=false;
end;
end;