Sniff-decoded from C:\sniff\housing_stuff\{alliance,horde}_housing\
dump_12.0.5.67186_2026-04-28_*.pkt: when a player clicks a housing
door GO the 12.0.5 retail client emits CMSG_CAST_SPELL with
SpellID 1,271,876 (uint32 at body offset 0x15) targeting the door.
Both faction sniffs are byte-identical in the spell-id field; only the
target PackedGUID at offset 0x3D differs. CMSG_GAME_OBJ_REPORT_USE that
follows is criteria-tracking, NOT the trigger — the cast is.
The server side had four stacked gaps blocking this flow:
A. SpellID 1271876 was missing from spell_name / spell_misc / spell_effect.
Cast validation rejected it as unknown. Added a minimal row set with
SPELL_EFFECT_DUMMY targeting TARGET_GAMEOBJECT_TARGET so the cast
accepts and the SpellScript hook fires.
B. gameobject_template.Data10 (goober.spell) on the housing front-door
templates was either zero (575017, 602702) or pointing at the older
12.0.1 spell 1234192 (586576, 602705) / 1234193 (587318). Neither
matches what the 12.0.5 retail client casts, so the goober mechanism
wouldn't have routed correctly even if the spell existed. All five
entries now point at 1271876.
C. New SpellScript spell_housing_door_open, registered against 1271876
via spell_script_names, intercepts the cast and calls
GameObject::Use() on the spell target. That routes to the existing
go_housing_door::OnGossipHello which already handles edit-mode
gating, visitor permissions, and the interior round trip.
D. The exterior_component SQL hotfix table was on an older WoW build's
schema (FileDataID/ConditionID/HookID/Slot/SortOrder/...) that
doesn't line up with DB2LoadInfo's 12.0.5 layout
(Name + 3 floats + ID + Size + ParentComponentID + ModelFileDataID +
Flags + Field_7 + Type + Field_9 + GameObjectID + Field_11 +
ItemID + HouseExteriorWmoDataID). Without a GameObjectID column the
hotfix loader was filling that field with zeros, so HousingMap::
SpawnExtCompTree never spawned door GOs in the first place. Schema
rebuilt to match the 14-field 12.0.5 record (LayoutHash 0x53EA0925).
Replaced 17 synthetic entries with all 587 retail entries from wago.tools.
Fixed the fundamental DB2 linkage: RoomComponentOption links to RoomComponent
via MeshStyleFilterID (not RoomComponentID as we assumed). This means one
option entry covers all components sharing the same MeshStyleFilterID.
Also fixed Alliance default theme from 6 (Folk Medium sub-theme, 0 options)
to 1 (Folk base theme, full option coverage). Fallback chain now uses
Generic(3) and Folk(1) instead of non-existent themes 8/6.
5 base themes now work: Folk(1), Rugged(2), Generic(3), Bel'ameth(4),
Silvermoon(5). Sub-themes (6-28) are texture/dye variants only.
Rename misnamed SQL columns to match WoWDBDefs 12.0:
- Aura → BattlePetEffectPropertiesID
- BattlePetEffectPropertiesID → AuraBattlePetAbilityID
- VisualID → BattlePetVisualID
Add migration script for existing databases, update SELECT query.
Also add DisplayID=0 repair in LoadPlayerTeam and a log warning
in SelectPetDisplay when creature_template is missing.
Fix Housing/4 NeighborhoodMirrorEntity GUID using battlenetAccountId instead
of the neighborhood's actual DB low GUID. The client matches entity GUIDs
against NeighborhoodGUID references in JamCliHouse packets — a mismatch
causes the client to fail to associate plot data with the correct entity.
Added ResetGuid() to correct the GUID in Player::LoadFromDB before the
entity is added to the world.
Fix initiative SMSG_GET_PLAYER_INITIATIVE_INFO_RESULT: duration now converts
DB2 days to seconds (×86400), progress scales from 0.0–1.0 to 0–1000 wire
format, and the packet is sent proactively on service status check so the
client's isLoaded flag gets set.
Revert incorrect HasError replacements on 14+ non-initiative response packets
back to their proper Result field assignments. Remove fake initiative SQL
hotfix data that overwrote real DB2 records.
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.