Follow along with the video below to see how to install our site as a web app on your home screen.
Notka: This feature may not be available in some browsers.
const
BackpackToEmpty = 2 // When at DP Empty This Backpack to Depot Chest (bp id which Stones are Stored in)
CaveToDepotWaypoints = '[COLOR="Blue"]C:\Program Files\TibiaBot NG\GobsToDP.ng.wpt[/COLOR]' // Goblins to DP
DepotToCaveWaypoints = '[COLOR="Lime"]C:\Program Files\TibiaBot NG\DPToGobs.ng.wpt[/COLOR]' // DP to Goblins
StonesAmount = [COLOR="Sienna"]100[/COLOR]; // Leave Cave when this Amount of Stones
WaitTime = 10;
var
Stones: integer;
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;
Procedure UseTile(X,Y,Z: Integer);
Var
Tile: TTile;
begin
if Z = Self.Z then
begin
Tile := GetTileFromXYZ(X, Y, Z);
Tile.Item[1].Use;
end;
else Unreachable := True;
end;
Procedure UseRope(X,Y,Z: Integer);
begin
if Z = Self.Z then
begin
Self.Containers.UseItemWithGround(3003, X, Y, Z);
end;
else Unreachable := True;
end;
Procedure MoveTo(X,Y,Z: Integer);
begin
if Z = Self.Z then
begin
Self.MoveTo(X,Y,Z);
end;
else Unreachable := True;
end;
Procedure UseShovel(X,Y,Z: Integer);
var Tile: TTile
begin
if Z = Self.Z then
begin
repeat
Self.Containers.UseItemWithGround(5710, X, Y, Z);
Self.Containers.UseItemWithGround(3457, X, Y, Z);
Sleep(1000);
UpdateWorld;
Tile := GetTileFromXYZ(X, Y, Z);
until Tile.Item[0].Properties.Hole or Terminated
Self.MoveTo(X, Y, Z);
end;
else Unreachable := True;
end;
Procedure WaypointToAction(X,Y,Z,Action :Integer);
begin
UpdateWorld;
Case Action of
1: UseRope(X,Y,Z);
2: UseTile(X,Y,Z);
3: MoveTo(X, Y+1, Z+1);
4: MoveTo(X, Y-1, Z-1);
5: MoveTo(X, Y, Z-1);
6: MoveTo(X, Y, Z);
7: UseShovel(X,Y,Z-1);
8: MoveTo(X, Y, Z);
9: Sleep(X*1000);
else
MoveTo(X,Y,Z);
end;
end;
Function WaypointReached(X,Y,Z,Action :Integer): Boolean;
begin
UpdateWorld;
Result := False;
Case Action of
1: if (Z = Self.Z + 1) then Result := True;
2: if (Z = Self.Z + 1) then Result := True;
3: if (Z = Self.Z) then Result := True;
4: if (Z = Self.Z) then Result := True;
5: if (Z = Self.Z) then Result := True;
6: if ((X = Self.X) and (Y = Self.Y) and (Z = Self.Z)) then Result := True;
7: if (Z = Self.Z) then Result := True;
8: if (abs(Z - Self.Z) = 1) then Result := True;
9: Result := True;
else
if ((X = Self.X) and (Y = Self.Y) and (Z = Self.Z)) then Result := True;
end;
end;
Function CountWaypoints(FilePath: String): Integre;
Var
i: Integer
WaypointFile: TextFile
begin
i := 0
AssignFile(WaypointFile, FilePath);
ReSet(WaypointFile);
while not EoF(WaypointFile) do
begin
temp:= ReadLn(WaypointFile);
i := i+1;
end;
Result:= (i/4);
end;
Function ExtractWaypointsFromFile(FilePath: String; Count: Integer): Integre;
Var
i: Integr
WaypointsArray: Integer
WaypointFile: TextFile
begin
WaypointsArray := VarArrayCreate([0, Count - 1, 0, 3], $C);
AssignFile(WaypointFile, FilePath);
ReSet(WaypointFile);
for i:=0 to Count-1 do
begin
WaypointsArray[i,0] := StrToInt(ReadLn(WaypointFile));
WaypointsArray[i,1] := StrToInt(ReadLn(WaypointFile));
WaypointsArray[i,2] := StrToInt(ReadLn(WaypointFile));
WaypointsArray[i,3] := StrToInt(ReadLn(WaypointFile));
end;
CloseFile(WaypointFile);
Result := WaypointsArray;
end;
procedure DepositeStones;
begin
UpdateWorld;
A := nil;
for x := 6 to 8 do
begin
if x > 8 then break;
for y := 4 to 6 do
begin
if y > 6 then break;
for i := 0 to Screen.Tile[x,y].Count - 1 do
begin
if i >= Screen.Tile[x,y].Count then break;
if Screen.Tile[x,y].Item[i].properties.depot then
begin
A := Screen.Tile[x,y].Item[i];
break;
end;
SLEEP(50);
end;
end;
end;
if A <> nil then
if BackpackToEmpty > 0 then
begin
A.Open;
C := Self.Containers.Count;
Sleep(1500);
UpdateWorld;
if C <> Self.Containers.Count then
begin
for G := Self.Containers.Container[BackpackToEmpty - 1].Count - 1 downto 0 do
begin
if G >= Self.Containers.Container[BackpackToEmpty - 1].Count then break;
Self.Containers.Container[BackpackToEmpty - 1].Item[G].MoveToContainer(Self.Containers.Container[Self.Containers.Count - 1],20,0);
sleep(100);
end;
end;
end;
else if BackpackToEmpty = 0 then
begin
A.Open;
C := Self.Containers.Count;
Sleep(1500);
UpdateWorld;
if C <> Self.Containers.Count then
begin
for ok := 0 to self.containers.Count - 2 do
begin
if ok >= Self.Containers.Count - 1 then break;
for G := Self.Containers.Container[ok].Count - 1 downto 0 do
begin
if G >= Self.Containers.Container[ok].Count then break;
Self.Containers.Container[ok].Item[G].MoveToContainer(Self.Containers.Container[Self.Containers.Count - 1],100,0);
sleep(100);
end;
end;
end;
end;
end;
function CountItemAmountFromOpenBackpack(ID: integer): integer;
var
x: integer;
y: integer;
begin
Result := 0;
for x := 0 to Self.Containers.Count - 1 do
begin
if x >= Self.Containers.Count then Break;
for y := 0 to Self.Containers.Container[x].Count - 1 do begin
if y >= Self.Containers.Container[x].Count then Break;
if Self.Containers.Container[x].Item[y].ID = ID then begin
Result := Result + Self.Containers.Container[x].Item[y].Amount;
end;
end;
end;
end;
Procedure FollowWaypoint(FilePath: String)
begin
Index := 0
Unreachable := False
WaypointsCount := CountWaypoints(FilePath);
WP := ExtractWaypointsFromFile(FilePath, WaypointsCount);
while (Index <> (WaypointsCount-1)) and (not Terminated) do
begin
if Unreachable then
begin
Index := Index+1;
Unreachable := False;
end;
if Index = (WaypointsCount-1) then Index := 0;
if WaypointReached(WP[Index,0],WP[Index,1],WP[Index,2],WP[Index,3]) then
Index := Index +1;
WaypointToAction(WP[Index,0],WP[Index,1],WP[Index,2],WP[Index,3]);
Sleep(1000);
end;
end;
begin
updateworld
Stones := CountItemAmountFromOpenBackpack(1781);
if Stones < StonesAmount then Exit;
FollowWaypoint(CaveToDepotWaypoints);
While (Stones > 0) and (not terminated) do
begin
DepositeStones;
Sleep(WaitTime*1000);
updateworld;
Stones := CountItemAmountFromOpenBackpack(3031);
end;
if Terminated then Exit;
FollowWaypoint(DepotToCaveWaypoints);
Sleep(1000);
end;