Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Plunder Tracker

An open-source loot tracker for The Legend of Pirates Online. It watches the loot window, reads what dropped, and keeps the history on your own machine.

No account, no server, no connection. Install it, play, and your numbers are there — in a terminal dashboard while you play, and in a stats page you can open in a browser afterwards.

A leaderboard is planned, not present. It will be something you opt into, on top of a tracker that already works without it - not a thing you have to sign up for before you can count a chest. Nothing in this version talks to a server, and the log is already written in a form a leaderboard can accept later.


What it looks like

While you play, a dashboard that redraws the moment a chest is counted:

==============================================================
  Plunder Tracker LOOT TRACKER v1.0.0           |
==============================================================
  pirate  : Jack Redsteel
  monitor : watching
  window  : The Legend of Pirates Online  [1920x1080]   ui scale: 1.00x
  detect  : 13.8 checks/sec   windows seen: 380   recorded: 379
  season  : Hollowed Woods active (chest names may be renamed)
  last    : Haunted Skull Chest

--- TOTALS --------------------------------------------------
  Pouches:               157
  Chests:                119
  Skull Chests:          77
  Kraken Chests:         27
  Total containers:      380
  Famed:                 23
  Legendary:             4

--- SINCE LAST LEGENDARY ------------------------------------
  Pouches:               38
  Chests:                29
  Skull Chests:          30
  Kraken Chests:         11
  Famed drops:           6

--- AVERAGES PER DROP ---------------------------------------
  per famed      Pouche: 6.6 | Chests: 5.1 | Skull : 3.2 | Kraken: 1.1
  per legendary  Pouche: 29.8 | Chests: 22.5 | Skull : 11.8 | Kraken: 4.0
  famed per legendary: 4.2

--- RECENT RARE DROPS ---------------------------------------
  2026-08-25 01:29  famed     Bane Curse Cutlass
  2026-08-24 22:52  legendary Lost Sword of El Patron

==============================================================
  [1] log famed manually   [2] log legendary manually
  [p] switch pirate        [c] recalibrate
  [r] full stats page      [v] verify local log
  [u] check for updates    [q] quit
==============================================================

And afterwards, python run.py report writes the full picture as a page you can open in a browser:

The stats page: totals, per-container rates, seasonal variants, a per-pirate comparison, and every rare drop by name with a link to the loot window it came from

Sample data.


What it does

Reads item names instead of guessing at colours. The loot window is OCR'd and every name is looked up in a dictionary of 1,700+ known in-game items across every rarity. A Wax Doll is identified as a Wax Doll and a Ruby as a Ruby, so neither gets counted as something rare because it happened to be red — the false positive that plagues colour-threshold trackers.

Works on any resolution. Nothing is pinned to screen coordinates. The loot window is located by template-matching its header art at whatever scale it happens to be drawn, and every region is measured in multiples of that matched header. 800×600 windowed and 4K fullscreen both work with no configuration, and resizing mid-session re-derives the scale automatically.

Survives seasonal events. During Hollowed Woods the game renames Skull Chests to Haunted Skull Chests, and during the Winter Festival to Winter Skull Chests. The parser matches the trailing container noun and treats anything in front of it as the variant, so those resolve correctly — and so will an event that does not exist yet. The variant is recorded separately rather than discarded.

Records what actually dropped. Every famed and legendary drop is logged by name, with the loot window screenshot it came from, saved next to the log.

Counts per pirate. Most players have several, and pooling their loot makes every per-pirate figure meaningless. The tracker asks which one is playing at each launch — one keypress to confirm the last — and you can switch mid-session.

Keeps an auditable history. Events are chained by hash, so a corrupted write or an edited line is detectable rather than quietly wrong.


Quick start

  1. Install Python 3.10+ — tick Add python.exe to PATH.
  2. Install Tesseract OCR:
  3. Clone and run:
git clone https://github.com/plundertracker-hub/plundertracker.git
cd plundertracker/tracker

Double-click tracker.bat (Windows) or run python run.py. Dependencies install themselves on first launch, and the first run walks you through a three-step setup: OCR, finding the game window, and reading one real loot window so you can see exactly what it read back.

If anything misbehaves, run doctor.bat / python run.py doctor — it checks every part of the setup and names the one that is wrong.

Commands

python run.py                     # the dashboard (default)
python run.py setup               # guided first-run setup
python run.py doctor              # diagnose the install
python run.py calibrate           # locate the loot window and report the scale
python run.py verify              # re-hash the local event log end to end
python run.py stats               # print stats and exit
python run.py report              # write a stats page and open it
python run.py import <file>       # import an old "timestamp,item" log
python run.py config              # list settings
python run.py config <key> <val>  # change one

Dashboard keys

1 log a famed drop by hand · 2 log a legendary · p switch pirate · c recalibrate · r full stats page · v verify the local log · u check for updates · q quit

The stats page

python run.py report writes report.html next to your log and opens it. It holds what will not fit on one terminal screen: every rare drop by name and date, which loot window each came from, a link to its screenshot, per-pirate comparison, and per-item totals.

It is a single self-contained file — no fonts, scripts or trackers are fetched when it opens, so it works on a machine that has never been online. Re-run the command to refresh it.


Privacy

Everything stays on your machine. The tracker has no account, no telemetry and nothing to log in to, and the only request it ever makes on its own is one GitHub API call at launch to see whether there is a newer release:

python run.py config check_for_updates false   # not even that

A Discord webhook, if you configure one, is yours and posts only to the channel you point it at. Proof screenshots are cropped to the loot window and never leave the folder they are written to.


Configuration

Settings live in your user data directory, never in the repo, so git pull cannot clobber them:

  • Windows: %LOCALAPPDATA%\PlunderTracker\
  • Linux/macOS: ~/.local/share/plunder-tracker/

That directory holds config.json, events.jsonl (the log), state.json, calibration.json, report.html and proofs/.

Key Default Notes
window_titles the game's titles add yours if a launcher renames the window
fallback_region null [l, t, r, b] if window detection fails
poll_interval 0.2 seconds between screen checks
header_match_threshold 0.62 lower it if the loot window is not found
name_match_cutoff 0.86 how close an OCR'd name must be to count
tesseract_cmd auto explicit path if it is installed somewhere odd
save_proof_screenshots true keep the loot window each rare drop came from
sound_on_rare true
discord_webhook "" personal alerts, your own webhook
check_for_updates true one GitHub call at launch

Set PLUNDER_TRACKER_HOME to point the whole data directory somewhere else, which is what you want when testing.


Contributing

Most valuable contribution: missing item names. When the matcher cannot place a name it writes it to unknown_items.jsonl in your data directory rather than guessing. Open an issue with that file and the dictionary improves for everyone.

The dictionary is regenerated from the Pirates Online wiki with python tools/build_items.py.

See CONTRIBUTING.md, and docs/INTEGRITY.md for what the hash chain does and does not prove.


Licence and attribution

MIT — see LICENSE.

Item names are derived from the Pirates Online Wiki, CC-BY-SA 3.0.

Not affiliated with, endorsed by, or connected to The Legend of Pirates Online or its developers. This reads pixels from your own screen and writes to your own files; it does not modify, inject into, or automate the game.

About

A local-only loot tracker for The Legend of Pirates Online. Reads the loot window with OCR, counts every container and names every rare drop - no account, no server.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages