A MUSHclient plugin for Aardwolf MUD that trains your core stats according to a per-class ruleset, and practices pending spells/skills.
Instead of a flat priority list, Smart Train uses an ordered list of priority groups (strict between groups: a higher group is fully satisfied before the next). Within a group the cheapest stat is trained first, so you never overpay — and a -> cost-spike fallback lets a lower-priority stat soak up training only while it's cheaper than the stats above it. Each segment can have a per-point cost cap that stops training it once it gets too expensive.
It reads the live train and practice output as the source of truth (no guessing from formulas), forward-simulates training costs across Aardwolf's cost brackets, and respects your total-stat cap and available training/practice sessions.
- Download
smarttrain.xml. - In MUSHclient: File → Plugins → Add…, select
smarttrain.xml.
Requires the standard Aardwolf GMCP handler (aard_GMCP_handler) to detect your class.
| Command | Description |
|---|---|
strain |
Preview the training plan for your current class. |
strain noconvert |
Preview using only existing trains (ignore practices). |
strain apply |
Train for real (converts practices to trains if the plan needs them). |
strain apply noconvert |
Train using only existing trains; never touch practices. |
strain apply confirm |
Train even when spells/skills still need practicing. |
strain practice |
Practice all spells/skills that still need it. |
strain simulate [n] |
Project training from your current level to 200 at n trains/level (default 6), shown as a per-level breakdown in a pop-up window. |
strain edit |
Edit the profile for your current class (pop-up editor). |
strain edit <class> |
Edit the profile for a specific class. |
strain profiles |
List saved profiles. |
strain version |
Show the installed version. |
strain update |
Check GitHub for a newer version (reports only, no install). |
strain update confirm |
Download and install the latest version, then reload. |
strain help |
Show in-game help. |
Profiles are edited in a pop-up editor (strain edit) using a small text format:
# Mage training profile
int cap 6
wis luck cap 6
dex con cap 3 -> str cap 3
- One priority group per line, highest priority first. Groups are strict — a higher group is fully satisfied (maxed or cost-capped) before the next is touched.
- Within a line, the cheapest stat trains first. This is what stops you overpaying.
spaceor/between stats makes a balanced pair — cheapest first, ties alternate so they climb together (e.g.wis luckorwis/luck).->adds a cost-spike fallback: segments on the same line compete by cost, but the left segment wins ties. Index con cap 3 -> str cap 3,stris trained only when it's strictly cheaper thandex/con— so an expensiveconpoint yields to a cheapstrpoint instead of being wasted.cap Nsets the maximum per-point train cost for that segment. Omit it to train all the way to the stat's maximum.- Lines starting with
#are comments.
Profiles are stored per class and auto-selected from your current GMCP class, so alts and reclasses each get their own ruleset.
Mage and Psionicist ship with a built-in default (the profile shown above), created automatically the first time you run strain on that class. Other classes start empty — run strain edit to create one.
strain and strain apply silently check practice for spells/skills that still need practicing and warn you. Because converting practices into trains would consume the practices you'd want for spells, strain apply asks for confirm only when it would actually run train convertall and spells are still pending.
A typical end-to-end session:
strain apply noconvert # train stats with current trains, keep practices
strain practice # spend practices on pending spells
strain apply # convert leftover practices into trains, train more stats
strain update checks this repository for a newer version and reports whether
one is available — it does not install anything. strain update confirm
downloads the latest smarttrain.xml, overwrites your local copy, and reloads
the plugin (your saved profiles are preserved). strain version shows what
you're currently running. Uses MUSHclient's built-in async Lua module.
MIT