Commit Graph
100 Commits
Author SHA1 Message Date
luis 8515de23e0 more midnight quests 2026-04-17 08:35:23 -03:00
luis 097f9cf02f Fix scripts 2026-04-17 08:29:13 -03:00
luis 3e3b37449d Init reworks 2026-04-17 08:00:50 -03:00
luis fb325c07d2 readd damage event map 2026-04-16 21:23:06 -03:00
luis d60b800eb3 new taskscheduler update 2026-04-15 19:46:41 -03:00
luis 5780f65b5c Scripts/Spells: Fix priest talent Translucent Image 2026-04-15 19:25:40 -03:00
luis c985bf1c55 DB/Harandar: Implement Quest: "Initiation Day" 2026-04-15 19:23:04 -03:00
luis 5250eb98ac DB/Harandar: Added some more spawns to Haranir allied race hub 2026-04-15 19:20:00 -03:00
luis 00262413e2 DB/Harandar: Added createobject2 spawns for phase 26622 2026-04-15 13:53:55 -03:00
luis 19ac294051 Core/Misc: TaskScheduler internal improvements
* Make TaskContext not copyable - this allowed removing shared `_consumed` state, getting rid of memory allocation per task execution
* Use std::make_shared
* Remove unnceccessary memory alloc/dealloc in TaskContext::Repeat
* Remove std::function wrapping in every TaskContext function
2026-04-15 13:21:24 -03:00
luis 002e65fc28 eco dome aldani 2026-04-15 08:50:48 -03:00
luis 037f9b7231 clean dbs 2026-04-14 08:27:29 -03:00
luis b2131c5f90 CLEAN start we need push old fixes testing one by one please not commit changes if u dont test in game 2026-04-14 08:25:37 -03:00
luis 6138f8bc16 revert all housing still crash 2026-04-11 17:57:09 -03:00
luis 9de27af7a7 ++ 2026-04-11 17:37:53 -03:00
luis c78c3fec82 ++ 2026-04-11 17:31:58 -03:00
luis 3bd6b694f9 remove housing 2026-04-11 17:31:09 -03:00
luis 5b06fb154a ++ 2026-04-11 17:19:50 -03:00
luis 68e3e5be8b remove housing 2026-04-11 17:11:58 -03:00
luis 642f59cbd6 try fix crash 2026-04-11 16:58:46 -03:00
luis 9d5922fb44 ++ 2026-04-11 16:56:36 -03:00
luis aa07e25e7d still crash 2026-04-11 15:09:34 -03:00
luis 8ae2db9b45 +++ 2026-04-11 14:10:29 -03:00
luis e874aaefbe ++ 2026-04-11 12:39:21 -03:00
luis 5e2c5a929c update still crash 2026-04-11 12:30:26 -03:00
luis e8c22f25e7 housing 2026-04-10 19:43:41 -03:00
luis 2cb3cd297a disable housing opcodes 2026-04-10 13:36:29 -03:00
luis 02099869af remove more housing 2026-04-10 13:29:46 -03:00
luis b5b8f8ce4e Darnell 2026-04-10 08:41:01 -03:00
luis 776d9b64f6 FIX BUILD 2026-04-10 08:39:54 -03:00
luis 4cefdb9548 5 errors left 2026-04-10 08:29:28 -03:00
luis ab0601b9fc comment mesh object 2026-04-10 08:25:27 -03:00
luis e3ca033ce7 ++ 2026-04-10 08:24:00 -03:00
luis d12c865fc1 build fix part 1 2026-04-10 08:06:17 -03:00
luis 41a96222e6 remove complete 2026-04-10 08:03:08 -03:00
luis 50d420f6d4 remove bad changes 2026-04-09 21:35:11 -03:00
luis b1ad20e74a sure here crash 2026-04-09 21:34:28 -03:00
luis 91645e61f1 disable entire housing but we still have crash i need help guys 2026-04-09 21:31:44 -03:00
luis b1e47f3b41 pull request approved 2026-04-09 21:31:44 -03:00
luis 0e07d0eaa1 Housing: Fix floor material + stairwell doorway + decor accessors
1. Floor material: APPLY_COMPONENT_MATERIALS now directly updates the
   specific component MeshObject's textureID instead of going through
   room-level WallpaperId (which was overwritten/reset on each change).

2. Stairwell doorway: Reverted HasStairs check — stairwell rooms connect
   horizontally through walls like any room. The doorway should open.

3. Added GetRoomComponentOptionID/GetHouseThemeID accessors to MeshObject
   for per-component texture updates without room-level state.
2026-04-09 08:01:51 -03:00
luis a1350b340a Housing: Fix stairwell placement — same floor, adjacent position
Stairwell rooms are tall rooms (geobox Z=-1 to 14) placed ADJACENT to
the source room on the SAME floor, not above it. They extend vertically
through the ceiling. Only rooms connected at the stairwell's ceiling
door should go to floor+1. Was incorrectly using FloorIndex+1.
2026-04-09 07:59:17 -03:00
luis 7357fb7fca Housing: Fix decor not selectable after relog — remove double CREATE send
Interior decor was sent TWICE at login: once by the map visibility system
(AddToMap → UpdateObjectVisibilityOnCreate) and again by the deferred
callback (manual BuildCreateUpdateBlockForPlayer). The double CREATE
corrupted the client's entity state, making decor unselectable.

Session-placed decor only got one CREATE (via AddToMap) and worked fine.

Fix: removed the manual decor CREATE from the deferred callback. The
visibility system already handles decor delivery to the player.
2026-04-09 07:57:47 -03:00
luis 14ddebca90 Housing: Fix wall material changing floor + stairwell wall destruction
1. APPLY_COMPONENT_MATERIALS handler now passes componentIDs filter to
   UpdateRoomComponentVisuals (was updating ALL components including floor).

2. Stairwell room placement no longer destroys the source room's wall
   (stairwells are vertical connections, not horizontal doorways).
2026-04-09 07:56:42 -03:00
luis 477a2e0704 Housing: Fix interior decor not selectable — auto-assign empty RoomGuid
Decor placed before the room entity system had empty RoomGuid in DB.
Without a valid AttachParentGUID (Housing/2 room entity), the client
can't select the decor for moving/removing. Now auto-assigns decor with
empty RoomGuid to the first non-base room. Also uses FloorIndex for
room Z position in decor world coordinate calculation.
2026-04-09 07:55:32 -03:00
luis 1b6013497c Housing: Fix floor customization — treat TextureID 0xFFFFFFFF as default
The CMSG sends TextureID=4294967295 (0xFFFFFFFF) to mean "reset to
default". This was stored as WallpaperId and on respawn overrode the
texture lookup (WallpaperId != 0 → use -1 as texture). The client
showed an empty Floor Material dropdown because RoomComponentTextureID=-1.

Fix: treat WallpaperId=0xFFFFFFFF as 0 (no override) in both storage
and the spawn/update texture lookups. Also cleaned up -1 values in DB.

Note: RoomComponentOptionTexture DB2 table is empty in retail — Blizzard
hasn't populated it. Textures work via RoomComponentTexture (19 entries)
which the client reads directly by component type and theme.
2026-04-09 07:54:14 -03:00
luis de2256abcc typo 2026-04-08 21:11:52 -03:00
luis 9b41344828 typo 2026-04-08 20:09:01 -03:00
luis f200691b19 fix crash 2026-04-08 20:03:33 -03:00
luis 8e587eb900 fix sql 2026-04-08 19:47:18 -03:00
luis f5f53d6f13 typo 2026-04-08 19:40:56 -03:00
luis 167383c871 Housing: Fix stairwell Z offset + dye only affects specified components
1. Stairwell Z: Used room's own Height (14.0 for stairwells) instead of
   standard floor height (7.0). Stairwells spawned at Z=14.1 instead of
   7.1. Now uses fixed FLOOR_HEIGHT=7.0 for consistent floor spacing.

2. Dye wall/floor crossover: UpdateRoomComponentVisuals applied the theme
   to ALL components. Now filters by the CMSG's RoomComponentIDs — only
   the specified components are updated. Also uses the CMSG's theme ID
   directly instead of room.ThemeId (which is room-level, not per-component).
2026-04-08 19:37:22 -03:00
luis 3253902483 Housing: Implement multi-floor interior system for staircases
Rooms now have FloorIndex (0=ground, 1+=upper floors) persisted to DB.
Room Z position is calculated from FloorIndex * RoomWmoData.Height
(typically 7 yards per floor). Stairwell rooms (HasStairs flag) are
placed on FloorIndex+1 of the source room.

Changes:
- Room struct: added FloorIndex field
- DB: added floorIndex column to character_housing_rooms
- SpawnRoomMeshObjects: Z = originZ + FloorIndex * ceilingHeight
- HousingRoomEntity: FloorIndex set from room data (was hardcoded 0)
- HandleHousingRoomAdd: stairwell rooms go to FloorIndex+1
- SELECT/INSERT/UPDATE queries updated for floorIndex column
- Client door filtering uses FloorIndex to show/hide stair connections:
  Floor 0: hides downward stairs, Floor >=100: hides upward stairs
2026-04-08 19:33:57 -03:00
luis 86fa8081cd Housing: Fix interior dye + door teleport + decor selection prep
1. Dye: Sub-themes (e.g., 20=Folk Light) had no DB2 option entries.
   Added GetBaseThemeID() to convert sub-theme→base theme for lookup.
   Entity field gets the selected sub-theme, not the base.

2. Door GO teleport: Used cached _sourcePlotIndex=0. Now reads player's
   housing data directly (GetPlotIndex, GetNeighborhoodGuid) to find
   the correct exterior plot position.

3. Decor selection: Interior decor attaches to HousingRoomEntity (Housing
   GUID) instead of a MeshObject. Selection may require further work.
2026-04-08 19:28:39 -03:00
luis 415402966a Housing: Remove aggressive room migration that overwrites user placements
LoadFromDB migration replaced any non-Room-1 visual room with Room 1,
destroying user-placed rooms (Stairwell, Hallway, etc.) and resetting
gridX/gridY to 0 — causing rooms to overlap. Users can place ANY room
type as their visual room. Migration now only adds a default Room 1 if
the house has NO non-base rooms at all (empty house).
2026-04-08 14:37:02 -03:00
luis 5064bb65b8 Housing: Fix server crash — SetOwnerGUID aborts when owner already set by SummonGameObject 2026-04-08 13:27:02 -03:00
luis 9f7e181af9 Housing: Fix decor placement — send PLACE_RESPONSE before MeshObject CREATE
The client's placement state machine needs SMSG_HOUSING_DECOR_PLACE_RESPONSE
to finalize the current placement before receiving the UPDATE_OBJECT with the
new MeshObject. Wrong order (CREATE before RESPONSE) corrupted the state on
repeated placements, causing the preview to snap to camera ("flies to camera").

Packet order now: 1) PLACE_RESPONSE, 2) MeshObject CREATE, 3) Account update.
2026-04-08 13:25:48 -03:00
luis 770c8a2ead Housing: Fix interior door GO — use correct entry 575017 + displayId 113554
The interior exit door used entry 586576 (exterior door, displayId=116973)
which is invisible inside the interior. Retail uses entry 575017 with
displayId=113554 (standalone interior door model). Created GO template
with correct display, flags=0x40000, owner=HouseGUID.
2026-04-08 13:24:29 -03:00
luis a1297ae809 Housing: Fix interior door GO + room rotation in-place update
1. Interior door GO: The go_housing_door script only handled exterior
   (HousingMap) clicks. When clicked from interior (HouseInteriorMap),
   dynamic_cast failed → door did nothing. Now detects interior map and
   teleports player back to the neighborhood at the plot position.

2. Room rotation: Updates HousingRoomEntity orientation in-place via
   SetMirroredPosition() UPDATE_OBJECT instead of RefreshInteriorRoomVisuals.
2026-04-08 13:22:49 -03:00
luis 43c601c8ae Housing: Fix room rotation — in-place HousingRoomEntity orientation update
Room rotation now updates the HousingRoomEntity's FMirroredPositionData_C
orientation via SetMirroredPosition() instead of RefreshInteriorRoomVisuals
(which crashes). The client receives an UPDATE_OBJECT with the new rotation
quaternion and applies it visually without destroy+create.

Also added GetOriginX/Y/Z accessors to HouseInteriorMap.
2026-04-08 13:21:47 -03:00
luis 79b474834d Housing: Guard AddToWorld/RemoveFromWorld for housing session entities
HousingPlayerHouseEntity and HousingNeighborhoodMirrorEntity are
unique_ptr on WorldSession. Dereferencing them without null checks
crashes on fresh characters or edge cases where the session constructor
failed to initialize them. Added HasHousing*Entity() checks before
AddToWorld/RemoveFromWorld in Player::AddToWorld/RemoveFromWorld.
2026-04-08 13:18:33 -03:00
luis d568a790be Housing: Fix decor placement crash — attach to Room entity not MeshObject
Interior decor used the first MeshObject GUID from _roomMeshObjects as
AttachParentGUID. After removing the root room MeshObject, this pointed
to a component MeshObject which the client couldn't resolve as a valid
parent (NULL+0x08). Sniff-verified: retail decor attaches to the
HousingRoomEntity (Housing/2 GUID), not a MeshObject.
2026-04-08 08:49:02 -03:00
luis 452f9fc846 Housing: Replace source wall with doorway when adding a room
When a room is added at a door pin, the source room's wall at that
connection was still showing as a solid Cosmetic wall (spawned before
the connection existed). Now ReplaceWallWithDoorway() destroys the
Cosmetic MeshObject and spawns DoorwayWall+Doorway MeshObjects in its
place, creating a visible passage between the rooms immediately.
2026-04-08 08:47:45 -03:00
luis d3887167b7 Housing: Fix room overlap — find wall offset without ConnectionType filter
Stairwell walls have ConnectionType=0, so the door offset lookup found no
opposite wall and defaulted to 0 → room placed at door position instead of
at the correct distance. Now searches for ANY wall in the opposite direction
(the furthest boundary) regardless of ConnectionType.

Also removed RefreshInteriorRoomVisuals from Rotate/Move/DoorType/CeilingType
handlers to prevent same-GUID DESTROY+CREATE crash.
2026-04-08 08:45:58 -03:00
luis 9ba677b2e0 Housing: Remove RefreshInteriorRoomVisuals from all handlers
RefreshInteriorRoomVisuals (destroy+create ALL rooms) crashes the client
with same-GUID DESTROY+CREATE in one packet. Removed from Rotate, Move,
SetDoorType, SetCeilingType handlers. These operations change metadata
only — the client handles visual updates from the response packet.

TODO: implement proper in-place UPDATE_OBJECT for room entity changes
(rotation, door type, ceiling type) instead of full visual refresh.
2026-04-08 08:44:21 -03:00
luis 6a2dd80d1e Housing: Fix door connections for yard-based room positions
Door adjacency checks used gridKey(GridX+1) which was correct for grid
indices but wrong for yard offsets. Entry at GridX=0 and Room1 at
GridX=15 are 15 yards apart, not 1 grid cell. Now uses findNeighborAtDoor
which searches all rooms in the door's facing direction instead of
looking for exact +1/-1 grid neighbors.
2026-04-08 08:42:22 -03:00
luis 996d980539 Housing: Fix room overlap — compute position from door offsets
Grid spacing was fixed at 15 yards but Square Room (Small) is 24 yards
wide (walls at ±12). Rooms now compute exact yard offsets from connecting
door positions: newCenter = sourceCenter + sourceDoorOffset - newDoorOffset.

Entry(door+3) → Room1(door-12): spacing = 15 yards (matches sniff)
Room1(door+12) → Room1(door-12): spacing = 24 yards (no overlap)

GridX/GridY now store yard offsets (not grid cell indices). Updated DB
migration, LoadFromDB backward compat, and player teleport positions.
2026-04-08 08:40:08 -03:00
luis 512b847ee9 Housing: In-place door connection update after room add
Instead of despawning/recreating all HousingRoomEntities (which crashes
due to same-GUID DESTROY+CREATE), update the adjacent room's door
AttachedRoomGUID via UpdateDoorConnection() which modifies the existing
entity's update field and sends an UPDATE_OBJECT delta. This lets the
client's CanRemove() immediately see the correct connection count.
2026-04-08 08:37:34 -03:00
luis 6590389eca Housing: Fix room add crash — don't despawn all HousingRoomEntities
Despawning and recreating all HousingRoomEntities caused same-GUID
DESTROY+CREATE in one packet batch (NULL+0x08 crash). Now only the
new room's entities are spawned incrementally. Existing rooms' door
connections aren't updated live but are correct after relog.
2026-04-08 08:35:39 -03:00
luis bd25ecebdb Housing: Fix LoadFromDB field indices after gridX/gridY column addition
DoorTypeId/DoorSlot/CeilingTypeId/CeilingSlot were reading from wrong
field indices (8-11 instead of 10-13) after gridX/gridY shifted columns
by 2. Fields 8,9 were also used twice (WallpaperId AND DoorTypeId).
SaveToDB then persisted the corrupt data, overwriting DB fixes.
2026-04-08 08:34:47 -03:00
luis 772ef46f1c Housing: Add SQL migration for gridX/gridY columns
Testers need to run sql/housing/characters_housing_grid_migration.sql
on their characters database. Adds gridX/gridY columns and migrates
existing rooms from linear SlotIndex to 2D grid (gridX=slotIndex).
2026-04-08 08:33:19 -03:00
luis 2834428547 Housing: Persist GridX/GridY to database + full 2D grid support
Added gridX/gridY columns to character_housing_rooms. Room positions
are now persisted as 2D grid coordinates. LoadFromDB reads grid coords
from DB. SaveToDB/PersistRoomToDB writes them. Door adjacency uses all
4 directions (+X/-X/+Y/-Y). Migrated existing data: gridX=slotIndex.

Also: refresh ALL HousingRoomEntities after room add (updates door
connections on adjacent rooms so CanRemove works correctly).
2026-04-08 08:31:58 -03:00
luis a82fd592ca Housing: Fix Entry overlapping Room — set GridX from SlotIndex on DB load
Rooms loaded from DB had GridX=0,GridY=0 (default) because grid coords
aren't persisted yet. Both Entry (slot 0) and Room 1 (slot 1) ended up
at the same world position. Fix: GridX=SlotIndex for backward compat.
2026-04-08 08:29:07 -03:00
luis 6cc5978752 Housing: Refresh all room entities after adding a room
After adding a room, adjacent rooms' HousingRoomEntity door connections
were stale — the old room's AttachedRoomGUID wasn't updated to reference
the new neighbor. The client's CanRemove() saw stale data and blocked
removal ("more than one connected door"). Fix: despawn ALL
HousingRoomEntities and recreate them with fresh door connection data.
MeshObjects are untouched (only room entities refresh).
2026-04-08 08:28:23 -03:00
luis eeadeab434 Housing: 2D grid room placement based on door attachment point
Rooms now use GridX/GridY coordinates instead of linear SlotIndex for
positioning. When a player clicks a door pin to attach a room, the
TargetDoorComponentID identifies the source door. The server finds
the door's offset direction (+X/-X/+Y/-Y) and places the new room
at the adjacent grid cell.

Entry room at (0,0), visual room at (1,0). New rooms placed based on
which door was clicked. Door adjacency checks also use 2D grid for
resolving AttachedRoomGUID connections.
2026-04-08 08:27:21 -03:00
luis 4a7318257f Housing: Spawn interior exit door GO in Entry room
Sniff-verified: retail spawns a door GameObject (type 10 TRANSPORT) in the
Entry room for exiting back to the neighborhood. Alliance uses entry 575017,
Horde 587318 — neither exists in our GO template DB. Using entry 586576
(generic "Front Door", type 10, displayId 116973) at sniff-verified position
(-1002.52, -1000, 0.12) in the Entry room. Spawned in the deferred callback
after AT creation, matching retail packet ordering.
2026-04-08 08:22:18 -03:00
luis 05c372e11d Housing: Multi-MeshObject per component + doorway support
Alliance sniff shows corner walls spawn TWO MeshObjects (SubType=0 +
SubType=1 visual layers) and doorway comp 26 spawns TWO MeshObjects
(DoorwayWall Field_20=1 + Doorway Field_20=2).

Changes:
- FindAllRoomComponentOptions() returns all options per (MSFID, theme)
- Component loop spawns multiple MeshObjects per option entry
- Doorway-capable walls with connected rooms use Type=1+2 options
  (DoorwayWall frame + Doorway opening) instead of Type=0 (solid wall)
- Unconnected door walls use Type=0 (Cosmetic, solid wall)
- Field_20 now passed as parameter to InitHousingRoomComponentData
  (0=Cosmetic, 1=DoorwayWall, 2=Doorway — sniff-verified)
2026-04-08 08:20:56 -03:00
luis 92869cb277 Housing: Fix inside-out walls — negate Z rotation from DB2 OffsetRot
Alliance sniff shows the Z rotation quaternion is OPPOSITE to what the
DB2 OffsetRot value suggests. DB2 comp 27 has RotZ=+90° but the sniff
entity has quat Z=-0.7071 (=-90°). Similarly comp 28: DB2 RotZ=-90°
but sniff quat Z=+0.7071 (=+90°). The left and right walls were
rendering inside-out (showing their back/wooden panel side).
2026-04-08 08:12:47 -03:00
luis 9098eb2d03 DB/TheDreamrift: Added init. spawns 2026-04-07 21:09:59 -03:00
luis d88939f361 add diagnostic 2026-04-07 20:13:06 -03:00
luis 427d59877f re order 2026-04-07 19:52:46 -03:00
luis 64670d23bb ++ 2026-04-07 19:49:01 -03:00
luis b9f4dc5822 remove wrong includes 2026-04-07 19:45:54 -03:00
luis d09b1e8bc3 rework 2026-04-07 19:43:07 -03:00
luis 8f1c3dbcec remove bad packet 2026-04-07 14:09:37 -03:00
luis 860ade77ef remove wrong handlers 2026-04-07 13:54:20 -03:00
luis 8296f73fd8 remove bad opcodes 2026-04-07 13:47:32 -03:00
luis 55a30d7088 Housing: Revert wall theme to faction default — Alliance uses theme 1 (Folk) 2026-04-07 13:30:14 -03:00
luis 4a6ef0aaa8 db error fix 2026-04-07 08:55:34 -03:00
luis 1463780edf Housing: Fix wall models — use Rugged (base theme 2) for ALL walls
Sniff-verified: ALL interior walls use base theme 2 (Rugged, sub-theme 8)
regardless of faction. The Rugged WMO models are the neutral interior
walls designed to match DB2 rotation values. Folk (theme 1) wall models
have different geometry/facing — they show their back side (wooden panels)
when placed with the standard DB2 OffsetRot values.

Floors/ceilings continue to use the faction theme (Folk=1 for Alliance).
2026-04-07 08:47:09 -03:00
luis d5079655d7 Housing: Fix wall models — prefer Type=0 (Cosmetic) room component options
Multiple RoomComponentOption entries exist per (MSFID, theme) with
different Types: 0=Cosmetic (normal wall), 1=DoorwayWall (sealed frame),
2=Doorway (open passage). Our index stored the first match by ID which
was Type=1 (DoorwayWall) — wrong model with doorway cutouts.

Sniff-verified: retail uses Type=0 (Cosmetic) for regular walls.
Type=1/2 are only for doorway-capable walls based on connection state.
Now the index prefers Type=0 entries as the default wall model.
2026-04-07 08:20:49 -03:00
luis 1744ff799b Housing: Fix entity ordering — add TYPEID_HOUSING_ENTITY to visibility switch
Player::UpdateVisibilityOf(IteratorPair) had no case for TYPEID_HOUSING_ENTITY
in its switch statement. HousingRoomEntities were silently skipped during
UpdateObjectVisibilityOnCreate (called by AddToMap). Only MeshObjects were
sent via this path — room entities were deferred to the VisibleNotifier
which runs LATER. Result: MeshObjects arrived before their parent room
entities, causing NULL+0x20 when resolving RoomGUID.

With the switch case added, HousingRoomEntity AddToMap (Phase 1) triggers
an immediate CREATE to the player, before MeshObject AddToMap (Phase 3).
2026-04-07 08:19:03 -03:00
luis c7e0de9b89 Housing: Fix 0x20 crash — missing UpdateVisibilityOf template for HousingRoomEntity
The VisibleNotifier calls UpdateVisibilityOf<HousingRoomEntity> during
the grid scan, but the template was never instantiated. Without the
explicit instantiation, HousingRoomEntity CREATEs were not included in
the initial UPDATE_OBJECT packet. MeshObject components arrived first
with FHousingRoomComponentMesh_C.RoomGUID pointing to room entities
that the client hadn't received yet → NULL resolution → crash at 0x20.

The grid TypeListContainer order (HousingRoomEntity before MeshObject)
was correct all along — the missing template was silently dropping room
entities from the packet.

Also: sub-theme mapping (base theme 1/2 → entity sub-theme 6/8),
UpdateType=1 for MeshObjects, and MeshObject BuildCreate hex dump.
2026-04-07 08:18:02 -03:00
luis 71645968ef Housing: Fix 0x20 crash — base theme vs sub-theme in entity field
RoomComponentOption.Theme is the BASE theme (1=Folk, 2=Rugged) used for
DB2 lookups. FHousingRoomComponentMesh_C.HouseThemeID is the APPLIED
SUB-THEME (6=Folk Medium, 8=Rugged Medium). We were writing the base
theme to the entity field where the client expects the sub-theme.

Sniff-verified: option 267 has DB2 Theme=2 (Rugged base), but the
entity field shows HouseThemeID=8 (Rugged Medium sub-theme). New houses
default to "Medium" sub-theme: Folk(1)→Folk Medium(6), Rugged(2)→
Rugged Medium(8).

Added GetDefaultSubThemeID() to map base→sub-theme. Also reverted all
debug changes (Empty parent, skipped InitHousingRoomComponentData).
2026-04-07 08:14:39 -03:00
luis 1222ab83db Housing: Fix interior crash — grid type order sends MeshObject before parent
The grid TypeListContainer iterates types in order: ..., MeshObject,
HousingRoomEntity. Component MeshObjects (type MeshObject) were sent
in UPDATE_OBJECT BEFORE HousingRoomEntity. The client resolves
AttachParentGUID (Housing/2) during CREATE — parent not yet created
→ NULL → crash at 0x20.

Fix: swap HousingRoomEntity before MeshObject in the type list so
room entities are always sent first in the initial UPDATE_OBJECT.
2026-04-07 08:08:36 -03:00
luis a5fe5daa72 66838 2026-04-07 08:06:18 -03:00
luis e4fe725379 Core/Auras: Split SpellModifierByClassMask into separate flat/pct types 2026-04-06 23:39:46 -03:00
luis bbe57b7bd4 ++ 2026-04-06 21:54:04 -03:00
luis 4c249d5ef2 add comment 2026-04-06 21:49:05 -03:00
luis a85b0e968e add room data 2026-04-06 19:21:12 -03:00
luis 084c71d065 typo 2026-04-06 19:19:33 -03:00