🤖 The most advanced 24/7 Full-Auto PixelBot for Tibia with Cavebot, Refiller, Depositer and more.
I started working on this bot in December 2023, I added all the necessary features to make it operational 24/7, which was active until today when I decided to stop the operation and publish my work and tell the experience of what it was like to have a tibia bot farm in 2024, I had 7 chars and 3 pcs, each char farmed an average of 10-11kk a day resulting in an average turnover of 30kk a day, on servers I played I dominated the minocults spot, placing bots on all floors, players gave up farming and dominant guilds didn't care. I hope you make the most of this bot, it's still 100% functional until the day I publish this source.
Below I'll leave some images and videos of how it worked, prints of the bot's UI, and how to install and run it.
Cavebot scripts are JSON files (with a .pilotscript
extension) that define a sequence of actions (waypoints) for the bot to follow. You can create and edit these scripts using the Cavebot tab in the application.
- DRAKEN WALLS NORTH ✔️
- MINOTAUR CULT -1 AND -2 ✔️
The Cavebot page includes a "Validate Script" button. Clicking this will check your currently loaded script for common errors, such as:
- Correct JSON formatting.
- Ensuring each waypoint has all required fields (
label
,type
,coordinate
,options
,ignore
,passinho
). - Using known waypoint
type
values. - Correct structure and values within the
options
field for each waypoint type. - Valid references for
waypointLabelToRedirect
inrefillChecker
waypoints.
This helps catch issues before you run the bot, saving time and preventing unexpected behavior.
Each waypoint in a script is a JSON object with the following base structure:
{
"label": "Descriptive Label (optional)",
"type": "waypointTypeValue",
"coordinate": [x, y, z],
"options": {},
"ignore": false,
"passinho": false
}
label
(string): An optional name for the waypoint (e.g., "Start Point", "Dragon Lair Entrance"). Used byrefillChecker
.type
(string): The type of action to perform. See below for valid types.coordinate
(array of 3 integers): The[x, y, z]
map coordinate for the action.options
(object): A dictionary of options specific to the waypointtype
.ignore
(boolean): Iftrue
, the bot attempts to ignore creatures while executing this waypoint (usually forwalk
type).passinho
(boolean): Iftrue
, uses a special movement mode (details may vary).
Below are the KNOWN_WAYPOINT_TYPES
and the structure of their options
object:
-
walk
- Purpose: Moves the character to the specified
coordinate
. options
:{}
(must be empty)
- Purpose: Moves the character to the specified
-
singleMove
- Purpose: Moves the character one step from the
coordinate
in a specified direction. options
:direction
(string): Required. Must be one of"north"
,"south"
,"east"
,"west"
,"center"
.
- Purpose: Moves the character one step from the
-
rightClickDirection
- Purpose: Performs a right-click one step from the
coordinate
in a specified direction (e.g., to use a ladder down a hole where the hole itself is not walkable). options
:direction
(string): Required. Must be one of"north"
,"south"
,"east"
,"west"
,"center"
.
- Purpose: Performs a right-click one step from the
-
useRope
- Purpose: Uses a rope on the specified
coordinate
(e.g., a rope spot). options
:{}
(must be empty)
- Purpose: Uses a rope on the specified
-
useShovel
- Purpose: Uses a shovel on the specified
coordinate
(e.g., a hole or dirt patch). options
:{}
(must be empty)
- Purpose: Uses a shovel on the specified
-
rightClickUse
- Purpose: Performs a right-click directly on the
coordinate
(e.g., to open a chest or use an item). options
:{}
(must be empty)
- Purpose: Performs a right-click directly on the
-
openDoor
- Purpose: Attempts to open a door at the
coordinate
. options
:{}
(must be empty)
- Purpose: Attempts to open a door at the
-
useLadder
- Purpose: Attempts to use a ladder at the
coordinate
. options
:{}
(must be empty)
- Purpose: Attempts to use a ladder at the
-
moveUp
- Purpose: Moves the character up one floor (e.g., stairs, ladders, rope holes from below) from the
coordinate
in a specified on-screen direction. options
:direction
(string): Required. Must be one of"north"
,"south"
,"east"
,"west"
,"center"
.
- Purpose: Moves the character up one floor (e.g., stairs, ladders, rope holes from below) from the
-
moveDown
- Purpose: Moves the character down one floor (e.g., stairs, holes, ladders from above) from the
coordinate
in a specified on-screen direction. options
:direction
(string): Required. Must be one of"north"
,"south"
,"east"
,"west"
,"center"
.
- Purpose: Moves the character down one floor (e.g., stairs, holes, ladders from above) from the
-
depositGold
- Purpose: Initiates the gold deposit process (assumes NPC/bank is open).
options
:{}
(must be empty)
-
depositItems
- Purpose: Opens the depot in a specified city and deposits items.
options
:city
(string): Required. The name of the city where the depot is located. Valid cities include:"AbDendriel"
,"Ankrahmun"
,"Carlin"
,"Darashia"
,"Edron"
,"Farmine"
,"Issavi"
,"Kazoordon"
,"LibertBay"
,"PortHope"
,"Rathleton"
,"Svargrond"
,"Thais"
,"Venore"
,"Yalahar"
,"Feyrist"
,"Dark Mansion"
.
-
depositItemsHouse
- Purpose: Deposits items into a house chest (assumes chest is open or accessible).
options
:{}
(can be empty)city
(string): Optional. If specified, must be a valid city name (seedepositItems
for list). This might be used for specific house deposit logic if implemented.
-
dropFlasks
- Purpose: Drops empty flasks.
options
:{}
(must be empty)
-
travel
- Purpose: Initiates NPC travel to a specified city.
options
:city
(string): Required. The destination city or travel keyword. Valid values include:"AbDendriel"
,"Ankrahmun"
,"Carlin"
,"Darashia"
,"Edron"
,"Farmine"
,"Issavi"
,"Kazoordon"
,"LibertBay"
,"PortHope"
,"Rathleton"
,"Svargrond"
,"Thais"
,"Venore"
,"Yalahar"
,"Tibia"
,"Peg Leg"
,"shortcut"
.
-
refill
- Purpose: Buys potions from an NPC.
options
:healthPotionEnabled
(boolean): Required. Set totrue
if health potions should be refilled.houseNpcEnabled
(boolean): Required. Set totrue
if refilling from a house NPC (changes dialog keyword).healthPotion
(object): Required.item
(string): Required. Name of the health potion. Valid names include:"Health Potion"
,"Strong Health Potion"
,"Great Health Potion"
,"Ultimate Health Potion"
,"Supreme Health Potion"
,"Great Spirit Potion"
,"Ultimate Spirit Potion"
.quantity
(integer): Required. Desired total quantity of this potion.
manaPotion
(object): Required.item
(string): Required. Name of the mana potion. Valid names include:"Mana Potion"
,"Strong Mana Potion"
,"Great Mana Potion"
,"Ultimate Mana Potion"
,"Great Spirit Potion"
,"Ultimate Spirit Potion"
.quantity
(integer): Required. Desired total quantity of this potion.
-
buyBackpack
- Purpose: Buys backpacks from an NPC.
options
:name
(string): Required. Name of the backpack. Valid names:"Orange Backpack"
,"Red Backpack"
,"Parcel"
.amount
(integer): Required. Number of backpacks to buy.
-
refillChecker
- Purpose: Checks supply levels (potions, capacity) and redirects to another labeled waypoint if below thresholds.
options
:minimumAmountOfHealthPotions
(integer): Required. Bot goes to refill if health potions are below this.minimumAmountOfManaPotions
(integer): Required. Bot goes to refill if mana potions are below this.minimumAmountOfCap
(integer): Required. Bot goes to refill if capacity is below this.waypointLabelToRedirect
(string): Required. Thelabel
of the waypoint to go to if refill is needed. This label must exist elsewhere in the script.healthEnabled
(boolean): Required. Set totrue
if health potion count should be considered in the check.
- WORKS ON TIBIA GLOBAL ✔️
- 100% FULL AUTO ✔️
- CAVEBOT WITH WAYPOINTS (COORDINATES NOT CLICKMAP) ✔️
- SAVE AND SHARE CAVEBOT SCRIPTS ✔️
- CONFIGURABLE HOTKEYS ✔️
- CAITING CREATURES OVER BOXES ✔️
- OPEN DOORS, TRAVEL, CLICK ON BOATS ✔️
- IGNORE CREATURES ✔️
- DROP LOOT ON THE GROUND ✔️
- REFILER ✔️
- DEPOSITER ✔️
- WALK OVER THE FIRE ✔️
- ALERTS ✔️
- AUTO AMULET/RING ✔️
- COMBO SPELLS ✔️
- DROP FLASKS ✔️
- DEPOSIT GOLD ✔️
- DEPOSIT ITEMS ✔️
- FOOD EATER ✔️
- TARGETING ✔️
- HEALING ✔️
- QUICK LOOTING ✔️
- DEFAULT MESSAGE WHEN SEE A PLAYER ON THE SCREEN ✔️
- AUTO HUR ✔️
- AUTO CURE POISON ✔️
- FOLLOW ENEMY OR GO TO BOX TO KILL MONSTERS (DEPENDS THE CHAR LEVEL) ✔️
This bot needs good processing power to work properly (fast) i tested it with weak machines and didn't succeed, of the 3 machines i had running bots they all had a ryzen 5 5600 (6 core/12 threads +- 3.5ghz), use an equal or superior processor (or you can also use a worse one but overclock it), in addition to less input detection I chose to use a leonardo arduino to simulate mouse and keyboard inputs, you need a leonardo arduino to use this bot, if you don't have one you can change the source manually to use pyautogui or derivatives, or use a driver, but note that this may result in easier detection, inside the source I will leave a . ino file with the arduino code, just send it to your arduino leonardo and it will work (remember to leave the arduino as the standard COM33 port, otherwise the bot will not work), I also recommend spoofing the arduino (it's not necessary to run the project) so that it doesn't have the id of the arduino board but that of some input device (mouse/keyboard), thus making detection more difficult.
THE BOT ONLY WORKS IN 1920X1080 RESOLUTION
TESTED ONLY ON WIN10
COMMANDS TO ACTIVATE THE VIRTUAL DISPLAY:
- Extract the file, then:
cd C:\DIRECTORY\OF\EXTRACTED\FOLDER
deviceinstaller64 install usbmmidd.inf usbmmidd
-Add virtual display:
deviceinstaller64 enableidd 1
Once you have the second monitor activated, make sure your resolution is 1920x1080, then just open obs, add a game capture, select tibia and remove the pointer, then just open the game capture in windowed mode and click to maximise the window (windowed fullscreen)
OBS: If you have more than one physical screen, switch them all off and stick with just one
🔴 IMPORTANT YOU NEED TO REMOVE THE POINTER FROM THE OBS GAME CAPTURE, OTHERWISE IT MAY RESULT IN BUGS
YOU NEED TO USE THIS CONFIGS IN YOUR CLIENT, OTHERWISE WILL NOT WORK
Tibia PilotNG settings are managed through a user-friendly interface within the application.
Accessing Settings: To change application settings, click the "Configuration" button on the main application window. This will open the Settings Page.
Using the Settings Page: The Settings Page allows you to customize various aspects of the bot, such as:
- General application behavior (e.g., profile path, game resolution).
- In-game item names (e.g., backpack names).
- Gameplay mechanics and combat thresholds.
- Hotkeys for all actions.
- NPC interaction keywords and refill timings.
- Keyboard and action delays.
- Default values for UI elements.
Navigate through the categories on the left sidebar and adjust the settings in the main area. Once you've made your changes, click "Save Settings". Some settings may require an application restart to take full effect.
Configuration Files:
Your customized settings are saved in a file named config.json
, located in the root directory of the application (where the pilotng
executable or main.py
is).
config.json
: Stores your personalized settings. While you can technically edit this file manually, it is highly recommended to use the in-app Settings Page to avoid errors.config.default.json
: This file is included with the application and serves as a template containing all default values. Ifconfig.json
is missing or deleted, the application will use the values fromconfig.default.json
on the next run. You can also refer to this file to see the default state of all settings. The "Reset to Defaults" button on the Settings Page effectively reverts the settings inconfig.json
(or your current session if not yet saved) back to these defaults.- Internal Defaults: If both
config.json
andconfig.default.json
are missing, the application will fall back to a set of internal, hardcoded defaults.
To start with a fresh set of default configurations that you can customize, you can:
- Ensure no
config.json
exists in the root directory. - The application will then use
config.default.json
(or internal defaults if it's also missing). - Open the Settings Page, make any desired changes, and click "Save Settings". This will create a new
config.json
with your choices.
🔴 USE AT YOUR OWN RISK
-
DOWNLOAD AND INSTALL THE SOFTWARE DEPENDENCIES
-
MAKE SURE THE ARDUINO IS PLUGGED IN
-
CLONE/DOWNLOAD THE PROJECT
-
DOWNLOAD THE PYTHON DEPENDENCIES
poetry install
- RUN THE PROJECT
poetry run python main.py
Alternatively, you can build and run the application from a standalone executable.
- Ensure you have all development dependencies installed:
poetry install
- Run PyInstaller to build the executable using the provided spec file:
This command will create a
poetry run pyinstaller pilotng.spec
dist
folder in the root of the project, containing the executable and its associated files.
- On Linux:
Open your terminal, navigate to the project's root directory, and run:
dist/pilotng
- On Windows:
Open Command Prompt or PowerShell, navigate to the project's root directory, and run:
dist\pilotng.exe
Contributions are always welcome! Create a pull request xD
if you want to talk to me, add me on Linkedin or Discord
I started this project on the basis of the PyTibia developed by lucasmonstrox, he did a great job, I was able to learn a lot from his project and the techniques he used, take a look at his project, he keeps updating it to this day.