moonwell-taxi
External CLI that reads custom flight data from acore_world and the
three vanilla taxi DBCs, then generates merged DBCs ready to drop into
both the server's dbc/ directory and the client patch.
Quick start
# 1. install deps (PyMySQL only)
pip install -r requirements.txt
# 2. point at your vanilla DBC source and run the export
./bin/moonwell-taxi export-dbc \
--vanilla-dir /home/sindo/moonwell-core \
--output-dir /home/sindo/moonwell-core/build/taxi/export
# Output:
# <output-dir>/server/dbc/TaxiNodes.dbc
# <output-dir>/server/dbc/TaxiPath.dbc
# <output-dir>/server/dbc/TaxiPathNode.dbc
# <output-dir>/client/DBFilesClient/TaxiNodes.dbc
# <output-dir>/client/DBFilesClient/TaxiPath.dbc
# <output-dir>/client/DBFilesClient/TaxiPathNode.dbc
#
# A sha256 manifest is written next to each half; the tool fails with a
# non-zero exit if server and client copies do not match.
# 3. pack the client half into an MPQ patch for native taxi UI
./bin/moonwell-taxi build-client-patch
# Output:
# <output-dir>/client/patch-Z.MPQ
#
# Copy that MPQ to the WoW 3.3.5a client's Data directory, delete the
# client's Cache directory, then restart Wow.exe. Loose DBFilesClient/*.dbc
# files are not enough for the stock 3.3.5a client taxi UI.
DB connection
Reads connection params from environment variables (which acore.sh and
import-custom-sql.sh already populate from .env):
DOCKER_DB_EXTERNAL_PORT(default 3306)DOCKER_DB_ROOT_PASSWORD(default "password")MOONWELL_TAXI_DB_HOST(default 127.0.0.1)MOONWELL_TAXI_DB_USER(default root)MOONWELL_TAXI_DB_NAME(default acore_world)
CLI flags override env: --db-host, --db-port, --db-user,
--db-password, --db-name.
Subcommands
export-dbc— fully implemented: merges vanilla + custom into new DBCs, writes server and client copies, prints sha256 for both. Refuses to run if--vanilla-diralready contains records in the custom-id space (TaxiNode id ≥ 441, TaxiPath id ≥ 1979) — that means the directory was already merged once and re-running would compound rows.build-client-patch— packs the exported client DBCs into a minimal MPQ patch with internal pathsDBFilesClient\TaxiNodes.dbc,DBFilesClient\TaxiPath.dbc, andDBFilesClient\TaxiPathNode.dbc. This is required for the native flight-master map UI to see custom taxi nodes; otherwise the client can crash when the server sends a custom current-node id.thin --path <id> [--min-yd 50] [--dry-run]— drops waypoints that sit withinmin-yd(XY) of the previously kept point, preserves first and last, renumbersnode_indexfrom 0. Use it when an in-game recording produced too-dense waypoints (chat shows lots ofsegment N->M is X.X yd (< 40 yd ...)warnings) — server filters those viaIsNodeIncludedInShortenedPathand the spline goes haywire. Backs up tocustom_taxi_path_nodes_backup_<pathId>_<ts>before deleting; the rollback SQL is printed at the end.dump-vanilla <path> [--limit N]— debug helper: parses a.dbcfile and prints header + first N records as raw uint32. Useful when adding new schemas.
The other subcommands listed in the spec (build-mpq, deploy-server, backup, rollback, diff) are not part of the MVP and return a not-implemented error today.
Default paths
--vanilla-dir defaults to <repo>/var/client-data-vanilla. Keep that
directory as a clean snapshot. redeploy.sh writes merged files into
<repo>/var/client-data-live/dbc, not back into the vanilla snapshot.