Import housing system from agatho/TrinityCore feature/housing-system
Squash transplant of 433 commits from agatho/TrinityCore feature/housing-system (c4775862d1d "Re-CREATE HousingPlayerHouseEntity on move so plot icon updates") onto WowCommunityProject main. Source and target share no git ancestry — this import is delivered as a single 3-way patch apply with --reject for residual conflicts. What's in this commit: - Full housing subsystem: Housing/, Entities/Housing/, Entities/MeshObject/, HousingMap, HouseInteriorMap, HousingMgr, NeighborhoodMgr, NeighborhoodHandler. - New SMSG/CMSG packet families (0x33xxxx, 0x39xxxx, 0x55xxxx, 0x5Cxxxx, 0x5Bxxxx, plus 0x42xxxx initiative & decor opcodes) wired into Opcodes.cpp, HousingHandler, NeighborhoodHandler, WorldSession. - DB2 stores for HouseDecor*, HouseRoom*, HouseTheme*, HouseLevel*, HouseExteriorWmoData, NeighborhoodPlot, NeighborhoodInitiative*, etc. - Character DB schema for character_housing*, neighborhood_*, including decor/rooms/fixtures/catalog tables (sql/updates/characters/master/*). - World DB updates for housing GO templates, AT scripts, NPCs. - Spell scripts for housing-related spell effects (npc_housing_steward, spell_housing, at_housing_plot, go_housing_door). - Project documentation and analysis dumps under docs/. Files NOT in this commit (5 .rej files left in the working tree for manual integration — the target's diverged versions of these list/enum files prevented automatic apply): src/server/database/Database/Implementation/CharacterDatabase.cpp.rej src/server/database/Database/Implementation/CharacterDatabase.h.rej src/server/database/Database/Implementation/HotfixDatabase.h.rej src/server/game/DataStores/DB2Metadata.h.rej src/server/game/Server/Protocol/Opcodes.h.rej Each .rej is a "list insertion" conflict where our patch wants to add new enum/statement entries between target lines whose neighbours diverged. Resolution is mechanical (paste the rejected hunks into the right slots in the target version) but should be done with awareness of the target's local ordering. Until those are resolved the build will fail on missing opcodes, DB statements, and DB2 metadata for housing tables.
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
-- Add exteriorLocked, houseSize, houseType columns to character_housing
|
||||
ALTER TABLE `character_housing`
|
||||
ADD COLUMN `exteriorLocked` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Whether exterior editing is locked (1=locked, 0=unlocked)' AFTER `settingsFlags`,
|
||||
ADD COLUMN `houseSize` TINYINT UNSIGNED NOT NULL DEFAULT 2 COMMENT 'HousingFixtureSize: 1=Any, 2=Small, 3=Medium, 4=Large' AFTER `exteriorLocked`,
|
||||
ADD COLUMN `houseType` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'HouseExteriorWmoData DB2 entry ID (architectural style)' AFTER `houseSize`;
|
||||
@@ -0,0 +1,15 @@
|
||||
-- Add house position persistence columns to character_housing (idempotent)
|
||||
SET @columns_exist = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'character_housing' AND COLUMN_NAME = 'posX');
|
||||
|
||||
SET @query = IF(@columns_exist = 0,
|
||||
'ALTER TABLE `character_housing`
|
||||
ADD COLUMN `posX` FLOAT NOT NULL DEFAULT 0 COMMENT ''House X position on plot'' AFTER `houseType`,
|
||||
ADD COLUMN `posY` FLOAT NOT NULL DEFAULT 0 COMMENT ''House Y position on plot'' AFTER `posX`,
|
||||
ADD COLUMN `posZ` FLOAT NOT NULL DEFAULT 0 COMMENT ''House Z position on plot'' AFTER `posY`,
|
||||
ADD COLUMN `facing` FLOAT NOT NULL DEFAULT 0 COMMENT ''House facing angle on plot'' AFTER `posZ`',
|
||||
'SELECT 1');
|
||||
|
||||
PREPARE stmt FROM @query;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
@@ -0,0 +1,4 @@
|
||||
-- Add houseName and houseDescription columns to character_housing
|
||||
ALTER TABLE `character_housing`
|
||||
ADD COLUMN `houseName` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'Player-set house display name' AFTER `facing`,
|
||||
ADD COLUMN `houseDescription` VARCHAR(256) NOT NULL DEFAULT '' COMMENT 'Player-set house description' AFTER `houseName`;
|
||||
@@ -0,0 +1,11 @@
|
||||
-- Add source tracking columns to character_housing_decor and character_housing_catalog
|
||||
-- SourceType: DecorSourceType enum (0=Standard, 3=Deferred, 5=Spell, 6=Item)
|
||||
-- SourceValue: Context string (spell ID, item GUID, etc.)
|
||||
|
||||
ALTER TABLE `character_housing_decor`
|
||||
ADD COLUMN `sourceType` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'DecorSourceType: 0=Standard, 3=Deferred, 5=Spell, 6=Item' AFTER `placementTime`,
|
||||
ADD COLUMN `sourceValue` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Source context (spell ID, item GUID, etc.)' AFTER `sourceType`;
|
||||
|
||||
ALTER TABLE `character_housing_catalog`
|
||||
ADD COLUMN `sourceType` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'DecorSourceType: 0=Standard, 3=Deferred, 5=Spell, 6=Item' AFTER `acquiredTime`,
|
||||
ADD COLUMN `sourceValue` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Source context (spell ID, item GUID, etc.)' AFTER `sourceType`;
|
||||
@@ -0,0 +1,20 @@
|
||||
-- Ensure character_housing has the columns the neighborhood roster query depends on:
|
||||
-- houseLevel, favor, houseName
|
||||
--
|
||||
-- houseLevel and favor are part of the base CREATE TABLE in sql/housing/housing_schema.sql,
|
||||
-- but houseName was added later by 2026_03_04_00_characters_housing_name_desc.sql. This
|
||||
-- migration is idempotent (uses INFORMATION_SCHEMA + PREPARE so it's a no-op if the column
|
||||
-- is already there) to cover any tester whose DB sits between those points.
|
||||
|
||||
SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'character_housing' AND COLUMN_NAME = 'houseName');
|
||||
|
||||
SET @query = IF(@col_exists = 0,
|
||||
'ALTER TABLE `character_housing`
|
||||
ADD COLUMN `houseName` VARCHAR(64) NOT NULL DEFAULT '''' COMMENT ''Player-set house display name'' AFTER `facing`,
|
||||
ADD COLUMN `houseDescription` VARCHAR(256) NOT NULL DEFAULT '''' COMMENT ''Player-set house description'' AFTER `houseName`',
|
||||
'SELECT 1');
|
||||
|
||||
PREPARE stmt FROM @query;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
@@ -0,0 +1,5 @@
|
||||
-- Assign gossip script to housing tutorial steward NPCs
|
||||
-- Lyssabel Dawnpetal (233063) and Tocho (233708) grant quest kill credits
|
||||
-- for "My First Home" (91863) when players interact with them.
|
||||
-- Add GOSSIP flag (0x1) so the client shows gossip menu options.
|
||||
UPDATE `creature_template` SET `ScriptName` = 'npc_housing_steward', `npcflag` = `npcflag` | 1 WHERE `entry` IN (233063, 233708);
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,206 @@
|
||||
-- ================================================================
|
||||
-- HOUSING TUTORIAL SUPPLEMENT - Map 2736 (Razorwind Shores)
|
||||
-- Adds: gossip chains, NPC movement, area trigger spawns, fauna wander
|
||||
-- ================================================================
|
||||
|
||||
-- ================================================================
|
||||
-- 1. GOSSIP CHAIN: Rotha (254687) menu 41365 → 41367
|
||||
-- ================================================================
|
||||
|
||||
UPDATE `gossip_menu_option` SET `ActionMenuID`=41367
|
||||
WHERE `MenuID`=41365 AND `OptionID`=0;
|
||||
|
||||
-- ================================================================
|
||||
-- 2. AMBIENT FAUNA - Enable random movement (MovementType=1)
|
||||
-- wander_distance=5 for ground creatures, =10 for flying insects
|
||||
-- ================================================================
|
||||
|
||||
-- Snakes (234993) - ground wander
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=5
|
||||
WHERE `map`=2736 AND `id`=234993 AND `guid` BETWEEN 9000000 AND 9999999;
|
||||
|
||||
-- Scorpions (235001) - ground wander
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=5
|
||||
WHERE `map`=2736 AND `id`=235001 AND `guid` BETWEEN 9000000 AND 9999999;
|
||||
|
||||
-- Beetles (235003) - ground wander
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=5
|
||||
WHERE `map`=2736 AND `id`=235003 AND `guid` BETWEEN 9000000 AND 9999999;
|
||||
|
||||
-- Rats (244973) - ground wander
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=5
|
||||
WHERE `map`=2736 AND `id`=244973 AND `guid` BETWEEN 9000000 AND 9999999;
|
||||
|
||||
-- Crabs (239919) - ground wander
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=5
|
||||
WHERE `map`=2736 AND `id`=239919 AND `guid` BETWEEN 9000000 AND 9999999;
|
||||
|
||||
-- Lizards (242103) - ground wander
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=5
|
||||
WHERE `map`=2736 AND `id`=242103 AND `guid` BETWEEN 9000000 AND 9999999;
|
||||
|
||||
-- Dragonflies (245042) - flying insects, wider wander
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=10
|
||||
WHERE `map`=2736 AND `id`=245042 AND `guid` BETWEEN 9000000 AND 9999999;
|
||||
|
||||
-- Hornets (248557) - flying insects, wider wander
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=10
|
||||
WHERE `map`=2736 AND `id`=248557 AND `guid` BETWEEN 9000000 AND 9999999;
|
||||
|
||||
-- ================================================================
|
||||
-- 3. TOURIST (237063) WAYPOINT PATHS - 4 spawns with patrol routes
|
||||
-- Extracted from SMSG_ON_MONSTER_MOVE spline data
|
||||
-- MovementType=2 (waypoint) for these spawns
|
||||
-- ================================================================
|
||||
|
||||
-- Tourist spawn 1 (guid 9000294) - starts at (2005.20, 120.98, 190.42)
|
||||
UPDATE `creature` SET `MovementType`=2 WHERE `guid`=9000294;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=9000294;
|
||||
INSERT INTO `creature_addon` (`guid`,`PathId`) VALUES (9000294, 9000294);
|
||||
DELETE FROM `waypoint_path` WHERE `PathId`=9000294;
|
||||
INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Comment`) VALUES
|
||||
(9000294, 0, 0, 'Tourist 237063 patrol - spawn 1');
|
||||
DELETE FROM `waypoint_path_node` WHERE `PathId`=9000294;
|
||||
INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES
|
||||
(9000294, 1, 2005.4194, 120.8581, 189.6936, NULL, 0),
|
||||
(9000294, 2, 2007.1694, 118.6081, 189.6936, NULL, 0),
|
||||
(9000294, 3, 2007.4194, 117.8581, 189.4436, NULL, 0),
|
||||
(9000294, 4, 2010.6694, 119.1081, 189.4436, NULL, 0),
|
||||
(9000294, 5, 2015.4194, 119.8581, 189.1936, NULL, 0),
|
||||
(9000294, 6, 2018.4194, 120.1081, 188.9436, NULL, 0),
|
||||
(9000294, 7, 2019.4194, 120.3581, 188.6936, NULL, 0),
|
||||
(9000294, 8, 2020.4194, 120.3581, 188.6936, NULL, 0),
|
||||
(9000294, 9, 2021.4194, 120.6081, 188.4436, NULL, 0),
|
||||
(9000294, 10, 2024.4194, 120.8581, 187.4436, NULL, 0),
|
||||
(9000294, 11, 2024.6410, 120.7352, 186.9692, NULL, 2000),
|
||||
(9000294, 12, 2005.1980, 120.9809, 190.4180, NULL, 2000);
|
||||
|
||||
-- Tourist spawn 2 (guid 9000295) - starts at (1988.33, 178.26, 161.18)
|
||||
UPDATE `creature` SET `MovementType`=2 WHERE `guid`=9000295;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=9000295;
|
||||
INSERT INTO `creature_addon` (`guid`,`PathId`) VALUES (9000295, 9000295);
|
||||
DELETE FROM `waypoint_path` WHERE `PathId`=9000295;
|
||||
INSERT INTO `waypoint_path` (`PathId`,`MoveType`,`Flags`,`Comment`) VALUES
|
||||
(9000295, 0, 0, 'Tourist 237063 patrol - spawn 2');
|
||||
DELETE FROM `waypoint_path_node` WHERE `PathId`=9000295;
|
||||
INSERT INTO `waypoint_path_node` (`PathId`,`NodeId`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`,`Delay`) VALUES
|
||||
(9000295, 1, 1987.461, 176.639, 161.235, NULL, 0),
|
||||
(9000295, 2, 1986.461, 176.889, 160.985, NULL, 0),
|
||||
(9000295, 3, 1984.711, 177.639, 160.485, NULL, 0),
|
||||
(9000295, 4, 1983.711, 178.139, 160.235, NULL, 0),
|
||||
(9000295, 5, 1982.711, 178.639, 159.985, NULL, 0),
|
||||
(9000295, 6, 1980.961, 179.389, 159.485, NULL, 0),
|
||||
(9000295, 7, 1979.961, 179.639, 158.985, NULL, 0),
|
||||
(9000295, 8, 1979.211, 180.139, 158.735, NULL, 0),
|
||||
(9000295, 9, 1977.211, 180.889, 158.485, NULL, 0),
|
||||
(9000295, 10, 1976.461, 181.389, 158.235, NULL, 2000),
|
||||
(9000295, 11, 1988.330, 178.257, 161.179, NULL, 2000);
|
||||
|
||||
-- Tourist spawn 3 (guid 9000296) - starts at (2034.48, 130.13, 182.72)
|
||||
-- Uses random wander since we only have the spawn position spline
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=15 WHERE `guid`=9000296;
|
||||
|
||||
-- Tourist spawn 4 (guid 9000297) - starts at (1613.35, 297.73, 81.20)
|
||||
-- Uses random wander since we only have the spawn position spline
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=15 WHERE `guid`=9000297;
|
||||
|
||||
-- ================================================================
|
||||
-- 4. LOCAL (237581) NPCs - 38 spawns with random wander
|
||||
-- Complex patrol routes in sniff but too many to extract individual paths
|
||||
-- Use generous random wander to approximate
|
||||
-- ================================================================
|
||||
|
||||
UPDATE `creature` SET `MovementType`=1, `wander_distance`=15
|
||||
WHERE `map`=2736 AND `id`=237581 AND `guid` BETWEEN 9000000 AND 9999999;
|
||||
|
||||
-- ================================================================
|
||||
-- 5. AREA TRIGGER SPAWNS for Quest 91863 Tour Stops
|
||||
-- ObjectIDs 38951-38962 need areatrigger_template + areatrigger rows
|
||||
-- Positions are ESTIMATED from neighborhood layout since they
|
||||
-- weren't captured as CMSG_AREA_TRIGGER in the sniff.
|
||||
-- These are server-side AreaTrigger entities (IsCustom=1).
|
||||
--
|
||||
-- The quest objectives use type 19 (AREA_TRIGGER_ENTER) which
|
||||
-- requires the player to walk into an AreaTrigger entity on the map.
|
||||
-- AreaTrigger::HandleUnitEnter() calls UpdateQuestObjectiveProgress().
|
||||
-- ================================================================
|
||||
|
||||
-- Create areatrigger templates (custom, since these aren't in DB2)
|
||||
-- Using a simple sphere shape via ActionSetId=0
|
||||
DELETE FROM `areatrigger_template` WHERE `Id` BETWEEN 38951 AND 38962 AND `IsCustom`=1;
|
||||
INSERT INTO `areatrigger_template` (`Id`,`IsCustom`,`Flags`,`ActionSetId`,`ActionSetFlags`,`VerifiedBuild`) VALUES
|
||||
(38951, 1, 0, 0, 0, 64797),
|
||||
(38952, 1, 0, 0, 0, 64797),
|
||||
(38953, 1, 0, 0, 0, 64797),
|
||||
(38954, 1, 0, 0, 0, 64797),
|
||||
(38955, 1, 0, 0, 0, 64797),
|
||||
(38956, 1, 0, 0, 0, 64797),
|
||||
(38957, 1, 0, 0, 0, 64797),
|
||||
(38958, 1, 0, 0, 0, 64797),
|
||||
(38959, 1, 0, 0, 0, 64797),
|
||||
(38960, 1, 0, 0, 0, 64797),
|
||||
(38961, 1, 0, 0, 0, 64797),
|
||||
(38962, 1, 0, 0, 0, 64797);
|
||||
|
||||
-- Spawn area triggers on Map 2736 (Razorwind Shores)
|
||||
-- Positions distributed across key neighborhood locations
|
||||
-- SpawnId range: 9100000-9100011 to avoid collision with creature/GO guids
|
||||
DELETE FROM `areatrigger` WHERE `SpawnId` BETWEEN 9100000 AND 9100011;
|
||||
INSERT INTO `areatrigger` (`SpawnId`,`AreaTriggerCreatePropertiesId`,`IsCustom`,`MapId`,`SpawnDifficulties`,`PosX`,`PosY`,`PosZ`,`Orientation`,`ScriptName`,`Comment`,`VerifiedBuild`) VALUES
|
||||
-- Tour stop 1: Near Tocho Cloudhide (steward, quest giver)
|
||||
(9100000, 38951, 1, 2736, '0', 1715.36, 95.10, 102.28, 0, '', 'Housing Tour Stop 1 - Steward', 64797),
|
||||
-- Tour stop 2: Near Saga Mistrunner (meat vendor)
|
||||
(9100001, 38952, 1, 2736, '0', 1720.58, 124.94, 100.15, 0, '', 'Housing Tour Stop 2 - Meat Vendor', 64797),
|
||||
-- Tour stop 3: Near Xiz''ro (lumberjack)
|
||||
(9100002, 38953, 1, 2736, '0', 1697.27, 167.39, 103.33, 0, '', 'Housing Tour Stop 3 - Lumberjack', 64797),
|
||||
-- Tour stop 4: Near Haleth Turnwater (dye crafter)
|
||||
(9100003, 38954, 1, 2736, '0', 1697.06, 207.39, 99.82, 0, '', 'Housing Tour Stop 4 - Dye Crafter', 64797),
|
||||
-- Tour stop 5: Near The Last Architect (quest giver)
|
||||
(9100004, 38955, 1, 2736, '0', 1728.05, 205.50, 100.03, 0, '', 'Housing Tour Stop 5 - Last Architect', 64797),
|
||||
-- Tour stop 6: Near Rotha (general contractor)
|
||||
(9100005, 38956, 1, 2736, '0', 1763.94, 216.39, 107.03, 0, '', 'Housing Tour Stop 6 - General Contractor', 64797),
|
||||
-- Tour stop 7: Between vendor area and plots (estimated)
|
||||
(9100006, 38957, 1, 2736, '0', 1750.00, 170.00, 105.00, 0, '', 'Housing Tour Stop 7 - Market Area', 64797),
|
||||
-- Tour stop 8: Near cornerstone cluster (estimated)
|
||||
(9100007, 38958, 1, 2736, '0', 1780.00, 150.00, 105.00, 0, '', 'Housing Tour Stop 8 - Cornerstones', 64797),
|
||||
-- Tour stop 9: Near bulletin board area (estimated)
|
||||
(9100008, 38959, 1, 2736, '0', 1800.00, 180.00, 105.00, 0, '', 'Housing Tour Stop 9 - Bulletin Boards', 64797),
|
||||
-- Tour stop 10: Near flight master area (estimated)
|
||||
(9100009, 38960, 1, 2736, '0', 1796.03, 200.00, 100.00, 0, '', 'Housing Tour Stop 10 - Flight Path', 64797),
|
||||
-- Tour stop 11: Neighborhood overlook (estimated)
|
||||
(9100010, 38961, 1, 2736, '0', 1750.00, 250.00, 110.00, 0, '', 'Housing Tour Stop 11 - Overlook', 64797),
|
||||
-- Tour stop 12: Return to start area (estimated)
|
||||
(9100011, 38962, 1, 2736, '0', 1730.00, 130.00, 100.00, 0, '', 'Housing Tour Stop 12 - Return', 64797);
|
||||
|
||||
-- ================================================================
|
||||
-- 6. AREATRIGGER CREATE PROPERTIES (required for custom area triggers)
|
||||
-- ================================================================
|
||||
|
||||
-- Check if areatrigger_create_properties table exists and add entries
|
||||
-- These define the shape/size of each area trigger (sphere radius ~15 yards)
|
||||
DELETE FROM `areatrigger_create_properties` WHERE `Id` BETWEEN 38951 AND 38962 AND `IsCustom`=1;
|
||||
-- Shape=0 (Sphere), ShapeData0=15.0 (radius in yards)
|
||||
INSERT INTO `areatrigger_create_properties`
|
||||
(`Id`,`IsCustom`,`AreaTriggerId`,`IsAreatriggerCustom`,`Shape`,`ShapeData0`,`VerifiedBuild`) VALUES
|
||||
(38951, 1, 38951, 1, 0, 15.0, 64797),
|
||||
(38952, 1, 38952, 1, 0, 15.0, 64797),
|
||||
(38953, 1, 38953, 1, 0, 15.0, 64797),
|
||||
(38954, 1, 38954, 1, 0, 15.0, 64797),
|
||||
(38955, 1, 38955, 1, 0, 15.0, 64797),
|
||||
(38956, 1, 38956, 1, 0, 15.0, 64797),
|
||||
(38957, 1, 38957, 1, 0, 15.0, 64797),
|
||||
(38958, 1, 38958, 1, 0, 15.0, 64797),
|
||||
(38959, 1, 38959, 1, 0, 15.0, 64797),
|
||||
(38960, 1, 38960, 1, 0, 15.0, 64797),
|
||||
(38961, 1, 38961, 1, 0, 15.0, 64797),
|
||||
(38962, 1, 38962, 1, 0, 15.0, 64797);
|
||||
|
||||
-- ================================================================
|
||||
-- SUMMARY
|
||||
-- ================================================================
|
||||
-- 1. Rotha gossip chain: ActionMenuID 41365→41367
|
||||
-- 2. Ambient fauna: 485 creatures now wander (8 species)
|
||||
-- 3. Tourist: 2 with waypoint paths, 2 with random wander
|
||||
-- 4. Local: 38 NPCs with random wander
|
||||
-- 5. Area triggers: 12 tour stops for quest 91863
|
||||
-- Faction: HORDE (Razorwind Shores)
|
||||
@@ -0,0 +1,5 @@
|
||||
-- Remove static cornerstone spawns; now spawned dynamically by HousingMap::LoadGridObjects
|
||||
-- Housing maps 2735 (Alliance Founder's Point), 2736 (Horde Razorwind Shores)
|
||||
-- GO entries: 457142 (Cornerstone), 417487 (For Sale Sign / Plot marker)
|
||||
DELETE FROM gameobject WHERE map IN (2735, 2736) AND id IN (457142, 417487)
|
||||
AND guid BETWEEN 9000000 AND 9999999;
|
||||
@@ -0,0 +1,8 @@
|
||||
-- Remove fabricated "For Sale" sign (entry 417487, displayId 8206)
|
||||
-- This entry does not exist in retail. Retail uses only the Cornerstone GO (entry 457142,
|
||||
-- displayId 110660, type 48/UILink) for ALL plots, with GOState toggling ownership:
|
||||
-- GOState 0 (ACTIVE) = For Sale / unoccupied
|
||||
-- GOState 1 (READY) = Owned / occupied
|
||||
-- DisplayID 8206 is a vanilla-era model that renders as a flat brown rectangle.
|
||||
|
||||
DELETE FROM `gameobject_template` WHERE `entry` = 417487;
|
||||
@@ -0,0 +1,46 @@
|
||||
-- Housing Plot AreaTrigger (entry 37358)
|
||||
-- Required for plot enter/exit detection on housing neighborhood maps.
|
||||
-- Without this, SMSG_NEIGHBORHOOD_PLAYER_ENTER_PLOT never fires
|
||||
-- and the Cornerstone purchase UI cannot display.
|
||||
|
||||
-- Template entry
|
||||
DELETE FROM `areatrigger_template` WHERE `Id` = 37358 AND `IsCustom` = 0;
|
||||
INSERT INTO `areatrigger_template` (`Id`, `IsCustom`, `Flags`, `ActionSetId`, `ActionSetFlags`) VALUES
|
||||
(37358, 0, 0, 0, 0);
|
||||
|
||||
-- Create properties: Box shape (35x30x94 extents), DecalPropertiesId=621, SpellForVisuals=1282351
|
||||
-- Sniff-verified: ShapeType=1 (Box), BoundsRadius2D=46.098, DecalPropertiesID=621
|
||||
DELETE FROM `areatrigger_create_properties` WHERE `Id` = 37358 AND `IsCustom` = 0;
|
||||
INSERT INTO `areatrigger_create_properties` (
|
||||
`Id`, `IsCustom`, `AreaTriggerId`, `IsAreatriggerCustom`, `Flags`,
|
||||
`MoveCurveId`, `ScaleCurveId`, `MorphCurveId`, `FacingCurveId`,
|
||||
`AnimId`, `AnimKitId`, `DecalPropertiesId`, `SpellForVisuals`,
|
||||
`TimeToTargetScale`, `Speed`, `SpeedIsTime`,
|
||||
`Shape`, `ShapeData0`, `ShapeData1`, `ShapeData2`, `ShapeData3`,
|
||||
`ShapeData4`, `ShapeData5`, `ShapeData6`, `ShapeData7`,
|
||||
`ScriptName`
|
||||
) VALUES (
|
||||
37358, 0, 37358, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 621, 1282351,
|
||||
0, 1, 0,
|
||||
1, 35, 30, 94, 35, -- Shape 1 = Box, ShapeData0-2 = extents, ShapeData3-5 = extentsTarget
|
||||
30, 94, 0, 0,
|
||||
'at_housing_plot'
|
||||
);
|
||||
|
||||
-- ================================================================
|
||||
-- SERVERSIDE SPELL 1266097: [DNT] Trigger Convo for Unowned Plot
|
||||
-- Cast by Cornerstone GO (entry 457142) UILink handler when a
|
||||
-- player clicks an unowned cornerstone. The SPELL_EFFECT_DUMMY
|
||||
-- is handled by a SpellScript that validates plot availability.
|
||||
-- ================================================================
|
||||
|
||||
DELETE FROM `serverside_spell` WHERE `Id` = 1266097 AND `DifficultyID` = 0;
|
||||
INSERT INTO `serverside_spell` (`Id`, `DifficultyID`, `CategoryId`, `Dispel`, `Mechanic`, `Attributes`, `AttributesEx`, `AttributesEx2`, `AttributesEx3`, `AttributesEx4`, `AttributesEx5`, `AttributesEx6`, `AttributesEx7`, `AttributesEx8`, `AttributesEx9`, `AttributesEx10`, `AttributesEx11`, `AttributesEx12`, `AttributesEx13`, `AttributesEx14`, `Stances`, `StancesNot`, `Targets`, `TargetCreatureType`, `RequiresSpellFocus`, `FacingCasterFlags`, `CasterAuraState`, `TargetAuraState`, `ExcludeCasterAuraState`, `ExcludeTargetAuraState`, `CasterAuraSpell`, `TargetAuraSpell`, `ExcludeCasterAuraSpell`, `ExcludeTargetAuraSpell`, `CasterAuraType`, `TargetAuraType`, `ExcludeCasterAuraType`, `ExcludeTargetAuraType`, `CastingTimeIndex`, `RecoveryTime`, `CategoryRecoveryTime`, `StartRecoveryCategory`, `StartRecoveryTime`, `InterruptFlags`, `AuraInterruptFlags1`, `AuraInterruptFlags2`, `ChannelInterruptFlags1`, `ChannelInterruptFlags2`, `ProcFlags`, `ProcFlags2`, `ProcChance`, `ProcCharges`, `ProcCooldown`, `ProcBasePPM`, `MaxLevel`, `BaseLevel`, `SpellLevel`, `DurationIndex`, `RangeIndex`, `Speed`, `LaunchDelay`, `StackAmount`, `EquippedItemClass`, `EquippedItemSubClassMask`, `EquippedItemInventoryTypeMask`, `ContentTuningId`, `SpellName`, `ConeAngle`, `ConeWidth`, `MaxTargetLevel`, `MaxAffectedTargets`, `SpellFamilyName`, `SpellFamilyFlags1`, `SpellFamilyFlags2`, `SpellFamilyFlags3`, `SpellFamilyFlags4`, `DmgClass`, `PreventionType`, `AreaGroupId`, `SchoolMask`, `ChargeCategoryId`) VALUES
|
||||
(1266097, 0, 0, 0, 0, 0x20000180, 0x00000020, 0x00000004, 0x10100000, 0x00000080, 0x00000008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0, '[DNT] Trigger Convo for Unowned Plot', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1, 0);
|
||||
|
||||
-- Spell effect: SPELL_EFFECT_DUMMY (3), self-targeted (ImplicitTarget1 = 1)
|
||||
DELETE FROM `serverside_spell_effect` WHERE `SpellID` = 1266097 AND `EffectIndex` = 0 AND `DifficultyID` = 0;
|
||||
INSERT INTO `serverside_spell_effect` (`SpellID`, `EffectIndex`, `DifficultyID`, `Effect`, `EffectAura`, `EffectAmplitude`, `EffectAttributes`, `EffectAuraPeriod`, `EffectBonusCoefficient`, `EffectChainAmplitude`, `EffectChainTargets`, `EffectItemType`, `EffectMechanic`, `EffectPointsPerResource`, `EffectPosFacing`, `EffectRealPointsPerLevel`, `EffectTriggerSpell`, `BonusCoefficientFromAP`, `PvpMultiplier`, `Coefficient`, `Variance`, `ResourceCoefficient`, `GroupSizeBasePointsCoefficient`, `EffectBasePoints`, `EffectMiscValue1`, `EffectMiscValue2`, `EffectRadiusIndex1`, `EffectRadiusIndex2`, `EffectSpellClassMask1`, `EffectSpellClassMask2`, `EffectSpellClassMask3`, `EffectSpellClassMask4`, `ImplicitTarget1`, `ImplicitTarget2`) VALUES
|
||||
(1266097, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0);
|
||||
@@ -0,0 +1,14 @@
|
||||
-- Remove broken static 574432 (Housing Platform WMO) spawns.
|
||||
-- The sniff-extracted Z values are incorrect (underground), causing the platforms
|
||||
-- to not render. Platforms are now spawned dynamically by HousingMap::SpawnHouseForPlot
|
||||
-- at the correct DB2 HousePosition with proper rotation.
|
||||
|
||||
-- Remove the old 23 manually-placed spawns (from 2026_02_17_00_world.sql)
|
||||
-- These had correct Z but didn't cover all DB2 plots, and are now redundant.
|
||||
DELETE FROM `gameobject` WHERE `id` = 574432 AND `guid` BETWEEN 9101845 AND 9101867;
|
||||
|
||||
-- Remove the sniff-extracted spawns with wrong Z values.
|
||||
-- These are in the @OGUID range from world_alliance_neighborhood_spawns.sql.
|
||||
-- We can't use @OGUID variables here, so delete all static 574432 spawns on map 2735
|
||||
-- since they're all now dynamically spawned.
|
||||
DELETE FROM `gameobject` WHERE `id` = 574432 AND `map` = 2735;
|
||||
Reference in New Issue
Block a user