Commit Graph
100 Commits
Author SHA1 Message Date
luis 79859eef90 todo add # Playerbot Movement and Humanization Improvements 2026-03-04 01:13:23 -03:00
luis c9c19ac368 merge shadowlands part 1 2026-03-04 00:57:43 -03:00
luis 12ba82cee4 SPELL_EFFECT_CONVERT_ITEMS_TO_CURRENCY 2026-03-03 23:17:27 -03:00
luis 66c48685fa scenario_the_throughway 2026-03-03 23:13:24 -03:00
luis 39a6e8e626 SPELL_EFFECT_REMOVE_PHASE 2026-03-03 22:58:09 -03:00
luis 477c7a16b4 SPELL_EFFECT_TELEPORT_TO_LFG_DUNGEON 2026-03-03 22:51:05 -03:00
luis e00fd4b3cc core implement SPELL_EFFECT_PUSH_ABILITY_TO_ACTION_BAR 2026-03-03 21:45:47 -03:00
luis 118b12113c Pet Battles: Fix aura visibility, capture timing, and add NPC battle support
Fix aura round data being lost before packet serialization by storing
RoundsRemaining/CurrentRound in PetBattleRoundEffect at creation time
instead of looking up live aura state after TickAuras() has already
decremented or removed them.

Defer captured pet journal addition from round resolution to
CompleteBattle() so the "Pet collected" message appears after the
client plays the crate animation, not before. Also add missing
PlayerObtainPetThroughBattle criteria call.

Add NPC pet battle support via StartNPCPetBattle() on WorldSession and
npc_pet_battle_trainer gossip CreatureScript. Trainers with a team in
battle_pet_npc_team and ScriptName='npc_pet_battle_trainer' will offer
a gossip battle option.
2026-03-03 20:48:34 -03:00
luis 7e3029b54b Garrison: Fix 4 additional sniff-verified discrepancies
Continued analysis of WoD garrison sniff hex data revealed:

Shipment packets:
- CharacterShipment struct missing 2 fields: UnkInt32 (int32) and
  GarrTypeID (uint8) per entry — 5 extra bytes confirmed by raw hex
  decode of GET_SHIPMENT_INFO_RESPONSE and LANDING_PAGE_SHIPMENTS
- CreateShipmentResponse ShipmentRecID always 0 (sniff-confirmed)

Login/zone-in workflow:
- Send troop quality refresh (FOLLOWER_CHANGED_QUALITY) before main
  GET_GARRISON_INFO_RESULT at login (sniff-confirmed ordering)
- Send GARRISON_UPDATE_GARRISON_MONUMENT_SELECTIONS on zone-in after
  map data response (sniff-confirmed zone-in sequence)
2026-03-03 20:41:08 -03:00
luis a6a0402a86 Garrison: Fix 9 packet discrepancies from WoD sniff + IDA verification 2026-03-03 20:36:24 -03:00
luis 9c11df2fd1 Fix worldserver crash 2026-03-03 20:20:30 -03:00
luis ec6cf8a385 warning fixes 2026-03-03 20:05:41 -03:00
luis 600e055255 Housing: Fix decor click selection, owner display, and BLZ_ALLOC crash
- Set EditorMode UpdateField via SetHousingEditorModeUpdateField() when
  entering/exiting edit mode. The client reads this from
  PlayerHouseInfoComponentData to enable ClickTarget (flag 16) for decor
  selection. Without it, the housing editor stays in mode 0 and all click
  flags are disabled.

- Set UNIT_FLAG_PACIFIED, UNIT_FLAG2_NO_ACTIONS and SilencedSchoolMask=127
  during edit mode (sniff-verified retail behavior). Clear on exit.

- Revert ignoreNestedChangesMask from true to false in
  HousingStorageData::WriteUpdate. The true flag forced full-map Create
  format inside VALUES_UPDATE which crashes the client (BLZ_ALLOC 41GB)
  on subsequent Decor map updates after placing decor. The original
  partial-serialization issue was actually caused by ContentsChangedMask=0
  which is already fixed by the Account::SendUpdateToPlayer override.

- Fix SMSG_HOUSING_UPDATE_HOUSE_INFO to send actual BnetAccountGuid
  instead of ObjectGuid::Empty so house owner displays correctly in the
  settings/permissions UI.

- Make character_housing position columns SQL update idempotent to avoid
  duplicate column errors when schema already includes posX/posY/posZ.
2026-03-03 19:52:07 -03:00
luis c77a3eec28 missing 2026-03-03 19:49:04 -03:00
luis 188b2d88af Housing: Fix empty VALUES_UPDATE by building ContentsChangedMask before send
BaseEntity::SendUpdateToPlayer() is const and never calls
BuildUpdateChangesMask(), leaving ContentsChangedMask at 0. This means
BuildValuesUpdateBlockForPlayer() skips all fragment data — the
VALUES_UPDATE packet is sent empty with no FHousingStorage_C content.

The map's periodic update cycle (Account::BuildUpdate) does call
BuildUpdateChangesMask() and sends data correctly, but our explicit
handler calls to SendUpdateToPlayer were producing empty packets.

Override SendUpdateToPlayer on Account to call BuildUpdateChangesMask()
before serializing and ClearUpdateMask() after. This ensures
FHousingStorage_C Decor map data populated by
PopulateCatalogStorageEntries() is actually included in the packet.
2026-03-03 19:48:46 -03:00
luis 7e28074385 Housing: Fix decor selection by serializing full Decor map in VALUES_UPDATE
The client correlates FHousingStorage_C Decor entries with MeshObject
FHousingDecor_C.DecorGUID for targeting/selection. VALUES_UPDATE packets
with partial change masks (ignoreNestedChangesMask=false) only sent
individual field bits, missing the complete Decor map structure the
client needs. Fix by forcing ignoreNestedChangesMask=true in
HousingStorageData::WriteUpdate so the Decor map is always serialized
in full-create format (WriteMapFieldCreate) inside VALUES_UPDATE.

Also fix SetHousingDecorStorageEntry to set SourceValue (empty string)
so all 3 fields have their change bits set for per-entry serialization.
2026-03-03 19:47:24 -03:00
luis 8f72fc820f Housing: Fix BLZ_ALLOC crash by tracking Account entity in m_clientGUIDs
The Account entity's GUID was never added to m_clientGUIDs after its
initial CREATE (embedded in the player's own create block). This caused
SendUpdateToPlayer() to always send a duplicate full CREATE instead of
a VALUES_UPDATE. When the Decor map was populated during edit mode, the
duplicate CREATE crashed the client with a 41GB BLZ_ALLOC allocation.
2026-03-03 19:43:56 -03:00
luis e615ac2f9e Core/Misc: Update CURRENT_EXPANSION to Midnight 2026-03-03 19:41:05 -03:00
luis af61bad399 DB/Spells: Fix Executioner's Precision procs 2026-03-03 19:38:57 -03:00
luis e47bcc48d6 +++ 2026-03-02 21:15:50 -03:00
luis 354fb4b154 66198 2026-03-02 20:42:53 -03:00
luis fa21740681 merge latest 2026-03-02 20:42:11 -03:00
luis 45430324fb merge housing 2026-03-02 20:34:40 -03:00
luis 140c043c8c Housing: Add tutorial flags, entry hall room, MeshObject EntryID and misc fixes 2026-03-02 20:31:24 -03:00
luis 771e03fa9c Housing: Implement Phase 7 opcode handlers for 27 CMSG opcodes 2026-03-02 20:23:34 -03:00
luis d564b75509 Housing: Fix neighborhood faction display and plot purchase issues 2026-03-02 20:00:36 -03:00
luis 117fdb7490 AreaTrigger: Fix null template crash in HandleUnitEnter/Exit 2026-03-02 19:56:23 -03:00
luis 2d28465873 Housing: Fix DB2 struct field ordering for ExteriorComponent entries 2026-03-02 19:54:12 -03:00
luis 9ba9dfd718 Housing: Fix null string crash in diagnostic dump functions
DumpExteriorComponentDiagnostics and DumpRoomComponentTextureDiagnostics
passed Name[locale] directly to fmt without SafeStr() guard, causing
ACCESS_VIOLATION when LocalizedString data is null.
2026-03-02 19:49:44 -03:00
luis 884d9b585a fix crash and db2 load 2026-03-01 08:45:42 -03:00
luis 60fe9f18aa typo 2026-02-28 19:32:41 -03:00
luis 4323d61765 Housing: Visual respawning, room updates, collection notifications, and decor refunds
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
2026-02-28 19:30:49 -03:00
luis 8813046b06 new tables 2026-02-28 19:10:33 -03:00
luis 2724d62d91 Housing: Data-driven DB2 exterior houses, room textures, and indexed lookups
Replace hardcoded values across the housing system with DB2-driven data:

Phase 1 - Quick wins:
- Interior map origin from NeighborhoodMap DB2 instead of hardcoded (-1000,-1000,0.1)
- O(1) RoomComponentOption lookup via composite-key index (was O(n) per call)
- Dynamic plot count in house finder from DB2 PlotCount
- Warnings when RoomWmoData geobox falls back to defaults
- Base room entry from DB2 IsBaseRoom flag instead of hardcoded 18

Phase 2 - Data-driven exterior houses:
- ExteriorComponent diagnostic dump at startup (stores, hooks, exit points)
- 5 ExteriorComponent indexes for hook/group/exit point lookups
- Recursive SpawnExtCompTree() walks DB2 component-hook-child tree
- SpawnFullHouseMeshObjects tries data-driven first, falls back to hardcoded
- Door offset from ExteriorComponentExitPoint DB2 instead of hardcoded 5.5f

Phase 3 - Room system improvements:
- Room grid spacing changed to sniff-verified 15yd (was 24yd)
- RoomComponentTexture + RoomComponentOptionTexture DB2 infrastructure
  (structs, load info, stores, hotfix selectors, prepared statements)
- 3-tier texture resolution: per-option DB2, per-type DB2, hardcoded fallback
- Diagnostic dumps for texture DB2 data verification
2026-02-28 19:09:02 -03:00
luis 9edbba56a3 Housing: Populate RoomComponentOption DB2 and fix interior wall models 2026-02-28 18:53:52 -03:00
luis 224b62a1f8 Housing: Data-driven interior rooms, decor persistence, and room type fix
- Rewrite SpawnRoomMeshObjects to iterate ALL components per room from DB2
  data, each getting InitHousingRoomComponentData with proper geobox
- Add faction-aware theme selection via GetFactionDefaultThemeID (Alliance=6,
  Horde=2) and FindRoomComponentOption per-component lookup
- Fix GetDefaultVisualRoomEntry to deterministically pick lowest-ID room
  (Room 1 = Square Small) instead of non-deterministic unordered_map pick
- Add runtime migration in LoadFromDB to replace wrong visual room entry
  (e.g., Octagon 9 → Square 1) on next login
- Fix interior decor not visible: PLACE/MOVE/REMOVE handlers now support
  HouseInteriorMap via SpawnSingleInteriorDecor and UpdateDecorPosition
- SpawnInteriorDecor runs on every interior entry (not gated by
  _roomsSpawned), with duplicate-spawn prevention
- Fix room GUID using subType=2 (was 0 which returned ObjectGuid::Empty)
- Fix DB2 OffsetRot degrees-to-radians conversion for component quaternions
- Teleport player to visual room center on interior entry
- Add MeshObject::InitHousingDecorData, InitHousingRoomData,
  InitHousingRoomComponentData, InitHousingFixtureData for entity fragments
- Add SpawnRoomForPlot to HousingMap for exterior room entities with geobox
- Add SQL migrations for base room and visual room auto-placement
- Enhanced diagnostic logging for exterior decor spawn success/failure
2026-02-28 18:50:58 -03:00
luis 5555066646 Zones 2026-02-27 22:46:41 -03:00
luis a0ddb2c9ae Uldaman Legacy Of Tyr 2026-02-27 22:41:56 -03:00
luis 874efbdb32 The Nokhud Offensive 2026-02-27 22:36:41 -03:00
luis 6148b6e450 Neltharus 2026-02-27 22:30:18 -03:00
luis 12f4ab96c3 Halls Of Infusion 2026-02-27 22:25:55 -03:00
luis 84e69da02c merge 2026-02-27 22:22:35 -03:00
luis 0838a21a59 Amirdrassil 2026-02-27 22:17:41 -03:00
luis 77002ca1ab brackenhide full 2026-02-27 22:14:13 -03:00
luis 97fefa3340 Vault of the Inarnates 2026-02-27 21:49:51 -03:00
luis d14efc7023 merge dungeon and fix warnings 2026-02-27 21:45:52 -03:00
luis 7b6a678e61 Ruby life pools 2026-02-27 21:40:06 -03:00
luis d4469ef442 azure vault 2026-02-27 21:31:11 -03:00
luis 6ebdb785c9 Full aberrus 2026-02-27 21:26:20 -03:00
luis 7a6ab1a3d5 66192 2026-02-27 20:54:15 -03:00
luis d7a5e52d71 Garrison: Fix 9 discrepancies found via WoD sniff analysis (12.0.1.66102)
P0: Fix mission rewards double-write in GetGarrisonInfoResult — inline
    Encounters/Rewards/OvermaxRewards are now cleared in mission structs
    sent via GarrisonInfo; rewards go only in the garrison-level parallel
    arrays, preventing client packet desync.

P1: Populate FollowerSoftCaps with 5 entries matching retail sniff data.
    Implement SMSG_GARRISON_MISSION_START_CONDITION_UPDATE packet and send
    it after GetGarrisonInfoResult. Update CMSG_GARRISON_START_MISSION
    Read() for 12.0.1 per-follower struct format (BoardIndex/Health/
    HasFollowerEntry), remove obsolete MissionBonusAbilityIDs.

P2: Implement SMSG_GARRISON_FOLLOWER_CHANGED_QUALITY packet, used by
    SetFollowerQuality. Send blueprint data for all garrison types.
    Read GarrTypeID in CMSG_GARRISON_CHECK_UPGRADEABLE and look up the
    correct garrison by type.

P3: Add FOLLOWER_TYPE_DELVES (22) enum value. Fix building removal
    packet ordering — GarrisonBuildingRemoved now sent before
    ClearBuildingInfo (PlotRemoved) when replacing a different type.
2026-02-27 20:31:25 -03:00
luis 13e2635433 Pet Battles: Fix capture flow in multi-pet battles and buff/stat modifier system
Battle no longer gets stuck after capturing a wild pet when other wild
pets are still alive. The captured pet is marked and the wild team
auto-swaps to the next alive pet, continuing the fight.

Buff/debuff auras are now visible and mechanically applied:
- Add effectCategory 8 handler for self-buff auras (AURA_APPLY to caster)
- RecalculateEffectiveStats reads state modifiers and BUFF/DEBUFF auras
- CalculateAbilityDamage integrates damage dealt/taken state modifiers
- CalculateAbilityHealing integrates healing dealt state modifiers
- Add STATE_MOD_DAMAGE_TAKEN, SPEED, HEALING_DEALT/TAKEN to BattlePetState
2026-02-27 20:27:16 -03:00
luis 054f2e2135 full bpet 2026-02-27 20:22:52 -03:00
luis 564599b32d Pet Battles: Fix slot duplication, aura persistence, trap anim, achievement name
Fix four bugs reported by tester:

- Slot swap duplication: HandleBattlePetSetBattleSlot now properly swaps
  pets between source and target slots instead of only assigning the target,
  which left the pet duplicated in the old slot

- Aura persistence: Populate petInfo.Auras in BuildPetBattlePlayerUpdate
  so the client knows which auras are active on each pet. Fix aura round
  effect params to send AuraInstanceID + AbilityID (matching wire format)
  and look up real RoundsRemaining/CurrentRound instead of hardcoding 0

- Trap animation: Resolve the actual BattlePetAbilityEffect.ID from the
  DB2 chain for ability 427 instead of using the raw ability ID, so the
  client can look up the correct visual spell for the capture animation

- Achievement name: Change hotfix_data status from 3 (insert) to 1 (valid)
  for achievement 7433 which already exists in the retail client DB2;
  status=3 corrupted the client-side entry causing empty achievement links
2026-02-27 20:22:09 -03:00
luis 057b22a0f6 Housing: Fix decor persistence by reconstructing full Housing GUID on load
LoadFromDB was creating decor GUIDs with subType=0 (Housing-0-0-0-counter)
but the client uses subType=1 (Housing-1-realmId-entryId-counter). The GUID
mismatch caused the Account entity storage to become stale after relog,
making all placed decor appear gone. Reconstruct the full GUID using the
decorEntryId from the same DB row.
2026-02-27 20:20:50 -03:00
luis 4d37fa350c Housing/Decor: Fix PLACE failing when client skips REDEEM_DEFERRED
The client sends CMSG_HOUSING_DECOR_PLACE directly (without a preceding
REDEEM_DEFERRED) when items are already in storage from the initial
storage response. Extract decorEntryId from the Housing GUID (subType=1,
arg2 in bits [31:0]) instead of requiring a pending placement entry.
2026-02-27 20:20:13 -03:00
luis a9cf0b2649 Housing: Fix OutsidePlotBounds by spawning Room entities with Geobox
The client uses MeshObject Geobox bounds (not AreaTrigger shape) for its
OutsidePlotBounds collision check during decor placement. Spawn a Room
entity (FHousingRoom_C) and Room Component MeshObject
(FHousingRoomComponentMesh_C + Geobox) per owned plot using DB2 lookups
for faction-correct values.

Also fixes RequestStorage response (Flags=0x80, Account entity update),
HouseGUID generation (BNetAccountID), and AT PeriodModifier.Field_4.
2026-02-27 20:19:24 -03:00
luis 03c7107cc3 db errors 2026-02-27 03:29:53 -03:00
luis e44463a0c2 Housing: Fix RequestStorage response and verify all wire formats against sniff
Sniff-verified all housing decor SMSG wire formats against 3 PKT captures
(108k+ packets). All formats confirmed correct except RequestStorageResponse
which sent the player's BNet account GUID instead of empty.

Changes:
- RequestStorageResponse: Send ObjectGuid::Empty for BNetAccountGuid (sniff
  shows 00 00 = empty packed GUID in all cases)
- RequestStorage handler: Now also sends GetPlayerHousesInfoResponse after
  StorageRsp (sniff shows both 0x510006 + 0x54000B sent together)
- Fixed in HousingHandler.cpp (3 places) and NeighborhoodHandler.cpp (1 place)
- Added new SQL files for neighborhood spawns and housing templates
- Added HouseInteriorMap source files
2026-02-27 03:21:32 -03:00
luis 7fd688721f debug log 2026-02-27 02:15:32 -03:00
luis b25353548a Core: Updated allowed build to 12.0.1.66102 2026-02-27 00:31:21 -03:00
luis 6a34442a6e new table 2026-02-27 00:15:35 -03:00
luis 4cddef819d debug log 2026-02-27 00:13:55 -03:00
luis 530f5f61b4 fix load 2026-02-27 00:11:38 -03:00
luis a459654d5f Full db2 fix 2026-02-27 00:06:13 -03:00
luis 5579030738 fix db2 and hotfix todo GarrType.db2 2026-02-26 23:52:15 -03:00
luis 317c14278c fix all char db errors now i will do hotfixes 2026-02-26 23:27:07 -03:00
luis 2cdf4ecbb3 Fix character_garrison_talents 2026-02-26 23:19:00 -03:00
luis e9b62ac438 bpet fix 2026-02-26 23:15:19 -03:00
luis 16d10ae028 Fix build untill housing get finished 2026-02-26 23:14:43 -03:00
luis a0000aad49 Pet Battles: Fix trap animation, captured pet health, and add Newbie achievement 2026-02-26 23:11:07 -03:00
luis a02a04b4cd Pet Battles: Fix wild team size, capture mechanics, and battle end flow 2026-02-26 23:11:07 -03:00
luis bc124a3b68 feat(warband): Phase 8 - Armor-type agnostic transmog 2026-02-25 22:10:31 -03:00
luis bcc1618159 Phase 7 - Account-wide achievements
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.
2026-02-25 22:08:51 -03:00
luis f3fcbd4a15 feat(warband): alt XP bonus for leveling characters 2026-02-25 21:02:37 -03:00
luis 69903f1a33 feat(warband): account-wide flight path sharing
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
2026-02-25 20:59:28 -03:00
luis 864cd83195 Currency: Implement warband currency transfer handlers
Add full handler implementations in CurrencyHandler.cpp:
- HandleRequestCurrencyDataForAccountCharacters: queries all same-account
  characters' transferable currencies and sends to client
- HandleTransferCurrencyFromAccountCharacter: validates source character
  ownership, currency transferability, balance checks, applies transfer
  percentage, updates source via DB and destination via ModifyCurrency,
  logs transfer to warband_currency_transfer_log
- HandleGetCharacterCurrencyTransferLog: queries and returns recent
  transfer history for the bnet account
2026-02-25 20:54:52 -03:00
luis 9087650fe4 Currency: Add schema, packets, opcodes and feature flag for warband currency transfer
Add infrastructure for account-wide currency transfer system:
- warband_currency_transfer_log table and prepared statements
- AccountCurrencyTransferResult enum in SharedDefines.h
- IsAccountWide/IsAccountTransferable helpers on CurrencyTypesEntry
- Remove NYI from CurrencyTypesFlags::AccountWide
- 6 packet classes (3 CMSG + 3 SMSG) in MiscPackets
- Wire 6 opcodes to real handlers
- Enable IsAccountCurrencyTransferEnabled feature flag
- Stub CurrencyHandler.cpp with placeholder implementations
2026-02-25 20:52:06 -03:00
luis b9f324b0e9 Implement account-wide reputation load/save in ReputationMgr
Add ReputationMgr methods for warband-wide reputation sharing:
- LoadAccountWideFromDB: merges account highest standings into character
  reputation on login, syncing both regular and renown factions
- SaveAccountWideToDB: upserts warband_reputation when character's
  standing exceeds the stored account-wide maximum
- Login query for account reputation via LoginQueryHolder
- Renown factions compare level first, then standing as tiebreaker
- Regular factions compare standing delta directly
2026-02-25 19:54:02 -03:00
luis 6e05280d1a Add warband reputation schema, statements, and faction config
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)
2026-02-25 19:34:08 -03:00
luis fcac505c8a Pet Battles: Fix pet level/stats/XP persistence and capture saving
Fix several bugs causing battle pet progression to not persist:

- Reorder logout cleanup so battle resolution (FinishBattle + XP award)
  happens before journal lock release, ensuring XP is applied on disconnect
- Add captured wild pets to player journal via AddPet() on successful trap
- Keep slot pet data in sync with _pets map after level-up, health sync,
  quality change, and healing to fix stale criteria/display data
- Change mid-level-up GameTable miss from hard return to break so partial
  XP is still saved
- Add diagnostic logging (battlepet category) for save/load/XP operations
2026-02-25 19:26:10 -03:00
luis 6e7843831b update still not build 2026-02-25 19:17:45 -03:00
luis 75265487e9 Housing update part 1 at night i fix build 2026-02-25 13:30:00 -03:00
luis e2c633975e AddSC_npc_garrison_bodyguard 2026-02-25 13:10:24 -03:00
luis 20e77f6117 Garrison: Complete 100% Blizzlike implementation
Implements all remaining garrison subsystems for full Blizzlike coverage:

- 17 garrison spell effects (upgrade, add mission, follower XP/quality/abilities,
  building construction, shipments, talents, item level upgrades)
- Building swap between same-type plots
- Follower item level upgrade system with GarrItemLevelUpgradeData support
- Building-specific mechanics: Barracks extra follower slots (+5/+10),
  Salvage Yard crate drops from missions, Inn/Tavern treasure missions
- Bodyguard companion system (follows player in Draenor, assists in combat)
- Party garrison (visit group leader's garrison)
- Invasion wave system with 3 invasion types and GM commands
- Stub handler completions (monument revert, pet name, talent unlocks)
- Targeted event packets replacing heavy GetGarrisonInfoResult sends
- Auto-combat simulator for adventure missions
2026-02-24 22:38:52 -03:00
luis 3849b795db Initial char garrisons dont touch is work in progress will finish tomorrow 2026-02-24 21:23:48 -03:00
luis 49b0d7a5ec Garrison: Phase 1 - Complete WoD core systems and multi-garrison framework
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.
2026-02-24 21:19:27 -03:00
luis ccd87a786a Pet Battles: Fix battle end rewards and flow ordering from sniff comparison
Fix 5 data correctness issues and 1 flow ordering issue found by comparing
against a retail 12.0 NPC trainer battle sniff:

- AwardedXP: set true for all pets (both teams) via CanAwardXP(), not just
  the winner team
- NpcCreatureID: use trainer NPC entry (via GetNpcTrainerGUID) instead of
  pet species CreatureID
- SeenAction: set false for all pets (matches sniff)
- Remove HealBattlePetsPct(50) auto-heal — sniff shows dead pets stay at 0
- Split end flow: FinalRound packet sent immediately, but Finished packet,
  health sync, and journal update deferred until client sends FinalNotify
  (player must click OK on results screen)
- Add logout cleanup in WorldSession::LogoutPlayer for disconnect safety

CompleteBattle() centralizes the FINISHED transition, Finished packet,
health sync, and journal send — used by FinalNotify handler, forfeit
handler, and logout cleanup.
2026-02-24 21:04:57 -03:00
luis 38d39582fa db playerhousing data 2026-02-24 20:40:30 -03:00
luis ee426ecb0a buildfix 2026-02-24 20:28:36 -03:00
luis 6975a848c5 Housing: Extract real NeighborhoodPlot DB2 data, fix neighborhood naming 2026-02-24 20:12:28 -03:00
luis bd132e93f2 Housing: Add periodic neighborhood expansion check in World::Update 2026-02-24 20:09:11 -03:00
luis d5bb0004b2 Housing: Sniff cross-reference fixes, complete MIRROR_VARS, neighborhood naming 2026-02-24 20:07:28 -03:00
luis c13274e770 Housing: Add missing MIRROR_VARS float game rules, note version caveats 2026-02-24 19:59:59 -03:00
luis edd9012430 Housing: Fix MeshObject sync on reposition/type change, add door interior entry 2026-02-24 19:58:11 -03:00
luis 08408e8727 Housing: Add per-player initiative contribution tracking and fix DB2 metadata 2026-02-24 19:53:13 -03:00
luis 1aac2fe903 Add new housing tables part 1 2026-02-24 19:47:01 -03:00
luis 1583ffb31d Pet Battles: Implement quest/achievement criteria for wins, losses, and captures 2026-02-24 13:46:43 -03:00
luis 12dbb360d9 Pet Battles: Fix EffectType field and pet swap communication 2026-02-24 13:43:08 -03:00
luis 65196b1b28 Pet Battles: Fix wire format from IDA analysis, improve battle flow and stats 2026-02-24 13:41:26 -03:00