Fix progression stalls and add normal class trainer visits
Core tests / core (push) Successful in 29s

This commit is contained in:
Codex
2026-09-24 09:24:57 +12:00
parent d57d793a84
commit 132bf75f9d
24 changed files with 343 additions and 31 deletions
+30
View File
@@ -232,3 +232,33 @@ By default:
The project checkout keeps AzerothAI's local D1 state in `.wrangler/state`.
Do not delete these directories if you want the realm and character history to survive restarts.
## Class training and leveling
`ale/azerothai_training.lua` checks each managed resident after a level change and
rechecks every minute. It visits a nearby class trainer when the core reports
eligible spells, then uses the normal trainer purchase transaction. Purchases
require interaction distance and sufficient character gold; spells and money are
never granted. Combat, recovery, player control, and mixed parties suspend visits.
Stalled visits release paused work and retry later. The monitor reports pending
spells, trainer, blocked reason, and verified purchases separately.
This requires the native ALE methods installed by:
```bash
python3 deploy/playable/patch-native-training.py /path/to/azerothcore
```
Rebuild and deploy worldserver before enabling the training Lua module. The patch
also restores the native RPG training trigger and prevents sightseeing flights
for residents below level 60. Normal travel flight routes remain available.
`install-lifecycle.py` copies the Lua module with the other resident services.
Without the native API, the monitor reports that training is unavailable.
Training state and recoverable strategy leases live in
`acore_auth.azerothai_training`, one row per resident. Existing trainer purchases
made outside this workflow are not retroactively included in its purchase count.
Flight guards and telemetry use `HasUnitState(0x00000100)` (`UNIT_STATE_IN_FLIGHT`).
ALE's `IsTaxi()` tests the flight-master NPC flag and must not be used to detect
a player riding a taxi. Model decisions also yield to an active native flight.