diff options
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); |
