Raw .pkt binary analysis confirms SMSG_MOVE_APPLY_INERTIA in 12.0.1 is
20 bytes: PackedGUID + SequenceIndex + InertiaID + LifetimeMs with no
Force vector. The client derives force direction from the AreaTrigger
DB2 entry referenced by InertiaID.
Removes the incorrect Force field from MoveApplyInertia (SMSG),
MoveApplyInertiaAck (CMSG), and MoveUpdateApplyInertia (broadcast).
Updates Unit::SendApplyInertia() signature accordingly.
Whirling Surge (361584) and Launch Boost (392752) are periodic auras
per Wowhead spell data, not single-shot effects:
- Whirling Surge: Apply Aura: Dummy, 3s duration. Converted from
single-shot SpellScript to SpellScript+AuraScript pair. The periodic
handler sends facing+pitch oriented impulses at magnitude 5.0 per
tick (sniff-verified: 5-6 ticks per activation).
- Launch Boost: Periodic Dummy, period 100ms, duration 2s. Split into
SpellScript (sends initial Z=45 upward impulse on hit) + AuraScript
(sends periodic forward impulse at magnitude 5.0 per tick).
Both use RegisterSpellAndAuraScriptPair for combined validation and
periodic handling. Extracted SendFacingImpulse helper to reduce
duplication.
Add full server-side support for the client's skyriding movement system:
- DB2 infrastructure: DriveCapability (17 fields) and DriveCapabilityTier (5 fields)
stores with hotfix DB integration and SQL table definitions
- Drive activation: SetDriveCapabilityID() on mount/dismount integrated into
HandleAuraMounted, with blizzlike packet behavior (SET_CAN_DRIVE only via
CompoundState at login, UNSET_CAN_DRIVE on dismount)
- Vigor system: POWER_ALTERNATE_MOUNT (25) with velocity-based regen modifier
using FlightCapability::VigorRegenMaxVelCoefficient
- Impulse delivery: SendApplyInertia(), SendRemoveInertia(), SendAddImpulse()
helpers sending movement packets to mover only (no broadcast, per sniff)
- Dragonriding spell scripts: Surge Forward (372608), Skyward Ascent (372610),
Whirling Surge (361584), Launch Boost (392752) with sniff-verified impulse
values and SPELL_CUSTOM_ERROR_REQUIRES_SKYRIDING validation
Impulse magnitudes verified against raw SMSG_MOVE_ADD_IMPULSE packet data:
Launch Boost: (0, 0, 45.0), Whirling Surge: 5.0/tick x6,
Skyward Ascent: horiz 12.25 + Z 49.0
Add complete blizzlike Chromie Time flow: NPC gossip opens expansion picker,
handler sets ConditionalFlags/FactionGroup for content tuning redirection,
selection persists via new characters.chromieTimeExpansionId column, state
restores on login, and auto-clears at max level. Implement SMSG_SET_CTR_OPTIONS
server packet for mid-session state pushes.
Fix teleport-to-plot using server-side plot resolution instead of trusting
client's PlotIndex (which is a roster index, not the DB2 PlotIndex). Resolve
correct plot via player's Housing object for self-teleport, or OwnerGuid
matching for visiting others.
Additional changes accumulated in this batch:
- Implement housing packet handlers for Phase 5-7-9 opcodes
- Fix neighborhood response wire format to match retail sniffs
- Add housing source tracking and platform cleanup SQL migrations
- Fix AreaTrigger/GameObject/MeshObject housing integration points
- Extend UpdateFields for housing-specific object data
- Add Neighborhood plot management and house finder support
- Fix door script and steward NPC interactions
- Add catalog persistence prepared statement
- Fix HouseInteriorMap Euler-to-quaternion conversion for room components
1. CanStartMission: always send true (sniff shows all 1s regardless of
mission state, our code incorrectly sent MissionState == 0)
2. NumMissionsStartedToday: track daily mission start count with
day-boundary reset. Persisted to character_garrison table. This
controls follower abilities like "Increase success chance of the
first mission of the day."
3. ArchivedMissions: track completed mission RecIDs per garrison type.
Persisted to new character_garrison_archived_missions table. Sniff
shows 12 archived WoD missions and 9 archived Class Hall missions
for a played character.
Fix the effect dispatch key: use BattlePetEffectPropertiesID (the
actual effect action type) instead of ParamTypeEnum[0] (parameter data
type). This single change fixes healing dealing damage, auras not
applying, state changes, stuns, weather, and multi-turn markers all
routing to the damage case.
Also lock swaps during multi-turn abilities, clear multi-turn state on
pet death, face the player toward the opponent on battle start, restore
NPC trainer movement after battle with a cry emote on loss, and show
quest menu alongside the battle gossip option.
Register BattlePetNPCTeamMember.db2 in the hotfix pipeline so the
server can populate it at runtime. The client ships this DB2 empty
(0 records) — names resolve via CreatureID in packets instead, but
the infrastructure is now in place for future name overrides.
Add initial seed data for 19 NPC pet battle trainers (57 pets) from
Eastern Kingdoms through Pandaria Grand Masters. All creature IDs
verified against TDB creature_template with exact name matches.
Multi-turn abilities (Dig, Burrow, etc.) were invisible to the client:
- Handle effectCategory 17/18 (MULTI_TURN_BEGIN/END) in ProcessEffect
that were falling through to default handler producing no effects
- Fix off-by-one: multi-turn state now clears on last turn instead of
one round late (>= TotalTurns-1 instead of >= TotalTurns)
- Emit fallback STATUS_CHANGE for empty multi-turn turns so the client
still shows the ability animation
NPC trainer pet naming and model support:
- Add npcTeamMemberID column to battle_pet_npc_team (maps to
BattlePetNPCTeamMember.db2 for pet name display on client)
- Add creatureId column for optional model override (0=species default)
- Send NpcTeamMemberID in packet for all teams, not just wild