aboutsummaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/updates/world/3.3.5/9999_99_99_99_world_DYNSPAWN.sql234
1 files changed, 234 insertions, 0 deletions
diff --git a/sql/updates/world/3.3.5/9999_99_99_99_world_DYNSPAWN.sql b/sql/updates/world/3.3.5/9999_99_99_99_world_DYNSPAWN.sql
new file mode 100644
index 00000000000..dde858acfc3
--- /dev/null
+++ b/sql/updates/world/3.3.5/9999_99_99_99_world_DYNSPAWN.sql
@@ -0,0 +1,234 @@
+-- Create databases for spawn group template, and spawn group membership
+-- Current flags
+-- 0x01 Legacy Spawn Mode (spawn using legacy spawn system)
+-- 0x02 Manual Spawn (don't automatically spawn, instead spawned by core as part of script)
+DROP TABLE IF EXISTS `spawn_group_template`;
+CREATE TABLE `spawn_group_template` (
+ `groupId` int(10) unsigned NOT NULL,
+ `groupName` varchar(100) NOT NULL,
+ `groupFlags` int(10) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`groupId`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+DROP TABLE IF EXISTS `spawn_group`;
+CREATE TABLE `spawn_group` (
+ `groupId` int(10) unsigned NOT NULL,
+ `spawnType` tinyint(10) unsigned NOT NULL,
+ `spawnId` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`groupId`,`spawnType`,`spawnId`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+-- Create the default groups
+INSERT INTO `spawn_group_template` (`groupId`, `groupName`, `groupFlags`) VALUES
+(0, 'Default Group', 0x01),
+(1, 'Legacy Group', (0x01|0x02)),
+(2, 'Dynamic Scaling (Quest objectives)', (0x01|0x08)),
+(3, 'Dynamic Scaling (Escort NPCs)', (0x01|0x08|0x10)),
+(4, 'Dynamic Scaling (Gathering nodes)', (0x01|0x08));
+
+-- Create creature dynamic spawns group (creatures with quest items, or subjects of quests with less than 30min spawn time)
+DROP TABLE IF EXISTS `creature_temp_group`;
+CREATE TEMPORARY TABLE `creature_temp_group`
+(
+ `creatureId` int(10) unsigned NOT NULL DEFAULT '0'
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+INSERT INTO `creature_temp_group`
+SELECT `guid`
+FROM `creature` C
+INNER JOIN `creature_questitem` ON `CreatureEntry` = C.`id`
+WHERE `spawntimesecs` < 1800
+AND `map` IN (0, 1, 530, 571);
+
+INSERT INTO `creature_temp_group`
+SELECT `guid`
+FROM `creature` C
+INNER JOIN `quest_template` ON `RequiredNpcOrGo1` = C.`id`
+WHERE `spawntimesecs` < 1800
+AND `map` IN (0, 1, 530, 571);
+
+INSERT INTO `creature_temp_group`
+SELECT `guid`
+FROM `creature` C
+INNER JOIN `quest_template` ON `RequiredNpcOrGo2` = C.`id`
+WHERE `spawntimesecs` < 1800
+AND `map` IN (0, 1, 530, 571);
+
+INSERT INTO `creature_temp_group`
+SELECT `guid`
+FROM `creature` C
+INNER JOIN `quest_template` ON `RequiredNpcOrGo3` = C.`id`
+WHERE `spawntimesecs` < 1800
+AND `map` IN (0, 1, 530, 571);
+
+INSERT INTO `creature_temp_group`
+SELECT `guid`
+FROM `creature` C
+INNER JOIN `quest_template` ON `RequiredNpcOrGo4` = C.`id`
+WHERE `spawntimesecs` < 1800
+AND `map` IN (0, 1, 530, 571);
+
+INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`)
+SELECT DISTINCT 2, 0, `creatureId`
+FROM `creature_temp_group`;
+
+DROP TABLE `creature_temp_group`;
+
+-- Create gameobject dynamic spawns group (gameobjects with quest items, or subjects of quests with less than 30min spawn time)
+
+DROP TABLE IF EXISTS `gameobject_temp_group`;
+CREATE TEMPORARY TABLE `gameobject_temp_group`
+(
+ `gameobjectId` int(10) unsigned NOT NULL DEFAULT '0'
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+DROP TABLE IF EXISTS `gameobject_temp_group_ids`;
+CREATE TEMPORARY TABLE `gameobject_temp_group_ids`
+(
+ `entryid` int(10) NOT NULL DEFAULT '0'
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+ALTER TABLE `gameobject_temp_group_ids` ADD INDEX (`entryid`);
+
+INSERT INTO `gameobject_temp_group`
+SELECT `guid`
+FROM `gameobject` G
+INNER JOIN `gameobject_questitem` ON `GameObjectEntry` = G.`id`
+WHERE `spawntimesecs` < 1800
+AND `map` IN (0, 1, 530, 571);
+
+INSERT INTO `gameobject_temp_group_ids` (`entryid`)
+SELECT DISTINCT `RequiredNpcOrGo1` * -1
+FROM `quest_template`;
+
+INSERT INTO `gameobject_temp_group_ids` (`entryid`)
+SELECT DISTINCT `RequiredNpcOrGo2` * -1
+FROM `quest_template`;
+
+INSERT INTO `gameobject_temp_group_ids` (`entryid`)
+SELECT DISTINCT `RequiredNpcOrGo3` * -1
+FROM `quest_template`;
+
+INSERT INTO `gameobject_temp_group_ids` (`entryid`)
+SELECT DISTINCT `RequiredNpcOrGo4` * -1
+FROM `quest_template`;
+
+INSERT INTO `gameobject_temp_group`
+SELECT `guid`
+FROM `gameobject` G
+INNER JOIN `gameobject_temp_group_ids` ON `entryid` = G.`id`
+WHERE `spawntimesecs` < 1800
+AND `map` IN (0, 1, 530, 571);
+
+INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`)
+SELECT DISTINCT 2, 1, `gameobjectId`
+FROM `gameobject_temp_group`;
+
+DROP TABLE `gameobject_temp_group`;
+ALTER TABLE `gameobject_temp_group_ids` DROP INDEX `entryid`;
+DROP TABLE `gameobject_temp_group_ids`;
+
+-- Add mining nodes/herb nodes to profession node group
+INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`)
+SELECT 4, 1, `guid`
+FROM `gameobject` g
+INNER JOIN `gameobject_template` gt
+ ON gt.`entry` = g.`id`
+WHERE `type` = 3
+AND `Data0` IN (2, 8, 9, 10, 11, 18, 19, 20, 21, 22, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 38, 39, 40, 41, 42, 45, 47, 48, 49, 50, 51, 379, 380, 399, 400, 439, 440, 441, 442, 443, 444, 519, 521, 719, 939, 1119, 1120,
+ 1121, 1122, 1123, 1124, 1632, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1649, 1650, 1651, 1652, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1800, 1860);
+
+-- Add Escort NPCs
+INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`) VALUES
+(3, 0, 10873),
+(3, 0, 17874),
+(3, 0, 40210),
+(3, 0, 11348),
+(3, 0, 93301),
+(3, 0, 93194),
+(3, 0, 19107),
+(3, 0, 21692),
+(3, 0, 21584),
+(3, 0, 23229),
+(3, 0, 24268),
+(3, 0, 21594),
+(3, 0, 14387),
+(3, 0, 50381),
+(3, 0, 15031),
+(3, 0, 26987),
+(3, 0, 29241),
+(3, 0, 32333),
+(3, 0, 33115),
+(3, 0, 37085),
+(3, 0, 41759),
+(3, 0, 84459),
+(3, 0, 78685),
+(3, 0, 62090),
+(3, 0, 72388),
+(3, 0, 86832),
+(3, 0, 67040),
+(3, 0, 78781),
+(3, 0, 65108),
+(3, 0, 63688),
+(3, 0, 59383),
+(3, 0, 63625),
+(3, 0, 70021),
+(3, 0, 82071),
+(3, 0, 117903),
+(3, 0, 111075),
+(3, 0, 101136),
+(3, 0, 101303),
+(3, 0, 122686),
+(3, 0, 117065),
+(3, 0, 202337),
+(3, 0, 2017),
+(3, 0, 132683);
+-- remove potential duplicates
+DELETE FROM `spawn_group` WHERE `groupId` != 3 AND `spawnType`=0 AND `spawnId` IN (SELECT `spawnId` FROM (SELECT `spawnId` FROM `spawn_group` WHERE `groupId`=3 AND `spawnType`=0) as `temp`);
+DELETE FROM `spawn_group` WHERE `groupId` != 4 AND `spawnType`=1 AND `spawnId` IN (SELECT `spawnId` FROM (SELECT `spawnId` FROM `spawn_group` WHERE `groupId`=4 AND `spawnType`=1) as `temp`);
+
+
+-- Update trinity strings for various cs_list strings, to support showing spawn ID and guid.
+UPDATE `trinity_string`
+SET `content_default` = '%d (Entry: %d) - |cffffffff|Hgameobject:%d|h[%s X:%f Y:%f Z:%f MapId:%d]|h|r %s %s'
+WHERE `entry` = 517;
+
+UPDATE `trinity_string`
+SET `content_default` = '%d - |cffffffff|Hcreature:%d|h[%s X:%f Y:%f Z:%f MapId:%d]|h|r %s %s'
+WHERE `entry` = 515;
+
+UPDATE `trinity_string`
+SET `content_default` = '%d - %s X:%f Y:%f Z:%f MapId:%d %s %s'
+WHERE `entry` = 1111;
+
+UPDATE `trinity_string`
+SET `content_default` = '%d - %s X:%f Y:%f Z:%f MapId:%d %s %s'
+WHERE `entry` = 1110;
+
+-- Add new trinity strings for extra npc/gobject info lines
+DELETE FROM `trinity_string` WHERE `entry` BETWEEN 5070 AND 5082;
+INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES
+(5070, 'Spawn group: %s (ID: %u, Flags: %u, Active: %u)'),
+(5071, 'Compatibility Mode: %u'),
+(5072, 'GUID: %s'),
+(5073, 'SpawnID: %u, location (%f, %f, %f)'),
+(5074, 'Distance from player %f'),
+(5075, 'Spawn group %u not found'),
+(5076, 'Spawned a total of %zu objects:'),
+(5077, 'Listing %s respawns within %uyd'),
+(5078, 'Listing %s respawns for %s (zone %u)'),
+(5079, 'SpawnID | Entry | GridXY| Zone | Respawn time (Full)'),
+(5080, 'overdue'),
+(5081, 'creatures'),
+(5082, 'gameobjects');
+
+-- Add new NPC/Gameobject commands
+DELETE FROM `command` WHERE `name` IN ('npc spawngroup', 'npc despawngroup', 'gobject spawngroup', 'gobject despawngroup', 'list respawns');
+INSERT INTO `command` (`name`, `permission`, `help`) VALUES
+('npc spawngroup', 856, 'Syntax: .npc spawngroup $groupId [ignorerespawn] [force]'),
+('npc despawngroup', 857, 'Syntax: .npc despawngroup $groupId [removerespawntime]'),
+('gobject spawngroup', 858, 'Syntax: .gobject spawngroup $groupId [ignorerespawn] [force]'),
+('gobject despawngroup', 859, 'Syntax: .gobject despawngroup $groupId [removerespawntime]'),
+('list respawns', 860, 'Syntax: .list respawns [distance]
+
+Lists all pending respawns within <distance> yards, or within current zone if not specified.');