Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WyQKCL92ZLwPi9qmYQtNdc
OctoBus
Arrival timers for the Horde zeppelins and boats, for the vanilla 1.12.1 client (tested on OctoWow / Turtle WoW).
Each row reads start -> end, for example Orgrimmar -> Undercity, with a live timer for the start: how long until it leaves if it is docked there, or how long until it docks there if it is away. Right-click a row to reverse it (Undercity -> Orgrimmar, timed at Undercity). For the Ratchet boat, seen from Orgrimmar, it shows when to fly to make the next sailing. Click a row to put a bell on it and get a chat message shortly before it arrives (or, for the Ratchet boat, shortly before you need to fly).
See the changelog for what changed in each version.
OctoBus needs one extra file, ZepSense.dll, which you install by hand in the game folder. Your launcher can install the addon but not the DLL. See Install.
What you see
| Window element | Meaning |
|---|---|
| Green check | Transport is docked now. The timer counts down to departure ("leaves"). |
| Red X | Transport is away. The timer counts down to docking ("docks"). |
~ before a time |
An estimate from stored data. It goes away once you see the transport dock or leave. |
fly 4:55 sails 6:40 |
Ratchet boat only: leave Orgrimmar in 4:55 to be on the Ratchet dock before it sails in 6:40. If you can no longer make a sailing, it shows the next one. |
| Bell on a row | Alerts are on for that route (click a row to toggle). |
| Title | Click it to switch between the routes for where you are and all routes (Transports - all). |
| Footer | The route whose data is oldest, e.g. oldest data: Orgrimmar -> Undercity, seen 3 h ago. It turns orange after 5 days, as a hint to go and see it again. |
| Dots, bottom-right corner | Drag to make the window bigger or smaller. |
| Hover over a row | Cycle, stay at the dock, how the far end was measured, and what left- and right-click do. |
Routes
| Route | Type | Ends (where it shows up) |
|---|---|---|
| Orgrimmar <-> Undercity | zeppelin | Orgrimmar / Durotar; Tirisfal Glades / Undercity |
| Orgrimmar <-> Grom'gol | zeppelin | Orgrimmar / Durotar; Stranglethorn Vale |
| Orgrimmar <-> Kargath | zeppelin | Orgrimmar / Durotar; Badlands |
| Orgrimmar <-> Thunder Bluff | zeppelin | Orgrimmar / Durotar; Mulgore / Thunder Bluff |
| Grom'gol <-> Undercity | zeppelin | Stranglethorn Vale; Tirisfal Glades / Undercity |
| Sparkwater <-> Revantusk | boat | Orgrimmar / Durotar; The Hinterlands (hide with /ob boat) |
| Ratchet <-> Booty Bay | boat | Ratchet; Stranglethorn Vale. Also shown in Orgrimmar / Durotar, for planning. |
Every route has built-in timings measured on rides (both ends, cycle and stay), which your copy keeps refining from what it sees. The far end of Grom'gol <-> Undercity is not measured yet; it is learned the first time you ride it from Grom'gol. You can rename the far end of a route with /ob name.
Which routes are shown
- Routes for where you are (the default): only routes with an end in your zone, each reversed to start from your end. In Stranglethorn Vale, for example, you see
Grom'gol -> Orgrimmar,Grom'gol -> UndercityandBooty Bay -> Ratchet. A right-click reverses a row until you change zone. A route whose transport is in view (for example while you ride it) is shown too. Somewhere with no routes, opening the window by hand shows the routes of the last place that had some. - All routes: every route, in the direction you last set with right-click (kept between sessions).
Switch with a click on the window title, or /ob all.
Requirements
ZepSense.dll, a small client DLL that exposes one Lua function,ZepTransports(), which returns the position of every zeppelin/boat the client currently has loaded. The addon cannot see transports without it. Without the DLL it shows built-in estimates only (marked~).- A client setup that loads DLLs listed in
dlls.txt.
Install
Installing takes two parts. The addon can be installed by your launcher; the DLL always has to be set up by hand.
Part 1: the addon
- With a launcher: add this repository's git address (
https://github.com/Phridgey/OctoBus.git). - By hand: download this repository as a ZIP (green "Code" button, then "Download ZIP"), unzip it, rename the folder to
OctoBusand put it inInterface\AddOns\. The folder must containOctoBus.tocdirectly.
Part 2: the DLL (manual, the launcher does not do this)
- Download
ZepSense.dllfrom the Releases page. - Put it in the game folder, next to
WoW.exe. - Open
dlls.txtin the game folder and add a lineZepSense.dll. - Start the game fully (a
/reloadis not enough the first time the DLL is added). - Check it worked: open the window (
/obor the minimap icon). If the top-right corner says "no DLL: estimates only", the DLL is not loaded (see Troubleshooting). If that note is absent, everything is working. There is nothing else to set up: the timers correct themselves each time you see a transport dock.
The DLL only reads transport positions that the client has already loaded; it does not send anything anywhere. Its source is ZepSense_src/ZepSense_v5.c (built with i686-w64-mingw32-gcc -O2 -shared -static-libgcc -Wl,--kill-at -s). As with any client DLL, use it at your own risk and check your server's rules.
Saved data lives in WTF\...\SavedVariables\OctoBus.lua.
Using it
- Minimap icon: click to show/hide the window anywhere; drag to move it around the minimap edge.
- Auto-show: the window opens by itself at either end of any route (the zones in the table above), and while a tracked transport is in view, such as on a crossing. It hides elsewhere. The icon toggle always works manually. Add more auto-show places with
/ob allow <zone or sub-zone>(capitals do not matter;/ob whereshows the names), remove one with/ob disallow <name>, or turn the behaviour off with/ob zone. - Bells: click a row to toggle a bell. Belled routes print a chat message
/ob alertseconds (default 45) before the transport docks at the row's start, e.g.Orgrimmar -> Undercity: docks at Orgrimmar in 0:45. Nothing is printed to chat for routes without a bell. - Reverse a row: right-click it.
- Move and size the window: drag it to move it; drag the dots in the bottom-right corner (or use
/ob scale) to resize it./ob locklocks position and size;/ob resetposputs the window and icon back at their default place and size.
How the timing works
Each route runs on a fixed cycle. Once the addon sees one transport arrive, it can predict every later arrival, even while the transport is out of view (transports are only sent to your client when they are near you, so they drop out of range for part of each trip).
- Automatic calibration: any arrival you watch near the towers calibrates that route. The first time takes two sightings, later refreshes take one. The cycle length is refined as more arrivals are seen, and the dock-time (how long a transport waits) is learned too.
/ob calibrate(optional): watches every transport on purpose. Stand between the two towers where you can see the docks, do not/reload, and wait; rows are marked complete as each route is confirmed. A transport being out of view for a while is normal. If nothing at all has been seen after about 10 minutes, move closer to the towers./ob calibrate stopcancels.- Transports are not reported from deep inside the city (bank / auction house area), so calibrate near the towers.
- Far ends are learned by riding. When a transport stands still for 20 s away from its home dock, it is docked at the far end: the addon stores when it docked there (relative to its schedule) and how long it stayed. This needs the home end to have been seen earlier in the same session (for example, it leaving Orgrimmar with you on board), and the transport to be seen arriving. No recording is needed.
- One odd sighting does not wipe a route's history. A sighting that does not fit the schedule is set aside; the schedule only starts over (for example after a server restart) when a second sighting agrees with it.
The Ratchet boat
The Ratchet boat cannot be seen from Orgrimmar, so its row is always an estimate (~) built from the last time you saw it at Ratchet, or from the built-in timing if you never have. The built-in timing was measured over several rides (cycle 363.95 s, 64 s at each dock, docks at Booty Bay 178.6 s after Ratchet). At Ratchet itself the row shows plain docks / leaves times instead of fly. Every time you are at Ratchet with the boat in view (the DLL is needed for this), your copy corrects its timing and refines the cycle, so predictions stay accurate for longer the more often you have been there. Nothing is shared between players: each copy only learns from what its own player sees.
fly is the boat's departure from Ratchet minus your travel time from Orgrimmar to the dock. Set your own with /ob travel <seconds> (default 175: enough for a slower mount, with some time to spare; time your own trip from take-off at the Orgrimmar flight master to standing on the boat).
Commands
/ob (also /transit and /zep)
| Command | What it does |
|---|---|
/ob |
Show / hide the window (works anywhere) |
/ob list |
Print all timers in chat |
/ob alert <sec> |
Bell alerts fire this many seconds before arrival (default 45, 0 = off) |
/ob chat, /ob sound, /ob flash |
Toggle that alert type (chat on by default; sound and screen flash off) |
/ob all |
Switch between routes for where you are and all routes (same as clicking the title) |
/ob zone |
Toggle "auto-show only at route ends" (off = always show) |
/ob allow <name> |
Also auto-show in this zone or sub-zone |
/ob disallow <name> |
Take a place off that list |
/ob allowclear |
Remove all the extra auto-show places |
/ob where |
Print your zone / sub-zone and whether the window auto-shows here |
/ob boat |
Show / hide the Sparkwater <-> Revantusk boat |
/ob shape square|round|auto |
Minimap icon placement. auto reads your minimap shape (tell it explicitly if you use a square minimap addon and the icon sits wrong) |
/ob travel <sec> |
Your travel time from Orgrimmar to the Ratchet dock, used for fly |
/ob scale <n> |
Window size, 0.6 to 2 (same as dragging the bottom-right corner) |
/ob lock |
Lock / unlock the window position and size |
/ob resetpos |
Put the window and icon back in their default spots and size |
/ob name <n> <text> |
Rename the far end of route number n (numbers from /ob list) |
/ob period <n> <sec> |
Set a route's cycle length by hand |
/ob calibrate |
Watch all transports on purpose (see above); /ob calibrate stop cancels |
/ob reset |
Forget everything learned and go back to built-in values |
/ob debug |
Print once whether the DLL is answering and the raw data it returns (prints only, records nothing) |
/ob debug on / off |
For working out new routes only; not needed in normal use. Records every transport the DLL reports to the saved file, which grows quickly, so always turn it off again. REC shows in the window while it runs. |
Troubleshooting
- "no DLL: estimates only": the DLL is not loaded. Check that
ZepSense.dllis in the game folder and listed indlls.txt, then fully restart the game./ob debugshows the state. - Times have a
~and never confirm: go to that end of the route and wait for an arrival, or at the Orgrimmar towers run/ob calibrate. - A route I want is missing from the window: you are in the "where you are" view and not at either end of it. Click the title to see all routes.
/obdoes nothing or prints a start-up error: the addon reports its own load errors in chat; copy the message when reporting a bug.- Window did not auto-show: use
/ob whereto see your zone and sub-zone names, then/ob allow <name>if you want it there. - Ratchet times look wrong: it has probably been a long time, or there was a server restart, since you last saw it. Visit Ratchet with the window open and wait for the boat to dock.
- Everything looks off after a big server change (new route timings):
/ob reset, then calibrate again.