aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/auth_database.sql19
-rw-r--r--sql/updates/auth/master/2025_10_30_00_auth.sql23
-rw-r--r--sql/updates/world/master/2025_10_31_00_world.sql491
-rw-r--r--sql/updates/world/master/2025_10_31_01_world.sql541
-rw-r--r--sql/updates/world/master/2025_10_31_02_world.sql1
-rw-r--r--src/common/Collision/Management/VMapManager.cpp5
-rw-r--r--src/common/Collision/Management/VMapManager.h2
-rw-r--r--src/common/Collision/Maps/MapTree.cpp6
-rw-r--r--src/common/Collision/Models/GameObjectModel.cpp3
-rw-r--r--src/common/Collision/Models/ModelInstance.h3
-rw-r--r--src/common/Collision/VMapDefinitions.h4
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp5
-rw-r--r--src/server/game/Battlefield/Battlefield.h6
-rw-r--r--src/server/game/Groups/GroupMgr.cpp5
-rw-r--r--src/server/game/Groups/GroupMgr.h2
-rw-r--r--src/server/scripts/Battlegrounds/AshamanesFall/arena_ashamanes_fall.cpp74
-rw-r--r--src/server/scripts/Battlegrounds/NagrandArena/arena_nagrand_arena_legion.cpp74
-rw-r--r--src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp4
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp4
-rw-r--r--src/tools/mmaps_generator/IntermediateValues.cpp8
-rw-r--r--src/tools/mmaps_generator/MapBuilder.cpp12
-rw-r--r--src/tools/mmaps_generator/PathGenerator.cpp1
-rw-r--r--src/tools/mmaps_generator/TerrainBuilder.cpp32
-rw-r--r--src/tools/mmaps_generator/TileBuilder.cpp8
-rw-r--r--src/tools/vmap4_assembler/TileAssembler.cpp6
-rw-r--r--src/tools/vmap4_extractor/adtfile.cpp149
-rw-r--r--src/tools/vmap4_extractor/adtfile.h7
-rw-r--r--src/tools/vmap4_extractor/gameobject_extract.cpp50
-rw-r--r--src/tools/vmap4_extractor/model.cpp38
-rw-r--r--src/tools/vmap4_extractor/vmapexport.cpp222
-rw-r--r--src/tools/vmap4_extractor/vmapexport.h45
-rw-r--r--src/tools/vmap4_extractor/wdtfile.cpp58
-rw-r--r--src/tools/vmap4_extractor/wdtfile.h2
-rw-r--r--src/tools/vmap4_extractor/wmo.cpp50
34 files changed, 1605 insertions, 355 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index f0c270e0c77..76877e5f19f 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -1320,7 +1320,14 @@ INSERT INTO `build_auth_key` VALUES
(63906,'Mac','x64','WoWC',0x6C931FF70F78BAD0707EA57157D40718),
(63906,'Win','A64','WoW',0x5ECAB6CD8F056268F02B3ACC984A5769),
(63906,'Win','x64','WoW',0xA58FDAC26513D567C1F128339126C602),
-(63906,'Win','x64','WoWC',0xCB2C6E16508E82C2529F1C6CD2E6E6D9);
+(63906,'Win','x64','WoWC',0xCB2C6E16508E82C2529F1C6CD2E6E6D9),
+(64154,'Mac','A64','WoW',0x2B47687B97FB51EFCC28274BF094EF7B),
+(64154,'Mac','A64','WoWC',0x676F3B5CD92799B5CE6ECBFD42EBBC96),
+(64154,'Mac','x64','WoW',0xD39F3B03CD34DC2CDDB7173EA9DA008E),
+(64154,'Mac','x64','WoWC',0x410B672FD200829F2B39E91CA637DDBD),
+(64154,'Win','A64','WoW',0xBDE661AFFD07520A536913612098913A),
+(64154,'Win','x64','WoW',0x205D71769E2A1C2C04516A5CE36B35C2),
+(64154,'Win','x64','WoWC',0x38F784495ED0129FF391B27EC34548E0);
/*!40000 ALTER TABLE `build_auth_key` ENABLE KEYS */;
UNLOCK TABLES;
@@ -1732,7 +1739,8 @@ INSERT INTO `build_info` VALUES
(63704,11,2,5,NULL),
(63796,11,2,5,NULL),
(63834,11,2,5,NULL),
-(63906,11,2,5,NULL);
+(63906,11,2,5,NULL),
+(64154,11,2,5,NULL);
/*!40000 ALTER TABLE `build_info` ENABLE KEYS */;
UNLOCK TABLES;
@@ -3345,7 +3353,7 @@ CREATE TABLE `realmlist` (
`timezone` tinyint unsigned NOT NULL DEFAULT '0',
`allowedSecurityLevel` tinyint unsigned NOT NULL DEFAULT '0',
`population` float NOT NULL DEFAULT '0',
- `gamebuild` int unsigned NOT NULL DEFAULT '63906',
+ `gamebuild` int unsigned NOT NULL DEFAULT '64154',
`Region` tinyint unsigned NOT NULL DEFAULT '1',
`Battlegroup` tinyint unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
@@ -3360,7 +3368,7 @@ CREATE TABLE `realmlist` (
LOCK TABLES `realmlist` WRITE;
/*!40000 ALTER TABLE `realmlist` DISABLE KEYS */;
INSERT INTO `realmlist` VALUES
-(1,'Trinity','127.0.0.1','127.0.0.1',NULL,NULL,'255.255.255.0',8085,0,0,1,0,0,63906,1,1);
+(1,'Trinity','127.0.0.1','127.0.0.1',NULL,NULL,'255.255.255.0',8085,0,0,1,0,0,64154,1,1);
/*!40000 ALTER TABLE `realmlist` ENABLE KEYS */;
UNLOCK TABLES;
@@ -3885,7 +3893,8 @@ INSERT INTO `updates` VALUES
('2025_10_11_00_auth.sql','9D39A17F4B14666677A409232A73986076FC4108','ARCHIVED','2025-10-11 12:34:55',0),
('2025_10_15_00_auth.sql','AD32FF4A48BFC671ED2F17409D4283E2CD3577E1','ARCHIVED','2025-10-15 09:56:37',0),
('2025_10_22_00_auth.sql','A363CDF2B9EDED18DA077351CB2B0DC3A9E5E752','ARCHIVED','2025-10-22 10:32:36',0),
-('2025_10_29_00_auth.sql','CA6DC3F6A070AD894AB0DF2B21168D1BD7445A38','ARCHIVED','2025-10-29 06:57:00',0);
+('2025_10_29_00_auth.sql','CA6DC3F6A070AD894AB0DF2B21168D1BD7445A38','ARCHIVED','2025-10-29 06:57:00',0),
+('2025_10_30_00_auth.sql','BEBD6BC06B857C182BAD8A0DCAAF5B6AFEA2DFE7','RELEASED','2025-10-30 18:24:07',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/auth/master/2025_10_30_00_auth.sql b/sql/updates/auth/master/2025_10_30_00_auth.sql
new file mode 100644
index 00000000000..7ecd1703661
--- /dev/null
+++ b/sql/updates/auth/master/2025_10_30_00_auth.sql
@@ -0,0 +1,23 @@
+DELETE FROM `build_info` WHERE `build` IN (64154);
+INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`) VALUES
+(64154,11,2,5,NULL);
+
+DELETE FROM `build_auth_key` WHERE `build`=64154 AND `platform`='Mac' AND `arch`='A64' AND `type`='WoW';
+DELETE FROM `build_auth_key` WHERE `build`=64154 AND `platform`='Mac' AND `arch`='A64' AND `type`='WoWC';
+DELETE FROM `build_auth_key` WHERE `build`=64154 AND `platform`='Mac' AND `arch`='x64' AND `type`='WoW';
+DELETE FROM `build_auth_key` WHERE `build`=64154 AND `platform`='Mac' AND `arch`='x64' AND `type`='WoWC';
+DELETE FROM `build_auth_key` WHERE `build`=64154 AND `platform`='Win' AND `arch`='A64' AND `type`='WoW';
+DELETE FROM `build_auth_key` WHERE `build`=64154 AND `platform`='Win' AND `arch`='x64' AND `type`='WoW';
+DELETE FROM `build_auth_key` WHERE `build`=64154 AND `platform`='Win' AND `arch`='x64' AND `type`='WoWC';
+INSERT INTO `build_auth_key` (`build`,`platform`,`arch`,`type`,`key`) VALUES
+(64154,'Mac','A64','WoW',0x2B47687B97FB51EFCC28274BF094EF7B),
+(64154,'Mac','A64','WoWC',0x676F3B5CD92799B5CE6ECBFD42EBBC96),
+(64154,'Mac','x64','WoW',0xD39F3B03CD34DC2CDDB7173EA9DA008E),
+(64154,'Mac','x64','WoWC',0x410B672FD200829F2B39E91CA637DDBD),
+(64154,'Win','A64','WoW',0xBDE661AFFD07520A536913612098913A),
+(64154,'Win','x64','WoW',0x205D71769E2A1C2C04516A5CE36B35C2),
+(64154,'Win','x64','WoWC',0x38F784495ED0129FF391B27EC34548E0);
+
+UPDATE `realmlist` SET `gamebuild`=64154 WHERE `gamebuild`=63906;
+
+ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '64154';
diff --git a/sql/updates/world/master/2025_10_31_00_world.sql b/sql/updates/world/master/2025_10_31_00_world.sql
new file mode 100644
index 00000000000..dc73e4691e5
--- /dev/null
+++ b/sql/updates/world/master/2025_10_31_00_world.sql
@@ -0,0 +1,491 @@
+SET @CGUID := 6005889;
+SET @OGUID := 6002968;
+SET @SPAWN_GROUP := 1278;
+
+DELETE FROM `battleground_scripts` WHERE `MapId` = 1505 AND `BattlemasterListId` = 0;
+INSERT INTO `battleground_scripts` (`MapId`, `BattlemasterListId`, `ScriptName`) VALUES
+(1505, 0, 'arena_nagrand_arena_legion');
+
+DELETE FROM `battleground_template` WHERE `ID` = 809;
+INSERT INTO `battleground_template` (`ID`, `AllianceStartLoc`, `HordeStartLoc`, `StartMaxDist`, `Weight`, `Comment`) VALUES
+(809, 5126, 5127, 0, 1, 'Nagrand Arena (Legion)');
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (115069 /*115069 (Frostwolf Leader) - Mod Scale Increase*/, 115070 /*115070 (Frostwolf Grunt) - Mod Scale Increase*/, 117079 /*117079 (Warsong Grunt) - Mod Scale Increase*/, 115077 /*115077 (Warsong Leader) - Mod Scale Increase*/, 117078 /*117078 (Frostwolf Grunt) - Mod Scale Increase*/, 115076 /*115076 (Warsong Grunt) - Mod Scale Increase*/, 115107 /*115107 (Warsong Rider)*/, 115068 /*115068 (Frostwolf Warrior) - Mod Scale Increase*/, 114925 /*114925 (Warsong Warrior) - Mod Scale Increase*/);
+INSERT INTO `creature_template_addon` (`entry`, `PathId`, `mount`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvpFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES
+(115069, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '228832'), -- 115069 (Frostwolf Leader) - Mod Scale Increase
+(115070, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '228832'), -- 115070 (Frostwolf Grunt) - Mod Scale Increase
+(117079, 0, 0, 0, 0, 0, 1, 0, 0, 12265, 0, 0, 0, '228832'), -- 117079 (Warsong Grunt) - Mod Scale Increase
+(115077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '228832'), -- 115077 (Warsong Leader) - Mod Scale Increase
+(117078, 0, 0, 0, 0, 0, 1, 0, 0, 12265, 0, 0, 0, '228832'), -- 117078 (Frostwolf Grunt) - Mod Scale Increase
+(115076, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '228832'), -- 115076 (Warsong Grunt) - Mod Scale Increase
+(115107, 0, 58437, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- 115107 (Warsong Rider)
+(115068, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '228832'), -- 115068 (Frostwolf Warrior) - Mod Scale Increase
+(114925, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '228832'); -- 114925 (Warsong Warrior) - Mod Scale Increase
+
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+79;
+INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `MovementType`, `npcflag`, `unit_flags`, `unit_flags2`, `unit_flags3`, `VerifiedBuild`) VALUES
+(@CGUID+0, 115109, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1983.7882080078125, 6555.86376953125, 11.92982959747314453, 5.646188259124755859, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frost Wolf (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+1, 114925, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2090.203125, 6684.30029296875, 36.39992141723632812, 5.586688518524169921, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+2, 114925, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2083.15283203125, 6693.14599609375, 36.459747314453125, 5.482541084289550781, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+3, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2033.7535400390625, 6593.68212890625, 37.32933807373046875, 2.020286321640014648, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+4, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2036.298583984375, 6598.7587890625, 36.37642288208007812, 1.606918931007385253, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+5, 115107, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2085.64111328125, 6724.33349609375, 5.642350673675537109, 2.475842714309692382, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Rider (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+6, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2080.58154296875, 6707.41650390625, 37.98035812377929687, 5.29676055908203125, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+7, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2048.584716796875, 6713.5810546875, 36.671661376953125, 3.84355783462524414, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+8, 115083, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2074.132080078125, 6701.21337890625, 36.65122222900390625, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Orc Drum (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+9, 117078, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2019.890625, 6601.92529296875, 36.59801864624023437, 1.97403717041015625, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+10, 115109, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1974.673583984375, 6563.82275390625, 10.41519355773925781, 5.470674514770507812, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frost Wolf (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+11, 115086, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2040.5035400390625, 6699.978515625, 12.70759105682373046, 0, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Adder (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+12, 115087, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2101.041015625, 6620.8330078125, 12.81133079528808593, 1.945276856422424316, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Rat (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+13, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2124.87841796875, 6806.29052734375, -3.57203102111816406, 1.430661678314208984, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+14, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2190.349609375, 6705.7587890625, -2.50267410278320312, 2.206266164779663085, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+15, 115107, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2092.30908203125, 6741.259765625, -0.30584883689880371, 2.307210445404052734, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Rider (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+16, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2061.663330078125, 6719.10400390625, 38.593536376953125, 4.878993034362792968, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+17, 115093, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2172.850830078125, 6872.93212890625, -7.75903129577636718, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Clefthoof (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+18, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2011.4014892578125, 6699.53466796875, 41.89958953857421875, 0.238513410091400146, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+19, 115083, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2020.18408203125, 6603.134765625, 36.60158538818359375, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Orc Drum (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+20, 115097, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2160.632568359375, 6762.97119140625, -3.51956677436828613, 5.644862174987792968, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Tortured Earth Spirit (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+21, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2013.4989013671875, 6499.1220703125, 15.67569828033447265, 3.763102293014526367, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+22, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1952.0186767578125, 6482.5771484375, 19.22262191772460937, 0.890564322471618652, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+23, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2060.736083984375, 6716.12939453125, 38.04050827026367187, 4.83701944351196289, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+24, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2087.7900390625, 6704.9912109375, 38.69394683837890625, 5.445136070251464843, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+25, 115093, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2152.86279296875, 6785.4462890625, -3.96072316169738769, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Clefthoof (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+26, 115077, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2071.114501953125, 6704.0380859375, 36.58251953125, 5.143953323364257812, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Leader (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+27, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2086.132080078125, 6694.68994140625, 36.76923370361328125, 0.681179642677307128, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+28, 115093, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1976.4752197265625, 6475.72265625, 22.50014686584472656, 1.997747063636779785, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Clefthoof (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+29, 117078, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2014.5, 6604.8212890625, 36.60653305053710937, 2.044155120849609375, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+30, 117079, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2068.241455078125, 6706.48291015625, 36.60012435913085937, 5.132005214691162109, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+31, 115083, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2067.71875, 6705.06103515625, 36.59103012084960937, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Orc Drum (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+32, 115087, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1998.9381103515625, 6679.89697265625, 13.0044870376586914, 4.302520751953125, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Rat (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+33, 117079, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2074.857666015625, 6702.384765625, 36.62760162353515625, 5.293087005615234375, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+34, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2240.287353515625, 6706.859375, -1.82799863815307617, 2.036637306213378906, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+35, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1840.8455810546875, 6481.48388671875, 23.22997283935546875, 4.051688671112060546, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+36, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1904.4376220703125, 6460.05712890625, 29.12241554260253906, 3.937356948852539062, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+37, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2093.68359375, 6662.87841796875, 41.90743637084960937, 2.240368366241455078, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+38, 115093, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1928.5123291015625, 6489.83349609375, 19.37971305847167968, 6.153987884521484375, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Clefthoof (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+39, 115093, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2243.385498046875, 6737.5146484375, -5.29166126251220703, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Clefthoof (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+40, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2053.3056640625, 6714.94287109375, 37.32355499267578125, 4.961896419525146484, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+41, 115093, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1935.7216796875, 6450.81201171875, 26.82182884216308593, 5.976571083068847656, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Clefthoof (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+42, 115097, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2145.372314453125, 6816.552734375, -6.32551097869873046, 2.934223651885986328, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Tortured Earth Spirit (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+43, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2006.8836669921875, 6602.23291015625, 37.8780364990234375, 2.231958627700805664, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+44, 115097, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2155.890380859375, 6736.73046875, -5.67094278335571289, 2.03881072998046875, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Tortured Earth Spirit (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+45, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 1, -1982.3367919921875, 6556.9912109375, 11.66410064697265625, 5.717782020568847656, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+46, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2194.1025390625, 6726.0283203125, -6.64905738830566406, 4.893116474151611328, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+47, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1925.601318359375, 6409.798828125, 39.44009780883789062, 0.471566617488861083, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+48, 115093, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2267.90625, 6718.73779296875, -2.2794501781463623, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Clefthoof (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+49, 115076, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2066.01904296875, 6711.17724609375, 37.22791290283203125, 4.956846237182617187, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+50, 115093, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2169.9462890625, 6703.43603515625, -2.01279377937316894, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Clefthoof (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+51, 114925, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2055.350830078125, 6721.10400390625, 38.74813461303710937, 5.124923229217529296, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+52, 115070, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2070.052734375, 6611.05615234375, 41.89958953857421875, 2.905430793762207031, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+53, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2001.8697509765625, 6617.38720703125, 36.54923248291015625, 2.112817764282226562, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+54, 115083, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2015.0660400390625, 6605.73095703125, 36.59558868408203125, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Orc Drum (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+55, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1996.125, 6611.376953125, 38.0279388427734375, 2.205353975296020507, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+56, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1999.2708740234375, 6604.03466796875, 38.675506591796875, 2.205353975296020507, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+57, 115086, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2017.111572265625, 6599.4423828125, 12.32046890258789062, 0.916941821575164794, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Adder (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+58, 115087, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2067.678466796875, 6707.74169921875, 11.95703125, 1.383979082107543945, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Rat (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+59, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2001.2847900390625, 6588.96435546875, 11.84334468841552734, 3.580499649047851562, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+60, 115091, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1912.360595703125, 6485.26708984375, 21.90256881713867187, 3.82457280158996582, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elekk (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+61, 114925, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2084.1494140625, 6700.19775390625, 37.39508819580078125, 5.482541084289550781, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+62, 114925, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2079.6806640625, 6703.87939453125, 37.3070220947265625, 5.427005290985107421, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+63, 115070, 1505, 7822, 7822, '0', '0', 0, 0, 1, -1990.857421875, 6646.03515625, 42.10271453857421875, 5.413291454315185546, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+64, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2031.6927490234375, 6587.75, 38.73274993896484375, 1.89630281925201416, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+65, 114925, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2057.56591796875, 6707.642578125, 36.4822540283203125, 5.03397989273071289, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+66, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2003.7882080078125, 6609.2646484375, 37.32154464721679687, 2.205353975296020507, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+67, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2004.1910400390625, 6588.15625, 11.97482681274414062, 0.253675132989883422, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+68, 115070, 1505, 7822, 7822, '0', '0', 0, 0, 1, -1995.7498779296875, 6618.0712890625, 36.80854415893554687, 2.520666837692260742, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+69, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -1997.63720703125, 6622.24755859375, 36.61750411987304687, 2.737583637237548828, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+70, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2019.8125, 6591.63037109375, 38.4921722412109375, 1.839002370834350585, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+71, 115069, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2017.87158203125, 6604.109375, 36.56983184814453125, 1.938249707221984863, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Leader (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+72, 115107, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2099.25341796875, 6731.22900390625, -0.28424787521362304, 2.701325178146362304, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Rider (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@CGUID+73, 114925, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2091.2431640625, 6698.6865234375, 38.03900146484375, 5.482541084289550781, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+74, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2026.626708984375, 6592.4755859375, 38.04468536376953125, 1.998313069343566894, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+75, 114925, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2052.267333984375, 6709.453125, 36.46075057983398437, 4.662768840789794921, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Warsong Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+76, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 1, -1976.8992919921875, 6562.61181640625, 10.78506660461425781, 5.490165233612060546, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+77, 115070, 1505, 7822, 7822, '0', '0', 0, 0, 1, -2036.46435546875, 6595.59033203125, 36.6315155029296875, 0.324676960706710815, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Grunt (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+78, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2009.857666015625, 6610.12744140625, 36.55633163452148437, 2.205384016036987304, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+(@CGUID+79, 115068, 1505, 7822, 7822, '0', '0', 0, 0, 0, -2040.2882080078125, 6598.5087890625, 36.28379058837890625, 1.425915002822875976, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305); -- Frostwolf Warrior (Area: Nagrand Arena - Difficulty: 0) CreateObject1 (Auras: 228832 - Mod Scale Increase)
+
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115069 AND `DifficultyID`=0); -- 115069 (Frostwolf Leader) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115070 AND `DifficultyID`=0); -- 115070 (Frostwolf Grunt) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=117079 AND `DifficultyID`=0); -- 117079 (Warsong Grunt) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115077 AND `DifficultyID`=0); -- 115077 (Warsong Leader) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115097 AND `DifficultyID`=0); -- 115097 (Tortured Earth Spirit) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115093 AND `DifficultyID`=0); -- 115093 (Clefthoof) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115091 AND `DifficultyID`=0); -- 115091 (Elekk) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115086 AND `DifficultyID`=0); -- 115086 (Adder) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=117078 AND `DifficultyID`=0); -- 117078 (Frostwolf Grunt) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x20000100, `VerifiedBuild`=63305 WHERE (`Entry`=115083 AND `DifficultyID`=0); -- 115083 (Orc Drum) - Sessile, Floating
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115076 AND `DifficultyID`=0); -- 115076 (Warsong Grunt) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115107 AND `DifficultyID`=0); -- 115107 (Warsong Rider) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115068 AND `DifficultyID`=0); -- 115068 (Frostwolf Warrior) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=114925 AND `DifficultyID`=0); -- 114925 (Warsong Warrior) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=115109 AND `DifficultyID`=0); -- 115109 (Frost Wolf) - CanSwim
+
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=115069; -- Frostwolf Leader
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry` IN (115070, 117078); -- Frostwolf Grunt
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry` IN (117079, 115076); -- Warsong Grunt
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=115077; -- Warsong Leader
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x8000000 WHERE `entry`=115097; -- Tortured Earth Spirit
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x8000000 WHERE `entry`=115093; -- Clefthoof
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x4000000 WHERE `entry`=115091; -- Elekk
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=115086; -- Adder
+UPDATE `creature_template` SET `unit_flags`=0x2000300, `unit_flags3`=0x40000000 WHERE `entry`=115083; -- Orc Drum
+UPDATE `creature_template` SET `unit_flags`=0x2000040 WHERE `entry`=115107; -- Warsong Rider
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=115068; -- Frostwolf Warrior
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=114925; -- Warsong Warrior
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags2`=0x800 WHERE `entry`=115109; -- Frost Wolf
+
+UPDATE `gameobject_template_addon` SET `flags`=0x20 WHERE `entry` IN (260528, 260527); -- Gate
+
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+79;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
+(@OGUID+0, 3920, 1505, 7822, 7822, '0', '0', 0, -2972.7275390625, 6395.17333984375, 96.247467041015625, 0.445056945085525512, 0, 0, 0.220696449279785156, 0.975342512130737304, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+1, 3921, 1505, 7822, 7822, '0', '0', 0, -2977.84375, 6399.0615234375, 96.247467041015625, 2.897245407104492187, 0, 0, 0.99254608154296875, 0.121869951486587524, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+2, 3926, 1505, 7822, 7822, '0', '0', 0, -2966.902587890625, 6372.12841796875, 96.25653076171875, 2.024578809738159179, 0, 0, 0.848047256469726562, 0.529920578002929687, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+3, 3927, 1505, 7822, 7822, '0', '0', 0, -2971.53564453125, 6381.42626953125, 96.25653076171875, 2.434729337692260742, 0, 0, 0.938190460205078125, 0.346119433641433715, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+4, 3925, 1505, 7822, 7822, '0', '0', 0, -2976.98876953125, 6359.88818359375, 96.3812255859375, 2.452184438705444335, 0, 0, 0.941175460815429687, 0.337918221950531005, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+5, 182155, 1505, 7822, 7822, '0', '0', 0, -2803.076904296875, 6466.1484375, 64.8544158935546875, 5.811948776245117187, 0, 0, -0.2334442138671875, 0.9723702073097229, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+6, 182158, 1505, 7822, 7822, '0', '0', 0, -2788.743408203125, 6456.1123046875, 64.8544158935546875, 5.811948776245117187, 0, 0, -0.2334442138671875, 0.9723702073097229, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+7, 182159, 1505, 7822, 7822, '0', '0', 0, -2799.961181640625, 6455.41455078125, 78.30356597900390625, 0.549776852130889892, 0, 0, 0.271439552307128906, 0.962455451488494873, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+8, 182156, 1505, 7822, 7822, '0', '0', 0, -2786.304443359375, 6469.669921875, 113.1583709716796875, 5.672322273254394531, 0, 0, -0.3007049560546875, 0.953717231750488281, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+9, 182157, 1505, 7822, 7822, '0', '0', 0, -2787.479248046875, 6472.81689453125, 64.8544158935546875, 5.811948776245117187, 0, 0, -0.2334442138671875, 0.9723702073097229, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+10, 182162, 1505, 7822, 7822, '0', '0', 0, -2795.437744140625, 6456.62646484375, 113.1583709716796875, 0.191985160112380981, 0, 0, 0.095845222473144531, 0.995396256446838378, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+11, 182160, 1505, 7822, 7822, '0', '0', 0, -2798.31689453125, 6475.41748046875, 78.30356597900390625, 0.6370430588722229, 0, 0, 0.313162803649902343, 0.949699461460113525, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+12, 182161, 1505, 7822, 7822, '0', '0', 0, -2781.51171875, 6463.513671875, 78.30356597900390625, 0.479964137077331542, 0, 0, 0.237685203552246093, 0.971342265605926513, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+13, 260450, 1505, 7822, 7822, '0', '0', 0, -2102.302490234375, 6636.31689453125, 36.524444580078125, 0.318290919065475463, -0.00754261016845703, -0.00261402130126953, 0.158458709716796875, 0.987333357334136962, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench014 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+14, 260451, 1505, 7822, 7822, '0', '0', 0, -2103.8095703125, 6640.89111328125, 36.441436767578125, 0.318289607763290405, -0.00714921951293945, -0.00247764587402343, 0.158459663391113281, 0.987336456775665283, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench015 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+15, 260448, 1505, 7822, 7822, '0', '0', 0, -2099.73095703125, 6628.4404296875, 36.5721282958984375, 0.318270504474639892, 0, 0, 0.158464431762695312, 0.987364709377288818, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool037 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+16, 260449, 1505, 7822, 7822, '0', '0', 0, -2100.788330078125, 6631.720703125, 36.55778121948242187, 0.318271011114120483, 0.002106189727783203, 0.000729560852050781, 0.158463478088378906, 0.987362325191497802, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench013 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+17, 260454, 1505, 7822, 7822, '0', '0', 0, -2106.9091796875, 6639.86962890625, 37.15923309326171875, 0.318270504474639892, 0, 0, 0.158464431762695312, 0.987364709377288818, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench009 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+18, 260455, 1505, 7822, 7822, '0', '0', 0, -2105.402099609375, 6635.29541015625, 37.14840316772460937, 0.318272054195404052, -0.0016646385192871, -0.00057697296142578, 0.158464431762695312, 0.987363100051879882, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench008 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+19, 260452, 1505, 7822, 7822, '0', '0', 0, -2104.8642578125, 6644.021484375, 36.38921356201171875, 0.318270504474639892, 0, 0, 0.158464431762695312, 0.987364709377288818, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool040 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+20, 260453, 1505, 7822, 7822, '0', '0', 0, -2107.96630859375, 6642.9990234375, 37.15330123901367187, 0.318270504474639892, 0, 0, 0.158464431762695312, 0.987364709377288818, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool041 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+21, 260458, 1505, 7822, 7822, '0', '0', 0, -2105.610595703125, 6626.50341796875, 37.92354583740234375, 0.318270504474639892, 0, 0, 0.158464431762695312, 0.987364709377288818, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool039 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+22, 260459, 1505, 7822, 7822, '0', '0', 0, -2106.65478515625, 6629.7822265625, 37.877166748046875, 0.318310946226119995, -0.01030635833740234, -0.00357246398925781, 0.15845489501953125, 0.987305939197540283, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench010 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+23, 260456, 1505, 7822, 7822, '0', '0', 0, -2103.887939453125, 6630.69970703125, 37.17110443115234375, 0.318280011415481567, 0.005214691162109375, 0.001807212829589843, 0.158461570739746093, 0.987349748611450195, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench007 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+24, 260457, 1505, 7822, 7822, '0', '0', 0, -2102.8330078125, 6627.41845703125, 37.18374252319335937, 0.318270504474639892, 0, 0, 0.158464431762695312, 0.987364709377288818, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool038 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+25, 260462, 1505, 7822, 7822, '0', '0', 0, -2110.744140625, 6642.083984375, 37.62420654296875, 0.318270504474639892, 0, 0, 0.158464431762695312, 0.987364709377288818, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool042 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+26, 260463, 1505, 7822, 7822, '0', '0', 0, -2093.8212890625, 6618.39306640625, 36.22134017944335937, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool001 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+27, 260460, 1505, 7822, 7822, '0', '0', 0, -2108.16845703125, 6634.37744140625, 37.77321243286132812, 0.318310946226119995, -0.01030635833740234, -0.00357246398925781, 0.15845489501953125, 0.987305939197540283, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench011 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+28, 260461, 1505, 7822, 7822, '0', '0', 0, -2109.675048828125, 6638.95068359375, 37.66974639892578125, 0.318310946226119995, -0.01030635833740234, -0.00357246398925781, 0.15845489501953125, 0.987305939197540283, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench012 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+29, 260466, 1505, 7822, 7822, '0', '0', 0, -2096.29345703125, 6611.82080078125, 38.01398468017578125, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench006 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+30, 260467, 1505, 7822, 7822, '0', '0', 0, -2094.088134765625, 6613.72021484375, 37.16115570068359375, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench001 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+31, 260464, 1505, 7822, 7822, '0', '0', 0, -2096.296142578125, 6616.26171875, 37.18374252319335937, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool012 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+32, 260465, 1505, 7822, 7822, '0', '0', 0, -2098.51220703125, 6614.35302734375, 38.08810043334960937, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool018 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+33, 260470, 1505, 7822, 7822, '0', '0', 0, -2090.742919921875, 6609.8359375, 37.16115570068359375, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench002 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+34, 3842, 1505, 7822, 7822, '0', '0', 0, -2892.668701171875, 6478.32861328125, 87.28089141845703125, 6.204647541046142578, 0, 0, -0.03925895690917968, 0.999229073524475097, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+35, 260471, 1505, 7822, 7822, '0', '0', 0, -2092.9482421875, 6607.9365234375, 38.01398468017578125, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench005 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+36, 3843, 1505, 7822, 7822, '0', '0', 0, -2888.712890625, 6467.3125, 101.672637939453125, 5.122544288635253906, 0, 0, -0.54829216003417968, 0.836286902427673339, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+37, 260468, 1505, 7822, 7822, '0', '0', 0, -2091.654052734375, 6615.81640625, 36.31757354736328125, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench004 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+38, 3840, 1505, 7822, 7822, '0', '0', 0, -2897.861572265625, 6466.7685546875, 82.77323150634765625, 6.204647541046142578, 0, 0, -0.03925895690917968, 0.999229073524475097, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+39, 260469, 1505, 7822, 7822, '0', '0', 0, -2088.308837890625, 6611.93212890625, 36.31757354736328125, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Bench003 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+40, 3841, 1505, 7822, 7822, '0', '0', 0, -2889.394775390625, 6466.1396484375, 82.77323150634765625, 4.668757438659667968, 0, 0, -0.72236347198486328, 0.691513597965240478, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+41, 260474, 1505, 7822, 7822, '0', '0', 0, -2086.165283203125, 6609.5029296875, 36.22134017944335937, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool006 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+42, 260472, 1505, 7822, 7822, '0', '0', 0, -2090.856201171875, 6605.46337890625, 38.08810043334960937, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool015 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+43, 3844, 1505, 7822, 7822, '0', '0', 0, -2898.41552734375, 6468.00390625, 101.636993408203125, 4.869470596313476562, 0, 0, -0.64944744110107421, 0.760406434535980224, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+44, 260473, 1505, 7822, 7822, '0', '0', 0, -2088.64013671875, 6607.37158203125, 37.18374252319335937, 0.710968554019927978, 0, 0, 0.348044395446777343, 0.937478065490722656, 7200, 255, 1, 63305), -- Doodad_6OC_OrcClans_Stool009 (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+45, 3845, 1505, 7822, 7822, '0', '0', 0, -2884.7822265625, 6453.44091796875, 82.77323150634765625, 0.593411982059478759, 0, 0, 0.292371749877929687, 0.956304728984832763, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+46, 174953, 1505, 7822, 7822, '0', '0', 0, -2958.7744140625, 6349.568359375, 96.247467041015625, 1.614428043365478515, 0, 0, 0.722363471984863281, 0.691513597965240478, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+47, 184303, 1505, 7822, 7822, '0', '0', 0, -2518.51025390625, 7360.1025390625, 10.62232398986816406, 4.057007312774658203, 0, 0, -0.89706802368164062, 0.441892504692077636, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+48, 260527, 1505, 7822, 7822, '0', '0', 0, -2067.72216796875, 6699.3857421875, 11.90679931640625, 2.0635986328125, 0, 0, 0.858223915100097656, 0.513275444507598876, 7200, 255, 1, 63305), -- Gate (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+49, 260528, 1505, 7822, 7822, '0', '0', 0, -2019.23779296875, 6609.09765625, 11.90679931640625, 5.205194473266601562, 0, 0, -0.51327419281005859, 0.858224689960479736, 7200, 255, 1, 63305), -- Gate (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+50, 182155, 1505, 7822, 7822, '0', '0', 0, -2999.412109375, 6515.7041015625, 99.32613372802734375, 2.468022584915161132, 0, 0, 0.943821907043457031, 0.330454498529434204, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+51, 3839, 1505, 7822, 7822, '0', '0', 0, -2903.89111328125, 6454.92626953125, 82.77323150634765625, 0.593411982059478759, 0, 0, 0.292371749877929687, 0.956304728984832763, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+52, 182159, 1505, 7822, 7822, '0', '0', 0, -3000.30712890625, 6526.84521484375, 112.7752761840820312, 3.489048957824707031, 0, 0, -0.98494720458984375, 0.172855526208877563, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+53, 3915, 1505, 7822, 7822, '0', '0', 0, -2982.453125, 6376.74755859375, 96.3812255859375, 1.474801421165466308, 0, 0, 0.672366142272949218, 0.740218758583068847, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+54, 3913, 1505, 7822, 7822, '0', '0', 0, -2965.822021484375, 6361.5126953125, 96.25653076171875, 1.631881952285766601, 0, 0, 0.72837066650390625, 0.685183286666870117, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+55, 3919, 1505, 7822, 7822, '0', '0', 0, -2960.926513671875, 6343.6005859375, 96.247467041015625, 5.445427894592285156, 0, 0, -0.40673637390136718, 0.913545548915863037, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+56, 3934, 1505, 7822, 7822, '0', '0', 0, -2974.97802734375, 6340.20166015625, 96.25653076171875, 0.863936781883239746, 0, 0, 0.418659210205078125, 0.908143401145935058, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+57, 3932, 1505, 7822, 7822, '0', '0', 0, -2991.244384765625, 6394.19677734375, 96.247833251953125, 3.141592741012573242, 0, 0, -1, 0, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+58, 185136, 1505, 7822, 7822, '0', '0', 0, -2739.054443359375, 7339.7470703125, 43.42174530029296875, 2.67023324966430664, 0, 0, 0.972355842590332031, 0.23350401222705841, 7200, 255, 1, 63305), -- Cookpot (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+59, 182158, 1505, 7822, 7822, '0', '0', 0, -3011.43603515625, 6528.416015625, 99.32613372802734375, 2.468022584915161132, 0, 0, 0.943821907043457031, 0.330454498529434204, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+60, 182162, 1505, 7822, 7822, '0', '0', 0, -3004.98193359375, 6526.5673828125, 147.630096435546875, 3.131257534027099609, 0, 0, 0.999986648559570312, 0.005167482886463403, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+61, 182160, 1505, 7822, 7822, '0', '0', 0, -3005.937255859375, 6507.58056640625, 112.7752761840820312, 3.576314449310302734, 0, 0, -0.97646999359130859, 0.215653300285339355, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+62, 182161, 1505, 7822, 7822, '0', '0', 0, -3020.007568359375, 6522.619140625, 112.7752761840820312, 3.419228076934814453, 0, 0, -0.99038028717041015, 0.138372182846069335, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+63, 182156, 1505, 7822, 7822, '0', '0', 0, -3016.550048828125, 6515.625, 147.630096435546875, 2.328395366668701171, 0, 0, 0.918471336364746093, 0.395487546920776367, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+64, 3912, 1505, 7822, 7822, '0', '0', 0, -2984.95361328125, 6366.64013671875, 96.4288330078125, 1.867502212524414062, 0, 0, 0.803856849670410156, 0.594822824001312255, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+65, 182157, 1505, 7822, 7822, '0', '0', 0, -3016.03125, 6512.30615234375, 99.32613372802734375, 2.468022584915161132, 0, 0, 0.943821907043457031, 0.330454498529434204, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+66, 3922, 1505, 7822, 7822, '0', '0', 0, -3007.69287109375, 6368.62060546875, 96.3812255859375, 1.474801421165466308, 0, 0, 0.672366142272949218, 0.740218758583068847, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+67, 3923, 1505, 7822, 7822, '0', '0', 0, -3010.153564453125, 6388.41552734375, 96.25653076171875, 4.092801570892333984, 0, 0, -0.88901615142822265, 0.457875818014144897, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+68, 3924, 1505, 7822, 7822, '0', '0', 0, -3002.31103515625, 6351.923828125, 96.3812255859375, 2.617989301681518554, 0, 0, 0.965925216674804687, 0.258821308612823486, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+69, 3931, 1505, 7822, 7822, '0', '0', 0, -2993.4560546875, 6334.37255859375, 96.25653076171875, 6.230826377868652343, 0, 0, -0.02617645263671875, 0.999657332897186279, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+70, 3929, 1505, 7822, 7822, '0', '0', 0, -3000.080810546875, 6362.01513671875, 96.4288330078125, 1.867502212524414062, 0, 0, 0.803856849670410156, 0.594822824001312255, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+71, 3917, 1505, 7822, 7822, '0', '0', 0, -3012.218994140625, 6333.49853515625, 96.247467041015625, 3.874636650085449218, 0, 0, -0.9335794448852539, 0.358370482921600341, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+72, 3930, 1505, 7822, 7822, '0', '0', 0, -3018.06005859375, 6356.88427734375, 96.25653076171875, 5.12254190444946289, 0, 0, -0.54829311370849609, 0.83628624677658081, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+73, 3928, 1505, 7822, 7822, '0', '0', 0, -3013.137939453125, 6347.3759765625, 96.25653076171875, 5.506513595581054687, 0, 0, -0.37864875793457031, 0.925540447235107421, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+74, 3933, 1505, 7822, 7822, '0', '0', 0, -3018.6201171875, 6369.68017578125, 96.25653076171875, 4.651303291320800781, 0, 0, -0.72837066650390625, 0.685183286666870117, 7200, 255, 1, 63305), -- Blazing Fire (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+75, 3914, 1505, 7822, 7822, '0', '0', 0, -3026.064208984375, 6378.92041015625, 96.247467041015625, 4.756022453308105468, 0, 0, -0.6915130615234375, 0.722363948822021484, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+76, 3918, 1505, 7822, 7822, '0', '0', 0, -3007.2529296875, 6329.82958984375, 96.247467041015625, 0.043632153421640396, 0, 0, 0.021814346313476562, 0.99976205825805664, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+77, 3916, 1505, 7822, 7822, '0', '0', 0, -3023.7890625, 6384.9306640625, 96.247467041015625, 2.303830623626708984, 0, 0, 0.913544654846191406, 0.406738430261611938, 7200, 255, 1, 63305), -- Burning Embers (Area: Nagrand Arena - Difficulty: 0) CreateObject1
+(@OGUID+78, 184663, 1505, 7822, 7822, '0', '0', 0, -2092.829833984375, 6628.21630859375, 12.82109546661376953, 0, 0, 0, 0, 1, 360, 255, 1, 63305), -- Shadow Sight (Area: Nagrand Arena - Difficulty: 0) CreateObject2
+(@OGUID+79, 184663, 1505, 7822, 7822, '0', '0', 0, -1994.892333984375, 6680.19775390625, 13.06343936920166015, 0, 0, 0, 0, 1, 360, 255, 1, 63305); -- Shadow Sight (Area: Nagrand Arena - Difficulty: 0) CreateObject2
+
+DELETE FROM `gameobject_addon` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+79;
+INSERT INTO `gameobject_addon` (`guid`, `parent_rotation0`, `parent_rotation1`, `parent_rotation2`, `parent_rotation3`, `WorldEffectID`, `AIAnimKitID`) VALUES
+(@OGUID+0, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Burning Embers
+(@OGUID+1, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Burning Embers
+(@OGUID+2, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+3, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+4, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+5, 0, 0, 0.887010812759399414, -0.4617486298084259, 0, 0), -- Blazing Fire
+(@OGUID+6, 0, 0, 0.887010812759399414, -0.4617486298084259, 0, 0), -- Blazing Fire
+(@OGUID+7, 0, 0, 0.887010812759399414, -0.4617486298084259, 0, 0), -- Blazing Fire
+(@OGUID+8, 0, 0, 0.887010812759399414, -0.4617486298084259, 0, 0), -- Blazing Fire
+(@OGUID+9, 0, 0, 0.887010812759399414, -0.4617486298084259, 0, 0), -- Blazing Fire
+(@OGUID+10, 0, 0, 0.887010812759399414, -0.4617486298084259, 0, 0), -- Blazing Fire
+(@OGUID+11, 0, 0, 0.887010812759399414, -0.4617486298084259, 0, 0), -- Blazing Fire
+(@OGUID+12, 0, 0, 0.887010812759399414, -0.4617486298084259, 0, 0), -- Blazing Fire
+(@OGUID+13, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench014
+(@OGUID+14, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench015
+(@OGUID+15, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool037
+(@OGUID+16, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench013
+(@OGUID+17, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench009
+(@OGUID+18, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench008
+(@OGUID+19, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool040
+(@OGUID+20, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool041
+(@OGUID+21, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool039
+(@OGUID+22, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench010
+(@OGUID+23, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench007
+(@OGUID+24, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool038
+(@OGUID+25, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool042
+(@OGUID+26, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool001
+(@OGUID+27, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench011
+(@OGUID+28, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench012
+(@OGUID+29, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench006
+(@OGUID+30, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench001
+(@OGUID+31, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool012
+(@OGUID+32, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool018
+(@OGUID+33, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench002
+(@OGUID+34, 0, 0, -0.73432236909866333, 0.678800940513610839, 0, 0), -- Burning Embers
+(@OGUID+35, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench005
+(@OGUID+36, 0, 0, -0.73432236909866333, 0.678800940513610839, 0, 0), -- Burning Embers
+(@OGUID+37, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench004
+(@OGUID+38, 0, 0, -0.73432236909866333, 0.678800940513610839, 0, 0), -- Burning Embers
+(@OGUID+39, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Bench003
+(@OGUID+40, 0, 0, -0.73432236909866333, 0.678800940513610839, 0, 0), -- Burning Embers
+(@OGUID+41, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool006
+(@OGUID+42, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool015
+(@OGUID+43, 0, 0, -0.73432236909866333, 0.678800940513610839, 0, 0), -- Burning Embers
+(@OGUID+44, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Doodad_6OC_OrcClans_Stool009
+(@OGUID+45, 0, 0, -0.73432236909866333, 0.678800940513610839, 0, 0), -- Burning Embers
+(@OGUID+46, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Burning Embers
+(@OGUID+47, 0, 0, 0.441892117261886596, 0.897068262100219726, 0, 0), -- Blazing Fire
+(@OGUID+48, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Gate
+(@OGUID+49, 0, 0, 0.969796299934387207, -0.24391628801822662, 0, 0), -- Gate
+(@OGUID+50, 0, 0, 0.36980605125427246, 0.929108977317810058, 0, 0), -- Blazing Fire
+(@OGUID+51, 0, 0, -0.73432236909866333, 0.678800940513610839, 0, 0), -- Burning Embers
+(@OGUID+52, 0, 0, 0.36980605125427246, 0.929108977317810058, 0, 0), -- Blazing Fire
+(@OGUID+53, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+54, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+55, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Burning Embers
+(@OGUID+56, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+57, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+58, 0, 0, 0.97813570499420166, 0.207967907190322875, 0, 0), -- Cookpot
+(@OGUID+59, 0, 0, 0.36980605125427246, 0.929108977317810058, 0, 0), -- Blazing Fire
+(@OGUID+60, 0, 0, 0.36980605125427246, 0.929108977317810058, 0, 0), -- Blazing Fire
+(@OGUID+61, 0, 0, 0.36980605125427246, 0.929108977317810058, 0, 0), -- Blazing Fire
+(@OGUID+62, 0, 0, 0.36980605125427246, 0.929108977317810058, 0, 0), -- Blazing Fire
+(@OGUID+63, 0, 0, 0.36980605125427246, 0.929108977317810058, 0, 0), -- Blazing Fire
+(@OGUID+64, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+65, 0, 0, 0.36980605125427246, 0.929108977317810058, 0, 0), -- Blazing Fire
+(@OGUID+66, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+67, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+68, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+69, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+70, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+71, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Burning Embers
+(@OGUID+72, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+73, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+74, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Blazing Fire
+(@OGUID+75, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Burning Embers
+(@OGUID+76, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0), -- Burning Embers
+(@OGUID+77, 0, 0, 0.147809371352195739, 0.989015877246856689, 0, 0); -- Burning Embers
+
+DELETE FROM `spawn_group_template` WHERE `groupId` BETWEEN @SPAWN_GROUP+0 AND @SPAWN_GROUP+0;
+INSERT INTO `spawn_group_template` (`groupId`, `groupName`, `groupFlags`) VALUES
+(@SPAWN_GROUP+0, 'Nagrand Arena (Legion) - Shadow sight', 0x20);
+
+DELETE FROM `spawn_group` WHERE `groupId` BETWEEN @SPAWN_GROUP+0 AND @SPAWN_GROUP+0;
+INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`) VALUES
+(@SPAWN_GROUP, 1, @OGUID+78),
+(@SPAWN_GROUP, 1, @OGUID+79);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 33 AND `SourceEntry` BETWEEN @SPAWN_GROUP+0 AND @SPAWN_GROUP+0;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceEntry`, `SourceGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ScriptName`) VALUES
+(33, @SPAWN_GROUP, 0, 0, 0, 'condition_is_shadow_sight_enabled');
+
+SET @MOVERGUID := @CGUID+72;
+SET @ENTRY := 115107;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x01, NULL, 'Warsong Rider - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, -2081.4766, 6721.0654, 9.035518, NULL, 0),
+(@PATH, 1, -2086.2012, 6724.7734, 5.3653135, NULL, 0),
+(@PATH, 2, -2086.9883, 6725.3916, 4.613757, NULL, 0),
+(@PATH, 3, -2087.7754, 6726.01, 4.243466, NULL, 0),
+(@PATH, 4, -2092.165, 6729.9985, 1.7703848, NULL, 0),
+(@PATH, 5, -2098.8665, 6737.863, -1.403483, NULL, 3215);
+
+UPDATE `creature` SET `position_x`=-2081.4766, `position_y`=6721.0654, `position_z`=9.035518, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`, `auras`) VALUES
+(@MOVERGUID, @PATH, 1, '228832');
+
+SET @MOVERGUID := @CGUID+52;
+SET @ENTRY := 115070;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Frostwolf Grunt - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, -2067.4285, 6610.425, 41.89959, NULL, 0),
+(@PATH, 1, -2070.0527, 6611.056, 41.89959, NULL, 0),
+(@PATH, 2, -2072.677, 6611.6875, 41.89959, NULL, 0),
+(@PATH, 3, -2077.4722, 6608.053, 41.89959, NULL, 0),
+(@PATH, 4, -2077.4722, 6608.053, 41.89959, NULL, 0),
+(@PATH, 5, -2079.8196, 6603.165, 41.89959, NULL, 0),
+(@PATH, 6, -2077.0764, 6597.303, 41.89959, NULL, 0),
+(@PATH, 7, -2069.5364, 6593.737, 41.89959, NULL, 0),
+(@PATH, 8, -2062.9097, 6597.0957, 41.89959, NULL, 0),
+(@PATH, 9, -2061.4045, 6603.692, 41.89959, NULL, 0),
+(@PATH, 10, -2063.3906, 6608.8447, 41.89959, NULL, 0);
+
+UPDATE `creature` SET `position_x`=-2067.4285, `position_y`=6610.425, `position_z`=41.89959, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`, `auras`) VALUES
+(@MOVERGUID, @PATH, 1, '228832');
+
+SET @MOVERGUID := @CGUID+68;
+SET @ENTRY := 115070;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Frostwolf Grunt - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, -1995.9948, 6618.2466, 36.79883, NULL, 0),
+(@PATH, 1, -2012.0278, 6605.0625, 36.72482, NULL, 0),
+(@PATH, 2, -1995.9948, 6618.2466, 36.79883, NULL, 0),
+(@PATH, 3, -1991.4288, 6614.7734, 37.87625, NULL, 0);
+
+UPDATE `creature` SET `position_x`=-1995.9948, `position_y`=6618.2466, `position_z`=36.79883, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`, `auras`) VALUES
+(@MOVERGUID, @PATH, 1, '228832');
+
+SET @MOVERGUID := @CGUID+77;
+SET @ENTRY := 115070;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Frostwolf Grunt - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, -2038.1216, 6595.1084, 36.649426, NULL, 37),
+(@PATH, 1, -2021.0486, 6600.7812, 36.77132, NULL, 37);
+
+UPDATE `creature` SET `position_x`=-2038.1216, `position_y`=6595.1084, `position_z`=36.649426, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`, `auras`) VALUES
+(@MOVERGUID, @PATH, 1, '228832');
+
+SET @MOVERGUID := @CGUID+7;
+SET @ENTRY := 115076;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Warsong Grunt - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, -2049.2917, 6712.983, 36.64339, NULL, 0),
+(@PATH, 1, -2060.0815, 6709.8457, 36.61309, NULL, 0),
+(@PATH, 2, -2067.5676, 6707.783, 36.69522, NULL, 0),
+(@PATH, 3, -2060.1816, 6709.8184, 36.597572, NULL, 0),
+(@PATH, 4, -2049.2917, 6712.983, 36.64339, NULL, 0),
+(@PATH, 5, -2046.9774, 6714.94, 36.832428, NULL, 0),
+(@PATH, 6, -2046.9497, 6718.0166, 37.529026, NULL, 0);
+
+UPDATE `creature` SET `position_x`=-2049.2917, `position_y`=6712.983, `position_z`=36.64339, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`, `auras`) VALUES
+(@MOVERGUID, @PATH, 1, '228832');
+
+SET @MOVERGUID := @CGUID+37;
+SET @ENTRY := 115076;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Warsong Grunt - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, -2098.0989, 6668.4565, 41.95938, NULL, 0),
+(@PATH, 1, -2102.7622, 6670.21, 41.97126, NULL, 0),
+(@PATH, 2, -2108.0347, 6665.598, 42.29292, NULL, 0),
+(@PATH, 3, -2110.4705, 6655.403, 41.89959, NULL, 0),
+(@PATH, 4, -2103.073, 6650.6694, 41.91811, NULL, 0),
+(@PATH, 5, -2098.0208, 6651.752, 41.948643, NULL, 0),
+(@PATH, 6, -2092.816, 6656.836, 41.9653, NULL, 0),
+(@PATH, 7, -2093.0696, 6664.4854, 41.89959, NULL, 0);
+
+UPDATE `creature` SET `position_x`=-2098.0989, `position_y`=6668.4565, `position_z`=41.95938, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`, `auras`) VALUES
+(@MOVERGUID, @PATH, 1, '228832');
+
+SET @MOVERGUID := @CGUID+18;
+SET @ENTRY := 115076;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Warsong Grunt - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, -2098.0989, 6668.4565, 41.95938, NULL, 0),
+(@PATH, 1, -2102.7622, 6670.21, 41.97126, NULL, 0),
+(@PATH, 2, -2108.0347, 6665.598, 42.29292, NULL, 0),
+(@PATH, 3, -2110.4705, 6655.403, 41.89959, NULL, 0),
+(@PATH, 4, -2103.073, 6650.6694, 41.91811, NULL, 0),
+(@PATH, 5, -2098.0208, 6651.752, 41.948643, NULL, 0),
+(@PATH, 6, -2092.816, 6656.836, 41.9653, NULL, 0),
+(@PATH, 7, -2093.0696, 6664.4854, 41.89959, NULL, 0);
+
+UPDATE `creature` SET `position_x`=-2098.0989, `position_y`=6668.4565, `position_z`=41.95938, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`, `auras`) VALUES
+(@MOVERGUID, @PATH, 1, '228832');
+
+SET @MOVERGUID := @CGUID+33;
+SET @ENTRY := 115076;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Warsong Grunt - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, -2071.4185, 6706.617, 36.64514, NULL, 0),
+(@PATH, 1, -2090.5764, 6690.8594, 36.74643, NULL, 170);
+
+UPDATE `creature` SET `position_x`=-2071.4185, `position_y`=6706.617, `position_z`=36.64514, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`, `auras`) VALUES
+(@MOVERGUID, @PATH, 1, '228832');
diff --git a/sql/updates/world/master/2025_10_31_01_world.sql b/sql/updates/world/master/2025_10_31_01_world.sql
new file mode 100644
index 00000000000..56c4b2071a0
--- /dev/null
+++ b/sql/updates/world/master/2025_10_31_01_world.sql
@@ -0,0 +1,541 @@
+SET @CGUID := 6005969;
+SET @OGUID := 6003048;
+SET @SPAWN_GROUP := 1279;
+
+DELETE FROM `battleground_scripts` WHERE `MapId` = 1552 AND `BattlemasterListId` = 0;
+INSERT INTO `battleground_scripts` (`MapId`, `BattlemasterListId`, `ScriptName`) VALUES
+(1552, 0, 'arena_ashamanes_fall');
+
+DELETE FROM `battleground_template` WHERE `ID` = 816;
+INSERT INTO `battleground_template` (`ID`, `AllianceStartLoc`, `HordeStartLoc`, `StartMaxDist`, `Weight`, `Comment`) VALUES
+(816, 5308, 5307, 0, 1, 'Ashamanes Fall Arena');
+
+DELETE FROM `spawn_group_template` WHERE `groupId` BETWEEN @SPAWN_GROUP+0 AND @SPAWN_GROUP+0;
+INSERT INTO `spawn_group_template` (`groupId`, `groupName`, `groupFlags`) VALUES
+(@SPAWN_GROUP+0, 'Ashamanes Fall - Shadow sight', 0x20);
+
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+61;
+INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `MovementType`, `npcflag`, `unit_flags`, `unit_flags2`, `unit_flags3`, `VerifiedBuild`) VALUES
+(@CGUID+0, 114570, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3566.59716796875, 5482.6181640625, 349.549407958984375, 2.348224639892578125, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Ashamane Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+1, 114575, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3524.892333984375, 5435.3896484375, 308.139404296875, 0.209348410367965698, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Stag (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+2, 114574, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3714.002685546875, 5513.001953125, 323.7884521484375, 2.71767282485961914, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Val'sharah Druid (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 191779 - Mod Scale 200%)
+(@CGUID+3, 114575, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3588.306396484375, 5409.78125, 325.114288330078125, 1.991013288497924804, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Stag (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+4, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3417.23779296875, 5483.009765625, 337.715423583984375, 0.022950712591409683, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+5, 114573, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3680.725830078125, 5564.13623046875, 304.436279296875, 4.952549934387207031, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Bear (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+6, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3627.900146484375, 5685.39306640625, 344.26544189453125, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+7, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3579.713134765625, 5448.796875, 341.028472900390625, 5.446562767028808593, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+8, 114572, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3534.5, 5477.15087890625, 332.36285400390625, 0.746128618717193603, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Vale Flitter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+9, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3474.677978515625, 5555.5869140625, 332.458740234375, 0, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+10, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3533.48193359375, 5659.869140625, 317.437408447265625, 0.022975897416472435, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+11, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3481.13525390625, 5683.60009765625, 319.048095703125, 6.270677566528320312, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+12, 114572, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3576.113037109375, 5567.59375, 333.7896728515625, 1.173004865646362304, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Vale Flitter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+13, 114577, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3645.893310546875, 5497.51416015625, 310.78704833984375, 0, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Sylvan Strider (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 113160 - Water Walking)
+(@CGUID+14, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3623.14404296875, 5481.21142578125, 314.567901611328125, 1.321498394012451171, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+15, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3725.5908203125, 5544.41064453125, 334.8209228515625, 0.386281400918960571, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+16, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3578.8369140625, 5687.58984375, 327.59228515625, 0.038545060902833938, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+17, 114577, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3470.21875, 5668.962890625, 308.47906494140625, 0, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Sylvan Strider (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 113160 - Water Walking)
+(@CGUID+18, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3650.512939453125, 5502.97998046875, 328.696929931640625, 1.248853206634521484, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+19, 114580, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3536.828125, 5414.6015625, 314.70245361328125, 6.255576133728027343, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Fawn (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+20, 114575, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3449.43310546875, 5681.494140625, 308.378662109375, 5.221735477447509765, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Stag (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+21, 114574, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3695.038330078125, 5473.20166015625, 325.553985595703125, 1.30809175968170166, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Val'sharah Druid (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 191779 - Mod Scale 200%)
+(@CGUID+22, 114572, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3543.11376953125, 5595.3349609375, 331.510284423828125, 4.17545938491821289, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Vale Flitter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+23, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3369.75341796875, 5593.24365234375, 323.353851318359375, 6.270665168762207031, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+24, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3675.827392578125, 5581.76416015625, 313.905242919921875, 0, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+25, 114577, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3668.3359375, 5451.63525390625, 307.818603515625, 0, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Sylvan Strider (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 113160 - Water Walking)
+(@CGUID+26, 114580, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3524.100830078125, 5428.353515625, 308.922454833984375, 1.056080222129821777, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Fawn (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+27, 114611, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3568.795166015625, 5569.92529296875, 326.390625, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Elfin Rabbit (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+28, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3645.4345703125, 5577.521484375, 314.6214599609375, 5.270051002502441406, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+29, 114575, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3471.5234375, 5681.494140625, 308.095184326171875, 4.807647228240966796, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Stag (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+30, 114577, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3550, 5433.3330078125, 307.70001220703125, 3.014180183410644531, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Sylvan Strider (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 113160 - Water Walking)
+(@CGUID+31, 114570, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3527.880126953125, 5473.3583984375, 357.841949462890625, 1.327366352081298828, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Ashamane Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+32, 114575, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3618.608642578125, 5453.73095703125, 312.67779541015625, 2.816527128219604492, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Stag (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+33, 114569, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3531.474853515625, 5472.9765625, 358.91900634765625, 1.3126220703125, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Ashamane Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+34, 114574, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3689.0166015625, 5510.60791015625, 312.502685546875, 2.469567298889160156, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Val'sharah Druid (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 191779 - Mod Scale 200%)
+(@CGUID+35, 114573, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3691.520751953125, 5554.275390625, 305.063507080078125, 2.997097969055175781, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Bear (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+36, 114575, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3597.880126953125, 5439.392578125, 313.45977783203125, 1.991013288497924804, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Stag (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+37, 114572, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3590.776123046875, 5511.234375, 334.070343017578125, 3.623198270797729492, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Vale Flitter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+38, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3448.345947265625, 5648.869140625, 327.518829345703125, 6.244733333587646484, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+39, 114573, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3703.615478515625, 5608.90283203125, 314.83673095703125, 2.75619053840637207, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Bear (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+40, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3515.24169921875, 5453.9853515625, 337.085357666015625, 3.629119873046875, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+41, 114572, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3525.283203125, 5521.8095703125, 335.735992431640625, 3.901186943054199218, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Vale Flitter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+42, 114577, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3479.13037109375, 5616.26025390625, 307.31829833984375, 5.859136104583740234, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Sylvan Strider (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 113160 - Water Walking)
+(@CGUID+43, 114611, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3558.8681640625, 5493.6083984375, 325.328033447265625, 0.162741750478744506, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Elfin Rabbit (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+44, 114576, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3538.4453125, 5418.24462890625, 312.430633544921875, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Doe (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+45, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3467.78271484375, 5511.35400390625, 337.883514404296875, 2.926533460617065429, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+46, 114577, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3513.359375, 5650.39892578125, 307.70001220703125, 0.568886041641235351, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Sylvan Strider (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 113160 - Water Walking)
+(@CGUID+47, 114581, 1552, 8008, 8008, '0', '0', 0, 0, 1, 3568.24658203125, 5420.5146484375, 311.51690673828125, 1.717264890670776367, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Nat Pagle (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+48, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3678.978271484375, 5523.60888671875, 326.374664306640625, 4.479571819305419921, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+49, 114575, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3455.760498046875, 5483.35693359375, 317.388031005859375, 0.917567670345306396, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Stag (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+50, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3646.794677734375, 5596.8740234375, 328.595428466796875, 0.022975854575634002, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+51, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3608.611083984375, 5610.302734375, 333.926544189453125, 4.674623489379882812, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+52, 114573, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3692.950439453125, 5639.896484375, 331.3941650390625, 3.544946193695068359, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Bear (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+53, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3378.453369140625, 5530.15771484375, 334.429656982421875, 0.038442760705947875, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+54, 114572, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3565.921142578125, 5578.99560546875, 332.101226806640625, 4.829363346099853515, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Vale Flitter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+55, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3611.813232421875, 5517.74951171875, 344.128662109375, 3.734572649002075195, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+56, 114579, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3713.670166015625, 5563.21142578125, 336.975250244140625, 6.244760513305664062, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Sylvan Owl (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+57, 114578, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3619.833740234375, 5557.17626953125, 339.33697509765625, 3.620345115661621093, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Fey Darter (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+58, 114577, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3609.82275390625, 5479.4150390625, 307.70001220703125, 2.652393102645874023, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Sylvan Strider (Area: Ashamane's Fall - Difficulty: 0) CreateObject1 (Auras: 113160 - Water Walking)
+(@CGUID+59, 114576, 1552, 8008, 8008, '0', '0', 0, 0, 0, 3523.171142578125, 5430.2958984375, 308.669036865234375, 0, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Gleamhoof Doe (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@CGUID+60, 114577, 1552, 8008, 8008, '0', '170', 0, 0, 0, 3577.381103515625, 5449.7353515625, 310.374481201171875, 0, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Sylvan Strider (Area: Ashamane's Fall - Difficulty: 0) CreateObject2
+(@CGUID+61, 114573, 1552, 8008, 8008, '0', '170', 0, 0, 0, 3645.815185546875, 5649.59375, 323.54937744140625, 2.011730432510375976, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305); -- Sylvan Bear (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+61;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `mount`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvpFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES
+(@CGUID+0, 0, 0, 0, 0, 0, 1, 0, 0, 4782, 0, 0, 0, ''), -- Ashamane Owl
+(@CGUID+1, 0, 0, 0, 0, 0, 1, 0, 418, 0, 0, 0, 0, ''), -- Gleamhoof Stag
+(@CGUID+2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '191779'), -- Val'sharah Druid - 191779 - Mod Scale 200%
+(@CGUID+4, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+6, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+7, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+8, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Vale Flitter
+(@CGUID+9, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+10, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+11, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+12, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Vale Flitter
+(@CGUID+13, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '113160'), -- Sylvan Strider - 113160 - Water Walking
+(@CGUID+14, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+15, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+16, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+17, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '113160'), -- Sylvan Strider - 113160 - Water Walking
+(@CGUID+18, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+20, 0, 0, 0, 0, 0, 1, 0, 418, 0, 0, 0, 0, ''), -- Gleamhoof Stag
+(@CGUID+21, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '191779'), -- Val'sharah Druid - 191779 - Mod Scale 200%
+(@CGUID+22, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Vale Flitter
+(@CGUID+23, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+24, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+25, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '113160'), -- Sylvan Strider - 113160 - Water Walking
+(@CGUID+28, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+29, 0, 0, 0, 0, 0, 1, 0, 418, 0, 0, 0, 0, ''), -- Gleamhoof Stag
+(@CGUID+30, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '113160'), -- Sylvan Strider - 113160 - Water Walking
+(@CGUID+31, 0, 0, 0, 0, 0, 1, 0, 0, 4782, 0, 0, 0, ''), -- Ashamane Owl
+(@CGUID+33, 0, 0, 0, 0, 0, 1, 0, 0, 4782, 0, 0, 0, ''), -- Ashamane Owl
+(@CGUID+34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '191779'), -- Val'sharah Druid - 191779 - Mod Scale 200%
+(@CGUID+37, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Vale Flitter
+(@CGUID+38, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+40, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+41, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Vale Flitter
+(@CGUID+42, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '113160'), -- Sylvan Strider - 113160 - Water Walking
+(@CGUID+45, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+46, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '113160'), -- Sylvan Strider - 113160 - Water Walking
+(@CGUID+47, 0, 0, 0, 0, 0, 1, 0, 0, 2171, 0, 0, 0, ''), -- Nat Pagle
+(@CGUID+48, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+50, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+51, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+53, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+54, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Vale Flitter
+(@CGUID+55, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+56, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Sylvan Owl
+(@CGUID+57, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, ''), -- Fey Darter
+(@CGUID+58, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '113160'); -- Sylvan Strider - 113160 - Water Walking
+
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+3;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
+(@OGUID+0, 250431, 1552, 8008, 8008, '0', '0', 0, 3539.869873046875, 5488.70068359375, 323.581939697265625, 1.553341388702392578, 0, 0, 0.700908660888671875, 0.713251054286956787, 7200, 255, 1, 63305), -- Roots (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@OGUID+1, 250430, 1552, 8008, 8008, '0', '0', 0, 3548.342041015625, 5584.77880859375, 323.6123046875, 1.544615507125854492, 0, 0, 0.697790145874023437, 0.716302275657653808, 7200, 255, 1, 63305), -- Roots (Area: Ashamane's Fall - Difficulty: 0) CreateObject1
+(@OGUID+2, 184663, 1552, 8008, 8008, '0', '0', 0, 3579.07470703125, 5575.9375, 326.891265869140625, 2.460912704467773437, 0, 0, 0.942641258239746093, 0.333807557821273803, 360, 255, 1, 63305), -- Shadow Sight (Area: Ashamane's Fall - Difficulty: 0) CreateObject2
+(@OGUID+3, 184664, 1552, 8008, 8008, '0', '0', 0, 3503.2822265625, 5502.15087890625, 325.707183837890625, 3.316144466400146484, 0, 0, -0.99619388580322265, 0.087165042757987976, 360, 255, 1, 63305); -- Shadow Sight (Area: Ashamane's Fall - Difficulty: 0) CreateObject2
+DELETE FROM `gameobject_addon` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+3;
+
+DELETE FROM `spawn_group` WHERE `groupId` BETWEEN @SPAWN_GROUP+0 AND @SPAWN_GROUP+0;
+INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`) VALUES
+(@SPAWN_GROUP, 1, @OGUID+2),
+(@SPAWN_GROUP, 1, @OGUID+3);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 33 AND `SourceEntry` BETWEEN @SPAWN_GROUP+0 AND @SPAWN_GROUP+0;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceEntry`, `SourceGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ScriptName`) VALUES
+(33, @SPAWN_GROUP, 0, 0, 0, 'condition_is_shadow_sight_enabled');
+
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=114576 AND `DifficultyID`=0); -- 114576 (Gleamhoof Doe) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=114577 AND `DifficultyID`=0); -- 114577 (Sylvan Strider) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x20000000, `VerifiedBuild`=63305 WHERE (`Entry`=114572 AND `DifficultyID`=0); -- 114572 (Vale Flitter) - Floating
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x30000000, `VerifiedBuild`=63305 WHERE (`Entry`=114578 AND `DifficultyID`=0); -- 114578 (Fey Darter) - CanSwim, Floating
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=114573 AND `DifficultyID`=0); -- 114573 (Sylvan Bear) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x20000000, `VerifiedBuild`=63305 WHERE (`Entry`=114579 AND `DifficultyID`=0); -- 114579 (Sylvan Owl) - Floating - CannotSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=114574 AND `DifficultyID`=0); -- 114574 (Val'sharah Druid) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=114575 AND `DifficultyID`=0); -- 114575 (Gleamhoof Stag) - CanSwim
+
+UPDATE `creature_template` SET `unit_flags`=0x0 WHERE `entry`=114581; -- Nat Pagle
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x4000000 WHERE `entry`=114576; -- Gleamhoof Doe
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry` IN (114569, 114570); -- Ashamane Owl
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=114611; -- Elfin Rabbit
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=114580; -- Gleamhoof Fawn
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x8000000 WHERE `entry`=114577; -- Sylvan Strider
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=114572; -- Vale Flitter
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=114578; -- Fey Darter
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=114573; -- Sylvan Bear
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=114579; -- Sylvan Owl
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=114574; -- Val'sharah Druid
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x4000000 WHERE `entry`=114575; -- Gleamhoof Stag
+
+UPDATE `creature_model_info` SET `BoundingRadius`=4.170724868774414062, `VerifiedBuild`=63305 WHERE `DisplayID`=73328;
+UPDATE `creature_model_info` SET `BoundingRadius`=0.249518632888793945, `CombatReach`=0.300000011920928955, `VerifiedBuild`=63305 WHERE `DisplayID`=71224;
+UPDATE `creature_model_info` SET `BoundingRadius`=2.085362434387207031, `VerifiedBuild`=63305 WHERE `DisplayID`=64330;
+
+SET @MOVERGUID := @CGUID+6;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6749, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3657.9001, 5685.393, 344.26544, NULL, 0),
+(@PATH, 1, 3655.6165, 5696.8735, 344.26544, NULL, 0),
+(@PATH, 2, 3649.1133, 5706.6064, 344.26544, NULL, 0),
+(@PATH, 3, 3639.3806, 5713.1094, 344.26544, NULL, 0),
+(@PATH, 4, 3627.9001, 5715.393, 344.26544, NULL, 0),
+(@PATH, 5, 3616.4197, 5713.1094, 344.26544, NULL, 0),
+(@PATH, 6, 3606.687, 5706.6064, 344.26544, NULL, 0),
+(@PATH, 7, 3600.1838, 5696.8735, 344.26544, NULL, 0),
+(@PATH, 8, 3597.9001, 5685.393, 344.26544, NULL, 0),
+(@PATH, 9, 3600.1838, 5673.9126, 344.26544, NULL, 0),
+(@PATH, 10, 3606.687, 5664.1797, 344.26544, NULL, 0),
+(@PATH, 11, 3616.4197, 5657.677, 344.26544, NULL, 0),
+(@PATH, 12, 3627.9001, 5655.393, 344.26544, NULL, 0),
+(@PATH, 13, 3639.3806, 5657.677, 344.26544, NULL, 0),
+(@PATH, 14, 3649.1133, 5664.1797, 344.26544, NULL, 0),
+(@PATH, 15, 3655.6165, 5673.9126, 344.26544, NULL, 0);
+
+UPDATE `creature` SET `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+10;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 1;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6749, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3561.2449, 5659.8413, 317.43744, NULL, 0),
+(@PATH, 1, 3558.9612, 5648.361, 317.43744, NULL, 0),
+(@PATH, 2, 3552.458, 5638.628, 317.43744, NULL, 0),
+(@PATH, 3, 3542.7253, 5632.125, 317.43744, NULL, 0),
+(@PATH, 4, 3531.2449, 5629.8413, 317.43744, NULL, 0),
+(@PATH, 5, 3519.7644, 5632.125, 317.43744, NULL, 0),
+(@PATH, 6, 3510.0317, 5638.628, 317.43744, NULL, 0),
+(@PATH, 7, 3503.5286, 5648.361, 317.43744, NULL, 0),
+(@PATH, 8, 3501.2449, 5659.8413, 317.43744, NULL, 0),
+(@PATH, 9, 3503.5286, 5671.322, 317.43744, NULL, 0),
+(@PATH, 10, 3510.0317, 5681.0547, 317.43744, NULL, 0),
+(@PATH, 11, 3519.7644, 5687.5576, 317.43744, NULL, 0),
+(@PATH, 12, 3531.2449, 5689.8413, 317.43744, NULL, 0),
+(@PATH, 13, 3542.7253, 5687.5576, 317.43744, NULL, 0),
+(@PATH, 14, 3552.458, 5681.0547, 317.43744, NULL, 0),
+(@PATH, 15, 3558.9612, 5671.322, 317.43744, NULL, 0);
+
+UPDATE `creature` SET `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+50;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 2;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6749, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3674.5574, 5596.846, 328.5954, NULL, 0),
+(@PATH, 1, 3672.2737, 5585.3657, 328.5954, NULL, 0),
+(@PATH, 2, 3665.7705, 5575.633, 328.5954, NULL, 0),
+(@PATH, 3, 3656.0378, 5569.13, 328.5954, NULL, 0),
+(@PATH, 4, 3644.5574, 5566.846, 328.5954, NULL, 0),
+(@PATH, 5, 3633.077, 5569.13, 328.5954, NULL, 0),
+(@PATH, 6, 3623.3442, 5575.633, 328.5954, NULL, 0),
+(@PATH, 7, 3616.841, 5585.3657, 328.5954, NULL, 0),
+(@PATH, 8, 3614.5574, 5596.846, 328.5954, NULL, 0),
+(@PATH, 9, 3616.841, 5608.3267, 328.5954, NULL, 0),
+(@PATH, 10, 3623.3442, 5618.0596, 328.5954, NULL, 0),
+(@PATH, 11, 3633.077, 5624.5625, 328.5954, NULL, 0),
+(@PATH, 12, 3644.5574, 5626.846, 328.5954, NULL, 0),
+(@PATH, 13, 3656.0378, 5624.5625, 328.5954, NULL, 0),
+(@PATH, 14, 3665.7705, 5618.0596, 328.5954, NULL, 0),
+(@PATH, 15, 3672.2737, 5608.3267, 328.5954, NULL, 0);
+
+UPDATE `creature` SET `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+56;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 3;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6747, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3739.0774, 5563.3125, 336.97525, NULL, 0),
+(@PATH, 1, 3736.7937, 5574.793, 336.97525, NULL, 0),
+(@PATH, 2, 3731.1033, 5584.1953, 338.1513, NULL, 0),
+(@PATH, 3, 3720.5579, 5591.029, 336.97525, NULL, 0),
+(@PATH, 4, 3709.0774, 5593.3125, 336.97525, NULL, 0),
+(@PATH, 5, 3697.597, 5591.029, 336.97525, NULL, 0),
+(@PATH, 6, 3687.8643, 5584.526, 336.97525, NULL, 0),
+(@PATH, 7, 3681.361, 5574.793, 336.97525, NULL, 0),
+(@PATH, 8, 3679.0774, 5563.3125, 336.97525, NULL, 0),
+(@PATH, 9, 3681.361, 5551.832, 336.97525, NULL, 0),
+(@PATH, 10, 3687.8643, 5542.099, 336.97525, NULL, 0),
+(@PATH, 11, 3697.597, 5535.596, 336.97525, NULL, 0),
+(@PATH, 12, 3709.0774, 5533.3125, 336.97525, NULL, 0),
+(@PATH, 13, 3720.5579, 5535.596, 336.97525, NULL, 0),
+(@PATH, 14, 3730.2905, 5542.099, 336.97525, NULL, 0),
+(@PATH, 15, 3736.7937, 5551.832, 336.97525, NULL, 0);
+
+UPDATE `creature` SET `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+11;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 4;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6749, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3510.0408, 5683.607, 319.0481, NULL, 0),
+(@PATH, 1, 3507.757, 5695.0874, 319.0481, NULL, 0),
+(@PATH, 2, 3501.254, 5704.8203, 319.0481, NULL, 0),
+(@PATH, 3, 3491.5212, 5711.323, 319.0481, NULL, 0),
+(@PATH, 4, 3480.0408, 5713.607, 319.0481, NULL, 0),
+(@PATH, 5, 3468.5603, 5711.323, 319.0481, NULL, 0),
+(@PATH, 6, 3458.8276, 5704.8203, 319.0481, NULL, 0),
+(@PATH, 7, 3452.3245, 5695.0874, 319.0481, NULL, 0),
+(@PATH, 8, 3450.0408, 5683.607, 319.0481, NULL, 0),
+(@PATH, 9, 3452.3245, 5672.1265, 319.0481, NULL, 0),
+(@PATH, 10, 3458.8276, 5662.3936, 319.0481, NULL, 0),
+(@PATH, 11, 3468.5603, 5655.8906, 319.0481, NULL, 0),
+(@PATH, 12, 3480.0408, 5653.607, 319.0481, NULL, 0),
+(@PATH, 13, 3491.5212, 5655.8906, 319.0481, NULL, 0),
+(@PATH, 14, 3501.254, 5662.3936, 319.0481, NULL, 0),
+(@PATH, 15, 3507.757, 5672.1265, 319.0481, NULL, 0);
+
+UPDATE `creature` SET /*`position_x`=3510.0408, `position_y`=5683.607, `position_z`=319.0481, `orientation`=0,*/ `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+38;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 5;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6749, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3473.7527, 5648.9707, 327.51883, NULL, 0),
+(@PATH, 1, 3471.469, 5660.451, 327.51883, NULL, 0),
+(@PATH, 2, 3464.9658, 5670.184, 327.51883, NULL, 0),
+(@PATH, 3, 3455.2332, 5676.687, 327.51883, NULL, 0),
+(@PATH, 4, 3443.7527, 5678.9707, 327.51883, NULL, 0),
+(@PATH, 5, 3432.2722, 5676.687, 327.51883, NULL, 0),
+(@PATH, 6, 3422.5396, 5670.184, 327.51883, NULL, 0),
+(@PATH, 7, 3416.0364, 5660.451, 327.51883, NULL, 0),
+(@PATH, 8, 3413.7527, 5648.9707, 327.51883, NULL, 0),
+(@PATH, 9, 3416.0364, 5637.49, 327.51883, NULL, 0),
+(@PATH, 10, 3422.5396, 5627.7573, 327.51883, NULL, 0),
+(@PATH, 11, 3432.2722, 5621.2544, 327.51883, NULL, 0),
+(@PATH, 12, 3443.7527, 5618.9707, 327.51883, NULL, 0),
+(@PATH, 13, 3455.2332, 5621.2544, 327.51883, NULL, 0),
+(@PATH, 14, 3464.9658, 5627.7573, 327.51883, NULL, 0),
+(@PATH, 15, 3471.469, 5637.49, 327.51883, NULL, 0);
+
+UPDATE `creature` SET `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+4;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 6;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6750, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3445.0034, 5482.982, 337.71542, NULL, 0),
+(@PATH, 1, 3442.7197, 5471.5015, 337.71542, NULL, 0),
+(@PATH, 2, 3436.2166, 5461.7686, 337.71542, NULL, 0),
+(@PATH, 3, 3426.484, 5455.2656, 338.96393, NULL, 0),
+(@PATH, 4, 3415.0034, 5452.982, 337.71542, NULL, 0),
+(@PATH, 5, 3403.523, 5455.2656, 337.71542, NULL, 0),
+(@PATH, 6, 3393.7903, 5461.7686, 337.71542, NULL, 0),
+(@PATH, 7, 3387.287, 5471.5015, 337.71542, NULL, 0),
+(@PATH, 8, 3385.0034, 5482.982, 337.71542, NULL, 0),
+(@PATH, 9, 3387.287, 5494.4624, 337.71542, NULL, 0),
+(@PATH, 10, 3393.7903, 5504.1953, 337.71542, NULL, 0),
+(@PATH, 11, 3403.523, 5510.698, 337.71542, NULL, 0),
+(@PATH, 12, 3415.0034, 5512.982, 337.71542, NULL, 0),
+(@PATH, 13, 3426.484, 5510.698, 337.71542, NULL, 0),
+(@PATH, 14, 3436.2166, 5504.1953, 337.71542, NULL, 0),
+(@PATH, 15, 3442.7197, 5494.4624, 337.71542, NULL, 0);
+
+UPDATE `creature` SET `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+53;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 7;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6749, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3403.8604, 5530.0557, 334.42966, NULL, 0),
+(@PATH, 1, 3401.5767, 5518.575, 334.42966, NULL, 0),
+(@PATH, 2, 3395.0735, 5508.8423, 334.42966, NULL, 0),
+(@PATH, 3, 3385.3408, 5502.3394, 334.42966, NULL, 0),
+(@PATH, 4, 3373.8604, 5500.0557, 334.42966, NULL, 0),
+(@PATH, 5, 3362.38, 5502.3394, 334.42966, NULL, 0),
+(@PATH, 6, 3352.6472, 5508.8423, 334.42966, NULL, 0),
+(@PATH, 7, 3346.144, 5518.575, 334.42966, NULL, 0),
+(@PATH, 8, 3343.8604, 5530.0557, 334.42966, NULL, 0),
+(@PATH, 9, 3346.144, 5541.536, 334.42966, NULL, 0),
+(@PATH, 10, 3352.6472, 5551.269, 334.42966, NULL, 0),
+(@PATH, 11, 3362.38, 5557.772, 334.42966, NULL, 0),
+(@PATH, 12, 3373.8604, 5560.0557, 334.42966, NULL, 0),
+(@PATH, 13, 3385.3408, 5557.772, 334.42966, NULL, 0),
+(@PATH, 14, 3395.0735, 5551.269, 334.42966, NULL, 0),
+(@PATH, 15, 3401.5767, 5541.536, 334.42966, NULL, 0);
+
+UPDATE `creature` SET `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+16;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 8;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6872, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3604.2214, 5687.488, 327.5923, NULL, 0),
+(@PATH, 1, 3601.9377, 5676.0073, 327.5923, NULL, 0),
+(@PATH, 2, 3595.4346, 5666.2744, 327.5923, NULL, 0),
+(@PATH, 3, 3585.702, 5659.7715, 327.5923, NULL, 0),
+(@PATH, 4, 3574.2214, 5657.488, 327.5923, NULL, 0),
+(@PATH, 5, 3562.741, 5659.7715, 327.5923, NULL, 0),
+(@PATH, 6, 3553.0083, 5666.2744, 327.5923, NULL, 0),
+(@PATH, 7, 3546.5051, 5676.0073, 327.5923, NULL, 0),
+(@PATH, 8, 3544.2214, 5687.488, 327.5923, NULL, 0),
+(@PATH, 9, 3546.5051, 5698.9683, 327.5923, NULL, 0),
+(@PATH, 10, 3553.0083, 5708.701, 327.5923, NULL, 0),
+(@PATH, 11, 3562.741, 5715.204, 327.5923, NULL, 0),
+(@PATH, 12, 3574.2214, 5717.488, 327.5923, NULL, 0),
+(@PATH, 13, 3585.702, 5715.204, 329.96155, NULL, 0),
+(@PATH, 14, 3595.4346, 5708.701, 331.30746, NULL, 0),
+(@PATH, 15, 3601.9377, 5698.9683, 332.34436, NULL, 0);
+
+UPDATE `creature` SET `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+23;
+SET @ENTRY := 114579;
+SET @PATHOFFSET := 9;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x2, 2.6751, 'Sylvan Owl - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3398.659, 5593.251, 323.35388, NULL, 0),
+(@PATH, 1, 3396.3752, 5604.7314, 323.35388, NULL, 0),
+(@PATH, 2, 3389.872, 5614.4644, 323.35388, NULL, 0),
+(@PATH, 3, 3380.1394, 5620.9673, 323.35388, NULL, 0),
+(@PATH, 4, 3368.659, 5623.251, 323.35388, NULL, 0),
+(@PATH, 5, 3357.1785, 5620.9673, 323.35388, NULL, 0),
+(@PATH, 6, 3347.4458, 5614.4644, 323.35388, NULL, 0),
+(@PATH, 7, 3340.9426, 5604.7314, 323.35388, NULL, 0),
+(@PATH, 8, 3338.659, 5593.251, 323.35388, NULL, 0),
+(@PATH, 9, 3340.9426, 5581.7705, 324.62292, NULL, 0),
+(@PATH, 10, 3347.4458, 5572.0376, 326.52487, NULL, 0),
+(@PATH, 11, 3357.1785, 5565.5347, 324.91846, NULL, 0),
+(@PATH, 12, 3368.659, 5563.251, 323.35388, NULL, 0),
+(@PATH, 13, 3380.1394, 5565.5347, 323.35388, NULL, 0),
+(@PATH, 14, 3389.872, 5572.0376, 323.35388, NULL, 0),
+(@PATH, 15, 3396.3752, 5581.7705, 323.35388, NULL, 0);
+
+UPDATE `creature` SET `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+UPDATE `creature_addon` SET `PathId`=@PATH WHERE `guid`=@MOVERGUID;
+
+SET @MOVERGUID := @CGUID+39;
+SET @ENTRY := 114573;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x01, NULL, 'Sylvan Bear - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3667.207, 5628.134, 313.7098, NULL, 0),
+(@PATH, 1, 3667.708, 5627.2686, 312.96313, NULL, 0),
+(@PATH, 2, 3668.209, 5626.4033, 312.69702, NULL, 0),
+(@PATH, 3, 3668.71, 5625.538, 311.96277, NULL, 0),
+(@PATH, 4, 3668.9688, 5625.088, 312.00797, NULL, 0),
+(@PATH, 5, 3669.7217, 5624.4297, 311.80792, NULL, 0),
+(@PATH, 6, 3671.2275, 5623.1133, 312.18582, NULL, 0),
+(@PATH, 7, 3671.9805, 5622.455, 312.01053, NULL, 0),
+(@PATH, 8, 3672.7334, 5621.797, 311.4518, NULL, 0),
+(@PATH, 9, 3673.4863, 5621.1387, 311.8268, NULL, 0),
+(@PATH, 10, 3674.8196, 5619.9707, 311.73743, NULL, 0),
+(@PATH, 11, 3685.0618, 5616.428, 312.50446, NULL, 0),
+(@PATH, 12, 3696.1592, 5611.869, 313.5752, NULL, 0);
+
+UPDATE `creature` SET `position_x`=3667.207, `position_y`=5628.134, `position_z`=313.7098, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`) VALUES
+(@MOVERGUID, @PATH, 1);
+
+SET @MOVERGUID := @CGUID+52;
+SET @ENTRY := 114573;
+SET @PATHOFFSET := 1;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x1, NULL, 'Sylvan Bear - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3676.0217, 5634.4497, 323.7433, NULL, 0),
+(@PATH, 1, 3683.3542, 5635.8013, 326.41556, NULL, 0),
+(@PATH, 2, 3689.7812, 5634.5757, 329.1674, NULL, 0);
+
+UPDATE `creature` SET `position_x`=3676.0217, `position_y`=5634.4497, `position_z`=323.7433, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`) VALUES
+(@MOVERGUID, @PATH, 1);
+
+SET @MOVERGUID := @CGUID+61;
+SET @ENTRY := 114573;
+SET @PATHOFFSET := 2;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Sylvan Bear - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 3645.9565, 5668.9946, 333.23322, NULL, 0),
+(@PATH, 1, 3645.7214, 5669.9453, 333.28113, NULL, 0),
+(@PATH, 2, 3639.567, 5662.8516, 329.802, NULL, 0),
+(@PATH, 3, 3640.0676, 5656.335, 326.15958, NULL, 0),
+(@PATH, 4, 3639.567, 5662.8516, 329.802, NULL, 0);
+
+UPDATE `creature` SET `position_x`=3645.9565, `position_y`=5668.9946, `position_z`=333.23322, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`) VALUES
+(@MOVERGUID, @PATH, 1);
diff --git a/sql/updates/world/master/2025_10_31_02_world.sql b/sql/updates/world/master/2025_10_31_02_world.sql
new file mode 100644
index 00000000000..0b0efcac97a
--- /dev/null
+++ b/sql/updates/world/master/2025_10_31_02_world.sql
@@ -0,0 +1 @@
+UPDATE `gameobject` SET `spawntimesecs`=360 WHERE `guid` IN(8000131, 8000132, 10001803, 10001804);
diff --git a/src/common/Collision/Management/VMapManager.cpp b/src/common/Collision/Management/VMapManager.cpp
index ddf8c70be71..57d68708f46 100644
--- a/src/common/Collision/Management/VMapManager.cpp
+++ b/src/common/Collision/Management/VMapManager.cpp
@@ -60,7 +60,8 @@ namespace VMAP
iEnableHeightCalc(true),
thread_safe_environment(true),
GetLiquidFlagsPtr([](uint32 /*liquidTypeId*/) { return 0u; }),
- IsVMAPDisabledForPtr([](uint32 /*mapId*/, uint8 /*disableFlags*/) { return false; })
+ IsVMAPDisabledForPtr([](uint32 /*mapId*/, uint8 /*disableFlags*/) { return false; }),
+ LoadPathOnlyModels(false)
{
}
@@ -114,7 +115,7 @@ namespace VMAP
std::string VMapManager::getTileFileName(uint32 mapID, uint32 tileX, uint32 tileY, std::string_view extension)
{
- return Trinity::StringFormat("{:04}/{:04}_{:02}_{:02}.{}", mapID, mapID, tileY, tileX, extension);
+ return Trinity::StringFormat("{:04}/{:04}_{:02}_{:02}.{}", mapID, mapID, tileX, tileY, extension);
}
LoadResult VMapManager::loadMap(std::string const& basePath, uint32 mapId, uint32 x, uint32 y)
diff --git a/src/common/Collision/Management/VMapManager.h b/src/common/Collision/Management/VMapManager.h
index ae91d3db50e..67e897ea986 100644
--- a/src/common/Collision/Management/VMapManager.h
+++ b/src/common/Collision/Management/VMapManager.h
@@ -182,6 +182,8 @@ namespace VMAP
typedef bool(*IsVMAPDisabledForFn)(uint32 entry, uint8 flags);
IsVMAPDisabledForFn IsVMAPDisabledForPtr;
+
+ bool LoadPathOnlyModels;
};
}
diff --git a/src/common/Collision/Maps/MapTree.cpp b/src/common/Collision/Maps/MapTree.cpp
index 086ef975f1f..982256f896f 100644
--- a/src/common/Collision/Maps/MapTree.cpp
+++ b/src/common/Collision/Maps/MapTree.cpp
@@ -318,6 +318,9 @@ namespace VMAP
ModelSpawn spawn;
if (ModelSpawn::readFromFile(fileResult.TileFile.get(), spawn))
{
+ if (spawn.flags & MOD_PATH_ONLY && !vm->LoadPathOnlyModels)
+ continue;
+
// acquire model instance
std::shared_ptr<WorldModel> model = vm->acquireModelInstance(iBasePath, spawn.name);
if (!model)
@@ -402,6 +405,9 @@ namespace VMAP
if (!ModelSpawn::readFromFile(fileResult.TileFile.get(), spawn))
break;
+ if (spawn.flags & MOD_PATH_ONLY && !vm->LoadPathOnlyModels)
+ continue;
+
// update tree
uint32 referencedNode = 0;
if (fread(&referencedNode, sizeof(uint32), 1, fileResult.SpawnIndicesFile.get()) != 1)
diff --git a/src/common/Collision/Models/GameObjectModel.cpp b/src/common/Collision/Models/GameObjectModel.cpp
index a1b583d14cc..c8866de790d 100644
--- a/src/common/Collision/Models/GameObjectModel.cpp
+++ b/src/common/Collision/Models/GameObjectModel.cpp
@@ -219,8 +219,7 @@ bool GameObjectModel::GetLiquidLevel(G3D::Vector3 const& point, VMAP::LocationIn
if (info.hitModel->GetLiquidLevel(pModel, zDist))
{
// calculate world height (zDist in model coords):
- // assume WMO not tilted (wouldn't make much sense anyway)
- liqHeight = zDist * iScale + iPos.z;
+ liqHeight = (Vector3(pModel.x, pModel.y, zDist) * iInvRot * iScale + iPos).z;
return true;
}
return false;
diff --git a/src/common/Collision/Models/ModelInstance.h b/src/common/Collision/Models/ModelInstance.h
index 1621e1d052e..6b5cb31c768 100644
--- a/src/common/Collision/Models/ModelInstance.h
+++ b/src/common/Collision/Models/ModelInstance.h
@@ -35,7 +35,8 @@ namespace VMAP
enum ModelInstanceFlags
{
MOD_HAS_BOUND = 1 << 0,
- MOD_PARENT_SPAWN = 1 << 1
+ MOD_PARENT_SPAWN = 1 << 1,
+ MOD_PATH_ONLY = 1 << 2
};
struct ModelMinimalData
diff --git a/src/common/Collision/VMapDefinitions.h b/src/common/Collision/VMapDefinitions.h
index b5369eeb0a8..7f0c10406e4 100644
--- a/src/common/Collision/VMapDefinitions.h
+++ b/src/common/Collision/VMapDefinitions.h
@@ -24,8 +24,8 @@
namespace VMAP
{
- const char VMAP_MAGIC[] = "VMAP_4.D";
- const char RAW_VMAP_MAGIC[] = "VMAP04D"; // used in extracted vmap files with raw data
+ const char VMAP_MAGIC[] = "VMAP_4.E";
+ const char RAW_VMAP_MAGIC[] = "VMAP04E"; // used in extracted vmap files with raw data
const char GAMEOBJECT_MODELS[] = "GameObjectModels.dtree";
// defined in VMapManager.cpp currently...
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index ba2d14e9500..f1f7d1a6c29 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -551,6 +551,11 @@ bool Battlefield::AddOrSetPlayerToCorrectBfGroup(Player* player)
//--------------------
//-Battlefield Method-
//--------------------
+void Battlefield::SetGraveyardNumber(uint32 number)
+{
+ m_GraveyardList.resize(number);
+}
+
BfGraveyard* Battlefield::GetGraveyardById(uint32 id) const
{
if (id < m_GraveyardList.size())
diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h
index a80b9018560..facea7b89d3 100644
--- a/src/server/game/Battlefield/Battlefield.h
+++ b/src/server/game/Battlefield/Battlefield.h
@@ -175,7 +175,7 @@ class TC_GAME_API Battlefield : public ZoneScript
void InvitePlayersInZoneToWar();
/// Called when a Unit is kill in battlefield zone
- virtual void HandleKill(Player* /*killer*/, Unit* /*killed*/) { };
+ virtual void HandleKill(Player* /*killer*/, Unit* /*killed*/) { }
uint32 GetTypeId() const { return m_TypeId; }
uint32 GetZoneId() const { return m_ZoneId; }
@@ -235,7 +235,7 @@ class TC_GAME_API Battlefield : public ZoneScript
// Find which graveyard the player must be teleported to to be resurrected by spiritguide
WorldSafeLocsEntry const* GetClosestGraveyard(Player* player);
- void SetGraveyardNumber(uint32 number) { m_GraveyardList.resize(number); }
+ void SetGraveyardNumber(uint32 number);
BfGraveyard* GetGraveyardById(uint32 id) const;
// Misc methods
@@ -281,7 +281,7 @@ class TC_GAME_API Battlefield : public ZoneScript
void HideNpc(Creature* creature);
void ShowNpc(Creature* creature, bool aggressive);
- GraveyardVect GetGraveyardVector() const { return m_GraveyardList; }
+ GraveyardVect const& GetGraveyardVector() const { return m_GraveyardList; }
uint32 GetTimer() const { return m_Timer; }
void SetTimer(uint32 timer) { m_Timer = timer; }
diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp
index 2e4d018c0c7..1500e8c35f3 100644
--- a/src/server/game/Groups/GroupMgr.cpp
+++ b/src/server/game/Groups/GroupMgr.cpp
@@ -83,6 +83,11 @@ Group* GroupMgr::GetGroupByDbStoreId(uint32 storageId) const
return nullptr;
}
+void GroupMgr::SetGroupDbStoreSize(uint32 newSize)
+{
+ GroupDbStore.resize(newSize);
+}
+
ObjectGuid::LowType GroupMgr::GenerateGroupId()
{
if (NextGroupId >= 0xFFFFFFFE)
diff --git a/src/server/game/Groups/GroupMgr.h b/src/server/game/Groups/GroupMgr.h
index 6b26688867e..dc30b8b275a 100644
--- a/src/server/game/Groups/GroupMgr.h
+++ b/src/server/game/Groups/GroupMgr.h
@@ -47,7 +47,7 @@ public:
void FreeGroupDbStoreId(Group* group);
void SetNextGroupDbStoreId(uint32 storageId) { NextGroupDbStoreId = storageId; };
Group* GetGroupByDbStoreId(uint32 storageId) const;
- void SetGroupDbStoreSize(uint32 newSize) { GroupDbStore.resize(newSize); }
+ void SetGroupDbStoreSize(uint32 newSize);
void Update(uint32 diff);
diff --git a/src/server/scripts/Battlegrounds/AshamanesFall/arena_ashamanes_fall.cpp b/src/server/scripts/Battlegrounds/AshamanesFall/arena_ashamanes_fall.cpp
new file mode 100644
index 00000000000..43a66eeedd2
--- /dev/null
+++ b/src/server/scripts/Battlegrounds/AshamanesFall/arena_ashamanes_fall.cpp
@@ -0,0 +1,74 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Battleground.h"
+#include "BattlegroundScript.h"
+#include "GameObject.h"
+#include "Map.h"
+#include "ScriptMgr.h"
+
+namespace AshamanesFall
+{
+ namespace MapIds
+ {
+ static constexpr uint32 AshamanesFall = 1552;
+ }
+
+ namespace GameObjects
+ {
+ static constexpr uint32 Roots01 = 250430;
+ static constexpr uint32 Roots02 = 250431;
+ }
+}
+
+struct arena_ashamanes_fall : ArenaScript
+{
+ explicit arena_ashamanes_fall(BattlegroundMap* map) : ArenaScript(map) { }
+
+ void OnStart() override
+ {
+ for (ObjectGuid const& guid : _doorGUIDs)
+ {
+ if (GameObject* door = battlegroundMap->GetGameObject(guid))
+ {
+ door->UseDoorOrButton();
+ door->DespawnOrUnsummon(5s);
+ }
+ }
+ }
+
+ void OnGameObjectCreate(GameObject* gameobject) override
+ {
+ switch (gameobject->GetEntry())
+ {
+ case AshamanesFall::GameObjects::Roots01:
+ case AshamanesFall::GameObjects::Roots02:
+ _doorGUIDs.emplace_back(gameobject->GetGUID());
+ break;
+ default:
+ break;
+ }
+ }
+
+private:
+ GuidVector _doorGUIDs;
+};
+
+void AddSC_arena_ashamanes_fall()
+{
+ RegisterBattlegroundMapScript(arena_ashamanes_fall, AshamanesFall::MapIds::AshamanesFall);
+}
diff --git a/src/server/scripts/Battlegrounds/NagrandArena/arena_nagrand_arena_legion.cpp b/src/server/scripts/Battlegrounds/NagrandArena/arena_nagrand_arena_legion.cpp
new file mode 100644
index 00000000000..c089455af93
--- /dev/null
+++ b/src/server/scripts/Battlegrounds/NagrandArena/arena_nagrand_arena_legion.cpp
@@ -0,0 +1,74 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Battleground.h"
+#include "BattlegroundScript.h"
+#include "GameObject.h"
+#include "Map.h"
+#include "ScriptMgr.h"
+
+namespace NagrandArenaLegion
+{
+ namespace MapIds
+ {
+ static constexpr uint32 NagrandArena = 1505;
+ }
+
+ namespace GameObjects
+ {
+ static constexpr uint32 Gate1 = 260527;
+ static constexpr uint32 Gate2 = 260528;
+ }
+}
+
+struct arena_nagrand_arena_legion : ArenaScript
+{
+ explicit arena_nagrand_arena_legion(BattlegroundMap* map) : ArenaScript(map) { }
+
+ void OnStart() override
+ {
+ for (ObjectGuid const& guid : _doorGUIDs)
+ {
+ if (GameObject* door = battlegroundMap->GetGameObject(guid))
+ {
+ door->UseDoorOrButton();
+ door->DespawnOrUnsummon(5s);
+ }
+ }
+ }
+
+ void OnGameObjectCreate(GameObject* gameobject) override
+ {
+ switch (gameobject->GetEntry())
+ {
+ case NagrandArenaLegion::GameObjects::Gate1:
+ case NagrandArenaLegion::GameObjects::Gate2:
+ _doorGUIDs.emplace_back(gameobject->GetGUID());
+ break;
+ default:
+ break;
+ }
+ }
+
+private:
+ GuidVector _doorGUIDs;
+};
+
+void AddSC_arena_nagrand_arena_legion()
+{
+ RegisterBattlegroundMapScript(arena_nagrand_arena_legion, NagrandArenaLegion::MapIds::NagrandArena);
+}
diff --git a/src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp b/src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp
index 56a61a43c71..abc27d22331 100644
--- a/src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp
+++ b/src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp
@@ -64,6 +64,8 @@ void AddSC_battleground_temple_of_kotmogu();
void AddSC_battleground_deephaul_ravine();
void AddSC_arena_blades_edge_legion();
+void AddSC_arena_nagrand_arena_legion();
+void AddSC_arena_ashamanes_fall();
void AddSC_arena_mugambala();
void AddSC_arena_hook_point();
@@ -125,6 +127,8 @@ void AddBattlegroundsScripts()
AddSC_battleground_deephaul_ravine();
AddSC_arena_blades_edge_legion();
+ AddSC_arena_nagrand_arena_legion();
+ AddSC_arena_ashamanes_fall();
AddSC_arena_mugambala();
AddSC_arena_hook_point();
diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp
index 1a8cb65d783..7f222b21e70 100644
--- a/src/server/scripts/Northrend/zone_wintergrasp.cpp
+++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp
@@ -198,7 +198,7 @@ struct npc_wg_spirit_guide : public ScriptedAI
if (!wintergrasp)
return true;
- GraveyardVect graveyard = wintergrasp->GetGraveyardVector();
+ GraveyardVect const& graveyard = wintergrasp->GetGraveyardVector();
for (uint8 i = 0; i < graveyard.size(); i++)
if (graveyard[i]->GetControlTeamId() == player->GetTeamId())
AddGossipItemFor(player, GossipOptionNpc::None, player->GetSession()->GetTrinityString(((BfGraveyardWG*)graveyard[i])->GetTextId()), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + i);
@@ -215,7 +215,7 @@ struct npc_wg_spirit_guide : public ScriptedAI
Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(me->GetMap(), BATTLEFIELD_BATTLEID_WG);
if (wintergrasp)
{
- GraveyardVect gy = wintergrasp->GetGraveyardVector();
+ GraveyardVect const& gy = wintergrasp->GetGraveyardVector();
for (uint8 i = 0; i < gy.size(); i++)
if (action - GOSSIP_ACTION_INFO_DEF == i && gy[i]->GetControlTeamId() == player->GetTeamId())
if (WorldSafeLocsEntry const* safeLoc = sObjectMgr->GetWorldSafeLoc(gy[i]->GetGraveyardId()))
diff --git a/src/tools/mmaps_generator/IntermediateValues.cpp b/src/tools/mmaps_generator/IntermediateValues.cpp
index 4845ef32639..bb88f1f9c72 100644
--- a/src/tools/mmaps_generator/IntermediateValues.cpp
+++ b/src/tools/mmaps_generator/IntermediateValues.cpp
@@ -37,7 +37,7 @@ namespace MMAP
auto debugWrite = [&](char const* extension, auto const* data)
{
- std::string fileName = Trinity::StringFormat("meshes/{:04}{:02}{:02}.{}", mapID, tileY, tileX, extension);
+ std::string fileName = Trinity::StringFormat("meshes/{:04}{:02}{:02}.{}", mapID, tileX, tileY, extension);
if (auto file = Trinity::make_unique_ptr_with_deleter<&::fclose>(fopen(fileName.c_str(), "wb")))
{
this->debugWrite(file.get(), data);
@@ -191,7 +191,7 @@ namespace MMAP
void IntermediateValues::generateObjFile(uint32 mapID, uint32 tileX, uint32 tileY, MeshData const& meshData)
{
std::string objFileName;
- objFileName = Trinity::StringFormat("meshes/map{:04}{:02}{:02}.obj", mapID, tileY, tileX);
+ objFileName = Trinity::StringFormat("meshes/map{:04}{:02}{:02}.obj", mapID, tileX, tileY);
auto objFile = Trinity::make_unique_ptr_with_deleter<&::fclose>(fopen(objFileName.c_str(), "wb"));
if (!objFile)
@@ -219,7 +219,7 @@ namespace MMAP
for (std::size_t i = 0; i < allTris.size() / 3; i++)
fprintf(objFile.get(), "f %i %i %i\n", tris[i * 3] + 1, tris[i * 3 + 1] + 1, tris[i * 3 + 2] + 1);
- TC_LOG_INFO("maps.mmapgen.debug", "[Map {:04}] [{:02},{:02}]: Writing debug output object file...", mapID, tileY, tileX);
+ TC_LOG_INFO("maps.mmapgen.debug", "[Map {:04}] [{:02},{:02}]: Writing debug output object file...", mapID, tileX, tileY);
objFileName = Trinity::StringFormat("meshes/map{:04}.map", mapID);
@@ -233,7 +233,7 @@ namespace MMAP
char b = '\0';
fwrite(&b, sizeof(char), 1, objFile.get());
- objFileName = Trinity::StringFormat("meshes/map{:04}{:02}{:02}.mesh", mapID, tileY, tileX);
+ objFileName = Trinity::StringFormat("meshes/map{:04}{:02}{:02}.mesh", mapID, tileX, tileY);
objFile.reset(fopen(objFileName.c_str(), "wb"));
if (!objFile)
{
diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp
index cf1fce6a335..958542b1432 100644
--- a/src/tools/mmaps_generator/MapBuilder.cpp
+++ b/src/tools/mmaps_generator/MapBuilder.cpp
@@ -126,12 +126,12 @@ namespace MMAP
&& fread(&versionMagic, sizeof(versionMagic), 1, tileList.get()) == 1
&& versionMagic == MapVersionMagic
&& fread(&build, sizeof(build), 1, tileList.get()) == 1
- && fread(std::data(tilesData), 64 * 64, 1, tileList.get()) == 1)
+ && fread(std::data(tilesData), std::size(tilesData), 1, tileList.get()) == 1)
{
Trinity::Containers::FlatSet<uint32>& tiles = m_tiles[*mapId];
for (uint32 tileX = 0; tileX < 64; ++tileX)
for (uint32 tileY = 0; tileY < 64; ++tileY)
- if (tilesData[tileX * 64 + tileY] == '1')
+ if (tilesData[std::size(tilesData) - 1 - (tileX * 64 + tileY)] == '1')
if (tiles.insert(VMAP::StaticMapTree::packTileID(tileX, tileY)).second)
++m_totalTiles;
}
@@ -161,9 +161,9 @@ namespace MMAP
std::string fileName = fileItr->path().filename().string();
- uint32 tileX = Trinity::StringTo<uint32>(std::string_view(fileName).substr(8, 2)).value_or(0);
- uint32 tileY = Trinity::StringTo<uint32>(std::string_view(fileName).substr(5, 2)).value_or(0);
- uint32 tileID = VMAP::StaticMapTree::packTileID(tileY, tileX);
+ uint32 tileX = Trinity::StringTo<uint32>(std::string_view(fileName).substr(5, 2)).value_or(0);
+ uint32 tileY = Trinity::StringTo<uint32>(std::string_view(fileName).substr(8, 2)).value_or(0);
+ uint32 tileID = VMAP::StaticMapTree::packTileID(tileX, tileY);
if (tiles.insert(tileID).second)
++m_totalTiles;
@@ -561,7 +561,7 @@ namespace MMAP
/**************************************************************************/
bool MapTileBuilder::shouldSkipTile(uint32 mapID, uint32 tileX, uint32 tileY) const
{
- std::string fileName = Trinity::StringFormat("mmaps/{:04}{:02}{:02}.mmtile", mapID, tileY, tileX);
+ std::string fileName = Trinity::StringFormat("mmaps/{:04}{:02}{:02}.mmtile", mapID, tileX, tileY);
auto file = Trinity::make_unique_ptr_with_deleter<&::fclose>(fopen(fileName.c_str(), "rb"));
if (!file)
return false;
diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp
index b090678e83a..af4eb816626 100644
--- a/src/tools/mmaps_generator/PathGenerator.cpp
+++ b/src/tools/mmaps_generator/PathGenerator.cpp
@@ -68,6 +68,7 @@ namespace MMAP
auto itr = _liquidTypes.find(liquidId);
return itr != _liquidTypes.end() ? (1 << itr->second) : 0;
};
+ vmgr->LoadPathOnlyModels = true;
return vmgr;
}
}
diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp
index 8fa5507563c..241a724a46f 100644
--- a/src/tools/mmaps_generator/TerrainBuilder.cpp
+++ b/src/tools/mmaps_generator/TerrainBuilder.cpp
@@ -69,17 +69,17 @@ namespace MMAP
{
if (loadMap(mapID, tileX, tileY, meshData, vmapManager, ENTIRE))
{
- loadMap(mapID, tileX+1, tileY, meshData, vmapManager, LEFT);
- loadMap(mapID, tileX-1, tileY, meshData, vmapManager, RIGHT);
- loadMap(mapID, tileX, tileY+1, meshData, vmapManager, TOP);
- loadMap(mapID, tileX, tileY-1, meshData, vmapManager, BOTTOM);
+ loadMap(mapID, tileX, tileY+1, meshData, vmapManager, LEFT);
+ loadMap(mapID, tileX, tileY-1, meshData, vmapManager, RIGHT);
+ loadMap(mapID, tileX+1, tileY, meshData, vmapManager, TOP);
+ loadMap(mapID, tileX-1, tileY, meshData, vmapManager, BOTTOM);
}
}
/**************************************************************************/
bool TerrainBuilder::loadMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData& meshData, VMAP::VMapManager* vmapManager, Spot portion)
{
- std::string mapFileName = Trinity::StringFormat("maps/{:04}_{:02}_{:02}.map", mapID, tileY, tileX);
+ std::string mapFileName = Trinity::StringFormat("maps/{:04}_{:02}_{:02}.map", mapID, tileX, tileY);
auto mapFile = Trinity::make_unique_ptr_with_deleter<&::fclose>(fopen(mapFileName.c_str(), "rb"));
if (!mapFile)
@@ -87,7 +87,7 @@ namespace MMAP
int32 parentMapId = vmapManager->getParentMapId(mapID);
while (!mapFile && parentMapId != -1)
{
- mapFileName = Trinity::StringFormat("maps/{:04}_{:02}_{:02}.map", parentMapId, tileY, tileX);
+ mapFileName = Trinity::StringFormat("maps/{:04}_{:02}_{:02}.map", parentMapId, tileX, tileY);
mapFile.reset(fopen(mapFileName.c_str(), "rb"));
parentMapId = vmapManager->getParentMapId(parentMapId);
}
@@ -274,9 +274,9 @@ namespace MMAP
col < lheader.offsetX || col >= lheader.offsetX + lheader.width)
{
// dummy vert using invalid height
- liquidVerts[(count + i) * 3 + 0] = (xoffset + col * GRID_PART_SIZE) * -1;
+ liquidVerts[(count + i) * 3 + 0] = (yoffset + col * GRID_PART_SIZE) * -1;
liquidVerts[(count + i) * 3 + 1] = INVALID_MAP_LIQ_HEIGHT;
- liquidVerts[(count + i) * 3 + 2] = (yoffset + row * GRID_PART_SIZE) * -1;
+ liquidVerts[(count + i) * 3 + 2] = (xoffset + row * GRID_PART_SIZE) * -1;
continue;
}
@@ -290,9 +290,9 @@ namespace MMAP
{
row = i / V9_SIZE;
col = i % V9_SIZE;
- liquidVerts[(count + i) * 3 + 0] = (xoffset + col * GRID_PART_SIZE) * -1;
+ liquidVerts[(count + i) * 3 + 0] = (yoffset + col * GRID_PART_SIZE) * -1;
liquidVerts[(count + i) * 3 + 1] = lheader.liquidLevel;
- liquidVerts[(count + i) * 3 + 2] = (yoffset + row * GRID_PART_SIZE) * -1;
+ liquidVerts[(count + i) * 3 + 2] = (xoffset + row * GRID_PART_SIZE) * -1;
}
}
@@ -467,14 +467,14 @@ namespace MMAP
switch (grid)
{
case GRID_V9:
- coord[0] = (xOffset + (int)(index % V9_SIZE) * GRID_PART_SIZE) * -1.f;
+ coord[0] = (yOffset + (int)(index % V9_SIZE) * GRID_PART_SIZE) * -1.f;
coord[1] = v[index];
- coord[2] = (yOffset + (int)(index / (V9_SIZE)) * GRID_PART_SIZE) * -1.f;
+ coord[2] = (xOffset + (int)(index / (V9_SIZE)) * GRID_PART_SIZE) * -1.f;
break;
case GRID_V8:
- coord[0] = (xOffset + (int)(index % V8_SIZE) * GRID_PART_SIZE + GRID_PART_SIZE / 2.f) * -1.f;
+ coord[0] = (yOffset + (int)(index % V8_SIZE) * GRID_PART_SIZE + GRID_PART_SIZE / 2.f) * -1.f;
coord[1] = v[index];
- coord[2] = (yOffset + (int)(index / (V8_SIZE)) * GRID_PART_SIZE + GRID_PART_SIZE / 2.f) * -1.f;
+ coord[2] = (xOffset + (int)(index / (V8_SIZE)) * GRID_PART_SIZE + GRID_PART_SIZE / 2.f) * -1.f;
break;
}
}
@@ -531,9 +531,9 @@ namespace MMAP
{
// wow coords: x, y, height
// coord is mirroed about the horizontal axes
- coord[0] = (xOffset + (int)(index % V9_SIZE) * GRID_PART_SIZE) * -1.f;
+ coord[0] = (yOffset + (int)(index % V9_SIZE) * GRID_PART_SIZE) * -1.f;
coord[1] = v[index2];
- coord[2] = (yOffset + (int)(index / (V9_SIZE)) * GRID_PART_SIZE) * -1.f;
+ coord[2] = (xOffset + (int)(index / (V9_SIZE)) * GRID_PART_SIZE) * -1.f;
}
/**************************************************************************/
diff --git a/src/tools/mmaps_generator/TileBuilder.cpp b/src/tools/mmaps_generator/TileBuilder.cpp
index 815904788ec..4b0220e97a1 100644
--- a/src/tools/mmaps_generator/TileBuilder.cpp
+++ b/src/tools/mmaps_generator/TileBuilder.cpp
@@ -102,7 +102,7 @@ namespace MMAP
m_terrainBuilder.loadMap(mapID, tileX, tileY, meshData, vmapManager.get());
// get model data
- m_terrainBuilder.loadVMap(mapID, tileY, tileX, meshData, vmapManager.get());
+ m_terrainBuilder.loadVMap(mapID, tileX, tileY, meshData, vmapManager.get());
// if there is no data, give up now
if (meshData.solidVerts.empty() && meshData.liquidVerts.empty())
@@ -448,7 +448,7 @@ namespace MMAP
});
// file output
- std::string fileName = Trinity::StringFormat("mmaps/{:04}{:02}{:02}.mmtile", mapID, tileY, tileX);
+ std::string fileName = Trinity::StringFormat("mmaps/{:04}{:02}{:02}.mmtile", mapID, tileX, tileY);
auto file = Trinity::make_unique_ptr_with_deleter<&::fclose>(fopen(fileName.c_str(), "wb"));
if (!file)
{
@@ -481,8 +481,8 @@ namespace MMAP
}
// this is for width and depth
- bmax[0] = (32 - int(tileX)) * GRID_SIZE;
- bmax[2] = (32 - int(tileY)) * GRID_SIZE;
+ bmax[0] = (32 - int(tileY)) * GRID_SIZE;
+ bmax[2] = (32 - int(tileX)) * GRID_SIZE;
bmin[0] = bmax[0] - GRID_SIZE;
bmin[2] = bmax[2] - GRID_SIZE;
}
diff --git a/src/tools/vmap4_assembler/TileAssembler.cpp b/src/tools/vmap4_assembler/TileAssembler.cpp
index c9c652d0f16..d9cb8a92ede 100644
--- a/src/tools/vmap4_assembler/TileAssembler.cpp
+++ b/src/tools/vmap4_assembler/TileAssembler.cpp
@@ -242,8 +242,8 @@ namespace VMAP
{
uint32 x, y;
StaticMapTree::unpackTileID(tileId, x, y);
- auto tileFile = OpenFile(mapDestDir / Trinity::StringFormat("{:04}_{:02}_{:02}.vmtile", data.MapId, y, x), "wb");
- auto tileSpawnIndicesFile = OpenFile(mapDestDir / Trinity::StringFormat("{:04}_{:02}_{:02}.vmtileidx", data.MapId, y, x), "wb");
+ auto tileFile = OpenFile(mapDestDir / Trinity::StringFormat("{:04}_{:02}_{:02}.vmtile", data.MapId, x, y), "wb");
+ auto tileSpawnIndicesFile = OpenFile(mapDestDir / Trinity::StringFormat("{:04}_{:02}_{:02}.vmtileidx", data.MapId, x, y), "wb");
if (tileFile && tileSpawnIndicesFile)
{
std::set<uint32> const& parentTileEntries = data.ParentTileEntries[tileId];
@@ -288,7 +288,7 @@ namespace VMAP
uint32 x, y;
StaticMapTree::unpackTileID(tileId, x, y);
- auto tileSpawnIndicesFile = OpenFile(mapDestDir / Trinity::StringFormat("{:04}_{:02}_{:02}.vmtileidx", data.MapId, y, x), "wb");
+ auto tileSpawnIndicesFile = OpenFile(mapDestDir / Trinity::StringFormat("{:04}_{:02}_{:02}.vmtileidx", data.MapId, x, y), "wb");
if (tileSpawnIndicesFile)
{
uint32 nSpawns = spawns.size();
diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp
index 2db74603093..68ad7097cb5 100644
--- a/src/tools/vmap4_extractor/adtfile.cpp
+++ b/src/tools/vmap4_extractor/adtfile.cpp
@@ -15,74 +15,47 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "vmapexport.h"
#include "adtfile.h"
+#include "Common.h"
+#include "Memory.h"
#include "StringFormat.h"
+#include "Util.h"
+#include "vmapexport.h"
#include <cstdio>
-#include "Errors.h"
-#include "Memory.h"
-char const* GetPlainName(char const* FileName)
+std::string_view GetPlainName(std::string_view fileName)
{
- const char * szTemp;
-
- if((szTemp = strrchr(FileName, '\\')) != nullptr)
- FileName = szTemp + 1;
- return FileName;
-}
+ std::size_t lastSeparatorPos = fileName.find_last_of("\\/"sv);
-char* GetPlainName(char* FileName)
-{
- char * szTemp;
+ if (lastSeparatorPos != std::string_view::npos)
+ fileName.remove_prefix(lastSeparatorPos + 1);
- if((szTemp = strrchr(FileName, '\\')) != nullptr)
- FileName = szTemp + 1;
- return FileName;
+ return fileName;
}
-void FixNameCase(char* name, size_t len)
+void NormalizeFileName(std::string& name)
{
- char* ptr = name + len - 1;
+ if (name.starts_with("FILE"sv)) // name is FileDataId formatted, do not normalize
+ return;
+
+ auto ptr = name.begin() + (name.length() - 1);
//extension in lowercase
- for (; *ptr != '.' && ptr >= name; --ptr)
- *ptr |= 0x20;
+ for (; *ptr != '.' && ptr >= name.begin(); --ptr)
+ if (*ptr >= 'A' && *ptr <= 'Z')
+ *ptr |= 0x20;
- for (; ptr >= name; --ptr)
+ for (; ptr >= name.begin(); --ptr)
{
- if (ptr > name && *ptr >= 'A' && *ptr <= 'Z' && isalpha(*(ptr - 1)))
+ if (ptr > name.begin() && *ptr >= 'A' && *ptr <= 'Z' && isalpha(*(ptr - 1)))
*ptr |= 0x20;
- else if ((ptr == name || !isalpha(*(ptr - 1))) && *ptr >= 'a' && *ptr <= 'z')
+ else if ((ptr == name.begin() || !isalpha(*(ptr - 1))) && *ptr >= 'a' && *ptr <= 'z')
*ptr &= ~0x20;
+ else if (*ptr == ' ')
+ *ptr = '_';
}
}
-void FixNameSpaces(char* name, size_t len)
-{
- if (len < 3)
- return;
-
- for (size_t i = 0; i < len - 3; i++)
- if (name[i] == ' ')
- name[i] = '_';
-}
-
-void NormalizeFileName(char* name, size_t len)
-{
- if (len >= 4 && !memcmp(name, "FILE", 4)) // name is FileDataId formatted, do not normalize
- return;
-
- FixNameCase(name, len);
- FixNameSpaces(name, len);
-}
-
-char* GetExtension(char* FileName)
-{
- if (char* szTemp = strrchr(FileName, '.'))
- return szTemp;
- return nullptr;
-}
-
extern std::shared_ptr<CASC::Storage> CascStorage;
ADTFile::ADTFile(std::string const& filename, bool cache) : _file(CascStorage, filename.c_str(), false)
@@ -131,46 +104,32 @@ bool ADTFile::init(uint32 map_num, uint32 originalMapId)
{
if (size)
{
- char* buf = new char[size];
- _file.read(buf, size);
- char* p = buf;
- while (p < buf + size)
+ char* p = _file.getPointer();
+ _file.seekRelative(size);
+ char* end = _file.getPointer();
+ while (p < end)
{
- std::string path(p);
-
- char* s = GetPlainName(p);
- NormalizeFileName(s, strlen(s));
-
- ModelInstanceNames.emplace_back(s);
+ std::size_t length = std::ranges::distance(p, CStringSentinel.Checked(end));
+ ModelInstanceNames.emplace_back(p, length);
- ExtractSingleModel(path);
-
- p += strlen(p) + 1;
+ p += length + 1;
}
- delete[] buf;
}
}
else if (!strcmp(fourcc,"MWMO"))
{
if (size)
{
- char* buf = new char[size];
- _file.read(buf, size);
- char* p = buf;
- while (p < buf + size)
+ char* p = _file.getPointer();
+ _file.seekRelative(size);
+ char* end = _file.getPointer();
+ while (p < end)
{
- std::string path(p);
-
- char* s = GetPlainName(p);
- NormalizeFileName(s, strlen(s));
-
- WmoInstanceNames.emplace_back(s);
+ std::size_t length = std::ranges::distance(p, CStringSentinel.Checked(end));
+ WmoInstanceNames.emplace_back(p, length);
- ExtractSingleWmo(path);
-
- p += strlen(p) + 1;
+ p += length + 1;
}
- delete[] buf;
}
}
//======================
@@ -183,16 +142,15 @@ bool ADTFile::init(uint32 map_num, uint32 originalMapId)
{
ADT::MDDF doodadDef;
_file.read(&doodadDef, sizeof(ADT::MDDF));
- if (!(doodadDef.Flags & 0x40))
- {
- Doodad::Extract(doodadDef, ModelInstanceNames[doodadDef.Id].c_str(), map_num, originalMapId, dirfile.get(), dirfileCache);
- }
+
+ std::string fileName;
+ if (doodadDef.Flags & 0x40)
+ fileName = Trinity::StringFormat("FILE{:08X}.xxx", doodadDef.Id);
else
- {
- std::string fileName = Trinity::StringFormat("FILE{:08X}.xxx", doodadDef.Id);
- ExtractSingleModel(fileName);
+ fileName = ModelInstanceNames[doodadDef.Id];
+
+ if (ExtractSingleModel(fileName))
Doodad::Extract(doodadDef, fileName.c_str(), map_num, originalMapId, dirfile.get(), dirfileCache);
- }
}
ModelInstanceNames.clear();
@@ -207,17 +165,20 @@ bool ADTFile::init(uint32 map_num, uint32 originalMapId)
{
ADT::MODF mapObjDef;
_file.read(&mapObjDef, sizeof(ADT::MODF));
- if (!(mapObjDef.Flags & 0x8))
- {
- MapObject::Extract(mapObjDef, WmoInstanceNames[mapObjDef.Id].c_str(), false, map_num, originalMapId, dirfile.get(), dirfileCache);
- Doodad::ExtractSet(WmoDoodads[WmoInstanceNames[mapObjDef.Id]], mapObjDef, false, map_num, originalMapId, dirfile.get(), dirfileCache);
- }
+
+ std::string fileName;
+ if (mapObjDef.Flags & 0x8)
+ fileName = Trinity::StringFormat("FILE{:08X}.xxx", mapObjDef.Id);
else
+ fileName = WmoInstanceNames[mapObjDef.Id];
+
+ if (ExtractedModelData const* extracted = ExtractSingleWmo(fileName))
{
- std::string fileName = Trinity::StringFormat("FILE{:08X}.xxx", mapObjDef.Id);
- ExtractSingleWmo(fileName);
- MapObject::Extract(mapObjDef, fileName.c_str(), false, map_num, originalMapId, dirfile.get(), dirfileCache);
- Doodad::ExtractSet(WmoDoodads[fileName], mapObjDef, false, map_num, originalMapId, dirfile.get(), dirfileCache);
+ if (extracted->HasCollision())
+ MapObject::Extract(mapObjDef, fileName.c_str(), false, map_num, originalMapId, dirfile.get(), dirfileCache);
+
+ if (extracted->Doodads)
+ Doodad::ExtractSet(*extracted->Doodads, mapObjDef, false, map_num, originalMapId, dirfile.get(), dirfileCache);
}
}
diff --git a/src/tools/vmap4_extractor/adtfile.h b/src/tools/vmap4_extractor/adtfile.h
index 8c03da3b58b..f1c0476d244 100644
--- a/src/tools/vmap4_extractor/adtfile.h
+++ b/src/tools/vmap4_extractor/adtfile.h
@@ -72,10 +72,7 @@ public:
bool initFromCache(uint32 map_num, uint32 originalMapId);
};
-char const* GetPlainName(char const* FileName);
-char* GetPlainName(char* FileName);
-char* GetExtension(char* FileName);
-void NormalizeFileName(char* name, size_t len);
-//void fixMapNamen(char *name, size_t len);
+std::string_view GetPlainName(std::string_view fileName);
+void NormalizeFileName(std::string& fileName);
#endif
diff --git a/src/tools/vmap4_extractor/gameobject_extract.cpp b/src/tools/vmap4_extractor/gameobject_extract.cpp
index 9b6188304d7..a7774347212 100644
--- a/src/tools/vmap4_extractor/gameobject_extract.cpp
+++ b/src/tools/vmap4_extractor/gameobject_extract.cpp
@@ -19,6 +19,8 @@
#include "DB2CascFileSource.h"
#include "Errors.h"
#include "ExtractorDB2LoadInfo.h"
+#include "Memory.h"
+#include "StringConvert.h"
#include "model.h"
#include "StringFormat.h"
#include "vmapexport.h"
@@ -28,35 +30,42 @@
#include <cstdio>
#include "advstd.h"
-bool ExtractSingleModel(std::string& fname)
+ExtractedModelData const* ExtractSingleModel(std::string& fname)
{
if (fname.length() < 4)
- return false;
+ return nullptr;
- std::string extension = fname.substr(fname.length() - 4, 4);
- if (extension == ".mdx" || extension == ".MDX" || extension == ".mdl" || extension == ".MDL")
- {
- fname.erase(fname.length() - 2, 2);
- fname.append("2");
- }
+ std::string_view extension = std::string_view(fname).substr(fname.length() - 4, 4);
+ if (StringEqualI(extension, ".mdx"sv) || StringEqualI(extension, ".mdl"sv))
+ fname.replace(fname.length() - 2, 2, "2");
std::string originalName = fname;
- char* name = GetPlainName((char*)fname.c_str());
- NormalizeFileName(name, strlen(name));
+ fname = GetPlainName(fname);
+ NormalizeFileName(fname);
- std::string output(szWorkDirWmo);
- output += "/";
- output += name;
+ auto [model, shouldExtract] = BeginModelExtraction(fname);
+ if (!shouldExtract)
+ {
+ model->Wait();
+ return model->State.load(std::memory_order::relaxed) == ExtractedModelData::Ok ? model : nullptr;
+ }
- if (FileExists(output.c_str()))
- return true;
+ auto stateGuard = Trinity::make_unique_ptr_with_deleter<&ExtractedModelData::Fail>(model);
Model mdl(originalName);
if (!mdl.open())
- return false;
+ return nullptr;
+
+ std::string output(szWorkDirWmo);
+ output += "/";
+ output += fname;
- return mdl.ConvertToVMAPModel(output.c_str());
+ if (!mdl.ConvertToVMAPModel(output.c_str()))
+ return nullptr;
+
+ stateGuard->Complete();
+ return stateGuard.release();
}
extern std::shared_ptr<CASC::Storage> CascStorage;
@@ -123,9 +132,12 @@ void ExtractGameobjectModels()
std::string_view header(headerRaw.data(), headerRaw.size());
if (header == "REVM")
- result = ExtractSingleWmo(fileName);
+ {
+ ExtractedModelData const* wmo = ExtractSingleWmo(fileName);
+ result = wmo && wmo->HasCollision();
+ }
else if (header == "MD20" || header == "MD21")
- result = ExtractSingleModel(fileName);
+ result = ExtractSingleModel(fileName) != nullptr;
else if (header == "BLP2")
continue; // broken db2 data
else
diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp
index 9b4b629265c..f5ce45929bb 100644
--- a/src/tools/vmap4_extractor/model.cpp
+++ b/src/tools/vmap4_extractor/model.cpp
@@ -159,21 +159,7 @@ Vec3D fixCoordSystem(Vec3D const& v)
void Doodad::Extract(ADT::MDDF const& doodadDef, char const* ModelInstName, uint32 mapID, uint32 originalMapId, FILE* pDirfile, std::vector<ADTOutputCache>* dirfileCache)
{
- std::string tempname = Trinity::StringFormat("{}/{}", szWorkDirWmo, ModelInstName);
- FILE* input = fopen(tempname.c_str(), "r+b");
-
- if (!input)
- return;
-
- fseek(input, 8, SEEK_SET); // get the correct no of vertices
- int nVertices;
- int count = fread(&nVertices, sizeof(int), 1, input);
- fclose(input);
-
- if (count != 1 || nVertices == 0)
- return;
-
- // scale factor - divide by 1024. blizzard devs must be on crack, why not just use a float?
+ // scale factor - divide by 1024
float sc = doodadDef.Scale / 1024.0f;
Vec3D position = fixCoords(doodadDef.Position);
@@ -247,32 +233,16 @@ void Doodad::ExtractSet(WMODoodadData const& doodadData, ADT::MODF const& wmo, b
std::string ModelInstName;
if (doodadData.Paths)
- ModelInstName = GetPlainName(&doodadData.Paths[doodad.NameIndex]);
+ ModelInstName = &doodadData.Paths[doodad.NameIndex];
else if (doodadData.FileDataIds)
ModelInstName = Trinity::StringFormat("FILE{:08X}.xxx", doodadData.FileDataIds[doodad.NameIndex]);
else
ASSERT(false);
- uint32 nlen = ModelInstName.length();
- NormalizeFileName(ModelInstName.data(), nlen);
- if (ModelInstName.ends_with(".mdx") || ModelInstName.ends_with(".mdl"))
- {
- ModelInstName.replace(ModelInstName.length() - 2, 2, "2");
- nlen = ModelInstName.length();
- }
-
- std::string tempname = Trinity::StringFormat("{}/{}", szWorkDirWmo, ModelInstName);
- FILE* input = fopen(tempname.c_str(), "r+b");
- if (!input)
+ if (!ExtractSingleModel(ModelInstName))
continue;
- fseek(input, 8, SEEK_SET); // get the correct no of vertices
- int nVertices;
- int count = fread(&nVertices, sizeof(int), 1, input);
- fclose(input);
-
- if (count != 1 || nVertices == 0)
- continue;
+ uint32 nlen = ModelInstName.length();
ASSERT(doodadId < std::numeric_limits<uint16>::max());
++doodadId;
diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp
index 3f3e29685f0..91508b1ca6d 100644
--- a/src/tools/vmap4_extractor/vmapexport.cpp
+++ b/src/tools/vmap4_extractor/vmapexport.cpp
@@ -24,7 +24,10 @@
#include "Locales.h"
#include "MapDefines.h"
#include "MapUtils.h"
+#include "Memory.h"
+#include "StringConvert.h"
#include "StringFormat.h"
+#include "ThreadPool.h"
#include "Util.h"
#include "VMapDefinitions.h"
#include "wdtfile.h"
@@ -33,7 +36,6 @@
#include <boost/filesystem/directory.hpp>
#include <boost/filesystem/operations.hpp>
#include <algorithm>
-#include <fstream>
#include <list>
#include <map>
#include <unordered_map>
@@ -62,19 +64,21 @@ struct MapEntry
int16 ParentMapID = 0;
std::string Name;
std::string Directory;
+
+ uint32 ChildDepth = 0;
+ bool IsParent = false;
};
std::unordered_map<uint32, LiquidMaterialEntry> LiquidMaterials;
std::unordered_map<uint32, LiquidTypeEntry> LiquidTypes;
-std::vector<MapEntry> map_ids; // partitioned by parent maps first
-std::unordered_set<uint32> maps_that_are_parents;
+std::vector<MapEntry> map_ids;
boost::filesystem::path input_path;
bool preciseVectorData = false;
char const* CascProduct = "wow";
char const* CascRegion = "eu";
bool UseRemoteCasc = false;
uint32 DbcLocale = 0;
-std::unordered_map<std::string, WMODoodadData> WmoDoodads;
+uint32 Threads = std::thread::hardware_concurrency();
// Constants
@@ -171,65 +175,79 @@ uint32 GetInstalledLocalesMask()
return 0;
}
-uint32 uniqueObjectIdGenerator = std::numeric_limits<uint32>::max() - 1;
-std::map<std::pair<uint32, uint16>, uint32> uniqueObjectIds;
+static std::atomic<uint32> UniqueObjectIdGenerator = std::numeric_limits<uint32>::max() - 1;
+static std::mutex UniqueObjectIdsMutex;
+static std::map<std::pair<uint32, uint16>, uint32> UniqueObjectIds;
uint32 GenerateUniqueObjectId(uint32 clientId, uint16 clientDoodadId, bool isWmo)
{
// WMO client ids must be preserved, they are used in DB2 files
- uint32 newId = isWmo ? clientId : uniqueObjectIdGenerator--;
- return uniqueObjectIds.emplace(std::make_pair(clientId, clientDoodadId), newId).first->second;
+ uint32 newId = isWmo ? clientId : UniqueObjectIdGenerator--;
+ std::lock_guard lock(UniqueObjectIdsMutex);
+ return UniqueObjectIds.emplace(std::make_pair(clientId, clientDoodadId), newId).first->second;
}
-// Local testing functions
-bool FileExists(char const* file)
+static std::mutex ExtractedModelsMutex;
+std::unordered_map<std::string, ExtractedModelData> ExtractedModels;
+
+std::pair<ExtractedModelData*, bool> BeginModelExtraction(std::string const& outputName)
{
- if (FILE* n = fopen(file, "rb"))
- {
- fclose(n);
- return true;
- }
- return false;
+ std::lock_guard lock(ExtractedModelsMutex);
+ auto [itr, isNew] = ExtractedModels.try_emplace(outputName);
+ return { &itr->second, isNew };
}
-bool ExtractSingleWmo(std::string& fname)
+ExtractedModelData const* ExtractSingleWmo(std::string& fname)
{
// Copy files from archive
std::string originalName = fname;
- char* plain_name = GetPlainName(&fname[0]);
- NormalizeFileName(plain_name, strlen(plain_name));
- std::string szLocalFile = Trinity::StringFormat("{}/{}", szWorkDirWmo, plain_name);
+ fname = GetPlainName(fname);
+ NormalizeFileName(fname);
- if (FileExists(szLocalFile.c_str()))
- return true;
+ auto [model, shouldExtract] = BeginModelExtraction(fname);
+ if (!shouldExtract)
+ {
+ model->Wait();
+ switch (model->State.load(std::memory_order::relaxed))
+ {
+ case ExtractedModelData::Ok:
+ case ExtractedModelData::OkNoCollision:
+ return model;
+ default:
+ return nullptr;
+ }
+ }
+
+ auto stateGuard = Trinity::make_unique_ptr_with_deleter<&ExtractedModelData::Fail>(model);
int p = 0;
// Select root wmo files
- char const* rchr = strrchr(plain_name, '_');
- if (rchr != nullptr)
- for (int i = 0; i < 4; ++i)
- if (isdigit(rchr[i]))
+ std::size_t rchr = fname.find_last_of('_');
+ if (rchr != std::string::npos)
+ for (std::size_t i = 0; i < 4 && rchr + i < fname.length(); ++i)
+ if (isdigit(fname[rchr + i]))
p++;
if (p == 3)
- return true;
+ return nullptr;
bool file_ok = true;
WMORoot froot(originalName);
if (!froot.open())
{
printf("Couldn't open RootWmo!!!\n");
- return true;
+ return nullptr;
}
- FILE *output = fopen(szLocalFile.c_str(),"wb");
+ std::string szLocalFile = Trinity::StringFormat("{}/{}", szWorkDirWmo, fname);
+ FILE* output = fopen(szLocalFile.c_str(), "wb");
if(!output)
{
printf("couldn't open %s for writing!\n", szLocalFile.c_str());
- return false;
+ return nullptr;
}
froot.ConvertToVMAPRootWmo(output);
- WMODoodadData& doodads = WmoDoodads[plain_name];
+ WMODoodadData& doodads = *(model->Doodads = std::make_unique<WMODoodadData>());
std::swap(doodads, froot.DoodadData);
int Wmo_nVertices = 0;
uint32 groupCount = 0;
@@ -242,7 +260,7 @@ bool ExtractSingleWmo(std::string& fname)
WMOGroup& fgroup = groups.emplace_back(s);
if (!fgroup.open(&froot))
{
- printf("Could not open all Group file for: %s\n", plain_name);
+ printf("Could not open all Group file for: %s\n", fname.c_str());
file_ok = false;
break;
}
@@ -266,7 +284,7 @@ bool ExtractSingleWmo(std::string& fname)
continue;
uint32 doodadNameIndex = doodads.Spawns[groupReference].NameIndex;
- if (froot.ValidDoodadNames.find(doodadNameIndex) == froot.ValidDoodadNames.end())
+ if (!froot.ValidDoodadNames.contains(doodadNameIndex))
continue;
doodads.References.insert(groupReference);
@@ -279,10 +297,18 @@ bool ExtractSingleWmo(std::string& fname)
fwrite(&groupCount, sizeof(uint32), 1, output);
fclose(output);
- // Delete the extracted file in the case of an error
- if (!file_ok)
+ if (!Wmo_nVertices && (doodads.Sets.empty() || doodads.References.empty()))
+ file_ok = false;
+
+ // Delete the extracted file in the case of an error or no collision
+ if (!file_ok || !Wmo_nVertices)
remove(szLocalFile.c_str());
- return true;
+
+ if (!file_ok)
+ return nullptr;
+
+ stateGuard->Complete(Wmo_nVertices ? ExtractedModelData::Ok : ExtractedModelData::OkNoCollision);
+ return stateGuard.release();
}
bool IsLiquidIgnored(uint32 liquidTypeId)
@@ -298,62 +324,75 @@ bool IsLiquidIgnored(uint32 liquidTypeId)
void ParsMapFiles()
{
std::unordered_map<uint32, WDTFile> wdts;
- auto getWDT = [&wdts](uint32 mapId) -> WDTFile*
+ std::map<uint32, std::vector<MapEntry const*>> steps;
+ for (MapEntry const& mapEntry : map_ids)
{
- auto itr = wdts.find(mapId);
- if (itr == wdts.end())
- {
- auto mapEntryItr = std::ranges::find(map_ids, mapId, &MapEntry::Id);
- if (mapEntryItr == map_ids.end())
- return nullptr;
-
- uint32 fileDataId = mapEntryItr->WdtFileDataId;
- if (!fileDataId)
- return nullptr;
-
- std::string description = Trinity::StringFormat("WDT for map {} - {} (FileDataID {})", mapId, mapEntryItr->Name, fileDataId);
- std::string directory = mapEntryItr->Directory;
- itr = wdts.emplace(std::piecewise_construct, std::forward_as_tuple(mapId), std::forward_as_tuple(fileDataId, description, std::move(directory), maps_that_are_parents.count(mapId) > 0)).first;
- if (!itr->second.init(mapId))
- {
- wdts.erase(itr);
- return nullptr;
- }
- }
+ steps[mapEntry.ChildDepth].push_back(&mapEntry);
- return &itr->second;
- };
+ // preload WDTs
+ std::string description = Trinity::StringFormat("WDT for map {} - {} (FileDataID {})", mapEntry.Id, mapEntry.Name, mapEntry.WdtFileDataId);
+ auto itr = wdts.try_emplace(mapEntry.Id, mapEntry.WdtFileDataId, description, mapEntry.Directory, mapEntry.IsParent).first;
+ if (!itr->second.init(mapEntry.Id))
+ wdts.erase(itr);
+ }
- for (MapEntry const& mapEntry : map_ids)
+ for (auto const& [_, maps] : steps)
{
- if (WDTFile* WDT = getWDT(mapEntry.Id))
+ Trinity::ThreadPool threadPool(Threads);
+
+ for (MapEntry const* mapEntry : maps)
{
- WDTFile* parentWDT = mapEntry.ParentMapID >= 0 ? getWDT(mapEntry.ParentMapID) : nullptr;
- printf("Processing Map %u\n[", mapEntry.Id);
- for (int32 x = 0; x < 64; ++x)
+ threadPool.PostWork([mapEntry, &wdts]
{
- for (int32 y = 0; y < 64; ++y)
+ if (WDTFile* WDT = Trinity::Containers::MapGetValuePtr(wdts, mapEntry->Id))
{
- bool success = false;
- if (ADTFile* ADT = WDT->GetMap(x, y))
+ int16 parentMapId = mapEntry->ParentMapID;
+ std::vector<WDTFile*> parentWDTs;
+ while (parentMapId >= 0)
{
- success = ADT->init(mapEntry.Id, mapEntry.Id);
- WDT->FreeADT(ADT);
+ parentWDTs.push_back(Trinity::Containers::MapGetValuePtr(wdts, mapEntry->ParentMapID));
+
+ auto parentMapItr = std::ranges::find(map_ids, uint32(parentMapId), &MapEntry::Id);
+ if (parentMapItr == map_ids.end())
+ break;
+
+ parentMapId = parentMapItr->ParentMapID;
}
- if (!success && parentWDT)
+
+ printf("Processing Map %u\n", mapEntry->Id);
+ for (int32 x = 0; x < 64; ++x)
{
- if (ADTFile* ADT = parentWDT->GetMap(x, y))
+ for (int32 y = 0; y < 64; ++y)
{
- ADT->init(mapEntry.Id, mapEntry.ParentMapID);
- parentWDT->FreeADT(ADT);
+ bool success = false;
+ if (ADTFile* ADT = WDT->GetMap(x, y, true))
+ {
+ success = ADT->init(mapEntry->Id, mapEntry->Id);
+ WDT->FreeADT(ADT);
+ }
+
+ if (!success)
+ {
+ for (WDTFile* parentWDT : parentWDTs)
+ {
+ if (ADTFile* ADT = parentWDT->GetMap(x, y, false))
+ {
+ success = ADT->init(mapEntry->Id, mapEntry->ParentMapID);
+ parentWDT->FreeADT(ADT);
+ }
+
+ if (success)
+ break;
+ }
+ }
}
}
+ printf("Processing Map %u Done\n", mapEntry->Id);
}
- printf("#");
- fflush(stdout);
- }
- printf("]\n");
+ });
}
+
+ threadPool.Join();
}
}
@@ -396,9 +435,6 @@ void ReadMapTable()
if (map.ParentMapID < 0)
map.ParentMapID = int16(record.GetUInt16("CosmeticParentMapID"));
- if (map.ParentMapID >= 0)
- maps_that_are_parents.insert(map.ParentMapID);
-
idToIndex[map.Id] = map_ids.size() - 1;
}
@@ -413,10 +449,22 @@ void ReadMapTable()
}
}
- std::erase_if(map_ids, [](MapEntry const& map) { return !map.WdtFileDataId; });
-
// force parent maps to be extracted first
- std::stable_partition(map_ids.begin(), map_ids.end(), [](MapEntry const& map) { return maps_that_are_parents.contains(map.Id); });
+ for (MapEntry& map : map_ids)
+ {
+ int16 parentMapId = map.ParentMapID;
+ while (parentMapId >= 0)
+ {
+ ++map.ChildDepth;
+
+ MapEntry& parent = map_ids[idToIndex[parentMapId]];
+ parent.IsParent = true;
+
+ parentMapId = parent.ParentMapID;
+ }
+ }
+
+ std::erase_if(map_ids, [](MapEntry const& map) { return !map.WdtFileDataId; });
printf("Done! (" SZFMTD " maps loaded)\n", map_ids.size());
}
@@ -530,6 +578,13 @@ bool processArgv(int argc, char ** argv, const char *versionString)
else
result = false;
}
+ else if (strcmp("--threads", argv[i]) == 0)
+ {
+ if (i + 1 < argc && strlen(argv[i + 1]))
+ Threads = Trinity::StringTo<uint32>(argv[++i]).value_or(std::thread::hardware_concurrency());
+ else
+ result = false;
+ }
else
{
result = false;
@@ -548,6 +603,7 @@ bool processArgv(int argc, char ** argv, const char *versionString)
printf(" -c use remote casc\n");
printf(" -r set remote casc region - standard: eu\n");
printf(" -dl dbc locale\n");
+ printf(" --threads <N> number of threads to use, default: all cpu cores\n");
printf(" -? : This message.\n");
}
diff --git a/src/tools/vmap4_extractor/vmapexport.h b/src/tools/vmap4_extractor/vmapexport.h
index 1aba56a44c1..99e13814e81 100644
--- a/src/tools/vmap4_extractor/vmapexport.h
+++ b/src/tools/vmap4_extractor/vmapexport.h
@@ -19,6 +19,8 @@
#define VMAPEXPORT_H
#include "Define.h"
+#include <atomic>
+#include <memory>
#include <string>
#include <unordered_map>
@@ -26,7 +28,8 @@
enum ModelInstanceFlags
{
MOD_HAS_BOUND = 1 << 0,
- MOD_PARENT_SPAWN = 1 << 1
+ MOD_PARENT_SPAWN = 1 << 1,
+ MOD_PATH_ONLY = 1 << 2
};
// flags of each model
@@ -39,14 +42,46 @@ enum class ModelFlags : uint32
struct WMODoodadData;
extern const char * szWorkDirWmo;
-extern std::unordered_map<std::string, WMODoodadData> WmoDoodads;
uint32 GenerateUniqueObjectId(uint32 clientId, uint16 clientDoodadId, bool isWmo);
-bool FileExists(const char * file);
+struct ExtractedModelData
+{
+ enum ExtractionState : uint8
+ {
+ InProgress,
+ Ok,
+ OkNoCollision, // has no data by itself but its WMO doodads do
+ Failed
+ };
+
+ std::atomic<ExtractionState> State;
+ std::unique_ptr<WMODoodadData> Doodads;
+
+ void Wait()
+ {
+ State.wait(InProgress);
+ }
+
+ void Fail()
+ {
+ State.store(Failed);
+ State.notify_all();
+ }
+
+ void Complete(ExtractionState state = Ok)
+ {
+ State.store(state);
+ State.notify_all();
+ }
+
+ bool HasCollision() const { return State.load(std::memory_order::relaxed) == Ok; }
+};
+
+std::pair<ExtractedModelData*, bool> BeginModelExtraction(std::string const& outputName);
-bool ExtractSingleWmo(std::string& fname);
-bool ExtractSingleModel(std::string& fname);
+ExtractedModelData const* ExtractSingleWmo(std::string& fname);
+ExtractedModelData const* ExtractSingleModel(std::string& fname);
void ExtractGameobjectModels();
diff --git a/src/tools/vmap4_extractor/wdtfile.cpp b/src/tools/vmap4_extractor/wdtfile.cpp
index de806159ba0..d117a87a19e 100644
--- a/src/tools/vmap4_extractor/wdtfile.cpp
+++ b/src/tools/vmap4_extractor/wdtfile.cpp
@@ -22,22 +22,15 @@
#include "Errors.h"
#include "Memory.h"
#include "StringFormat.h"
+#include "Util.h"
#include <cstdio>
extern std::shared_ptr<CASC::Storage> CascStorage;
WDTFile::WDTFile(uint32 fileDataId, std::string const& description, std::string mapName, bool cache)
- : _file(CascStorage, fileDataId, description), _mapName(std::move(mapName))
+ : _file(CascStorage, fileDataId, description), _header(), _adtInfo(), _mapName(std::move(mapName)),
+ _adtCache(cache ? std::make_unique<ADTCache>() : nullptr)
{
- memset(&_header, 0, sizeof(WDT::MPHD));
- memset(&_adtInfo, 0, sizeof(WDT::MAIN));
- if (cache)
- {
- _adtCache = std::make_unique<ADTCache>();
- memset(_adtCache->file, 0, sizeof(_adtCache->file));
- }
- else
- _adtCache = nullptr;
}
WDTFile::~WDTFile() = default;
@@ -89,21 +82,16 @@ bool WDTFile::init(uint32 mapId)
// global map objects
if (size)
{
- char *buf = new char[size];
- _file.read(buf, size);
- char *p = buf;
- while (p < buf + size)
+ char* p = _file.getPointer();
+ _file.seekRelative(size);
+ char* end = _file.getPointer();
+ while (p < end)
{
- std::string path(p);
+ std::size_t length = std::ranges::distance(p, CStringSentinel.Checked(end));
+ _wmoNames.emplace_back(p, length);
- char* s = GetPlainName(p);
- NormalizeFileName(s, strlen(s));
- p = p + strlen(p) + 1;
- _wmoNames.emplace_back(s);
-
- ExtractSingleWmo(path);
+ p += length + 1;
}
- delete[] buf;
}
}
else if (!strcmp(fourcc, "MODF"))
@@ -116,17 +104,20 @@ bool WDTFile::init(uint32 mapId)
{
ADT::MODF mapObjDef;
_file.read(&mapObjDef, sizeof(ADT::MODF));
- if (!(mapObjDef.Flags & 0x8))
- {
- MapObject::Extract(mapObjDef, _wmoNames[mapObjDef.Id].c_str(), true, mapId, mapId, dirfile.get(), nullptr);
- Doodad::ExtractSet(WmoDoodads[_wmoNames[mapObjDef.Id]], mapObjDef, true, mapId, mapId, dirfile.get(), nullptr);
- }
+
+ std::string fileName;
+ if (mapObjDef.Flags & 0x8)
+ fileName = Trinity::StringFormat("FILE{:08X}.xxx", mapObjDef.Id);
else
+ fileName = _wmoNames[mapObjDef.Id];
+
+ if (ExtractedModelData const* extracted = ExtractSingleWmo(fileName))
{
- std::string fileName = Trinity::StringFormat("FILE{:08X}.xxx", mapObjDef.Id);
- ExtractSingleWmo(fileName);
- MapObject::Extract(mapObjDef, fileName.c_str(), true, mapId, mapId, dirfile.get(), nullptr);
- Doodad::ExtractSet(WmoDoodads[fileName], mapObjDef, true, mapId, mapId, dirfile.get(), nullptr);
+ if (extracted->HasCollision())
+ MapObject::Extract(mapObjDef, fileName.c_str(), true, mapId, mapId, dirfile.get(), nullptr);
+
+ if (extracted->Doodads)
+ Doodad::ExtractSet(*extracted->Doodads, mapObjDef, true, mapId, mapId, dirfile.get(), nullptr);
}
}
}
@@ -138,7 +129,7 @@ bool WDTFile::init(uint32 mapId)
return true;
}
-ADTFile* WDTFile::GetMap(int32 x, int32 y)
+ADTFile* WDTFile::GetMap(int32 x, int32 y, bool createIfMissing)
{
if (!(x >= 0 && y >= 0 && x < 64 && y < 64))
return nullptr;
@@ -149,6 +140,9 @@ ADTFile* WDTFile::GetMap(int32 x, int32 y)
if (!(_adtInfo.Data[y][x].Flag & 1))
return nullptr;
+ if (!createIfMissing)
+ return nullptr;
+
ADTFile* adt;
std::string name = Trinity::StringFormat(R"(World\Maps\{}\{}_{}_{}_obj0.adt)", _mapName, _mapName, x, y);
if (_header.Flags & 0x200)
diff --git a/src/tools/vmap4_extractor/wdtfile.h b/src/tools/vmap4_extractor/wdtfile.h
index 47b111fd13e..e8fe5ea193b 100644
--- a/src/tools/vmap4_extractor/wdtfile.h
+++ b/src/tools/vmap4_extractor/wdtfile.h
@@ -74,7 +74,7 @@ public:
~WDTFile();
bool init(uint32 mapId);
- ADTFile* GetMap(int32 x, int32 y);
+ ADTFile* GetMap(int32 x, int32 y, bool createIfMissing);
void FreeADT(ADTFile* adt);
private:
CASCFile _file;
diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp
index 001abad4907..ae81e376ebd 100644
--- a/src/tools/vmap4_extractor/wmo.cpp
+++ b/src/tools/vmap4_extractor/wmo.cpp
@@ -23,6 +23,7 @@
#include "vec3d.h"
#include "VMapDefinitions.h"
#include "wmo.h"
+#include "Util.h"
#include <algorithm>
#include <fstream>
#include <map>
@@ -86,19 +87,17 @@ bool WMORoot::open()
{
ASSERT(!DoodadData.FileDataIds);
- char* ptr = f.getPointer();
- char* end = ptr + size;
DoodadData.Paths = std::make_unique<char[]>(size);
- memcpy(DoodadData.Paths.get(), ptr, size);
+ f.read(DoodadData.Paths.get(), size);
+ char* ptr = DoodadData.Paths.get();
+ char* end = ptr + size;
while (ptr < end)
{
- std::string path = ptr;
-
- char* s = GetPlainName(ptr);
- NormalizeFileName(s, strlen(s));
+ std::size_t length = std::ranges::distance(ptr, CStringSentinel.Checked(end));
+ std::string path(ptr, length);
- uint32 doodadNameIndex = ptr - f.getPointer();
- ptr += path.length() + 1;
+ uint32 doodadNameIndex = ptr - DoodadData.Paths.get();
+ ptr += length + 1;
if (ExtractSingleModel(path))
ValidDoodadNames.insert(doodadNameIndex);
@@ -587,30 +586,8 @@ WMOGroup::~WMOGroup()
void MapObject::Extract(ADT::MODF const& mapObjDef, char const* WmoInstName, bool isGlobalWmo, uint32 mapID, uint32 originalMapId, FILE* pDirfile, std::vector<ADTOutputCache>* dirfileCache)
{
- // destructible wmo, do not dump. we can handle the vmap for these
- // in dynamic tree (gameobject vmaps)
- if ((mapObjDef.Flags & 0x1) != 0)
- return;
-
//-----------add_in _dir_file----------------
- std::string tempname = Trinity::StringFormat("{}/{}", szWorkDirWmo, WmoInstName);
- FILE* input = fopen(tempname.c_str(), "r+b");
-
- if (!input)
- {
- printf("WMOInstance::WMOInstance: couldn't open %s\n", tempname.c_str());
- return;
- }
-
- fseek(input, 8, SEEK_SET); // get the correct no of vertices
- int nVertices;
- int count = fread(&nVertices, sizeof(int), 1, input);
- fclose(input);
-
- if (count != 1 || nVertices == 0)
- return;
-
Vec3D position = fixCoords(mapObjDef.Position);
AaBox3D bounds;
bounds.min = fixCoords(mapObjDef.Bounds.min);
@@ -630,6 +607,17 @@ void MapObject::Extract(ADT::MODF const& mapObjDef, char const* WmoInstName, boo
uint8 nameSet = mapObjDef.NameSet;
if (mapID != originalMapId)
flags |= MOD_PARENT_SPAWN;
+ if (mapObjDef.Flags & 0x1)
+ {
+ flags |= MOD_PATH_ONLY;
+ //if (FILE* destro = fopen("Buildings/destructible.log", "a"))
+ //{
+ // fprintf(destro, R"( { fileName: "%s", fileDataID: %u, mapId: %u, uniqueId: %u, pos: { x: %f, y: %f, z: %f }, rot: { x: %f, y: %f, z: %f } },)" "\n",
+ // WmoInstName, mapObjDef.Id, mapID, mapObjDef.UniqueId, 533.33333f * 32 - mapObjDef.Position.z, 533.33333f * 32 - mapObjDef.Position.x, mapObjDef.Position.y,
+ // mapObjDef.Rotation.x, mapObjDef.Rotation.y, mapObjDef.Rotation.z);
+ // fclose(destro);
+ //}
+ }
//write Flags, NameSet, UniqueId, Pos, Rot, Scale, Bound_lo, Bound_hi, name
fwrite(&flags, sizeof(uint8), 1, pDirfile);