Add instant visual feedback for fixture/room changes, populate licensed
decor quantities from catalog, and implement the decor refund window.
- Fixture handlers (SetCore, Create, Delete) now despawn+respawn house
MeshObjects so changes are visible without relog
- All 8 room handlers refresh interior MeshObjects after success via
shared RefreshInteriorRoomVisuals helper
- Send SMSG_ACCOUNT_*_COLLECTION_UPDATE for room add, theme set, and
material apply operations
- HandleGetAllLicensedDecorQuantities returns catalog + starter decor
- HandleGetDecorRefundList returns recently placed decor within 2-hour
refund window using new PlacementTime field persisted to DB
Add warband_achievement and warband_achievement_progress tables for
account-level achievement storage. On login, merge account-wide
achievements and criteria progress from warband tables. Titles from
account-wide achievements are retroactively granted to all characters.
Existing per-character account-wide achievements are promoted to
warband tables on first login after migration.
Discovered flight paths are now shared across all characters on the same
Battle.net account. On login, each character merges the account-wide taxi
mask into their own. When a new node is discovered, the account mask is
updated immediately. Nodes with TaxiNodeFlags::NotAccountWide are excluded.
- Add warband_taxi_mask table (one row per bnet account)
- Add PlayerTaxi::MergeAccountTaxiMask() and LoadTaxiMaskFromString()
- Merge account taxi mask during Player::LoadFromDB
- Save character's merged mask back to account on Player::SaveToDB
- Update account mask on SendLearnNewTaxiNode/SendDiscoverNewTaxiNode
Add database tables and ObjectMgr infrastructure for account-wide
reputation sharing:
- warband_reputation_faction (world DB): eligible factions config
- warband_reputation (characters DB): per-account highest standings
- Prepared statements for both world and character databases
- ObjectMgr::LoadWarbandReputationFactions() called at startup
- Pre-populate with TWW renown factions (2570, 2590, 2594, 2600)
Load 12 new Garr* DB2 stores (GarrBuildingDoodadSet, GarrFollItemSetMember,
GarrFollowerLevelXP, GarrFollowerQuality, GarrFollowerType,
GarrItemLevelUpgradeData, GarrMissionSet, GarrMissionType,
GarrMissionXFollower, GarrMssnBonusAbility, GarrSpecialization, GarrType)
across the full loading pipeline.
Implement Garrison::Upgrade() for WoD level 1-3 progression with cinematic
playback, building persistence across level transitions, and plot respawning.
Replace hardcoded follower XP formula with DB2-driven progression using
GarrFollowerLevelXP and GarrFollowerQuality stores, including quality
upgrades with ability re-rolling at tier boundaries.
Add follower custom name persistence (customName column) and mission
required follower validation via GarrMissionXFollower index.
Refactor to multi-garrison framework: Player stores map of garrisons keyed
by GarrisonType, GetGarrison() defaults to WoD for backwards compatibility,
GetGarrisonInfo sends data for all garrison types to client.