aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2019-07-16 19:22:24 +0200
committerShauren <shauren.trinity@gmail.com>2021-12-16 21:20:38 +0100
commit8b78f5055640bd606751d2ccc9549d14fd1d552e (patch)
tree31c2cb661103a9e91c464818f50168739892aa3d
parent6f6cf975e4e0bef621b9465f364476ec6731ae0d (diff)
Core/DB: Merge pool_creature, pool_gameobject and pool_pool into a single pool_members table.
(More pooling prep, I really don't want to have any sql update files in that PR if I can help it.) (cherry picked from commit 45bc91c238d04f2e2544622ff29faaf46713d15c)
-rw-r--r--sql/updates/world/master/2021_12_16_04_world_2019_07_16_01_world.sql23
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp10
-rw-r--r--src/server/game/Pools/PoolMgr.cpp14
3 files changed, 35 insertions, 12 deletions
diff --git a/sql/updates/world/master/2021_12_16_04_world_2019_07_16_01_world.sql b/sql/updates/world/master/2021_12_16_04_world_2019_07_16_01_world.sql
new file mode 100644
index 00000000000..9bc838f2c6e
--- /dev/null
+++ b/sql/updates/world/master/2021_12_16_04_world_2019_07_16_01_world.sql
@@ -0,0 +1,23 @@
+--
+DROP TABLE IF EXISTS `pool_members`;
+CREATE TABLE `pool_members` (
+ `type` smallint(10) unsigned NOT NULL,
+ `spawnId` int(10) unsigned NOT NULL,
+ `poolSpawnId` int(10) unsigned NOT NULL,
+ `chance` double unsigned NOT NULL,
+ `description` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`type`,`spawnId`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+INSERT INTO `pool_members` (`type`,`spawnId`,`poolSpawnId`,`chance`,`description`)
+SELECT 0 as `type`, `guid` as `spawnId`, `pool_entry` as `poolSpawnId`, `chance`, `description` FROM `pool_creature`;
+
+INSERT INTO `pool_members` (`type`,`spawnId`,`poolSpawnId`,`chance`,`description`)
+SELECT 1 as `type`, `guid` as `spawnId`, `pool_entry` as `poolSpawnId`, `chance`, `description` FROM `pool_gameobject`;
+
+INSERT INTO `pool_members` (`type`,`spawnId`,`poolSpawnId`,`chance`,`description`)
+SELECT 2 as `type`, `pool_id` as `spawnId`, `mother_pool` as `poolSpawnId`, `chance`, `description` FROM `pool_pool`;
+
+DROP TABLE IF EXISTS `pool_creature`;
+DROP TABLE IF EXISTS `pool_gameobject`;
+DROP TABLE IF EXISTS `pool_pool`;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 4a81a16a9f6..df97c30ff11 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -2068,13 +2068,13 @@ void ObjectMgr::LoadCreatures()
// 0 1 2 3 4 5 6 7 8 9 10
QueryResult result = WorldDatabase.Query("SELECT creature.guid, id, map, position_x, position_y, position_z, orientation, modelid, equipment_id, spawntimesecs, spawndist, "
- // 11 12 13 14 15 16 17 18 19 20 21
- "currentwaypoint, curhealth, curmana, MovementType, spawnDifficulties, eventEntry, pool_entry, creature.npcflag, creature.unit_flags, creature.unit_flags2, creature.unit_flags3, "
+ // 11 12 13 14 15 16 17 18 19 20 21
+ "currentwaypoint, curhealth, curmana, MovementType, spawnDifficulties, eventEntry, poolSpawnId, creature.npcflag, creature.unit_flags, creature.unit_flags2, creature.unit_flags3, "
// 22 23 24 25 26 27
"creature.dynamicflags, creature.phaseUseFlags, creature.phaseid, creature.phasegroup, creature.terrainSwapMap, creature.ScriptName "
"FROM creature "
"LEFT OUTER JOIN game_event_creature ON creature.guid = game_event_creature.guid "
- "LEFT OUTER JOIN pool_creature ON creature.guid = pool_creature.guid");
+ "LEFT OUTER JOIN pool_members ON pool_members.type = 0 AND creature.guid = pool_members.spawnId");
if (!result)
{
@@ -2419,11 +2419,11 @@ void ObjectMgr::LoadGameObjects()
// 0 1 2 3 4 5 6
QueryResult result = WorldDatabase.Query("SELECT gameobject.guid, id, map, position_x, position_y, position_z, orientation, "
// 7 8 9 10 11 12 13 14 15 16
- "rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, spawnDifficulties, eventEntry, pool_entry, "
+ "rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, spawnDifficulties, eventEntry, poolSpawnId, "
// 17 18 19 20 21
"phaseUseFlags, phaseid, phasegroup, terrainSwapMap, ScriptName "
"FROM gameobject LEFT OUTER JOIN game_event_gameobject ON gameobject.guid = game_event_gameobject.guid "
- "LEFT OUTER JOIN pool_gameobject ON gameobject.guid = pool_gameobject.guid");
+ "LEFT OUTER JOIN pool_members ON pool_members.type = 1 AND gameobject.guid = pool_members.spawnId");
if (!result)
{
diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp
index 4f3c21626de..89d6e1ab450 100644
--- a/src/server/game/Pools/PoolMgr.cpp
+++ b/src/server/game/Pools/PoolMgr.cpp
@@ -599,8 +599,8 @@ void PoolMgr::LoadFromDB()
{
uint32 oldMSTime = getMSTime();
- // 1 2 3
- QueryResult result = WorldDatabase.Query("SELECT guid, pool_entry, chance FROM pool_creature");
+ // 1 2 3
+ QueryResult result = WorldDatabase.Query("SELECT spawnId, poolSpawnId, chance FROM pool_members WHERE type = 0");
if (!result)
{
@@ -656,8 +656,8 @@ void PoolMgr::LoadFromDB()
{
uint32 oldMSTime = getMSTime();
- // 1 2 3
- QueryResult result = WorldDatabase.Query("SELECT guid, pool_entry, chance FROM pool_gameobject");
+ // 1 2 3
+ QueryResult result = WorldDatabase.Query("SELECT spawnId, poolSpawnId, chance FROM pool_members WHERE type = 1");
if (!result)
{
@@ -727,7 +727,7 @@ void PoolMgr::LoadFromDB()
uint32 oldMSTime = getMSTime();
// 1 2 3
- QueryResult result = WorldDatabase.Query("SELECT pool_id, mother_pool, chance FROM pool_pool");
+ QueryResult result = WorldDatabase.Query("SELECT spawnId, poolSpawnId, chance FROM pool_members WHERE type = 2");
if (!result)
{
@@ -905,9 +905,9 @@ void PoolMgr::LoadFromDB()
{
uint32 oldMSTime = getMSTime();
- QueryResult result = WorldDatabase.Query("SELECT DISTINCT pool_template.entry, pool_pool.pool_id, pool_pool.mother_pool FROM pool_template"
+ QueryResult result = WorldDatabase.Query("SELECT DISTINCT pool_template.entry, pool_members.spawnId, pool_members.poolSpawnId FROM pool_template"
" LEFT JOIN game_event_pool ON pool_template.entry = game_event_pool.pool_entry"
- " LEFT JOIN pool_pool ON pool_template.entry = pool_pool.pool_id WHERE game_event_pool.pool_entry IS NULL");
+ " LEFT JOIN pool_members ON pool_members.type = 2 AND pool_template.entry = pool_members.spawnId WHERE game_event_pool.pool_entry IS NULL");
if (!result)
{