diff --git a/data/sql/updates/db_world/2022_11_21_00.sql b/data/sql/updates/db_world/2022_11_21_00.sql new file mode 100644 index 000000000..a2439362c --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_00.sql @@ -0,0 +1,3 @@ +-- DB update 2022_11_17_00 -> 2022_11_21_00 +-- +UPDATE `creature_summon_groups` SET `summonType`=2 WHERE `summonerId`=18180; diff --git a/data/sql/updates/db_world/2022_11_21_01.sql b/data/sql/updates/db_world/2022_11_21_01.sql new file mode 100644 index 000000000..732c6f881 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_01.sql @@ -0,0 +1,455 @@ +-- DB update 2022_11_21_00 -> 2022_11_21_01 +-- Pandemonius movement +UPDATE `creature` SET `MovementType`=1, `wander_distance`=4.5 WHERE `guid`=91163 AND `id1`=18341; + +-- Delete 2 extra Arcane Fiend creatures (are supposed to be summons) +DELETE FROM `creature` WHERE `guid` IN (91245, 91246) AND `id1`=18429 AND `map`=557; +DELETE FROM `linked_respawn` WHERE `guid` IN (91245, 91246) AND `linkedGuid`=91163; + +-- Delete redundant waypoints +DELETE FROM `waypoint_data` WHERE `id` IN (83302*10, 83315*10, 91241*10, 91216*10, 83345*10, 91173*10); +DELETE FROM `creature_addon` WHERE `guid` IN (83302, 83315, 91241, 91216, 83345, 91173); +UPDATE `creature` SET `MovementType`=0 WHERE `guid` IN (83302, 83315, 91241, 91216, 83345, 91173) AND `map`=557; + +-- Patrolling Formations +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (83301,83320,83329,83344,91172,91202,91215,91240) AND `memberGUID` IN (83301,83302,83315,83320,83329,83330,83331,83344,83345,91172,91173,91202,91203,91215,91216,91240,91241); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(83301, 83301, 0, 0, 3), +(83301, 83302, 3, 90, 515), +(83320, 83320, 0, 0, 3), +(83320, 83315, 4, 90, 515), +(91215, 91215, 0, 0, 3), +(91215, 91216, 4.5, 90, 515), +(91240, 91240, 0, 0, 3), +(91240, 91241, 4.5, 90, 515), +(83344, 83344, 0, 0, 3), +(83344, 83345, 3.5, 90, 515), +(83329, 83329, 0, 0, 3), +(83329, 83330, 2.5, 120, 515), +(83329, 83331, 2.5, 240, 515), +(91172, 91172, 0, 0, 3), +(91172, 91173, 2.5, 90, 515), +(91202, 91202, 0, 0, 3), +(91202, 91203, 3.5, 90, 515); + +-- Static Formations +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (83304,83306,83309,83311,83314,83316,83332,83335,83338,83340,83347,86396,91124,91134,91139,91151,91154,91164,91167,91174,91179,91182,91186,91188,91197,91204,91208,91212,91218,91223,91226,91231,91238,91242) AND `memberGUID` IN (83304,83305,83306,83307,83309,83310,83311,83312,83313,83314,83316,83317,83318,83319,83321,83332,83333,83335,83336,83338,83339,83340,83341,83342,83343,83347,83348,86396,91121,91122,91124,91125,91126,91134,91135,91136,91137,91138,91139,91140,91141,91142,91143,91151,91152,91153,91154,91155,91156,91164,91165,91166,91167,91168,91169,91170,91174,91175,91176,91179,91180,91182,91183,91184,91186,91187,91188,91189,91190,91197,91198,91199,91200,91204,91205,91206,91208,91209,91210,91212,91213,91214,91218,91219,91220,91221,91222,91223,91224,91225,91226,91227,91228,91229,91231,91232,91233,91238,91239,91242,91243,91244) AND `groupAI`=3; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(83304, 83304, 0, 0, 3), +(83304, 83305, 0, 0, 3), +(83306, 83306, 0, 0, 3), +(83306, 83307, 0, 0, 3), +(83311, 83311, 0, 0, 3), +(83311, 83312, 0, 0, 3), +(83311, 83313, 0, 0, 3), +(83314, 83314, 0, 0, 3), +(83314, 83319, 0, 0, 3), +(83314, 83321, 0, 0, 3), +(83316, 83316, 0, 0, 3), +(83316, 83317, 0, 0, 3), +(83316, 83318, 0, 0, 3), +(83309, 83309, 0, 0, 3), +(83309, 83310, 0, 0, 3), +(91238, 91238, 0, 0, 3), +(91238, 91239, 0, 0, 3), +(91226, 91226, 0, 0, 3), +(91226, 91227, 0, 0, 3), +(91226, 91228, 0, 0, 3), +(91226, 91229, 0, 0, 3), +(91242, 91242, 0, 0, 3), +(91242, 91243, 0, 0, 3), +(91242, 91244, 0, 0, 3), +(91154, 91154, 0, 0, 3), +(91154, 91155, 0, 0, 3), +(91154, 91156, 0, 0, 3), +(91218, 91218, 0, 0, 3), +(91218, 91219, 0, 0, 3), +(91218, 91220, 0, 0, 3), +(91218, 91221, 0, 0, 3), +(91218, 91222, 0, 0, 3), +(91223, 91223, 0, 0, 3), +(91223, 91224, 0, 0, 3), +(91223, 91225, 0, 0, 3), +(91212, 91212, 0, 0, 3), +(91212, 91213, 0, 0, 3), +(91212, 91214, 0, 0, 3), +(91151, 91151, 0, 0, 3), +(91151, 91152, 0, 0, 3), +(91151, 91153, 0, 0, 3), +(91208, 91208, 0, 0, 3), +(91208, 91209, 0, 0, 3), +(91208, 91210, 0, 0, 3), +(83340, 83340, 0, 0, 3), +(83340, 83341, 0, 0, 3), +(83340, 83342, 0, 0, 3), +(83340, 83343, 0, 0, 3), +(91124, 91124, 0, 0, 3), +(91124, 91125, 0, 0, 3), +(91124, 91126, 0, 0, 3), +(91188, 91188, 0, 0, 3), +(91188, 91189, 0, 0, 3), +(91188, 91190, 0, 0, 3), +(91186, 91186, 0, 0, 3), +(91186, 91187, 0, 0, 3), +(83347, 83347, 0, 0, 3), +(83347, 83348, 0, 0, 3), +(86396, 86396, 0, 0, 3), +(86396, 91121, 0, 0, 3), +(86396, 91122, 0, 0, 3), +(83338, 83338, 0, 0, 3), +(83338, 83339, 0, 0, 3), +(91231, 91231, 0, 0, 3), +(91231, 91232, 0, 0, 3), +(91231, 91233, 0, 0, 3), +(83335, 83335, 0, 0, 3), +(83335, 83336, 0, 0, 3), +(83332, 83332, 0, 0, 3), +(83332, 83333, 0, 0, 3), +(91164, 91164, 0, 0, 3), +(91164, 91165, 0, 0, 3), +(91164, 91166, 0, 0, 3), +(91179, 91179, 0, 0, 3), +(91179, 91180, 0, 0, 3), +(91182, 91182, 0, 0, 3), +(91182, 91183, 0, 0, 3), +(91182, 91184, 0, 0, 3), +(91174, 91174, 0, 0, 3), +(91174, 91175, 0, 0, 3), +(91174, 91176, 0, 0, 3), +(91167, 91167, 0, 0, 3), +(91167, 91168, 0, 0, 3), +(91167, 91169, 0, 0, 3), +(91167, 91170, 0, 0, 3), +(91204, 91204, 0, 0, 3), +(91204, 91205, 0, 0, 3), +(91204, 91206, 0, 0, 3), +(91197, 91197, 0, 0, 3), +(91197, 91198, 0, 0, 3), +(91197, 91199, 0, 0, 3), +(91197, 91200, 0, 0, 3), +(91134, 91134, 0, 0, 3), +(91134, 91135, 0, 0, 3), +(91134, 91136, 0, 0, 3), +(91134, 91137, 0, 0, 3), +(91134, 91138, 0, 0, 3), +(91139, 91139, 0, 0, 3), +(91139, 91140, 0, 0, 3), +(91139, 91141, 0, 0, 3), +(91139, 91142, 0, 0, 3), +(91139, 91143, 0, 0, 3); + +-- Pathing for Ethereal Scavenger Entry: 18309 +SET @NPC := 83301; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-67.99796,`position_y`=-31.6907,`position_z`=-0.95160854 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-67.99796,-31.6907,-0.95160854,NULL,0,0,0,100,0), +(@PATH,2,-67.722946,-23.282206,-0.9526021,NULL,0,0,0,100,0), +(@PATH,3,-65.677895,-14.919224,-0.9472823,NULL,0,0,0,100,0), +(@PATH,4,-60.18082,-8.535985,-0.9498009,NULL,0,0,0,100,0), +(@PATH,5,-53.91151,-2.550814,-0.9489452,NULL,0,0,0,100,0), +(@PATH,6,-46.68223,0.860986,-0.954333,NULL,0,0,0,100,0), +(@PATH,7,-36.528965,1.502573,-0.9543326,NULL,0,0,0,100,0), +(@PATH,8,-46.68223,0.860986,-0.954333,NULL,0,0,0,100,0), +(@PATH,9,-53.91151,-2.550814,-0.9489452,NULL,0,0,0,100,0), +(@PATH,10,-60.18082,-8.535985,-0.9498009,NULL,0,0,0,100,0), +(@PATH,11,-65.677895,-14.919224,-0.9472823,NULL,0,0,0,100,0), +(@PATH,12,-67.722946,-23.282206,-0.9526021,NULL,0,0,0,100,0); +-- 0x204CB045A011E14000016E000061BBA0 .go xyz -67.99796 -31.6907 -0.95160854 + +-- Pathing for Ethereal Crypt Raider Entry: 18311 +SET @NPC := 83320; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-92.177826,`position_y`=-103.64098,`position_z`=-0.74659944 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-92.177826,-103.64098,-0.74659944,NULL,0,0,0,100,0), +(@PATH,2,-81.34098,-109.3567,-0.49348852,NULL,0,0,0,100,0), +(@PATH,3,-67.74865,-113.65243,-0.77221966,NULL,0,0,0,100,0), +(@PATH,4,-53.918705,-109.43329,-0.31681725,NULL,0,0,0,100,0), +(@PATH,5,-41.28598,-103.35104,-2.4145072,NULL,0,0,0,100,0), +(@PATH,6,-47.81088,-89.45784,-2.09733,NULL,0,0,0,100,0), +(@PATH,7,-57.606106,-82.09547,-2.1152492,NULL,0,0,0,100,0), +(@PATH,8,-68.259636,-79.06529,-2.1130235,NULL,0,0,0,100,0), +(@PATH,9,-80.90324,-84.25588,-1.9863526,NULL,0,0,0,100,0), +(@PATH,10,-87.42079,-91.58448,-1.9592229,NULL,0,0,0,100,0); +-- 0x204CB045A011E1C000016E0001E1BBA1 .go xyz -92.177826 -103.64098 -0.74659944 + +-- Pathing for Ethereal Priest Entry: 18317 +SET @NPC := 91215; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-111.1761,`position_y`=-219.2728,`position_z`=-0.15511577 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-111.1761,-219.2728,-0.15511577,NULL,0,0,0,100,0), +(@PATH,2,-118.24131,-209.97723,-0.6744533,NULL,0,0,0,100,0), +(@PATH,3,-136.36037,-214.06665,-0.44854826,NULL,0,0,0,100,0), +(@PATH,4,-143.3705,-220.97308,-0.5329385,NULL,0,0,0,100,0), +(@PATH,5,-136.36037,-214.06665,-0.44854826,NULL,0,0,0,100,0), +(@PATH,6,-118.24131,-209.97723,-0.6744533,NULL,0,0,0,100,0); +-- 0x204CB045A011E34000016E000361BBA1 .go xyz -111.1761 -219.2728 -0.15511577 + +-- Pathing for Ethereal Priest Entry: 18317 +SET @NPC := 91240; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-32.762417,`position_y`=-223.56038,`position_z`=-0.17517364 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-32.762417,-223.56038,-0.17517364,NULL,1500,0,0,100,0), +(@PATH,2,-49.952377,-221.03786,-0.064427994,NULL,0,0,0,100,0), +(@PATH,3,-73.87033,-218.72505,-0.17712496,NULL,1500,0,0,100,0), +(@PATH,4,-49.952377,-221.03786,-0.064427994,NULL,0,0,0,100,0); +-- 0x204CB045A011E34000016E0004E1BBA1 .go xyz -32.762417 -223.56038 -0.17517364 + +-- Pathing for Ethereal Darkcaster Entry: 18331 +SET @NPC := 83344; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-209.60197,`position_y`=-245.24097,`position_z`=-0.9562541 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-209.60197,-245.24097,-0.9562541,NULL,0,0,0,100,0), +(@PATH,2,-205.8458,-226.60881,-0.95540786,NULL,0,0,0,100,0), +(@PATH,3,-208.29887,-210.52136,0.94156444,NULL,0,0,0,100,0), +(@PATH,4,-216.36972,-203.34883,0.37871146,NULL,0,0,0,100,0), +(@PATH,5,-233.01859,-196.29713,-0.9522191,NULL,0,0,0,100,0), +(@PATH,6,-216.36972,-203.34883,0.37871146,NULL,0,0,0,100,0), +(@PATH,7,-208.29887,-210.52136,0.94156444,NULL,0,0,0,100,0), +(@PATH,8,-205.8458,-226.60881,-0.95540786,NULL,0,0,0,100,0); +-- 0x204CB045A011E6C000016E000261BBA1 .go xyz -209.60197 -245.24097 -0.9562541 + +-- Pathing for Ethereal Sorcerer Entry: 18313 +SET @NPC := 83329; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-373.551,`position_y`=-189.40958,`position_z`=-1.0002968 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-373.551,-189.40958,-1.0002968,NULL,1000,0,0,100,0), +(@PATH,2,-373.39856,-215.54378,-0.95794463,NULL,0,0,0,100,0), +(@PATH,3,-373.33087,-235.899,-0.9565815,NULL,1000,0,0,100,0), +(@PATH,4,-373.39856,-215.54378,-0.95794463,NULL,0,0,0,100,0); +-- 0x204CB045A011E24000016E0005E1BBA1 .go xyz -373.551 -189.40958 -1.0002968 + +-- Pathing for Nexus Stalker Entry: 18314 +SET @NPC := 91172; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-383.9432,`position_y`=-171.95404,`position_z`=-0.9587667 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-383.9432,-171.95404,-0.9587667,NULL,0,0,0,100,0), +(@PATH,2,-374.7526,-176.95155,-0.95391774,NULL,0,0,0,100,0), +(@PATH,3,-365.67285,-175.00563,-0.958769,NULL,0,0,0,100,0), +(@PATH,4,-360.13977,-165.7273,-0.99950916,NULL,0,0,0,100,0), +(@PATH,5,-363.37717,-158.51936,-0.95876485,NULL,0,0,0,100,0), +(@PATH,6,-370.46817,-152.6236,-0.9587616,NULL,0,0,0,100,0), +(@PATH,7,-378.27777,-155.3499,-0.9587637,NULL,0,0,0,100,0), +(@PATH,8,-384.86395,-163.05305,-0.9499411,NULL,0,0,0,100,0); +-- 0x204CB045A011E28000016E000161BBA1 .go xyz -383.9432 -171.95404 -0.9587667 + +-- Pathing for Ethereal Spellbinder Entry: 18312 +SET @NPC := 91202; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-260.95892,`position_y`=7.860175,`position_z`=16.785763 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-260.95892,7.860175,16.785763,NULL,0,0,0,100,0), +(@PATH,2,-276.80426,5.122873,16.787043,NULL,0,0,0,100,0), +(@PATH,3,-299.9862,5.538398,16.78952,NULL,0,0,0,100,0), +(@PATH,4,-320.11002,7.972475,16.793024,NULL,0,0,0,100,0), +(@PATH,5,-299.9862,5.538398,16.78952,NULL,0,0,0,100,0), +(@PATH,6,-276.80426,5.122873,16.787043,NULL,0,0,0,100,0); +-- 0x204CB045A011E20000016E000061BBA1 .go xyz -260.95892 7.860175 16.785763 + +-- Pathing for Nexus Terror Entry: 19307 +SET @NPC := 91194; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-246.69841,`position_y`=9.225306,`position_z`=16.794334 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-246.69841,9.225306,16.794334,NULL,0,0,0,100,0), +(@PATH,2,-231.31323,9.442994,16.808558,NULL,0,0,0,100,0), +(@PATH,3,-214.384,9.683906,16.860193,NULL,0,0,0,100,0), +(@PATH,4,-231.31323,9.442994,16.808558,NULL,0,0,0,100,0); +-- 0x204CB045A012DAC000016E0001E1BBA1 .go xyz -246.69841 9.225306 16.794334 + +-- Pathing for Nexus Terror Entry: 19307 +SET @NPC := 91201; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-283.24142,`position_y`=-4.002039,`position_z`=16.685318 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-283.24142,-4.002039,16.685318,NULL,0,0,0,100,0), +(@PATH,2,-286.58047,2.692342,16.787771,NULL,0,0,0,100,0), +(@PATH,3,-286.7902,15.48573,18.410303,NULL,0,0,0,100,0), +(@PATH,4,-275.94824,25.733856,22.140972,NULL,0,0,0,100,0), +(@PATH,5,-286.72964,15.542957,18.451094,NULL,0,0,0,100,0), +(@PATH,6,-286.58047,2.692342,16.787771,NULL,0,0,0,100,0); +-- 0x204CB045A012DAC000016E000161BBA1 .go xyz -283.24142 -4.002039 16.685318 + +-- Delete old nodes and pools +DELETE FROM `pool_template` WHERE `entry` IN (2034, 11709) AND `description` LIKE '%Mana-Tomb%'; +DELETE FROM `pool_pool` WHERE `mother_pool`=2034 AND `pool_id`=11709 AND `description` LIKE '%Mana-Tomb%'; +DELETE FROM `pool_gameobject` WHERE `pool_entry`=11709 AND `guid` IN (43147, 63197); +DELETE FROM `gameobject` WHERE `id` IN (181556, 181557, 181569, 181278) AND `map`=557; + +SET @GUID := 104466; +SET @POOL := 13326; +SET @POOLMOTHER := 8320; + +DELETE FROM `gameobject` WHERE `id` IN (181556, 181557, 181569, 181278) AND `map`=557 AND `ZoneId`=3792 AND `guid` BETWEEN @GUID+0 AND @GUID+47; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES +(@GUID+0 , 181278, 557, 3792, 3792, 3, 1, -105.552, -58.9405, -0.821702, 5.46288, 0, 0, -0.398748, 0.91706, 86400, 255, 1, '', 46597), +(@GUID+1 , 181278, 557, 3792, 3792, 3, 1, -95.3467, -108.357, -0.842384, 1.62316, 0, 0, 0.725374, 0.688355, 86400, 255, 1, '', 46597), +(@GUID+2 , 181278, 557, 3792, 3792, 3, 1, -110.722, -193.438, -1.06178, 0, 0, 0, 0, 1, 86400, 255, 1, '', 46597), +(@GUID+3 , 181278, 557, 3792, 3792, 3, 1, -107.263, -249.694, -0.657617, 4.95674, 0, 0, -0.615661, 0.788011, 86400, 255, 1, '', 46597), +(@GUID+4 , 181278, 557, 3792, 3792, 3, 1, -228.783, -221.596, -1.10903, 5.20108, 0, 0, -0.515038, 0.857168, 86400, 255, 1, '', 46597), +(@GUID+5 , 181278, 557, 3792, 3792, 3, 1, -254.457, -177.219, -0.953286, 3.29869, 0, 0, -0.996917, 0.0784664, 86400, 255, 1, '', 46597), +(@GUID+6 , 181278, 557, 3792, 3792, 3, 1, -256.032, -152.779, -0.953339, 0.645772, 0, 0, 0.317305, 0.948324, 86400, 255, 1, '', 46597), +(@GUID+7 , 181278, 557, 3792, 3792, 3, 1, -284.843, -166.549, -2.71548, 4.5204, 0, 0, -0.771625, 0.636078, 86400, 255, 1, '', 46597), +(@GUID+8 , 181278, 557, 3792, 3792, 3, 1, -291.378, -206.457, -2.54264, -2.07694, 0, 0, 0, 1, 86400, 255, 1, '', 0), +(@GUID+9 , 181278, 557, 3792, 3792, 3, 1, -378.636, -241.698, -0.956422, 4.11898, 0, 0, -0.882947, 0.469473, 86400, 255, 1, '', 46597), +(@GUID+10, 181278, 557, 3792, 3792, 3, 1, -379.233, -219.094, -0.957844, 4.76475, 0, 0, -0.688354, 0.725374, 86400, 255, 1, '', 46597), +(@GUID+11, 181278, 557, 3792, 3792, 3, 1, -353.598, -179.432, -0.966642, 1.11701, 0, 0, 0.529919, 0.848048, 86400, 255, 1, '', 46597), +(@GUID+12, 181278, 557, 3792, 3792, 3, 1, -400.56, -172.333, -0.98123, 3.50812, 0, 0, -0.983254, 0.182238, 86400, 255, 1, '', 46597), +(@GUID+13, 181278, 557, 3792, 3792, 3, 1, -367.253, -132.678, -0.966903, 1.58825, 0, 0, 0.71325, 0.70091, 86400, 255, 1, '', 46597), +(@GUID+14, 181278, 557, 3792, 3792, 3, 1, -393.554, -60.8607, -0.982428, 6.03884, 0, 0, -0.121869, 0.992546, 86400, 255, 1, '', 46597), +(@GUID+15, 181278, 557, 3792, 3792, 3, 1, -350.483, -60.3347, -0.974565, 0.925024, 0, 0, 0.446198, 0.894935, 86400, 255, 1, '', 46597), +(@GUID+16, 181278, 557, 3792, 3792, 3, 1, -379.956, -41.4283, -0.967236, 4.08407, 0, 0, -0.891006, 0.453991, 86400, 255, 1, '', 46597), +(@GUID+17, 181278, 557, 3792, 3792, 3, 1, -283.552, -10.902, 16.685, 1.78024, 0, 0, 0.777146, 0.62932, 86400, 255, 1, '', 0), +(@GUID+18, 181278, 557, 3792, 3792, 3, 1, -255.582, 3.04984, 16.7849, 4.4855, 0, 0, -0.782608, 0.622515, 86400, 255, 1, '', 46597), +(@GUID+19, 181278, 557, 3792, 3792, 3, 1, -217.485, -6.14751, 16.7275, 5.91667, 0, 0, -0.182235, 0.983255, 86400, 255, 1, '', 46597), +(@GUID+20, 181278, 557, 3792, 3792, 3, 1, -220.683, 29.1267, 16.7317, 4.15388, 0, 0, -0.874619, 0.48481, 86400, 255, 1, '', 46597), +(@GUID+21, 181556, 557, 3792, 3792, 3, 1, -369.378, -242.433, 1.87701, 2.84488, 0, 0, 0.989016, 0.147811, 86400, 255, 1, '', 46597), +(@GUID+24, 181556, 557, 3792, 3792, 3, 1, -354.641, -150.547, 3.43339, 5.3058, 0, 0, -0.469471, 0.882948, 86400, 255, 1, '', 46597), +(@GUID+27, 181556, 557, 3792, 3792, 3, 1, -417.15, -166.794, 0.833513, 0.122173, 0, 0, 0, 1, 86400, 255, 1, '', 0), +(@GUID+30, 181556, 557, 3792, 3792, 3, 1, -358.643, -85.6369, 2.8462, 3.87463, 0, 0, -0.93358, 0.358368, 86400, 255, 1, '', 46597), +(@GUID+33, 181556, 557, 3792, 3792, 3, 1, -390.365, -85.0705, 2.39504, 4.66003, 0, 0, -0.725374, 0.688355, 86400, 255, 1, '', 46597), +(@GUID+22, 181557, 557, 3792, 3792, 3, 1, -369.378, -242.433, 1.87701, 2.84488, 0, 0, 0.989016, 0.147811, 86400, 255, 1, '', 46597), +(@GUID+25, 181557, 557, 3792, 3792, 3, 1, -354.641, -150.547, 3.43339, 5.3058, 0, 0, -0.469471, 0.882948, 86400, 255, 1, '', 46597), +(@GUID+28, 181557, 557, 3792, 3792, 3, 1, -417.15, -166.794, 0.833513, 0.122173, 0, 0, 0, 1, 86400, 255, 1, '', 0), +(@GUID+31, 181557, 557, 3792, 3792, 3, 1, -358.643, -85.6369, 2.8462, 3.87463, 0, 0, -0.93358, 0.358368, 86400, 255, 1, '', 46597), +(@GUID+34, 181557, 557, 3792, 3792, 3, 1, -390.365, -85.0705, 2.39504, 4.66003, 0, 0, -0.725374, 0.688355, 86400, 255, 1, '', 46597), +(@GUID+23, 181569, 557, 3792, 3792, 3, 1, -369.378, -242.433, 1.87701, 2.84488, 0, 0, 0.989016, 0.147811, 86400, 255, 1, '', 46597), +(@GUID+26, 181569, 557, 3792, 3792, 3, 1, -354.641, -150.547, 3.43339, 5.3058, 0, 0, -0.469471, 0.882948, 86400, 255, 1, '', 46597), +(@GUID+29, 181569, 557, 3792, 3792, 3, 1, -417.15, -166.794, 0.833513, 0.122173, 0, 0, 0, 1, 86400, 255, 1, '', 0), +(@GUID+32, 181569, 557, 3792, 3792, 3, 1, -358.643, -85.6369, 2.8462, 3.87463, 0, 0, -0.93358, 0.358368, 86400, 255, 1, '', 46597), +(@GUID+35, 181569, 557, 3792, 3792, 3, 1, -390.365, -85.0705, 2.39504, 4.66003, 0, 0, -0.725374, 0.688355, 86400, 255, 1, '', 46597), +(@GUID+36, 181556, 557, 3792, 3792, 3, 1, -329.146, -69.739, 0.956257, 3.31614, 0, 0, -0.996194, 0.087165, 86400, 255, 1, '', 46597), +(@GUID+39, 181556, 557, 3792, 3792, 3, 1, -306.768, 18.0337, 15.934, 5.49779, 0, 0, -0.382683, 0.92388, 86400, 255, 1, '', 46597), +(@GUID+42, 181556, 557, 3792, 3792, 3, 1, -245.643, -3.16959, 15.0684, 5.96903, 0, 0, -0.156434, 0.987688, 86400, 255, 1, '', 46597), +(@GUID+45, 181556, 557, 3792, 3792, 3, 1, -269.036, 42.9415, 30.2597, 5.84685, 0, 0, -0.216439, 0.976296, 86400, 255, 1, '', 46597), +(@GUID+37, 181557, 557, 3792, 3792, 3, 1, -329.146, -69.739, 0.956257, 3.31614, 0, 0, -0.996194, 0.087165, 86400, 255, 1, '', 46597), +(@GUID+40, 181557, 557, 3792, 3792, 3, 1, -306.768, 18.0337, 15.934, 5.49779, 0, 0, -0.382683, 0.92388, 86400, 255, 1, '', 46597), +(@GUID+43, 181557, 557, 3792, 3792, 3, 1, -245.643, -3.16959, 15.0684, 5.96903, 0, 0, -0.156434, 0.987688, 86400, 255, 1, '', 46597), +(@GUID+46, 181557, 557, 3792, 3792, 3, 1, -269.036, 42.9415, 30.2597, 5.84685, 0, 0, -0.216439, 0.976296, 86400, 255, 1, '', 46597), +(@GUID+38, 181569, 557, 3792, 3792, 3, 1, -329.146, -69.739, 0.956257, 3.31614, 0, 0, -0.996194, 0.087165, 86400, 255, 1, '', 46597), +(@GUID+41, 181569, 557, 3792, 3792, 3, 1, -306.768, 18.0337, 15.934, 5.49779, 0, 0, -0.382683, 0.92388, 86400, 255, 1, '', 46597), +(@GUID+44, 181569, 557, 3792, 3792, 3, 1, -245.643, -3.16959, 15.0684, 5.96903, 0, 0, -0.156434, 0.987688, 86400, 255, 1, '', 46597), +(@GUID+47, 181569, 557, 3792, 3792, 3, 1, -269.036, 42.9415, 30.2597, 5.84685, 0, 0, -0.216439, 0.976296, 86400, 255, 1, '', 46597); + +DELETE FROM `pool_template` WHERE `description` LIKE '%Mana-Tombs%' AND `entry` BETWEEN @POOLMOTHER+0 AND @POOLMOTHER+5; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOLMOTHER+0, 1, 'Mana-Tombs - Ancient Lichen - Group 1'), +(@POOLMOTHER+1, 1, 'Mana-Tombs - Ancient Lichen - Group 2'), +(@POOLMOTHER+2, 1, 'Mana-Tombs - Ancient Lichen - Group 3'), +(@POOLMOTHER+3, 1, 'Mana-Tombs - Ancient Lichen - Group 4'), +(@POOLMOTHER+4, 1, 'Mana-Tombs - Ores - Group 1'), +(@POOLMOTHER+5, 1, 'Mana-Tombs - Ores - Group 2'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE '%Mana-Tombs%' AND `guid` BETWEEN @GUID+0 AND @GUID+20 AND `pool_entry` BETWEEN @POOLMOTHER+0 AND @POOLMOTHER+3; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@GUID+0 , @POOLMOTHER+0, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+1 , @POOLMOTHER+0, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+2 , @POOLMOTHER+0, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+3 , @POOLMOTHER+0, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+4 , @POOLMOTHER+1, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+5 , @POOLMOTHER+1, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+6 , @POOLMOTHER+1, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+7 , @POOLMOTHER+1, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+8 , @POOLMOTHER+1, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+9 , @POOLMOTHER+2, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+10, @POOLMOTHER+2, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+11, @POOLMOTHER+2, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+12, @POOLMOTHER+2, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+13, @POOLMOTHER+2, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+14, @POOLMOTHER+2, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+15, @POOLMOTHER+3, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+16, @POOLMOTHER+3, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+17, @POOLMOTHER+3, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+18, @POOLMOTHER+3, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+19, @POOLMOTHER+3, 0, 'Ancient Lichen - Mana-Tombs'), +(@GUID+20, @POOLMOTHER+3, 0, 'Ancient Lichen - Mana-Tombs'); + +DELETE FROM `pool_template` WHERE `description` LIKE '%Mana-Tombs%' AND `entry` BETWEEN @POOL+0 AND @POOL+8; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOL+0, 1, 'Mana-Tombs - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+1, 1, 'Mana-Tombs - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+2, 1, 'Mana-Tombs - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+3, 1, 'Mana-Tombs - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+4, 1, 'Mana-Tombs - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+5, 1, 'Mana-Tombs - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+6, 1, 'Mana-Tombs - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+7, 1, 'Mana-Tombs - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+8, 1, 'Mana-Tombs - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'); + +DELETE FROM `pool_pool` WHERE `description` LIKE '%Mana-Tombs%' AND `pool_id` BETWEEN @POOL+0 AND @POOL+8 AND `mother_pool` BETWEEN @POOLMOTHER+4 AND @POOLMOTHER+5; +INSERT INTO `pool_pool` (`pool_id`, `mother_pool`, `chance`, `description`) VALUES +(@POOL+0, @POOLMOTHER+4, 0, 'Mana-Tombs - Adamantite / Khorium / Rich Adamantite - Group 1'), +(@POOL+1, @POOLMOTHER+4, 0, 'Mana-Tombs - Adamantite / Khorium / Rich Adamantite - Group 1'), +(@POOL+2, @POOLMOTHER+4, 0, 'Mana-Tombs - Adamantite / Khorium / Rich Adamantite - Group 1'), +(@POOL+3, @POOLMOTHER+4, 0, 'Mana-Tombs - Adamantite / Khorium / Rich Adamantite - Group 1'), +(@POOL+4, @POOLMOTHER+4, 0, 'Mana-Tombs - Adamantite / Khorium / Rich Adamantite - Group 1'), +(@POOL+5, @POOLMOTHER+5, 0, 'Mana-Tombs - Adamantite / Khorium / Rich Adamantite - Group 1'), +(@POOL+6, @POOLMOTHER+5, 0, 'Mana-Tombs - Adamantite / Khorium / Rich Adamantite - Group 1'), +(@POOL+7, @POOLMOTHER+5, 0, 'Mana-Tombs - Adamantite / Khorium / Rich Adamantite - Group 1'), +(@POOL+8, @POOLMOTHER+5, 0, 'Mana-Tombs - Adamantite / Khorium / Rich Adamantite - Group 1'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE '%Mana-Tombs%' AND `guid` BETWEEN @GUID+21 AND @GUID+47 AND `pool_entry` BETWEEN @POOL+0 AND @POOL+8; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@GUID+21, @POOL+0, 0, 'Adamantite Deposit - Mana-Tombs'), +(@GUID+24, @POOL+1, 0, 'Adamantite Deposit - Mana-Tombs'), +(@GUID+27, @POOL+2, 0, 'Adamantite Deposit - Mana-Tombs'), +(@GUID+30, @POOL+3, 0, 'Adamantite Deposit - Mana-Tombs'), +(@GUID+33, @POOL+4, 0, 'Adamantite Deposit - Mana-Tombs'), +(@GUID+22, @POOL+0, 5, 'Khorium Vein - Mana-Tombs'), +(@GUID+25, @POOL+1, 5, 'Khorium Vein - Mana-Tombs'), +(@GUID+28, @POOL+2, 5, 'Khorium Vein - Mana-Tombs'), +(@GUID+31, @POOL+3, 5, 'Khorium Vein - Mana-Tombs'), +(@GUID+34, @POOL+4, 5, 'Khorium Vein - Mana-Tombs'), +(@GUID+23, @POOL+0, 40, 'Rich Adamantite Deposit - Mana-Tombs'), +(@GUID+26, @POOL+1, 40, 'Rich Adamantite Deposit - Mana-Tombs'), +(@GUID+29, @POOL+2, 40, 'Rich Adamantite Deposit - Mana-Tombs'), +(@GUID+32, @POOL+3, 40, 'Rich Adamantite Deposit - Mana-Tombs'), +(@GUID+35, @POOL+4, 40, 'Rich Adamantite Deposit - Mana-Tombs'), +(@GUID+36, @POOL+5, 0, 'Adamantite Deposit - Mana-Tombs'), +(@GUID+39, @POOL+6, 0, 'Adamantite Deposit - Mana-Tombs'), +(@GUID+42, @POOL+7, 0, 'Adamantite Deposit - Mana-Tombs'), +(@GUID+45, @POOL+8, 0, 'Adamantite Deposit - Mana-Tombs'), +(@GUID+37, @POOL+5, 5, 'Khorium Vein - Mana-Tombs'), +(@GUID+40, @POOL+6, 5, 'Khorium Vein - Mana-Tombs'), +(@GUID+43, @POOL+7, 5, 'Khorium Vein - Mana-Tombs'), +(@GUID+46, @POOL+8, 5, 'Khorium Vein - Mana-Tombs'), +(@GUID+38, @POOL+5, 40, 'Rich Adamantite Deposit - Mana-Tombs'), +(@GUID+41, @POOL+6, 40, 'Rich Adamantite Deposit - Mana-Tombs'), +(@GUID+44, @POOL+7, 40, 'Rich Adamantite Deposit - Mana-Tombs'), +(@GUID+47, @POOL+8, 40, 'Rich Adamantite Deposit - Mana-Tombs'); diff --git a/data/sql/updates/db_world/2022_11_21_02.sql b/data/sql/updates/db_world/2022_11_21_02.sql new file mode 100644 index 000000000..71fa2c597 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_02.sql @@ -0,0 +1,511 @@ +-- DB update 2022_11_21_01 -> 2022_11_21_02 +-- Equipment ID for slaves +UPDATE `creature` SET `equipment_id`=1 WHERE `id1` IN (17963, 17964); +-- Emotes for Heroic ver +DELETE FROM `creature_template_addon` WHERE `entry` IN (19902, 19904); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(19902, 0, 0, 0, 0, 173, 0, ''), +(19904, 0, 0, 0, 0, 173, 0, ''); + +-- Change around some Ids to conform to Classic +UPDATE `creature` SET `id1`=17940 WHERE `guid` IN (79147, 79246, 79274, 79150, 79275) AND `id1` IN (17962, 17958); +UPDATE `creature` SET `id1`=17962 WHERE `guid` IN (79847, 79366) AND `id1`=17940; + +-- Delete redundant waypoints +DELETE FROM `waypoint_data` WHERE `id` IN (79364*10, 79416*10, 79426*10, 76520*10, 57878*10, 79365*10, 79847*10, 79366*10, 79274*10, 79246*10, 79357*10, 79371*10, 79411*10, 79386*10, 79518*10, 79509*10, 79516*10, 79498*10, 79421*10, 79414*10, 79412*10, 79419*10); +DELETE FROM `creature_addon` WHERE `guid` IN (79364, 79416, 79426, 76520, 57878, 79365, 79847, 79366, 79274, 79246, 79357, 79371, 79411, 79386, 79518, 79509, 79516, 79498, 79421, 79414, 79412, 79419); +UPDATE `creature` SET `MovementType`=0 WHERE `guid` IN (79364, 79416, 79426, 76520, 57878, 79365, 79847, 79366, 79274, 79246, 79357, 79371, 79411, 79386, 79518, 79509, 79516, 79498, 79421, 79414, 79412, 79419) AND `map`=547; + +-- Patrolling Formations +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (88902, 72370, 86371, 79363, 79147, 79150, 79275, 135103, 79849, 79367, 79372, 79375, 79420, 79418, 135102) AND `memberGUID` IN (88902, 79364, 72370, 79416, 79426, 86371, 76520, 57878, 79363, 79365, 79147, 79847, 79366, 79150, 79246, 79275, 79274, 135103, 135104, 79849, 79357, 79371, 79367, 79411, 79386, 79372, 79375, 79498, 79516, 79509, 79518, 79420, 79421, 79418, 79414, 79412, 79419, 135102, 135101, 135100); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(88902, 88902, 0, 0, 3), +(88902, 79364, 4, 90, 515), +(79363, 79363, 0, 0, 3), +(79363, 79365, 4, 90, 515), +(79150, 79150, 0, 0, 3), +(79150, 79246, 4, 90, 515), +(79275, 79275, 0, 0, 3), +(79275, 79274, 4, 90, 515), +(135103, 135103, 0, 0, 3), +(135103, 135104, 4, 270, 515), +(135103, 79371, 4, 0, 515), +(79849, 79849, 0, 0, 3), +(79849, 79357, 4, 270, 515), +(79420, 79420, 0, 0, 3), +(79420, 79421, 4, 90, 515), +(72370, 72370, 0, 0, 3), +(72370, 79416, 5, 120, 515), +(72370, 79426, 5, 240, 515), +(86371, 86371, 0, 0, 3), +(86371, 76520, 5, 120, 515), +(86371, 57878, 5, 240, 515), +(79147, 79147, 0, 0, 3), +(79147, 79847, 2.5, 150, 515), +(79147, 79366, 2.5, 210, 515), +(79367, 79367, 0, 0, 3), +(79367, 79411, 3, 135, 515), +(79367, 79386, 3, 225, 515), +(79372, 79372, 0, 0, 3), +(79372, 79498, 3.5, 90, 515), +(79372, 79516, 3.5, 270, 515), +(79375, 79375, 0, 0, 3), +(79375, 79509, 3.5, 90, 515), +(79375, 79518, 3.5, 270, 515), +(135102, 135102, 0, 0, 3), +(135102, 135100, 3.5, 0, 515), +(135102, 135101, 3.5, 180, 515), +(79418, 79418, 0, 0, 3), +(79418, 79414, 3.5, 135, 515), +(79418, 79412, 7, 135, 515), +(79418, 79419, 3.5, 225, 515); + +-- Update GroupAI of previously existing packs +UPDATE `creature_formations` SET `groupAI`=`groupAI`|3 WHERE `leaderGUID` IN (79858, 80235, 79524) AND `memberGUID` IN (79858, 80219, 79850, 80235, 79856, 79855, 79524, 80044, 79851, 79852); + +-- Static Linking +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (52365,52367,52368,52372,52373,52376,52378,52381,52384,52394,79429,79460,79495,79526,79547,79655,79691,79699,79703,79712,79713,79718,79745,79795,79846,135095) AND `memberGUID` IN (52351,52352,52353,52354,52358,52359,52361,52362,52363,52364,52365,52366,52367,52368,52371,52372,52373,52374,52375,52376,52377,52378,52379,52380,52381,52382,52384,52385,52387,52393,52394,52395,52397,52398,79423,79424,79425,79428,79429,79431,79435,79438,79449,79460,79495,79507,79526,79528,79530,79538,79540,79543,79544,79545,79546,79547,79571,79655,79657,79691,79692,79699,79701,79703,79708,79709,79710,79711,79712,79713,79718,79719,79722,79745,79790,79791,79795,79830,79842,79843,79844,79845,79846,135059,135094,135095,135096,135097,135098,135099) AND `groupAI`=3; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(79718, 79718, 0, 0, 3), +(79718, 79719, 0, 0, 3), +(79429, 79429, 0, 0, 3), +(79429, 79435, 0, 0, 3), +(52384, 52384, 0, 0, 3), +(52384, 52385, 0, 0, 3), +(52384, 52398, 0, 0, 3), +(52372, 52372, 0, 0, 3), +(52372, 52380, 0, 0, 3), +(52368, 52368, 0, 0, 3), +(52368, 52387, 0, 0, 3), +(52367, 52367, 0, 0, 3), +(52367, 52395, 0, 0, 3), +(79547, 79547, 0, 0, 3), +(79547, 79722, 0, 0, 3), +(79547, 52353, 0, 0, 3), +(79547, 79424, 0, 0, 3), +(79495, 79495, 0, 0, 3), +(79495, 79528, 0, 0, 3), +(79495, 79540, 0, 0, 3), +(79495, 79571, 0, 0, 3), +(52394, 52394, 0, 0, 3), +(52394, 52393, 0, 0, 3), +(52394, 52371, 0, 0, 3), +(79655, 79655, 0, 0, 3), +(79655, 79543, 0, 0, 3), +(79655, 79657, 0, 0, 3), +(79655, 79546, 0, 0, 3), +(79655, 79544, 0, 0, 3), +(79655, 79545, 0, 0, 3), +(52373, 52373, 0, 0, 3), +(52373, 52397, 0, 0, 3), +(52373, 52366, 0, 0, 3), +(52381, 52381, 0, 0, 3), +(52381, 52382, 0, 0, 3), +(52365, 52365, 0, 0, 3), +(52365, 52375, 0, 0, 3), +(52365, 52374, 0, 0, 3), +(79703, 79703, 0, 0, 3), +(79703, 52364, 0, 0, 3), +(79703, 52354, 0, 0, 3), +(79703, 79708, 0, 0, 3), +(79526, 79526, 0, 0, 3), +(79526, 52358, 0, 0, 3), +(79526, 52362, 0, 0, 3), +(79795, 79795, 0, 0, 3), +(79795, 79507, 0, 0, 3), +(79795, 52359, 0, 0, 3), +(79795, 52361, 0, 0, 3), +(79691, 79691, 0, 0, 3), +(79691, 79438, 0, 0, 3), +(79691, 79428, 0, 0, 3), +(79691, 52363, 0, 0, 3), +(79846, 79846, 0, 0, 3), +(79846, 79692, 0, 0, 3), +(79846, 79431, 0, 0, 3), +(79846, 79538, 0, 0, 3), +(79699, 79699, 0, 0, 3), +(79699, 79790, 0, 0, 3), +(79699, 79701, 0, 0, 3), +(79699, 79530, 0, 0, 3), +(79460, 79460, 0, 0, 3), +(79460, 79791, 0, 0, 3), +(79460, 79830, 0, 0, 3), +(79460, 52351, 0, 0, 3), +(79460, 79425, 0, 0, 3), +(79745, 79745, 0, 0, 3), +(79745, 79710, 0, 0, 3), +(79745, 79449, 0, 0, 3), +(79745, 79709, 0, 0, 3), +(79712, 79712, 0, 0, 3), +(79712, 79842, 0, 0, 3), +(79712, 79843, 0, 0, 3), +(79712, 52352, 0, 0, 3), +(79712, 79423, 0, 0, 3), +(52378, 52378, 0, 0, 3), +(52378, 52379, 0, 0, 3), +(52376, 52376, 0, 0, 3), +(52376, 52377, 0, 0, 3), +(79713, 79713, 0, 0, 3), +(79713, 79845, 0, 0, 3), +(79713, 79711, 0, 0, 3), +(79713, 79844, 0, 0, 3), +(52381 , 135059, 0, 0, 3), +(135095, 135095, 0, 0, 3), +(135095, 135094, 0, 0, 3), +(135095, 135096, 0, 0, 3), +(135095, 135097, 0, 0, 3), +(135095, 135099, 0, 0, 3), +(135095, 135098, 0, 0, 3); + +-- Pathing for Coilfang Technician Entry: 17940 +SET @NPC := 79150; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=53.303783,`position_y`=-413.38776,`position_z`=42.375145 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,53.303783,-413.38776,42.375145,NULL,0,0,0,100,0), +(@PATH,2,38.81258,-415.03116,47.454975,NULL,0,0,0,100,0), +(@PATH,3,11.266998,-414.90323,58.969685,NULL,0,0,0,100,0), +(@PATH,4,-11.247518,-412.01126,70.102516,NULL,0,0,0,100,0), +(@PATH,5,-38.72895,-401.16205,79.519264,NULL,0,0,0,100,0), +(@PATH,6,-49.831036,-394.43207,81.02048,NULL,0,0,0,100,0), +(@PATH,7,-38.72895,-401.16205,79.519264,NULL,0,0,0,100,0), +(@PATH,8,-11.247518,-412.01126,70.102516,NULL,0,0,0,100,0), +(@PATH,9,11.266998,-414.90323,58.969685,NULL,0,0,0,100,0), +(@PATH,10,38.81258,-415.03116,47.454975,NULL,0,0,0,100,0); + +-- Pathing for Coilfang Technician Entry: 17940 +SET @NPC := 79275; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=50.593475,`position_y`=-347.18506,`position_z`=43.32531 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,50.593475,-347.18506,43.32531,NULL,0,0,0,100,0), +(@PATH,2,10.812712,-345.4971,59.181576,NULL,0,0,0,100,0), +(@PATH,3,-11.609047,-348.55582,70.28157,NULL,0,0,0,100,0), +(@PATH,4,-51.178356,-365.4542,81.021706,NULL,0,0,0,100,0), +(@PATH,5,-11.609047,-348.55582,70.28157,NULL,0,0,0,100,0), +(@PATH,6,10.812712,-345.4971,59.181576,NULL,0,0,0,100,0); + +-- Pathing for Coilfang Defender Entry: 17958 +SET @NPC := 135103; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-57.01482,`position_y`=-380.75848,`position_z`=81.29693 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-57.01482,-380.75848,81.29693,NULL,0,0,0,100,0), +(@PATH,2,-84.22245,-380.4095,78.72163,NULL,0,0,0,100,0), +(@PATH,3,-114.71889,-380.43747,81.247215,NULL,0,0,0,100,0), +(@PATH,4,-84.22245,-380.4095,78.72163,NULL,0,0,0,100,0); + +-- Pathing for Coilfang Technician Entry: 17940 +SET @NPC := 79849; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-124.27898,`position_y`=-362.85834,`position_z`=80.274536 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-124.27898,-362.85834,80.274536,NULL,0,0,0,100,0), +(@PATH,2,-119.12202,-366.2761,81.00296,NULL,0,0,0,100,0), +(@PATH,3,-119.18936,-394.48737,80.9744,NULL,0,0,0,100,0), +(@PATH,4,-124.20847,-398.524,80.28374,NULL,0,0,0,100,0), +(@PATH,5,-119.18936,-394.48737,80.9744,NULL,0,0,0,100,0), +(@PATH,6,-119.12202,-366.2761,81.00296,NULL,0,0,0,100,0); + +-- Pathing for Coilfang Technician Entry: 17940 : Changed to Enchantress (17961) +SET @NPC := 79372; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-227.68805,`position_y`=-363.0566,`position_z`=3.035604 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-227.68805,-363.0566,3.035604,NULL,0,0,0,100,0), +(@PATH,2,-263.95883,-333.90656,3.0356667,NULL,0,0,0,100,0), +(@PATH,3,-254.09215,-355.1459,3.035639,NULL,0,0,0,100,0), +(@PATH,4,-263.95883,-333.90656,3.0356667,NULL,0,0,0,100,0); + +-- Pathing for Coilfang Technician Entry: 17940 : Changed to Enchantress (17961) +SET @NPC := 79375; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-269.14896,`position_y`=-421.1905,`position_z`=3.0330684 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-269.14896,-421.1905,3.0330684,NULL,0,0,0,100,0), +(@PATH,2,-255.33366,-407.8583,3.0356631,NULL,0,0,0,100,0), +(@PATH,3,-224.32506,-396.62097,3.0355346,NULL,0,0,0,100,0), +(@PATH,4,-255.33366,-407.8583,3.0356631,NULL,0,0,0,100,0); + +-- Pathing for Coilfang Technician Entry: 17940 +SET @NPC := 79367; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-291.18933,`position_y`=-380.3938,`position_z`=30.125166 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-291.18933,-380.3938,30.125166,NULL,0,0,0,100,0), +(@PATH,2,-267.8213,-380.56857,20.334038,NULL,0,0,0,100,0), +(@PATH,3,-248.38216,-380.5874,10.425892,NULL,0,0,0,100,0), +(@PATH,4,-229.06407,-380.6496,3.0354943,NULL,0,0,0,100,0), +(@PATH,5,-248.38216,-380.5874,10.425892,NULL,0,0,0,100,0), +(@PATH,6,-267.8213,-380.56857,20.334038,NULL,0,0,0,100,0); + +-- Pathing for Rokmar the Crackler Entry: 17991 +SET @NPC := 79339; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=18.321169,`position_y`=-448.44757,`position_z`=3.055895 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,18.321169,-448.44757,3.055895,NULL,0,0,0,100,0), +(@PATH,2,-13.558029,-454.80655,2.49773,NULL,0,0,0,100,0), +(@PATH,3,-62.09498,-454.97253,-1.5922983,NULL,0,0,0,100,0), +(@PATH,4,-34.37422,-458.81696,-1.952406,NULL,0,0,0,100,0), +(@PATH,5,-62.09498,-454.97253,-1.5922983,NULL,0,0,0,100,0), +(@PATH,6,-13.558029,-454.80655,2.49773,NULL,0,0,0,100,0); + +-- Pathing for Coilfang Defender Entry: 17958 +SET @NPC := 79420; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-83.93549,`position_y`=-523.77386,`position_z`=-1.5914233 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-83.93549,-523.77386,-1.5914233,NULL,0,0,0,100,0), +(@PATH,2,-74.375824,-526.5931,-1.5943141,NULL,0,0,0,100,0), +(@PATH,3,-62.04731,-528.7617,-1.5941613,NULL,0,0,0,100,0), +(@PATH,4,-54.048965,-542.6787,-1.5936232,NULL,0,0,0,100,0), +(@PATH,5,-54.877804,-556.5964,-1.5929497,NULL,0,0,0,100,0), +(@PATH,6,-67.603195,-566.9261,-0.6967133,NULL,0,0,0,100,0), +(@PATH,7,-75.75858,-585.0732,1.723919,NULL,0,0,0,100,0), +(@PATH,8,-104.19448,-592.87317,5.20782,NULL,0,0,0,100,0), +(@PATH,9,-103.67276,-611.86194,10.930438,NULL,0,0,0,100,0), +(@PATH,10,-104.19448,-592.87317,5.20782,NULL,0,0,0,100,0), +(@PATH,11,-75.75858,-585.0732,1.723919,NULL,0,0,0,100,0), +(@PATH,12,-67.603195,-566.9261,-0.6967133,NULL,0,0,0,100,0), +(@PATH,13,-54.877804,-556.5964,-1.5929497,NULL,0,0,0,100,0), +(@PATH,14,-54.048965,-542.6787,-1.5936232,NULL,0,0,0,100,0), +(@PATH,15,-62.04731,-528.7617,-1.5941613,NULL,0,0,0,100,0), +(@PATH,16,-74.375824,-526.5931,-1.5943141,NULL,0,0,0,100,0); + +-- Pathing for Coilfang Champion Entry: 17957 : Changed to Coilfang Enchantress (17961) +SET @NPC := 79418; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-99.05717,`position_y`=-625.1839,`position_z`=16.924713 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-99.05717,-625.1839,16.924713,NULL,0,0,0,100,0), +(@PATH,2,-97.61304,-672.66565,30.076414,NULL,0,0,0,100,0), +(@PATH,3,-89.53006,-701.02655,36.55273,NULL,0,0,0,100,0), +(@PATH,4,-83.497406,-735.865,36.541836,NULL,0,0,0,100,0), +(@PATH,5,-112.21934,-751.7954,37.091347,NULL,0,0,0,100,0), +(@PATH,6,-83.497406,-735.865,36.541836,NULL,0,0,0,100,0), +(@PATH,7,-89.53006,-701.02655,36.55273,NULL,0,0,0,100,0), +(@PATH,8,-97.61304,-672.66565,30.076414,NULL,0,0,0,100,0); + +-- Pathing for Mennu the Betrayer Entry: 17941 +SET @NPC := 79362; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=49.4763,`position_y`=-380.21915,`position_z`=3.0355754 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,49.4763,-380.21915,3.0355754,NULL,1000,0,0,100,0), +(@PATH,2,89.26869,-380.23682,15.089901,NULL,0,0,0,100,0), +(@PATH,3,121.63626,-380.37653,29.957338,NULL,1500,0,0,100,0), +(@PATH,4,89.427284,-380.23688,15.121437,NULL,0,0,0,100,0); + +-- Pathing for Bogstrok Entry: 17816 +SET @NPC := 135102; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-121.42814,`position_y`=-752.9407,`position_z`=37.346226 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-121.42814,-752.9407,37.346226,NULL,0,1,0,100,0), +(@PATH,2,-144.27388,-731.4174,37.89232,NULL,0,1,0,100,0), +(@PATH,3,-172.50328,-720.9616,37.892315,NULL,0,1,0,100,0), +(@PATH,4,-194.77405,-707.0978,37.89232,NULL,0,1,0,100,0), +(@PATH,5,-204.18204,-684.4947,37.353416,NULL,0,1,0,100,0), +(@PATH,6,-194.77405,-707.0978,37.89232,NULL,0,1,0,100,0), +(@PATH,7,-172.50328,-720.9616,37.892315,NULL,0,1,0,100,0), +(@PATH,8,-144.27388,-731.4174,37.89232,NULL,0,1,0,100,0); + +-- Gameobjects +DELETE FROM `gameobject` WHERE `map`=547 AND `id` IN (181278, 181270, 181275, 181276, 181556, 181557, 181569) AND `guid` IN (26558,26594,60189,60191,60192,61227,61404,61405,61407,61409,61900,61903,61904,63198,63199,61408); + +SET @GUID := 104413; +SET @POOL := 13313; +SET @POOLMOTHER := 8314; + +DELETE FROM `gameobject` WHERE `id` IN (181278, 181270, 181275, 181276, 181556, 181557, 181569) AND `map`=547 AND `ZoneId`=3717 AND `guid` BETWEEN @GUID+0 AND @GUID+52; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES +(@GUID+0 , 181278, 547, 3717, 3717, 3, 1, -15.1088, -328.102, -1.58162, 0.244346, 0, 0, 0, 1, 86400, 100, 1, '', 0), +(@GUID+1 , 181278, 547, 3717, 3717, 3, 1, -55.6236, 13.8905, -1.58162, 0.925024, 0, 0, 0.446198, 0.894935, 86400, 255, 1, '', 46597), +(@GUID+2 , 181278, 547, 3717, 3717, 3, 1, -6.49786, -268.131, -0.405657, 1.48353, 0, 0, 0.67559, 0.737278, 86400, 255, 1, '', 46597), +(@GUID+3 , 181278, 547, 3717, 3717, 3, 1, -110.174, -316.995, -1.5811, 3.82227, 0, 0, -0.942641, 0.333808, 86400, 255, 1, '', 46597), +(@GUID+4 , 181278, 547, 3717, 3717, 3, 1, -108.203, -6.1077, -8.88713, 0.994837, 0, 0, 0.477159, 0.878817, 86400, 255, 1, '', 46597), +(@GUID+5 , 181278, 547, 3717, 3717, 3, 1, -71.7667, -314.165, -1.4775, 3.68265, 0, 0, -0.96363, 0.267241, 86400, 255, 1, '', 46597), +(@GUID+6 , 181278, 547, 3717, 3717, 3, 1, -118.49, -195.385, -1.52758, 5.55015, 0, 0, -0.358368, 0.93358, 86400, 255, 1, '', 46597), +(@GUID+7 , 181278, 547, 3717, 3717, 3, 1, -9.24667, -186.432, -1.56752, 6.05629, 0, 0, -0.113203, 0.993572, 86400, 255, 1, '', 46597), +(@GUID+8 , 181278, 547, 3717, 3717, 3, 1, -9.61051, -69.0904, -1.58162, 2.84488, 0, 0, 0.989016, 0.147811, 86400, 255, 1, '', 46597), +(@GUID+9 , 181278, 547, 3717, 3717, 3, 1, -67.6224, -275.954, -1.35519, 5.044, 0, 0, -0.580703, 0.814116, 86400, 255, 1, '', 46597), +(@GUID+10, 181278, 547, 3717, 3717, 3, 1, -85.9097, -548.388, -1.58175, 0.104719, 0, 0, 0.0523357, 0.99863, 86400, 255, 1, '', 46597), +(@GUID+11, 181278, 547, 3717, 3717, 3, 1, -146.844, -479.709, -0.817709, 2.80998, 0, 0, 0.986285, 0.16505, 86400, 255, 1, '', 46597), +(@GUID+12, 181278, 547, 3717, 3717, 3, 1, -41.414, -512.581, -1.58581, 3.78737, 0, 0, -0.948323, 0.317306, 86400, 255, 1, '', 46597), +(@GUID+13, 181278, 547, 3717, 3717, 3, 1, -117.839, -585.493, 5.45307, 1.0821, 0, 0, 0.515038, 0.857168, 86400, 255, 1, '', 46597), +(@GUID+14, 181270, 547, 3717, 3717, 3, 1, -130.503, -273.61, -1.58329, 2.60054, 0, 0, 0.96363, 0.267241, 86400, 255, 1, '', 46597), +(@GUID+15, 181270, 547, 3717, 3717, 3, 1, -168.039, -701.512, 37.9013, 4.20625, 0, 0, -0.861629, 0.507539, 86400, 255, 1, '', 46597), +(@GUID+16, 181270, 547, 3717, 3717, 3, 1, -43.2663, -451.806, -1.9612, 2.42601, 0, 0, 0.936672, 0.350207, 86400, 255, 1, '', 46597), +(@GUID+17, 181270, 547, 3717, 3717, 3, 1, -19.0182, -556.112, -1.58351, 0.453785, 0, 0, 0.224951, 0.97437, 86400, 255, 1, '', 46597), +(@GUID+18, 181270, 547, 3717, 3717, 3, 1, -94.6669, -705.023, 37.3486, 2.18166, 0, 0, 0.887011, 0.461749, 86400, 255, 1, '', 46597), +(@GUID+19, 181270, 547, 3717, 3717, 3, 1, -86.5097, -632.706, 20.4527, 3.97935, 0, 0, -0.913545, 0.406738, 86400, 255, 1, '', 46597), +(@GUID+20, 181270, 547, 3717, 3717, 3, 1, -196.949, -756.071, 40.2413, 6.03884, 0, 0, -0.121869, 0.992546, 86400, 255, 1, '', 46597), +(@GUID+21, 181270, 547, 3717, 3717, 3, 1, -110.273, -755.954, 37.3613, 3.10665, 0, 0, 0.999847, 0.0174693, 86400, 255, 1, '', 46597), +(@GUID+22, 181275, 547, 3717, 3717, 3, 1, -131.525, -133.744, -1.97161, 1.88495, 0, 0, 0.809016, 0.587786, 86400, 255, 1, '', 46597), +(@GUID+24, 181275, 547, 3717, 3717, 3, 1, -61.4976, -616.144, -0.567495, 3.01941, 0, 0, 0.998135, 0.0610518, 86400, 255, 1, '', 46597), +(@GUID+26, 181275, 547, 3717, 3717, 3, 1, -58.8091, -152.355, -1.42225, 5.3058, 0, 0, -0.469471, 0.882948, 86400, 255, 1, '', 46597), +(@GUID+28, 181275, 547, 3717, 3717, 3, 1, -55.9415, -29.0174, -1.69497, 4.95674, 0, 0, -0.615661, 0.788011, 86400, 255, 1, '', 46597), +(@GUID+30, 181275, 547, 3717, 3717, 3, 1, -76.0176, -482.555, -1.58448, 3.52557, 0, 0, -0.981627, 0.190812, 86400, 255, 1, '', 46597), +(@GUID+32, 181275, 547, 3717, 3717, 3, 1, -146.687, -255.88, -1.58513, 5.65487, 0, 0, -0.309016, 0.951057, 86400, 255, 1, '', 46597), +(@GUID+34, 181275, 547, 3717, 3717, 3, 1, -8.01602, -3.30066, -1.2195, 2.25147, 0, 0, 0.902585, 0.430512, 86400, 255, 1, '', 46597), +(@GUID+36, 181275, 547, 3717, 3717, 3, 1, -170.84, -779.574, 42.7871, 3.24635, 0, 0, -0.998629, 0.0523532, 86400, 255, 1, '', 46597), +(@GUID+23, 181276, 547, 3717, 3717, 3, 1, -131.525, -133.744, -1.97161, 1.88495, 0, 0, 0.809016, 0.587786, 86400, 255, 1, '', 46597), +(@GUID+25, 181276, 547, 3717, 3717, 3, 1, -61.4976, -616.144, -0.567495, 3.01941, 0, 0, 0.998135, 0.0610518, 86400, 255, 1, '', 46597), +(@GUID+27, 181276, 547, 3717, 3717, 3, 1, -58.8091, -152.355, -1.42225, 5.3058, 0, 0, -0.469471, 0.882948, 86400, 255, 1, '', 46597), +(@GUID+29, 181276, 547, 3717, 3717, 3, 1, -55.9415, -29.0174, -1.69497, 4.95674, 0, 0, -0.615661, 0.788011, 86400, 255, 1, '', 46597), +(@GUID+31, 181276, 547, 3717, 3717, 3, 1, -76.0176, -482.555, -1.58448, 3.52557, 0, 0, -0.981627, 0.190812, 86400, 255, 1, '', 46597), +(@GUID+33, 181276, 547, 3717, 3717, 3, 1, -146.687, -255.88, -1.58513, 5.65487, 0, 0, -0.309016, 0.951057, 86400, 255, 1, '', 46597), +(@GUID+35, 181276, 547, 3717, 3717, 3, 1, -8.01602, -3.30066, -1.2195, 2.25147, 0, 0, 0.902585, 0.430512, 86400, 255, 1, '', 46597), +(@GUID+37, 181276, 547, 3717, 3717, 3, 1, -170.84, -779.574, 42.7871, 3.24635, 0, 0, -0.998629, 0.0523532, 86400, 255, 1, '', 46597), +(@GUID+38, 181556, 547, 3717, 3717, 3, 1, -136.808, -128.963, -1.69219, 1.91986, 0, 0, 0.819152, 0.573577, 86400, 255, 1, '', 46597), +(@GUID+41, 181556, 547, 3717, 3717, 3, 1, 0.00864, -186.667, -1.55533, 3.94445, 0, 0, -0.920505, 0.390732, 86400, 255, 1, '', 46597), +(@GUID+44, 181556, 547, 3717, 3717, 3, 1, -71.3426, -282.686, -1.4015, 0.733038, 0, 0, 0.358368, 0.93358, 86400, 255, 1, '', 46597), +(@GUID+39, 181557, 547, 3717, 3717, 3, 1, -136.808, -128.963, -1.69219, 1.91986, 0, 0, 0.819152, 0.573577, 86400, 255, 1, '', 46597), +(@GUID+42, 181557, 547, 3717, 3717, 3, 1, 0.00864, -186.667, -1.55533, 3.94445, 0, 0, -0.920505, 0.390732, 86400, 255, 1, '', 46597), +(@GUID+45, 181557, 547, 3717, 3717, 3, 1, -71.3426, -282.686, -1.4015, 0.733038, 0, 0, 0.358368, 0.93358, 86400, 255, 1, '', 46597), +(@GUID+40, 181569, 547, 3717, 3717, 3, 1, -136.808, -128.963, -1.69219, 1.91986, 0, 0, 0.819152, 0.573577, 86400, 255, 1, '', 46597), +(@GUID+43, 181569, 547, 3717, 3717, 3, 1, 0.00864, -186.667, -1.55533, 3.94445, 0, 0, -0.920505, 0.390732, 86400, 255, 1, '', 46597), +(@GUID+46, 181569, 547, 3717, 3717, 3, 1, -71.3426, -282.686, -1.4015, 0.733038, 0, 0, 0.358368, 0.93358, 86400, 255, 1, '', 46597), +(@GUID+47, 181556, 547, 3717, 3717, 3, 1, -78.1511, -601.834, 3.77027, 2.28638, 0, 0, 0.909961, 0.414694, 86400, 255, 1, '', 46597), +(@GUID+50, 181556, 547, 3717, 3717, 3, 1, -70.0015, -481.986, -1.59485, 2.35619, 0, 0, 0.92388, 0.382683, 86400, 255, 1, '', 46597), +(@GUID+48, 181557, 547, 3717, 3717, 3, 1, -78.1511, -601.834, 3.77027, 2.28638, 0, 0, 0.909961, 0.414694, 86400, 255, 1, '', 46597), +(@GUID+51, 181557, 547, 3717, 3717, 3, 1, -70.0015, -481.986, -1.59485, 2.35619, 0, 0, 0.92388, 0.382683, 86400, 255, 1, '', 46597), +(@GUID+49, 181569, 547, 3717, 3717, 3, 1, -78.1511, -601.834, 3.77027, 2.28638, 0, 0, 0.909961, 0.414694, 86400, 255, 1, '', 46597), +(@GUID+52, 181569, 547, 3717, 3717, 3, 1, -70.0015, -481.986, -1.59485, 2.35619, 0, 0, 0.92388, 0.382683, 86400, 255, 1, '', 46597); + +DELETE FROM `pool_template` WHERE `description` LIKE '%Slave Pens%' AND `entry` BETWEEN @POOLMOTHER+0 AND @POOLMOTHER+5; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOLMOTHER+0, 3, 'The Slave Pens - Ancient Lichen - West Group'), +(@POOLMOTHER+1, 1, 'The Slave Pens - Ancient Lichen - East Group'), +(@POOLMOTHER+2, 2, 'The Slave Pens - Felweed - Master Group'), +(@POOLMOTHER+3, 2, 'The Slave Pens - Ragveil / Flame Cap - Master Group'), +(@POOLMOTHER+4, 1, 'The Slave Pens - Ores - Group West'), +(@POOLMOTHER+5, 1, 'The Slave Pens - Ores - Group East'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE '%Slave Pens%' AND `guid` BETWEEN @GUID+0 AND @GUID+21 AND `pool_entry` BETWEEN @POOLMOTHER+0 AND @POOLMOTHER+2; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@GUID+0 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+1 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+2 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+3 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+4 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+5 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+6 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+7 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+8 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+9 , @POOLMOTHER+0, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+10, @POOLMOTHER+1, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+11, @POOLMOTHER+1, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+12, @POOLMOTHER+1, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+13, @POOLMOTHER+1, 0, 'Ancient Lichen - The Slave Pens'), +(@GUID+14, @POOLMOTHER+2, 0, 'Felweed - The Slave Pens'), +(@GUID+15, @POOLMOTHER+2, 0, 'Felweed - The Slave Pens'), +(@GUID+16, @POOLMOTHER+2, 0, 'Felweed - The Slave Pens'), +(@GUID+17, @POOLMOTHER+2, 0, 'Felweed - The Slave Pens'), +(@GUID+18, @POOLMOTHER+2, 0, 'Felweed - The Slave Pens'), +(@GUID+19, @POOLMOTHER+2, 0, 'Felweed - The Slave Pens'), +(@GUID+20, @POOLMOTHER+2, 0, 'Felweed - The Slave Pens'), +(@GUID+21, @POOLMOTHER+2, 0, 'Felweed - The Slave Pens'); + +DELETE FROM `pool_template` WHERE `description` LIKE '%Slave Pens%' AND `entry` BETWEEN @POOL+0 AND @POOL+12; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOL+0 , 1, 'The Slave Pens - Ragveil / Flame Cap'), +(@POOL+1 , 1, 'The Slave Pens - Ragveil / Flame Cap'), +(@POOL+2 , 1, 'The Slave Pens - Ragveil / Flame Cap'), +(@POOL+3 , 1, 'The Slave Pens - Ragveil / Flame Cap'), +(@POOL+4 , 1, 'The Slave Pens - Ragveil / Flame Cap'), +(@POOL+5 , 1, 'The Slave Pens - Ragveil / Flame Cap'), +(@POOL+6 , 1, 'The Slave Pens - Ragveil / Flame Cap'), +(@POOL+7 , 1, 'The Slave Pens - Ragveil / Flame Cap'), +(@POOL+8 , 1, 'The Slave Pens - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+9 , 1, 'The Slave Pens - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+10, 1, 'The Slave Pens - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+11, 1, 'The Slave Pens - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+12, 1, 'The Slave Pens - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'); + +DELETE FROM `pool_pool` WHERE `description` LIKE '%Slave Pens%' AND `pool_id` BETWEEN @POOL+0 AND @POOL+12 AND `mother_pool` BETWEEN @POOLMOTHER+3 AND @POOLMOTHER+5; +INSERT INTO `pool_pool` (`pool_id`, `mother_pool`, `chance`, `description`) VALUES +(@POOL+0 , @POOLMOTHER+3, 0, 'The Slave Pens - Ragveil / Flame Cap - Master Group'), +(@POOL+1 , @POOLMOTHER+3, 0, 'The Slave Pens - Ragveil / Flame Cap - Master Group'), +(@POOL+2 , @POOLMOTHER+3, 0, 'The Slave Pens - Ragveil / Flame Cap - Master Group'), +(@POOL+3 , @POOLMOTHER+3, 0, 'The Slave Pens - Ragveil / Flame Cap - Master Group'), +(@POOL+4 , @POOLMOTHER+3, 0, 'The Slave Pens - Ragveil / Flame Cap - Master Group'), +(@POOL+5 , @POOLMOTHER+3, 0, 'The Slave Pens - Ragveil / Flame Cap - Master Group'), +(@POOL+6 , @POOLMOTHER+3, 0, 'The Slave Pens - Ragveil / Flame Cap - Master Group'), +(@POOL+7 , @POOLMOTHER+3, 0, 'The Slave Pens - Ragveil / Flame Cap - Master Group'), +(@POOL+8 , @POOLMOTHER+4, 0, 'The Slave Pens - Adamantite / Khorium / Rich Adamantite - Group West'), +(@POOL+9 , @POOLMOTHER+4, 0, 'The Slave Pens - Adamantite / Khorium / Rich Adamantite - Group West'), +(@POOL+10, @POOLMOTHER+4, 0, 'The Slave Pens - Adamantite / Khorium / Rich Adamantite - Group West'), +(@POOL+11, @POOLMOTHER+5, 0, 'The Slave Pens - Adamantite / Khorium / Rich Adamantite - Group East'), +(@POOL+12, @POOLMOTHER+5, 0, 'The Slave Pens - Adamantite / Khorium / Rich Adamantite - Group East'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE '%Slave Pens%' AND `guid` BETWEEN @GUID+22 AND @GUID+52 AND `pool_entry` BETWEEN @POOL+0 AND @POOL+12; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@GUID+22, @POOL+0, 0 , 'Ragveil - The Slave Pens'), +(@GUID+24, @POOL+1, 0 , 'Ragveil - The Slave Pens'), +(@GUID+26, @POOL+2, 0 , 'Ragveil - The Slave Pens'), +(@GUID+28, @POOL+3, 0 , 'Ragveil - The Slave Pens'), +(@GUID+30, @POOL+4, 0 , 'Ragveil - The Slave Pens'), +(@GUID+32, @POOL+5, 0 , 'Ragveil - The Slave Pens'), +(@GUID+34, @POOL+6, 0 , 'Ragveil - The Slave Pens'), +(@GUID+36, @POOL+7, 0 , 'Ragveil - The Slave Pens'), +(@GUID+23, @POOL+0, 25, 'Flame Cap - The Slave Pens'), +(@GUID+25, @POOL+1, 25, 'Flame Cap - The Slave Pens'), +(@GUID+27, @POOL+2, 25, 'Flame Cap - The Slave Pens'), +(@GUID+29, @POOL+3, 25, 'Flame Cap - The Slave Pens'), +(@GUID+31, @POOL+4, 25, 'Flame Cap - The Slave Pens'), +(@GUID+33, @POOL+5, 25, 'Flame Cap - The Slave Pens'), +(@GUID+35, @POOL+6, 25, 'Flame Cap - The Slave Pens'), +(@GUID+37, @POOL+7, 25, 'Flame Cap - The Slave Pens'), +(@GUID+38, @POOL+8 , 0, 'Adamantite Deposit - The Slave Pens'), +(@GUID+41, @POOL+9 , 0, 'Adamantite Deposit - The Slave Pens'), +(@GUID+44, @POOL+10, 0, 'Adamantite Deposit - The Slave Pens'), +(@GUID+39, @POOL+8 , 5, 'Khorium Vein - The Slave Pens'), +(@GUID+42, @POOL+9 , 5, 'Khorium Vein - The Slave Pens'), +(@GUID+45, @POOL+10, 5, 'Khorium Vein - The Slave Pens'), +(@GUID+40, @POOL+8 , 40, 'Rich Adamantite Deposit - The Slave Pens'), +(@GUID+43, @POOL+9 , 40, 'Rich Adamantite Deposit - The Slave Pens'), +(@GUID+46, @POOL+10, 40, 'Rich Adamantite Deposit - The Slave Pens'), +(@GUID+47, @POOL+11, 0, 'Adamantite Deposit - The Slave Pens'), +(@GUID+50, @POOL+12, 0, 'Adamantite Deposit - The Slave Pens'), +(@GUID+48, @POOL+11, 5, 'Khorium Vein - The Slave Pens'), +(@GUID+51, @POOL+12, 5, 'Khorium Vein - The Slave Pens'), +(@GUID+49, @POOL+11, 40, 'Rich Adamantite Deposit - The Slave Pens'), +(@GUID+52, @POOL+12, 40, 'Rich Adamantite Deposit - The Slave Pens'); diff --git a/data/sql/updates/db_world/2022_11_21_03.sql b/data/sql/updates/db_world/2022_11_21_03.sql new file mode 100644 index 000000000..bffe09ca7 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_03.sql @@ -0,0 +1,60 @@ +-- DB update 2022_11_21_02 -> 2022_11_21_03 +-- esES missing reward_locale +DELETE FROM `quest_offer_reward_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (11262, 12118, 12182, 12297, 12298, 12918, 12952, 13087, 13089, 13206, 13268, 13269); +INSERT INTO `quest_offer_reward_locale` (`ID`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(11262, 'esES', 'Excelente trabajo, $N. Ahora que nos hemos librado de su líder, nuestros esfuerzos contra esos vrykuls deberían ser más fructíferos.$b$b¡Un servicio así merece una recompensa!', 0), +(12118, 'esES', '¿Qué dices, $R? ¿Te envía Anuniaq?$b$bBien, bien... hay mucho trabajo. ¡Toda ayuda es bien recibida!', 0), +(12182, 'esES', '¡Qué gran día! ¡Y mira por donde, más allá de la montaña al noreste hay todo un campo de la Plaga para que lo borremos del mapa!', 0), +(12297, 'esES', '$b$b¡Vas a coger el hipogrifo más rápido que tengo, $R! Esta información debe llegar al Alto comandante Aterravermis sin dilación!', 0), +(12298, 'esES', '$b$b¿Sabes dónde están ahora los de esta lista? Mira afuera, junto a la puerta frontal. Son los que cuelgan de los arcos.$b$bCebo de necrófagos...', 0), +(12918, 'esES', 'Estas son perfectas para reponer mi stock. No solo te enseñaré el arte del tallado a la perfección, sino que cortaré una de esas gemas de forma perfecta para ti como recompensa.', 0), +(12952, 'esES', 'Estas servirán. Puedo enseñarte el arte del tallado a la perfección y también darte unas muestras como prueba de mis habilidades.', 0), +(13087, 'esES', '¡Has recogío mi carne! Aquí tienes tu receta, ¡Tengo cosas que cocinar!', 0), +(13089, 'esES', 'Podemos convertir esta carne rápidamente en estofado.', 0), +(13206, 'esES', 'Marrah ha informado acerca de la superioridad del armamento vrykul. Echaremos un vistazo a estas a ver si podemos aprender algo.$b$bToma esto por las molestias, $C.', 0), +(13268, 'esES', 'Vuelve cuando tengas la suficiente habilidad y podre proporcionarte un entrenamiento de sastrería.', 0), +(13269, 'esES', 'Mata suficientes humanoides y recoge sus telas.', 0), +-- esMX missing reward_locale +(11262, 'esMX', 'Excelente trabajo, $N. Ahora que nos hemos librado de su líder, nuestros esfuerzos contra esos vrykuls deberían ser más fructíferos.$b$b¡Un servicio así merece una recompensa!', 0), +(12118, 'esMX', '¿Qué dices, $R? ¿Te envía Anuniaq?$b$bBien, bien... hay mucho trabajo. ¡Toda ayuda es bien recibida!', 0), +(12182, 'esMX', '¡Qué gran día! ¡Y mira por donde, más allá de la montaña al noreste hay todo un campo de la Plaga para que lo borremos del mapa!', 0), +(12297, 'esMX', '$b$b¡Vas a coger el hipogrifo más rápido que tengo, $R! Esta información debe llegar al Alto comandante Aterravermis sin dilación!', 0), +(12298, 'esMX', '$b$b¿Sabes dónde están ahora los de esta lista? Mira afuera, junto a la puerta frontal. Son los que cuelgan de los arcos.$b$bCebo de necrófagos...', 0), +(12918, 'esMX', 'Estas son perfectas para reponer mi stock. No solo te enseñaré el arte del tallado a la perfección, sino que cortaré una de esas gemas de forma perfecta para ti como recompensa.', 0), +(12952, 'esMX', 'Estas servirán. Puedo enseñarte el arte del tallado a la perfección y también darte unas muestras como prueba de mis habilidades.', 0), +(13087, 'esMX', '¡Has obtenío mi carne! Aquí tienes tu receta, ¡Tengo cosas que cocinar!', 0), +(13089, 'esMX', 'Podemos convertir esta carne rápidamente en estofado.', 0), +(13206, 'esMX', 'Marrah ha informado acerca de la superioridad del armamento vrykul. Echaremos un vistazo a estas a ver si podemos aprender algo.$b$bToma esto por las molestias, $C.', 0), +(13268, 'esMX', 'Vuelve cuando tengas la suficiente habilidad y podre proporcionarte un entrenamiento de sastrería.', 0), +(13269, 'esMX', 'Mata suficientes humanoides y obtén sus telas.', 0); +-- 2 SECTION +-- esES missing quest_request_items_locale +DELETE FROM `quest_request_items_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (11262, 11452, 11453, 12182, 12297, 12298, 12918, 12952, 13087, 13089, 13206, 13268, 13269); +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(11262, 'esES', 'Prepárate, $R.$b$bAún queda mucho por hacer. Esto es solo la punta del iceberg, por decirlo de alguna manera.', 0), +(11452, 'esES', '¡$n, qué nuevas noticias nos traes?', 0), +(11453, 'esES', '¡$n, qué nuevas noticias nos traes?', 0), +(12182, 'esES', '¿Eres tú $gel:la; chic$go:a; de los recados?', 0), +(12297, 'esES', 'Hola, $c.', 0), +(12298, 'esES', '¿Qué tienes ahí, soldado?', 0), +(12918, 'esES', 'Eres muy generoso. Lo mejor que puedo hacer es enseñarte el arte del tallado a la perfección.', 0), +(12952, 'esES', 'Estos servirán. Te enseñaré el arte del tallado a la perfección.', 0), +(13087, 'esES', '¡¿¡¿DÓNDE ESTÁ MI CARNE!?!?', 0), +(13089, 'esES', 'El estofado aguarda...', 0), +(13206, 'esES', '¿Qué tienes ahí, $c?', 0), +(13268, 'esES', 'Pareces alguien que sabe manejarse con la aguja y el hilo así que creo que tal vez pueda ayudarte.$B$BLos humanoides de las tierras de Rasganorte visten prendas que se pueden convertir en tela si sabes cómo hacerlo.$B$BPor un poco de oro, me dispongo a enseñarte el arte de la Recolección de Telas, que te proporcionará telas de tejido de escarcha adicionales de los humanoides de Rasganorte que mates.', 0), +(13269, 'esES', 'Los humanoides de las tierras de Rasganorte visten prendas que se pueden convertir en tela si sabes cómo hacerlo.$b$bPor un poco de oro, me dispongo a enseñarte el arte de la Recolección de Telas, que te proporcionará telas de tejido de escarcha adicionales de los humanoides de Rasganorte que mates.', 0), +-- esMX missing quest_request_items_locale +(11262, 'esMX', 'Prepárate, $R.$b$bAún queda mucho por hacer. Esto es solo la punta del iceberg, por decirlo de alguna manera.', 0), +(11452, 'esMX', '¡$n, qué nuevas noticias nos traes?', 0), +(11453, 'esMX', '¡$n, qué nuevas noticias nos traes?', 0), +(12182, 'esMX', '¿Eres tú $gel:la; chic$go:a; de los recados?', 0), +(12297, 'esMX', 'Hola, $c.', 0), +(12298, 'esMX', '¿Qué tienes ahí, soldado?', 0), +(12918, 'esMX', 'Eres muy generoso. Lo mejor que puedo hacer es enseñarte el arte del tallado a la perfección.', 0), +(12952, 'esMX', 'Estos servirán. Te enseñaré el arte del tallado a la perfección.', 0), +(13087, 'esMX', '¡¿¡¿DÓNDE ESTÁ MI CARNE!?!?', 0), +(13089, 'esMX', 'El estofado aguarda...', 0), +(13206, 'esMX', '¿Qué tienes ahí, $c?', 0), +(13268, 'esMX', 'Pareces alguien que sabe manejarse con la aguja y el hilo así que creo que tal vez pueda ayudarte.$B$BLos humanoides de las tierras de Rasganorte visten prendas que se pueden convertir en tela si sabes cómo hacerlo.$B$BPor un poco de oro, me dispongo a enseñarte el arte de la Recolección de Telas, que te proporcionará telas de tejido de escarcha adicionales de los humanoides de Rasganorte que mates.', 0), +(13269, 'esMX', 'Los humanoides de las tierras de Rasganorte visten prendas que se pueden convertir en tela si sabes cómo hacerlo.$b$bPor un poco de oro, me dispongo a enseñarte el arte de la Recolección de Telas, que te proporcionará telas de tejido de escarcha adicionales de los humanoides de Rasganorte que mates.', 0); diff --git a/data/sql/updates/db_world/2022_11_21_04.sql b/data/sql/updates/db_world/2022_11_21_04.sql new file mode 100644 index 000000000..ceac7e799 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_04.sql @@ -0,0 +1,658 @@ +-- DB update 2022_11_21_03 -> 2022_11_21_04 +-- BOREAN TUNDRA esES missing reward_locale +DELETE FROM `quest_offer_reward_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (11559 ,11560 ,11561 ,11562 ,11563 ,11564 ,11565 ,11566 ,11569 ,11570 ,11571 ,11575 ,11576 ,11582 ,11587 ,11590 ,11599 ,11600 ,11601 ,11603 ,11604 ,11605 ,11607 ,11609 ,11610 ,11612 ,11613 ,11617 ,11620 ,11623 ,11625 ,11626 ,11645 ,11646 ,11648 ,11650 ,11653 ,11658 ,11663 ,11670 ,11671 ,11672 ,11673 ,11679 ,11680 ,11681 ,11682 ,11692 ,11693 ,11694 ,11697 ,11698 ,11699 ,11700 ,11701 ,11704 ,11707 ,11708 ,11710 ,11712 ,11713 ,11715 ,11718 ,11723 ,11725 ,11726 ,11727 ,11728 ,11729 ,11730 ,11733 ,11788 ,11789 ,11790 ,11791 ,11792 ,11793 ,11794 ,11795 ,11796 ,11797 ,11798 ,11864 ,11865 ,11866 ,11867 ,11868 ,11869 ,11870 ,11871 ,11872 ,11873 ,11876 ,11878 ,11879 ,11884 ,11889 ,11892 ,11897 ,11900 ,11901 ,11902 ,11903 ,11904 ,11905 ,11908 ,11910 ,11911 ,11912 ,11913 ,11914 ,11918 ,11919 ,11920 ,11927 ,11928 ,11931 ,11932 ,11936 ,11938 ,11940 ,11941 ,11942 ,11943 ,11944 ,11945 ,11946 ,11949 ,11950 ,11951 ,11956 ,11957 ,11961 ,11962 ,11963 ,11965 ,11967 ,11968 ,11969 ,11973 ,12019 ,12035 ,12086 ,12088 ,12117 ,12141 ,12157 ,12471 ,12517 ,12518 ,12728 ,12791 ,12798 ,13002 ,13004 ,13088 ,13090 ,13094 ,13095 ,13124 ,13128 ,13265 ,13270 ,13311 ,13412 ,13413 ,13414); +INSERT INTO `quest_offer_reward_locale` (`ID`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(11559, 'esES', '¿Son para mí? ¿Es esto algún tipo de truco, $r? ¿No?$B$B¡Entonces gracias! Vuelve cuando tengas más almejas y veremos si podemos negociar.', 0), +(11560, 'esES', 'Ahora no importa lo que pase, los múrlocs Aleta Invernal tienen el futuro asegurado.$b$b¡Estás a punto de recibir elogios y recompensas por tu altruismo, $N!', 0), +(11561, 'esES', 'Estoy satisfecho. Puedo oler la esencia cobriza de su sangre en tus manos.', 0), +(11562, 'esES', 'Así que tú debes de ser el lacayo del llamado rey Mrgl-Mrgl. Supongo que ese elfo de la noche te ha enviado para apaciguarme.$b$bBien, tengo la tarea ideal para alguien tan fuerte como tú.', 0), +(11563, 'esES', 'No ha estado mal. ¡Haremos un gran festín!$B$BAhora que el rey de las orcas ha muerto, los ataques de los cetáceos deberían disminuir mientras luchan entre ellos por conseguir el poder.', 0), +(11564, 'esES', 'Pues sí, éstas servirán.$b$bDéjalas donde puedas. Puedes tomar unas sobras de mi estofado de anoche.', 0), +(11565, 'esES', '$b$bBien hecho. Ahora volvamos al tema en cuestión. Hay algo de gran importancia que necesito que hagas.', 0), +(11566, 'esES', 'Lamentable, pero necesario. Tomaré la garra, $N.$b$bGracias por toda tu ayuda. Con la derrota de Claximus, quizá podamos reunir a los múrlocs supervivientes y sellar esas cavernas.$b$bPor favor, amigo, acepta esto... es lo menos que puedo hacer por toda tu ayuda.', 0), +(11569, 'esES', 'Rápido, ¡Dámela!', 0), +(11570, 'esES', '¡Esa es una noticia maravillosa! ¿Y dices que Lurgglbr descubrió que las emanaciones de las cavernas son las que han causado esta locura?$b$bParece que la magia de Gelidar se está volviendo más fuerte. La guerra de El Nexo… la batalla entre el Vuelo Azul y el resto de dragones se está extendiendo.$b$bMuy pronto ¡Todos estaremos envueltos en ella!', 0), +(11571, 'esES', 'Ahora podré utilizar la esencia de Escaldadora para enseñarte mis competencias en la lengua Aleta Invernal.', 0), +(11575, 'esES', 'Puedes decirle a tu amiga que fue un placer rescatarla, pero también nuestro deber.$b$bMe temo que su conflicto es tan solo una de las múltiples piezas de un rompecabezas.$b$bDalaran está dándolo todo para resolver este misterio y, para ser sincero, necesitaríamos ayuda...', 0), +(11576, 'esES', '¡Increíble!$b$bEsta alteración es la más grande que ha habido.$b$bPero me temo que lo peor está aún por llegar.', 0), +(11582, 'esES', '¿Cómo era de grande?$b$b¡Eso es imposible! ¡He de informar a Dalaran de inmediato!', 0), +(11587, 'esES', 'Lo has hecho bien, $N.$b$bEl Kirin Tor acepta de buena gana la ayuda que nos has proporcionado. Has de saber que tus servicios serán debidamente recompensados.$b$bPor favor, acepta esta humilde oferta como muestra del agradecimiento de Dalaran.', 0), +(11590, 'esES', 'Excelente, $N.$b$bPrepararemos el interrogatorio enseguida.', 0), +(11599, 'esES', 'El cadáver se ajusta a la descripción de William Allerton que te dio Leryssa. Lo raro es que no tiene marcas de zarpas ni mordiscos.', 0), +(11600, 'esES', '¿Crees que la Plaga mató a William por casualidad? Esto huele a chamusquina.$b$bAlgo está ocurriendo. Tenemos que encontrar a Thassarian.', 0), +(11601, 'esES', 'No te prometo que pueda ayudarte. Pero conozco a alguien que quizás sí pueda.', 0), +(11603, 'esES', 'Mmmmm... ni muy amargo... ni muy seco, justo como en aquellos tiempos, con los chicos en el cuartel...', 0), +(11604, 'esES', '¿Qué quiereees? Ya tengo bastantes problemas...', 0), +(11605, 'esES', '$b$bMuy bien, $N. Con los nombres de los ancestros podremos continuar con las ceremonias que interrumpimos en el momento del ataque. Sin embargo, antes de que los espíritus de los ancestros sean guiados hasta sus estatuas, debemos calmar a los espíritus de los artesanos y chamanes asesinados. Si no, los espíritus de los ancestros no podrán oír jamás la llamada a la ceremonia.', 0), +(11607, 'esES', 'Presiento que la agitación del mundo espiritual vuelve a la calma. Lo has hecho bien, $N. Los espíritus de los ancestros tienen suerte de contar con tu ayuda en este momento tan necesario.', 0), +(11609, 'esES', '$b$bEsos bastarán, aunque están en un estado lamentable. Algunos de ellos han sobrevivido a siglos de utilización, y todo para ser maltratados y robados por unos salvajes.', 0), +(11610, 'esES', 'Los ancestros han encontrado sus estatuas y todo gracias a ti, $N. Los artesanos de Kashala volverán a la cantera y velarán por que se conserve la tradición ancestral. En lo que a nosotros respecta, los ancestros te seguiremos con interés pues parece que tu camino acaba de comenzar.', 0), +(11612, 'esES', 'Ahora que estos extraños magos saben que el pueblo de Kashala y sus aliados no se rendirán tan pronto, debemos continuar esforzándonos y derrotarlos por completo.$b$bMis hermanos en Kashala también están sufriendo un ataque y no podrán venir a ayudarnos, pero con tu ayuda, $N, podremos superar a esos saqueadores.', 0), +(11613, 'esES', 'Has hecho un gran favor a mi pueblo, $N, aunque... debo pedirte algo más.', 0), +(11617, 'esES', 'Los cazadores de magos descubrirán que saquear nuestra cantera y robar nuestros artefactos no será tan fácil como pensaban. Con tu ayuda, recuperaremos la cantera y pondremos las cosas en orden.', 0), +(11620, 'esES', '¡Hsssssssssssss! ¿Has venido a burlarte de mí, $r?', 0), +(11623, 'esES', 'El comisario y sus hombres se han debido de creer que esta cantera era un objetivo fácil para sus saqueos, pero tú les has demostrado lo contrario, $N. Estoy inmensamente agradecido por tu ayuda y tengo la certeza de que los ancestros seguirán velando por ti.', 0), +(11625, 'esES', '¡¡Sssíiiiiiii!! ¡Mataremos a la bestia de los Kvaldir! ¡Les enseñaré a esos brutos a no meterse con una sacerdotisa de tal escala jamás!', 0), +(11626, 'esES', 'Los espíritus de mi pueblo pueden descansar en paz. Me has ayudado a honrar a mi padre... quizás un día llegue a ser tan fuerte como tú.', 0), +(11645, 'esES', '¡Oh, $N, eres el mejor!$b$bAquí tienes tus monedas, tal y como te prometí.', 0), +(11646, 'esES', 'Donathan ha sido sabio al enviarte, $c.$b$bResulta que necesito a alguien que no pertenezca al Kirin Tor.', 0), +(11648, 'esES', '¡Excelente! Era vital que consiguiéramos esa información.$b$bBien hecho, amigo.', 0), +(11650, 'esES', 'Vale, ¡así está bien! Ahora todo lo que tenemos que hacer es juntar todo esto.$b$bSí, claro, como si fueras a ayudarme...$b$bEspérate... ¡Solo necesito un segundo ahora que ya tengo todas mis herramientas!', 0), +(11653, 'esES', '¡¿Cómo que no ha funcionado?!$b$bPero... pero...$b$b$b$bVale, esto tiene una solución. Ya soy grandecita. ¡Es hora de poner en marcha la imaginación!', 0), +(11658, 'esES', 'Bien, ¡aunque estas prendas echan un tufo que p\'a qué!$b$bA mí nunca me conquistarías con esos harapos. Pero tendremos que rebuscar y encontrar algo que te quede, eeh... bien.', 0), +(11663, 'esES', 'Perdóname, $N. Sé que es una tarea desagradable.$b$bSi no estuviéramos tan desesperados, nunca te hubiera pedido que nos ayudaras de este modo.$b$bBueno... ¿qué has descubierto?', 0), +(11670, 'esES', '¡Vaaaya, vaaaaya! ¡Lo conseguiste!$b$bMuy bien, ahora esos molestos magnatauros y sus perritos falderos snóbolds deberían concentrar su atención en la Horda.$b$b¿Cómo podría corresponderte, $N?', 0), +(11671, 'esES', '¿Rota?$b$bDéjame ver...', 0), +(11672, 'esES', 'Estábamos esperando tu llegada, $n. Bienvenido a Rasganorte.', 0), +(11673, 'esES', '¿Eh? ¿Qué?$b$b¿Chalati qué?$b$bNo tengo ni idea de qué estás hablando, pero te creeré. Si le rescataste del foso de Magmoth entonces supongo que te mereces una recompensa.$b$bDéjame ver qué tengo por aquí...', 0), +(11679, 'esES', 'Esos juegos frívolos a los que jugáis no tienen ninguna trascendencia...$b$bTú y tus aliados de Dalaran os entretenéis con minucias mientras el futuro de este mundo se hace trizas.$b$bSin embargo, esto podría proporcionar a mis dracos el entretenimiento que necesitan...$b$bEnséñame esa llave.', 0), +(11680, 'esES', '¡Esta es, la llave es nuestra!', 0), +(11681, 'esES', 'Tus heroicos esfuerzos no serán olvidados, $c.$b$bPor favor, acepta mi más sincera gratitud.', 0), +(11682, 'esES', 'Así que volvemos a hablar, $r.$b$bCuando hayas oído mis palabras desearás no haberlo hecho.', 0), +(11692, 'esES', '¿Qué necesitas, $c?', 0), +(11693, 'esES', 'Buen trabajo, pero yo que tú me daría una ducha.$b$bAhora, encarguémonos del problema de verdad.', 0), +(11694, 'esES', 'Sabía que eras capaz. Ahora hay algo más de lo que necesito que te encargues.', 0), +(11697, 'esES', '¡Hola! ¿Quién eres?$b$b¿Te envía Bixie? ¡Genial, sácame de aquí!', 0), +(11698, 'esES', 'Gracias, $N.$b$bEl Rey Exánime y su Plaga dan mucho miedo, ¡pero no podemos detenernos hasta que todos yazcan en tumbas nuevas!', 0), +(11699, 'esES', '¡Fabuloso! Ahora una pequeña modificación por aquí y un toquecito por allí...', 0), +(11700, 'esES', '¿Mañosa tiene una gemela malvada?$b$bBueno, si ella dice que está bien y si es capaz de volver pronto a la pista de aterrizaje, entonces me vale.', 0), +(11701, 'esES', 'Menuda historia, $N. Con todos los problemas que hay ahí fuera, es un milagro que la pista de aterrizaje siga en pie.$b$bPero, gracias a ti, tenemos un enemigo menos por el que preocuparnos.$b$bTenía guardadas unas cosas un tanto especiales para una ocasión como esta. ¿Por qué no escoges una?', 0), +(11704, 'esES', '¡Al fin, ayuda! Y por tu aspecto, Alianza.$b$bEso es bueno... tu gente tiene mucha habilidad en el arte del combate. Vamos a necesitar mucho de eso.', 0), +(11707, 'esES', 'Veo que Saltanubes por fin se ha decidido a enviar ayuda. Aunque debo añadir que no se ha dado demasiada prisa.$b$b¡Bienvenido, hermano! Tu ayuda nos será muy útil.', 0), +(11708, 'esES', '¿El viejo te ha enviado, eh? ¿Te ha contado todo lo que está pasando?$b$bBien... ¡Manos a la obra!', 0), +(11710, 'esES', '¡Espléndido, $c! Parece que estas piezas están en perfectas condiciones.$b$bSi pudiera encontrar la manera de arreglar este maldito chisme...', 0), +(11712, 'esES', 'Lo has conseguido... ¡Ha funcionado!$b$bNo me lo puedo creer, has podido salvar a muchos. ¡Tenemos suerte de contar contigo!', 0), +(11713, 'esES', '$b$b¡Genial! Esta es toda la información que necesitamos para comenzar la operación.', 0), +(11715, 'esES', '$b$bDestilar esto manualmente va a ser complicado, pero tendré que encargarme de ello pronto. Mientras tanto, necesitaremos más material para terminar la máquina.', 0), +(11718, 'esES', '$b$b¿Esos animales no intentan estar limpios? Algunos son realmente asquerosos. Bueno, supongo que más vale que me ponga a limpiarlos, que a nadie por aquí le sobra el tiempo.', 0), +(11723, 'esES', '$b$b¡Palanqueta estará encantado de oír la noticia! Y, quién sabe, ¡quizás hasta hagamos una máquina con tu imagen!', 0), +(11725, 'esES', 'Gracias a Dios. Fue horrible.$b$bHubo un resplandor en el suelo, y después lo único que sé es que ¡el escuadrón estaba cayendo en picado! Estoy bastante herido, así que aún no he podido peinar el terreno en busca de más supervivientes, pero algo me dice que no debe de haber muchos.$b$b$b$b¿Me ayudarás a completar mi misión?', 0), +(11726, 'esES', '$b$bAhora que tenemos lo que necesitamos, lo combinaré con mis raciones de emergencia para crear una carnada para los lobos.', 0), +(11727, 'esES', '¡Por las barbas de Magni! ¡Parece que llega la artillería pesada!', 0), +(11728, 'esES', '$b$b¡Puaj! Bueno, hemos acatado la sección 8.2, párrafo B del protocolo de emergencia y hemos recuperado el film. Pero el protocolo no dice nada de que tenga que limpiarlo.', 0), +(11729, 'esES', 'Mi destornillador... ¡Has encontrado mi destornillador! Me he estado preguntando dónde lo perdí.$b$bMmm, ¿dices que lo encontraste dentro de uno de sus robots? Eso me da una idea...', 0), +(11730, 'esES', '¡Yujuuu! ¡Y además has traído el destornillador intacto!$b$bAl reprogramar a esos robots vamos a ganar mucha ventaja en la lucha contra el maestro de palancas Mecazod. Creo que te has ganado una cosita.', 0), +(11733, 'esES', 'Te doy la bienvenida a Gelidar, $c.$b$bBajo el Escudo de Tránsito vivimos escondidos, tan solo a un tiro de piedra de El Nexo, fortaleza del gran Aspecto Malygos y su Vuelo Azul.$b$bPonte cómodo.', 0), +(11788, 'esES', 'Vaya, ¡has sobrevivido!$b$bSupongo que lo único que queda es encargarse del maestro de palancas Mecazod.', 0), +(11789, 'esES', 'Gracias, $N. La recuperación de este hombre será lenta, pero no lo perderemos.$b$b¿Qué dices? ¿Qué encontraste cultores dentro de El Rompetormentas? Más vale que avises a alguien... Y que traigas pruebas.', 0), +(11790, 'esES', '¿Cultores? ¿Bajo la cubierta? ¡Tendría que azotar a toda mi tripulación!$b$bEscucha... ¿por qué no hacemos que la almirante Cantlebree se ocupe de esta... situación?', 0), +(11791, 'esES', 'Gracias por preocuparte, $N. Nos enteramos de la situación hace poco.$b$bEl consejero Talbot me asegura que este fue un incidente aislado y no una razón de preocupación militar.$b$bNuestras autoridades civiles se encargarán de que todo aquel que esté involucrado sea perseguido.', 0), +(11792, 'esES', 'Sé discreto, $N. No podemos examinar estas pruebas delante de todas esas miradas entrometidas.', 0), +(11793, 'esES', 'Habla rápido, $c. ¿Qué sabes sobre el culto?', 0), +(11794, 'esES', 'Bien hecho, $N. Sin embargo, no puedo dejar de tener la sensación de que esta no es la última vez que veremos a esos cultores muertos.$b$bLa oscuridad tiene su manera de ocultar incluso lo más evidente.', 0), +(11795, 'esES', 'Una vez más, gracias, $N. Con tu ayuda, puede que sea capaz de completar esta misión tan desastrosa, y volver con Palanqueta para redactar mi informe y honrar a los muertos como es debido.', 0), +(11796, 'esES', 'Te lo agradezco de nuevo, $N. Sin tu ayuda no habría podido recuperar nada útil de este desastre.', 0), +(11797, 'esES', 'Bien hecho, $N. Enséñales cómo se hace. ¡El mejor reptador es un reptador muerto!', 0), +(11798, 'esES', '$b$bYa ha terminado... ¡Nos has salvado! Si no lo hubieras detenido aquí, entonces, ¿quién sabe hasta dónde se habría extendido su locura?$b$bCon las amenazas de los Dragones Azules y la Guerra de El Nexo, por no hablar del Rey Exánime, ¡Lo último que necesitamos es una creación loca de los Titanes suelta!$b$b¡Gracias $N!', 0), +(11864, 'esES', 'El demonio tiene muchos nombres y cada nombre ha tenido un significado especial en algún momento. Aunque los detalles fueran a veces insignificantes, el resultado final siempre era el mismo: la muerte.$b$bPero es ahora, casi cincuenta años después de que todo comenzara, cuando los detalles encontrarán al diablo y lo llevarán a su perdición.$b$bEsta vez, lo tenemos... Nesingwary no tendrá escapatoria.$b$bRasganorte será el campo de batalla para nuestra guerra. ¡El cazador será cazado!', 0), +(11865, 'esES', 'Haces bien el trabajo de la Madre Tierra, $N, pero no cantes victoria aún. Hemos descubierto el escondrijo del líder de los tramperos.', 0), +(11866, 'esES', 'Voy a ponérmelas alrededor del cuello. ¡Que oigan nuestro mensaje y que estas orejas sean las portadoras de nuestra verdad!', 0), +(11867, 'esES', 'Voy a ponérmelas alrededor del cuello. ¡Que oigan nuestro mensaje y que estas orejas sean las portadoras de nuestra verdad!', 0), +(11868, 'esES', 'Quizás su muerte sirva de ejemplo a otros que se atrevan a matar animales por diversión y dinero.', 0), +(11869, 'esES', '¡Ahora veamos cómo se les hincha la vena cuando vean lo que les ocurrió a sus compañeros!', 0), +(11870, 'esES', '¿Cenius te envía? ¡Pues no llegas muy pronto que digamos!', 0), +(11871, 'esES', 'Buen trabajo, $N. ¡Ahora atacaremos al líder pirata!', 0), +(11872, 'esES', 'Un trabajo excelente, $N. ¡Nos acercamos a Nesingwary!', 0), +(11873, 'esES', '$b$bDebería haber ido con ellos. Podríamos haber completado la misión sin perder a ninguno de los pilotos.$b$bPero Barrena tiene razón, tenemos que darte las gracias por todo lo que has conseguido salvar. Tu trabajo podría marcar una gran diferencia en la lucha contra los nerubianos.', 0), +(11876, 'esES', '$b$bNunca han tenido una oportunidad. Ahora huérfanos y solos, seguramente mueran.', 0), +(11878, 'esES', '$b$bTu nombre ha viajado con el viento susurrante, $N. Has realizado un acto grandioso para mi estirpe. Por esto te consideraremos como nuestro aliado. No obstante, nuestro tormento no terminará sin derramamiento de sangre y violencia.$b$bLa paz de los mamuts llegará con la muerte de Kaw...', 0), +(11879, 'esES', '$b$b¿Esto es lo que creo que es?$b$b$b$b¡Estupendo! ¡Excelente! ¡Otro lacayo de Nesingwary que se ha llevado un merecido castigo!', 0), +(11884, 'esES', 'Al menos por ahora los rinocerontes conocerán la paz. Gracias, $N.', 0), +(11889, 'esES', 'Los derrotaremos si vienen por tierra y los derrotaremos si vienen por aire. Si esos no-muertos desgraciados vienen por mar entonces les daremos la paliza de sus vidas.', 0), +(11892, 'esES', 'Por desgracia, Nesingwary ya no está. Quizás nunca estuvo aquí para empezar a...$b$b$b$bEse demonio es resbaladizo, pero sus días están contados. Lo encontraremos, y cuando lo hagamos...', 0), +(11897, 'esES', 'Has hecho un trabajo excelente, $N. Sin ti, la Fortaleza Denuedo no podría haber resistido contra los atacantes. Gracias a tu ayuda viviremos para luchar un día más.', 0), +(11900, 'esES', 'Esto es aún peor de lo que pensaba.$b$bMalygos está canalizando demasiado poder a este lugar. Si no lo detenemos, ¡Azeroth será el próximo Terrallende!$b$bLa buena noticia es que creo haber encontrado una solución temporal...', 0), +(11901, 'esES', 'A medida que te acercas al grano, tu estómago empieza a revolverse. El olor es casi insoportable.', 0), +(11902, 'esES', 'Esos pobres chicos... ¡no tuvieron ninguna oportunidad!$b$bEsto parece un trabajo organizado desde dentro. Probablemente un infiltrado del Culto de los Malditos. ¡Malditos sean esos locos!', 0), +(11903, 'esES', 'Te has comunicado con la Plaga en el único idioma que entienden: violencia y muerte. ¡Por desgracia continúan viniendo!', 0), +(11904, 'esES', 'Te doy las gracias, $N. Esta mena será de vital importancia para la Alianza en los tiempos venideros. Quiero pensar que hoy hemos hecho algo importante.', 0), +(11905, 'esES', 'Un trabajo excelente, $N. Los temblores ya han empezado a calmarse.$b$bCon un poco de suerte, nos habrás conseguido el tiempo suficiente para frustrar los planes de Malygos.', 0), +(11908, 'esES', '¡Excelente! La información que necesito debería estar aquí.', 0), +(11910, 'esES', 'Sí, sí... estas servirán.$b$bGracias, $r.', 0), +(11911, 'esES', '¡Fascinante!$b$bY también son agresivos, por lo que dices. Eso me indica que hay algún tipo de organización detrás de toda esta manipulación. No puede ser algo natural...$b$bPor favor, $N, acepta esto como muestra de nuestra gratitud por todo lo que has hecho. Todo Dalaran sabrá que nos has ayudado.', 0), +(11912, 'esES', 'Bueno, no es mucho, pero nos podrá mantener con vida un día más.$b$bCreo que esto será una compensación justa por tu ayuda.', 0), +(11913, 'esES', 'Gracias, $N. No podría haber soportado ver a los supervivientes del ataque de Lindeallá tropezar con grano apestado.', 0), +(11914, 'esES', 'La ayuda que has prestado a Dalaran no pasará desapercibida, $r.$b$bEspero que esto sea bastante.', 0), +(11918, 'esES', 'Bien, $c, ahora que te has familiarizado con el enemigo es hora de que te pongas a trabajar.', 0), +(11919, 'esES', 'El destino de estos jóvenes dracos no debe ser una carga en tu conciencia, $r. Malygos es el único responsable de todo esto.$b$bEstoy trabajando sin descanso para revelar los secretos de esas runas. No acabaremos con más vidas de las que sean necesarias.', 0), +(11920, 'esES', '¿Cultores? ¿Bajo la cubierta? ¡Tendría que azotar a toda mi tripulación!$b$bEscucha... ¿por qué no hacemos que la almirante Cantlebree se ocupe de esta... situación?', 0), +(11927, 'esES', 'Gracias por venir, no sabía con quién más contactar.', 0), +(11928, 'esES', '¿Vienes a ayudarnos? ¡Entonces llegas justo a tiempo!', 0), +(11931, 'esES', 'Has hecho un buen trabajo, $r.$b$bEsperemos que esto nos dé una pista de qué podemos usar contra Malygos.', 0), +(11932, 'esES', 'Recuerdo a ese hombre del que hablas. Llevaba las marcas de Karkut.$b$bQue Karkut proteja a nuestros caídos.', 0), +(11936, 'esES', 'Me duele tener que ordenar que se destruyan estos huevos de dragón, sean enemigos o no.$b$bQue los fines de esta guerra justifiquen los medios...', 0), +(11938, 'esES', 'Eso nos dará algo de tiempo. Isidorus nos ha ayudado, pero de veras necesitaba ese rato a solas con el exánime.', 0), +(11940, 'esES', 'El destino de estos jóvenes dracos no debe ser una carga en tu conciencia, $r. Malygos es el único responsable de todo esto.$b$bEstoy trabajando sin descanso para revelar los secretos de esas runas.$b$bPuedes estar seguro de que no acabaremos con más vidas de las que sean necesarias.', 0), +(11941, 'esES', 'Has hecho bien en traerme esto, $N.$b$b$b$bSi de verdad deseas ayudarnos, sin importar el riesgo, tendré que revelarte su significado.', 0), +(11942, 'esES', 'Perfecto, $N. Un poquito más de información.', 0), +(11943, 'esES', '$b$bYa está.$b$bSiento una fuerte presencia en esta prisión. Espero que sea un aliado.', 0), +(11944, 'esES', 'Eso nos dará algo de tiempo, $N. Ojalá recibamos refuerzos de la Fortaleza Denuedo.', 0), +(11945, 'esES', 'Gracias, $N. Estos suministros alimentarán a nuestros primos e hijos. Incluso si Kashala cae, nuestras tribus podrán continuar con sus vidas.', 0), +(11946, 'esES', 'No podemos esperar a que recupere mi fuerza.$b$bDebo confiarte a ti nuestros preparativos...', 0), +(11949, 'esES', 'Gracias, $N. Me siento en deuda contigo. Te devolveré el favor si es que conseguimos salir de aquí con vida.', 0), +(11950, 'esES', 'Te envía Ataika, ¿verdad? No me vas a convencer.$b$bNo todo está perdido. Los espíritus aún nos acompañan.', 0), +(11951, 'esES', 'Gracias, $N.$b$bEstoy agotada por los efectos de mi confinamiento y estoy recuperando mi fuerza muy despacio.$b$bDebo manejar el poder de estos cristales con prudencia. Son producto de la confabulación malévola de Malygos. Con un poco de suerte, contribuirán a su perdición.', 0), +(11956, 'esES', 'Justo a tiempo, $N. Someter a un exánime no es tan fácil como parece.', 0), +(11957, 'esES', 'Ahora, sin Saragosa, el mundo es un lugar mejor, pero aún no hemos terminado el trabajo.$b$b¡Ha llegado la hora de ir a por Malygos!', 0), +(11961, 'esES', '¿Puedes sentir la presencia de Issliruk, $N? Él no quiere que sus hijos perezcan en manos de los caminantes de la niebla.', 0), +(11962, 'esES', '¿Mena de Lindeallá? No teníamos prevista ninguna entrega aún. ¿Va todo bien?', 0), +(11963, 'esES', '¿Hilda nos va a enviar armas? Qué buena noticia, $N. Estaba a punto de decir a los muchachos que empezaran a hacer las maletas.', 0), +(11965, 'esES', 'Gracias de nuevo por ayudarnos, $N. La gente de Lindeallá siempre te recordará.', 0), +(11967, 'esES', 'Me han llegado noticias del rescate de Keristrasza. Permite que te elogie.$b$bEstoy ansioso por volver a hablar con ella.', 0), +(11968, 'esES', 'Nos has hecho un gran favor, $r. Aún no hemos ganado la batalla, pero ahora mi gente tendrá una oportunidad.', 0), +(11969, 'esES', 'Le hemos asestado un golpe a Malygos, pero nos ha costado muy caro.', 0), +(11973, 'esES', 'Así que ya está...$b$bLos nuestros nunca deberían olvidar el sacrificio que Keristrasza ha hecho por la causa. Tampoco deberíamos olvidar tu colaboración, $N.$b$bQue este trágico acontecimiento sirva para darnos valor contra la amenaza que nos acecha.$b$bEn nombre del Vuelo Rojo, acepta este regalo en muestra de nuestra gratitud.', 0), +(12019, 'esES', 'Lo has hecho bien, $N. Esperaba dejar a mi hermana fuera de todo esto. Gracias a ti está sana y salva.$b$bHe cumplido con las obligaciones para con mi rey y mi ejército. Queda claro que ya no soy bienvenido entre mis compañeros. Tendré que seguir mi propio camino, batallando mis propias guerras y cumpliendo las órdenes que me dicte el corazón.$b$bQuizás nos volvamos a encontrar, $c. Hasta entonces, toma esto como muestra de mi gratitud.', 0), +(12035, 'esES', '¡Buen trabajo! Por fin me vuelvo a sentir útil... y eso ya es algo.', 0), +(12086, 'esES', '¿Thassarian? Sí, estuvo aquí... ¿qué ocurre? Ahora mismo tenemos problemas mucho más importantes, amigo.', 0), +(12088, 'esES', 'Leryssa... ¿me está buscando? Tienes que ayudarme, $N. Tenemos que terminar esto antes de que alguien la hiera.', 0), +(12117, 'esES', '¿Qué dices, $r? ¿Te envía Hotawa?$b$bBien, bien... hay mucho trabajo. ¡Toda ayuda es bien recibida!', 0), +(12141, 'esES', '¿Has venido en mi ayuda? Gracias, $N.', 0), +(12157, 'esES', 'Mientras cruzaba el puente hasta el Cementerio de Dragones ¡un pequeño grupo de Anub\'ar me tendió una emboscada! ¡Estaba rodeado! Esos bastardos sabían que llegaría. Apenas pude escapar con el pescuezo intacto. Esta lista que guardo debe llegar hasta la Fortaleza de Hibergarde, pero estoy demasiado herido como para hacer el viaje.', 0), +(12471, 'esES', 'Gracias, $N. Has demostrado magnífica voluntad hacia mi clan.', 0), +(12517, 'esES', 'Los naipes del tarot interesan mucho en la Feria de la Luna Negra, así que no dudes en avisarnos si logras reunir más. Nosotros también tenemos comerciantes expertos, así que permítenos ofrecerte algo a cambio de los naipes.', 0), +(12518, 'esES', 'Los naipes del tarot interesan mucho en la Feria de la Luna Negra, así que no dudes en avisarnos si logras reunir más. Nosotros también tenemos comerciantes expertos, así que permítenos ofrecerte algo a cambio de los naipes.', 0), +(12728, 'esES', 'Excelente, esto completa mi informe.$b$bTe aseguro que comentaré tu amabilidad al consejo, $N.', 0), +(12791, 'esES', 'Bienvenido a Dalaran.$b$bMe aseguraré de que el anillo sea devuelto.', 0), +(12798, 'esES', 'Los naipes del tarot interesan mucho en la Feria de la Luna Negra, así que no dudes en avisarnos si logras reunir más. Nosotros también tenemos comerciantes expertos, así que permítenos ofrecerte algo a cambio de los naipes.', 0), +(13002, 'esES', 'Son perfe\'htos colega. Te mo\'htrare el arte del tallado a la perfección colega.', 0), +(13004, 'esES', 'Gracias. Te enseáre el arte del tallado a la perfección y además te daré una gema que yo mismo he tallado.', 0), +(13088, 'esES', '¡Esto dará de comer a nuestros reclutas! Aquí tienes cómo hacerlo.', 0), +(13090, 'esES', 'Te muestro mi gratitud.', 0), +(13094, 'esES', '¡¿La has encontrado?! Sí, sí, aquí está todo.$b$bPor favor, acepta esto y mi gratitud. Y si no es demasiado pedir, me gustaría que Berinand jamás se enterase de esto.', 0), +(13095, 'esES', '¡¿La has encontrado?! Sí, sí, aquí está todo.$b$bPor favor, acepta esto y mi gratitud. Y si no es demasiado pedir, me gustaría que Berinand jamás se enterase de esto.', 0), +(13124, 'esES', 'Escucha atentamente, $r.$b$b¡Tu trabajo aquí acaba de comenzar!', 0), +(13128, 'esES', '$b$b$N, estas son grandes noticias.$b$bDesde que empezó este conflicto, nunca antes le habíamos dado un golpe de esta magnitud al Señor de la Magia.$b$bPor favor, amigo, acepta la gratitud de todos los vuelos.', 0), +(13265, 'esES', '¡Crea con esa tela que has encontrado algo que luzca maravilloso!', 0), +(13270, 'esES', 'Me gustan los negocios contigo.', 0), +(13311, 'esES', 'Los naipes del tarot interesan mucho en la Feria de la Luna Negra, así que no dudes en avisarnos si logras reunir más. Nosotros también tenemos comerciantes expertos, así que permítenos ofrecerte algo a cambio de los naipes.', 0), +(13412, 'esES', 'Es bastante presuntuoso por tu parte interferir en los asuntos personales de un dragón, ¿no crees $r?$b$bAparte de eso, estaría mal de mi parte no hacerle saber a mi hermano que estoy bien. Puedes decirle al entrometido de tu amigo que mantendré a mi hermano al tanto de mis acciones.', 0), +(13413, 'esES', 'Mi dragón me dice que con la práctica, podrías convertirte en un buen combatiente.$b$bMuy bien entonces. En interés de nuestra guerra contra Malygos, te permitiré practicar con mis mascotas en tu tiempo libre.$b$bPrepárate, $r, porque es un oponente feroz e implacable.', 0), +(13414, 'esES', 'He notado mejoras hoy, $c. A veces parecía que eras una con el draco.$b$bPractica con mis apreciadas mascotas cuando quieras.', 0), +-- BOREAN TUNDRA esMX missing reward_locale +(11559, 'esMX', '¿Son para mí? ¿Es esto algún tipo de truco, $r? ¿No?$B$B¡Entonces gracias! Vuelve cuando tengas más almejas y veremos si podemos negociar.', 0), +(11560, 'esMX', 'Ahora no importa lo que pase, los múrlocs Aleta Invernal tienen el futuro asegurado.$b$b¡Estás a punto de recibir elogios y recompensas por tu altruismo, $N!', 0), +(11561, 'esMX', 'Estoy satisfecho. Puedo oler la esencia cobriza de su sangre en tus manos.', 0), +(11562, 'esMX', 'Así que tú debes de ser el lacayo del llamado rey Mrgl-Mrgl. Supongo que ese elfo de la noche te ha enviado para apaciguarme.$b$bBien, tengo la tarea ideal para alguien tan fuerte como tú.', 0), +(11563, 'esMX', 'No ha estado mal. ¡Haremos un gran festín!$B$BAhora que el rey de las orcas ha muerto, los ataques de los cetáceos deberían disminuir mientras luchan entre ellos por conseguir el poder.', 0), +(11564, 'esMX', 'Pues sí, éstas servirán.$b$bDéjalas donde puedas. Puedes tomar unas sobras de mi estofado de anoche.', 0), +(11565, 'esMX', '$b$bBien hecho. Ahora volvamos al tema en cuestión. Hay algo de gran importancia que necesito que hagas.', 0), +(11566, 'esMX', 'Lamentable, pero necesario. Tomaré la garra, $N.$b$bGracias por toda tu ayuda. Con la derrota de Claximus, quizá podamos reunir a los múrlocs supervivientes y sellar esas cavernas.$b$bPor favor, amigo, acepta esto... es lo menos que puedo hacer por toda tu ayuda.', 0), +(11569, 'esMX', 'Rápido, ¡Dámela!', 0), +(11570, 'esMX', '¡Esa es una noticia maravillosa! ¿Y dices que Lurgglbr descubrió que las emanaciones de las cavernas son las que han causado esta locura?$b$bParece que la magia de Gelidar se está volviendo más fuerte. La guerra de El Nexo… la batalla entre el Vuelo Azul y el resto de dragones se está extendiendo.$b$bMuy pronto ¡Todos estaremos envueltos en ella!', 0), +(11571, 'esMX', 'Ahora podré utilizar la esencia de Escaldadora para enseñarte mis competencias en la lengua Aleta Invernal.', 0), +(11575, 'esMX', 'Puedes decirle a tu amiga que fue un placer rescatarla, pero también nuestro deber.$b$bMe temo que su conflicto es tan solo una de las múltiples piezas de un rompecabezas.$b$bDalaran está dándolo todo para resolver este misterio y, para ser sincero, necesitaríamos ayuda...', 0), +(11576, 'esMX', '¡Increíble!$b$bEsta alteración es la más grande que ha habido.$b$bPero me temo que lo peor está aún por llegar.', 0), +(11582, 'esMX', '¿Cómo era de grande?$b$b¡Eso es imposible! ¡He de informar a Dalaran de inmediato!', 0), +(11587, 'esMX', 'Lo has hecho bien, $N.$b$bEl Kirin Tor acepta de buena gana la ayuda que nos has proporcionado. Has de saber que tus servicios serán debidamente recompensados.$b$bPor favor, acepta esta humilde oferta como muestra del agradecimiento de Dalaran.', 0), +(11590, 'esMX', 'Excelente, $N.$b$bPrepararemos el interrogatorio enseguida.', 0), +(11599, 'esMX', 'El cadáver se ajusta a la descripción de William Allerton que te dio Leryssa. Lo raro es que no tiene marcas de zarpas ni mordiscos.', 0), +(11600, 'esMX', '¿Crees que la Plaga mató a William por casualidad? Esto huele a chamusquina.$b$bAlgo está ocurriendo. Tenemos que encontrar a Thassarian.', 0), +(11601, 'esMX', 'No te prometo que pueda ayudarte. Pero conozco a alguien que quizás sí pueda.', 0), +(11603, 'esMX', 'Mmmmm... ni muy amargo... ni muy seco, justo como en aquellos tiempos, con los chicos en el cuartel...', 0), +(11604, 'esMX', '¿Qué quiereees? Ya tengo bastantes problemas...', 0), +(11605, 'esMX', '$b$bMuy bien, $N. Con los nombres de los ancestros podremos continuar con las ceremonias que interrumpimos en el momento del ataque. Sin embargo, antes de que los espíritus de los ancestros sean guiados hasta sus estatuas, debemos calmar a los espíritus de los artesanos y chamanes asesinados. Si no, los espíritus de los ancestros no podrán oír jamás la llamada a la ceremonia.', 0), +(11607, 'esMX', 'Presiento que la agitación del mundo espiritual vuelve a la calma. Lo has hecho bien, $N. Los espíritus de los ancestros tienen suerte de contar con tu ayuda en este momento tan necesario.', 0), +(11609, 'esMX', '$b$bEsos bastarán, aunque están en un estado lamentable. Algunos de ellos han sobrevivido a siglos de utilización, y todo para ser maltratados y robados por unos salvajes.', 0), +(11610, 'esMX', 'Los ancestros han encontrado sus estatuas y todo gracias a ti, $N. Los artesanos de Kashala volverán a la cantera y velarán por que se conserve la tradición ancestral. En lo que a nosotros respecta, los ancestros te seguiremos con interés pues parece que tu camino acaba de comenzar.', 0), +(11612, 'esMX', 'Ahora que estos extraños magos saben que el pueblo de Kashala y sus aliados no se rendirán tan pronto, debemos continuar esforzándonos y derrotarlos por completo.$b$bMis hermanos en Kashala también están sufriendo un ataque y no podrán venir a ayudarnos, pero con tu ayuda, $N, podremos superar a esos saqueadores.', 0), +(11613, 'esMX', 'Has hecho un gran favor a mi pueblo, $N, aunque... debo pedirte algo más.', 0), +(11617, 'esMX', 'Los cazadores de magos descubrirán que saquear nuestra cantera y robar nuestros artefactos no será tan fácil como pensaban. Con tu ayuda, recuperaremos la cantera y pondremos las cosas en orden.', 0), +(11620, 'esMX', '¡Hsssssssssssss! ¿Has venido a burlarte de mí, $r?', 0), +(11623, 'esMX', 'El comisario y sus hombres se han debido de creer que esta cantera era un objetivo fácil para sus saqueos, pero tú les has demostrado lo contrario, $N. Estoy inmensamente agradecido por tu ayuda y tengo la certeza de que los ancestros seguirán velando por ti.', 0), +(11625, 'esMX', '¡¡Sssíiiiiiii!! ¡Mataremos a la bestia de los Kvaldir! ¡Les enseñaré a esos brutos a no meterse con una sacerdotisa de tal escala jamás!', 0), +(11626, 'esMX', 'Los espíritus de mi pueblo pueden descansar en paz. Me has ayudado a honrar a mi padre... quizás un día llegue a ser tan fuerte como tú.', 0), +(11645, 'esMX', '¡Oh, $N, eres el mejor!$b$bAquí tienes tus monedas, tal y como te prometí.', 0), +(11646, 'esMX', 'Donathan ha sido sabio al enviarte, $c.$b$bResulta que necesito a alguien que no pertenezca al Kirin Tor.', 0), +(11648, 'esMX', '¡Excelente! Era vital que consiguiéramos esa información.$b$bBien hecho, amigo.', 0), +(11650, 'esMX', 'Vale, ¡así está bien! Ahora todo lo que tenemos que hacer es juntar todo esto.$b$bSí, claro, como si fueras a ayudarme...$b$bEspérate... ¡Solo necesito un segundo ahora que ya tengo todas mis herramientas!', 0), +(11653, 'esMX', '¡¿Cómo que no ha funcionado?!$b$bPero... pero...$b$b$b$bVale, esto tiene una solución. Ya soy grandecita. ¡Es hora de poner en marcha la imaginación!', 0), +(11658, 'esMX', 'Bien, ¡aunque estas prendas echan un tufo que p\'a qué!$b$bA mí nunca me conquistarías con esos harapos. Pero tendremos que rebuscar y encontrar algo que te quede, eeh... bien.', 0), +(11663, 'esMX', 'Perdóname, $N. Sé que es una tarea desagradable.$b$bSi no estuviéramos tan desesperados, nunca te hubiera pedido que nos ayudaras de este modo.$b$bBueno... ¿qué has descubierto?', 0), +(11670, 'esMX', '¡Vaaaya, vaaaaya! ¡Lo conseguiste!$b$bMuy bien, ahora esos molestos magnatauros y sus perritos falderos snóbolds deberían concentrar su atención en la Horda.$b$b¿Cómo podría corresponderte, $N?', 0), +(11671, 'esMX', '¿Rota?$b$bDéjame ver...', 0), +(11672, 'esMX', 'Estábamos esperando tu llegada, $n. Bienvenido a Rasganorte.', 0), +(11673, 'esMX', '¿Eh? ¿Qué?$b$b¿Chalati qué?$b$bNo tengo ni idea de qué estás hablando, pero te creeré. Si le rescataste del foso de Magmoth entonces supongo que te mereces una recompensa.$b$bDéjame ver qué tengo por aquí...', 0), +(11679, 'esMX', 'Esos juegos frívolos a los que jugáis no tienen ninguna trascendencia...$b$bTú y tus aliados de Dalaran os entretenéis con minucias mientras el futuro de este mundo se hace trizas.$b$bSin embargo, esto podría proporcionar a mis dracos el entretenimiento que necesitan...$b$bEnséñame esa llave.', 0), +(11680, 'esMX', '¡Esta es, la llave es nuestra!', 0), +(11681, 'esMX', 'Tus heroicos esfuerzos no serán olvidados, $c.$b$bPor favor, acepta mi más sincera gratitud.', 0), +(11682, 'esMX', 'Así que volvemos a hablar, $r.$b$bCuando hayas oído mis palabras desearás no haberlo hecho.', 0), +(11692, 'esMX', '¿Qué necesitas, $c?', 0), +(11693, 'esMX', 'Buen trabajo, pero yo que tú me daría una ducha.$b$bAhora, encarguémonos del problema de verdad.', 0), +(11694, 'esMX', 'Sabía que eras capaz. Ahora hay algo más de lo que necesito que te encargues.', 0), +(11697, 'esMX', '¡Hola! ¿Quién eres?$b$b¿Te envía Bixie? ¡Genial, sácame de aquí!', 0), +(11698, 'esMX', 'Gracias, $N.$b$bEl Rey Exánime y su Plaga dan mucho miedo, ¡pero no podemos detenernos hasta que todos yazcan en tumbas nuevas!', 0), +(11699, 'esMX', '¡Fabuloso! Ahora una pequeña modificación por aquí y un toquecito por allí...', 0), +(11700, 'esMX', '¿Mañosa tiene una gemela malvada?$b$bBueno, si ella dice que está bien y si es capaz de volver pronto a la pista de aterrizaje, entonces me vale.', 0), +(11701, 'esMX', 'Menuda historia, $N. Con todos los problemas que hay ahí fuera, es un milagro que la pista de aterrizaje siga en pie.$b$bPero, gracias a ti, tenemos un enemigo menos por el que preocuparnos.$b$bTenía guardadas unas cosas un tanto especiales para una ocasión como esta. ¿Por qué no escoges una?', 0), +(11704, 'esMX', '¡Al fin, ayuda! Y por tu aspecto, Alianza.$b$bEso es bueno... tu gente tiene mucha habilidad en el arte del combate. Vamos a necesitar mucho de eso.', 0), +(11707, 'esMX', 'Veo que Saltanubes por fin se ha decidido a enviar ayuda. Aunque debo añadir que no se ha dado demasiada prisa.$b$b¡Bienvenido, hermano! Tu ayuda nos será muy útil.', 0), +(11708, 'esMX', '¿El viejo te ha enviado, eh? ¿Te ha contado todo lo que está pasando?$b$bBien... ¡Manos a la obra!', 0), +(11710, 'esMX', '¡Espléndido, $c! Parece que estas piezas están en perfectas condiciones.$b$bSi pudiera encontrar la manera de arreglar este maldito chisme...', 0), +(11712, 'esMX', 'Lo has conseguido... ¡Ha funcionado!$b$bNo me lo puedo creer, has podido salvar a muchos. ¡Tenemos suerte de contar contigo!', 0), +(11713, 'esMX', '$b$b¡Genial! Esta es toda la información que necesitamos para comenzar la operación.', 0), +(11715, 'esMX', '$b$bDestilar esto manualmente va a ser complicado, pero tendré que encargarme de ello pronto. Mientras tanto, necesitaremos más material para terminar la máquina.', 0), +(11718, 'esMX', '$b$b¿Esos animales no intentan estar limpios? Algunos son realmente asquerosos. Bueno, supongo que más vale que me ponga a limpiarlos, que a nadie por aquí le sobra el tiempo.', 0), +(11723, 'esMX', '$b$b¡Palanqueta estará encantado de oír la noticia! Y, quién sabe, ¡quizás hasta hagamos una máquina con tu imagen!', 0), +(11725, 'esMX', 'Gracias a Dios. Fue horrible.$b$bHubo un resplandor en el suelo, y después lo único que sé es que ¡el escuadrón estaba cayendo en picado! Estoy bastante herido, así que aún no he podido peinar el terreno en busca de más supervivientes, pero algo me dice que no debe de haber muchos.$b$b$b$b¿Me ayudarás a completar mi misión?', 0), +(11726, 'esMX', '$b$bAhora que tenemos lo que necesitamos, lo combinaré con mis raciones de emergencia para crear una carnada para los lobos.', 0), +(11727, 'esMX', '¡Por las barbas de Magni! ¡Parece que llega la artillería pesada!', 0), +(11728, 'esMX', '$b$b¡Puaj! Bueno, hemos acatado la sección 8.2, párrafo B del protocolo de emergencia y hemos recuperado el film. Pero el protocolo no dice nada de que tenga que limpiarlo.', 0), +(11729, 'esMX', 'Mi destornillador... ¡Has encontrado mi destornillador! Me he estado preguntando dónde lo perdí.$b$bMmm, ¿dices que lo encontraste dentro de uno de sus robots? Eso me da una idea...', 0), +(11730, 'esMX', '¡Yujuuu! ¡Y además has traído el destornillador intacto!$b$bAl reprogramar a esos robots vamos a ganar mucha ventaja en la lucha contra el maestro de palancas Mecazod. Creo que te has ganado una cosita.', 0), +(11733, 'esMX', 'Te doy la bienvenida a Gelidar, $c.$b$bBajo el Escudo de Tránsito vivimos escondidos, tan solo a un tiro de piedra de El Nexo, fortaleza del gran Aspecto Malygos y su Vuelo Azul.$b$bPonte cómodo.', 0), +(11788, 'esMX', 'Vaya, ¡has sobrevivido!$b$bSupongo que lo único que queda es encargarse del maestro de palancas Mecazod.', 0), +(11789, 'esMX', 'Gracias, $N. La recuperación de este hombre será lenta, pero no lo perderemos.$b$b¿Qué dices? ¿Qué encontraste cultores dentro de El Rompetormentas? Más vale que avises a alguien... Y que traigas pruebas.', 0), +(11790, 'esMX', '¿Cultores? ¿Bajo la cubierta? ¡Tendría que azotar a toda mi tripulación!$b$bEscucha... ¿por qué no hacemos que la almirante Cantlebree se ocupe de esta... situación?', 0), +(11791, 'esMX', 'Gracias por preocuparte, $N. Nos enteramos de la situación hace poco.$b$bEl consejero Talbot me asegura que este fue un incidente aislado y no una razón de preocupación militar.$b$bNuestras autoridades civiles se encargarán de que todo aquel que esté involucrado sea perseguido.', 0), +(11792, 'esMX', 'Sé discreto, $N. No podemos examinar estas pruebas delante de todas esas miradas entrometidas.', 0), +(11793, 'esMX', 'Habla rápido, $c. ¿Qué sabes sobre el culto?', 0), +(11794, 'esMX', 'Bien hecho, $N. Sin embargo, no puedo dejar de tener la sensación de que esta no es la última vez que veremos a esos cultores muertos.$b$bLa oscuridad tiene su manera de ocultar incluso lo más evidente.', 0), +(11795, 'esMX', 'Una vez más, gracias, $N. Con tu ayuda, puede que sea capaz de completar esta misión tan desastrosa, y volver con Palanqueta para redactar mi informe y honrar a los muertos como es debido.', 0), +(11796, 'esMX', 'Te lo agradezco de nuevo, $N. Sin tu ayuda no habría podido recuperar nada útil de este desastre.', 0), +(11797, 'esMX', 'Bien hecho, $N. Enséñales cómo se hace. ¡El mejor reptador es un reptador muerto!', 0), +(11798, 'esMX', '$b$bYa ha terminado... ¡Nos has salvado! Si no lo hubieras detenido aquí, entonces, ¿quién sabe hasta dónde se habría extendido su locura?$b$bCon las amenazas de los Dragones Azules y la Guerra de El Nexo, por no hablar del Rey Exánime, ¡Lo último que necesitamos es una creación loca de los Titanes suelta!$b$b¡Gracias $N!', 0), +(11864, 'esMX', 'El demonio tiene muchos nombres y cada nombre ha tenido un significado especial en algún momento. Aunque los detalles fueran a veces insignificantes, el resultado final siempre era el mismo: la muerte.$b$bPero es ahora, casi cincuenta años después de que todo comenzara, cuando los detalles encontrarán al diablo y lo llevarán a su perdición.$b$bEsta vez, lo tenemos... Nesingwary no tendrá escapatoria.$b$bRasganorte será el campo de batalla para nuestra guerra. ¡El cazador será cazado!', 0), +(11865, 'esMX', 'Haces bien el trabajo de la Madre Tierra, $N, pero no cantes victoria aún. Hemos descubierto el escondrijo del líder de los tramperos.', 0), +(11866, 'esMX', 'Voy a ponérmelas alrededor del cuello. ¡Que oigan nuestro mensaje y que estas orejas sean las portadoras de nuestra verdad!', 0), +(11867, 'esMX', 'Voy a ponérmelas alrededor del cuello. ¡Que oigan nuestro mensaje y que estas orejas sean las portadoras de nuestra verdad!', 0), +(11868, 'esMX', 'Quizás su muerte sirva de ejemplo a otros que se atrevan a matar animales por diversión y dinero.', 0), +(11869, 'esMX', '¡Ahora veamos cómo se les hincha la vena cuando vean lo que les ocurrió a sus compañeros!', 0), +(11870, 'esMX', '¿Cenius te envía? ¡Pues no llegas muy pronto que digamos!', 0), +(11871, 'esMX', 'Buen trabajo, $N. ¡Ahora atacaremos al líder pirata!', 0), +(11872, 'esMX', 'Un trabajo excelente, $N. ¡Nos acercamos a Nesingwary!', 0), +(11873, 'esMX', '$b$bDebería haber ido con ellos. Podríamos haber completado la misión sin perder a ninguno de los pilotos.$b$bPero Barrena tiene razón, tenemos que darte las gracias por todo lo que has conseguido salvar. Tu trabajo podría marcar una gran diferencia en la lucha contra los nerubianos.', 0), +(11876, 'esMX', '$b$bNunca han tenido una oportunidad. Ahora huérfanos y solos, seguramente mueran.', 0), +(11878, 'esMX', '$b$bTu nombre ha viajado con el viento susurrante, $N. Has realizado un acto grandioso para mi estirpe. Por esto te consideraremos como nuestro aliado. No obstante, nuestro tormento no terminará sin derramamiento de sangre y violencia.$b$bLa paz de los mamuts llegará con la muerte de Kaw...', 0), +(11879, 'esMX', '$b$b¿Esto es lo que creo que es?$b$b$b$b¡Estupendo! ¡Excelente! ¡Otro lacayo de Nesingwary que se ha llevado un merecido castigo!', 0), +(11884, 'esMX', 'Al menos por ahora los rinocerontes conocerán la paz. Gracias, $N.', 0), +(11889, 'esMX', 'Los derrotaremos si vienen por tierra y los derrotaremos si vienen por aire. Si esos no-muertos desgraciados vienen por mar entonces les daremos la paliza de sus vidas.', 0), +(11892, 'esMX', 'Por desgracia, Nesingwary ya no está. Quizás nunca estuvo aquí para empezar a...$b$b$b$bEse demonio es resbaladizo, pero sus días están contados. Lo encontraremos, y cuando lo hagamos...', 0), +(11897, 'esMX', 'Has hecho un trabajo excelente, $N. Sin ti, la Fortaleza Denuedo no podría haber resistido contra los atacantes. Gracias a tu ayuda viviremos para luchar un día más.', 0), +(11900, 'esMX', 'Esto es aún peor de lo que pensaba.$b$bMalygos está canalizando demasiado poder a este lugar. Si no lo detenemos, ¡Azeroth será el próximo Terrallende!$b$bLa buena noticia es que creo haber encontrado una solución temporal...', 0), +(11901, 'esMX', 'A medida que te acercas al grano, tu estómago empieza a revolverse. El olor es casi insoportable.', 0), +(11902, 'esMX', 'Esos pobres chicos... ¡no tuvieron ninguna oportunidad!$b$bEsto parece un trabajo organizado desde dentro. Probablemente un infiltrado del Culto de los Malditos. ¡Malditos sean esos locos!', 0), +(11903, 'esMX', 'Te has comunicado con la Plaga en el único idioma que entienden: violencia y muerte. ¡Por desgracia continúan viniendo!', 0), +(11904, 'esMX', 'Te doy las gracias, $N. Esta mena será de vital importancia para la Alianza en los tiempos venideros. Quiero pensar que hoy hemos hecho algo importante.', 0), +(11905, 'esMX', 'Un trabajo excelente, $N. Los temblores ya han empezado a calmarse.$b$bCon un poco de suerte, nos habrás conseguido el tiempo suficiente para frustrar los planes de Malygos.', 0), +(11908, 'esMX', '¡Excelente! La información que necesito debería estar aquí.', 0), +(11910, 'esMX', 'Sí, sí... estas servirán.$b$bGracias, $r.', 0), +(11911, 'esMX', '¡Fascinante!$b$bY también son agresivos, por lo que dices. Eso me indica que hay algún tipo de organización detrás de toda esta manipulación. No puede ser algo natural...$b$bPor favor, $N, acepta esto como muestra de nuestra gratitud por todo lo que has hecho. Todo Dalaran sabrá que nos has ayudado.', 0), +(11912, 'esMX', 'Bueno, no es mucho, pero nos podrá mantener con vida un día más.$b$bCreo que esto será una compensación justa por tu ayuda.', 0), +(11913, 'esMX', 'Gracias, $N. No podría haber soportado ver a los supervivientes del ataque de Lindeallá tropezar con grano apestado.', 0), +(11914, 'esMX', 'La ayuda que has prestado a Dalaran no pasará desapercibida, $r.$b$bEspero que esto sea bastante.', 0), +(11918, 'esMX', 'Bien, $c, ahora que te has familiarizado con el enemigo es hora de que te pongas a trabajar.', 0), +(11919, 'esMX', 'El destino de estos jóvenes dracos no debe ser una carga en tu conciencia, $r. Malygos es el único responsable de todo esto.$b$bEstoy trabajando sin descanso para revelar los secretos de esas runas. No acabaremos con más vidas de las que sean necesarias.', 0), +(11920, 'esMX', '¿Cultores? ¿Bajo la cubierta? ¡Tendría que azotar a toda mi tripulación!$b$bEscucha... ¿por qué no hacemos que la almirante Cantlebree se ocupe de esta... situación?', 0), +(11927, 'esMX', 'Gracias por venir, no sabía con quién más contactar.', 0), +(11928, 'esMX', '¿Vienes a ayudarnos? ¡Entonces llegas justo a tiempo!', 0), +(11931, 'esMX', 'Has hecho un buen trabajo, $r.$b$bEsperemos que esto nos dé una pista de qué podemos usar contra Malygos.', 0), +(11932, 'esMX', 'Recuerdo a ese hombre del que hablas. Llevaba las marcas de Karkut.$b$bQue Karkut proteja a nuestros caídos.', 0), +(11936, 'esMX', 'Me duele tener que ordenar que se destruyan estos huevos de dragón, sean enemigos o no.$b$bQue los fines de esta guerra justifiquen los medios...', 0), +(11938, 'esMX', 'Eso nos dará algo de tiempo. Isidorus nos ha ayudado, pero de veras necesitaba ese rato a solas con el exánime.', 0), +(11940, 'esMX', 'El destino de estos jóvenes dracos no debe ser una carga en tu conciencia, $r. Malygos es el único responsable de todo esto.$b$bEstoy trabajando sin descanso para revelar los secretos de esas runas.$b$bPuedes estar seguro de que no acabaremos con más vidas de las que sean necesarias.', 0), +(11941, 'esMX', 'Has hecho bien en traerme esto, $N.$b$b$b$bSi de verdad deseas ayudarnos, sin importar el riesgo, tendré que revelarte su significado.', 0), +(11942, 'esMX', 'Perfecto, $N. Un poquito más de información.', 0), +(11943, 'esMX', '$b$bYa está.$b$bSiento una fuerte presencia en esta prisión. Espero que sea un aliado.', 0), +(11944, 'esMX', 'Eso nos dará algo de tiempo, $N. Ojalá recibamos refuerzos de la Fortaleza Denuedo.', 0), +(11945, 'esMX', 'Gracias, $N. Estos suministros alimentarán a nuestros primos e hijos. Incluso si Kashala cae, nuestras tribus podrán continuar con sus vidas.', 0), +(11946, 'esMX', 'No podemos esperar a que recupere mi fuerza.$b$bDebo confiarte a ti nuestros preparativos...', 0), +(11949, 'esMX', 'Gracias, $N. Me siento en deuda contigo. Te devolveré el favor si es que conseguimos salir de aquí con vida.', 0), +(11950, 'esMX', 'Te envía Ataika, ¿verdad? No me vas a convencer.$b$bNo todo está perdido. Los espíritus aún nos acompañan.', 0), +(11951, 'esMX', 'Gracias, $N.$b$bEstoy agotada por los efectos de mi confinamiento y estoy recuperando mi fuerza muy despacio.$b$bDebo manejar el poder de estos cristales con prudencia. Son producto de la confabulación malévola de Malygos. Con un poco de suerte, contribuirán a su perdición.', 0), +(11956, 'esMX', 'Justo a tiempo, $N. Someter a un exánime no es tan fácil como parece.', 0), +(11957, 'esMX', 'Ahora, sin Saragosa, el mundo es un lugar mejor, pero aún no hemos terminado el trabajo.$b$b¡Ha llegado la hora de ir a por Malygos!', 0), +(11961, 'esMX', '¿Puedes sentir la presencia de Issliruk, $N? Él no quiere que sus hijos perezcan en manos de los caminantes de la niebla.', 0), +(11962, 'esMX', '¿Mena de Lindeallá? No teníamos prevista ninguna entrega aún. ¿Va todo bien?', 0), +(11963, 'esMX', '¿Hilda nos va a enviar armas? Qué buena noticia, $N. Estaba a punto de decir a los muchachos que empezaran a hacer las maletas.', 0), +(11965, 'esMX', 'Gracias de nuevo por ayudarnos, $N. La gente de Lindeallá siempre te recordará.', 0), +(11967, 'esMX', 'Me han llegado noticias del rescate de Keristrasza. Permite que te elogie.$b$bEstoy ansioso por volver a hablar con ella.', 0), +(11968, 'esMX', 'Nos has hecho un gran favor, $r. Aún no hemos ganado la batalla, pero ahora mi gente tendrá una oportunidad.', 0), +(11969, 'esMX', 'Le hemos asestado un golpe a Malygos, pero nos ha costado muy caro.', 0), +(11973, 'esMX', 'Así que ya está...$b$bLos nuestros nunca deberían olvidar el sacrificio que Keristrasza ha hecho por la causa. Tampoco deberíamos olvidar tu colaboración, $N.$b$bQue este trágico acontecimiento sirva para darnos valor contra la amenaza que nos acecha.$b$bEn nombre del Vuelo Rojo, acepta este regalo en muestra de nuestra gratitud.', 0), +(12019, 'esMX', 'Lo has hecho bien, $N. Esperaba dejar a mi hermana fuera de todo esto. Gracias a ti está sana y salva.$b$bHe cumplido con las obligaciones para con mi rey y mi ejército. Queda claro que ya no soy bienvenido entre mis compañeros. Tendré que seguir mi propio camino, batallando mis propias guerras y cumpliendo las órdenes que me dicte el corazón.$b$bQuizás nos volvamos a encontrar, $c. Hasta entonces, toma esto como muestra de mi gratitud.', 0), +(12035, 'esMX', '¡Buen trabajo! Por fin me vuelvo a sentir útil... y eso ya es algo.', 0), +(12086, 'esMX', '¿Thassarian? Sí, estuvo aquí... ¿qué ocurre? Ahora mismo tenemos problemas mucho más importantes, amigo.', 0), +(12088, 'esMX', 'Leryssa... ¿me está buscando? Tienes que ayudarme, $N. Tenemos que terminar esto antes de que alguien la hiera.', 0), +(12117, 'esMX', '¿Qué dices, $r? ¿Te envía Hotawa?$b$bBien, bien... hay mucho trabajo. ¡Toda ayuda es bien recibida!', 0), +(12141, 'esMX', '¿Has venido en mi ayuda? Gracias, $N.', 0), +(12157, 'esMX', 'Mientras cruzaba el puente hasta el Cementerio de Dragones ¡un pequeño grupo de Anub\'ar me tendió una emboscada! ¡Estaba rodeado! Esos bastardos sabían que llegaría. Apenas pude escapar con el pescuezo intacto. Esta lista que guardo debe llegar hasta la Fortaleza de Hibergarde, pero estoy demasiado herido como para hacer el viaje.', 0), +(12471, 'esMX', 'Gracias, $N. Has demostrado magnífica voluntad hacia mi clan.', 0), +(12517, 'esMX', 'Los naipes del tarot interesan mucho en la Feria de la Luna Negra, así que no dudes en avisarnos si logras reunir más. Nosotros también tenemos comerciantes expertos, así que permítenos ofrecerte algo a cambio de los naipes.', 0), +(12518, 'esMX', 'Los naipes del tarot interesan mucho en la Feria de la Luna Negra, así que no dudes en avisarnos si logras reunir más. Nosotros también tenemos comerciantes expertos, así que permítenos ofrecerte algo a cambio de los naipes.', 0), +(12728, 'esMX', 'Excelente, esto completa mi informe.$b$bTe aseguro que comentaré tu amabilidad al consejo, $N.', 0), +(12791, 'esMX', 'Bienvenido a Dalaran.$b$bMe aseguraré de que el anillo sea devuelto.', 0), +(12798, 'esMX', 'Los naipes del tarot interesan mucho en la Feria de la Luna Negra, así que no dudes en avisarnos si logras reunir más. Nosotros también tenemos comerciantes expertos, así que permítenos ofrecerte algo a cambio de los naipes.', 0), +(13002, 'esMX', 'Son perfe\'htos colega. Te mo\'htrare el arte del tallado a la perfección colega.', 0), +(13004, 'esMX', 'Gracias. Te enseáre el arte del tallado a la perfección y además te daré una gema que yo mismo he tallado.', 0), +(13088, 'esMX', '¡Esto dará de comer a nuestros reclutas! Aquí tienes cómo hacerlo.', 0), +(13090, 'esMX', 'Te muestro mi gratitud.', 0), +(13094, 'esMX', '¡¿La has encontrado?! Sí, sí, aquí está todo.$b$bPor favor, acepta esto y mi gratitud. Y si no es demasiado pedir, me gustaría que Berinand jamás se enterase de esto.', 0), +(13095, 'esMX', '¡¿La has encontrado?! Sí, sí, aquí está todo.$b$bPor favor, acepta esto y mi gratitud. Y si no es demasiado pedir, me gustaría que Berinand jamás se enterase de esto.', 0), +(13124, 'esMX', 'Escucha atentamente, $r.$b$b¡Tu trabajo aquí acaba de comenzar!', 0), +(13128, 'esMX', '$b$b$N, estas son grandes noticias.$b$bDesde que empezó este conflicto, nunca antes le habíamos dado un golpe de esta magnitud al Señor de la Magia.$b$bPor favor, amigo, acepta la gratitud de todos los vuelos.', 0), +(13265, 'esMX', '¡Crea con esa tela que has encontrado algo que luzca maravilloso!', 0), +(13270, 'esMX', 'Me gustan los negocios contigo.', 0), +(13311, 'esMX', 'Los naipes del tarot interesan mucho en la Feria de la Luna Negra, así que no dudes en avisarnos si logras reunir más. Nosotros también tenemos comerciantes expertos, así que permítenos ofrecerte algo a cambio de los naipes.', 0), +(13412, 'esMX', 'Es bastante presuntuoso por tu parte interferir en los asuntos personales de un dragón, ¿no crees $r?$b$bAparte de eso, estaría mal de mi parte no hacerle saber a mi hermano que estoy bien. Puedes decirle al entrometido de tu amigo que mantendré a mi hermano al tanto de mis acciones.', 0), +(13413, 'esMX', 'Mi dragón me dice que con la práctica, podrías convertirte en un buen combatiente.$b$bMuy bien entonces. En interés de nuestra guerra contra Malygos, te permitiré practicar con mis mascotas en tu tiempo libre.$b$bPrepárate, $r, porque es un oponente feroz e implacable.', 0), +(13414, 'esMX', 'He notado mejoras hoy, $c. A veces parecía que eras una con el draco.$b$bPractica con mis apreciadas mascotas cuando quieras.', 0); +-- 2 SECTION +-- BOREAN TUNDRA esES missing quest_request_items_locale +DELETE FROM `quest_request_items_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (11559, 11560, 11561, 11563, 11564, 11565, 11566, 11569, 11570, 11571, 11576, 11582, 11587, 11590, 11600, 11603, 11605, 11607, 11608, 11609, 11610, 11611, 11612, 11613, 11617, 11623, 11625, 11645, 11648, 11650, 11652, 11653, 11658, 11670, 11671, 11679, 11699, 11705, 11708, 11710, 11712, 11713, 11715, 11718, 11723, 11726, 11728, 11729, 11730, 11788, 11789, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11865, 11866, 11867, 11868, 11869, 11871, 11872, 11876, 11879, 11884, 11889, 11892, 11897, 11900, 11903, 11904, 11905, 11908, 11910, 11911, 11912, 11913, 11914, 11918, 11919, 11931, 11936, 11938, 11940, 11941, 11942, 11943, 11944, 11945, 11949, 11951, 11956, 11957, 11961, 11962, 11965, 11967, 11968, 11969, 11973, 12019, 12035, 12517, 12518, 12728, 12791, 12798, 13002, 13004, 13088, 13090, 13094, 13095, 13128, 13265, 13270, 13311, 13413, 13414); +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(11559, 'esES', '¿Qué es esto? ¿Quién eres tú?$b$bEres una cosa de esas... ¡Un $r! ¿Por qué puedes hablar nuestra lengua?', 0), +(11560, 'esES', 'Si no se rescatan mas renacuajos, no importará lo que hagamos: ¡los murclos de Aleta Invernal dejarán de tener cualquier posibilidad de futuro!', 0), +(11561, 'esES', 'Si has matado a tantos traidores de Aleta Invernal, ¿por qué cuando miro al otro lado del agua sigo viendo a demasiados?', 0), +(11563, 'esES', '¡No me hagas perder el tiempo si no tienes la cabeza de Glrggl!', 0), +(11564, 'esES', '¿Tienes toda la grasa de orca que necesito?', 0), +(11565, 'esES', '¿Tienes mi traje de muda, $N?', 0), +(11566, 'esES', '¿Lo has hecho, $r? ¿Está muerto Claximus?', 0), +(11569, 'esES', '¿Tienes la llave?$b$bNo, los otros me dan igual. ¡Solo quiero salir de aquí!', 0), +(11570, 'esES', 'Dime, $N, ¿Qué puedo hacer por ti?', 0), +(11571, 'esES', '¿Has conseguido llenar la caracola con el vapor de Escaldadora?', 0), +(11576, 'esES', '¿Has recogido las lecturas que te he pedido, $c?', 0), +(11582, 'esES', 'Bueno, $c?$b$b¿Has sido capaz de encontrar la anomalía?', 0), +(11587, 'esES', 'Confío en que estás trabajando diligentemente para rescatar a un prisionero $r....', 0), +(11590, 'esES', '¿Ya has capturado un Hechizero de Berilio, $N?', 0), +(11600, 'esES', '¿Has hablado con William, $N?', 0), +(11603, 'esES', '', 0), +(11605, 'esES', '$b$b¿Has recuperado los nombres de los ancestros errantes?', 0), +(11607, 'esES', '¿Cómo les va a los espíritus de los inocentes?', 0), +(11608, 'esES', '¿Y Bien?', 0), +(11609, 'esES', '¿Has recuperado un conjunto completo de objetos rituales?', 0), +(11610, 'esES', '¿Has completado las ceremonias de los ancestros?', 0), +(11611, 'esES', 'No hay peones, no hay construcciones. Y no, no vamos a reemplazarlos por goblins. Son extremadamente caros...', 0), +(11612, 'esES', '¿Has liberado la Cantera Fríoescollo de nuestros enemigos?', 0), +(11613, 'esES', '¿Lo conseguiste, $r? Los Kvaldir son guerreros muy crueles. No esperes ninguna tregua de ellos.', 0), +(11617, 'esES', '¿Has tenido exito destruyendo las plataformas voladores de los cazadores de magos?', 0), +(11623, 'esES', '¿Has acabado con el comisario?', 0), +(11625, 'esES', '¿Tienes el tridente?', 0), +(11645, 'esES', '¿Has conseguido todos mis suministros, $r? ¡No puedo hacer NADA sin mis cosas!', 0), +(11648, 'esES', '¿Y bien? ¿Sabes dónde está retenida Lady Evanor?', 0), +(11650, 'esES', '¿Por qué será que no me creo que hayas conseguido todas las cosas de mi lista?', 0), +(11652, 'esES', '¿Bien? ¿Qué ha pasado?', 0), +(11653, 'esES', '¿Estás seguro de que has probado el Rayo reductor lo suficiente en esas bestias monstruosas?', 0), +(11658, 'esES', 'Si queremos que todo salga bien, necesitaremos muchas de sus prendas. Pero yo no soy costurera... ¡tendremos que encontrar algo de tu talla!$b$bY luego, tan solo tendré que añadir un toque de mi talento de ingeniera, y ¡listo! Interpretarás tu papel perfectamente.', 0), +(11670, 'esES', '¿Entonces ya está? ¿Has realizado la sucia hazaña y tendido la trampa a los orcos de la Avanzada Bor\'gorok?', 0), +(11671, 'esES', '¿Has conseguido la llave de Salrand?', 0), +(11679, 'esES', '¿Te atreves a acercarte a mí, mortal?$b$bPor el bien de tus descendientes, espero que tu causa sea digna.', 0), +(11699, 'esES', '¿Tienes todas esas cosas?', 0), +(11705, 'esES', '$B$B¿Qué es eso que oigo sobre un necroseñor de la Plaga?', 0), +(11708, 'esES', 'Hola, ¿qué tal?', 0), +(11710, 'esES', 'Vamos a necesitar muchas piezas de repuesto para mantener esta cosa en funcionamiento.$b$bPor favor, dime que has traído todo lo que necesitamos.', 0), +(11712, 'esES', '¿A cuántos mecagnomos lograste devolverles de su maldición, $c? ', 0), +(11713, 'esES', '¿Has señalado la ubicación de los sumideros?', 0), +(11715, 'esES', '¿Tienes ese combustible?', 0), +(11718, 'esES', '¡Trae esos pellejos lo antes posible! ¡No podré acabar la máquina sin ellos!', 0), +(11723, 'esES', 'Bueno, ¿ya has desplegado el Vibro-Motor 5000?', 0), +(11726, 'esES', '¿Tienes esas bolsas de especias?', 0), +(11728, 'esES', '¿Has recuperado el microfilm?', 0), +(11729, 'esES', '¡Hey!', 0), +(11730, 'esES', 'A cuántos mecagnomos lograste reprogramar?', 0), +(11788, 'esES', '¿Te has encargado de los tenientes del maestro de palancas Mechazod?', 0), +(11789, 'esES', 'El contraveneno… ¿lo tienes?', 0), +(11792, 'esES', 'Has vuelto, $N.', 0), +(11793, 'esES', '¿Te envía el presagista Vurenn?', 0), +(11794, 'esES', '¿Ya has completado la tarea que te encomendé, $N?', 0), +(11795, 'esES', '¿Has conseguido esas insignias?', 0), +(11796, 'esES', '¿Ya has hundido los restos?', 0), +(11797, 'esES', 'Has vuelto. Espero que hayas hecho mella en el número de enemigos.', 0), +(11798, 'esES', 'Jinky me dijo que esperara noticias de ti. ¿Ha terminado?', 0), +(11865, 'esES', 'No sientas lástima por ellos, $r.', 0), +(11866, 'esES', 'Las orejas servirán...', 0), +(11867, 'esES', 'Ya sean buscadores de tesoros o cazadores sedientos de sangre de los páramos, cualquier ser que apoye a Nesingwary y se atreva a atacar a nuestra amada vida salvaje será considerado un enemigo de D.E.H.T.A.$b$bSi matas a estos sucios simpatizantes de Nesingwary, tráeme pruebas de su desaparición y serás recompensado con una bendición de los druidas de D.E.H.T.A.', 0), +(11868, 'esES', '¡La naturaleza demanda justicia!', 0), +(11869, 'esES', 'El trabajo que hacemos es espantoso, $n.', 0), +(11871, 'esES', 'Esos pobres animales serán enterrados dignamente.', 0), +(11872, 'esES', '¿Vienes a darme buenas noticias?', 0), +(11876, 'esES', '¡Deben ser liberadas!', 0), +(11879, 'esES', '¿Qué ha pasado?', 0), +(11884, 'esES', '¿Has acabado ya con ellos?', 0), +(11889, 'esES', 'Has vuelto. ¿Buenas noticias? ¿Con suerte?', 0), +(11892, 'esES', '¿Está muerto el carnicero de la Tundra Boreal?', 0), +(11897, 'esES', '¿Lo conseguiste, $N? Necesitamos frenar a la plaga o la Fortaleza de Denuedo será invadida.', 0), +(11900, 'esES', '¿Has leído todos mis instrumentos de precisión, $r?', 0), +(11903, 'esES', '¿Espero que le estés dando una buena paliza a esos carroñeros ,no?', 0), +(11904, 'esES', 'La mena, ¿está a salvo, $N?', 0), +(11905, 'esES', '¿Has estado en la falla de El Nexo?', 0), +(11908, 'esES', '¿Has recuperado mi libro?', 0), +(11910, 'esES', '¿Has conseguido las muestras que te pedí?', 0), +(11911, 'esES', 'Los ancestros cristalinos... ¿Existen?', 0), +(11912, 'esES', '¿Has logrado encontrar algo de comida?', 0), +(11913, 'esES', '¿Has acabado con lo que te he pedido, $N?', 0), +(11914, 'esES', '¿Tienes las esencias de maná que pedí?', 0), +(11918, 'esES', '¿Ya te has visto la cara con nuestro enemigo, $c?', 0), +(11919, 'esES', '¿Has averiguado como capturar un Dragón del Nexo?', 0), +(11931, 'esES', 'Deprisa, mortal.$b$bCada minuto que pasa Malygos se hace más fuerte.', 0), +(11936, 'esES', '¿Has destruido los huevos del Vuelo Azur, $r?', 0), +(11938, 'esES', '¿Está hecho?', 0), +(11940, 'esES', '¿Has recuperado una cría de draco para mis estudios?', 0), +(11941, 'esES', '¿Qué has encontrado, $r?', 0), +(11942, 'esES', 'Te estás tomando tu tiempo, ¿verdad? No sé cuánto tiempo más podré contener a este exánime.', 0), +(11943, 'esES', '¿Has encontrado algún otro fragmento de la prisión?', 0), +(11944, 'esES', '¿Has hecho algún progreso? Estamos en un aprieto aquí.', 0), +(11945, 'esES', '¿Has tenido éxito, $N? Nuestros parientes en Unu\'pe dependen de tu éxito.', 0), +(11949, 'esES', 'Estamos luchando con uñas y dientes, $N. No les daremos ni un centímetro a estos Kvaldir sin que lo paguen muy caro.', 0), +(11951, 'esES', '¿Has reunido los fragmentos de maná que necesito?', 0), +(11956, 'esES', 'Has vuelto, $N. ¿Conseguiste la filacteria?', 0), +(11957, 'esES', '¡No debemos permitir que Saragosa viva!', 0), +(11961, 'esES', 'El tótem, $r. ¿Lo tienes?', 0), +(11962, 'esES', '¿Qué tienes ahí?', 0), +(11965, 'esES', '¿Has reunido a las supervivientes, $N?', 0), +(11967, 'esES', '¿Tienes noticias para mí, $N?', 0), +(11968, 'esES', '¿Has acabado con lo que te he pedido, $N?', 0), +(11969, 'esES', '¿Te has encontrado con Keristrasza?', 0), +(11973, 'esES', '¿Has localizado a Keristrasza? ¿Has podido liberarla de sus ataduras?', 0), +(12019, 'esES', 'Saludos, $N.', 0), +(12035, 'esES', '¿Ya has acabado, $N?', 0), +(12517, 'esES', '¡Veo que has logrado reunir una baraja de Pícaros! Me has impresionado.', 0), +(12518, 'esES', '¡Veo que has logrado reunir una baraja de Magos! Me has impresionado.', 0), +(12728, 'esES', '¿Ya has recopilado los datos de Cavernas Aleta Invernal, $N?', 0), +(12791, 'esES', 'Saludos, $r.', 0), +(12798, 'esES', '¡Veo que has logrado reunir una baraja de Espadas! Me has impresionado.', 0), +(13002, 'esES', 'E\'hto e\'h lo que e\'htaba bu\'hcando. A\'ra te enseñaré a perfec\'sionar gema\'h.', 0), +(13004, 'esES', 'Apreciamos mucho tu donación. Déjame enseñarte a perfeccionar gemas.', 0), +(13088, 'esES', 'Los muchachos necesitan carne para el estofado.', 0), +(13090, 'esES', 'Cuando la carne esté presente, el estofado estará listo.', 0), +(13094, 'esES', 'Por favor, $N, dime que has encontrado la Investigación de Berinand...', 0), +(13095, 'esES', 'Por favor, $N, dime que has encontrado la Investigación de Berinand...', 0), +(13128, 'esES', '¿Traes nuevas noticias de Belgaristrasz?', 0), +(13265, 'esES', 'Los humanoides de las tierras de Rasganorte visten prendas que se pueden convertir en tela si sabes cómo hacerlo.$b$bPor un poco de oro, me dispongo a enseñarte el arte de la Recolección de Telas, que te proporcionará telas de tejido de escarcha adicionales de los humanoides de Rasganorte que mates.', 0), +(13270, 'esES', 'Los humanoides de las tierras de Rasganorte visten prendas que se pueden convertir en tela si sabes cómo hacerlo.$b$bPor un poco de oro, me dispongo a enseñarte el arte de la Recolección de Telas, que te proporcionará telas de tejido de escarcha adicionales de los humanoides de Rasganorte que mates.', 0), +(13311, 'esES', '¡Veo que has logrado reunir una baraja de Demonios! Me has impresionado.', 0), +(13413, 'esES', 'Y bien, mortal, ¿qué piensas sobre mis mascotas?', 0), +(13414, 'esES', '¿Sí, $r?', 0), +-- BOREAN TUNDRA esMX missing quest_request_items_locale +(11559, 'esMX', '¿Qué es esto? ¿Quién eres tú?$b$bEres una cosa de esas... ¡Un $r! ¿Por qué puedes hablar nuestra lengua?', 0), +(11560, 'esMX', 'Si no se rescatan mas renacuajos, no importará lo que hagamos: ¡los murclos de Aleta Invernal dejarán de tener cualquier posibilidad de futuro!', 0), +(11561, 'esMX', 'Si has matado a tantos traidores de Aleta Invernal, ¿por qué cuando miro al otro lado del agua sigo viendo a demasiados?', 0), +(11563, 'esMX', '¡No me hagas perder el tiempo si no tienes la cabeza de Glrggl!', 0), +(11564, 'esMX', '¿Tienes toda la grasa de orca que necesito?', 0), +(11565, 'esMX', '¿Tienes mi traje de muda, $N?', 0), +(11566, 'esMX', '¿Lo has hecho, $r? ¿Está muerto Claximus?', 0), +(11569, 'esMX', '¿Tienes la llave?$b$bNo, los otros me dan igual. ¡Solo quiero salir de aquí!', 0), +(11570, 'esMX', 'Dime, $N, ¿Qué puedo hacer por ti?', 0), +(11571, 'esMX', '¿Has conseguido llenar la caracola con el vapor de Escaldadora?', 0), +(11576, 'esMX', '¿Has recogido las lecturas que te he pedido, $c?', 0), +(11582, 'esMX', 'Bueno, $c?$b$b¿Has sido capaz de encontrar la anomalía?', 0), +(11587, 'esMX', 'Confío en que estás trabajando diligentemente para rescatar a un prisionero $r....', 0), +(11590, 'esMX', '¿Ya has capturado un Hechizero de Berilio, $N?', 0), +(11600, 'esMX', '¿Has hablado con William, $N?', 0), +(11603, 'esMX', '', 0), +(11605, 'esMX', '$b$b¿Has recuperado los nombres de los ancestros errantes?', 0), +(11607, 'esMX', '¿Cómo les va a los espíritus de los inocentes?', 0), +(11608, 'esMX', '¿Y Bien?', 0), +(11609, 'esMX', '¿Has recuperado un conjunto completo de objetos rituales?', 0), +(11610, 'esMX', '¿Has completado las ceremonias de los ancestros?', 0), +(11611, 'esMX', 'No hay peones, no hay construcciones. Y no, no vamos a reemplazarlos por goblins. Son extremadamente caros...', 0), +(11612, 'esMX', '¿Has liberado la Cantera Fríoescollo de nuestros enemigos?', 0), +(11613, 'esMX', '¿Lo conseguiste, $r? Los Kvaldir son guerreros muy crueles. No esperes ninguna tregua de ellos.', 0), +(11617, 'esMX', '¿Has tenido exito destruyendo las plataformas voladores de los cazadores de magos?', 0), +(11623, 'esMX', '¿Has acabado con el comisario?', 0), +(11625, 'esMX', '¿Tienes el tridente?', 0), +(11645, 'esMX', '¿Has conseguido todos mis suministros, $r? ¡No puedo hacer NADA sin mis cosas!', 0), +(11648, 'esMX', '¿Y bien? ¿Sabes dónde está retenida Lady Evanor?', 0), +(11650, 'esMX', '¿Por qué será que no me creo que hayas conseguido todas las cosas de mi lista?', 0), +(11652, 'esMX', '¿Bien? ¿Qué ha pasado?', 0), +(11653, 'esMX', '¿Estás seguro de que has probado el Rayo reductor lo suficiente en esas bestias monstruosas?', 0), +(11658, 'esMX', 'Si queremos que todo salga bien, necesitaremos muchas de sus prendas. Pero yo no soy costurera... ¡tendremos que encontrar algo de tu talla!$b$bY luego, tan solo tendré que añadir un toque de mi talento de ingeniera, y ¡listo! Interpretarás tu papel perfectamente.', 0), +(11670, 'esMX', '¿Entonces ya está? ¿Has realizado la sucia hazaña y tendido la trampa a los orcos de la Avanzada Bor\'gorok?', 0), +(11671, 'esMX', '¿Has conseguido la llave de Salrand?', 0), +(11679, 'esMX', '¿Te atreves a acercarte a mí, mortal?$b$bPor el bien de tus descendientes, espero que tu causa sea digna.', 0), +(11699, 'esMX', '¿Tienes todas esas cosas?', 0), +(11705, 'esMX', '$B$B¿Qué es eso que oigo sobre un necroseñor de la Plaga?', 0), +(11708, 'esMX', 'Hola, ¿qué tal?', 0), +(11710, 'esMX', 'Vamos a necesitar muchas piezas de repuesto para mantener esta cosa en funcionamiento.$b$bPor favor, dime que has traído todo lo que necesitamos.', 0), +(11712, 'esMX', '¿A cuántos mecagnomos lograste devolverles de su maldición, $c? ', 0), +(11713, 'esMX', '¿Has señalado la ubicación de los sumideros?', 0), +(11715, 'esMX', '¿Tienes ese combustible?', 0), +(11718, 'esMX', '¡Trae esos pellejos lo antes posible! ¡No podré acabar la máquina sin ellos!', 0), +(11723, 'esMX', 'Bueno, ¿ya has desplegado el Vibro-Motor 5000?', 0), +(11726, 'esMX', '¿Tienes esas bolsas de especias?', 0), +(11728, 'esMX', '¿Has recuperado el microfilm?', 0), +(11729, 'esMX', '¡Hey!', 0), +(11730, 'esMX', 'A cuántos mecagnomos lograste reprogramar?', 0), +(11788, 'esMX', '¿Te has encargado de los tenientes del maestro de palancas Mechazod?', 0), +(11789, 'esMX', 'El contraveneno… ¿lo tienes?', 0), +(11792, 'esMX', 'Has vuelto, $N.', 0), +(11793, 'esMX', '¿Te envía el presagista Vurenn?', 0), +(11794, 'esMX', '¿Ya has completado la tarea que te encomendé, $N?', 0), +(11795, 'esMX', '¿Has conseguido esas insignias?', 0), +(11796, 'esMX', '¿Ya has hundido los restos?', 0), +(11797, 'esMX', 'Has vuelto. Espero que hayas hecho mella en el número de enemigos.', 0), +(11798, 'esMX', 'Jinky me dijo que esperara noticias de ti. ¿Ha terminado?', 0), +(11865, 'esMX', 'No sientas lástima por ellos, $r.', 0), +(11866, 'esMX', 'Las orejas servirán...', 0), +(11867, 'esMX', 'Ya sean buscadores de tesoros o cazadores sedientos de sangre de los páramos, cualquier ser que apoye a Nesingwary y se atreva a atacar a nuestra amada vida salvaje será considerado un enemigo de D.E.H.T.A.$b$bSi matas a estos sucios simpatizantes de Nesingwary, tráeme pruebas de su desaparición y serás recompensado con una bendición de los druidas de D.E.H.T.A.', 0), +(11868, 'esMX', '¡La naturaleza demanda justicia!', 0), +(11869, 'esMX', 'El trabajo que hacemos es espantoso, $n.', 0), +(11871, 'esMX', 'Esos pobres animales serán enterrados dignamente.', 0), +(11872, 'esMX', '¿Vienes a darme buenas noticias?', 0), +(11876, 'esMX', '¡Deben ser liberadas!', 0), +(11879, 'esMX', '¿Qué ha pasado?', 0), +(11884, 'esMX', '¿Has acabado ya con ellos?', 0), +(11889, 'esMX', 'Has vuelto. ¿Buenas noticias? ¿Con suerte?', 0), +(11892, 'esMX', '¿Está muerto el carnicero de la Tundra Boreal?', 0), +(11897, 'esMX', '¿Lo conseguiste, $N? Necesitamos frenar a la plaga o la Fortaleza de Denuedo será invadida.', 0), +(11900, 'esMX', '¿Has leído todos mis instrumentos de precisión, $r?', 0), +(11903, 'esMX', '¿Espero que le estés dando una buena paliza a esos carroñeros ,no?', 0), +(11904, 'esMX', 'La mena, ¿está a salvo, $N?', 0), +(11905, 'esMX', '¿Has estado en la falla de El Nexo?', 0), +(11908, 'esMX', '¿Has recuperado mi libro?', 0), +(11910, 'esMX', '¿Has conseguido las muestras que te pedí?', 0), +(11911, 'esMX', 'Los ancestros cristalinos... ¿Existen?', 0), +(11912, 'esMX', '¿Has logrado encontrar algo de comida?', 0), +(11913, 'esMX', '¿Has acabado con lo que te he pedido, $N?', 0), +(11914, 'esMX', '¿Tienes las esencias de maná que pedí?', 0), +(11918, 'esMX', '¿Ya te has visto la cara con nuestro enemigo, $c?', 0), +(11919, 'esMX', '¿Has averiguado como capturar un Dragón del Nexo?', 0), +(11931, 'esMX', 'Deprisa, mortal.$b$bCada minuto que pasa Malygos se hace más fuerte.', 0), +(11936, 'esMX', '¿Has destruido los huevos del Vuelo Azur, $r?', 0), +(11938, 'esMX', '¿Está hecho?', 0), +(11940, 'esMX', '¿Has recuperado una cría de draco para mis estudios?', 0), +(11941, 'esMX', '¿Qué has encontrado, $r?', 0), +(11942, 'esMX', 'Te estás tomando tu tiempo, ¿verdad? No sé cuánto tiempo más podré contener a este exánime.', 0), +(11943, 'esMX', '¿Has encontrado algún otro fragmento de la prisión?', 0), +(11944, 'esMX', '¿Has hecho algún progreso? Estamos en un aprieto aquí.', 0), +(11945, 'esMX', '¿Has tenido éxito, $N? Nuestros parientes en Unu\'pe dependen de tu éxito.', 0), +(11949, 'esMX', 'Estamos luchando con uñas y dientes, $N. No les daremos ni un centímetro a estos Kvaldir sin que lo paguen muy caro.', 0), +(11951, 'esMX', '¿Has reunido los fragmentos de maná que necesito?', 0), +(11956, 'esMX', 'Has vuelto, $N. ¿Conseguiste la filacteria?', 0), +(11957, 'esMX', '¡No debemos permitir que Saragosa viva!', 0), +(11961, 'esMX', 'El tótem, $r. ¿Lo tienes?', 0), +(11962, 'esMX', '¿Qué tienes ahí?', 0), +(11965, 'esMX', '¿Has reunido a las supervivientes, $N?', 0), +(11967, 'esMX', '¿Tienes noticias para mí, $N?', 0), +(11968, 'esMX', '¿Has acabado con lo que te he pedido, $N?', 0), +(11969, 'esMX', '¿Te has encontrado con Keristrasza?', 0), +(11973, 'esMX', '¿Has localizado a Keristrasza? ¿Has podido liberarla de sus ataduras?', 0), +(12019, 'esMX', 'Saludos, $N.', 0), +(12035, 'esMX', '¿Ya has acabado, $N?', 0), +(12517, 'esMX', '¡Veo que has logrado reunir una baraja de Pícaros! Me has impresionado.', 0), +(12518, 'esMX', '¡Veo que has logrado reunir una baraja de Magos! Me has impresionado.', 0), +(12728, 'esMX', '¿Ya has recopilado los datos de Cavernas Aleta Invernal, $N?', 0), +(12791, 'esMX', 'Saludos, $r.', 0), +(12798, 'esMX', '¡Veo que has logrado reunir una baraja de Espadas! Me has impresionado.', 0), +(13002, 'esMX', 'E\'hto e\'h lo que e\'htaba bu\'hcando. A\'ra te enseñaré a perfec\'sionar gema\'h.', 0), +(13004, 'esMX', 'Apreciamos mucho tu donación. Déjame enseñarte a perfeccionar gemas.', 0), +(13088, 'esMX', 'Los muchachos necesitan carne para el estofado.', 0), +(13090, 'esMX', 'Cuando la carne esté presente, el estofado estará listo.', 0), +(13094, 'esMX', 'Por favor, $N, dime que has encontrado la Investigación de Berinand...', 0), +(13095, 'esMX', 'Por favor, $N, dime que has encontrado la Investigación de Berinand...', 0), +(13128, 'esMX', '¿Traes nuevas noticias de Belgaristrasz?', 0), +(13265, 'esMX', 'Los humanoides de las tierras de Rasganorte visten prendas que se pueden convertir en tela si sabes cómo hacerlo.$b$bPor un poco de oro, me dispongo a enseñarte el arte de la Recolección de Telas, que te proporcionará telas de tejido de escarcha adicionales de los humanoides de Rasganorte que mates.', 0), +(13270, 'esMX', 'Los humanoides de las tierras de Rasganorte visten prendas que se pueden convertir en tela si sabes cómo hacerlo.$b$bPor un poco de oro, me dispongo a enseñarte el arte de la Recolección de Telas, que te proporcionará telas de tejido de escarcha adicionales de los humanoides de Rasganorte que mates.', 0), +(13311, 'esMX', '¡Veo que has logrado reunir una baraja de Demonios! Me has impresionado.', 0), +(13413, 'esMX', 'Y bien, mortal, ¿qué piensas sobre mis mascotas?', 0), +(13414, 'esMX', '¿Sí, $r?', 0); +-- SECTION 3 +-- quest_template_locale esES +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Renacuajo Aleta Invernal rescatado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11560; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Múrlocs Aleta Invernal muertos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11561; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Lectura de la Anomalía del Acantilado Agrietado conseguida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11576; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Lectura de la Sima Quebrada conseguida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11582; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Prisioneros Arcanos rescatados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11587; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Hechicero de Berilo capturado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11590; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Guardias y trabajadores de caravana muertos quemados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11593; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Espíritus taunka en paz', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11594; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Nerub\'ar muertos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11598; +UPDATE `quest_template_locale` SET `ObjectiveText1` = '', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = 'Sacos de huevos Nerub\'ar destruidos' WHERE `locale` IN ('esES', 'esMX') AND ID = 11602; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Ancestro Kesuk identificado', `ObjectiveText2` = 'Ancestro Sagani identificado', `ObjectiveText3` = 'Ancestro Takret identificado', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11605; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Artesanos de Kashala liberados', `ObjectiveText2` = 'Chamanes de Kashala liberados', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11607; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Sumidero Sur de Nerub\'ar destruido', `ObjectiveText2` = 'Sumidero Este de Nerub\'ar destruido', `ObjectiveText3` = 'Sumidero Oeste de Nerub\'ar destruido', `ObjectiveText4` = 'Sumidero Norte de Nerub\'ar destruido' WHERE `locale` IN ('esES', 'esMX') AND ID = 11608; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Ceremonia del ancestro Kesuk completada', `ObjectiveText2` = 'Ceremonia del ancestro Sagani completada', `ObjectiveText3` = 'Ceremonia del ancestro Takret completada', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11610; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Peón Grito de Guerra liberado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11611; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Plataforma Este destruida', `ObjectiveText2` = 'Plataforma Norte destruida', `ObjectiveText3` = 'Plataforma Oeste destruida', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11617; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Cocer se ha rendido', `ObjectiveText2` = 'Xurn se ha rendido', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11627; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Destino del clarividente Caminante Siniestro vaticinado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11631; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Aguja de Putrefacción inspeccionada', `ObjectiveText2` = 'Aguja de Sangre inspeccionada', `ObjectiveText3` = 'Aguja de Dolor inspeccionada', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11633; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Clarividente Caminante Siniestro liberado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11637; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Caldera este neutralizada', `ObjectiveText2` = 'Caldera central neutralizada', `ObjectiveText3` = 'Caldera oeste neutralizada', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11647; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Prisionero interrogado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11648; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Unidad de la Plaga destruida', `ObjectiveText2` = 'Soldado Grito de Guerra herido rescatado', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11652; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Rayo de Ingeniosa puesto a prueba', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11653; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Las Fauces de la Sierpe destruido', `ObjectiveText2` = 'El Kur Drakkar destruido', `ObjectiveText3` = 'Martillo de Bor destruido', `ObjectiveText4` = 'Yunque de Bor destruido' WHERE `locale` IN ('esES', 'esMX') AND ID = 11656; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Globos de sangre destruidos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11659; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Estandarte Grito de Guerra clavado sobre Magmothregar', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11670; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Prisionero de la Plaga liberado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11676; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Caldera de peste neutralizada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11677; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Miembro de la Plaga de Talramas muerto', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11683; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Marcar situación del sumidero sur', `ObjectiveText2` = 'Marcar situación del sumidero noreste', `ObjectiveText3` = 'Marcar situación del sumidero noroeste', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11684; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Observar Granero Grito de Guerra', `ObjectiveText2` = 'Observar Granja de Torp', `ObjectiveText3` = 'Observar Matadero Grito de Guerra', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11686; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Kodos rescatados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11690; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Caldera de peste neutralizada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11694; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Miembro de la Plaga de Talramas muerto', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11698; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Gnomo de Palanqueta maldito y rescatado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11712; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Marcar situación del sumidero sur', `ObjectiveText2` = 'Marcar situación del sumidero noreste', `ObjectiveText3` = 'Marcar situación del sumidero noroeste', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11713; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Barriles de aceite recogidos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11715; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Robots reprogramados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11730; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Cultor en muelles derrotado', `ObjectiveText2` = 'Cultor en la cárcel derrotado', `ObjectiveText3` = 'Cultor en la cocina derrotado', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11794; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Hunde unos restos al Este', `ObjectiveText2` = 'Hunde unos restos al Sur', `ObjectiveText3` = 'Hunde unos restos al Noroeste', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11796; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Busca el manual del maestro de palancas', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11798; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Trampero de Nesingwary atrapado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11865; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Cría de mamut liberada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11876; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Trae a Jenny a salvo sin perder el cargamento', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11881; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Energía reunida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11893; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Tormenta dominada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11895; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Robots debilitados y destruidos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11896; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Explosivos colocados en el sumidero sur', `ObjectiveText2` = 'Explosivos colocados en el sumidero norte', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11897; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Alma de gnomo capturada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11899; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Lectura geológica de El Nexo', `ObjectiveText2` = 'Lectura del sur de Gelidar', `ObjectiveText3` = 'Lectura del norte de Gelidar', `ObjectiveText4` = 'Lectura del oeste de Gelidar' WHERE `locale` IN ('esES', 'esMX') AND ID = 11900; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Vagoneta de mena liberada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11904; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Falla interdimensional ralentizada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11905; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Busca el manual del maestro de palancas', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11909; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Grano de Lindeallá quemado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11913; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Draco de El Nexo capturado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11919; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Huevos de draco destruidos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11936; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Baja en En\'kilah', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11938; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Draco de El Nexo capturado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11940; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Toca la campana de Lindeallá', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11965; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Malygos atraído', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11969; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Keristrasza en paz', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11973; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Los últimos ritos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12019; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Recolector de cosecha alterado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12035; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Lectura de las Cavernas Aletas Invernal tomada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12728; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Guardián-Ley Eregos derrotado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13128; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Élites Juraescama asesinados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13413; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Élites Juraescama asesinados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13414; diff --git a/data/sql/updates/db_world/2022_11_21_05.sql b/data/sql/updates/db_world/2022_11_21_05.sql new file mode 100644 index 000000000..73c1d00f3 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_05.sql @@ -0,0 +1,901 @@ +-- DB update 2022_11_21_04 -> 2022_11_21_05 +-- esES missing reward_locale +DELETE FROM `quest_offer_reward_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (11958, 11959, 11960, 11977, 11978, 11979, 11980, 11983, 11995, 11996, 11999, 12000, 12004, 12005, 12006, 12008, 12009, 12011, 12013, 12016, 12017, 12028, 12030, 12031, 12032, 12033, 12034, 12036, 12039, 12040, 12041, 12043, 12044, 12045, 12046, 12047, 12048, 12049, 12050, 12052, 12053, 12055, 12056, 12057, 12059, 12060, 12061, 12063, 12064, 12065, 12066, 12067, 12069, 12071, 12072, 12075, 12076, 12077, 12078, 12079, 12080, 12083, 12084, 12085, 12089, 12090, 12091, 12092, 12095, 12096, 12097, 12098, 12100, 12101, 12102, 12104, 12106, 12107, 12110, 12111, 12112, 12115, 12119, 12122, 12123, 12124, 12125, 12126, 12127, 12132, 12136, 12140, 12142, 12143, 12144, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12166, 12167, 12168, 12169, 12171, 12172, 12173, 12174, 12188, 12189, 12200, 12205, 12206, 12209, 12211, 12214, 12218, 12221, 12224, 12230, 12232, 12234, 12235, 12237, 12239, 12240, 12243, 12245, 12251, 12252, 12253, 12254, 12258, 12260, 12261, 12262, 12263, 12264, 12265, 12266, 12267, 12269, 12271, 12272, 12273, 12274, 12275, 12276, 12277, 12281, 12282, 12283, 12285, 12287, 12290, 12291, 12301, 12303, 12304, 12305, 12309, 12311, 12312, 12319, 12320, 12321, 12325, 12326, 12372, 12416, 12417, 12418, 12419, 12435, 12438, 12439, 12440, 12441, 12442, 12447, 12448, 12449, 12450, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12469, 12470, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12487, 12488, 12495, 12496, 12497, 12498, 12499, 12500, 12542, 12545, 12766, 12767, 12768, 12769, 12789, 13077, 13078, 13079, 13167, 13182, 13187, 13190, 13204, 13343, 13372, 13375, 13384, 13385, 26012, 26013, 26034); +INSERT INTO `quest_offer_reward_locale` (`ID`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(11958, 'esES', 'No puedo decir que me encante pedirte hacer ciertas cosas en nuestro nombre. Es todo cuanto podemos hacer para preparar nuestra marcha con prontitud, aunque aún no sabemos adónde ir.$b$bMis hechiceros me dicen que estás aquí para salvar al mundo de El Que Camina por las Sombras.$b$bConfío en que salvarás también a los pueblos de esas tierras.', 0), +(11959, 'esES', 'El honorable sacrificio de Loguhn que has realizado es exactamente lo que mi pueblo necesita. Ahora aprovecharemos al máximo la disputa de los wolvar para ocupar su lugar.$b$bEso bastará.', 0), +(11960, 'esES', 'Bueno, supongo que has salvado a muchos. Gracias, $r.$b$bAhora los wolvar tendrán una oportunidad de sobrevivir junto con nosotros. Si es que logramos sobrevivir, claro.$b$b¿Crees que podrías volver mañana para salvar a más cachorros?', 0), +(11977, 'esES', 'Lo que ves aquí son todos los restos de los taunka de Tundra Boreal y de Cementerio de Dragones. Un pueblo quebrantado... maltratado y llevado al border de la extinción por la Plaga.$b$b$b$bSolo la horda puede salvarles ahora. Solo la horda puede reparar sus espíritus quebrantados. Los cuidaremos hasta que recuperen su salud y reforzarán a la Horda en Rasganorte.', 0), +(11978, 'esES', '¡Esto es exactamente lo que necesitamos, $N! Al blandir las armas de la Horda, sus espíritus se regocijarán y obtendrán la protección necesaria contra la Plaga.$b$b¿Estás preparada para la ceremonia de iniciación?$b$b$b$bSerás la única en admitir a nuestros nuevos aliados en la Horda.', 0), +(11979, 'esES', 'Lo que ves aquí son todos los restos de los taunka de Tundra Boreal y de Cementerio de Dragones. Un pueblo quebrantado... maltratado y llevado al border de la extinción por la Plaga.$b$b$b$bSolo la horda puede salvarles ahora. Solo la horda puede reparar sus espíritus quebrantados. Los cuidaremos hasta que recuperen su salud y reforzarán a la Horda en Rasganorte.', 0), +(11980, 'esES', '$b$bNos has devuelto nuestro honor, $N. Tanto Tor\'zin como yo te agradecemos tu gesto desinteresado.', 0), +(11983, 'esES', 'Gracias, comandante $N. No les quedaba nada. Tú les has brindado un propósito, y el propósito brinda esperanza... Esperanza para un futuro nuevo... para una nueva vida.', 0), +(11995, 'esES', 'Te he estado esperando, $c. Tú y yo tenemos mucho trabajo por delante.', 0), +(11996, 'esES', '¿Qué te hizo tardar tanto? El tiempo espera solo a los Aspectos, $r.$b$bTenemos mucho trabajo que hacer, tú y yo.', 0), +(11999, 'esES', 'Qué curioso, buscan un acuerdo con El Etereum. Los etéreos podrían resultar un poderoso aliado para Malygos y su locura.$b$b¡No puede ser!', 0), +(12000, 'esES', 'Qué curioso, buscan un acuerdo con El Etereum. Los etéreos podrían resultar un poderoso aliado para Malygos y su locura.$b$b¡No puede ser!', 0), +(12004, 'esES', 'Es una lástima que Goramosh afirmara que ya se había llegado a un acuerdo.$b$bNo obstante, son dos gusanos menos de los que preocuparnos. Pasemos a asuntos más importantes.', 0), +(12005, 'esES', 'Está bien, $c, solo ponlos en la tierra frente al trono de Agmar.$b$bEs una lástima que Goramosh afirmara que ya se había llegado a un acuerdo.$b$bNo obstante, son dos gusanos menos de los que preocuparnos. Pasemos a asuntos más importantes.', 0), +(12006, 'esES', 'Muy bien, has satisfecho mi petición con creces.$b$bGracias, $r.', 0), +(12008, 'esES', 'Aunque no cabe duda de que has apoyado la causa de la Horda por doquier, muchos otros han estado trabajando para propagar nuestra influencia en Rasganorte. Incluso ahora tenemos fuerzas estableciendo sus bases en los espacios congelados de estos desolados páramos.$b$bTenemos rodeada a la Plaga. La victoria se acerca a medida que nuestro ejército se aglomera a los pies de la Puerta de Cólera, Angrathar. Pronto echaremos abajo la puerta y abriremos una brecha en Corona de Hielo.$b$bPero aún queda mucho trabajo por hacer...$b$b¡Primero hay que detener a los nerubianos!', 0), +(12009, 'esES', 'Soy un simple pescador. El mundo se ha vuelto del revés de repente. Es absurdo.$b$bEspero que consigas volverlo a poner otra vez del derecho.', 0), +(12011, 'esES', 'Esas no son las noticias que esperaba oír, $r.$b$bNo, no... has hecho bien en contármelo, pero me temo que mi viejo enemigo ha regresado a estas aguas.', 0), +(12013, 'esES', 'Tienes mi más sincera gratitud, $N.$b$bSi aún no lo has hecho, deberías alertar a tus superiores del peligro que el Vuelo Azul ha desatado. ¡Amenazan con destruirnos a todos haciendo estallar el eje de líneas Ley que fluye bajo los Jardines!', 0), +(12016, 'esES', 'Has conseguido matar a Kili\'ua... quizás puedas hacer lo mismo con Tu\'u\'gwar.$b$bO quizás no.', 0), +(12017, 'esES', '¡Debemos regocijarnos de tu éxito, joven amigo! Hay sangre en el agua, ¡la de nuestro enemigo!$b$bTendrás la gratitud eterna de este viejo pescador, y sin duda la de todos los Kalu\'ak cuando se lo cuente.$b$bPor favor, insisto, toma algo como recompensa.', 0), +(12028, 'esES', '¿Fantasmas y galimatías? ¡No puede ser!$b$bDebemos lograr más orientación.', 0), +(12030, 'esES', 'Te he estado esperando, $r. Vi volar a tu espíritu y pude sentir algo místico en tu mirada.$b$bTu destino y el de los Kalu\'ak ahora están unidos.', 0), +(12031, 'esES', 'No es una tarea muy agradable, pero sí es necesaria y compasiva.$b$bY ahora hay algo más esperándote que puedes hacer por los Kalu\'ak.', 0), +(12032, 'esES', '¿Hablaste con Oacha\'noa?$b$bSi su deseo es que permanezcamos con tu pueblo, que así sea. El ancestro Ko\'nani lo aceptará como nuestro destino, sea para bien o para mal.$b$bMi pueblo cree que todas las almas se funden con la magia del mundo. ¡Tenemos que luchar contra los intentos de controlar la magia del dragón azul o estaremos todos perdidos!$b$bNunca pensé que un $r se convertiría en el campeón de los Kalu\'ak, pero queda demostrado que me equivoqué. En nombre de todo mi pueblo te doy las gracias, $N.$b$bQue los dioses te sonrían y te mantengan a salvo.', 0), +(12033, 'esES', '$b$b¿Así que nos entendemos? Volveré con mi señor y le diré que has aceptado.', 0), +(12034, 'esES', 'Por tierra y por aire: así es como acabaremos con la amenaza Anub\'ar.', 0), +(12036, 'esES', 'Ese maldito foso debe de estar conectado directamente con Azjol-Nerub. Esto es peor de lo que pensaba.$b$b$b$bBuscar y destrozar... Ese será el siguiente paso.', 0), +(12039, 'esES', 'Es tan ligero... ¡como si no pesase nada! Necesitaré tiempo para analizar el metal y ver qué puedo hacer con él. ¡Pruebas! ¡Tengo que realizar pruebas!$b$bSeguiré en contacto, $N. Si sale algo de esto, serás la primera en saberlo.', 0), +(12040, 'esES', 'Hay miles más y ocupan cada oscuro hueco de Rasganorte. Tú sola no podrás, pero juntos... Quizás...', 0), +(12041, 'esES', '$b$b¿Esto es lo que creo que es? Con la información de estas páginas ¡APLASTAREMOS a los Anub\'ar que nos asalten!$b$bHas obrado correctamente al traerme este documento, $N. ¡Quizás te permitamos observar o incluso participar en la batalla final de Angrathar! ¡LOK\'TAR!', 0), +(12043, 'esES', 'Ah, sí, los no-muertos. Aquí está tu premio, piérdete.', 0), +(12044, 'esES', '¡Ja! ¡Ese es un buen cargamento! ¿Qué tal tu espalda, bien?', 0), +(12045, 'esES', '¡Perfecto! Son incluso más puntiagudos de lo que esperaba. Los apilaré en la nieve hasta que la bomba esté lista.$b$bVeamos, ¿qué viene ahora...?', 0), +(12046, 'esES', 'Bien, bien... Estos servirán. Las bombas de metralla están casi terminadas.$b$bEspera... ¿qué les ha pasado a mis fragmentos de hielo? Narf me dijo que los fragmentos de esos elementales podrían estar encantados, ¡pero se están deshaciendo, igual que los que le cuelgan a Narf de su barbilla gruñona!', 0), +(12047, 'esES', '¡Formidable! En principio es lo último que necesito para poder probar las nuevas bombas. ¡Dame un momento y las probaré!', 0), +(12048, 'esES', 'Estos están en un estado excelente, $N. Tengo que ponerme a trabajar inmediatamente. Si sale algo de esto, ¡serás la primera en saberlo!', 0), +(12049, 'esES', '¡Ja, ja! ¡Uno de esos trozos de carne aterrizó de lleno por aquí! ¡Bien hecho!', 0), +(12050, 'esES', 'Si un árbol cae en el bosque y no puedes oírlo con el ruido de la sierra, ¿hace algún ruido en realidad?', 0), +(12052, 'esES', 'Eso hará que esas feas se lo piensen dos veces. Toma... tu recompensa, llévatela bien lejos.', 0), +(12053, 'esES', '¡Los hemos aplastado en tierra! ¡Pronto lo haremos en el aire!', 0), +(12055, 'esES', '$N, si no me equivoco, ¡has descifrado la clave que nos permitirá averiguar exactamente qué se traen entre manos las fuerzas de los cazadores de magos!', 0), +(12056, 'esES', '$b$bTe dije que te cogería...$b$bAquí está tu recompensa, $c. Ya tenemos un dolor de cabeza menos.', 0), +(12057, 'esES', '$b$bSalvajes... encuadernado con carne de orco... Este idioma... Nunca se ha podido demostrar su existencia. Es el idioma de la muerte... El idioma de la Plaga.', 0), +(12059, 'esES', '$N, si no me equivoco, ¡has descifrado la clave que nos permitirá averiguar exactamente qué se traen entre manos las fuerzas de los cazadores de magos!', 0), +(12060, 'esES', 'Eso que describes... ¡es una proyección del Arcanomicón!$b$b$b$bEl Arcanomicón es un mapa de todas las intersecciones de líneas Ley mágicas del mundo. El Vuelo Azul lo ha estado usando para encontrar y destruir los "pilares principales" de líneas Ley para devolver el poder mágico a El Nexo.$b$bLa cuestión es: ¿por qué dirigir un sendero de destrucción tal hacia el este cuando debería dirigirse hacia el oeste?', 0), +(12061, 'esES', 'Eso que describes... ¡es una proyección del Arcanomicón!$b$b$b$bEl Arcanomicón es un mapa de todas las intersecciones de líneas Ley mágicas del mundo. El Vuelo Azul lo ha estado usando para encontrar y destruir los "pilares principales" de líneas Ley para devolver el poder mágico a El Nexo.$b$bLa cuestión es: ¿por qué dirigir un sendero de destrucción tal hacia el este cuando debería dirigirse hacia el oeste?', 0), +(12063, 'esES', '¡Mi padre sigue vivo! ¡Debemos salvarlo! Y no puedo hacerlo solo, $r. ¡Debes ayudarme!', 0), +(12064, 'esES', 'Sí, esto servirá.$b$b$b$bAquí está, $c. Con esta llave, mi padre podrá salir de la prisión de los Anub\'ar.', 0), +(12065, 'esES', 'Qué extraño que grabara esta información sobre ti por medio de la magia.$b$bBueno, entonces no solo sabemos que han canalizado el flujo de poder que salía de los Jardines Reposo Lunar, sino que también lo están modificando de alguna manera. Pero, ¿qué quieren hacer con toda esa magia?$b$bEsto se está poniendo feo, $N. No me gusta, ¡ni un pelo!', 0), +(12066, 'esES', 'Qué extraño que grabara esta información sobre ti por medio de la magia.$b$bBueno, entonces no solo sabemos que han canalizado el flujo de poder que salía de los Jardines Reposo Lunar, sino que también lo están modificando de alguna manera. Pero, ¿qué quieren hacer con toda esa magia?$b$bEsto se está poniendo feo, $N. No me gusta, ¡ni un pelo!', 0), +(12067, 'esES', 'Ah, no... y te enviamos ahí para matarla, ¿verdad?$b$b$b$bLo siento. Me encargaré de que su padre, el archimago Malin de Ventormenta, reciba la carta inmediatamente. No te preocupes, no tendrá consecuencias sobre ti... no fue culpa tuya.$b$bIntenta olvidarlo. No había manera posible de que lo supieras, $N.', 0), +(12069, 'esES', 'Eres $gun:una; valiente $c, $N. Has prestado un gran servicio a la Horda rescatando al Gran Jefe.', 0), +(12071, 'esES', '$b$bAsí que tú eres $gel:la; que está armando tanto revuelo, ¿eh?', 0), +(12072, 'esES', '$b$b¡Y han sido aplastadas en el aire! ¡Quizá pronto te llamen desde Angrathar, héroe!', 0), +(12075, 'esES', 'Esto es perfecto. Gracias, $c.', 0), +(12076, 'esES', 'Aún están frescas... Dame un minuto y mezclaré esto con el resto del elixir que he preparado.', 0), +(12077, 'esES', 'Seré sincero, pequeño. No me fío de esta mezcla y no la usaré. Guárdala... Si te fías más de ese pigmeo verde que yo, quizás te sea de ayuda.', 0), +(12078, 'esES', 'Estos servirán. Quizás cuando estas bestias hayan crecido del todo, las llevaré para presentárselas personalmente a los gigantes.$b$bPor si quieres saber mi opinión, no son más que un montón de rocas inútiles.', 0), +(12079, 'esES', 'Una satisfactoria muestra de la matanza.', 0), +(12080, 'esES', 'Así que está muerta. Como debería ser. De hecho tus intenciones resultan ser más nobles que las del enano.$b$bA través del cañón norte encontrarás el Bosque de Canto de Cristal. Es un lugar peligroso y maldito, $r. Si ese lugar es tu siguiente destino, ve con cuidado.$b$bTen, toma esto por tus esfuerzos, pequeñ$go:a;, y aléjate de esta tierra conflictiva con mi bendición.', 0), +(12083, 'esES', '¿Están usándolo para dar más poder a su ejército? No tiene sentido, los cazadores de magos no son tan poderosos.$b$bEsto tiene que significar que solo usan la magia en el punto final del lugar hacia el que están canalizando la línea Ley.$b$b¡Vamos a necesitar más información si queremos ser capaces de detenerlos!', 0), +(12084, 'esES', '¿Están usándolo para dar más poder a su ejército? No tiene sentido, los cazadores de magos no son tan poderosos.$b$bEsto tiene que significar que solo usan la magia en el punto final del lugar al que están canalizando la línea Ley.$b$b¡Vamos a necesitar más información si tengo que idear un plan para detenerlos!', 0), +(12085, 'esES', 'Jajajajajaja... uf uf, qué conmovedor.$b$b$b$b¿Qué dije? ¡Traidores! Aún así, conocí a Deino en una ocasión. ¡Ella al menos es una troll con honor!$b$bMe encargaré de que averigüe lo que le sucedió a su hermano. Incluso olvidaré decirle que fuiste tú quien lo mató.$b$b$b$b¡Ahora te tengo, $c!', 0), +(12089, 'esES', 'No es el primero de esos hechiceros cobardes en traicionarnos, y seguro que tampoco será el último. Pero qué pena también... Era uno de nuestros mejores magos. Podía invocar un buffet que te hacía la boca agua y a tu corazón dar brincos de alegría...$b$b¡BUÁ!', 0), +(12090, 'esES', 'Tienes a ese feo hijo de un caballo, ¿eh? Bueno, eso es una molestia menos con la que nuestros soldados tendrán que lidiar en estas tierras congeladas.', 0), +(12091, 'esES', '¡Ya era hora de que alguien pusiera fin a la matanza de esa bestia asquerosa! Muy buen trabajo, $N.', 0), +(12092, 'esES', '¡Gracias, $r! Hemos perdido tanto ya. Gracias a ti no perderemos a los más majestuosos de los niños de Rasganorte.$b$bPronto partiré para reunirme con los ancestros que salvaste para ver si nos pueden ayudar en estos momentos de apuros.', 0), +(12095, 'esES', '¿Qué te hace pensar que has tenido éxito donde Rokhan falló?', 0), +(12096, 'esES', 'Te doy las gracias, $c.$b$bEn cuanto termine de observar lo que esos asquerosos boticarios están tramando, me dirigiré al bosque para ver si puedo convencer a esos ancestros a que se unan a nosotros.$b$bSi no, ¡los convenceré de que no ataquen a quienes los salvaron!', 0), +(12097, 'esES', '¡JA! ¡Lo has hecho! Los soldados en la Puerta de Cólera están en deuda contigo, $N! Esto seguramente convenza a alguno de ellos para estar otro día más en la tierra.', 0), +(12098, 'esES', 'Encuentras el cadáver del comandante de los cazadores de magos.$b$bA juzgar por su apariencia, y por las condiciones en las que está el ejército a su alrededor, no debieron de ahogarse solamente. Más bien, cuando invocaron el foco hacia sí, no se esperaban que los elementales surgieran de las profundidades del lago para atacar.$b$bParece que los cazadores de magos fueron los causantes de su propia muerte.', 0), +(12100, 'esES', 'Me duele en el alma tener que acabar con esos animales, pero es una tarea que se debe realizar. Ahora debemos movernos en nuestro siguiente paso: Inoculación.', 0), +(12101, 'esES', '¿Ese tonto hombre-vaca de verdad adquirió un órgano resistente a la putrefacción? Maldición... Estaba seguro de que esa tarea mantendría ocupada su mente deformada bien hasta el próximo milenio.$b$bBueno dáselo, chic$go:a;. Tengo muchas cosas que hacer sin que tus débiles necesidades se interpongan en mi camino.', 0), +(12102, 'esES', 'No fue tan difícil, ¿verdad que no?$b$bAhora dame un segundo para preparar la vacuna.', 0), +(12104, 'esES', '$b$bAhora solo queda una cosa más.', 0), +(12106, 'esES', 'Encuentras el cadáver del comandante de los cazadores de magos.$b$bA juzgar por su apariencia, y por las condiciones en las que está el ejército a su alrededor, no debieron de ahogarse solamente. Más bien, cuando invocaron el foco hacia sí, no se esperaban que los elementales surgieran de las profundidades del lago para atacar.$b$bParece que los cazadores de magos fueron los causantes de su propia muerte.', 0), +(12107, 'esES', '¿¡QUÉ!?$b$b$b$bClaro, tendríamos que haber adivinado que eso era lo que han estado haciendo todo este tiempo. Rápido, no hay tiempo que perder.$b$b¡Debemos alertar en Reposo del Dragón!', 0), +(12110, 'esES', '¿¡QUÉ!?$b$b$b$bClaro, tendríamos que haber adivinado que eso era lo que han estado haciendo todo este tiempo. Rápido, no hay tiempo que perder.$b$b¡Debemos alertar en Reposo del Dragón!', 0), +(12111, 'esES', 'Has realizado un gesto digno de honra, $N. Elige una recompensa.', 0), +(12112, 'esES', 'Se me ocurren varias cosas que podrías hacer, adelante, quédate un ratito.', 0), +(12115, 'esES', 'Solo hay dos cosas en esta vida que me interesan, peón, y ninguna de ellas me involucra en traducir un tomo de la Plaga para ti.$b$bSin embargo... quizás podriamos trabajar en algo que nos beneficiara a ambos.$b$b$b$bEsta es mi espada rúnica, Bifrost. Bifrost tiene sed de sangre del Rey Exánime y de sus seguidores, pero primero debo grabarle runas de poder: simbolos de escarcha, sangre, y profano. Consígueme fuentes de energía adecuadas y traduciré tu Tomo.', 0), +(12119, 'esES', '¿Una carta de presentación para un encuentro con la reina? Déjame ver.$b$bCualquiera que sea este asunto, espero que sea importante. ¡El cielo está lleno de atacantes azules hoy!', 0), +(12122, 'esES', '¿Una carta de presentación para un encuentro con la reina? Déjame ver.$b$bCualquiera que sea este asunto, espero que sea importante. ¡El cielo está lleno de atacantes azules hoy!', 0), +(12123, 'esES', 'Eres realmente valiente al traernos esta información. Empezaba a preguntarme por qué el Vuelo Azul había mostrado tanto atrevimiento para iniciar un ataque sobre el templo. Ahora que sabemos que están usando cantidades ingentes de magia pura, suponen una grave amenaza para Azeroth.$b$b$b$bHipócrita, pero así es. Si Malygos no entra en razón, no nos queda más opción que responder a su ataque.', 0), +(12124, 'esES', 'Eres realmente valiente al traernos esta información. Empezaba a preguntarme por qué el Vuelo Azul había mostrado tanto atrevimiento para iniciar un ataque sobre el templo. Ahora que sabemos que están usando cantidades ingentes de magia pura, suponen una grave amenaza para Azeroth.$b$b$b$bHipócrita, pero así es. Si Malygos no entra en razón, no nos queda más opción que responder a su ataque.', 0), +(12125, 'esES', 'Una tarea simple para $gun:una; simpl$gón:ona;. Has actuado según mis expectativas.', 0), +(12126, 'esES', '$b$bImpresionante. Has superado a uno de los caballeros de la Muerte de Arthas... No cabe duda de que no estabas sol$go:a;, pero aun así...', 0), +(12127, 'esES', 'Ya puedo sentir el frío fluyendo en mi interior, $N.', 0), +(12132, 'esES', 'El poder que ostento me cuesta un precio muy alto, $N. Muchos caballeros, tanto de la luz como de las sombras, perdieron sus vidas en la última batalla en la Esperanza de la Luz. El futuro se presenta desalentador, pero al menos ahora sé a lo que me enfrento. El Rey Exánime nunca flaqueará y, aunque solo sea por esa razón, ¡debe morir!', 0), +(12136, 'esES', '$b$b¿QUÉ? No puede ser verdad. ¡Conozco a algunos de estos orcos desde hace años!$b$bDéjame, $N, tengo mucho que hacer y muchos traidores que ejecutar.$b$bCoge alguno de estos objetos por las molestias. Hoy has rendido un gran servicio a la Horda.', 0), +(12140, 'esES', '¡Con la ayuda de un chamán tan poderoso, seguro que salimos victoriosos en la Puerta de Cólera!', 0), +(12142, 'esES', 'Ya era hora.', 0), +(12143, 'esES', 'Colmillo Helado, ¿eh? Ya había oído ese nombre antes. Bien hecho, $c. Con un poco de suerte, podremos volver a dedicarnos a la amenaza de los dragones.', 0), +(12144, 'esES', 'Ya era hora, colega.', 0), +(12145, 'esES', 'Puño de Hielo, ¿eh? Ya había oído ese nombre antes. Bien hecho, $c. Con un poco de suerte, podremos volver a dedicarnos a la amenaza de los dragones.', 0), +(12146, 'esES', 'Sí, es extraño que un magnatauro lleve un objeto como este... y preocupante. Me alegro de que me lo hayas traído.', 0), +(12147, 'esES', 'Sí, es extraño que un magnatauro lleve un objeto como este... y preocupante. Me alegro de que me lo hayas traído.', 0), +(12148, 'esES', 'Así que es cierto. No podrían haber elegido mejor momento para un ataque así... Entre la Plaga y la lucha contra el Vuelo Azul es poco probable que alguien más se haya dado cuenta.', 0), +(12149, 'esES', 'Excelente trabajo. Nadie fue capaz de decirme quién podría ser ese líder, pero pude desvelar el nombre de alguien que tenía la respuesta.', 0), +(12150, 'esES', 'Grom\'thar el Portador del Trueno. Bien. Terminemos con cualquier amenaza que constituyan esos magnatauros, aquí y ahora.', 0), +(12151, 'esES', 'Eres realmente formidable.$b$bCon la muerte de Grom\'thar el Portador del Trueno, podemos dejar que el resto de magnatauros se peguen entre ellos y volver a centrarnos en otras amenazas más importantes.$b$bUn trabajo impresionante, $c.', 0), +(12166, 'esES', 'Hemos hecho lo que podíamos por las criaturas de esta tierra. ¡Ahora debemos actuar directamente contra los causantes de todo esto!', 0), +(12167, 'esES', 'Bien hecho.$b$b¡Me desharé de estas prendas mugrientas limpiándolas en la Poza de la Luna y destruyéndolas mediante el poder de la diosa!', 0), +(12168, 'esES', 'Así que el líder de los cultores se ha revelado. Tenemos un nombre.$b$b¡La vanidad y el orgullo serán su perdición!', 0), +(12169, 'esES', 'Tras la destrucción del sumo cultor, podremos barrer del mapa al resto de sus fuerzas, y la tierra y sus criaturas se recuperarán.$b$bGracias, $N. Que la diosa ilumine tu camino.', 0), +(12171, 'esES', '$b$b¡Vas a coger el hipogrifo más rápido que tengo, $r! Esta información debe llegar al Alto comandante Aterravermis sin dilación!', 0), +(12172, 'esES', 'Muy bien. Si tú estas listo, entonces yo también.', 0), +(12173, 'esES', 'Muy bien. Si tú estas listo, entonces yo también.', 0), +(12174, 'esES', '$b$b¿Sabes dónde están ahora los de esta lista? Mira afuera, junto a la puerta frontal. Son los que cuelgan de los arcos.$b$bCebo de necrófagos...', 0), +(12188, 'esES', 'Esto servirá, $N. ¿Esos perros patéticos lucharon o se limitaron a ducharte con sus lágrimas fantasmales de pena?$b$bAy, se emocionan tanto...', 0), +(12189, 'esES', 'Hemos tenido un problemilla... SIN IMPORTANCIA. Todo aquel que ha intentado tocar el añublo se ha vaporizado. Estamos trabajando para ajustar un poco la fórmula y que así no te mate al instante solo con mirarla. ¡La buena noticia es que creo que ya casi la tengo!', 0), +(12200, 'esES', 'Creo que el añublo ya está listo para probar. Da la casualidad de que la ciudadela del terror, Naxxramas, está asediando la Fortaleza de Hibergarde. Los muertos vivientes surgen de debajo de la propia tierra sobre la que se construyó Hibergarde, ansiosos por llevar a cabo las órdenes de Kel\'Thuzad.$b$bLa Alianza, por supuesto, se encuentra superada en número y armas. ¡Gente que descansa en paz en el Mausoleo de Hibergarde se ha levantado de nuevo, hambrienta de carne!$b$bQuizás deberíamos darles a probar un poquito de añublo, ¿eh?', 0), +(12205, 'esES', 'Muy bien hecho, $r. ¿Confío en que fuiste ingeniosamente cruel en tu matanza?$b$bVamos a ver, cuanto puedo ofrecerte por los féretros... em, discúlpame, oféretros?', 0), +(12206, 'esES', '¿QUÉ! ¡Imposible! Hemos perfeccionado el añublo. Es cien por cien letal.$b$b$b$bEsto es muy raro. Dame ese frasco, $c. ¡No me daré a conocer como la boticaria que lo echó todo a perder!', 0), +(12209, 'esES', 'Ya no hueles tan fresc$go:a;, carne fresca.$b$bMuy bien, esto servirá. ¿Por qué nombre debería llamarte, $c?', 0), +(12211, 'esES', '¡Dios! He llegado a pensar por un momento que iba a tener que probar las ratas con alguien para asegurarme de que no eran defectuosas.$b$b¡Por fin un poco de progreso!', 0), +(12214, 'esES', '¡Nada me hace más feliz que un trabajo bien hecho!$b$bHas rendido un gran servicio a Rencor Venenoso al conseguirnos esos caballos, $c.', 0), +(12218, 'esES', 'Por mucho que me irrite ayudar a la Alianza con esto, ¡declaro el éxito de este ensayo de campo! Próxima parada: ¡Martillo de Agmar!', 0), +(12221, 'esES', '$b$b¡Glorioso! ¡Tal y como especifiqué!$b$bAquí tienes tu pago, $N. Guarda para ti todo lo que has visto y hecho. Este trabajo es información clasificada... Se irá revelando según sea necesario.', 0), +(12224, 'esES', '¡Lok\'tar ogar! He oído mucho acerca de ti, $N. ¡Tus cicatrices de batalla son profundas - un testamento de tu dedicación y poder!$b$bCon los ataques al flanco del Rey Exánime aplastados en ambos sitios tanto el oeste como en el este, solo quedan las fuerzas de la puerta. ¡Ganamos terreno cada día, pronto atravesaremos sus murallas y nos adentraremos en la Ciudadela de Corona de Hielo!$b$bUna vez que detengamos a los dragones esqueléticos, el Alto señor Bolvar Fordragon y yo saldremos al campo.', 0), +(12230, 'esES', '$b$bExcelente. ¡Su perdida es mi... nuestra ganancia!$b$b¿No tuviste problemas con ninguno de estos por el camino? Alguno de ellos parecen bastante inestables. ¡Seré un no-muerto, pero valoro mi existencia!', 0), +(12232, 'esES', '¡Un día feliz!$b$b¡Al no usar el tiempo y recursos de los boticarios para terminar el trabajo, estoy seguro de que atraerá la atención del alto ejecutor!$b$bUsar la cabeza, pensar en más allá, de eso se trata. Sí, Sí, tú también nos eschaste una mano.$b$bAquí, ¿Si te doy algo prometerás no mencionar tu participación en todo esto?', 0), +(12234, 'esES', 'Bueno, ¿a qué estás esperando, $r? ¡Dámelos!', 0), +(12235, 'esES', '$b$b¿Has montado uno alguna vez? Es sencillo, amig$go:a;. Tan solo súbete y dile adónde ir.', 0), +(12237, 'esES', '¡Un trabajo magnífico, $N! Ahora que han vuelto nuestros ciudadanos, podemos volver a poner esto en marcha.', 0), +(12239, 'esES', '¿Tiene noticias de la maestra de espías?$b$b$b$bDéjame ver esos planos.', 0), +(12240, 'esES', 'Sabía que mi hermana no nos iba a defraudar.$b$bBien hecho, $N. El aserradero del Embate estará fuera de servicio por un tiempo, lo que significa que no habrá nuevas construcciones ni ballestas.$b$bGracias por ayudarme a estar a la altura del nombre de mi familia', 0), +(12243, 'esES', '¡Jajajajajajajajajajaja!$b$bSin sus cuadernos de ruta, ahora no tienen adonde huir.$b$bMe parece que es el fin del Embate Escarlata, y justo cuando estaban empezando. Qué triste.$b$bJe.', 0), +(12245, 'esES', '¿Qué? ¿Esperabas que te mandáramos a rescatarlos?$b$b¿Por qué haríamos eso si se han dejado capturar?$b$bRasganorte es un lugar frío, joven $N. Te sugiero que te adaptes.', 0), +(12251, 'esES', '$b$b¿Los ciudadanos han vuelto al trabajo? ¿Ya? ¡Excelente, soldado! Volveremos a levantar esta ciudad y la fortificaremos en poco tiempo. Dentro de no mucho, los refuerzos estarán preparados para unirnos a la lucha con Lord Fordragón en la Puerta de Cólera.$b$bEstoy adelantando acontecimientos, claro, ya que queda mucho aún por hacer antes de que podamos incluso pensar en enviarte en ayuda de Bolvar.', 0), +(12252, 'esES', '¿Sabían todo eso? ¿Y quién demonios es ese gran almirante Barean Viento Oeste del que hablaba?$b$b$b$bMás vale que lo averigüemos antes de tener que adivinarlo. Espero que dejaras tu... digo, mi marca.', 0), +(12253, 'esES', '$b$bHaces la labor de la Luz, $N.$b$bMe temo que nuestra labor acaba de empezar.', 0), +(12254, 'esES', '¿Una nueva bendición escrita al final del libro dices?$b$b$b$b¡Maldita sea! ¡Esa es la letra del Sumo Abad! Me jugaría tu vida por ello.', 0), +(12258, 'esES', 'Quizás ahora descansarán tranquilos, pues sus espíritus son libres para ascender hasta la Luz.$b$bMis pensamientos y oraciones vuelven ahora hacia Lord Fordragón y hacia nuestro ejército en la Puerta de Cólera. Debemos ser perseverantes, aunque solo sea para hacerles ganar tiempo suficiente para derrotar al Rey Exánime. Hibergarde no puede caer.', 0), +(12260, 'esES', 'No está mal, $c. Ahora que la imagen del sacerdote está atrapada en el espejo, Tengo algo mas que necesito hacer.', 0), +(12261, 'esES', 'Excelente. Cuando empiecen a huir de miedo, el resguardo estará ahí para darles una cariñosa despedida.', 0), +(12262, 'esES', '¿Suplicaron por sus vidas miserables? Enclenques.', 0), +(12263, 'esES', 'Somos el Vuelo Negro. Hemos arrojado la destrucción sobre las tierras de Azeroth durante miles de años. Ese decrépito Culto de los Malditos venera la muerte y nosotros estamos contentos de ayudarles.', 0), +(12264, 'esES', 'Oír sus gritos... ver su último suspiro de vida evadirse de sus cuerpos desdichados... es vigorizante, ¿no crees?$b$bLo disfruto.', 0), +(12265, 'esES', 'Bien. Aún quedan cosas que hacer.', 0), +(12266, 'esES', 'Ah, eres tú.$b$bEsperaba que fuera Serinar quien volviese cuando todo estuviera hecho... Supongo que está distraído con algo a lo que matar. ¡Se está perdiendo una batalla gloriosamente sucia!$b$b¿Aún sigues ahí? Ya he terminado contigo.', 0), +(12267, 'esES', 'Los huesos de mis hermanos están libres de esa porquería. Me has ayudado mucho, y por tanto, recibirás una recompensa apropiada.', 0), +(12269, 'esES', '$b$bSe las llevaré a nuestro encargado del registro y le daré la mala noticia a las familias de los mineros.$b$bAún queda mucho por hacer si queremos tener éxito aquí y, a la larga, en la Puerta de Cólera. Lord Fordragón depende de nosotros.', 0), +(12271, 'esES', '¿Y dices que la tenía Alphonse? Claro.$b$bLa reconozco de mis días de juventud como torturador en la corte del rey Terenas del caído Lordaeron. Se la conoce como la vara de coacción.$b$b.$b$b¡Tengo una idea de cómo podemos hacer buen uso de ella!', 0), +(12272, 'esES', 'Este puede ser el momento, el segundo exacto en que la situación se vuelva contra la Plaga. Has demostrado ser un héroe de la Alianza, al menos ante mis ojos, $N.$b$bAhora, si fueras tan amable de dejarme solo... Necesito más tiempo para estudiar esta mena y apartar las impurezas y debilidades.$b$bSigue adelante, aliad$go:a;. Me pondré en contacto contigo cuando tenga más noticias.', 0), +(12273, 'esES', '$b$bAhora eres mi $c favorita, $N. Si te apetece, me gustaría que pensaras en unirte como oficial a La Mano de la Venganza.$b$b¡Podemos comenzar como un guardia de la muerte, y en unas pocas décadas creo que tendrás lo que se necesita para ser un ejecutor junior!$b$b¿No? Bueno no nos apresuremos... tómate tu tiempo y reflexiona.', 0), +(12274, 'esES', '¡¿Qué diablos está pasando aquí?!$b$b¿Saltó por su cuenta? ¿Seguro que no lo empujaste?$b$b', 0), +(12275, 'esES', 'Me siento fatal por esto, amig$go:a. Temo que en mi precipitación por recuperar la mena extraña de la Mina de Hibergarde haya condenado al agente Slinkin.', 0), +(12276, 'esES', '$b$bPerseguido hasta un rincón sin salida. Oculto por ahora, pero saben que estoy aquí. Pronto me encontrarán.$b$bLos mineros trabajan sin descanso para desenterrar la mena extraña que sirve de combustible a las máquinas de guerra de la Plaga. Se bromea mucho. El idioma de los muertos me confunde, pero he sido capaz de identificar sonidos frecuentes y frases. La palabra "Yogg-Saron" la dicen con gran desdén y suele ir seguida de fuertes carcajadas. Se refieren a la mena como "saronita". ¿Su significado?', 0), +(12277, 'esES', 'Su muerte no será en vano, amigo. La información por la que Slinkin murió será decisiva en la derrota del Rey Exánime. Te prometo que lo haremos bien.', 0), +(12281, 'esES', '$b$bNo soy un científico, $N, así que tendras que perdonarme por mi comprensión plebeya de lo que está escrito. Ahora, acuerdo con el análisis - asumiendo que tengo la inteligencia suficiente o al menos la de un adolescente - todavía no sabemos nanai acerca de la Máquina de guerra de la Plaga. Lo único que sabemos es que la Plaga usa este asqueroso metal para crear sus máquinas de asedio, armaduras y armamento.', 0), +(12282, 'esES', 'Bien hecho, $N. Como predijo el destino, tú serás quien nos guíe a través de estos tiempos arduos. Ahora comienza el largo viaje.', 0), +(12283, 'esES', '¡Maldita sea! ¡¿Por qué no puedes venir con buenas noticias?!', 0), +(12285, 'esES', '¡Veremos como la devuelven a la vida sin su cabeza!$b$b$b$bEstoy un poco preocupado de que hayas dejado escapar al Gran Almirante, aún así sigues siendo el héroe del día, $N!$b$bElige lo que quieras... ¡te lo has ganado!', 0), +(12287, 'esES', 'Zelig ha enviado un mensaje, amigo. Te hemos estado esperando.$b$bYo soy Orik Corazón Veraz, paladín de la Cruzada Argenta. La sacerdotisa que se encuentra al otro lado de la hoguera es Tilda Darathan. En nombre de la Cruzada Argenta, trabajamos para apaciguar las almas malditas que intentan escapar de Hibergarde.', 0), +(12290, 'esES', '$b$bNo será mucho tiempo, $N.', 0), +(12291, 'esES', '$b$bNo lo saben. ¡Ninguno de ellos lo sabe! Piensan que Arthas es un gran héroe, cuando la verdad fue que Arthas ordenó que los barcos fueran quemados. ¡Fue Arthas quien dejó a nuestros aliados morir en estas tierras congeladas!$b$b$b$bNo todos los soldados de la flota del Príncipe perecieron en este gélido invierno. Yo era solo un muchacho cuando me dieron la oportunidad de combatir a la Plaga... para salvar nuestro hogar de una destrucción segura. Me arriesgué, $N.', 0), +(12301, 'esES', '$b$bHoy has hecho algo bueno, $N. Cientos de almas perdidas ahora están redimidas, gracias.', 0), +(12303, 'esES', '$b$b¿Confío en que no te hayas guardado nada de esto para ti? ¿No serás tan egoista cuando el destino de Rencor Venenoso está en juego, verdad?$b$bAdemás, te recompensaré con un porcentaje de lo que saque. No es mucho, pero en estos tiempos, todos tenemos que hacer sacrificios.', 0), +(12304, 'esES', '¿No puedes verlo ahora, $c? ¡Será el lugar de vacaciones de Rasganorte!$b$b¿Qué opinas del nombre, "Ensenada de Hansen", o tal vez "Bahía de $N"? Es algo pegadizo, ¿no lo crees?', 0), +(12305, 'esES', '$b$bSoy yo quien tiene una deuda de gratitud, héroe. Orik es como un hermano para mi. Has cambiado su vida y has dado una nueva esperanza a muchos otros .', 0), +(12309, 'esES', '¡Ay madre, qué lío hay ahí abajo! Apenas podía distinguir algo la última vez y por eso pedí rápidamente ayuda al Alto Comandante.$b$b$b$bTienes esa mirada de loco, $r. Te lo agradezco, porque tienes que estar loco para hacer lo que te voy a pedir.', 0), +(12311, 'esES', 'Si pudiéramos parar los ataques de la Plaga que provienen de fuera de la fortaleza, quizá podríamos enviar ayuda a Lord Fordragón en la Puerta de Cólera.', 0), +(12312, 'esES', 'Sea la que sea la información contenida en este libro, ¡debe de tener gran importancia! ¡Pude oír los aullidos y los lamentos resonando por la cripta mientras huías!$b$b¡Hay que informar al Alto Comandante!', 0), +(12319, 'esES', '$b$bHoy la suerte nos sonríe, $N. Conozco a la persona adecuada para ocuparse de este escrito.', 0), +(12320, 'esES', 'Quizás, con la motivación adecuada, Godfrey nos diga lo que sabe del escrito.$b$b$b$b¿No es así, alcalde?', 0), +(12321, 'esES', 'Deberíamos haber sabido lo del maldito mausoleo. ¡Esto es absurdo! El duque August Martinimigos y Ambo Calderilla serán enviados al frente para prepararse para nuestro próximo asalto.$b$bCuando hayas limpiado las minas, ¡te enviaré con Martinimigos para empezar nuestro ataque contra la Plaga de Naxxramas!$b$b¡Enviaremos la información que has reunido hasta ahora a la Puerta de Cólera sobre las alas de nuestro mejor grifo!', 0), +(12325, 'esES', 'Ah, aquí llega nuestr$go:a; distinguid$go:a; $ghéroe:heroína;. Bienvenido a la zona cero, $N. Permíteme que te ponga al día.$b$bLos ejércitos más poderosos de Thel\'zan han llegado hasta el Mausoleo de Hibergarde. Están sondando sus profundidades en busca de cuerpos y almas para enviar contra Hibergarde, ¡mientras Naxxramas lanza sin interrupción terribles máquinas de peste contra nosotros para mantenernos bajo su control!$b$bTenemos que atacar ahora y esperar que Lord Fordragón pueda resistir en la Puerta de Cólera un poco más.', 0), +(12326, 'esES', 'La razón por la que no llevo pantalones no importa. Digamos que recibí un poco de metralla de la Plaga en un sitio poco apropiado. Dejémoslo ahí, ¿vale?$b$bAsí que te libraste de todos esos vagones y mis soldados han llegado de una pieza. Impresionante. Eres un$go:a; de los pocos que ha conseguido llegar tan lejos, amig$go:a;. Siento que tengas que volver a Los Campos de Carroña. Sí, hemos tenido algún que otro contratiempo.', 0), +(12372, 'esES', '¡Es increíble! Permíteme decirte que sigo impresionado por lo que las razas más jóvenes parecéis capaces de hacer.$b$bEstamos en deuda contigo. ¿Volverás mañana para ayudarnos?', 0), +(12416, 'esES', 'Es una tarea repugnante, pero te doy las gracias querid$go:a; por hacerlo.$b$bNo podemos permitir que la Plaga avance hacia Reposo del Dragón o seguramente la perdamos.', 0), +(12417, 'esES', 'En la tierra, mis hermanos pueden volver a otorgar la vida. Los has salvado de un destino peor que el de la muerte.$b$bNo conozco ni una palabra en tu idioma que pueda expresar todo lo que esto significa para los de mi raza. Gracias, $r.', 0), +(12418, 'esES', 'Dahlia... ¿La han convertido?$b$bDahlia nos ha sido leal durante mucho tiempo... Si pueden corromper a un ser de su devoción, no es buen presagio para el resto de las razas jóvenes. Gracias por liberarla. Espero que haya encontrado algo de paz.$b$bHoy nos has honrado con tu ayuda desinteresada, $r. Informaré al consejo de lo que ha hecho tu raza hoy. Marcha con nuestra bendición.', 0), +(12419, 'esES', '¿La Plaga atrapó a Dahlia? Este es un triste día para todos nosotros.$b$bMe encargaré de buscar a un nuevo vigilante cuando hayamos retomado el santuario. Gracias... El Santuario de Dragones Rubí es un lugar sagrado para nosotros, y difícilmente olvidaremos los sacrificios que tu raza ha realizado.$b$bEs bueno saber que aún existen héroes como tú, te necesitaré algún día. Hasta entonces, que tus aventuras sean provechosas.', 0), +(12435, 'esES', 'Tú debes de ser $N. La reina me informó de que vendrías.$b$bSi estás dispuesto a ello, necesitamos tu ayuda.', 0), +(12438, 'esES', 'Bien hecho, $N. ¡Notificaré a Illusia que el héroe ha escuchado su llamada de socorro y ha salido victorioso en su encuentro! Aquí tienes tu recompensa.', 0), +(12439, 'esES', 'Definitivamente no queremos otra ruptura, colega. Haré todo lo posible para ayudarte en tu misión.', 0), +(12440, 'esES', 'Entonces Vas escuchó mi llamada de socorro, ¿eh? Aún no es tarde, colega.', 0), +(12441, 'esES', '¡Un trabajo excelente, $N! Notificaré a Drolfy que el héroe ascendió en su reto y que el cruel Patasangre se ha acabado!', 0), +(12442, 'esES', 'Al menos por ahora el Embate Escarlata sufre un revés en sus nefastos planes. Has prestdo un gran servicio a Hibergarde, $N.', 0), +(12447, 'esES', 'Estoy intentando decidir qué es lo que más me sorprende... Que vinieras a ayudar a un dragón negro, o que aún estés entero tras haber hablado con Nalice.$b$bSus palabras están cargadas de malicia, pero supongo que Reposo del Dragón también puede contener a alguien de nuestra raza de vez en cuando.$b$bO quizás solo es por los ejércitos del Vuelo Rojo que se agolpan a su alrededor.', 0), +(12448, 'esES', 'Es una tarea repugnante, pero te doy las gracias querid$go:a; por hacerlo.$b$bNo podemos permitir que la Plaga avance hacia Reposo del Dragón o seguramente la perdamos.', 0), +(12449, 'esES', 'En la tierra, mis hermanos pueden dar vida de nuevo. Los has salvado de un destino mucho peor que la muerte.$b$bNo conozco una palabra en tu lengua que pueda expresar cuánto significa esto para los de mi especie. Gracias, $r.', 0), +(12450, 'esES', 'Dahlia... ¿La han transformado?$b$bDahlia ha sido leal a nosotros por mucho tiempo... si ellos pueden corromper a un ser de su devoción, no presagia nada bueno para el resto de las razas jóvenes. Gracias por liberarla. Espero que haya encontrado algo de paz.$b$bHoy nos has honrado con tu ayuda desinteresada, $r. Quizás no todos los miembros de la Horda tengan el corazón negro de sus ancestros. Enviaré un mensaje al consejo sobre lo que los tuyos han logrado aquí.', 0), +(12454, 'esES', 'No te arrepientas del papel que has desempeñado en el ciclo de la vida. El nacimiento, la muerte y el renacimiento forman parte del orden natural.', 0), +(12455, 'esES', '¡Justo a tiempo! Algunos de mis soldados se impacientaron un poco y decidieron atacar las criptas directamente al este y al oeste de aquí. Evidentemente, pronto se vieron aplastados por esos zombis estúpidos. ¡Tenemos que rescatar a los supervivientes!', 0), +(12456, 'esES', 'No llores por Alystros. Ha dedicado su vida entera a la defensa del Santuario de Dragones Esmeralda y renacerá.$b$bEspero que cuando vuelva con nosotros no le afecte la confusión de la Pesadilla Esmeralda, que, al parecer, se ha apoderado de La Soñadora.', 0), +(12457, 'esES', '$N, ¡no había visto una hazaña como esta desde Silithus!$b$b¡Me aseguraré de que todos y cada uno de esos soldados envíe una recomendación a Lord Fordragón para que te asciendan!$b$bAhora, vayamos a asuntos más urgentes. Nos han llegado informes de nuestros exploradores de que Thel\'zan está cerca.', 0), +(12458, 'esES', 'Incluso ahora puedo sentir el pulso de la naturaleza de estas semillas.$b$b¡Tenemos que usarlas debidamente!', 0), +(12459, 'esES', 'Genial. Me lo suponía. Debería intentar contactar con Ysera y ver si lo aprueba.$b$bSi se la puede sacar de su pesadilla, claro.$b$bGracias, $N. Has sido indispensable.', 0), +(12460, 'esES', '¿Te envía la embajadora Lauriel?$b$bSi vuelves a hablar con ella, dile le estamos muy agradecidos por su ayuda. Estamos luchando en muchos frentes distintos.', 0), +(12461, 'esES', '¿Te envía el embajador Golluck?$b$bSi vuelves a hablar con él, dile le estamos muy agradecidos por su ayuda. Estamos luchando en muchos frentes distintos.', 0), +(12462, 'esES', 'Eso le dará a Ambo un poquito más de tiempo para planificar las cosas.', 0), +(12463, 'esES', '$b$bAnotación primera:$b$bArrastran cadáveres por el túnel hasta la cámara de embalsamamiento para hacer experimentos. Hay un suministro infinito en este mausoleo. Lo que no puede reanimarse, se convierte en un ensamblaje osario de algún tipo.$b$bAnotación segunda:$b$bMe temo que este exánime Thel\'zan esconde un oscuro secreto. ¿Quién es? ¿Podría haber sido... uno de nosotros?$b$bAnotación tercera: He descubierto el emplazamiento de la filacteria del exánime. Está...$b$b', 0), +(12464, 'esES', 'Un gesto desafortunado pero necesario para librarnos de Abbendis. En otra vida, creo que podría haberme imaginado luchar cara a cara contra ella.$b$b$b$bMe preocupa un poco ese Gran almirante que mencionas. ¿Barean Viento Oeste, dices? No me puedo creer que aún siga vivo. Tiene que ser anciano. Pero tendremos que ocuparnos de él más tarde.$b$bMientras tanto, creo que te has ganado una recompensa y un descansito.', 0), +(12465, 'esES', '$b$bHay una buena noticia y una mala noticia. ¿Cuál quieres oír primero?$b$bQué demonios, ¿por qué te iba a dar a elegir? La buena notica es que si conseguimos la filacteria de Thel\'zan, podremos acabar con él. La mala noticia es que la filacteria la tiene una vermis de escarcha bastante grande.', 0), +(12466, 'esES', 'Ahora ya sabes por qué llaman a este lugar el Baldío del Dragón. Los huesos de las bestias están desparramados hasta donde alcanza la vista.$b$bProbablemente hayamos matado a doce o más vermis de escarcha y esto parece no terminar nunca. La Plaga tiene combustible para diez mil más con todos estos huesos por aquí esparcidos.$b$b$b$bNo quiero aburrirte con los detalles, héroe. Tenemos a la vermis que buscas a buen recaudo.', 0), +(12467, 'esES', 'Hemos perdido a tantos buenos soldados por ese monstruo de Thel\'zan... Ojalá pudiera estar allí para ver cómo aplastas su filacteria delante de él y terminas con su existencia.', 0), +(12469, 'esES', '¡Ja! Con que hemos perdido a otro más, ¿eh? Esas arpías se están convirtiendo en un verdadero estorbo.$b$b¡No importa! Hay trabajo que hacer. ¿Nos echas una mano?', 0), +(12470, 'esES', '¿Viste a Nozdormu? No tiene sentido.$b$b$b$bEn realidad, ¡son buenas noticias! No teníamos ni idea de cuándo ni dónde se había ido el Señor del Tiempo. Solo sabíamos que había desaparecido para solucionar unos temas muy importantes.$b$bAunque no hayamos descubierto al líder del Vuelo Infinito, has descubierto que Nozdormu está vivo, bien y ¡listo para volver a luchar contra ellos!$b$b¡Gracias, $N!', 0), +(12472, 'esES', 'Cuando estés preparad$go:a; colocaré la filacteria delante de la puerta y llamaré a Thel\'zan.', 0), +(12473, 'esES', 'Hibergarde se ha salvado gracias a ti, $N. Pensar que $gun:una; $ghombre:mujer; pueda cambiar el curso de las aguas de una batalla es duro de comprender para muchos. Sin embargo, aquí estamos... ¡victoriosos! Has conseguido devolver la fe a esta gente y te has ganado el respeto de tus oficiales.$b$b$b$bLord Fordragón ha regresado a Angrathar para preparar a nuestras fuerzas para la destrucción de la Puerta de Cólera y ¡ha pedido que te unas a él! No podría recomendarle soldado mejor para el trabajo, $N.', 0), +(12474, 'esES', 'Esta mención de honor solo la reciben aquellos que se han desvivido por cumplir la llamada del deber de la Alianza. Podría contar el número de veces que he otorgado una a alguien, $N, y ¡nunca ha sido alguien que se lo mereciera más que tú! ¡Enhorabuena!$b$bAhora, concentrémonos en la Puerta de Cólera. ¿Te suena? Debería. Esa extraña mena que encontraste en la Mina de Hibergarde es exactamente de lo que está hecha la Puerta de Cólera. ¡Encontraremos su flaqueza y haremos que todos la vean!', 0), +(12475, 'esES', '¿Una cueva? ¿Puede ser? ¡No puede haber otra correlación!', 0), +(12476, 'esES', 'Esperemos que ahora le quede claro el mensaje al Embate. Espero que la paliza fuera suficiente para que reflexionen sobre sus convicciones.', 0), +(12477, 'esES', '$b$bA Abbendis se le ha ido la cabeza del todo. ¿Ahora le habla la Luz?$b$bAparte de las locas divagaciones, esta publicación nos da una visión dentro de la mente de los zelotes Escarlata que nunca habíamos visto antes. Ha sido un buen descubrimiento, $N. Lord Fordragón estará encantado.', 0), +(12478, 'esES', '¿Muradin vive? ¿Puede ser? ¡Tengo que informar al rey Barbabronce de inmediato!$b$bNecesito consultarlo con el orbe. ¡Tiene que haber más información en algún lugar!', 0), +(12487, 'esES', '¿Quién eres tú?$b$b¡Dime por qué no tengo que partirte en dos!', 0), +(12488, 'esES', '¿Te enviaron desde Martillo de Agmar? ¡Ya era hora!$b$bNo, la ayuda no es para mí. No puedo prescindir de nadie, pero tú valdrás.', 0), +(12495, 'esES', 'Has venido buscando mi consejo, mortal. Yo ya lo sé, pero... ¿y tú? ¿Sabes a qué te enfrentas?$b$b$b$bAl norte de aquí se encuentran las tierras donde agonizó Galakrond, progenitor de la raza draconiana. Fue de Galakrond de donde los titanes crearon a los Aspectos. Imagina el poder de Galakrond. Su tamaño, por sí solo, ¡era mayor que el de todos los Aspectos juntos! Ahora, intenta comprender lo que la Plaga está haciendo en el Cementerio de Dragones.$b$bLas vermis de escarcha, mortal, deberían ser la última de tus preocupaciones.', 0), +(12496, 'esES', 'Has venido buscando mi consejo, mortal. Yo ya lo sé, pero... ¿y tú? ¿Sabes a qué te enfrentas?$b$b$b$bAl norte de aquí se encuentran las tierras donde agonizó Galakrond, progenitor de la raza draconiana. Fue de Galakrond de donde los titanes crearon a los Aspectos. Imagina el poder de Galakrond. Su tamaño, por sí solo, ¡era mayor que el de todos los Aspectos juntos! Ahora, intenta comprender lo que la Plaga está haciendo en el Cementerio de Dragones.$b$bLas vermis de escarcha, mortal, deberían ser la última de tus preocupaciones.', 0), +(12497, 'esES', 'La bravura de los mortales nunca deja de sorprenderme. La muerte fija su fría mirada sobre vosotros y, a cambio, ¡os levantáis para aceptar su desafío! Esa es la razón de que seáis tan queridos... Y tan odiados.$b$bAunque el Vuelo Rojo esté implicado en la guerra con Malygos, hay algo que podemos hacer para ayudar.', 0), +(12498, 'esES', 'Sabía que volverías, $N. Has ayudado al Acuerdo del Reposo del Dragón y salvado a tu pueblo de una muerte certera. ¡Que todos lo sepan y recuerden para toda la posteridad!', 0), +(12499, 'esES', 'Debes saber esto: todo lo que has hecho ha hecho posible este momento. Sin tu ayuda, ¡estaríamos acabados! Ahora, ¡haz guardia mientras voy allí y acabo con esto!', 0), +(12500, 'esES', 'Mi padre no se equivocó contigo, $N. Todo lo que dijo ha ocurrido... Solo queda una tarea que cumplir. Ahora dirigiré a los Kor\'kron hasta el frente de batalla. Se acerca el momento de acabar con esta guerra. ¡La tiranía del Rey Exánime acaba hoy!$b$bOcupa mi puesto, $N, y vigila a nuestro ejército.', 0), +(12542, 'esES', 'A solo unos pasos de aquí yace el imperio Drakkari.$b$b$b$bDurante miles de años, los Drakkari han permanecido aislados dentro de los límites de sus ciudades templo y zigurats. Es sorprendente contemplar estos restos ahora. Más arriba, después de las escaleras fatídicas que llevan hasta Zul\'Drak, la Fortaleza de Drak\'Tharon está en ruinas. El primer nivel de Zul\'Drak está arrasado...$b$b¿Por qué ha esperado la Plaga hasta ahora para atacar?', 0), +(12545, 'esES', 'Como puedes ver, la máquina de guerra de la Plaga sigue en marcha, aunque los soldados de la Horda y la Alianza permanecen divididos, convirtiéndose de esta manera en presas fáciles. Por esta razón, tenemos que mantenernos unidos.$b$b$b$bLa Cruzada Argenta necesita $gun:una; $ghombre:mujer; como tú. ¿Quizá estés interesado en unirte a nuestra causa? ¿Luchar y morir en el bando del portador de La Crematoria?', 0), +(12766, 'esES', 'Tú debes ser $N. Me dijeron que vendrías.$b$b$b$bTengo algo de lo que quiero que te encargues. Si lo haces, demostrarás tu valía a los dragones.', 0), +(12767, 'esES', 'Tú debes ser $N. Me dijeron que vendrías.$b$b$b$bTengo algo de lo que quiero que te encargues. Si lo haces, demostrarás tu valía a los dragones.', 0), +(12768, 'esES', '¿Ya has vuelto, $N?$b$bCeristrasz envió una carta sobre ti. Gracias por lo que has hecho en el Santuario de Dragones Rubí.', 0), +(12769, 'esES', '¿Ya has vuelto, $N?$b$bVargastrasz envió una carta sobre ti. Gracias por lo que has hecho en el Santuario de Dragones Rubí.', 0), +(12789, 'esES', 'Genial. Valus debe de haber recibido mi informe.$b$bVamos a trabajar, $r.', 0), +(13077, 'esES', 'Te saludo, $r.$b$bLa preocupación es clara en tu rostro. Por favor, dime qué te preocupa.', 0), +(13078, 'esES', 'Con las Lágrimas de Dahlia y magia antigua, crearé una pequeña cantidad de esperanza para tu gran cruzado.', 0), +(13079, 'esES', 'El aliento de Alexstrasza... ¿has ido a la mismísima reina dragón? Estoy extremadamente agradecido.$b$bEntiendo los riesgos de dicha limpieza y estoy preparado. Continúa, $c.', 0), +(13167, 'esES', '$b$b¡YA está!$b$b¡$r! Tu nombre quedará grabado en la historia de nuestro pueblo.$b$bEstoy en deuda contigo...', 0), +(13182, 'esES', 'Me apena ver que las cosas han llegado a esto. Si pudiéramos devolver la grandeza de otrora a nuestro imperio...', 0), +(13187, 'esES', 'Lo has hecho bien, $c.$b$bQué tus hazañas creen esperanzas en nuestra gente para que un día podamos reclamar la ciudad de nuestros ancestros.', 0), +(13190, 'esES', '¡Ajá!$b$b¡Que la esencia burlona de derrota se zampe sus almas vacías!$b$bGracias, $c. Hoy has pegado un buen revés a los no vivos.', 0), +(13204, 'esES', '¿Tienes idea de lo que has estado paseando, $c?$b$bLas bestias de cueva de las que has estado recogiendo estas cosas no eliminan sus residuos de forma convencional. Quizá quieras lavarte las manos...$b$bAsí que gracias por pensar en mí, pero si encuentras mas de estas quédatelas para ti.', 0), +(13343, 'esES', '¡Oh, dios mío, lo has conseguido! No estaba segura.$b$bEntraste y saliste del flujo temporal un segundo durante la batalla. Pensé que te habíamos perdido.$b$bPero aquí estás sana y salva, has rescatado tu pasado del otro lado del bucle temporal en el que estabas.$b$b¡Eres $gel héroe:la heroína; temporal, $N!', 0), +(13372, 'esES', 'Estas llaves las tienen los miembros más antiguos del Vuelo Azul. Solo a ellos le ha sido confíada por su maestro, Malygos.$b$b¡Esta es la oportunidad que hemos estado esperando para atacar el Aspecto de la Magia!$b$b$b$bNo puedes usar la llave tal como está para acceder al iris de enfoque, pero puedo imbuirte con una parte de mi poder; suficiente para permitirte usarlo y abrir el iris una fracción de segundo.$b$b¡Será suficiente para provocar la ira de Malygos!', 0), +(13375, 'esES', 'Estas llaves las tienen los miembros más antiguos del Vuelo Azul. Solo a ellos le ha sido confíada por su maestro, Malygos.$b$b¡Esta es la oportunidad que hemos estado esperando para atacar el Aspecto de la Magia!$b$b$b$bNo puedes usar la llave tal como está para acceder al iris de enfoque, pero puedo imbuirte con una parte de mi poder; suficiente para permitirte usarlo y abrir el iris una fracción de segundo.$b$b¡Será suficiente para provocar la ira de Malygos!', 0), +(13384, 'esES', 'Este es un día muy triste, no solo para los dragones, sino para todas las criaturas vivientes de Azeroth. Hemos perdido a uno de nuestros más reflexivos, inteligentes y antiguos compañero. La magia ahora está sin su guardián.$b$bEsperemos que esta haya sido una sabia decisión en los próximos años, $N. Todavía se avecina una tormenta en el horizonte y ahora nos encontramos sin uno de nuestros defensores más poderosos.', 0), +(13385, 'esES', 'Este es un día muy triste, no solo para los dragones, sino para todas las criaturas vivientes de Azeroth. Hemos perdido a uno de nuestros más reflexivos, inteligentes y antiguos compañero. La magia ahora está sin su guardián.$b$bEsperemos que esta haya sido una sabia decisión en los próximos años, $N. Todavía se avecina una tormenta en el horizonte y ahora nos encontramos sin uno de nuestros defensores más poderosos.', 0), +(26012, 'esES', 'Gracias por acudir a la llamada de Rhonin, valiente aventurer$go:a;.$b$bDeja que comparta contigo lo que sabemos sobre los acontecimientos recientes y apreciaré enormemente cualquier ayuda que puedas prestar.', 0), +(26013, 'esES', '$c, ¡gracias otra vez por rescatarme de las garras de Baltharus!$b$bSin embargo, aún queda mucho trabajo por hacer...', 0), +(26034, 'esES', '$b$bMortal, te estamos muy agradecidos por expulsar a los invasores del Sagrario. Pero no hay palabras para describir la intranquilidad que provocan estas noticias sobre el Destructor. Tengo mucho que hablar con los otros miembros del Acuerdo.$b$bToma esto como muestra de mi gratitud mientras os preparáis para la tormenta que se avecina.', 0), +-- esMX missing reward_locale +(11958, 'esMX', 'No puedo decir que me encante pedirte hacer ciertas cosas en nuestro nombre. Es todo cuanto podemos hacer para preparar nuestra marcha con prontitud, aunque aún no sabemos adónde ir.$b$bMis hechiceros me dicen que estás aquí para salvar al mundo de El Que Camina por las Sombras.$b$bConfío en que salvarás también a los pueblos de esas tierras.', 0), +(11959, 'esMX', 'El honorable sacrificio de Loguhn que has realizado es exactamente lo que mi pueblo necesita. Ahora aprovecharemos al máximo la disputa de los wolvar para ocupar su lugar.$b$bEso bastará.', 0), +(11960, 'esMX', 'Bueno, supongo que has salvado a muchos. Gracias, $r.$b$bAhora los wolvar tendrán una oportunidad de sobrevivir junto con nosotros. Si es que logramos sobrevivir, claro.$b$b¿Crees que podrías volver mañana para salvar a más cachorros?', 0), +(11977, 'esMX', 'Lo que ves aquí son todos los restos de los taunka de Tundra Boreal y de Cementerio de Dragones. Un pueblo quebrantado... maltratado y llevado al border de la extinción por la Plaga.$b$b$b$bSolo la horda puede salvarles ahora. Solo la horda puede reparar sus espíritus quebrantados. Los cuidaremos hasta que recuperen su salud y reforzarán a la Horda en Rasganorte.', 0), +(11978, 'esMX', '¡Esto es exactamente lo que necesitamos, $N! Al blandir las armas de la Horda, sus espíritus se regocijarán y obtendrán la protección necesaria contra la Plaga.$b$b¿Estás preparada para la ceremonia de iniciación?$b$b$b$bSerás la única en admitir a nuestros nuevos aliados en la Horda.', 0), +(11979, 'esMX', 'Lo que ves aquí son todos los restos de los taunka de Tundra Boreal y de Cementerio de Dragones. Un pueblo quebrantado... maltratado y llevado al border de la extinción por la Plaga.$b$b$b$bSolo la horda puede salvarles ahora. Solo la horda puede reparar sus espíritus quebrantados. Los cuidaremos hasta que recuperen su salud y reforzarán a la Horda en Rasganorte.', 0), +(11980, 'esMX', '$b$bNos has devuelto nuestro honor, $N. Tanto Tor\'zin como yo te agradecemos tu gesto desinteresado.', 0), +(11983, 'esMX', 'Gracias, comandante $N. No les quedaba nada. Tú les has brindado un propósito, y el propósito brinda esperanza... Esperanza para un futuro nuevo... para una nueva vida.', 0), +(11995, 'esMX', 'Te he estado esperando, $c. Tú y yo tenemos mucho trabajo por delante.', 0), +(11996, 'esMX', '¿Qué te hizo tardar tanto? El tiempo espera solo a los Aspectos, $r.$b$bTenemos mucho trabajo que hacer, tú y yo.', 0), +(11999, 'esMX', 'Qué curioso, buscan un acuerdo con El Etereum. Los etéreos podrían resultar un poderoso aliado para Malygos y su locura.$b$b¡No puede ser!', 0), +(12000, 'esMX', 'Qué curioso, buscan un acuerdo con El Etereum. Los etéreos podrían resultar un poderoso aliado para Malygos y su locura.$b$b¡No puede ser!', 0), +(12004, 'esMX', 'Es una lástima que Goramosh afirmara que ya se había llegado a un acuerdo.$b$bNo obstante, son dos gusanos menos de los que preocuparnos. Pasemos a asuntos más importantes.', 0), +(12005, 'esMX', 'Está bien, $c, solo ponlos en la tierra frente al trono de Agmar.$b$bEs una lástima que Goramosh afirmara que ya se había llegado a un acuerdo.$b$bNo obstante, son dos gusanos menos de los que preocuparnos. Pasemos a asuntos más importantes.', 0), +(12006, 'esMX', 'Muy bien, has satisfecho mi petición con creces.$b$bGracias, $r.', 0), +(12008, 'esMX', 'Aunque no cabe duda de que has apoyado la causa de la Horda por doquier, muchos otros han estado trabajando para propagar nuestra influencia en Rasganorte. Incluso ahora tenemos fuerzas estableciendo sus bases en los espacios congelados de estos desolados páramos.$b$bTenemos rodeada a la Plaga. La victoria se acerca a medida que nuestro ejército se aglomera a los pies de la Puerta de Cólera, Angrathar. Pronto echaremos abajo la puerta y abriremos una brecha en Corona de Hielo.$b$bPero aún queda mucho trabajo por hacer...$b$b¡Primero hay que detener a los nerubianos!', 0), +(12009, 'esMX', 'Soy un simple pescador. El mundo se ha vuelto del revés de repente. Es absurdo.$b$bEspero que consigas volverlo a poner otra vez del derecho.', 0), +(12011, 'esMX', 'Esas no son las noticias que esperaba oír, $r.$b$bNo, no... has hecho bien en contármelo, pero me temo que mi viejo enemigo ha regresado a estas aguas.', 0), +(12013, 'esMX', 'Tienes mi más sincera gratitud, $N.$b$bSi aún no lo has hecho, deberías alertar a tus superiores del peligro que el Vuelo Azul ha desatado. ¡Amenazan con destruirnos a todos haciendo estallar el eje de líneas Ley que fluye bajo los Jardines!', 0), +(12016, 'esMX', 'Has conseguido matar a Kili\'ua... quizás puedas hacer lo mismo con Tu\'u\'gwar.$b$bO quizás no.', 0), +(12017, 'esMX', '¡Debemos regocijarnos de tu éxito, joven amigo! Hay sangre en el agua, ¡la de nuestro enemigo!$b$bTendrás la gratitud eterna de este viejo pescador, y sin duda la de todos los Kalu\'ak cuando se lo cuente.$b$bPor favor, insisto, toma algo como recompensa.', 0), +(12028, 'esMX', '¿Fantasmas y galimatías? ¡No puede ser!$b$bDebemos lograr más orientación.', 0), +(12030, 'esMX', 'Te he estado esperando, $r. Vi volar a tu espíritu y pude sentir algo místico en tu mirada.$b$bTu destino y el de los Kalu\'ak ahora están unidos.', 0), +(12031, 'esMX', 'No es una tarea muy agradable, pero sí es necesaria y compasiva.$b$bY ahora hay algo más esperándote que puedes hacer por los Kalu\'ak.', 0), +(12032, 'esMX', '¿Hablaste con Oacha\'noa?$b$bSi su deseo es que permanezcamos con tu pueblo, que así sea. El ancestro Ko\'nani lo aceptará como nuestro destino, sea para bien o para mal.$b$bMi pueblo cree que todas las almas se funden con la magia del mundo. ¡Tenemos que luchar contra los intentos de controlar la magia del dragón azul o estaremos todos perdidos!$b$bNunca pensé que un $r se convertiría en el campeón de los Kalu\'ak, pero queda demostrado que me equivoqué. En nombre de todo mi pueblo te doy las gracias, $N.$b$bQue los dioses te sonrían y te mantengan a salvo.', 0), +(12033, 'esMX', '$b$b¿Así que nos entendemos? Volveré con mi señor y le diré que has aceptado.', 0), +(12034, 'esMX', 'Por tierra y por aire: así es como acabaremos con la amenaza Anub\'ar.', 0), +(12036, 'esMX', 'Ese maldito foso debe de estar conectado directamente con Azjol-Nerub. Esto es peor de lo que pensaba.$b$b$b$bBuscar y destrozar... Ese será el siguiente paso.', 0), +(12039, 'esMX', 'Es tan ligero... ¡como si no pesase nada! Necesitaré tiempo para analizar el metal y ver qué puedo hacer con él. ¡Pruebas! ¡Tengo que realizar pruebas!$b$bSeguiré en contacto, $N. Si sale algo de esto, serás la primera en saberlo.', 0), +(12040, 'esMX', 'Hay miles más y ocupan cada oscuro hueco de Rasganorte. Tú sola no podrás, pero juntos... Quizás...', 0), +(12041, 'esMX', '$b$b¿Esto es lo que creo que es? Con la información de estas páginas ¡APLASTAREMOS a los Anub\'ar que nos asalten!$b$bHas obrado correctamente al traerme este documento, $N. ¡Quizás te permitamos observar o incluso participar en la batalla final de Angrathar! ¡LOK\'TAR!', 0), +(12043, 'esMX', 'Ah, sí, los no-muertos. Aquí está tu premio, piérdete.', 0), +(12044, 'esMX', '¡Ja! ¡Ese es un buen cargamento! ¿Qué tal tu espalda, bien?', 0), +(12045, 'esMX', '¡Perfecto! Son incluso más puntiagudos de lo que esperaba. Los apilaré en la nieve hasta que la bomba esté lista.$b$bVeamos, ¿qué viene ahora...?', 0), +(12046, 'esMX', 'Bien, bien... Estos servirán. Las bombas de metralla están casi terminadas.$b$bEspera... ¿qué les ha pasado a mis fragmentos de hielo? Narf me dijo que los fragmentos de esos elementales podrían estar encantados, ¡pero se están deshaciendo, igual que los que le cuelgan a Narf de su barbilla gruñona!', 0), +(12047, 'esMX', '¡Formidable! En principio es lo último que necesito para poder probar las nuevas bombas. ¡Dame un momento y las probaré!', 0), +(12048, 'esMX', 'Estos están en un estado excelente, $N. Tengo que ponerme a trabajar inmediatamente. Si sale algo de esto, ¡serás la primera en saberlo!', 0), +(12049, 'esMX', '¡Ja, ja! ¡Uno de esos trozos de carne aterrizó de lleno por aquí! ¡Bien hecho!', 0), +(12050, 'esMX', 'Si un árbol cae en el bosque y no puedes oírlo con el ruido de la sierra, ¿hace algún ruido en realidad?', 0), +(12052, 'esMX', 'Eso hará que esas feas se lo piensen dos veces. Toma... tu recompensa, llévatela bien lejos.', 0), +(12053, 'esMX', '¡Los hemos aplastado en tierra! ¡Pronto lo haremos en el aire!', 0), +(12055, 'esMX', '$N, si no me equivoco, ¡has descifrado la clave que nos permitirá averiguar exactamente qué se traen entre manos las fuerzas de los cazadores de magos!', 0), +(12056, 'esMX', '$b$bTe dije que te cogería...$b$bAquí está tu recompensa, $c. Ya tenemos un dolor de cabeza menos.', 0), +(12057, 'esMX', '$b$bSalvajes... encuadernado con carne de orco... Este idioma... Nunca se ha podido demostrar su existencia. Es el idioma de la muerte... El idioma de la Plaga.', 0), +(12059, 'esMX', '$N, si no me equivoco, ¡has descifrado la clave que nos permitirá averiguar exactamente qué se traen entre manos las fuerzas de los cazadores de magos!', 0), +(12060, 'esMX', 'Eso que describes... ¡es una proyección del Arcanomicón!$b$b$b$bEl Arcanomicón es un mapa de todas las intersecciones de líneas Ley mágicas del mundo. El Vuelo Azul lo ha estado usando para encontrar y destruir los "pilares principales" de líneas Ley para devolver el poder mágico a El Nexo.$b$bLa cuestión es: ¿por qué dirigir un sendero de destrucción tal hacia el este cuando debería dirigirse hacia el oeste?', 0), +(12061, 'esMX', 'Eso que describes... ¡es una proyección del Arcanomicón!$b$b$b$bEl Arcanomicón es un mapa de todas las intersecciones de líneas Ley mágicas del mundo. El Vuelo Azul lo ha estado usando para encontrar y destruir los "pilares principales" de líneas Ley para devolver el poder mágico a El Nexo.$b$bLa cuestión es: ¿por qué dirigir un sendero de destrucción tal hacia el este cuando debería dirigirse hacia el oeste?', 0), +(12063, 'esMX', '¡Mi padre sigue vivo! ¡Debemos salvarlo! Y no puedo hacerlo solo, $r. ¡Debes ayudarme!', 0), +(12064, 'esMX', 'Sí, esto servirá.$b$b$b$bAquí está, $c. Con esta llave, mi padre podrá salir de la prisión de los Anub\'ar.', 0), +(12065, 'esMX', 'Qué extraño que grabara esta información sobre ti por medio de la magia.$b$bBueno, entonces no solo sabemos que han canalizado el flujo de poder que salía de los Jardines Reposo Lunar, sino que también lo están modificando de alguna manera. Pero, ¿qué quieren hacer con toda esa magia?$b$bEsto se está poniendo feo, $N. No me gusta, ¡ni un pelo!', 0), +(12066, 'esMX', 'Qué extraño que grabara esta información sobre ti por medio de la magia.$b$bBueno, entonces no solo sabemos que han canalizado el flujo de poder que salía de los Jardines Reposo Lunar, sino que también lo están modificando de alguna manera. Pero, ¿qué quieren hacer con toda esa magia?$b$bEsto se está poniendo feo, $N. No me gusta, ¡ni un pelo!', 0), +(12067, 'esMX', 'Ah, no... y te enviamos ahí para matarla, ¿verdad?$b$b$b$bLo siento. Me encargaré de que su padre, el archimago Malin de Ventormenta, reciba la carta inmediatamente. No te preocupes, no tendrá consecuencias sobre ti... no fue culpa tuya.$b$bIntenta olvidarlo. No había manera posible de que lo supieras, $N.', 0), +(12069, 'esMX', 'Eres $gun:una; valiente $c, $N. Has prestado un gran servicio a la Horda rescatando al Gran Jefe.', 0), +(12071, 'esMX', '$b$bAsí que tú eres $gel:la; que está armando tanto revuelo, ¿eh?', 0), +(12072, 'esMX', '$b$b¡Y han sido aplastadas en el aire! ¡Quizá pronto te llamen desde Angrathar, héroe!', 0), +(12075, 'esMX', 'Esto es perfecto. Gracias, $c.', 0), +(12076, 'esMX', 'Aún están frescas... Dame un minuto y mezclaré esto con el resto del elixir que he preparado.', 0), +(12077, 'esMX', 'Seré sincero, pequeño. No me fío de esta mezcla y no la usaré. Guárdala... Si te fías más de ese pigmeo verde que yo, quizás te sea de ayuda.', 0), +(12078, 'esMX', 'Estos servirán. Quizás cuando estas bestias hayan crecido del todo, las llevaré para presentárselas personalmente a los gigantes.$b$bPor si quieres saber mi opinión, no son más que un montón de rocas inútiles.', 0), +(12079, 'esMX', 'Una satisfactoria muestra de la matanza.', 0), +(12080, 'esMX', 'Así que está muerta. Como debería ser. De hecho tus intenciones resultan ser más nobles que las del enano.$b$bA través del cañón norte encontrarás el Bosque de Canto de Cristal. Es un lugar peligroso y maldito, $r. Si ese lugar es tu siguiente destino, ve con cuidado.$b$bTen, toma esto por tus esfuerzos, pequeñ$go:a;, y aléjate de esta tierra conflictiva con mi bendición.', 0), +(12083, 'esMX', '¿Están usándolo para dar más poder a su ejército? No tiene sentido, los cazadores de magos no son tan poderosos.$b$bEsto tiene que significar que solo usan la magia en el punto final del lugar hacia el que están canalizando la línea Ley.$b$b¡Vamos a necesitar más información si queremos ser capaces de detenerlos!', 0), +(12084, 'esMX', '¿Están usándolo para dar más poder a su ejército? No tiene sentido, los cazadores de magos no son tan poderosos.$b$bEsto tiene que significar que solo usan la magia en el punto final del lugar al que están canalizando la línea Ley.$b$b¡Vamos a necesitar más información si tengo que idear un plan para detenerlos!', 0), +(12085, 'esMX', 'Jajajajajaja... uf uf, qué conmovedor.$b$b$b$b¿Qué dije? ¡Traidores! Aún así, conocí a Deino en una ocasión. ¡Ella al menos es una troll con honor!$b$bMe encargaré de que averigüe lo que le sucedió a su hermano. Incluso olvidaré decirle que fuiste tú quien lo mató.$b$b$b$b¡Ahora te tengo, $c!', 0), +(12089, 'esMX', 'No es el primero de esos hechiceros cobardes en traicionarnos, y seguro que tampoco será el último. Pero qué pena también... Era uno de nuestros mejores magos. Podía invocar un buffet que te hacía la boca agua y a tu corazón dar brincos de alegría...$b$b¡BUÁ!', 0), +(12090, 'esMX', 'Tienes a ese feo hijo de un caballo, ¿eh? Bueno, eso es una molestia menos con la que nuestros soldados tendrán que lidiar en estas tierras congeladas.', 0), +(12091, 'esMX', '¡Ya era hora de que alguien pusiera fin a la matanza de esa bestia asquerosa! Muy buen trabajo, $N.', 0), +(12092, 'esMX', '¡Gracias, $r! Hemos perdido tanto ya. Gracias a ti no perderemos a los más majestuosos de los niños de Rasganorte.$b$bPronto partiré para reunirme con los ancestros que salvaste para ver si nos pueden ayudar en estos momentos de apuros.', 0), +(12095, 'esMX', '¿Qué te hace pensar que has tenido éxito donde Rokhan falló?', 0), +(12096, 'esMX', 'Te doy las gracias, $c.$b$bEn cuanto termine de observar lo que esos asquerosos boticarios están tramando, me dirigiré al bosque para ver si puedo convencer a esos ancestros a que se unan a nosotros.$b$bSi no, ¡los convenceré de que no ataquen a quienes los salvaron!', 0), +(12097, 'esMX', '¡JA! ¡Lo has hecho! Los soldados en la Puerta de Cólera están en deuda contigo, $N! Esto seguramente convenza a alguno de ellos para estar otro día más en la tierra.', 0), +(12098, 'esMX', 'Encuentras el cadáver del comandante de los cazadores de magos.$b$bA juzgar por su apariencia, y por las condiciones en las que está el ejército a su alrededor, no debieron de ahogarse solamente. Más bien, cuando invocaron el foco hacia sí, no se esperaban que los elementales surgieran de las profundidades del lago para atacar.$b$bParece que los cazadores de magos fueron los causantes de su propia muerte.', 0), +(12100, 'esMX', 'Me duele en el alma tener que acabar con esos animales, pero es una tarea que se debe realizar. Ahora debemos movernos en nuestro siguiente paso: Inoculación.', 0), +(12101, 'esMX', '¿Ese tonto hombre-vaca de verdad adquirió un órgano resistente a la putrefacción? Maldición... Estaba seguro de que esa tarea mantendría ocupada su mente deformada bien hasta el próximo milenio.$b$bBueno dáselo, chic$go:a;. Tengo muchas cosas que hacer sin que tus débiles necesidades se interpongan en mi camino.', 0), +(12102, 'esMX', 'No fue tan difícil, ¿verdad que no?$b$bAhora dame un segundo para preparar la vacuna.', 0), +(12104, 'esMX', '$b$bAhora solo queda una cosa más.', 0), +(12106, 'esMX', 'Encuentras el cadáver del comandante de los cazadores de magos.$b$bA juzgar por su apariencia, y por las condiciones en las que está el ejército a su alrededor, no debieron de ahogarse solamente. Más bien, cuando invocaron el foco hacia sí, no se esperaban que los elementales surgieran de las profundidades del lago para atacar.$b$bParece que los cazadores de magos fueron los causantes de su propia muerte.', 0), +(12107, 'esMX', '¿¡QUÉ!?$b$b$b$bClaro, tendríamos que haber adivinado que eso era lo que han estado haciendo todo este tiempo. Rápido, no hay tiempo que perder.$b$b¡Debemos alertar en Reposo del Dragón!', 0), +(12110, 'esMX', '¿¡QUÉ!?$b$b$b$bClaro, tendríamos que haber adivinado que eso era lo que han estado haciendo todo este tiempo. Rápido, no hay tiempo que perder.$b$b¡Debemos alertar en Reposo del Dragón!', 0), +(12111, 'esMX', 'Has realizado un gesto digno de honra, $N. Elige una recompensa.', 0), +(12112, 'esMX', 'Se me ocurren varias cosas que podrías hacer, adelante, quédate un ratito.', 0), +(12115, 'esMX', 'Solo hay dos cosas en esta vida que me interesan, peón, y ninguna de ellas me involucra en traducir un tomo de la Plaga para ti.$b$bSin embargo... quizás podriamos trabajar en algo que nos beneficiara a ambos.$b$b$b$bEsta es mi espada rúnica, Bifrost. Bifrost tiene sed de sangre del Rey Exánime y de sus seguidores, pero primero debo grabarle runas de poder: simbolos de escarcha, sangre, y profano. Consígueme fuentes de energía adecuadas y traduciré tu Tomo.', 0), +(12119, 'esMX', '¿Una carta de presentación para un encuentro con la reina? Déjame ver.$b$bCualquiera que sea este asunto, espero que sea importante. ¡El cielo está lleno de atacantes azules hoy!', 0), +(12122, 'esMX', '¿Una carta de presentación para un encuentro con la reina? Déjame ver.$b$bCualquiera que sea este asunto, espero que sea importante. ¡El cielo está lleno de atacantes azules hoy!', 0), +(12123, 'esMX', 'Eres realmente valiente al traernos esta información. Empezaba a preguntarme por qué el Vuelo Azul había mostrado tanto atrevimiento para iniciar un ataque sobre el templo. Ahora que sabemos que están usando cantidades ingentes de magia pura, suponen una grave amenaza para Azeroth.$b$b$b$bHipócrita, pero así es. Si Malygos no entra en razón, no nos queda más opción que responder a su ataque.', 0), +(12124, 'esMX', 'Eres realmente valiente al traernos esta información. Empezaba a preguntarme por qué el Vuelo Azul había mostrado tanto atrevimiento para iniciar un ataque sobre el templo. Ahora que sabemos que están usando cantidades ingentes de magia pura, suponen una grave amenaza para Azeroth.$b$b$b$bHipócrita, pero así es. Si Malygos no entra en razón, no nos queda más opción que responder a su ataque.', 0), +(12125, 'esMX', 'Una tarea simple para $gun:una; simpl$gón:ona;. Has actuado según mis expectativas.', 0), +(12126, 'esMX', '$b$bImpresionante. Has superado a uno de los caballeros de la Muerte de Arthas... No cabe duda de que no estabas sol$go:a;, pero aun así...', 0), +(12127, 'esMX', 'Ya puedo sentir el frío fluyendo en mi interior, $N.', 0), +(12132, 'esMX', 'El poder que ostento me cuesta un precio muy alto, $N. Muchos caballeros, tanto de la luz como de las sombras, perdieron sus vidas en la última batalla en la Esperanza de la Luz. El futuro se presenta desalentador, pero al menos ahora sé a lo que me enfrento. El Rey Exánime nunca flaqueará y, aunque solo sea por esa razón, ¡debe morir!', 0), +(12136, 'esMX', '$b$b¿QUÉ? No puede ser verdad. ¡Conozco a algunos de estos orcos desde hace años!$b$bDéjame, $N, tengo mucho que hacer y muchos traidores que ejecutar.$b$bCoge alguno de estos objetos por las molestias. Hoy has rendido un gran servicio a la Horda.', 0), +(12140, 'esMX', '¡Con la ayuda de un chamán tan poderoso, seguro que salimos victoriosos en la Puerta de Cólera!', 0), +(12142, 'esMX', 'Ya era hora.', 0), +(12143, 'esMX', 'Colmillo Helado, ¿eh? Ya había oído ese nombre antes. Bien hecho, $c. Con un poco de suerte, podremos volver a dedicarnos a la amenaza de los dragones.', 0), +(12144, 'esMX', 'Ya era hora, colega.', 0), +(12145, 'esMX', 'Puño de Hielo, ¿eh? Ya había oído ese nombre antes. Bien hecho, $c. Con un poco de suerte, podremos volver a dedicarnos a la amenaza de los dragones.', 0), +(12146, 'esMX', 'Sí, es extraño que un magnatauro lleve un objeto como este... y preocupante. Me alegro de que me lo hayas traído.', 0), +(12147, 'esMX', 'Sí, es extraño que un magnatauro lleve un objeto como este... y preocupante. Me alegro de que me lo hayas traído.', 0), +(12148, 'esMX', 'Así que es cierto. No podrían haber elegido mejor momento para un ataque así... Entre la Plaga y la lucha contra el Vuelo Azul es poco probable que alguien más se haya dado cuenta.', 0), +(12149, 'esMX', 'Excelente trabajo. Nadie fue capaz de decirme quién podría ser ese líder, pero pude desvelar el nombre de alguien que tenía la respuesta.', 0), +(12150, 'esMX', 'Grom\'thar el Portador del Trueno. Bien. Terminemos con cualquier amenaza que constituyan esos magnatauros, aquí y ahora.', 0), +(12151, 'esMX', 'Eres realmente formidable.$b$bCon la muerte de Grom\'thar el Portador del Trueno, podemos dejar que el resto de magnatauros se peguen entre ellos y volver a centrarnos en otras amenazas más importantes.$b$bUn trabajo impresionante, $c.', 0), +(12166, 'esMX', 'Hemos hecho lo que podíamos por las criaturas de esta tierra. ¡Ahora debemos actuar directamente contra los causantes de todo esto!', 0), +(12167, 'esMX', 'Bien hecho.$b$b¡Me desharé de estas prendas mugrientas limpiándolas en la Poza de la Luna y destruyéndolas mediante el poder de la diosa!', 0), +(12168, 'esMX', 'Así que el líder de los cultores se ha revelado. Tenemos un nombre.$b$b¡La vanidad y el orgullo serán su perdición!', 0), +(12169, 'esMX', 'Tras la destrucción del sumo cultor, podremos barrer del mapa al resto de sus fuerzas, y la tierra y sus criaturas se recuperarán.$b$bGracias, $N. Que la diosa ilumine tu camino.', 0), +(12171, 'esMX', '$b$b¡Vas a coger el hipogrifo más rápido que tengo, $r! Esta información debe llegar al Alto comandante Aterravermis sin dilación!', 0), +(12172, 'esMX', 'Muy bien. Si tú estas listo, entonces yo también.', 0), +(12173, 'esMX', 'Muy bien. Si tú estas listo, entonces yo también.', 0), +(12174, 'esMX', '$b$b¿Sabes dónde están ahora los de esta lista? Mira afuera, junto a la puerta frontal. Son los que cuelgan de los arcos.$b$bCebo de necrófagos...', 0), +(12188, 'esMX', 'Esto servirá, $N. ¿Esos perros patéticos lucharon o se limitaron a ducharte con sus lágrimas fantasmales de pena?$b$bAy, se emocionan tanto...', 0), +(12189, 'esMX', 'Hemos tenido un problemilla... SIN IMPORTANCIA. Todo aquel que ha intentado tocar el añublo se ha vaporizado. Estamos trabajando para ajustar un poco la fórmula y que así no te mate al instante solo con mirarla. ¡La buena noticia es que creo que ya casi la tengo!', 0), +(12200, 'esMX', 'Creo que el añublo ya está listo para probar. Da la casualidad de que la ciudadela del terror, Naxxramas, está asediando la Fortaleza de Hibergarde. Los muertos vivientes surgen de debajo de la propia tierra sobre la que se construyó Hibergarde, ansiosos por llevar a cabo las órdenes de Kel\'Thuzad.$b$bLa Alianza, por supuesto, se encuentra superada en número y armas. ¡Gente que descansa en paz en el Mausoleo de Hibergarde se ha levantado de nuevo, hambrienta de carne!$b$bQuizás deberíamos darles a probar un poquito de añublo, ¿eh?', 0), +(12205, 'esMX', 'Muy bien hecho, $r. ¿Confío en que fuiste ingeniosamente cruel en tu matanza?$b$bVamos a ver, cuanto puedo ofrecerte por los féretros... em, discúlpame, oféretros?', 0), +(12206, 'esMX', '¿QUÉ! ¡Imposible! Hemos perfeccionado el añublo. Es cien por cien letal.$b$b$b$bEsto es muy raro. Dame ese frasco, $c. ¡No me daré a conocer como la boticaria que lo echó todo a perder!', 0), +(12209, 'esMX', 'Ya no hueles tan fresc$go:a;, carne fresca.$b$bMuy bien, esto servirá. ¿Por qué nombre debería llamarte, $c?', 0), +(12211, 'esMX', '¡Dios! He llegado a pensar por un momento que iba a tener que probar las ratas con alguien para asegurarme de que no eran defectuosas.$b$b¡Por fin un poco de progreso!', 0), +(12214, 'esMX', '¡Nada me hace más feliz que un trabajo bien hecho!$b$bHas rendido un gran servicio a Rencor Venenoso al conseguirnos esos caballos, $c.', 0), +(12218, 'esMX', 'Por mucho que me irrite ayudar a la Alianza con esto, ¡declaro el éxito de este ensayo de campo! Próxima parada: ¡Martillo de Agmar!', 0), +(12221, 'esMX', '$b$b¡Glorioso! ¡Tal y como especifiqué!$b$bAquí tienes tu pago, $N. Guarda para ti todo lo que has visto y hecho. Este trabajo es información clasificada... Se irá revelando según sea necesario.', 0), +(12224, 'esMX', '¡Lok\'tar ogar! He oído mucho acerca de ti, $N. ¡Tus cicatrices de batalla son profundas - un testamento de tu dedicación y poder!$b$bCon los ataques al flanco del Rey Exánime aplastados en ambos sitios tanto el oeste como en el este, solo quedan las fuerzas de la puerta. ¡Ganamos terreno cada día, pronto atravesaremos sus murallas y nos adentraremos en la Ciudadela de Corona de Hielo!$b$bUna vez que detengamos a los dragones esqueléticos, el Alto señor Bolvar Fordragon y yo saldremos al campo.', 0), +(12230, 'esMX', '$b$bExcelente. ¡Su perdida es mi... nuestra ganancia!$b$b¿No tuviste problemas con ninguno de estos por el camino? Alguno de ellos parecen bastante inestables. ¡Seré un no-muerto, pero valoro mi existencia!', 0), +(12232, 'esMX', '¡Un día feliz!$b$b¡Al no usar el tiempo y recursos de los boticarios para terminar el trabajo, estoy seguro de que atraerá la atención del alto ejecutor!$b$bUsar la cabeza, pensar en más allá, de eso se trata. Sí, Sí, tú también nos eschaste una mano.$b$bAquí, ¿Si te doy algo prometerás no mencionar tu participación en todo esto?', 0), +(12234, 'esMX', 'Bueno, ¿a qué estás esperando, $r? ¡Dámelos!', 0), +(12235, 'esMX', '$b$b¿Has montado uno alguna vez? Es sencillo, amig$go:a;. Tan solo súbete y dile adónde ir.', 0), +(12237, 'esMX', '¡Un trabajo magnífico, $N! Ahora que han vuelto nuestros ciudadanos, podemos volver a poner esto en marcha.', 0), +(12239, 'esMX', '¿Tiene noticias de la maestra de espías?$b$b$b$bDéjame ver esos planos.', 0), +(12240, 'esMX', 'Sabía que mi hermana no nos iba a defraudar.$b$bBien hecho, $N. El aserradero del Embate estará fuera de servicio por un tiempo, lo que significa que no habrá nuevas construcciones ni ballestas.$b$bGracias por ayudarme a estar a la altura del nombre de mi familia', 0), +(12243, 'esMX', '¡Jajajajajajajajajajaja!$b$bSin sus cuadernos de ruta, ahora no tienen adonde huir.$b$bMe parece que es el fin del Embate Escarlata, y justo cuando estaban empezando. Qué triste.$b$bJe.', 0), +(12245, 'esMX', '¿Qué? ¿Esperabas que te mandáramos a rescatarlos?$b$b¿Por qué haríamos eso si se han dejado capturar?$b$bRasganorte es un lugar frío, joven $N. Te sugiero que te adaptes.', 0), +(12251, 'esMX', '$b$b¿Los ciudadanos han vuelto al trabajo? ¿Ya? ¡Excelente, soldado! Volveremos a levantar esta ciudad y la fortificaremos en poco tiempo. Dentro de no mucho, los refuerzos estarán preparados para unirnos a la lucha con Lord Fordragón en la Puerta de Cólera.$b$bEstoy adelantando acontecimientos, claro, ya que queda mucho aún por hacer antes de que podamos incluso pensar en enviarte en ayuda de Bolvar.', 0), +(12252, 'esMX', '¿Sabían todo eso? ¿Y quién demonios es ese gran almirante Barean Viento Oeste del que hablaba?$b$b$b$bMás vale que lo averigüemos antes de tener que adivinarlo. Espero que dejaras tu... digo, mi marca.', 0), +(12253, 'esMX', '$b$bHaces la labor de la Luz, $N.$b$bMe temo que nuestra labor acaba de empezar.', 0), +(12254, 'esMX', '¿Una nueva bendición escrita al final del libro dices?$b$b$b$b¡Maldita sea! ¡Esa es la letra del Sumo Abad! Me jugaría tu vida por ello.', 0), +(12258, 'esMX', 'Quizás ahora descansarán tranquilos, pues sus espíritus son libres para ascender hasta la Luz.$b$bMis pensamientos y oraciones vuelven ahora hacia Lord Fordragón y hacia nuestro ejército en la Puerta de Cólera. Debemos ser perseverantes, aunque solo sea para hacerles ganar tiempo suficiente para derrotar al Rey Exánime. Hibergarde no puede caer.', 0), +(12260, 'esMX', 'No está mal, $c. Ahora que la imagen del sacerdote está atrapada en el espejo, Tengo algo mas que necesito hacer.', 0), +(12261, 'esMX', 'Excelente. Cuando empiecen a huir de miedo, el resguardo estará ahí para darles una cariñosa despedida.', 0), +(12262, 'esMX', '¿Suplicaron por sus vidas miserables? Enclenques.', 0), +(12263, 'esMX', 'Somos el Vuelo Negro. Hemos arrojado la destrucción sobre las tierras de Azeroth durante miles de años. Ese decrépito Culto de los Malditos venera la muerte y nosotros estamos contentos de ayudarles.', 0), +(12264, 'esMX', 'Oír sus gritos... ver su último suspiro de vida evadirse de sus cuerpos desdichados... es vigorizante, ¿no crees?$b$bLo disfruto.', 0), +(12265, 'esMX', 'Bien. Aún quedan cosas que hacer.', 0), +(12266, 'esMX', 'Ah, eres tú.$b$bEsperaba que fuera Serinar quien volviese cuando todo estuviera hecho... Supongo que está distraído con algo a lo que matar. ¡Se está perdiendo una batalla gloriosamente sucia!$b$b¿Aún sigues ahí? Ya he terminado contigo.', 0), +(12267, 'esMX', 'Los huesos de mis hermanos están libres de esa porquería. Me has ayudado mucho, y por tanto, recibirás una recompensa apropiada.', 0), +(12269, 'esMX', '$b$bSe las llevaré a nuestro encargado del registro y le daré la mala noticia a las familias de los mineros.$b$bAún queda mucho por hacer si queremos tener éxito aquí y, a la larga, en la Puerta de Cólera. Lord Fordragón depende de nosotros.', 0), +(12271, 'esMX', '¿Y dices que la tenía Alphonse? Claro.$b$bLa reconozco de mis días de juventud como torturador en la corte del rey Terenas del caído Lordaeron. Se la conoce como la vara de coacción.$b$b.$b$b¡Tengo una idea de cómo podemos hacer buen uso de ella!', 0), +(12272, 'esMX', 'Este puede ser el momento, el segundo exacto en que la situación se vuelva contra la Plaga. Has demostrado ser un héroe de la Alianza, al menos ante mis ojos, $N.$b$bAhora, si fueras tan amable de dejarme solo... Necesito más tiempo para estudiar esta mena y apartar las impurezas y debilidades.$b$bSigue adelante, aliad$go:a;. Me pondré en contacto contigo cuando tenga más noticias.', 0), +(12273, 'esMX', '$b$bAhora eres mi $c favorita, $N. Si te apetece, me gustaría que pensaras en unirte como oficial a La Mano de la Venganza.$b$b¡Podemos comenzar como un guardia de la muerte, y en unas pocas décadas creo que tendrás lo que se necesita para ser un ejecutor junior!$b$b¿No? Bueno no nos apresuremos... tómate tu tiempo y reflexiona.', 0), +(12274, 'esMX', '¡¿Qué diablos está pasando aquí?!$b$b¿Saltó por su cuenta? ¿Seguro que no lo empujaste?$b$b', 0), +(12275, 'esMX', 'Me siento fatal por esto, amig$go:a. Temo que en mi precipitación por recuperar la mena extraña de la Mina de Hibergarde haya condenado al agente Slinkin.', 0), +(12276, 'esMX', '$b$bPerseguido hasta un rincón sin salida. Oculto por ahora, pero saben que estoy aquí. Pronto me encontrarán.$b$bLos mineros trabajan sin descanso para desenterrar la mena extraña que sirve de combustible a las máquinas de guerra de la Plaga. Se bromea mucho. El idioma de los muertos me confunde, pero he sido capaz de identificar sonidos frecuentes y frases. La palabra "Yogg-Saron" la dicen con gran desdén y suele ir seguida de fuertes carcajadas. Se refieren a la mena como "saronita". ¿Su significado?', 0), +(12277, 'esMX', 'Su muerte no será en vano, amigo. La información por la que Slinkin murió será decisiva en la derrota del Rey Exánime. Te prometo que lo haremos bien.', 0), +(12281, 'esMX', '$b$bNo soy un científico, $N, así que tendras que perdonarme por mi comprensión plebeya de lo que está escrito. Ahora, acuerdo con el análisis - asumiendo que tengo la inteligencia suficiente o al menos la de un adolescente - todavía no sabemos nanai acerca de la Máquina de guerra de la Plaga. Lo único que sabemos es que la Plaga usa este asqueroso metal para crear sus máquinas de asedio, armaduras y armamento.', 0), +(12282, 'esMX', 'Bien hecho, $N. Como predijo el destino, tú serás quien nos guíe a través de estos tiempos arduos. Ahora comienza el largo viaje.', 0), +(12283, 'esMX', '¡Maldita sea! ¡¿Por qué no puedes venir con buenas noticias?!', 0), +(12285, 'esMX', '¡Veremos como la devuelven a la vida sin su cabeza!$b$b$b$bEstoy un poco preocupado de que hayas dejado escapar al Gran Almirante, aún así sigues siendo el héroe del día, $N!$b$bElige lo que quieras... ¡te lo has ganado!', 0), +(12287, 'esMX', 'Zelig ha enviado un mensaje, amigo. Te hemos estado esperando.$b$bYo soy Orik Corazón Veraz, paladín de la Cruzada Argenta. La sacerdotisa que se encuentra al otro lado de la hoguera es Tilda Darathan. En nombre de la Cruzada Argenta, trabajamos para apaciguar las almas malditas que intentan escapar de Hibergarde.', 0), +(12290, 'esMX', '$b$bNo será mucho tiempo, $N.', 0), +(12291, 'esMX', '$b$bNo lo saben. ¡Ninguno de ellos lo sabe! Piensan que Arthas es un gran héroe, cuando la verdad fue que Arthas ordenó que los barcos fueran quemados. ¡Fue Arthas quien dejó a nuestros aliados morir en estas tierras congeladas!$b$b$b$bNo todos los soldados de la flota del Príncipe perecieron en este gélido invierno. Yo era solo un muchacho cuando me dieron la oportunidad de combatir a la Plaga... para salvar nuestro hogar de una destrucción segura. Me arriesgué, $N.', 0), +(12301, 'esMX', '$b$bHoy has hecho algo bueno, $N. Cientos de almas perdidas ahora están redimidas, gracias.', 0), +(12303, 'esMX', '$b$b¿Confío en que no te hayas guardado nada de esto para ti? ¿No serás tan egoista cuando el destino de Rencor Venenoso está en juego, verdad?$b$bAdemás, te recompensaré con un porcentaje de lo que saque. No es mucho, pero en estos tiempos, todos tenemos que hacer sacrificios.', 0), +(12304, 'esMX', '¿No puedes verlo ahora, $c? ¡Será el lugar de vacaciones de Rasganorte!$b$b¿Qué opinas del nombre, "Ensenada de Hansen", o tal vez "Bahía de $N"? Es algo pegadizo, ¿no lo crees?', 0), +(12305, 'esMX', '$b$bSoy yo quien tiene una deuda de gratitud, héroe. Orik es como un hermano para mi. Has cambiado su vida y has dado una nueva esperanza a muchos otros .', 0), +(12309, 'esMX', '¡Ay madre, qué lío hay ahí abajo! Apenas podía distinguir algo la última vez y por eso pedí rápidamente ayuda al Alto Comandante.$b$b$b$bTienes esa mirada de loco, $r. Te lo agradezco, porque tienes que estar loco para hacer lo que te voy a pedir.', 0), +(12311, 'esMX', 'Si pudiéramos parar los ataques de la Plaga que provienen de fuera de la fortaleza, quizá podríamos enviar ayuda a Lord Fordragón en la Puerta de Cólera.', 0), +(12312, 'esMX', 'Sea la que sea la información contenida en este libro, ¡debe de tener gran importancia! ¡Pude oír los aullidos y los lamentos resonando por la cripta mientras huías!$b$b¡Hay que informar al Alto Comandante!', 0), +(12319, 'esMX', '$b$bHoy la suerte nos sonríe, $N. Conozco a la persona adecuada para ocuparse de este escrito.', 0), +(12320, 'esMX', 'Quizás, con la motivación adecuada, Godfrey nos diga lo que sabe del escrito.$b$b$b$b¿No es así, alcalde?', 0), +(12321, 'esMX', 'Deberíamos haber sabido lo del maldito mausoleo. ¡Esto es absurdo! El duque August Martinimigos y Ambo Calderilla serán enviados al frente para prepararse para nuestro próximo asalto.$b$bCuando hayas limpiado las minas, ¡te enviaré con Martinimigos para empezar nuestro ataque contra la Plaga de Naxxramas!$b$b¡Enviaremos la información que has reunido hasta ahora a la Puerta de Cólera sobre las alas de nuestro mejor grifo!', 0), +(12325, 'esMX', 'Ah, aquí llega nuestr$go:a; distinguid$go:a; $ghéroe:heroína;. Bienvenido a la zona cero, $N. Permíteme que te ponga al día.$b$bLos ejércitos más poderosos de Thel\'zan han llegado hasta el Mausoleo de Hibergarde. Están sondando sus profundidades en busca de cuerpos y almas para enviar contra Hibergarde, ¡mientras Naxxramas lanza sin interrupción terribles máquinas de peste contra nosotros para mantenernos bajo su control!$b$bTenemos que atacar ahora y esperar que Lord Fordragón pueda resistir en la Puerta de Cólera un poco más.', 0), +(12326, 'esMX', 'La razón por la que no llevo pantalones no importa. Digamos que recibí un poco de metralla de la Plaga en un sitio poco apropiado. Dejémoslo ahí, ¿vale?$b$bAsí que te libraste de todos esos vagones y mis soldados han llegado de una pieza. Impresionante. Eres un$go:a; de los pocos que ha conseguido llegar tan lejos, amig$go:a;. Siento que tengas que volver a Los Campos de Carroña. Sí, hemos tenido algún que otro contratiempo.', 0), +(12372, 'esMX', '¡Es increíble! Permíteme decirte que sigo impresionado por lo que las razas más jóvenes parecéis capaces de hacer.$b$bEstamos en deuda contigo. ¿Volverás mañana para ayudarnos?', 0), +(12416, 'esMX', 'Es una tarea repugnante, pero te doy las gracias querid$go:a; por hacerlo.$b$bNo podemos permitir que la Plaga avance hacia Reposo del Dragón o seguramente la perdamos.', 0), +(12417, 'esMX', 'En la tierra, mis hermanos pueden volver a otorgar la vida. Los has salvado de un destino peor que el de la muerte.$b$bNo conozco ni una palabra en tu idioma que pueda expresar todo lo que esto significa para los de mi raza. Gracias, $r.', 0), +(12418, 'esMX', 'Dahlia... ¿La han convertido?$b$bDahlia nos ha sido leal durante mucho tiempo... Si pueden corromper a un ser de su devoción, no es buen presagio para el resto de las razas jóvenes. Gracias por liberarla. Espero que haya encontrado algo de paz.$b$bHoy nos has honrado con tu ayuda desinteresada, $r. Informaré al consejo de lo que ha hecho tu raza hoy. Marcha con nuestra bendición.', 0), +(12419, 'esMX', '¿La Plaga atrapó a Dahlia? Este es un triste día para todos nosotros.$b$bMe encargaré de buscar a un nuevo vigilante cuando hayamos retomado el santuario. Gracias... El Santuario de Dragones Rubí es un lugar sagrado para nosotros, y difícilmente olvidaremos los sacrificios que tu raza ha realizado.$b$bEs bueno saber que aún existen héroes como tú, te necesitaré algún día. Hasta entonces, que tus aventuras sean provechosas.', 0), +(12435, 'esMX', 'Tú debes de ser $N. La reina me informó de que vendrías.$b$bSi estás dispuesto a ello, necesitamos tu ayuda.', 0), +(12438, 'esMX', 'Bien hecho, $N. ¡Notificaré a Illusia que el héroe ha escuchado su llamada de socorro y ha salido victorioso en su encuentro! Aquí tienes tu recompensa.', 0), +(12439, 'esMX', 'Definitivamente no queremos otra ruptura, colega. Haré todo lo posible para ayudarte en tu misión.', 0), +(12440, 'esMX', 'Entonces Vas escuchó mi llamada de socorro, ¿eh? Aún no es tarde, colega.', 0), +(12441, 'esMX', '¡Un trabajo excelente, $N! Notificaré a Drolfy que el héroe ascendió en su reto y que el cruel Patasangre se ha acabado!', 0), +(12442, 'esMX', 'Al menos por ahora el Embate Escarlata sufre un revés en sus nefastos planes. Has prestdo un gran servicio a Hibergarde, $N.', 0), +(12447, 'esMX', 'Estoy intentando decidir qué es lo que más me sorprende... Que vinieras a ayudar a un dragón negro, o que aún estés entero tras haber hablado con Nalice.$b$bSus palabras están cargadas de malicia, pero supongo que Reposo del Dragón también puede contener a alguien de nuestra raza de vez en cuando.$b$bO quizás solo es por los ejércitos del Vuelo Rojo que se agolpan a su alrededor.', 0), +(12448, 'esMX', 'Es una tarea repugnante, pero te doy las gracias querid$go:a; por hacerlo.$b$bNo podemos permitir que la Plaga avance hacia Reposo del Dragón o seguramente la perdamos.', 0), +(12449, 'esMX', 'En la tierra, mis hermanos pueden dar vida de nuevo. Los has salvado de un destino mucho peor que la muerte.$b$bNo conozco una palabra en tu lengua que pueda expresar cuánto significa esto para los de mi especie. Gracias, $r.', 0), +(12450, 'esMX', 'Dahlia... ¿La han transformado?$b$bDahlia ha sido leal a nosotros por mucho tiempo... si ellos pueden corromper a un ser de su devoción, no presagia nada bueno para el resto de las razas jóvenes. Gracias por liberarla. Espero que haya encontrado algo de paz.$b$bHoy nos has honrado con tu ayuda desinteresada, $r. Quizás no todos los miembros de la Horda tengan el corazón negro de sus ancestros. Enviaré un mensaje al consejo sobre lo que los tuyos han logrado aquí.', 0), +(12454, 'esMX', 'No te arrepientas del papel que has desempeñado en el ciclo de la vida. El nacimiento, la muerte y el renacimiento forman parte del orden natural.', 0), +(12455, 'esMX', '¡Justo a tiempo! Algunos de mis soldados se impacientaron un poco y decidieron atacar las criptas directamente al este y al oeste de aquí. Evidentemente, pronto se vieron aplastados por esos zombis estúpidos. ¡Tenemos que rescatar a los supervivientes!', 0), +(12456, 'esMX', 'No llores por Alystros. Ha dedicado su vida entera a la defensa del Santuario de Dragones Esmeralda y renacerá.$b$bEspero que cuando vuelva con nosotros no le afecte la confusión de la Pesadilla Esmeralda, que, al parecer, se ha apoderado de La Soñadora.', 0), +(12457, 'esMX', '$N, ¡no había visto una hazaña como esta desde Silithus!$b$b¡Me aseguraré de que todos y cada uno de esos soldados envíe una recomendación a Lord Fordragón para que te asciendan!$b$bAhora, vayamos a asuntos más urgentes. Nos han llegado informes de nuestros exploradores de que Thel\'zan está cerca.', 0), +(12458, 'esMX', 'Incluso ahora puedo sentir el pulso de la naturaleza de estas semillas.$b$b¡Tenemos que usarlas debidamente!', 0), +(12459, 'esMX', 'Genial. Me lo suponía. Debería intentar contactar con Ysera y ver si lo aprueba.$b$bSi se la puede sacar de su pesadilla, claro.$b$bGracias, $N. Has sido indispensable.', 0), +(12460, 'esMX', '¿Te envía la embajadora Lauriel?$b$bSi vuelves a hablar con ella, dile le estamos muy agradecidos por su ayuda. Estamos luchando en muchos frentes distintos.', 0), +(12461, 'esMX', '¿Te envía el embajador Golluck?$b$bSi vuelves a hablar con él, dile le estamos muy agradecidos por su ayuda. Estamos luchando en muchos frentes distintos.', 0), +(12462, 'esMX', 'Eso le dará a Ambo un poquito más de tiempo para planificar las cosas.', 0), +(12463, 'esMX', '$b$bAnotación primera:$b$bArrastran cadáveres por el túnel hasta la cámara de embalsamamiento para hacer experimentos. Hay un suministro infinito en este mausoleo. Lo que no puede reanimarse, se convierte en un ensamblaje osario de algún tipo.$b$bAnotación segunda:$b$bMe temo que este exánime Thel\'zan esconde un oscuro secreto. ¿Quién es? ¿Podría haber sido... uno de nosotros?$b$bAnotación tercera: He descubierto el emplazamiento de la filacteria del exánime. Está...$b$b', 0), +(12464, 'esMX', 'Un gesto desafortunado pero necesario para librarnos de Abbendis. En otra vida, creo que podría haberme imaginado luchar cara a cara contra ella.$b$b$b$bMe preocupa un poco ese Gran almirante que mencionas. ¿Barean Viento Oeste, dices? No me puedo creer que aún siga vivo. Tiene que ser anciano. Pero tendremos que ocuparnos de él más tarde.$b$bMientras tanto, creo que te has ganado una recompensa y un descansito.', 0), +(12465, 'esMX', '$b$bHay una buena noticia y una mala noticia. ¿Cuál quieres oír primero?$b$bQué demonios, ¿por qué te iba a dar a elegir? La buena notica es que si conseguimos la filacteria de Thel\'zan, podremos acabar con él. La mala noticia es que la filacteria la tiene una vermis de escarcha bastante grande.', 0), +(12466, 'esMX', 'Ahora ya sabes por qué llaman a este lugar el Baldío del Dragón. Los huesos de las bestias están desparramados hasta donde alcanza la vista.$b$bProbablemente hayamos matado a doce o más vermis de escarcha y esto parece no terminar nunca. La Plaga tiene combustible para diez mil más con todos estos huesos por aquí esparcidos.$b$b$b$bNo quiero aburrirte con los detalles, héroe. Tenemos a la vermis que buscas a buen recaudo.', 0), +(12467, 'esMX', 'Hemos perdido a tantos buenos soldados por ese monstruo de Thel\'zan... Ojalá pudiera estar allí para ver cómo aplastas su filacteria delante de él y terminas con su existencia.', 0), +(12469, 'esMX', '¡Ja! Con que hemos perdido a otro más, ¿eh? Esas arpías se están convirtiendo en un verdadero estorbo.$b$b¡No importa! Hay trabajo que hacer. ¿Nos echas una mano?', 0), +(12470, 'esMX', '¿Viste a Nozdormu? No tiene sentido.$b$b$b$bEn realidad, ¡son buenas noticias! No teníamos ni idea de cuándo ni dónde se había ido el Señor del Tiempo. Solo sabíamos que había desaparecido para solucionar unos temas muy importantes.$b$bAunque no hayamos descubierto al líder del Vuelo Infinito, has descubierto que Nozdormu está vivo, bien y ¡listo para volver a luchar contra ellos!$b$b¡Gracias, $N!', 0), +(12472, 'esMX', 'Cuando estés preparad$go:a; colocaré la filacteria delante de la puerta y llamaré a Thel\'zan.', 0), +(12473, 'esMX', 'Hibergarde se ha salvado gracias a ti, $N. Pensar que $gun:una; $ghombre:mujer; pueda cambiar el curso de las aguas de una batalla es duro de comprender para muchos. Sin embargo, aquí estamos... ¡victoriosos! Has conseguido devolver la fe a esta gente y te has ganado el respeto de tus oficiales.$b$b$b$bLord Fordragón ha regresado a Angrathar para preparar a nuestras fuerzas para la destrucción de la Puerta de Cólera y ¡ha pedido que te unas a él! No podría recomendarle soldado mejor para el trabajo, $N.', 0), +(12474, 'esMX', 'Esta mención de honor solo la reciben aquellos que se han desvivido por cumplir la llamada del deber de la Alianza. Podría contar el número de veces que he otorgado una a alguien, $N, y ¡nunca ha sido alguien que se lo mereciera más que tú! ¡Enhorabuena!$b$bAhora, concentrémonos en la Puerta de Cólera. ¿Te suena? Debería. Esa extraña mena que encontraste en la Mina de Hibergarde es exactamente de lo que está hecha la Puerta de Cólera. ¡Encontraremos su flaqueza y haremos que todos la vean!', 0), +(12475, 'esMX', '¿Una cueva? ¿Puede ser? ¡No puede haber otra correlación!', 0), +(12476, 'esMX', 'Esperemos que ahora le quede claro el mensaje al Embate. Espero que la paliza fuera suficiente para que reflexionen sobre sus convicciones.', 0), +(12477, 'esMX', '$b$bA Abbendis se le ha ido la cabeza del todo. ¿Ahora le habla la Luz?$b$bAparte de las locas divagaciones, esta publicación nos da una visión dentro de la mente de los zelotes Escarlata que nunca habíamos visto antes. Ha sido un buen descubrimiento, $N. Lord Fordragón estará encantado.', 0), +(12478, 'esMX', '¿Muradin vive? ¿Puede ser? ¡Tengo que informar al rey Barbabronce de inmediato!$b$bNecesito consultarlo con el orbe. ¡Tiene que haber más información en algún lugar!', 0), +(12487, 'esMX', '¿Quién eres tú?$b$b¡Dime por qué no tengo que partirte en dos!', 0), +(12488, 'esMX', '¿Te enviaron desde Martillo de Agmar? ¡Ya era hora!$b$bNo, la ayuda no es para mí. No puedo prescindir de nadie, pero tú valdrás.', 0), +(12495, 'esMX', 'Has venido buscando mi consejo, mortal. Yo ya lo sé, pero... ¿y tú? ¿Sabes a qué te enfrentas?$b$b$b$bAl norte de aquí se encuentran las tierras donde agonizó Galakrond, progenitor de la raza draconiana. Fue de Galakrond de donde los titanes crearon a los Aspectos. Imagina el poder de Galakrond. Su tamaño, por sí solo, ¡era mayor que el de todos los Aspectos juntos! Ahora, intenta comprender lo que la Plaga está haciendo en el Cementerio de Dragones.$b$bLas vermis de escarcha, mortal, deberían ser la última de tus preocupaciones.', 0), +(12496, 'esMX', 'Has venido buscando mi consejo, mortal. Yo ya lo sé, pero... ¿y tú? ¿Sabes a qué te enfrentas?$b$b$b$bAl norte de aquí se encuentran las tierras donde agonizó Galakrond, progenitor de la raza draconiana. Fue de Galakrond de donde los titanes crearon a los Aspectos. Imagina el poder de Galakrond. Su tamaño, por sí solo, ¡era mayor que el de todos los Aspectos juntos! Ahora, intenta comprender lo que la Plaga está haciendo en el Cementerio de Dragones.$b$bLas vermis de escarcha, mortal, deberían ser la última de tus preocupaciones.', 0), +(12497, 'esMX', 'La bravura de los mortales nunca deja de sorprenderme. La muerte fija su fría mirada sobre vosotros y, a cambio, ¡os levantáis para aceptar su desafío! Esa es la razón de que seáis tan queridos... Y tan odiados.$b$bAunque el Vuelo Rojo esté implicado en la guerra con Malygos, hay algo que podemos hacer para ayudar.', 0), +(12498, 'esMX', 'Sabía que volverías, $N. Has ayudado al Acuerdo del Reposo del Dragón y salvado a tu pueblo de una muerte certera. ¡Que todos lo sepan y recuerden para toda la posteridad!', 0), +(12499, 'esMX', 'Debes saber esto: todo lo que has hecho ha hecho posible este momento. Sin tu ayuda, ¡estaríamos acabados! Ahora, ¡haz guardia mientras voy allí y acabo con esto!', 0), +(12500, 'esMX', 'Mi padre no se equivocó contigo, $N. Todo lo que dijo ha ocurrido... Solo queda una tarea que cumplir. Ahora dirigiré a los Kor\'kron hasta el frente de batalla. Se acerca el momento de acabar con esta guerra. ¡La tiranía del Rey Exánime acaba hoy!$b$bOcupa mi puesto, $N, y vigila a nuestro ejército.', 0), +(12542, 'esMX', 'A solo unos pasos de aquí yace el imperio Drakkari.$b$b$b$bDurante miles de años, los Drakkari han permanecido aislados dentro de los límites de sus ciudades templo y zigurats. Es sorprendente contemplar estos restos ahora. Más arriba, después de las escaleras fatídicas que llevan hasta Zul\'Drak, la Fortaleza de Drak\'Tharon está en ruinas. El primer nivel de Zul\'Drak está arrasado...$b$b¿Por qué ha esperado la Plaga hasta ahora para atacar?', 0), +(12545, 'esMX', 'Como puedes ver, la máquina de guerra de la Plaga sigue en marcha, aunque los soldados de la Horda y la Alianza permanecen divididos, convirtiéndose de esta manera en presas fáciles. Por esta razón, tenemos que mantenernos unidos.$b$b$b$bLa Cruzada Argenta necesita $gun:una; $ghombre:mujer; como tú. ¿Quizá estés interesado en unirte a nuestra causa? ¿Luchar y morir en el bando del portador de La Crematoria?', 0), +(12766, 'esMX', 'Tú debes ser $N. Me dijeron que vendrías.$b$b$b$bTengo algo de lo que quiero que te encargues. Si lo haces, demostrarás tu valía a los dragones.', 0), +(12767, 'esMX', 'Tú debes ser $N. Me dijeron que vendrías.$b$b$b$bTengo algo de lo que quiero que te encargues. Si lo haces, demostrarás tu valía a los dragones.', 0), +(12768, 'esMX', '¿Ya has vuelto, $N?$b$bCeristrasz envió una carta sobre ti. Gracias por lo que has hecho en el Santuario de Dragones Rubí.', 0), +(12769, 'esMX', '¿Ya has vuelto, $N?$b$bVargastrasz envió una carta sobre ti. Gracias por lo que has hecho en el Santuario de Dragones Rubí.', 0), +(12789, 'esMX', 'Genial. Valus debe de haber recibido mi informe.$b$bVamos a trabajar, $r.', 0), +(13077, 'esMX', 'Te saludo, $r.$b$bLa preocupación es clara en tu rostro. Por favor, dime qué te preocupa.', 0), +(13078, 'esMX', 'Con las Lágrimas de Dahlia y magia antigua, crearé una pequeña cantidad de esperanza para tu gran cruzado.', 0), +(13079, 'esMX', 'El aliento de Alexstrasza... ¿has ido a la mismísima reina dragón? Estoy extremadamente agradecido.$b$bEntiendo los riesgos de dicha limpieza y estoy preparado. Continúa, $c.', 0), +(13167, 'esMX', '$b$b¡YA está!$b$b¡$r! Tu nombre quedará grabado en la historia de nuestro pueblo.$b$bEstoy en deuda contigo...', 0), +(13182, 'esMX', 'Me apena ver que las cosas han llegado a esto. Si pudiéramos devolver la grandeza de otrora a nuestro imperio...', 0), +(13187, 'esMX', 'Lo has hecho bien, $c.$b$bQué tus hazañas creen esperanzas en nuestra gente para que un día podamos reclamar la ciudad de nuestros ancestros.', 0), +(13190, 'esMX', '¡Ajá!$b$b¡Que la esencia burlona de derrota se zampe sus almas vacías!$b$bGracias, $c. Hoy has pegado un buen revés a los no vivos.', 0), +(13204, 'esMX', '¿Tienes idea de lo que has estado paseando, $c?$b$bLas bestias de cueva de las que has estado recogiendo estas cosas no eliminan sus residuos de forma convencional. Quizá quieras lavarte las manos...$b$bAsí que gracias por pensar en mí, pero si encuentras mas de estas quédatelas para ti.', 0), +(13343, 'esMX', '¡Oh, dios mío, lo has conseguido! No estaba segura.$b$bEntraste y saliste del flujo temporal un segundo durante la batalla. Pensé que te habíamos perdido.$b$bPero aquí estás sana y salva, has rescatado tu pasado del otro lado del bucle temporal en el que estabas.$b$b¡Eres $gel héroe:la heroína; temporal, $N!', 0), +(13372, 'esMX', 'Estas llaves las tienen los miembros más antiguos del Vuelo Azul. Solo a ellos le ha sido confíada por su maestro, Malygos.$b$b¡Esta es la oportunidad que hemos estado esperando para atacar el Aspecto de la Magia!$b$b$b$bNo puedes usar la llave tal como está para acceder al iris de enfoque, pero puedo imbuirte con una parte de mi poder; suficiente para permitirte usarlo y abrir el iris una fracción de segundo.$b$b¡Será suficiente para provocar la ira de Malygos!', 0), +(13375, 'esMX', 'Estas llaves las tienen los miembros más antiguos del Vuelo Azul. Solo a ellos le ha sido confíada por su maestro, Malygos.$b$b¡Esta es la oportunidad que hemos estado esperando para atacar el Aspecto de la Magia!$b$b$b$bNo puedes usar la llave tal como está para acceder al iris de enfoque, pero puedo imbuirte con una parte de mi poder; suficiente para permitirte usarlo y abrir el iris una fracción de segundo.$b$b¡Será suficiente para provocar la ira de Malygos!', 0), +(13384, 'esMX', 'Este es un día muy triste, no solo para los dragones, sino para todas las criaturas vivientes de Azeroth. Hemos perdido a uno de nuestros más reflexivos, inteligentes y antiguos compañero. La magia ahora está sin su guardián.$b$bEsperemos que esta haya sido una sabia decisión en los próximos años, $N. Todavía se avecina una tormenta en el horizonte y ahora nos encontramos sin uno de nuestros defensores más poderosos.', 0), +(13385, 'esMX', 'Este es un día muy triste, no solo para los dragones, sino para todas las criaturas vivientes de Azeroth. Hemos perdido a uno de nuestros más reflexivos, inteligentes y antiguos compañero. La magia ahora está sin su guardián.$b$bEsperemos que esta haya sido una sabia decisión en los próximos años, $N. Todavía se avecina una tormenta en el horizonte y ahora nos encontramos sin uno de nuestros defensores más poderosos.', 0), +(26012, 'esMX', 'Gracias por acudir a la llamada de Rhonin, valiente aventurer$go:a;.$b$bDeja que comparta contigo lo que sabemos sobre los acontecimientos recientes y apreciaré enormemente cualquier ayuda que puedas prestar.', 0), +(26013, 'esMX', '$c, ¡gracias otra vez por rescatarme de las garras de Baltharus!$b$bSin embargo, aún queda mucho trabajo por hacer...', 0), +(26034, 'esMX', '$b$bMortal, te estamos muy agradecidos por expulsar a los invasores del Sagrario. Pero no hay palabras para describir la intranquilidad que provocan estas noticias sobre el Destructor. Tengo mucho que hablar con los otros miembros del Acuerdo.$b$bToma esto como muestra de mi gratitud mientras os preparáis para la tormenta que se avecina.', 0); +-- 2 SECTION +-- esES missing quest_request_items_locale +DELETE FROM `quest_request_items_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (11958, 11959, 11960, 11978, 11980, 11983, 11999, 12000, 12004, 12005, 12006, 12009, 12013, 12016, 12017, 12028, 12031, 12032, 12033, 12039, 12040, 12041, 12043, 12044, 12045, 12046, 12047, 12048, 12049, 12050, 12052, 12053, 12055, 12056, 12057, 12059, 12060, 12061, 12064, 12065, 12066, 12067, 12069, 12072, 12075, 12076, 12077, 12078, 12079, 12080, 12083, 12084, 12085, 12089, 12090, 12091, 12092, 12096, 12097, 12100, 12101, 12102, 12104, 12107, 12110, 12115, 12119, 12122, 12123, 12124, 12125, 12126, 12127, 12136, 12140, 12142, 12143, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12166, 12167, 12168, 12169, 12171, 12172, 12174, 12188, 12200, 12205, 12206, 12209, 12211, 12214, 12218, 12221, 12230, 12232, 12234, 12237, 12239, 12240, 12243, 12245, 12252, 12253, 12254, 12258, 12260, 12261, 12262, 12263, 12264, 12265, 12267, 12269, 12271, 12272, 12273, 12274, 12277, 12281, 12282, 12283, 12285, 12290, 12291, 12303, 12311, 12312, 12319, 12320, 12326, 12372, 12416, 12417, 12418, 12419, 12438, 12441, 12442, 12450, 12454, 12455, 12456, 12457, 12458, 12459, 12462, 12464, 12465, 12467, 12469, 12470, 12472, 12475, 12476, 12477, 12478, 12498, 12545, 13078, 13079, 13167, 13182, 13187, 13190, 13204, 13343, 13372, 13375, 13384, 13385); +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(11958, 'esES', 'Últimamente la balanza natural ha estado basculando, hacia un lado, luego hacia el otro.$b$bEspero que puedas ayudarnos a sobrevivir al gran trastorno que estamos padeciendo.', 0), +(11959, 'esES', '¿Eso es la sangre de Loguhn o es la tuya propia, $r?', 0), +(11960, 'esES', '¿Cuántos cachorros puedes haber salvado en tan poco tiempo?', 0), +(11978, 'esES', 'Sin armaduras ni armas, los miembros más recientes se verán indefensos en su ruta hacia Martillo de Agmar.', 0), +(11980, 'esES', 'No muestres clemencia, $r. ¡Elimina a los Anub\'ar!', 0), +(11983, 'esES', 'Ellos harán a la Horda más fuerte, comandante.', 0), +(11999, 'esES', 'Has vuelto. ¿Qué has descubierto?', 0), +(12000, 'esES', 'Has vuelto. ¿Qué has descubierto?', 0), +(12004, 'esES', '¿Has evitado el acuerdo entre el Vuelo Azul y El Etereum?', 0), +(12005, 'esES', '¿Has evitado el acuerdo entre el Vuelo Azul y El Etereum?', 0), +(12006, 'esES', 'No sé por qué, ¡presiento que aún no has matado a suficientes de esos seres perversos!', 0), +(12009, 'esES', '¿Cuántos cangrejos has conseguido?', 0), +(12013, 'esES', '¿Te crees que soy tonto? ¡Arcanimus aun está devorando las almas de mis hermanos y hermanas, $c!', 0), +(12016, 'esES', '¿Vuelves con la suculenta carne de Kili\'ua?', 0), +(12017, 'esES', 'Pensaba que había visto una paliza... ¿Está Tu\'u\'gwar muerto?', 0), +(12028, 'esES', '¿Qué piensas?', 0), +(12031, 'esES', '', 0), +(12032, 'esES', '¡$N, has vuelto!', 0), +(12033, 'esES', '¡Eliminaremos a la Plaga!', 0), +(12039, 'esES', '¿Qué es la vida sin riesgos?', 0), +(12040, 'esES', '¡El Imperio Azjol se alzará de nuevo!', 0), +(12041, 'esES', '¿Qué tienes ahí?', 0), +(12043, 'esES', '¿Hum? ¿Quién eres? ¿Qué es lo que quieres?', 0), +(12044, 'esES', '¿Has conseguido la mena? Mi transportista volverá en breve... ¡Debemos sacar este envío mientras la batalla continúe!', 0), +(12045, 'esES', '¿Tienes los fragmentos? Ya casi he terminado con la unidad de refrigeración principal.', 0), +(12046, 'esES', '¿Cómo va la caza? ¿Tienes los pellejos?', 0), +(12047, 'esES', '¿Has encontrado alguna astilla?', 0), +(12048, 'esES', '$b$b¡Estas no sirven!', 0), +(12049, 'esES', '¿La cogiste toda? Apestas a ella.', 0), +(12050, 'esES', '¿Dónde está el cargamento? Espero que los jormungar no lo pillaran. La última vez llevaba una buena carga.', 0), +(12052, 'esES', 'Te recuerdo. No estás muerto, así que espero que esas harpías lo estén.', 0), +(12053, 'esES', '¡Es un desafío, $N!', 0), +(12055, 'esES', '¿Qué tienes ahí?', 0), +(12056, 'esES', '¿Eso que llevas es una cabeza de orco cortada o tan solo te alegras de verme?', 0), +(12057, 'esES', '', 0), +(12059, 'esES', '¿Qué tienes ahí?', 0), +(12060, 'esES', 'De vuelta, ¿tan pronto?', 0), +(12061, 'esES', 'De vuelta, ¿tan pronto?', 0), +(12064, 'esES', '¡Tráeme esos fragmentos!', 0), +(12065, 'esES', '¿Qué noticias nos traes de la playa, $c?', 0), +(12066, 'esES', '¿Qué noticias nos traes de la playa, $c?', 0), +(12067, 'esES', '¿Una carta para mí?$b$b$b$bSupongo que no... deben de ser malas noticias.', 0), +(12069, 'esES', '¿Qué es esto, $N? Estoy muy ocupado.', 0), +(12072, 'esES', 'Ten encuenta que los jinetes de guerra están entrenados para combatir solo en el area de Bruma de Hielo. Intenta no llevarlos a ningún otro lugar si no quieres que te tiren de su lomo.', 0), +(12075, 'esES', '¿Así que has vuelto con mi muestra? Me alegro de que el frío no te venciera.', 0), +(12076, 'esES', 'Parece que aún te quedan unas flemas sobre el hombro, $r. Ten cuidado o te corroerá a través de la armadura.', 0), +(12077, 'esES', 'Supongo que lo que quiere ese pigmeo es que luchemos por él. Mira mi cara de sorpresa.', 0), +(12078, 'esES', '¡Has regresado! ¿Tienes las bestias? Tengo que salir de aquí... Seguro que Ko\'char ha intentado pisarme hace unos minutos.', 0), +(12079, 'esES', 'La batalla persiste, vuelve con buenas noticias o vete, coleguita.', 0), +(12080, 'esES', 'Espero que me traigas nuevas noticias, coleguita.', 0), +(12083, 'esES', '¿Qué es lo que has encontrado en el bosque?', 0), +(12084, 'esES', '¿Qué es lo que has encontrado en el bosque?', 0), +(12085, 'esES', '¿Qué es esto? ¿Crees que vas a enviar una carta?$b$bTodo el correo pasa por mi primero. ¡Hay espías y traidores entre nosotros!$b$b$b$bMuy bien, sé rápido. Pero si no me gusta lo que leo, te daré de comer a mis huargos, gusano.$b$b', 0), +(12089, 'esES', '¿Vienes a cobrar la recompensa?', 0), +(12090, 'esES', '¿Vienes a cobrar la recompensa?', 0), +(12091, 'esES', '¿Vienes a cobrar la recompensa?', 0), +(12092, 'esES', 'Un beneficio añadido de salvar a los ancestros podría ser que consideraran ayudar a la Alianza con sus problemas. De todas maneras, es lo correcto.$b$bY dime, ¿cuántos has sido capaz de fortalecer, $c?', 0), +(12096, 'esES', 'Si podemos salvar a los ancestros antes de que las driadas y los elfos de la noche de Reposo Estelar, quizá consideren aliarse con la Horda.$b$bO al menos, quizá reconsideren el atacarnos.$b$bY bien, ¿Cuántos has conseguido salvar hasta ahora?', 0), +(12097, 'esES', '$b$bDe vuelta, ¿tan pronto?', 0), +(12100, 'esES', 'Mata a las bestias para prevenir que se propague y traeme un organo resistente a la putrefacción.', 0), +(12101, 'esES', '¿Y ahora qué?', 0), +(12102, 'esES', '¿Tienes la lila de color rubí?', 0), +(12104, 'esES', '¿Has conseguido la vacuna?', 0), +(12107, 'esES', '¿Qué es esto, $N? Pareces sofocado.$B$BParate un momento para recobrar el aliento.', 0), +(12110, 'esES', '¿Qué es esto, $N? Pareces sofocado.$B$BParate un momento para recobrar el aliento.', 0), +(12115, 'esES', '¿Qué es esto, $r?', 0), +(12119, 'esES', 'Dime, ¿qué puedo hacer por ti, $r?', 0), +(12122, 'esES', 'Dime, ¿qué puedo hacer por ti, $r?', 0), +(12123, 'esES', 'Me alegro de por fin conocerte en persona, $N. Te he conocido incluso desde antes de que nacieras.', 0), +(12124, 'esES', 'Me alegro de por fin conocerte en persona, $N. Te he conocido incluso desde antes de que nacieras.', 0), +(12125, 'esES', 'Tráeme la sangre de los sumisos.', 0), +(12126, 'esES', '¡Llena la gema con el poder de lo profano!', 0), +(12127, 'esES', 'Todos los que estamos en Rasganorte estamos al servicio de la escarcha.', 0), +(12136, 'esES', '¡Ya era hora! ¿Dónde te habías metido?', 0), +(12140, 'esES', 'No me hagas perder el tiempo, $N. ¡Angrathar espera!', 0), +(12142, 'esES', '¿Has acabado con esos zarrapastrosos?', 0), +(12143, 'esES', '¿Está hecho?', 0), +(12145, 'esES', 'Tú no eres un verdadero colega hasta que mates un dragón... colega.', 0), +(12146, 'esES', '¿Sí, $r?', 0), +(12147, 'esES', '¿Sí, $r?', 0), +(12148, 'esES', '¿Has encontrado algo?', 0), +(12149, 'esES', '¿Has eliminado al magnatauro?', 0), +(12150, 'esES', '¿Tienes el nombre? ¿Ya sabes quien es el Señor de la Guerra magnatauro?', 0), +(12151, 'esES', '¿Has acabado con la amenaza para siempre?', 0), +(12166, 'esES', 'Es una vergüenza que no podamos curar a los osos y alces que han caído víctimas de la presencia de la Plaga.$B$BAl menos podemos evitar que la corrupción se extienda aún más.', 0), +(12167, 'esES', '¡Los cultores son una peste para la creación!', 0), +(12168, 'esES', 'Siento que algo repugnante se acerca.$b$b¡Lo tienes tú! ¿Qué es, $N?', 0), +(12169, 'esES', 'Siento que el Sumo Cultor Zangus aún vive.$b$b¿Algo anda mal, $N? ¿Tal vez necesites descansar primero?', 0), +(12171, 'esES', 'Hola, $r.', 0), +(12172, 'esES', '¿Estás armonizado? No deberías mentir sobre esto, $N.$b$bSi fallas en prepararte apropiadamente, y te enseño el conjuro, ¡la primera vez que lo lances será la última vez que te veamos!', 0), +(12174, 'esES', '¿Qué tienes ahí, soldado?', 0), +(12188, 'esES', '¡El residuo lo usaré como agente activador del añublo!', 0), +(12200, 'esES', 'Tenemos suerte de contar con un lugar cercano con lágrimas de dragón esmeralda de sobra. Si no, tendría que enviarte hasta Feralas.', 0), +(12205, 'esES', '¿Estás aquí para hacerme perder el tiempo, muchachit$go:a;? ¿O has completado mi vendetta contra el Embate Escarlata?', 0), +(12206, 'esES', '¿Lo hiciste?$b$¡Hey, olvidé mencionarte que probablemente no permitir que esa cosa te caiga en lo alto! Es muy asqueroso, y esas manchas no se quitan con nada, ¡y no digamos el mal rato que pasarás curándote los trocitos de carne levantada!', 0), +(12209, 'esES', 'Todas las armaduras y armas que robes para mí serán bien recibidas, carne fresca.$b$bAunque sean de peor calidad de las que puedo fabricar yo, es mejor que nada.', 0), +(12211, 'esES', '¿Y bien? ¿Éxito supongo?$b$b¡¿No me digas que tienen una especie de protección para evitar ser devorados por las ratas?!', 0), +(12214, 'esES', 'Estoy muy contento de que hayas venido. Tenía miedo de tener que ir allí abajo y prepararlos yo mismo.', 0), +(12218, 'esES', 'Esta prueba será el final de esta serie de experimentos, $N.', 0), +(12221, 'esES', '¡Ya era hora!', 0), +(12230, 'esES', 'Crees que ellos me dejarían hacer uso de sus esparcidores de peste... quizás cargandolos con algo desagradable para destruir sus ballestas.$b$bPero no, me dicen que solo están para misiones especiales.$b$b¡Da igual!', 0), +(12232, 'esES', '¡Algún día seré el lider de la guardia de la muerte!$b$bAlgún día....', 0), +(12234, 'esES', 'Si tardas demasiado, sus planos diarios cambiarán, y deberemos empezar de nuevo otra vez.$b$b¡No tardes demasiado!', 0), +(12237, 'esES', '¡Deprisa, $N! ¡Debes salvar a esos habitantes indefensos!', 0), +(12239, 'esES', '$b$bNo arruines mi tapadera, $c!', 0), +(12240, 'esES', 'Echo de menos a mi hermana, $N. Espero que esté bien.', 0), +(12243, 'esES', '¡Por favor, NO me digas que sus velas estaban protegidas por algo de mi agua ardiente!$b$bOdiaría tener que probarlo aquí otra vez.', 0), +(12245, 'esES', 'Es realmente simple. Eres enviado a matar cuatro estúpidos incompetentes que es muy probable que cuenten nuestros secretos en cualquier momento, y tú sales y lo haces.$B$B', 0), +(12252, 'esES', '¿Qué nuevas noticias nos brindas? Éxito sin duda, ¿no?', 0), +(12253, 'esES', '¿Ya has rescatado a nuestros habitantes atrapados?', 0), +(12254, 'esES', '¿Tienes el libro de oración del Obispo Calle? ¿Encontraste algo inusual en el?', 0), +(12258, 'esES', 'Sácalos de su miseria, $N.', 0), +(12260, 'esES', '¡¿Por favor dime que no has roto el espejo?!', 0), +(12261, 'esES', '¿Has colocado el resguardo?', 0), +(12262, 'esES', 'Veo la sangre en tus manos... Entonces, ¿ya está hecho?', 0), +(12263, 'esES', 'Estoy cansado de esta pestilencia.', 0), +(12264, 'esES', 'No puedo ayudar pero me pregunto si serán suficientemente ingenuos para pensar que cumpliré mi parte o si son simplemente suicidas.', 0), +(12265, 'esES', 'Cuanto poder malgastado en los débiles e inútiles.$b$bMuéstrame ser digo the la vida y magia que te ha sido otorgada, y entonces quizá podamos hablar de malgasto antes de extinguir su presencia.$b$bNo te preocupes, Esperaré.', 0), +(12267, 'esES', 'Eres una herramienta bastante efectiva, $c. Tu ayuda en esta purga es apreciada.', 0), +(12269, 'esES', '¿Conseguiste sus tarjetas?', 0), +(12271, 'esES', '¿Has conseguido esa vara de su torturador?', 0), +(12272, 'esES', '¿Has conseguido las muestras de la mena extraña?', 0), +(12273, 'esES', '¡¿Y bien?!', 0), +(12274, 'esES', '¿Qué es lo que has encontrado? ¿Has hablado ya con él?', 0), +(12277, 'esES', '$B$BEra un buen gnomo, uno de los mejores. Echaremos de menos a Slinkin.', 0), +(12281, 'esES', 'Escuché lo de tu valentía en la mina, $N.', 0), +(12282, 'esES', '¿Has recuperado mi orbe de visión?', 0), +(12283, 'esES', '¡Es la hora, $N! ¿A qué estas esperando?', 0), +(12285, 'esES', '¿Debería decirle a mis fuerzas que empiecen a avanzar hacia Martillo de Agmar?$b$b ¿O te la has ingeniado para matar a su Alta General?', 0), +(12290, 'esES', '¿Has recuperado la hierba tiniebla?', 0), +(12291, 'esES', 'Tengo suficiente hierba tiniebla para hacer mas elixires, $N.', 0), +(12303, 'esES', '¿Cuántos de esos tesoros de la Alianza has conseguido poseer en tus manos?', 0), +(12311, 'esES', '¿Está Amarion muerto?', 0), +(12312, 'esES', '¿Un escrito de la Plaga?', 0), +(12319, 'esES', '¿El necroseñor ya no vive?', 0), +(12320, 'esES', '¿Vienes de parte del alto mando, hijo?', 0), +(12326, 'esES', 'Soy Calderilla. Ambo Calderilla. Y el placer es todo tuyo.', 0), +(12372, 'esES', '¿Cómo va la lucha? ¿Estamos deteniéndolos?', 0), +(12416, 'esES', 'Me alegro mucho de que sigas con nosotros, $r.', 0), +(12417, 'esES', 'Me empezaba a preocupar de que la Plaga del santuario te hubiera tomado. Me alegra que sigas con vida.', 0), +(12418, 'esES', '¡Has vuelto! ¿Has completado lo que te pedí?', 0), +(12419, 'esES', 'Hola, $r. Noto la presencia de mi broche de rubíes. Entrégalo aquí.$b$b¿Qué ha pasado con Dahlia?', 0), +(12438, 'esES', '¿Estás aquí para cobrar la recompensa, aliado?', 0), +(12441, 'esES', '¿Te has enfrentado a Patasangre?', 0), +(12442, 'esES', '$B$B¿Está ese idiota pomposo muerto?', 0), +(12450, 'esES', '¡Has vuelto! ¿Has completado lo que te pedí?', 0), +(12454, 'esES', 'Cuanto antes lidies con los Garfacielo esmeralda, más pronto se recuperará el balance natural del Santuario de Dragones Esmeralda.', 0), +(12455, 'esES', '¿Dónde están mis municiones, $gcaballero:dama;?', 0), +(12456, 'esES', '¿Has conseguido acabar con Alystros? No dudes en pedir ayuda a tus amigos.$b$bDe hecho, dado el gran poder del vigilante verdeante, ¡te recomiendo que lo hagas!', 0), +(12457, 'esES', '¿Has rescatado a nuestros soldados heridos?', 0), +(12458, 'esES', '¿Y cuántas semillas dices que has conseguido hasta ahora?', 0), +(12459, 'esES', '¿Dónde están los resultados? ¿Han sido destruidos?$B$B¡Necesito respuestas!', 0), +(12462, 'esES', '¿Has roto alguna pieza?', 0), +(12464, 'esES', 'Entonces, ¿está hecho?', 0), +(12465, 'esES', 'No me siento como si hubiera ganado...', 0), +(12467, 'esES', '¿Has recuperado la filacteria de Thel\'zan?', 0), +(12469, 'esES', '¡Hola!', 0), +(12470, 'esES', '¿Qué nuevas noticias nos traes? ¿Qué ha pasado en el Santuario de Dragones Bronce?$b$b¿Encontraste a quien fuera el lider del Vuelo Infinito?', 0), +(12472, 'esES', '$b$bPensábamos que no volverías, $N.', 0), +(12475, 'esES', '¿Has recuperado el mapa del Embate?', 0), +(12476, 'esES', 'Limpia el Campo Base del Embate, $N.', 0), +(12477, 'esES', '¿Encontraste una copia?', 0), +(12478, 'esES', '¿Has encontrado la caverna de la Agonía de Escarcha?', 0), +(12498, 'esES', '¡Acaba con la Plaga presente en Reposo de Galakrond antes de que sea demasiado tarde!', 0), +(12545, 'esES', '¡No dejes nada que el Rey Exánime pueda resucitar!', 0), +(13078, 'esES', 'Ah, querida Dahlia. Te echo mucho de menos.', 0), +(13079, 'esES', 'Has vuelto de nuevo, $c. ¿Para que te arriesgas pues?', 0), +(13167, 'esES', '¿Lo has hecho, $c? ¿Has acabado con el rey traidor?', 0), +(13182, 'esES', '¿Has sido capaz de limpiar nuestro hogar de los Huevos de la Plaga?', 0), +(13187, 'esES', '¿Te has enfrentado a los ignotos, $c?', 0), +(13190, 'esES', '¿Has sido capaz de quemar un cadáver de vigía, $r?', 0), +(13204, 'esES', '¿Qué demonios es eso?', 0), +(13343, 'esES', '$B$B¿Te conozco? Siento un aura a tu alrededor como si tu misma existencia estuviera en flujo. O estás atrapado en un bucle temporal.$B$BSea la razón que sea, ¡arréglalo rápido o tu existencia será más corta de lo que te imaginas!', 0), +(13372, 'esES', '$N, has entrado en contacto con la llave del iris. ¿La llevas contigo?$b$b$b$b¿Cómo has conseguido esto? ¿Sapphiron aún tenía la suya?', 0), +(13375, 'esES', '$N, has entrado en contacto con la llave del iris. ¿La llevas contigo?$b$b$b$b¿Cómo has conseguido esto? ¿Sapphiron aún tenía la suya?', 0), +(13384, 'esES', 'Solo Malygos puede portar el Corazón de la Magia. Es su posesión más valiosa.', 0), +(13385, 'esES', 'Solo Malygos puede portar el Corazón de la Magia. Es su posesión más valiosa.', 0), +-- esMX missing quest_request_items_locale +(11958, 'esMX', 'Últimamente la balanza natural ha estado basculando, hacia un lado, luego hacia el otro.$b$bEspero que puedas ayudarnos a sobrevivir al gran trastorno que estamos padeciendo.', 0), +(11959, 'esMX', '¿Eso es la sangre de Loguhn o es la tuya propia, $r?', 0), +(11960, 'esMX', '¿Cuántos cachorros puedes haber salvado en tan poco tiempo?', 0), +(11978, 'esMX', 'Sin armaduras ni armas, los miembros más recientes se verán indefensos en su ruta hacia Martillo de Agmar.', 0), +(11980, 'esMX', 'No muestres clemencia, $r. ¡Elimina a los Anub\'ar!', 0), +(11983, 'esMX', 'Ellos harán a la Horda más fuerte, comandante.', 0), +(11999, 'esMX', 'Has vuelto. ¿Qué has descubierto?', 0), +(12000, 'esMX', 'Has vuelto. ¿Qué has descubierto?', 0), +(12004, 'esMX', '¿Has evitado el acuerdo entre el Vuelo Azul y El Etereum?', 0), +(12005, 'esMX', '¿Has evitado el acuerdo entre el Vuelo Azul y El Etereum?', 0), +(12006, 'esMX', 'No sé por qué, ¡presiento que aún no has matado a suficientes de esos seres perversos!', 0), +(12009, 'esMX', '¿Cuántos cangrejos has conseguido?', 0), +(12013, 'esMX', '¿Te crees que soy tonto? ¡Arcanimus aun está devorando las almas de mis hermanos y hermanas, $c!', 0), +(12016, 'esMX', '¿Vuelves con la suculenta carne de Kili\'ua?', 0), +(12017, 'esMX', 'Pensaba que había visto una paliza... ¿Está Tu\'u\'gwar muerto?', 0), +(12028, 'esMX', '¿Qué piensas?', 0), +(12031, 'esMX', '', 0), +(12032, 'esMX', '¡$N, has vuelto!', 0), +(12033, 'esMX', '¡Eliminaremos a la Plaga!', 0), +(12039, 'esMX', '¿Qué es la vida sin riesgos?', 0), +(12040, 'esMX', '¡El Imperio Azjol se alzará de nuevo!', 0), +(12041, 'esMX', '¿Qué tienes ahí?', 0), +(12043, 'esMX', '¿Hum? ¿Quién eres? ¿Qué es lo que quieres?', 0), +(12044, 'esMX', '¿Has conseguido la mena? Mi transportista volverá en breve... ¡Debemos sacar este envío mientras la batalla continúe!', 0), +(12045, 'esMX', '¿Tienes los fragmentos? Ya casi he terminado con la unidad de refrigeración principal.', 0), +(12046, 'esMX', '¿Cómo va la caza? ¿Tienes los pellejos?', 0), +(12047, 'esMX', '¿Has encontrado alguna astilla?', 0), +(12048, 'esMX', '$b$b¡Estas no sirven!', 0), +(12049, 'esMX', '¿La cogiste toda? Apestas a ella.', 0), +(12050, 'esMX', '¿Dónde está el cargamento? Espero que los jormungar no lo pillaran. La última vez llevaba una buena carga.', 0), +(12052, 'esMX', 'Te recuerdo. No estás muerto, así que espero que esas harpías lo estén.', 0), +(12053, 'esMX', '¡Es un desafío, $N!', 0), +(12055, 'esMX', '¿Qué tienes ahí?', 0), +(12056, 'esMX', '¿Eso que llevas es una cabeza de orco cortada o tan solo te alegras de verme?', 0), +(12057, 'esMX', '', 0), +(12059, 'esMX', '¿Qué tienes ahí?', 0), +(12060, 'esMX', 'De vuelta, ¿tan pronto?', 0), +(12061, 'esMX', 'De vuelta, ¿tan pronto?', 0), +(12064, 'esMX', '¡Tráeme esos fragmentos!', 0), +(12065, 'esMX', '¿Qué noticias nos traes de la playa, $c?', 0), +(12066, 'esMX', '¿Qué noticias nos traes de la playa, $c?', 0), +(12067, 'esMX', '¿Una carta para mí?$b$b$b$bSupongo que no... deben de ser malas noticias.', 0), +(12069, 'esMX', '¿Qué es esto, $N? Estoy muy ocupado.', 0), +(12072, 'esMX', 'Ten encuenta que los jinetes de guerra están entrenados para combatir solo en el area de Bruma de Hielo. Intenta no llevarlos a ningún otro lugar si no quieres que te tiren de su lomo.', 0), +(12075, 'esMX', '¿Así que has vuelto con mi muestra? Me alegro de que el frío no te venciera.', 0), +(12076, 'esMX', 'Parece que aún te quedan unas flemas sobre el hombro, $r. Ten cuidado o te corroerá a través de la armadura.', 0), +(12077, 'esMX', 'Supongo que lo que quiere ese pigmeo es que luchemos por él. Mira mi cara de sorpresa.', 0), +(12078, 'esMX', '¡Has regresado! ¿Tienes las bestias? Tengo que salir de aquí... Seguro que Ko\'char ha intentado pisarme hace unos minutos.', 0), +(12079, 'esMX', 'La batalla persiste, vuelve con buenas noticias o vete, coleguita.', 0), +(12080, 'esMX', 'Espero que me traigas nuevas noticias, coleguita.', 0), +(12083, 'esMX', '¿Qué es lo que has encontrado en el bosque?', 0), +(12084, 'esMX', '¿Qué es lo que has encontrado en el bosque?', 0), +(12085, 'esMX', '¿Qué es esto? ¿Crees que vas a enviar una carta?$b$bTodo el correo pasa por mi primero. ¡Hay espías y traidores entre nosotros!$b$b$b$bMuy bien, sé rápido. Pero si no me gusta lo que leo, te daré de comer a mis huargos, gusano.$b$b', 0), +(12089, 'esMX', '¿Vienes a cobrar la recompensa?', 0), +(12090, 'esMX', '¿Vienes a cobrar la recompensa?', 0), +(12091, 'esMX', '¿Vienes a cobrar la recompensa?', 0), +(12092, 'esMX', 'Un beneficio añadido de salvar a los ancestros podría ser que consideraran ayudar a la Alianza con sus problemas. De todas maneras, es lo correcto.$b$bY dime, ¿cuántos has sido capaz de fortalecer, $c?', 0), +(12096, 'esMX', 'Si podemos salvar a los ancestros antes de que las driadas y los elfos de la noche de Reposo Estelar, quizá consideren aliarse con la Horda.$b$bO al menos, quizá reconsideren el atacarnos.$b$bY bien, ¿Cuántos has conseguido salvar hasta ahora?', 0), +(12097, 'esMX', '$b$bDe vuelta, ¿tan pronto?', 0), +(12100, 'esMX', 'Mata a las bestias para prevenir que se propague y traeme un organo resistente a la putrefacción.', 0), +(12101, 'esMX', '¿Y ahora qué?', 0), +(12102, 'esMX', '¿Tienes la lila de color rubí?', 0), +(12104, 'esMX', '¿Has conseguido la vacuna?', 0), +(12107, 'esMX', '¿Qué es esto, $N? Pareces sofocado.$B$BParate un momento para recobrar el aliento.', 0), +(12110, 'esMX', '¿Qué es esto, $N? Pareces sofocado.$B$BParate un momento para recobrar el aliento.', 0), +(12115, 'esMX', '¿Qué es esto, $r?', 0), +(12119, 'esMX', 'Dime, ¿qué puedo hacer por ti, $r?', 0), +(12122, 'esMX', 'Dime, ¿qué puedo hacer por ti, $r?', 0), +(12123, 'esMX', 'Me alegro de por fin conocerte en persona, $N. Te he conocido incluso desde antes de que nacieras.', 0), +(12124, 'esMX', 'Me alegro de por fin conocerte en persona, $N. Te he conocido incluso desde antes de que nacieras.', 0), +(12125, 'esMX', 'Tráeme la sangre de los sumisos.', 0), +(12126, 'esMX', '¡Llena la gema con el poder de lo profano!', 0), +(12127, 'esMX', 'Todos los que estamos en Rasganorte estamos al servicio de la escarcha.', 0), +(12136, 'esMX', '¡Ya era hora! ¿Dónde te habías metido?', 0), +(12140, 'esMX', 'No me hagas perder el tiempo, $N. ¡Angrathar espera!', 0), +(12142, 'esMX', '¿Has acabado con esos zarrapastrosos?', 0), +(12143, 'esMX', '¿Está hecho?', 0), +(12145, 'esMX', 'Tú no eres un verdadero colega hasta que mates un dragón... colega.', 0), +(12146, 'esMX', '¿Sí, $r?', 0), +(12147, 'esMX', '¿Sí, $r?', 0), +(12148, 'esMX', '¿Has encontrado algo?', 0), +(12149, 'esMX', '¿Has eliminado al magnatauro?', 0), +(12150, 'esMX', '¿Tienes el nombre? ¿Ya sabes quien es el Señor de la Guerra magnatauro?', 0), +(12151, 'esMX', '¿Has acabado con la amenaza para siempre?', 0), +(12166, 'esMX', 'Es una vergüenza que no podamos curar a los osos y alces que han caído víctimas de la presencia de la Plaga.$B$BAl menos podemos evitar que la corrupción se extienda aún más.', 0), +(12167, 'esMX', '¡Los cultores son una peste para la creación!', 0), +(12168, 'esMX', 'Siento que algo repugnante se acerca.$b$b¡Lo tienes tú! ¿Qué es, $N?', 0), +(12169, 'esMX', 'Siento que el Sumo Cultor Zangus aún vive.$b$b¿Algo anda mal, $N? ¿Tal vez necesites descansar primero?', 0), +(12171, 'esMX', 'Hola, $r.', 0), +(12172, 'esMX', '¿Estás armonizado? No deberías mentir sobre esto, $N.$b$bSi fallas en prepararte apropiadamente, y te enseño el conjuro, ¡la primera vez que lo lances será la última vez que te veamos!', 0), +(12174, 'esMX', '¿Qué tienes ahí, soldado?', 0), +(12188, 'esMX', '¡El residuo lo usaré como agente activador del añublo!', 0), +(12200, 'esMX', 'Tenemos suerte de contar con un lugar cercano con lágrimas de dragón esmeralda de sobra. Si no, tendría que enviarte hasta Feralas.', 0), +(12205, 'esMX', '¿Estás aquí para hacerme perder el tiempo, muchachit$go:a;? ¿O has completado mi vendetta contra el Embate Escarlata?', 0), +(12206, 'esMX', '¿Lo hiciste?$b$¡Hey, olvidé mencionarte que probablemente no permitir que esa cosa te caiga en lo alto! Es muy asqueroso, y esas manchas no se quitan con nada, ¡y no digamos el mal rato que pasarás curándote los trocitos de carne levantada!', 0), +(12209, 'esMX', 'Todas las armaduras y armas que robes para mí serán bien recibidas, carne fresca.$b$bAunque sean de peor calidad de las que puedo fabricar yo, es mejor que nada.', 0), +(12211, 'esMX', '¿Y bien? ¿Éxito supongo?$b$b¡¿No me digas que tienen una especie de protección para evitar ser devorados por las ratas?!', 0), +(12214, 'esMX', 'Estoy muy contento de que hayas venido. Tenía miedo de tener que ir allí abajo y prepararlos yo mismo.', 0), +(12218, 'esMX', 'Esta prueba será el final de esta serie de experimentos, $N.', 0), +(12221, 'esMX', '¡Ya era hora!', 0), +(12230, 'esMX', 'Crees que ellos me dejarían hacer uso de sus esparcidores de peste... quizás cargandolos con algo desagradable para destruir sus ballestas.$b$bPero no, me dicen que solo están para misiones especiales.$b$b¡Da igual!', 0), +(12232, 'esMX', '¡Algún día seré el lider de la guardia de la muerte!$b$bAlgún día....', 0), +(12234, 'esMX', 'Si tardas demasiado, sus planos diarios cambiarán, y deberemos empezar de nuevo otra vez.$b$b¡No tardes demasiado!', 0), +(12237, 'esMX', '¡Deprisa, $N! ¡Debes salvar a esos habitantes indefensos!', 0), +(12239, 'esMX', '$b$bNo arruines mi tapadera, $c!', 0), +(12240, 'esMX', 'Echo de menos a mi hermana, $N. Espero que esté bien.', 0), +(12243, 'esMX', '¡Por favor, NO me digas que sus velas estaban protegidas por algo de mi agua ardiente!$b$bOdiaría tener que probarlo aquí otra vez.', 0), +(12245, 'esMX', 'Es realmente simple. Eres enviado a matar cuatro estúpidos incompetentes que es muy probable que cuenten nuestros secretos en cualquier momento, y tú sales y lo haces.$B$B', 0), +(12252, 'esMX', '¿Qué nuevas noticias nos brindas? Éxito sin duda, ¿no?', 0), +(12253, 'esMX', '¿Ya has rescatado a nuestros habitantes atrapados?', 0), +(12254, 'esMX', '¿Tienes el libro de oración del Obispo Calle? ¿Encontraste algo inusual en el?', 0), +(12258, 'esMX', 'Sácalos de su miseria, $N.', 0), +(12260, 'esMX', '¡¿Por favor dime que no has roto el espejo?!', 0), +(12261, 'esMX', '¿Has colocado el resguardo?', 0), +(12262, 'esMX', 'Veo la sangre en tus manos... Entonces, ¿ya está hecho?', 0), +(12263, 'esMX', 'Estoy cansado de esta pestilencia.', 0), +(12264, 'esMX', 'No puedo ayudar pero me pregunto si serán suficientemente ingenuos para pensar que cumpliré mi parte o si son simplemente suicidas.', 0), +(12265, 'esMX', 'Cuanto poder malgastado en los débiles e inútiles.$b$bMuéstrame ser digo the la vida y magia que te ha sido otorgada, y entonces quizá podamos hablar de malgasto antes de extinguir su presencia.$b$bNo te preocupes, Esperaré.', 0), +(12267, 'esMX', 'Eres una herramienta bastante efectiva, $c. Tu ayuda en esta purga es apreciada.', 0), +(12269, 'esMX', '¿Conseguiste sus tarjetas?', 0), +(12271, 'esMX', '¿Has conseguido esa vara de su torturador?', 0), +(12272, 'esMX', '¿Has conseguido las muestras de la mena extraña?', 0), +(12273, 'esMX', '¡¿Y bien?!', 0), +(12274, 'esMX', '¿Qué es lo que has encontrado? ¿Has hablado ya con él?', 0), +(12277, 'esMX', '$B$BEra un buen gnomo, uno de los mejores. Echaremos de menos a Slinkin.', 0), +(12281, 'esMX', 'Escuché lo de tu valentía en la mina, $N.', 0), +(12282, 'esMX', '¿Has recuperado mi orbe de visión?', 0), +(12283, 'esMX', '¡Es la hora, $N! ¿A qué estas esperando?', 0), +(12285, 'esMX', '¿Debería decirle a mis fuerzas que empiecen a avanzar hacia Martillo de Agmar?$b$b ¿O te la has ingeniado para matar a su Alta General?', 0), +(12290, 'esMX', '¿Has recuperado la hierba tiniebla?', 0), +(12291, 'esMX', 'Tengo suficiente hierba tiniebla para hacer mas elixires, $N.', 0), +(12303, 'esMX', '¿Cuántos de esos tesoros de la Alianza has conseguido poseer en tus manos?', 0), +(12311, 'esMX', '¿Está Amarion muerto?', 0), +(12312, 'esMX', '¿Un escrito de la Plaga?', 0), +(12319, 'esMX', '¿El necroseñor ya no vive?', 0), +(12320, 'esMX', '¿Vienes de parte del alto mando, hijo?', 0), +(12326, 'esMX', 'Soy Calderilla. Ambo Calderilla. Y el placer es todo tuyo.', 0), +(12372, 'esMX', '¿Cómo va la lucha? ¿Estamos deteniéndolos?', 0), +(12416, 'esMX', 'Me alegro mucho de que sigas con nosotros, $r.', 0), +(12417, 'esMX', 'Me empezaba a preocupar de que la Plaga del santuario te hubiera tomado. Me alegra que sigas con vida.', 0), +(12418, 'esMX', '¡Has vuelto! ¿Has completado lo que te pedí?', 0), +(12419, 'esMX', 'Hola, $r. Noto la presencia de mi broche de rubíes. Entrégalo aquí.$b$b¿Qué ha pasado con Dahlia?', 0), +(12438, 'esMX', '¿Estás aquí para cobrar la recompensa, aliado?', 0), +(12441, 'esMX', '¿Te has enfrentado a Patasangre?', 0), +(12442, 'esMX', '$B$B¿Está ese idiota pomposo muerto?', 0), +(12450, 'esMX', '¡Has vuelto! ¿Has completado lo que te pedí?', 0), +(12454, 'esMX', 'Cuanto antes lidies con los Garfacielo esmeralda, más pronto se recuperará el balance natural del Santuario de Dragones Esmeralda.', 0), +(12455, 'esMX', '¿Dónde están mis municiones, $gcaballero:dama;?', 0), +(12456, 'esMX', '¿Has conseguido acabar con Alystros? No dudes en pedir ayuda a tus amigos.$b$bDe hecho, dado el gran poder del vigilante verdeante, ¡te recomiendo que lo hagas!', 0), +(12457, 'esMX', '¿Has rescatado a nuestros soldados heridos?', 0), +(12458, 'esMX', '¿Y cuántas semillas dices que has conseguido hasta ahora?', 0), +(12459, 'esMX', '¿Dónde están los resultados? ¿Han sido destruidos?$B$B¡Necesito respuestas!', 0), +(12462, 'esMX', '¿Has roto alguna pieza?', 0), +(12464, 'esMX', 'Entonces, ¿está hecho?', 0), +(12465, 'esMX', 'No me siento como si hubiera ganado...', 0), +(12467, 'esMX', '¿Has recuperado la filacteria de Thel\'zan?', 0), +(12469, 'esMX', '¡Hola!', 0), +(12470, 'esMX', '¿Qué nuevas noticias nos traes? ¿Qué ha pasado en el Santuario de Dragones Bronce?$b$b¿Encontraste a quien fuera el lider del Vuelo Infinito?', 0), +(12472, 'esMX', '$b$bPensábamos que no volverías, $N.', 0), +(12475, 'esMX', '¿Has recuperado el mapa del Embate?', 0), +(12476, 'esMX', 'Limpia el Campo Base del Embate, $N.', 0), +(12477, 'esMX', '¿Encontraste una copia?', 0), +(12478, 'esMX', '¿Has encontrado la caverna de la Agonía de Escarcha?', 0), +(12498, 'esMX', '¡Acaba con la Plaga presente en Reposo de Galakrond antes de que sea demasiado tarde!', 0), +(12545, 'esMX', '¡No dejes nada que el Rey Exánime pueda resucitar!', 0), +(13078, 'esMX', 'Ah, querida Dahlia. Te echo mucho de menos.', 0), +(13079, 'esMX', 'Has vuelto de nuevo, $c. ¿Para que te arriesgas pues?', 0), +(13167, 'esMX', '¿Lo has hecho, $c? ¿Has acabado con el rey traidor?', 0), +(13182, 'esMX', '¿Has sido capaz de limpiar nuestro hogar de los Huevos de la Plaga?', 0), +(13187, 'esMX', '¿Te has enfrentado a los ignotos, $c?', 0), +(13190, 'esMX', '¿Has sido capaz de quemar un cadáver de vigía, $r?', 0), +(13204, 'esMX', '¿Qué demonios es eso?', 0), +(13343, 'esMX', '$B$B¿Te conozco? Siento un aura a tu alrededor como si tu misma existencia estuviera en flujo. O estás atrapado en un bucle temporal.$B$BSea la razón que sea, ¡arréglalo rápido o tu existencia será más corta de lo que te imaginas!', 0), +(13372, 'esMX', '$N, has entrado en contacto con la llave del iris. ¿La llevas contigo?$b$b$b$b¿Cómo has conseguido esto? ¿Sapphiron aún tenía la suya?', 0), +(13375, 'esMX', '$N, has entrado en contacto con la llave del iris. ¿La llevas contigo?$b$b$b$b¿Cómo has conseguido esto? ¿Sapphiron aún tenía la suya?', 0), +(13384, 'esMX', 'Solo Malygos puede portar el Corazón de la Magia. Es su posesión más valiosa.', 0), +(13385, 'esMX', 'Solo Malygos puede portar el Corazón de la Magia. Es su posesión más valiosa.', 0); +-- SECTION 3 +-- quest_template_locale esES +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Embadúrnate con la sangre de Loguhn', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11959; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Taunka admitidos en la Horda', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 11983; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Miembros del Vuelo Azul en Jardines Reposo Lunar muertos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12006; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Espíritus Indu\'le en paz', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12031; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Coacción de Oacha\'noa obedecida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12032; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Arpías Viento Helado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12051; +UPDATE `quest_template_locale` SET `ObjectiveText1` = '', `ObjectiveText2` = 'Arpías Viento Helado', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12052; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Objeto de la Aguja de Flujo observado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12060; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Objeto de la Aguja de Flujo observado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12061; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Información de foco de línea de Ley conseguida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12065; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Información de foco de línea de Ley conseguida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12066; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Información de foco de línea de Ley conseguida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12083; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Información de foco de línea de Ley conseguida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12084; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Fuerza devuelta a ancestro Lothalor', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12092; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Fuerza devuelta a ancestro Lothalor', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12096; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Información del foco de línea Ley obtenida', `ObjectiveText2` = 'Observación en Santuario de Dragones Azur', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12107; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Información del foco de línea Ley obtenida', `ObjectiveText2` = 'Observación en Santuario de Dragones Azur', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12110; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Alce de avalancha inoculado', `ObjectiveText2` = 'Pardo ártico inoculado', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12111; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Roanauk Bruma de Hielo iniciado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12140; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Snóbolds Llano Nevado', `ObjectiveText2` = 'Magnatauro del Cementerio de Dragones', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12142; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Snóbolds Llano Nevado', `ObjectiveText2` = '', `ObjectiveText3` = 'Magnatauro del Cementerio de Dragones', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12144; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Nombre del magnatauro Señor de la Guerra', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12150; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Cadáver de alce contagiado limpio', `ObjectiveText2` = 'Cadáver de pardo rabioso limpio', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12166; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Armonización con las líneas Ley de Rasganorte', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12172; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Armonización con las líneas Ley de Rasganorte', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12173; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Miembros de El Embate Escarlata asesinados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12205; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Frasco de añublo probado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12206; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Cadáveres de El Embate Escarlata limpiados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12211; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Riendas de caballo de guerra de El Embate Escarlata entregadas', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12214; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Balista de Nueva Vega del Amparo bombardeada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12232; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Habitante indefenso rescatado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12237; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Velas del Locura del Pecador en llamas', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12243; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Torturador LeCraft completamente interrogado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12252; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Habitante de Hibergarde atrapado rescatado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12253; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Imagen de sacerdote cuervo del Embate robada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12260; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Resguardo destructivo completamente cargado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12261; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Runa nigromántica destruida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12265; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Limpiar cámara de invocación', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12267; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Acusación y muerte del comandante Jordan', `ObjectiveText2` = 'Acusación y muerte del cañonero mayor Zierhut', `ObjectiveText3` = 'Acusación y muerte del herrero Buenhombre', `ObjectiveText4` = 'Acusación y muerte del maestro de establos Mercer' WHERE `locale` IN ('esES', 'esMX') AND ID = 12273; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Tocar campana de la abadía', `ObjectiveText2` = 'Hablar con el sumo abad', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12274; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Eje de Mina Hibergarde alta destruido', `ObjectiveText2` = 'Eje de Mina Hibergarde baja destruido', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12277; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Preguntas a un campesino olvidado', `ObjectiveText2` = 'Preguntas a un fusilero olvidado', `ObjectiveText3` = 'Preguntas a un caballero olvidado', `ObjectiveText4` = 'Preguntas a un lacayo olvidado' WHERE `locale` IN ('esES', 'esMX') AND ID = 12291; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Fantasmas olvidados asesinados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12304; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Vagón de peste saboteado', `ObjectiveText2` = 'Élite de la Séptima Legión bajado a salvo', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12326; +UPDATE `quest_template_locale` SET `ObjectiveText1` = '', `ObjectiveText2` = '', `ObjectiveText3` = 'Desestabiliza el Santuario de Dragones Azur', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12372; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Vigilante rubí devuelto a la tierra', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12417; +UPDATE `quest_template_locale` SET `ObjectiveText1` = '', `ObjectiveText2` = 'Erradicar corrupción rubí', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12418; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Vigilante rubí devuelto a la tierra', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12449; +UPDATE `quest_template_locale` SET `ObjectiveText1` = '', `ObjectiveText2` = 'Erradicar corrupción rubí', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12450; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Soldado de la Séptima Legión herido salvado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12457; +UPDATE `quest_template_locale` SET `ObjectiveText1` = '', `ObjectiveText2` = '', `ObjectiveText3` = 'Miembro de la Plaga de Naxxramas matado', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12462; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Miembro de El Embate Escarlata muerto', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12476; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Secretos del pasado revelados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12478; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Miembro de la Plaga en Jintha\'kalar matado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12545; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Huevos de la Plaga nerubianos destruidos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13182; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Los Olvidados aniquilados', `ObjectiveText2` = 'Heraldo Volazj derrotado', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13187; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Cadáver de vigía Ahn’kahar quemado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13190; diff --git a/data/sql/updates/db_world/2022_11_21_06.sql b/data/sql/updates/db_world/2022_11_21_06.sql new file mode 100644 index 000000000..a929d9206 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_06.sql @@ -0,0 +1,5 @@ +-- DB update 2022_11_21_05 -> 2022_11_21_06 +-- +UPDATE `creature_template_locale` SET `Name` = 'Ilkrud Magthrull' WHERE `entry` = 3664 AND `locale` IN ('esES', 'esMX', 'frFR'); +UPDATE `creature_template_locale` SET `Name` = '伊克魯德·瑪格蘇爾' WHERE `entry` = 3664 AND `locale` = 'zhTW'; +UPDATE `creature_template_locale` SET `Name` = '일크루드 마그스룰' WHERE `entry` = 3664 AND `locale` = 'koKR'; diff --git a/data/sql/updates/db_world/2022_11_21_07.sql b/data/sql/updates/db_world/2022_11_21_07.sql new file mode 100644 index 000000000..e81081986 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_07.sql @@ -0,0 +1,327 @@ +-- DB update 2022_11_21_06 -> 2022_11_21_07 +-- esES missing reward_locale - Grizzly Hills +DELETE FROM `quest_offer_reward_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (12026, 12037, 12054, 12058, 12073, 12074, 12165, 12170, 12175, 12176, 12177, 12178, 12195, 12196, 12197, 12198, 12199, 12201, 12202, 12203, 12204, 12207, 12208, 12213, 12229, 12231, 12236, 12238, 12241, 12242, 12256, 12257, 12259, 12270, 12280, 12284, 12288, 12315, 12317, 12324, 12412, 12413, 12415, 12422, 12423, 12424, 12425, 12427, 12428, 12429, 12430, 12431, 12433, 12436, 12451, 12453, 12468, 12763, 13129); +INSERT INTO `quest_offer_reward_locale` (`ID`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(12026, 'esES', '¿Quién es Brann Barbabronce? Los enanos férreos no tienen motivo para tratar con él, pero no tengo ni idea de por qué estaríamos interesados en sus escrituras.', 0), +(12037, 'esES', '¡Lo sabía!$b$bNi siquiera mi desaparición ha bastado para que esas comadrejas sin nervio vinieran a por mí.$b$b$b$bBueno, te han enviado a ti. Supongo que algo es algo...$b$bToma esto. Prefiero que te lo quedes tú antes que esos lelos del campamento.', 0), +(12054, 'esES', 'Bien hecho, $N. Prepararé el incienso y entonces veremos que estaba haciendo exáctamente este enano de la realeza tan lejos de casa.', 0), +(12058, 'esES', '$b$bAsí qué... ¿Brann cree que ha descubierto una nueva ciudad de los titanes?$b$b\'La cuna de la piedra y el hierro\'$b$b\'Ulduar se cobijó de la tormenta.\'$b$bLe pediré al jefe enviar grandes tropas a los Picos de la Tormenta. Mi gente conoce bien esas tierras y tengo la mejor oportunidad de localizar a ese enano escurridizo.', 0), +(12073, 'esES', '$b$bEntonces, ¿Thor Modan está al borde del colapso?$b$bPerfecto. Pronto centraremos la atención en Dun Argol.', 0), +(12074, 'esES', '$b$b¿Así que los hijos del hierro son tus enemigos también?$b$bMis fuerzas tienen a los enanos férreos atrapados en la ciudad, pero una ayuda podría venirnos muy bien para presionar en el ataque. ¿Nos ayudarías?', 0), +(12165, 'esES', '¿Entonces Tormak está siguiendo adelante con el plan? Supongo que no te habría enviado si no lo hubiera hecho.$b$bOh, hermano... ¿Ahora cómo voy a encontrar la manera de poner esto con toda esta presión? Now how am I going to figure out how to put this together under all this pressure?', 0), +(12170, 'esES', 'Bien hecho, $N. Nuestro control sobre el Aserradero Río Negro puede no estar completo aún, pero gracias a ti estamos un paso más cerca de machacar a esos gusanos de la Alianza.', 0), +(12175, 'esES', 'Me has salvado el pellejo, hermano. Si estás interesado en mas trabajo, tenemos más como esos por aquí.', 0), +(12176, 'esES', 'Te debo una, $gtron:titi;. Acepta esto como pago.', 0), +(12177, 'esES', 'Espero lo mejor, $gtron:titi;.', 0), +(12178, 'esES', '¿Por quién me tomas? ¡Estas pieles huelen a harina!$b$b¡Esto es un insulto a la Horda!', 0), +(12195, 'esES', 'Estos deberían servir. Ahora, veamos si funciona.', 0), +(12196, 'esES', '$b$bOh, gracias a la luz. Me estaba amenazando sin darme de comer hasta que volvieras. Vamos a ordernar todas estas piezas y veamos que podemos hacer.', 0), +(12197, 'esES', '$b$bEstas no son muy buenas, pero serán suficientes para iniciar al golem. Aunque aún no está ni de lejos listo para el combate.', 0), +(12198, 'esES', 'Bueno, ahora Tormak no puede quejarse más. Este bebé estará listo tan pronto como lo haga.$b$bDespués de abrirte paso por Dun Argol con él, esa cacho vaca tendrá que liberarme.', 0), +(12199, 'esES', '¿Entonces el prospector ha cumplido su parte? Bien. Estaba empezando a preguntarme si todos los trozos de metal y materiales de construcción robados valdrían para algo.$b$bEs una pena que ya no nos sea útil.', 0), +(12201, 'esES', 'Esto debería funcionar, aunque aún queda el asunto del resto de tu disfráz. Incluso esos imbéciles enános férreos reconocerían un impostor con un recognize an impostor con un traje robado.', 0), +(12202, 'esES', 'Esto debería servir. Por Garrosh, estas criaturas son horribles.', 0), +(12203, 'esES', '¿Así que pretende fomentar la guerra civil entre las facciones de la creación de los titanes? ¿Por qué esta ciudad titánica de Ulduar significa tanto para él? Supongo que esto es lo que Kurun y sus gigantes esperan evitar.$b$bBueno, dudo que estemos en condiciones de evitar que los gigantes se peleen entre ellos, pero podemos encontrar una manera de usar esto como ventaja. Debo informar a todos nuestros líderes de una vez.', 0), +(12204, 'esES', '¿Así que él es la mente maestra detrás de los enanos férreos? Debemos averiguar que le estaba ordenando a los enanos férreos hacer en Dun Argol.', 0), +(12207, 'esES', 'Esto está contaminado con una oscuridad mucho más antigua que de lo que podrían señalar sus formas terrenales. La propia tierra tiene un recuerdo de este mal desde que existe.$b$b$N, debemos saber más.', 0), +(12208, 'esES', 'Aquí estás para la recompensa, ¿eh?', 0), +(12213, 'esES', 'Este orbe... ha sido contaminado por... una fuerza maligna.$b$bEn cualquier caso podría aprenderlo estudiando esta energía, una cosa es segura. Debo destruir este orbe lo más pronto posible. Su fuerza de corrupción es muy fuerte.', 0), +(12229, 'esES', 'Esta sangre contiene la misma contaminación que el moco obtenido antes... esto no pinta bien, $N.', 0), +(12231, 'esES', 'Los hijos de Ursoc son prudentes. Sus palabras explican mucho todo lo que hemos visto hasta ahora.', 0), +(12236, 'esES', '', 0), +(12238, 'esES', '¡Hemos hecho algo grande, $gtron:titi;! Y esto solo es el comienzo...$b$bCuando llegue el momento, búscame en Zul\'Drak.$b$b¡Hay que ganar una guerra, $gtron:titi;!', 0), +(12241, 'esES', 'No puedo hacer ninguna promesa, $N. Pero haré lo mejor que pueda para purifiarlos.', 0), +(12242, 'esES', 'Gracias, $N. Tomaré eso que llevas.$b$bEl poder corruptor de esas semillas es muy peligroso. Debo destruirlas de inmediatamente.', 0), +(12256, 'esES', 'Con el poder de los talismanes el draco no tendrá más opción que obedecer tus órdenes. El destino del señor feudal está sellado.', 0), +(12257, 'esES', 'Has hecho exactamente lo que te he pedido. Hemos puesto a los Desuelladragones a la defensiva y pronto nos ocuparemos de su líder.', 0), +(12259, 'esES', 'Los pocos Desuelladragones que quedan no se atreverán a desafiarnos tras tu batalla con el señor feudal. Sin mostrar piedad con los enemigos, así hace las cosas la Horda.', 0), +(12270, 'esES', '¡Buen trabajo, soldado!$b$bAhora coge esta llave y vete a Bahía Ventura. Te dejaré utilizar una de estas trituradoras modificadas para desatar el caos sobre nuestros enemigos.$b$bOh, sí, ¡y si quieres coger el atajo, habla con Darrok!', 0), +(12280, 'esES', 'Gracias, $N. Esto debería bastarme hasta mañana...$b$bAquí tienes el dinero que te prometí.', 0), +(12284, 'esES', '¿Quince menos, eh? Me alegra oírlo, $C.$b$bAl menos nos has conseguido algo más de tiempo, según mis cálculos, al menos un día.$b$bAquí tienes tu paga.', 0), +(12288, 'esES', 'Oh, gracias, gracias.$b$bNos has ayudado a sobrevivir otro día. Quizás aún haya esperanza.', 0), +(12315, 'esES', 'Eres un verdadero soldado de la Horda, $N. ¡Tu valentía inspirará a mis hombres hacia la victoria!', 0), +(12317, 'esES', 'El puerto pronto nos pertenecerá. Lo has hecho muy bien en el día de hoy, $N.', 0), +(12324, 'esES', 'El general estará satisfecho de que te hayas encargado del problema de Ventura y Cía. Ahora, nuestros hombres pueden enfocarse en aplastar a la Alianza.', 0), +(12412, 'esES', 'Has vuelto. Y estás con vida.$b$bDime, ¿qué es todo este disparate sobre los huargen?', 0), +(12413, 'esES', 'No está mal, $N. Quizás seas algo más útil de lo que creí en un principio.', 0), +(12415, 'esES', '$b$bBien hecho, $N. No debemos dejar que la Alianza gane cualquier tipo de ventaja.', 0), +(12422, 'esES', 'Y vas a dejarme ir... así, sin más. Mira, no quiero tener problemas contigo... esos monstruos mataron a mi padre y se llevaron a mi hermana. Tengo otras cosas en las que pensar.', 0), +(12423, 'esES', '¡Ja! ¿Esto es una broma?$b$bApenas puedo darle uso a un libro que ni siquiera comprendo.', 0), +(12424, 'esES', 'El hombre que escribió este diario temía tanto por la vida de sus hijas que las envió lejos de Arroyoplata.$b$bPrecisamente acabamos de capturar a una paria a las afueras de la ciudad de la misma edad que la hija mayor.$b$bMira, $N, aquí ocurren más cosas de las que parecen... no podemos quemar este diario.', 0), +(12425, 'esES', 'Buscas información fuera de tu alcance y por eso vienes a mí. Pero debo advertirte, desconocida, de que las respuestas a tus preguntas pueden no ser de tu agrado.', 0), +(12427, 'esES', '¡Buen trabajo, $gtron:titi;! Toma tu parte.', 0), +(12428, 'esES', '¡Eso sí que es saber moverse, amiga! ¡Muchos apostaron contra ti, lo que es una buena noticia económica!', 0), +(12429, 'esES', '¡Casi se me para el corazón! ¡Creía que ese montón de metal iba a acabar contigo, $gtron:titi;!', 0), +(12430, 'esES', 'Buen juego de piernas, buen juego de piernas. Amiga has acabado rápido con ese orco loco.$b$bLas apuestas estaban siete a uno en tu contra, ¡esta vez hemos hecho mucha pasta!', 0), +(12431, 'esES', 'Lo que ha pasado hoy... tenía que pasar. Eso no significa que tenga que alegrarme de ello.$b$bHe liberado a mi gente de un tirano, pero también he perdido a una hermana. Agradezco mucho tu ayuda, $N. Ahora me gustaría estar sola.', 0), +(12433, 'esES', 'Ahh sí. Eso me ahorrará tiempo.$b$bToma esto por las molestias, amig$go:a;. Y mantén los ojos abiertos para más Elemento 115. Cogeré todo el que puedas encontrar.', 0), +(12436, 'esES', 'Buen trabajo, $N. Cada uno de estos alimentará a dos o tres brutos. No está mal.', 0), +(12451, 'esES', '$b$bAh, así que formas parte de los refuerzos. Bien.$b$bTormak y sus hombres necesitan tu espada.', 0), +(12453, 'esES', 'Gracias, $N. Tu ayuda es bien recibida.', 0), +(12468, 'esES', '¿Krenna te ha enviado a mí? No debes haberle gustado mucho, pero, al fin y al cabo, ¿quién le gusta?$b$bRomper este puesto destacado vrykul va a ser un trabajo duro, muy duro.', 0), +(12763, 'esES', '¡La Luz prevalecerá!', 0), +(13129, 'esES', '$b$bAyy no... ¿Por qué tuvo que largharshe corriendo y haser que la matasen?$B$bSabesh, debería escribirla una cansionsilla. ¡Eso a lo mejó me animaría!$b$b', 0), +-- esMX missing reward_locale +(12026, 'esMX', '¿Quién es Brann Barbabronce? Los enanos férreos no tienen motivo para tratar con él, pero no tengo ni idea de por qué estaríamos interesados en sus escrituras.', 0), +(12037, 'esMX', '¡Lo sabía!$b$bNi siquiera mi desaparición ha bastado para que esas comadrejas sin nervio vinieran a por mí.$b$b$b$bBueno, te han enviado a ti. Supongo que algo es algo...$b$bToma esto. Prefiero que te lo quedes tú antes que esos lelos del campamento.', 0), +(12054, 'esMX', 'Bien hecho, $N. Prepararé el incienso y entonces veremos que estaba haciendo exáctamente este enano de la realeza tan lejos de casa.', 0), +(12058, 'esMX', '$b$bAsí qué... ¿Brann cree que ha descubierto una nueva ciudad de los titanes?$b$b\'La cuna de la piedra y el hierro\'$b$b\'Ulduar se cobijó de la tormenta.\'$b$bLe pediré al jefe enviar grandes tropas a los Picos de la Tormenta. Mi gente conoce bien esas tierras y tengo la mejor oportunidad de localizar a ese enano escurridizo.', 0), +(12073, 'esMX', '$b$bEntonces, ¿Thor Modan está al borde del colapso?$b$bPerfecto. Pronto centraremos la atención en Dun Argol.', 0), +(12074, 'esMX', '$b$b¿Así que los hijos del hierro son tus enemigos también?$b$bMis fuerzas tienen a los enanos férreos atrapados en la ciudad, pero una ayuda podría venirnos muy bien para presionar en el ataque. ¿Nos ayudarías?', 0), +(12165, 'esMX', '¿Entonces Tormak está siguiendo adelante con el plan? Supongo que no te habría enviado si no lo hubiera hecho.$b$bOh, hermano... ¿Ahora cómo voy a encontrar la manera de poner esto con toda esta presión? Now how am I going to figure out how to put this together under all this pressure?', 0), +(12170, 'esMX', 'Bien hecho, $N. Nuestro control sobre el Aserradero Río Negro puede no estar completo aún, pero gracias a ti estamos un paso más cerca de machacar a esos gusanos de la Alianza.', 0), +(12175, 'esMX', 'Me has salvado el pellejo, hermano. Si estás interesado en mas trabajo, tenemos más como esos por aquí.', 0), +(12176, 'esMX', 'Te debo una, $gtron:titi;. Acepta esto como pago.', 0), +(12177, 'esMX', 'Espero lo mejor, $gtron:titi;.', 0), +(12178, 'esMX', '¿Por quién me tomas? ¡Estas pieles huelen a harina!$b$b¡Esto es un insulto a la Horda!', 0), +(12195, 'esMX', 'Estos deberían servir. Ahora, veamos si funciona.', 0), +(12196, 'esMX', '$b$bOh, gracias a la luz. Me estaba amenazando sin darme de comer hasta que volvieras. Vamos a ordernar todas estas piezas y veamos que podemos hacer.', 0), +(12197, 'esMX', '$b$bEstas no son muy buenas, pero serán suficientes para iniciar al golem. Aunque aún no está ni de lejos listo para el combate.', 0), +(12198, 'esMX', 'Bueno, ahora Tormak no puede quejarse más. Este bebé estará listo tan pronto como lo haga.$b$bDespués de abrirte paso por Dun Argol con él, esa cacho vaca tendrá que liberarme.', 0), +(12199, 'esMX', '¿Entonces el prospector ha cumplido su parte? Bien. Estaba empezando a preguntarme si todos los trozos de metal y materiales de construcción robados valdrían para algo.$b$bEs una pena que ya no nos sea útil.', 0), +(12201, 'esMX', 'Esto debería funcionar, aunque aún queda el asunto del resto de tu disfráz. Incluso esos imbéciles enános férreos reconocerían un impostor con un recognize an impostor con un traje robado.', 0), +(12202, 'esMX', 'Esto debería servir. Por Garrosh, estas criaturas son horribles.', 0), +(12203, 'esMX', '¿Así que pretende fomentar la guerra civil entre las facciones de la creación de los titanes? ¿Por qué esta ciudad titánica de Ulduar significa tanto para él? Supongo que esto es lo que Kurun y sus gigantes esperan evitar.$b$bBueno, dudo que estemos en condiciones de evitar que los gigantes se peleen entre ellos, pero podemos encontrar una manera de usar esto como ventaja. Debo informar a todos nuestros líderes de una vez.', 0), +(12204, 'esMX', '¿Así que él es la mente maestra detrás de los enanos férreos? Debemos averiguar que le estaba ordenando a los enanos férreos hacer en Dun Argol.', 0), +(12207, 'esMX', 'Esto está contaminado con una oscuridad mucho más antigua que de lo que podrían señalar sus formas terrenales. La propia tierra tiene un recuerdo de este mal desde que existe.$b$b$N, debemos saber más.', 0), +(12208, 'esMX', 'Aquí estás para la recompensa, ¿eh?', 0), +(12213, 'esMX', 'Este orbe... ha sido contaminado por... una fuerza maligna.$b$bEn cualquier caso podría aprenderlo estudiando esta energía, una cosa es segura. Debo destruir este orbe lo más pronto posible. Su fuerza de corrupción es muy fuerte.', 0), +(12229, 'esMX', 'Esta sangre contiene la misma contaminación que el moco obtenido antes... esto no pinta bien, $N.', 0), +(12231, 'esMX', 'Los hijos de Ursoc son prudentes. Sus palabras explican mucho todo lo que hemos visto hasta ahora.', 0), +(12236, 'esMX', '', 0), +(12238, 'esMX', '¡Hemos hecho algo grande, $gtron:titi;! Y esto solo es el comienzo...$b$bCuando llegue el momento, búscame en Zul\'Drak.$b$b¡Hay que ganar una guerra, $gtron:titi;!', 0), +(12241, 'esMX', 'No puedo hacer ninguna promesa, $N. Pero haré lo mejor que pueda para purifiarlos.', 0), +(12242, 'esMX', 'Gracias, $N. Tomaré eso que llevas.$b$bEl poder corruptor de esas semillas es muy peligroso. Debo destruirlas de inmediatamente.', 0), +(12256, 'esMX', 'Con el poder de los talismanes el draco no tendrá más opción que obedecer tus órdenes. El destino del señor feudal está sellado.', 0), +(12257, 'esMX', 'Has hecho exactamente lo que te he pedido. Hemos puesto a los Desuelladragones a la defensiva y pronto nos ocuparemos de su líder.', 0), +(12259, 'esMX', 'Los pocos Desuelladragones que quedan no se atreverán a desafiarnos tras tu batalla con el señor feudal. Sin mostrar piedad con los enemigos, así hace las cosas la Horda.', 0), +(12270, 'esMX', '¡Buen trabajo, soldado!$b$bAhora coge esta llave y vete a Bahía Ventura. Te dejaré utilizar una de estas trituradoras modificadas para desatar el caos sobre nuestros enemigos.$b$bOh, sí, ¡y si quieres coger el atajo, habla con Darrok!', 0), +(12280, 'esMX', 'Gracias, $N. Esto debería bastarme hasta mañana...$b$bAquí tienes el dinero que te prometí.', 0), +(12284, 'esMX', '¿Quince menos, eh? Me alegra oírlo, $C.$b$bAl menos nos has conseguido algo más de tiempo, según mis cálculos, al menos un día.$b$bAquí tienes tu paga.', 0), +(12288, 'esMX', 'Oh, gracias, gracias.$b$bNos has ayudado a sobrevivir otro día. Quizás aún haya esperanza.', 0), +(12315, 'esMX', 'Eres un verdadero soldado de la Horda, $N. ¡Tu valentía inspirará a mis hombres hacia la victoria!', 0), +(12317, 'esMX', 'El puerto pronto nos pertenecerá. Lo has hecho muy bien en el día de hoy, $N.', 0), +(12324, 'esMX', 'El general estará satisfecho de que te hayas encargado del problema de Ventura y Cía. Ahora, nuestros hombres pueden enfocarse en aplastar a la Alianza.', 0), +(12412, 'esMX', 'Has vuelto. Y estás con vida.$b$bDime, ¿qué es todo este disparate sobre los huargen?', 0), +(12413, 'esMX', 'No está mal, $N. Quizás seas algo más útil de lo que creí en un principio.', 0), +(12415, 'esMX', '$b$bBien hecho, $N. No debemos dejar que la Alianza gane cualquier tipo de ventaja.', 0), +(12422, 'esMX', 'Y vas a dejarme ir... así, sin más. Mira, no quiero tener problemas contigo... esos monstruos mataron a mi padre y se llevaron a mi hermana. Tengo otras cosas en las que pensar.', 0), +(12423, 'esMX', '¡Ja! ¿Esto es una broma?$b$bApenas puedo darle uso a un libro que ni siquiera comprendo.', 0), +(12424, 'esMX', 'El hombre que escribió este diario temía tanto por la vida de sus hijas que las envió lejos de Arroyoplata.$b$bPrecisamente acabamos de capturar a una paria a las afueras de la ciudad de la misma edad que la hija mayor.$b$bMira, $N, aquí ocurren más cosas de las que parecen... no podemos quemar este diario.', 0), +(12425, 'esMX', 'Buscas información fuera de tu alcance y por eso vienes a mí. Pero debo advertirte, desconocida, de que las respuestas a tus preguntas pueden no ser de tu agrado.', 0), +(12427, 'esMX', '¡Buen trabajo, $gtron:titi;! Toma tu parte.', 0), +(12428, 'esMX', '¡Eso sí que es saber moverse, amiga! ¡Muchos apostaron contra ti, lo que es una buena noticia económica!', 0), +(12429, 'esMX', '¡Casi se me para el corazón! ¡Creía que ese montón de metal iba a acabar contigo, $gtron:titi;!', 0), +(12430, 'esMX', 'Buen juego de piernas, buen juego de piernas. Amiga has acabado rápido con ese orco loco.$b$bLas apuestas estaban siete a uno en tu contra, ¡esta vez hemos hecho mucha pasta!', 0), +(12431, 'esMX', 'Lo que ha pasado hoy... tenía que pasar. Eso no significa que tenga que alegrarme de ello.$b$bHe liberado a mi gente de un tirano, pero también he perdido a una hermana. Agradezco mucho tu ayuda, $N. Ahora me gustaría estar sola.', 0), +(12433, 'esMX', 'Ahh sí. Eso me ahorrará tiempo.$b$bToma esto por las molestias, amig$go:a;. Y mantén los ojos abiertos para más Elemento 115. Cogeré todo el que puedas encontrar.', 0), +(12436, 'esMX', 'Buen trabajo, $N. Cada uno de estos alimentará a dos o tres brutos. No está mal.', 0), +(12451, 'esMX', '$b$bAh, así que formas parte de los refuerzos. Bien.$b$bTormak y sus hombres necesitan tu espada.', 0), +(12453, 'esMX', 'Gracias, $N. Tu ayuda es bien recibida.', 0), +(12468, 'esMX', '¿Krenna te ha enviado a mí? No debes haberle gustado mucho, pero, al fin y al cabo, ¿quién le gusta?$b$bRomper este puesto destacado vrykul va a ser un trabajo duro, muy duro.', 0), +(12763, 'esMX', '¡La Luz prevalecerá!', 0), +(13129, 'esMX', '$b$bAyy no... ¿Por qué tuvo que largharshe corriendo y haser que la matasen?$B$bSabesh, debería escribirla una cansionsilla. ¡Eso a lo mejó me animaría!$b$b', 0); +-- 2 SECTION +-- esES missing quest_request_items_locale +DELETE FROM `quest_request_items_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (12026, 12054, 12058, 12073, 12165, 12170, 12175, 12176, 12177, 12178, 12195, 12196, 12197, 12199, 12201, 12202, 12203, 12204, 12207, 12213, 12229, 12231, 12236, 12241, 12242, 12256, 12257, 12259, 12270, 12280, 12284, 12288, 12315, 12317, 12324, 12412, 12413, 12422, 12423, 12424, 12427, 12433, 12436, 12453, 13129); +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(12026, 'esES', '¿Qúe es lo que tienes ahí?', 0), +(12054, 'esES', '¿Has traído suficiente cantidad de plantas?', 0), +(12058, 'esES', '¿Has descubierto los secretos de Thor Modan?', 0), +(12073, 'esES', '¿Te has cargado a los enanos férreos que te pedí?', 0), +(12165, 'esES', '¿Tienes... tienes esos planos que pedí que trajeras?', 0), +(12170, 'esES', '¿Has eliminado a esos perros de la Alianza? ¡La victoria debe ser nuestra!', 0), +(12175, 'esES', '¿Tienes esas pieles, $gtron:titi;?', 0), +(12176, 'esES', '¿Tienes esas pieles, $gtron:titi;?', 0), +(12177, 'esES', '¿Tienes eso, $gtron:titi;?', 0), +(12178, 'esES', '¿Tienes idea de con quién estás hablando?', 0), +(12195, 'esES', '¿Traes los cuernos?', 0), +(12196, 'esES', 'T-t-t-traes esas p-p-piezas de gólem?', 0), +(12197, 'esES', '¿Tienes esas celulas de energía?', 0), +(12199, 'esES', 'Por favor dime que ha funcionado...', 0), +(12201, 'esES', '¿Has conseguido el uniforme?', 0), +(12202, 'esES', '¿Has conseguido esas fotografías?', 0), +(12203, 'esES', '¿Sabes algo de Loken?', 0), +(12204, 'esES', '¿Qué has encontrado?', 0), +(12207, 'esES', '¿Has conseguido las muestras, $N?', 0), +(12213, 'esES', '¿Has terminado lo que te pedí, $N?', 0), +(12229, 'esES', '¿Has conseguido las muestras de sangre, $N?', 0), +(12231, 'esES', '¿Entonces has hablado con los hijos de Ursoc, $N?', 0), +(12236, 'esES', 'Has vuelto. ¿Ha sido un éxito?', 0), +(12241, 'esES', '¿Me traes las cenizas, $N?', 0), +(12242, 'esES', '¿Entonces has obtenido las semillas de Vordrassil, $N?', 0), +(12256, 'esES', '¿Has conseguido esos talismanes?', 0), +(12257, 'esES', '¿Has terminado con tu tarea?', 0), +(12259, 'esES', '¿Has vencido al señor feudal?', 0), +(12270, 'esES', '¿Me has traido ya esas trituradoras, $C?', 0), +(12280, 'esES', '¿Me has conseguido ya esas piezas?', 0), +(12284, 'esES', '¿Eso que está en tu arma es sangre de Alianza, $r?', 0), +(12288, 'esES', '¿Has curado a nuestros heridos, $N?', 0), +(12315, 'esES', '¿Has eliminado al capitán enemigo?', 0), +(12317, 'esES', '¿Has hecho lo que te ordené?', 0), +(12324, 'esES', '¿Has ahumado a los últimos rezagados de Ventura y Cía?', 0), +(12412, 'esES', '¿Has completado tu tarea? Si no, ¿Qué diablos haces aquí?', 0), +(12413, 'esES', '¿Entonces has completado tu tarea, $N?', 0), +(12422, 'esES', '¿Has venido a matarme?', 0), +(12423, 'esES', '¿Qué es lo que tienes ahí?', 0), +(12424, 'esES', '¿Tienes algo que enseñarme?', 0), +(12427, 'esES', 'Esto no acaba hasta que tú o el oso estéis acabados, amig$go:a;!', 0), +(12433, 'esES', '¿Tienes algo de ese Elemento 115, $N?', 0), +(12436, 'esES', '¿Tienes ya ese venado, $N?', 0), +(12453, 'esES', '¿Has completado lo que te había pedido, $N?', 0), +(13129, 'esES', '$b$b¿Qué tiés ahí, tí$go:a;?', 0), +-- esMX missing quest_request_items_locale +(12026, 'esMX', '¿Qúe es lo que tienes ahí?', 0), +(12054, 'esMX', '¿Has traído suficiente cantidad de plantas?', 0), +(12058, 'esMX', '¿Has descubierto los secretos de Thor Modan?', 0), +(12073, 'esMX', '¿Te has cargado a los enanos férreos que te pedí?', 0), +(12165, 'esMX', '¿Tienes... tienes esos planos que pedí que trajeras?', 0), +(12170, 'esMX', '¿Has eliminado a esos perros de la Alianza? ¡La victoria debe ser nuestra!', 0), +(12175, 'esMX', '¿Tienes esas pieles, $gtron:titi;?', 0), +(12176, 'esMX', '¿Tienes esas pieles, $gtron:titi;?', 0), +(12177, 'esMX', '¿Tienes eso, $gtron:titi;?', 0), +(12178, 'esMX', '¿Tienes idea de con quién estás hablando?', 0), +(12195, 'esMX', '¿Traes los cuernos?', 0), +(12196, 'esMX', 'T-t-t-traes esas p-p-piezas de gólem?', 0), +(12197, 'esMX', '¿Tienes esas celulas de energía?', 0), +(12199, 'esMX', 'Por favor dime que ha funcionado...', 0), +(12201, 'esMX', '¿Has conseguido el uniforme?', 0), +(12202, 'esMX', '¿Has conseguido esas fotografías?', 0), +(12203, 'esMX', '¿Sabes algo de Loken?', 0), +(12204, 'esMX', '¿Qué has encontrado?', 0), +(12207, 'esMX', '¿Has conseguido las muestras, $N?', 0), +(12213, 'esMX', '¿Has terminado lo que te pedí, $N?', 0), +(12229, 'esMX', '¿Has conseguido las muestras de sangre, $N?', 0), +(12231, 'esMX', '¿Entonces has hablado con los hijos de Ursoc, $N?', 0), +(12236, 'esMX', 'Has vuelto. ¿Ha sido un éxito?', 0), +(12241, 'esMX', '¿Me traes las cenizas, $N?', 0), +(12242, 'esMX', '¿Entonces has obtenido las semillas de Vordrassil, $N?', 0), +(12256, 'esMX', '¿Has conseguido esos talismanes?', 0), +(12257, 'esMX', '¿Has terminado con tu tarea?', 0), +(12259, 'esMX', '¿Has vencido al señor feudal?', 0), +(12270, 'esMX', '¿Me has traido ya esas trituradoras, $C?', 0), +(12280, 'esMX', '¿Me has conseguido ya esas piezas?', 0), +(12284, 'esMX', '¿Eso que está en tu arma es sangre de Alianza, $r?', 0), +(12288, 'esMX', '¿Has curado a nuestros heridos, $N?', 0), +(12315, 'esMX', '¿Has eliminado al capitán enemigo?', 0), +(12317, 'esMX', '¿Has hecho lo que te ordené?', 0), +(12324, 'esMX', '¿Has ahumado a los últimos rezagados de Ventura y Cía?', 0), +(12412, 'esMX', '¿Has completado tu tarea? Si no, ¿Qué diablos haces aquí?', 0), +(12413, 'esMX', '¿Entonces has completado tu tarea, $N?', 0), +(12422, 'esMX', '¿Has venido a matarme?', 0), +(12423, 'esMX', '¿Qué es lo que tienes ahí?', 0), +(12424, 'esMX', '¿Tienes algo que enseñarme?', 0), +(12427, 'esMX', 'Esto no acaba hasta que tú o el oso estéis acabados, amig$go:a;!', 0), +(12433, 'esMX', '¿Tienes algo de ese Elemento 115, $N?', 0), +(12436, 'esMX', '¿Tienes ya ese venado, $N?', 0), +(12453, 'esMX', '¿Has completado lo que te había pedido, $N?', 0), +(13129, 'esMX', '$b$b¿Qué tiés ahí, tí$go:a;?', 0); +-- SECTION 3 +-- quest_template_locale esES +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Primera Profecía descifrada', `ObjectiveText2` = 'Segunda Profecía descifrada', `ObjectiveText3` = 'Tercera Profecía descifrada', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12058; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Defensores enanos férreos muertos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12073; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Alianzas en Río Negro eliminados:', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12170; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Nivel de carga', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12198; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Imágenes de enanos férreos tomadas', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12202; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Mensaje de Loken recibido', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12203; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Hugh Copa interrogado', `ObjectiveText2` = 'Gavrock interrogado', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12204; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Orbe utilizado bajo el Corazón de Vordrassil', `ObjectiveText2` = 'Orbe utilizado bajo la Extremidad de Vordrassil', `ObjectiveText3` = 'Orbe utilizado bajo las Lágrimas de Vordrassil', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12213; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Historia de Orsonn', `ObjectiveText2` = 'Historia de Kodian', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12231; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Ursoc purificado', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12236; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Trituradora entregada', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12270; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Unidades de la Alianza eliminadas', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12284; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Hostigadores heridos sanados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12288; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Alianza eliminada en Bahía Ventura', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12317; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Rezagados de Ventura y Cía. ahuyentados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12324; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Caballos mesteños de las Tierras Altas espantados', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12415; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Vista de águila imperial unida', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 12453; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Huye de Arroyoplata', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13524; +-- esES missing reward_locale - Wintergrasp +DELETE FROM `quest_offer_reward_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (13153, 13154, 13156, 13185, 13186, 13191, 13192, 13193, 13194, 13195, 13196, 13197, 13198, 13199, 13200, 13201, 13202, 13538, 13539); +INSERT INTO `quest_offer_reward_locale` (`ID`, `locale`, `RewardText`, `VerifiedBuild`) VALUES +(13153, 'esES', 'Ais... Aún está empapado. ¿No podrías haberlo secado primero?', 0), +(13154, 'esES', '¡Excelente! Esto ayudará a avivar las llamas de la guerra en los próximos días.', 0), +(13156, 'esES', '¡Excelente! Esto ayudará a nuestras tropas a protegerse del frío.', 0), +(13185, 'esES', 'Buen trabajo. A Murp le hubiera gustado estar allí para ayudar.', 0), +(13186, 'esES', '¡Excelente! Eso debería ralentizar su asalto.', 0), +(13191, 'esES', '¡Excelente! ¡Esto nos ayudará a vencer a la Alianza en las batallas que quedan por venir!', 0), +(13192, 'esES', 'Oh. ¡Ese e\'h el equipo, colega!', 0), +(13193, 'esES', 'Me temo que me voy a pasar otra noche afilando huesos. ¿Por qué no me quedé en la Ciudad de Lunargenta como mi hermano?', 0), +(13194, 'esES', 'Gracias, esto nos ayudará a tratar las heridas profundas de nuestros soldados.', 0), +(13195, 'esES', '¡Excelente! Esto ayudará a nuestras tropas a protegerse del frío.', 0), +(13196, 'esES', '¡Excelente! Esto ayudará a avivar las llamas de la guerra en los próximos días.', 0), +(13197, 'esES', '¡Excelente! Esto ayudará a avivar las llamas de la guerra en los próximos días.', 0), +(13198, 'esES', 'Ais... Aún está empapado. ¿No podrías haberlo secado primero?', 0), +(13199, 'esES', 'Me temo que me voy a pasar otra noche afilando huesos. ¿Por qué no me quedé en la Ciudad de Lunargenta como mi hermano?', 0), +(13200, 'esES', '¡Excelente! ¡Eso debería hacer mella en sus máquinas de guerra!', 0), +(13201, 'esES', 'Gracias, esto nos ayudará a tratar las heridas profundas de nuestros soldados.', 0), +(13202, 'esES', 'Oh. ¡Ese e\'h el equipo, colega!', 0), +(13538, 'esES', '¡He oído la explosión desde aquí! Excelente trabajo, ya hemos comenzado a redirigir la energía hacia la reliquia del Titán para sobrecargar nuestras propias fuerzas.', 0), +(13539, 'esES', 'Ahora para matar al enemigo, nuestros hombres y mujeres deben despertar su ira. Para tener una ventaja al derrotar al enemigo, deben tener su recompensa. Espero que esto sea suficiente por tu servicio con la Horda.', 0), +-- esMX missing reward_locale +(13153, 'esMX', 'Ais... Aún está empapado. ¿No podrías haberlo secado primero?', 0), +(13154, 'esMX', '¡Excelente! Esto ayudará a avivar las llamas de la guerra en los próximos días.', 0), +(13156, 'esMX', '¡Excelente! Esto ayudará a nuestras tropas a protegerse del frío.', 0), +(13185, 'esMX', 'Buen trabajo. A Murp le hubiera gustado estar allí para ayudar.', 0), +(13186, 'esMX', '¡Excelente! Eso debería ralentizar su asalto.', 0), +(13191, 'esMX', '¡Excelente! ¡Esto nos ayudará a vencer a la Alianza en las batallas que quedan por venir!', 0), +(13192, 'esMX', 'Oh. ¡Ese e\'h el equipo, colega!', 0), +(13193, 'esMX', 'Me temo que me voy a pasar otra noche afilando huesos. ¿Por qué no me quedé en la Ciudad de Lunargenta como mi hermano?', 0), +(13194, 'esMX', 'Gracias, esto nos ayudará a tratar las heridas profundas de nuestros soldados.', 0), +(13195, 'esMX', '¡Excelente! Esto ayudará a nuestras tropas a protegerse del frío.', 0), +(13196, 'esMX', '¡Excelente! Esto ayudará a avivar las llamas de la guerra en los próximos días.', 0), +(13197, 'esMX', '¡Excelente! Esto ayudará a avivar las llamas de la guerra en los próximos días.', 0), +(13198, 'esMX', 'Ais... Aún está empapado. ¿No podrías haberlo secado primero?', 0), +(13199, 'esMX', 'Me temo que me voy a pasar otra noche afilando huesos. ¿Por qué no me quedé en la Ciudad de Lunargenta como mi hermano?', 0), +(13200, 'esMX', '¡Excelente! ¡Eso debería hacer mella en sus máquinas de guerra!', 0), +(13201, 'esMX', 'Gracias, esto nos ayudará a tratar las heridas profundas de nuestros soldados.', 0), +(13202, 'esMX', 'Oh. ¡Ese e\'h el equipo, colega!', 0), +(13538, 'esMX', '¡He oído la explosión desde aquí! Excelente trabajo, ya hemos comenzado a redirigir la energía hacia la reliquia del Titán para sobrecargar nuestras propias fuerzas.', 0), +(13539, 'esMX', 'Ahora para matar al enemigo, nuestros hombres y mujeres deben despertar su ira. Para tener una ventaja al derrotar al enemigo, deben tener su recompensa. Espero que esto sea suficiente por tu servicio con la Horda.', 0); +-- 2 SECTION +-- esES missing quest_request_items_locale +DELETE FROM `quest_request_items_locale` WHERE `locale` IN ('esES', 'esMX') AND `ID` IN (13153, 13156, 13177, 13179, 13181, 13185, 13186, 13191, 13192, 13194, 13195, 13197, 13198, 13200, 13201, 13202, 13222, 13539); +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(13153, 'esES', 'Entonces, ¿has encontrado la armadura?', 0), +(13156, 'esES', '¡Espero que no hayas levantado ningún Azotador por error! La semana pasada le dieron una buena tunda de latigazos a nuestro oficial.', 0), +(13177, 'esES', 'Y bien, ¿Has completado tu misión?', 0), +(13179, 'esES', 'Y bien, ¿Has completado tu misión?', 0), +(13181, 'esES', '¿Entonces hemos ganado?', 0), +(13185, 'esES', '¿Has destruido sus vehículos de asedio?', 0), +(13186, 'esES', 'No hay tiempo que perder. ¿Has destruido sus vehículos de asedio?', 0), +(13191, 'esES', '¿Y bien? ¿Has averiguado donde se encuentran las llamas enfurecidas o la Alianza te ha dado una paliza y has huído como un bebé llorón?', 0), +(13192, 'esES', '¿Trae\'h la armadura colega?', 0), +(13194, 'esES', '¿Has podido recuperar las hierbas? La fiebre y heridas aumentan por horas.', 0), +(13195, 'esES', '¡Espero que no hayas levantado ningún Azotador por error! La semana pasada le dieron una buena tunda de latigazos a nuestro oficial.', 0), +(13197, 'esES', '¿Y bien? ¿Has averiguado donde se encuentran las llamas enfurecidas o la Horda te ha dado una paliza y has huído como un bebé llorón?', 0), +(13198, 'esES', 'Entonces, ¿has encontrado la armadura?', 0), +(13200, 'esES', '¿Y bien? ¿Has averiguado donde se encuentran las llamas enfurecidas o la Alianza te ha dado una paliza y has huído como un bebé llorón?', 0), +(13201, 'esES', '¿Has podido recuperar las hierbas? La fiebre y heridas aumentan por horas.', 0), +(13202, 'esES', '¿Traes la armadura colega?', 0), +(13222, 'esES', 'No hay tiempo que perder. ¿Has destruido la Fortaleza?', 0), +(13539, 'esES', 'Mi odio por los brujos solo es superado por el que le tengo a los no-muertos. Sin embargo, ambos pueden demostrar ser útiles a veces.', 0), +-- esMX missing quest_request_items_locale +(13153, 'esMX', 'Entonces, ¿has encontrado la armadura?', 0), +(13156, 'esMX', '¡Espero que no hayas levantado ningún Azotador por error! La semana pasada le dieron una buena tunda de latigazos a nuestro oficial.', 0), +(13177, 'esMX', 'Y bien, ¿Has completado tu misión?', 0), +(13179, 'esMX', 'Y bien, ¿Has completado tu misión?', 0), +(13181, 'esMX', '¿Entonces hemos ganado?', 0), +(13185, 'esMX', '¿Has destruido sus vehículos de asedio?', 0), +(13186, 'esMX', 'No hay tiempo que perder. ¿Has destruido sus vehículos de asedio?', 0), +(13191, 'esMX', '¿Y bien? ¿Has averiguado donde se encuentran las llamas enfurecidas o la Alianza te ha dado una paliza y has huído como un bebé llorón?', 0), +(13192, 'esMX', '¿Trae\'h la armadura colega?', 0), +(13194, 'esMX', '¿Has podido recuperar las hierbas? La fiebre y heridas aumentan por horas.', 0), +(13195, 'esMX', '¡Espero que no hayas levantado ningún Azotador por error! La semana pasada le dieron una buena tunda de latigazos a nuestro oficial.', 0), +(13197, 'esMX', '¿Y bien? ¿Has averiguado donde se encuentran las llamas enfurecidas o la Horda te ha dado una paliza y has huído como un bebé llorón?', 0), +(13198, 'esMX', 'Entonces, ¿has encontrado la armadura?', 0), +(13200, 'esMX', '¿Y bien? ¿Has averiguado donde se encuentran las llamas enfurecidas o la Alianza te ha dado una paliza y has huído como un bebé llorón?', 0), +(13201, 'esMX', '¿Has podido recuperar las hierbas? La fiebre y heridas aumentan por horas.', 0), +(13202, 'esMX', '¿Traes la armadura colega?', 0), +(13222, 'esMX', 'No hay tiempo que perder. ¿Has destruido la Fortaleza?', 0), +(13539, 'esMX', 'Mi odio por los brujos solo es superado por el que le tengo a los no-muertos. Sin embargo, ambos pueden demostrar ser útiles a veces.', 0); +-- SECTION 3 +-- quest_template_locale esES +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Aparatos de asedio de la Alianza destruidos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13185; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Aparatos de asedio de la Horda destruidos', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13186; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Vehículo de asedio defendido', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13222; +UPDATE `quest_template_locale` SET `ObjectiveText1` = 'Destruye una torre sur en Conquista del Invierno', `ObjectiveText2` = '', `ObjectiveText3` = '', `ObjectiveText4` = '' WHERE `locale` IN ('esES', 'esMX') AND ID = 13539; diff --git a/data/sql/updates/db_world/2022_11_21_08.sql b/data/sql/updates/db_world/2022_11_21_08.sql new file mode 100644 index 000000000..81081d31f --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_08.sql @@ -0,0 +1,3 @@ +-- DB update 2022_11_21_07 -> 2022_11_21_08 +-- +UPDATE `smart_scripts` SET `action_param2`=1 WHERE `entryorguid`=17478 AND `source_type`=0 AND `id`=5; diff --git a/data/sql/updates/db_world/2022_11_21_09.sql b/data/sql/updates/db_world/2022_11_21_09.sql new file mode 100644 index 000000000..cf60ce86d --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_09.sql @@ -0,0 +1,4 @@ +-- DB update 2022_11_21_08 -> 2022_11_21_09 +-- +DELETE FROM `creature` WHERE `guid` = 85566; +UPDATE `creature_template_addon` SET `emote` = 234 WHERE `entry` = 18595; diff --git a/data/sql/updates/db_world/2022_11_21_10.sql b/data/sql/updates/db_world/2022_11_21_10.sql new file mode 100644 index 000000000..c93a6718d --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_10.sql @@ -0,0 +1,19 @@ +-- DB update 2022_11_21_09 -> 2022_11_21_10 +-- +UPDATE `creature_template` SET `npcflag`=130, `type_flags`=`type_flags`|0x08000000, `flags_extra`=`flags_extra`|0x01000000 WHERE `entry`=3443; + +DELETE FROM `gossip_menu_option` WHERE `MenuId`=10311; +INSERT INTO `gossip_menu_option` VALUES +(10311,0,1,'I want to browse your goods',3370,3,128,0,0,0,0,'',0,0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=10311; +INSERT INTO `conditions` VALUES +(15,10311,0,0,0,7,0,185,15,0,0,0,0,'','Show vendor flag if player has cooking'), +(15,10311,0,0,0,8,0,862,0,0,0,0,0,'','Show vendor flag if player player has quest Dig Rat Stew rewarded'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=23 AND `SourceGroup`=3443; +INSERT INTO `conditions` VALUES +(23,3443,0,0,0,7,0,185,15,0,0,0,0,'','Show vendor flag if player has cooking'), +(23,3443,0,0,0,8,0,862,0,0,0,0,0,'','Show vendor flag if player player has quest Dig Rat Stew rewarded'); + +UPDATE `quest_template_addon` SET `RequiredSkillPoints`=15 WHERE `id`=862; diff --git a/data/sql/updates/db_world/2022_11_21_11.sql b/data/sql/updates/db_world/2022_11_21_11.sql new file mode 100644 index 000000000..5779f7b86 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_11.sql @@ -0,0 +1,3 @@ +-- DB update 2022_11_21_10 -> 2022_11_21_11 +-- Remove golden pearl drop from creature +DELETE FROM `item_loot_template` WHERE `Entry` IN (17917, 20627) AND (`Item` IN (13926)); diff --git a/data/sql/updates/db_world/2022_11_21_12.sql b/data/sql/updates/db_world/2022_11_21_12.sql new file mode 100644 index 000000000..049d56314 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_12.sql @@ -0,0 +1,5 @@ +-- DB update 2022_11_21_11 -> 2022_11_21_12 +-- +DELETE FROM `spell_script_names` WHERE `spell_id`=24926; +INSERT INTO `spell_script_names` VALUES +(24926,'spell_hallows_end_candy_pirate_costume'); diff --git a/data/sql/updates/db_world/2022_11_21_13.sql b/data/sql/updates/db_world/2022_11_21_13.sql new file mode 100644 index 000000000..88cd14a1f --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_13.sql @@ -0,0 +1,34 @@ +-- DB update 2022_11_21_12 -> 2022_11_21_13 +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 181582) AND (`source_type` = 1) AND (`id` IN (0, 1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(181582, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 0, 12, 19656, 1, 30000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaliri Nest - On Gameobject State Changed - Summon Creature \'Invisible Location Trigger\''), +(181582, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaliri Nest - On Gameobject State Changed - Despawn Instant'); + +-- [Q] Birds of a Feather -- http://wotlk.openwow.com/quest=9397 +UPDATE `creature` SET `MovementType`=0 WHERE `guid`=57793; +DELETE FROM `creature_addon` WHERE `guid`=57793; +DELETE FROM `waypoint_data` WHERE `id`=577930; +-- Falconer Drenna Riverwind SAI +SET @ENTRY := 16790; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,1,20,0,100,0,9397,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Falconer Drenna Riverwind - On Quest 'Birds of a Feather' Finished - Run Script"), +(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,"Falconer Drenna Riverwind - On Quest 'Birds of a Feather' Finished - Store Targetlist"); + +-- Actionlist SAI +SET @ENTRY := 1679000; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Set Run Off"), +(@ENTRY,9,1,0,0,0,100,0,1000,1000,0,0,69,0,0,0,0,0,0,8,0,0,0,-597.806,4110.68,90.848,2.02116,"On Script - Move To Position"), +(@ENTRY,9,2,0,0,0,100,0,2000,2000,0,0,5,16,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Play Emote 16"), +(@ENTRY,9,3,0,0,0,100,0,2000,2000,0,0,12,17262,1,20000,0,0,0,8,0,0,0,-597.244,4111.88,90.7789,0.805268,"On Script - Summon Creature 'Captive Female Kaliri'"), +(@ENTRY,9,4,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,12,1,0,0,0,0,0,0,"On Script - Say Line 0"), +(@ENTRY,9,5,0,0,0,100,0,4000,4000,0,0,69,0,0,0,0,0,0,8,0,0,0,-596.347,4108.47,91.0061,5.15176,"On Script - Move To Position"), +(@ENTRY,9,6,0,0,0,100,0,2000,2000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.10152,"On Script - Set Orientation 4,10152"); + +DELETE FROM `creature_text` WHERE `CreatureID`=16790; +INSERT INTO `creature_text` (`CreatureID`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `comment`) VALUES +(16790, 0, 0, 'Thank you, $N. It looks like they''re going to get along just fine.', 12, 0, 100, 0, 0, 0, 13666, 'Falconer Drenna Riverwind'); diff --git a/data/sql/updates/db_world/2022_11_21_14.sql b/data/sql/updates/db_world/2022_11_21_14.sql new file mode 100644 index 000000000..d740eb686 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_14.sql @@ -0,0 +1,11 @@ +-- DB update 2022_11_21_13 -> 2022_11_21_14 +-- +-- Update effects from classic to the summoning spell +UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectMiscValueB_1` = 64 WHERE (`ID` = 33903); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19188) AND (`source_type` = 0) AND (`id` IN (3, 4, 5, 6)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(19188, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Raging Colossus - Between 0-20% Health - Say Line 0 (No Repeat)'), +(19188, 0, 4, 0, 2, 0, 100, 1, 0, 75, 0, 0, 0, 11, 33903, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Raging Colossus - Between 0-75% Health - Cast \'Serverside - Summon Crystalhide Rageling\' (No Repeat)'), +(19188, 0, 5, 0, 2, 0, 100, 1, 0, 50, 0, 0, 0, 11, 33903, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Raging Colossus - Between 0-50% Health - Cast \'Serverside - Summon Crystalhide Rageling\' (No Repeat)'), +(19188, 0, 6, 0, 2, 0, 100, 1, 0, 25, 0, 0, 0, 11, 33903, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Raging Colossus - Between 0-25% Health - Cast \'Serverside - Summon Crystalhide Rageling\' (No Repeat)'); diff --git a/data/sql/updates/db_world/2022_11_21_15.sql b/data/sql/updates/db_world/2022_11_21_15.sql new file mode 100644 index 000000000..d77d594ab --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_15.sql @@ -0,0 +1,8 @@ +-- DB update 2022_11_21_14 -> 2022_11_21_15 +-- +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 16975; + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16975) AND (`source_type` = 0) AND (`id` IN (0, 1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16975, 0, 0, 0, 0, 0, 100, 0, 6000, 6000, 10000, 10000, 0, 11, 33914, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Uncontrolled Voidwalker - In Combat - Cast \'Shadowstrike\''), +(16975, 0, 1, 0, 2, 0, 100, 1, 0, 50, 0, 0, 0, 11, 33916, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Uncontrolled Voidwalker - Between 0-50% Health - Cast \'Void Drain\' (No Repeat)'); diff --git a/data/sql/updates/db_world/2022_11_21_16.sql b/data/sql/updates/db_world/2022_11_21_16.sql new file mode 100644 index 000000000..b1302bb3e --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_16.sql @@ -0,0 +1,8 @@ +-- DB update 2022_11_21_15 -> 2022_11_21_16 +-- +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (35475,35476,35477,35478) AND `spell_effect`=51120; +INSERT INTO `spell_linked_spell` VALUES +(35475,51120,1,'Drums of War - Tinnitus'), +(35476,51120,1,'Drums of Battle - Tinnitus'), +(35477,51120,1,'Drums of Speed - Tinnitus'), +(35478,51120,1,'Drums of War - Tinnitus'); diff --git a/data/sql/updates/db_world/2022_11_21_17.sql b/data/sql/updates/db_world/2022_11_21_17.sql new file mode 100644 index 000000000..725d825b2 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_17.sql @@ -0,0 +1,140 @@ +-- DB update 2022_11_21_16 -> 2022_11_21_17 +-- Deathwhisperer (19299) +UPDATE `creature_template_addon` SET `auras` = '15088 12787' WHERE (`entry` = 19299); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 19299; +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19299) AND (`source_type` = 0) AND (`id` IN (0, 1, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(19299, 0, 0, 0, 0, 0, 100, 0, 4000, 6000, 12000, 16000, 0, 11, 32417, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Deathwhisperer - In Combat - Cast \'Mind Flay\''); + +-- Dread Tactician (16959) +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=16959; +DELETE FROM `smart_scripts` WHERE `entryorguid`=16959 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(16959,0,0,0,0,0,100,0,5000,8000,15000,20000,0,11,33678,0,0,0,0,0,2,0,0,0,0,0,0,0,'Dread Tactician - In Combat - Cast \'Carrion Swarm\''), +(16959,0,1,0,0,0,100,0,8000,11000,24000,29000,0,11,12098,0,0,0,0,0,6,0,0,0,0,0,0,0,'Dread Tactician - In Combat - Cast \'Sleep\''), +(16959,0,2,0,2,0,100,1,0,30,0,0,0,11,33679,0,0,0,0,0,5,0,0,0,0,0,0,0,'Dread Tactician - Between 0-30% Health - Cast \'Inferno\' (No Repeat)'); + +-- Felguard Destroyer (18977) +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=18977; +DELETE FROM `smart_scripts` WHERE `entryorguid`=18977 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(18977,0,0,0,9,0,100,1,8,40,0,0,0,11,33971,2,0,0,0,0,2,0,0,0,0,0,0,0,'Felguard Destroyer - Within 8-40 Range - Cast \'Sweeping Charge\' (No Repeat)'), +(18977,0,1,0,0,0,100,0,7000,9000,11000,15000,0,11,13737,0,0,0,0,0,2,0,0,0,0,0,0,0,'Felguard Destroyer - In Combat - Cast \'Mortal Strike\''), +(18977,0,2,0,0,0,100,0,3000,5000,7000,11000,0,11,40505,0,0,0,0,0,2,0,0,0,0,0,0,0,'Felguard Destroyer - In Combat - Cast \'Cleave\''); + +-- Subjugator Yalqiz (19335) +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 19335; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19335); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(19335, 0, 0, 0, 0, 0, 100, 0, 5000, 10000, 15000, 20000, 0, 11, 32026, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Subjugator Yalqiz - In Combat - Cast \'Pain Spike\''), +(19335, 0, 1, 0, 2, 0, 100, 1, 20, 80, 0, 0, 0, 11, 32000, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Subjugator Yalqiz - Between 20-80% Health - Cast \'Mind Sear\' (No Repeat)'), +(19335, 0, 2, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 11, 29651, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Subjugator Yalqiz - On Reset - Cast \'Dual Wield\''); + +-- Vorakem Doomspeaker +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=18679; +DELETE FROM `smart_scripts` WHERE `entryorguid`=18679 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(18679,0,0,0,0,0,100,0,5000,7000,11000,14000,0,11,9080,0,0,0,0,0,2,0,0,0,0,0,0,0,'Vorakem Doomspeaker - In Combat - Cast \'Hamstring\''), +(18679,0,1,0,0,0,100,0,7000,9000,12000,15000,0,11,33804,0,0,0,0,0,1,0,0,0,0,0,0,0,'Vorakem Doomspeaker - In Combat - Cast \'Flame Wave\''), +(18679,0,2,0,2,0,100,1,0,20,0,0,0,11,8599,0,0,0,0,0,1,0,0,0,0,0,0,0,'Vorakem Doomspeaker - Between 0-20% Health - Cast Enrage (No Repeat)'), +(18679,0,3,0,2,0,100,1,0,20,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Vorakem Doomspeaker - Between 0-20% Health - Say Line 0 (No Repeat)'); + +DELETE FROM `creature_text` WHERE `CreatureID`=18679; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(18679,0,0,'%s becomes enraged!',16,0,100,0,0,0,10677,0,'Vorakem Doomspeaker'); + +-- Flame Wave (19381) +DELETE FROM `creature_template_addon` WHERE (`entry` = 19381); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(19381, 0, 0, 0, 0, 0, 0, '33800'); + +-- Starving Helboar (16879) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16879) AND (`source_type` = 0) AND (`id` IN (0)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16879, 0, 0, 0, 2, 0, 100, 1, 20, 80, 0, 0, 0, 11, 33908, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Starving Helboar - Between 20-80% Health - Cast \'Burning Spikes\' (No Repeat)'); + +-- Infernal Warbringer (19261) +UPDATE `creature_template_addon` SET `auras` = '19483' WHERE (`entry` = 19261); +UPDATE `creature_template` SET `AIName` = '' WHERE `entry` = 19261; +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19261) AND (`source_type` = 0); + +-- Mekthorg the Wild (18677) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18677) AND (`source_type` = 0) AND (`id` IN (0, 1, 2, 3)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18677, 0, 0, 0, 0, 0, 100, 0, 3000, 3200, 7500, 8400, 0, 11, 38875, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Mekthorg the Wild - In Combat - Cast \'Pike Vault\''), +(18677, 0, 1, 0, 2, 0, 100, 1, 30, 40, 0, 0, 0, 11, 8599, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mekthorg the Wild - Between 30-40% Health - Cast \'Enrage\' (No Repeat)'), +(18677, 0, 2, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 11, 37704, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Mekthorg the Wild - Between 0-15% Health - Cast \'Whirlwind\' (No Repeat)'), +(18677, 0, 3, 0, 2, 0, 100, 0, 30, 40, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mekthorg the Wild - Between 30-40% Health - Say Line 0'); + +DELETE FROM `creature_text` WHERE `CreatureID`=18677; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(18677,0,0,'%s becomes enraged!',16,0,100,0,0,0,10677,0,'Mekthorg the Wild'); + +-- Arch Mage Xintor (16977) +DELETE FROM `creature_template_addon` WHERE (`entry` = 16977); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(16977, 0, 0, 0, 0, 0, 0, '33900'); + +-- Rogue Voidwalker (16974) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16974) AND (`source_type` = 0) AND (`id` IN (0, 1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16974, 0, 0, 0, 0, 0, 100, 0, 6000, 6000, 10000, 10000, 0, 11, 33914, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Rogue Voidwalker - In Combat - Cast \'Shadowstrike\''), +(16974, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 34234, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rogue Voidwalker - On Just Died - Cast \'Collapse\''); + +-- Void Spawner L (19681) +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=19681; +DELETE FROM `smart_scripts` WHERE `entryorguid`=19681 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(19681,0,0,0,1,0,100,0,1000,120000,120000,240000,0,11,34303,0,0,0,0,0,1,0,0,0,0,0,0,0,'Void Spawner L - Out of Combat - Cast \'Nether Charge\''); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=34303; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13,3,34303,0,0,32,0,144,0,0,1,0,0,'','Nether Charge cannot target players'); + +-- Warboss Nekrogg (19263) +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=19263; +DELETE FROM `smart_scripts` WHERE `entryorguid`=19263 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(19263,0,0,0,0,0,100,0,5000,7000,12000,16000,0,11,34113,0,0,0,0,0,2,0,0,0,0,0,0,0,'Warboss Nekrogg - In Combat - Cast \'Bonechewer Bite\''), +(19263,0,1,0,0,0,100,0,10000,12000,25000,30000,0,11,30474,0,0,0,0,0,2,0,0,0,0,0,0,0,'Warboss Nekrogg - In Combat - Cast \'Bloodthirst\''); + +-- Shattered Hand Guard (19414) +DELETE FROM `smart_scripts` WHERE `entryorguid`=19414 AND `source_type`=0 AND `id`=1; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(19414,0,1,0,0,0,100,0,6000,9000,13000,16000,0,11,33960,0,0,0,0,0,2,0,0,0,0,0,0,0,'Shattered Hand Guard - In Combat - Cast \'Counterstrike\''); + +-- Mo'arg Forgefiend (16946) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16946) AND (`source_type` = 0) AND (`id` IN (0, 1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16946, 0, 0, 0, 0, 0, 100, 0, 2000, 4000, 2000, 4000, 0, 11, 32735, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Mo\'arg Forgefiend - In Combat - Cast \'Saw Blade\''), +(16946, 0, 1, 0, 0, 0, 100, 0, 2500, 5000, 15000, 20000, 0, 11, 36486, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Mo\'arg Forgefiend - In Combat - Cast \'Slime Spray\''); + +-- Gan'arg Servant (16947) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16947) AND (`source_type` = 0) AND (`id` IN (0)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16947, 0, 0, 0, 0, 0, 100, 0, 5000, 10000, 15000, 20000, 0, 11, 32003, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Gan\'arg Servant - In Combat - Cast \'Power Burn\''); + +-- Incandescent Fel Spark (22323) +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 22323); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(22323, 0, 0, 0, 0, 0, 100, 0, 1000, 2000, 3000, 5000, 0, 11, 36247, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Incandescent Fel Spark - In Combat - Cast \'Fel Fireball\''), +(22323, 0, 2, 0, 0, 0, 100, 0, 8000, 11000, 18000, 24000, 0, 11, 39055, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Incandescent Fel Spark - In Combat - Cast \'Flames of Chaos\''), +(22323, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 44877, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Incandescent Fel Spark - On Just Died - Cast \'Living Flare Master\''); + +-- Thornfang Venomspitter (19350) +UPDATE `creature_template_addon` SET `auras` = '22696' WHERE (`entry` = 19350); + +-- Haal'eshi Talonguard (16967) +UPDATE `creature_template_addon` SET `auras` = '29651' WHERE (`entry` = 16967); +DELETE FROM `smart_scripts` WHERE `entryorguid`=16967 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(16967,0,0,0,4,0,100,0,0,0,0,0,0,11,32720,0,0,0,0,0,1,0,0,0,0,0,0,0,'Haal\'eshi Talonguard - On Aggro - Cast \'Sprint\''), +(16967,0,1,0,2,0,100,1,0,15,0,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Haal\'eshi Talonguard - Between 0-15% Health - Flee For Assist (No Repeat)'); + +-- Haal'eshi Windwalker (16966) +DELETE FROM `smart_scripts` WHERE `entryorguid`=16966 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(16966,0,0,0,0,0,100,0,0,0,3000,5000,0,11,9532,64,0,0,0,0,2,0,0,0,0,0,0,0,'Haal\'eshi Windwalker - In Combat - Cast \'Lightning Bolt\''), +(16966,0,1,0,0,0,100,0,8000,12000,20000,24000,0,11,32717,0,0,0,0,0,5,0,0,0,0,0,0,0,'Haal\'eshi Windwalker - In Combat - Cast \'Hurricane\''), +(16966,0,2,0,2,0,100,1,0,15,0,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Haal\'eshi Windwalker - Between 0-15% Health - Flee For Assist (No Repeat)'); diff --git a/data/sql/updates/db_world/2022_11_21_18.sql b/data/sql/updates/db_world/2022_11_21_18.sql new file mode 100644 index 000000000..7359a788f --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_18.sql @@ -0,0 +1,1360 @@ +-- DB update 2022_11_21_17 -> 2022_11_21_18 +-- DELETES +DELETE FROM `waypoint_data` WHERE `id` IN (SELECT `path_id` FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `map`=546)); +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `map`=546); +DELETE FROM `linked_respawn` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `map`=546); +DELETE FROM `creature` WHERE `map`=546; + +-- TrinityCore - WowPacketParser +-- File name: 3.4.0.46368_Underbog pathing & formation recorded.pkt +-- Detected build: V3_4_0_46368 +-- Detected locale: enUS +-- Targeted database: WrathOfTheLichKing +-- Parsing date: 11/09/2022 19:48:12 + +SET @CGUID := 138300; + +DELETE FROM `creature` WHERE `map`=546 AND `ZoneId`=3716 AND `guid` BETWEEN @CGUID+0 AND @CGUID+218; +INSERT INTO `creature` (`guid`, `id1`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`, `wander_distance`, `curhealth`, `curmana`, `currentwaypoint`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES +(@CGUID+0 , 17725, 546, 3716, 3716, 3, 1, 0, 53.30517196655273437, -115.721046447753906, -2.65770363807678222, 3.630284786224365234, 86400, 1, 5, 16028, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+1 , 17871, 546, 3716, 3716, 3, 1, 0, 59.85622024536132812, -97.7351760864257812, -2.66830062866210937, 2.426007747650146484, 86400, 1, 4, 12395, 5136, 0, 0, 0, 0, 46368), -- 17871 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+2 , 17725, 546, 3716, 3716, 3, 1, 0, 49.38219451904296875, -164.011978149414062, -2.76484084129333496, 1.361356854438781738, 86400, 1, 4, 16028, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+3 , 17871, 546, 3716, 3716, 3, 1, 0, 61.72000503540039062, -168.142166137695312, -3.03930473327636718, 2.513274192810058593, 86400, 1, 5, 12395, 5136, 0, 0, 0, 0, 46368), -- 17871 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+4 , 17725, 546, 3716, 3716, 3, 1, 0, 44.16768264770507812, -106.870086669921875, -3.18854475021362304, 2.530727386474609375, 86400, 1, 5, 15489, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+5 , 17725, 546, 3716, 3716, 3, 1, 0, -18.0226116180419921, -205.548812866210937, -4.45156049728393554, 1.690529465675354003, 86400, 1, 2, 15489, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+6 , 17725, 546, 3716, 3716, 3, 1, 0, 4.394464969635009765, -104.604103088378906, -4.45036840438842773, 0.453785598278045654, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) +(@CGUID+7 , 17725, 546, 3716, 3716, 3, 1, 0, -7.22089815139770507, -102.749656677246093, -4.45054054260253906, 4.78220224380493164, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) +(@CGUID+8 , 17871, 546, 3716, 3716, 3, 1, 0, -4.9521489143371582, -115.878868103027343, -4.45028543472290039, 1.378810048103332519, 86400, 0, 0, 12395, 5136, 0, 0, 0, 0, 46368), -- 17871 (Area: 3716 - Difficulty: 1) +(@CGUID+9 , 17724, 546, 3716, 3716, 3, 1, 0, 69.10298919677734375, -81.0678939819335937, -2.71361970901489257, 4.127217292785644531, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+10 , 17724, 546, 3716, 3716, 3, 1, 0, 50.7421875, -44.1618385314941406, -2.74477028846740722, 5.592258453369140625, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+11 , 1420, 546, 3716, 3716, 3, 1, 0, 36.05365753173828125, -28.078378677368164, -2.66656374931335449, 4.056349754333496093, 86400, 1, 7, 8, 0, 0, 0, 0, 0, 46368), -- 1420 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+12 , 18409, 546, 3716, 3716, 3, 1, 0, 131.5263671875, -183.178787231445312, 32.36646652221679687, 5.044001579284667968, 86400, 0, 0, 5129, 2568, 0, 0, 0, 0, 46368), -- 18409 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+13 , 17725, 546, 3716, 3716, 3, 1, 0, -4.81963586807250976, -183.501251220703125, -4.45073938369750976, 4.379361152648925781, 86400, 1, 4, 16028, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+14 , 18409, 546, 3716, 3716, 3, 1, 0, -79.5164642333984375, -129.932571411132812, 6.231275558471679687, 6.161012172698974609, 86400, 0, 0, 5306, 2620, 0, 0, 0, 0, 46368), -- 18409 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+15 , 1420, 546, 3716, 3716, 3, 1, 0, -2.36233401298522949, -103.5479736328125, -4.45044660568237304, 2.217678070068359375, 86400, 1, 7, 8, 0, 0, 0, 0, 0, 46368), -- 1420 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+16 , 18409, 546, 3716, 3716, 3, 1, 0, 3.169436931610107421, -188.74371337890625, -4.45056962966918945, 4.635853767395019531, 86400, 0, 0, 5129, 2568, 0, 0, 0, 0, 46368), -- 18409 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+17 , 17725, 546, 3716, 3716, 3, 1, 0, 6.079409122467041015, -176.566757202148437, -4.45037746429443359, 4.365723133087158203, 86400, 1, 4, 16028, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+18 , 17992, 546, 3716, 3716, 3, 1, 0, 85.16417694091796875, -19.9881591796875, 44.319427490234375, 5.654866695404052734, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+19 , 17731, 546, 3716, 3716, 3, 1, 0, 123.7956924438476562, 14.59498786926269531, 26.22917938232421875, 2.58308720588684082, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+20 , 17731, 546, 3716, 3716, 3, 1, 0, 130.1617889404296875, 1.715451002120971679, 26.40960502624511718, 0.383972436189651489, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+21 , 18409, 546, 3716, 3716, 3, 1, 0, 124.9850082397460937, -202.62335205078125, 54.8511962890625, 0.099590368568897247, 86400, 0, 0, 5129, 2568, 0, 0, 0, 0, 46368), -- 18409 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+22 , 17731, 546, 3716, 3716, 3, 1, 0, 146.4813232421875, -4.1298680305480957, 26.15960502624511718, 4.677482128143310546, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+23 , 17882, 546, 3716, 3716, 3, 1, 0, 143.43182373046875, 9.125844001770019531, 27.645843505859375, 4.223696708679199218, 86400, 0, 0, 75696, 27900, 0, 0, 0, 0, 46368), -- 17882 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+24 , 17725, 546, 3716, 3716, 3, 1, 0, 73.643707275390625, -245.245529174804687, -4.40129947662353515, 1.221730470657348632, 86400, 1, 4, 15489, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+25 , 17725, 546, 3716, 3716, 3, 1, 0, -15.995253562927246, -237.312255859375, -4.53491401672363281, 1.558064818382263183, 86400, 1, 2, 16028, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+26 , 17724, 546, 3716, 3716, 3, 1, 0, 56.37200927734375, -155.5626220703125, -2.73358535766601562, 4.942754745483398437, 86400, 1, 4, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+27 , 18409, 546, 3716, 3716, 3, 1, 0, 106.339202880859375, -248.823501586914062, 52.99034500122070312, 2.123201608657836914, 86400, 0, 0, 5306, 2620, 0, 0, 0, 0, 46368), -- 18409 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+28 , 17734, 546, 3716, 3716, 3, 1, 0, 176.5920257568359375, -61.2998809814453125, 26.51584053039550781, 3.715864896774291992, 86400, 0, 0, 45720, 0, 0, 0, 0, 0, 46368), -- 17734 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+29 , 1420, 546, 3716, 3716, 3, 1, 0, 161.7856292724609375, -130.364593505859375, 27.01967811584472656, 4.841574668884277343, 86400, 1, 7, 8, 0, 0, 0, 0, 0, 46368), -- 1420 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+30 , 17724, 546, 3716, 3716, 3, 1, 0, -20.6918754577636718, -112.034248352050781, -4.53394508361816406, 4.940909385681152343, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+31 , 17724, 546, 3716, 3716, 3, 1, 0, -18.6085033416748046, -117.241020202636718, -4.53385734558105468, 4.9155426025390625, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+32 , 17725, 546, 3716, 3716, 3, 1, 0, -51.876708984375, -246.59423828125, -4.45337533950805664, 0.471238881349563598, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) +(@CGUID+33 , 17871, 546, 3716, 3716, 3, 1, 0, -61.2059135437011718, -239.919540405273437, -4.45364761352539062, 0.977384388446807861, 86400, 0, 0, 12395, 5136, 0, 0, 0, 0, 46368), -- 17871 (Area: 3716 - Difficulty: 1) +(@CGUID+34 , 17724, 546, 3716, 3716, 3, 1, 0, 0.224553108215332031, -173.079132080078125, -4.53405666351318359, 0.691599786281585693, 86400, 1, 4, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+35 , 17725, 546, 3716, 3716, 3, 1, 0, -55.9498291015625, -257.518524169921875, -4.45344161987304687, 5.916666030883789062, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17725 (Area: 3716 - Difficulty: 1) +(@CGUID+36 , 17724, 546, 3716, 3716, 3, 1, 0, 2.884120941162109375, -185.097015380859375, -4.53397274017333984, 5.816865444183349609, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+37 , 17723, 546, 3716, 3716, 3, 1, 0, 10.4918975830078125, -208.06329345703125, -4.5332193374633789, 4.59362649917602539, 86400, 1, 5, 36478, 0, 0, 0, 0, 0, 46368), -- 17723 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+38 , 17724, 546, 3716, 3716, 3, 1, 0, -16.8087425231933593, -194.322494506835937, -4.53450822830200195, 2.589608430862426757, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+39 , 17871, 546, 3716, 3716, 3, 1, 0, -134.443710327148437, -221.692276000976562, -3.8408522605895996, 3.7479248046875, 86400, 0, 0, 12395, 5136, 0, 0, 0, 0, 46368), -- 17871 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+40 , 17871, 546, 3716, 3716, 3, 1, 0, -138.559707641601562, -223.74798583984375, -3.80365943908691406, 3.85886549949645996, 86400, 0, 0, 12395, 5136, 0, 0, 0, 0, 46368), -- 17871 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+41 , 18409, 546, 3716, 3716, 3, 1, 0, 108.2833099365234375, -276.298614501953125, 58.46154022216796875, 2.78950810432434082, 86400, 0, 0, 5129, 2568, 0, 0, 0, 0, 46368), -- 18409 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+42 , 17724, 546, 3716, 3716, 3, 1, 0, 26.55841064453125, -215.4248046875, -4.53322076797485351, 5.491258621215820312, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+43 , 17724, 546, 3716, 3716, 3, 1, 0, -22.8102912902832031, -204.2177734375, -4.53505754470825195, 2.781461477279663085, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+44 , 1420, 546, 3716, 3716, 3, 1, 0, -13.5606193542480468, -215.345367431640625, -4.53488588333129882, 2.750328779220581054, 86400, 1, 7, 8, 0, 0, 0, 0, 0, 46368), -- 1420 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+45 , 17724, 546, 3716, 3716, 3, 1, 0, 33.87368392944335937, -229.483184814453125, -4.48155593872070312, 1.981717109680175781, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+46 , 17724, 546, 3716, 3716, 3, 1, 0, -18.1015586853027343, -226.91162109375, -4.53512763977050781, 4.55969095230102539, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+47 , 17724, 546, 3716, 3716, 3, 1, 0, -10.6675224304199218, -245.508697509765625, -4.53447675704956054, 0.835907638072967529, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+48 , 18409, 546, 3716, 3716, 3, 1, 0, -61.6671409606933593, -342.68017578125, 6.551271438598632812, 1.883476614952087402, 86400, 0, 0, 5129, 2568, 0, 0, 0, 0, 46368), -- 18409 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+49 , 17724, 546, 3716, 3716, 3, 1, 0, 60.98109817504882812, -240.568771362304687, -4.45644807815551757, 4.217241287231445312, 86400, 1, 5, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+50 , 3300, 546, 3716, 3716, 3, 1, 0, 63.00201797485351562, -245.383255004882812, -4.4605717658996582, 3.893556594848632812, 86400, 1, 8, 1, 0, 0, 0, 0, 0, 46368), -- 3300 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+51 , 17724, 546, 3716, 3716, 3, 1, 0, 57.6712493896484375, -250.803207397460937, -4.47693538665771484, 6.089513301849365234, 86400, 1, 5, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+52 , 18409, 546, 3716, 3716, 3, 1, 0, 98.9297332763671875, -326.73388671875, 19.01700973510742187, 2.51154947280883789, 86400, 0, 0, 5129, 2568, 0, 0, 0, 0, 46368), -- 18409 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+53 , 20465, 546, 3716, 3716, 3, 1, 0, 31.98462104797363281, -270.854644775390625, -21.6617946624755859, 6.006432533264160156, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+54 , 20465, 546, 3716, 3716, 3, 1, 0, 37.3814697265625, -281.656097412109375, -21.6617946624755859, 0.61091160774230957, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+55 , 20465, 546, 3716, 3716, 3, 1, 0, 0.923820197582244873, -285.055572509765625, -21.6617946624755859, 0.467365443706512451, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+56 , 20465, 546, 3716, 3716, 3, 1, 0, 109.5407485961914062, -279.104217529296875, -18.9742946624755859, 3.662220001220703125, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+57 , 20465, 546, 3716, 3716, 3, 1, 0, 122.5914764404296875, -272.075286865234375, -18.1793460845947265, 3.317036867141723632, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+58 , 3300, 546, 3716, 3716, 3, 1, 0, 82.27069854736328125, -294.929229736328125, 32.04051971435546875, 4.423070430755615234, 86400, 1, 8, 1, 0, 0, 0, 0, 0, 46368), -- 3300 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+59 , 20465, 546, 3716, 3716, 3, 1, 0, 8.860335350036621093, -304.19696044921875, -21.6617946624755859, 5.344369411468505859, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+60 , 20465, 546, 3716, 3716, 3, 1, 0, -15.9169492721557617, -315.86346435546875, -21.2094802856445312, 0.592654645442962646, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+61 , 17723, 546, 3716, 3716, 3, 1, 0, -68.6884078979492187, -228.740234375, -4.53699302673339843, 0.125748008489608764, 86400, 0, 0, 36478, 0, 0, 0, 0, 0, 46368), -- 17723 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+62 , 17723, 546, 3716, 3716, 3, 1, 0, 1.211545944213867187, -323.152252197265625, 30.92621421813964843, 3.760336875915527343, 86400, 0, 0, 36478, 0, 0, 0, 0, 0, 46368), -- 17723 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+63 , 20465, 546, 3716, 3716, 3, 1, 0, -35.2714767456054687, -320.834442138671875, -21.3631858825683593, 0.806268274784088134, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+64 , 17723, 546, 3716, 3716, 3, 1, 0, -59.1942481994628906, -289.67742919921875, -4.53491830825805664, 4.024751186370849609, 86400, 0, 0, 36478, 0, 0, 0, 0, 0, 46368), -- 17723 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+65 , 20465, 546, 3716, 3716, 3, 1, 0, -48.718170166015625, -310.844390869140625, -21.3631839752197265, 2.003461122512817382, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+66 , 1420, 546, 3716, 3716, 3, 1, 0, -2.39251708984375, -329.87078857421875, 30.52985191345214843, 0.977446317672729492, 86400, 1, 7, 8, 0, 0, 0, 0, 0, 46368), -- 1420 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+67 , 17770, 546, 3716, 3716, 3, 1, 0, -121.343780517578125, -388.625946044921875, 36.86592864990234375, 1.396263360977172851, 86400, 0, 0, 65054, 0, 0, 0, 0, 0, 46368), -- 17770 (Area: 3716 - Difficulty: 1) +(@CGUID+68 , 17724, 546, 3716, 3716, 3, 1, 0, -89.6993331909179687, -286.329742431640625, 0.33470773696899414, 0.078698188066482543, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+69 , 20465, 546, 3716, 3716, 3, 1, 0, -64.2600631713867187, -331.863800048828125, -21.3631858825683593, 4.490990161895751953, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+70 , 17724, 546, 3716, 3716, 3, 1, 0, -91.4822921752929687, -282.277313232421875, 1.337054848670959472, 0.329814404249191284, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+71 , 20465, 546, 3716, 3716, 3, 1, 0, -45.6104736328125, -348.7037353515625, -21.3404979705810546, 2.511313438415527343, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+72 , 17724, 546, 3716, 3716, 3, 1, 0, -91.4822921752929687, -282.277313232421875, 1.337054848670959472, 0.329814404249191284, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+73 , 17724, 546, 3716, 3716, 3, 1, 0, 7.868413925170898437, -354.808135986328125, 27.61457443237304687, 0.349224865436553955, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+74 , 17724, 546, 3716, 3716, 3, 1, 0, 6.074481010437011718, -346.847686767578125, 28.9513092041015625, 0.968652546405792236, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+75 , 17724, 546, 3716, 3716, 3, 1, 0, 6.074481010437011718, -346.847686767578125, 28.9513092041015625, 0.968652546405792236, 86400, 0, 0, 15489, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+76 , 17724, 546, 3716, 3716, 3, 1, 0, 6.074481010437011718, -346.847686767578125, 28.9513092041015625, 0.968652546405792236, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+77 , 3300, 546, 3716, 3716, 3, 1, 0, -129.510971069335937, -219.674774169921875, -4.01897621154785156, 0.640626192092895507, 86400, 1, 8, 1, 0, 0, 0, 0, 0, 46368), -- 3300 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+78 , 17723, 546, 3716, 3716, 3, 1, 0, -97.8888320922851562, -348.776397705078125, 32.951019287109375, 1.65806281566619873, 86400, 0, 0, 36478, 0, 0, 0, 0, 0, 46368), -- 17723 (Area: 3716 - Difficulty: 1) +(@CGUID+79 , 17724, 546, 3716, 3716, 3, 1, 0, -132.951705932617187, -218.944290161132812, -3.84113597869873046, 3.85388803482055664, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17724 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+80 , 17723, 546, 3716, 3716, 3, 1, 0, -129.921173095703125, -342.113800048828125, 33.3463134765625, 0.994837641716003417, 86400, 0, 0, 36478, 0, 0, 0, 0, 0, 46368), -- 17723 (Area: 3716 - Difficulty: 1) +(@CGUID+81 , 1420, 546, 3716, 3716, 3, 1, 0, -114.916908264160156, -359.645843505859375, 34.63579940795898437, 6.140144824981689453, 86400, 1, 7, 8, 0, 0, 0, 0, 0, 46368), -- 1420 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+82 , 20465, 546, 3716, 3716, 3, 1, 0, -61.8247871398925781, -395.373992919921875, -20.1860847473144531, 2.978006601333618164, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+83 , 20465, 546, 3716, 3716, 3, 1, 0, -75.2216567993164062, -413.634674072265625, -29.7494258880615234, 1.167413115501403808, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+84 , 17723, 546, 3716, 3716, 3, 1, 0, 5.765883445739746093, -382.78369140625, 27.06412506103515625, 0.9276963472366333, 86400, 1, 7, 36478, 0, 0, 0, 0, 0, 46368), -- 17723 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+85 , 20465, 546, 3716, 3716, 3, 1, 0, -19.6737327575683593, -400.955230712890625, -27.7520751953125, 4.101523876190185546, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) +(@CGUID+86 , 20465, 546, 3716, 3716, 3, 1, 0, 16.55997276306152343, -386.068389892578125, -20.265960693359375, 4.107356548309326171, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+87 , 20465, 546, 3716, 3716, 3, 1, 0, 8.97026824951171875, -426.08447265625, -22.3979091644287109, 3.527451753616333007, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+88 , 17723, 546, 3716, 3716, 3, 1, 0, 19.44412040710449218, -308.636138916015625, 31.8928375244140625, 3.714715957641601562, 86400, 0, 0, 36478, 0, 0, 0, 0, 0, 46368), -- 17723 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+89 , 20465, 546, 3716, 3716, 3, 1, 0, 44.63208770751953125, -395.77447509765625, -22.0020713806152343, 1.059683799743652343, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+90 , 17723, 546, 3716, 3716, 3, 1, 0, 77.6444244384765625, -384.56866455078125, 33.31194305419921875, 6.084620475769042968, 86400, 1, 6, 36478, 0, 0, 0, 0, 0, 46368), -- 17723 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+91 , 17726, 546, 3716, 3716, 3, 1, 1, 99.41526031494140625, -396.649139404296875, 36.55694961547851562, 5.781200408935546875, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17726 (Area: 3716 - Difficulty: 1) (Auras: ) (possible waypoints or random movement) +(@CGUID+92 , 18105, 546, 3716, 3716, 3, 1, 0, 248.33444, -465.86627, 81.37284, 3.543018341064453125, 86400, 1, 12, 59140, 0, 0, 0, 0, 0, 46368), -- modified spawn point for Ghaz'an (Auras: 8876 - 8876) +(@CGUID+93 , 17726, 546, 3716, 3716, 3, 1, 1, 98.21234130859375, -398.8406982421875, 36.511749267578125, 5.781207561492919921, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17726 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+94 , 20465, 546, 3716, 3716, 3, 1, 0, 83.2564849853515625, -400.947540283203125, -21.1270713806152343, 4.018953323364257812, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+95 , 20465, 546, 3716, 3716, 3, 1, 0, 114.2423553466796875, -340.829742431640625, -18.182626724243164, 1.866887211799621582, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+96 , 20465, 546, 3716, 3716, 3, 1, 0, 111.0433425903320312, -304.8076171875, -18.9742946624755859, 4.813970565795898437, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+97 , 20465, 546, 3716, 3716, 3, 1, 0, 140.4607086181640625, -299.08514404296875, -18.182626724243164, 4.400449752807617187, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+98 , 20465, 546, 3716, 3716, 3, 1, 0, 138.5490264892578125, -352.57305908203125, -18.1826305389404296, 5.045160770416259765, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+99 , 20465, 546, 3716, 3716, 3, 1, 0, 130.2157135009765625, -389.4305419921875, -18.1826305389404296, 3.026309967041015625, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+100, 17728, 546, 3716, 3716, 3, 1, 1, 179.033966064453125, -391.33807373046875, 48.15665054321289062, 5.183627605438232421, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+101, 17727, 546, 3716, 3716, 3, 1, 1, 150.960662841796875, -417.71099853515625, 48.6139984130859375, 2.932153224945068359, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17727 (Area: 3716 - Difficulty: 1) (Auras: 18950 - 18950) +(@CGUID+102, 17771, 546, 3716, 3716, 3, 1, 1, 183.808807373046875, -387.583221435546875, 48.15573501586914062, 5.689773082733154296, 86400, 0, 0, 13259, 13525, 0, 0, 0, 0, 46368), -- 17771 (Area: 3716 - Difficulty: 1) (Auras: 34881 - 34881) +(@CGUID+103, 17728, 546, 3716, 3716, 3, 1, 1, 182.3004608154296875, -390.589935302734375, 48.17152786254882812, 5.393067359924316406, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+104, 17727, 546, 3716, 3716, 3, 1, 1, 148.12396240234375, -424.814544677734375, 48.62396240234375, 2.792526721954345703, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17727 (Area: 3716 - Difficulty: 1) (Auras: 18950 - 18950) +(@CGUID+105, 20465, 546, 3716, 3716, 3, 1, 0, 110.3943939208984375, -433.743988037109375, -26.3354091644287109, 2.146592617034912109, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+106, 17729, 546, 3716, 3716, 3, 1, 1, 171.28228759765625, -402.4820556640625, 72.31524658203125, 5.916666030883789062, 86400, 0, 0, 13259, 2705, 0, 0, 0, 0, 46368), -- 17729 (Area: 3716 - Difficulty: 1) +(@CGUID+107, 17728, 546, 3716, 3716, 3, 1, 1, 172.6644439697265625, -407.37860107421875, 72.38916015625, 5.707226753234863281, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+108, 17728, 546, 3716, 3716, 3, 1, 1, 177.1148223876953125, -412.503021240234375, 48.25968170166015625, 2.670353651046752929, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+109, 17726, 546, 3716, 3716, 3, 1, 1, 187.09112548828125, -389.154388427734375, 48.10515213012695312, 3.805849075317382812, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17726 (Area: 3716 - Difficulty: 1) (Auras: 378027 - 378027) +(@CGUID+110, 17735, 546, 3716, 3716, 3, 1, 1, 163.8997344970703125, -429.202056884765625, 72.44371795654296875, 0.069813169538974761, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17735 (Area: 3716 - Difficulty: 1) +(@CGUID+111, 17726, 546, 3716, 3716, 3, 1, 1, 188.9405517578125, -391.516510009765625, 48.13330459594726562, 3.805850028991699218, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17726 (Area: 3716 - Difficulty: 1) (Auras: 378027 - 378027) +(@CGUID+112, 17730, 546, 3716, 3716, 3, 1, 1, 181.5612030029296875, -410.974609375, 48.28504180908203125, 2.897246599197387695, 86400, 0, 0, 12824, 13100, 0, 0, 0, 0, 46368), -- 17730 (Area: 3716 - Difficulty: 1) +(@CGUID+113, 17728, 546, 3716, 3716, 3, 1, 1, 176.2656402587890625, -399.840728759765625, 72.35858917236328125, 0.122173048555850982, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+114, 17771, 546, 3716, 3716, 3, 1, 1, 158.771575927734375, -429.575592041015625, 72.34808349609375, 0, 86400, 0, 0, 13259, 13525, 0, 0, 0, 0, 46368), -- 17771 (Area: 3716 - Difficulty: 1) (Auras: 34881 - 34881) +(@CGUID+115, 17735, 546, 3716, 3716, 3, 1, 1, 177.4338531494140625, -404.174163818359375, 72.4244232177734375, 6.161012172698974609, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17735 (Area: 3716 - Difficulty: 1) +(@CGUID+116, 17771, 546, 3716, 3716, 3, 1, 1, 162.6187286376953125, -424.842315673828125, 72.40460968017578125, 0.890117883682250976, 86400, 0, 0, 13259, 13525, 0, 0, 0, 0, 46368), -- 17771 (Area: 3716 - Difficulty: 1) +(@CGUID+117, 17729, 546, 3716, 3716, 3, 1, 1, 161.478240966796875, -439.53814697265625, 48.20967864990234375, 2.042035102844238281, 86400, 0, 0, 13259, 2705, 0, 0, 0, 0, 46368), -- 17729 (Area: 3716 - Difficulty: 1) +(@CGUID+118, 17728, 546, 3716, 3716, 3, 1, 1, 166.5552520751953125, -438.526702880859375, 48.28256607055664062, 2.042035102844238281, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+119, 17730, 546, 3716, 3716, 3, 1, 1, 158.190185546875, -444.1273193359375, 48.18988418579101562, 1.640609502792358398, 86400, 0, 0, 13259, 13525, 0, 0, 0, 0, 46368), -- 17730 (Area: 3716 - Difficulty: 1) +(@CGUID+120, 17771, 546, 3716, 3716, 3, 1, 1, 175.8058624267578125, -416.586517333984375, 48.26938629150390625, 2.914699792861938476, 86400, 0, 0, 13259, 13525, 0, 0, 0, 0, 46368), -- 17771 (Area: 3716 - Difficulty: 1) (Auras: 34881 - 34881) +(@CGUID+121, 17728, 546, 3716, 3716, 3, 1, 1, 163.5768585205078125, -435.300140380859375, 72.45843505859375, 5.98647928237915039, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+122, 17735, 546, 3716, 3716, 3, 1, 1, 162.697021484375, -444.88360595703125, 48.26811981201171875, 2.356194496154785156, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17735 (Area: 3716 - Difficulty: 1) +(@CGUID+123, 17726, 546, 3716, 3716, 3, 1, 1, 167.6121978759765625, -440.28509521484375, 72.4876556396484375, 4.47234201431274414, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17726 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+124, 17726, 546, 3716, 3716, 3, 1, 1, 173.5342559814453125, -428.708770751953125, 72.52740478515625, 4.595024585723876953, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17726 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+125, 17730, 546, 3716, 3716, 3, 1, 1, 197.16180419921875, -389.322021484375, 72.46490478515625, 5.096361160278320312, 86400, 0, 0, 13259, 13525, 0, 0, 0, 0, 46368), -- 17730 (Area: 3716 - Difficulty: 1) +(@CGUID+126, 20465, 546, 3716, 3716, 3, 1, 0, 188.0348052978515625, -449.30682373046875, 25.21600341796875, 1.467442512512207031, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+127, 20465, 546, 3716, 3716, 3, 1, 0, 205.5007171630859375, -415.981842041015625, 36.70905685424804687, 6.276171684265136718, 86400, 0, 0, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+128, 17771, 546, 3716, 3716, 3, 1, 1, 201.3455810546875, -384.036041259765625, 72.42652130126953125, 5.969026088714599609, 86400, 0, 0, 13259, 13525, 0, 0, 0, 0, 46368), -- 17771 (Area: 3716 - Difficulty: 1) +(@CGUID+129, 17728, 546, 3716, 3716, 3, 1, 1, 202.2552032470703125, -389.230804443359375, 72.51596832275390625, 5.8817596435546875, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+130, 20465, 546, 3716, 3716, 3, 1, 0, 200.3338470458984375, -415.390350341796875, 3.48419046401977539, 2.249102592468261718, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+131, 20465, 546, 3716, 3716, 3, 1, 0, 210.5478515625, -403.975433349609375, 36.70905685424804687, 2.464507102966308593, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+132, 20465, 546, 3716, 3716, 3, 1, 0, 206.274749755859375, -406.3475341796875, 36.70905685424804687, 2.558438301086425781, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+133, 20465, 546, 3716, 3716, 3, 1, 0, 206.6539459228515625, -416.1658935546875, 3.484221458435058593, 3.073889493942260742, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+134, 20465, 546, 3716, 3716, 3, 1, 0, 222.000091552734375, -451.183258056640625, 36.70905685424804687, 5.602814674377441406, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+135, 20465, 546, 3716, 3716, 3, 1, 0, 219.1394195556640625, -471.86553955078125, 39.29062652587890625, 3.294075727462768554, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+136, 20465, 546, 3716, 3716, 3, 1, 0, 224.5630645751953125, -445.640960693359375, 3.48419046401977539, 4.673022270202636718, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+137, 20465, 546, 3716, 3716, 3, 1, 0, 232.2220916748046875, -446.9183349609375, 27.45262718200683593, 2.29490828514099121, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+138, 17728, 546, 3716, 3716, 3, 1, 1, 234.2554931640625, -375.083709716796875, 48.17957305908203125, 0.382827937602996826, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+139, 20465, 546, 3716, 3716, 3, 1, 0, 243.2129058837890625, -450.48797607421875, 25.91950225830078125, 2.01293039321899414, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+140, 17728, 546, 3716, 3716, 3, 1, 1, 235.1213836669921875, -375.077850341796875, 48.18343734741210937, 0.520730257034301757, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+141, 15384, 546, 3716, 3716, 3, 1, 0, 241.8576202392578125, -450.603240966796875, 26.66724777221679687, 5.323254108428955078, 86400, 0, 0, 4120, 0, 0, 0, 0, 0, 46368), -- 15384 (Area: 3716 - Difficulty: 1) +(@CGUID+142, 17729, 546, 3716, 3716, 3, 1, 1, 236.7035064697265625, -374.183868408203125, 48.1797027587890625, 0.544209659099578857, 86400, 0, 0, 12824, 2620, 0, 0, 0, 0, 46368), -- 17729 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+143, 20465, 546, 3716, 3716, 3, 1, 0, 215.205352783203125, -472.555572509765625, 12.97070693969726562, 3.369901657104492187, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+144, 20465, 546, 3716, 3716, 3, 1, 0, 192.959320068359375, -493.83221435546875, 7.293950080871582031, 2.046899795532226562, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+145, 17735, 546, 3716, 3716, 3, 1, 1, 237.1281280517578125, -373.926910400390625, 48.17849349975585937, 0.436869919300079345, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17735 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+146, 20465, 546, 3716, 3716, 3, 1, 0, 248.8191375732421875, -451.417755126953125, 32.92885589599609375, 2.075231552124023437, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+147, 20465, 546, 3716, 3716, 3, 1, 0, 245.23980712890625, -455.87396240234375, 26.01443672180175781, 2.082765579223632812, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+148, 20465, 546, 3716, 3716, 3, 1, 0, 256.71142578125, -418.380401611328125, 6.772376060485839843, 0.725669682025909423, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+149, 20465, 546, 3716, 3716, 3, 1, 0, 259.87579345703125, -382.396026611328125, 46.965911865234375, 2.623649120330810546, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+150, 20465, 546, 3716, 3716, 3, 1, 0, 248.1737518310546875, -383.282958984375, -7.77785205841064453, 0.516416192054748535, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+151, 17735, 546, 3716, 3716, 3, 1, 1, 256.61053466796875, -374.545318603515625, 72.26967620849609375, 5.438555717468261718, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17735 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+152, 17728, 546, 3716, 3716, 3, 1, 1, 260.34735107421875, -382.584991455078125, 72.61395263671875, 4.049163818359375, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+153, 20465, 546, 3716, 3716, 3, 1, 0, 244.310394287109375, -376.678985595703125, -7.77785205841064453, 5.905244827270507812, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+154, 17730, 546, 3716, 3716, 3, 1, 1, 259.4254150390625, -367.67547607421875, 72.38193511962890625, 1.221730470657348632, 86400, 0, 0, 13259, 13525, 0, 0, 0, 0, 46368), -- 17730 (Area: 3716 - Difficulty: 1) +(@CGUID+155, 17728, 546, 3716, 3716, 3, 1, 1, 271.075439453125, -372.563446044921875, 72.4000244140625, 0.296705961227416992, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17728 (Area: 3716 - Difficulty: 1) +(@CGUID+156, 20465, 546, 3716, 3716, 3, 1, 0, 269.56207275390625, -433.395355224609375, 3.48419046401977539, 0.909695029258728027, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+157, 20465, 546, 3716, 3716, 3, 1, 0, 263.4403076171875, -461.397064208984375, 26.8479461669921875, 3.894020318984985351, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+158, 20465, 546, 3716, 3716, 3, 1, 0, 286.187774658203125, -435.888916015625, 18.77155876159667968, 1.804906606674194335, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+159, 20465, 546, 3716, 3716, 3, 1, 0, 289.38128662109375, -392.230224609375, -7.77785205841064453, 2.203841924667358398, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+160, 20465, 546, 3716, 3716, 3, 1, 0, 286.3817138671875, -437.422088623046875, 26.8479461669921875, 6.094943046569824218, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+161, 20465, 546, 3716, 3716, 3, 1, 0, 209.46270751953125, -316.348236083984375, -27.9162216186523437, 2.769514322280883789, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) +(@CGUID+162, 17731, 546, 3716, 3716, 3, 1, 0, 303.467803955078125, -322.620208740234375, 20.5474700927734375, 2.45958876609802246, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+163, 17731, 546, 3716, 3716, 3, 1, 0, 303.467803955078125, -322.620208740234375, 20.5474700927734375, 2.45958876609802246, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+164, 17731, 546, 3716, 3716, 3, 1, 0, 300.351470947265625, -315.182464599609375, 19.94297981262207031, 5.533769607543945312, 86400, 1, 8, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+165, 17731, 546, 3716, 3716, 3, 1, 0, 308.298370361328125, -314.1112060546875, 18.85638427734375, 0.166780933737754821, 86400, 1, 8, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+166, 20465, 546, 3716, 3716, 3, 1, 0, 248.0238037109375, -486.670745849609375, 34.93822097778320312, 3.272280693054199218, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+167, 20465, 546, 3716, 3716, 3, 1, 0, 234.1428985595703125, -504.870361328125, 34.93822097778320312, 3.611603736877441406, 86400, 1, 30, 19986, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943) (possible waypoints or random movement) +(@CGUID+168, 20465, 546, 3716, 3716, 3, 1, 0, 224.6502227783203125, -489.96478271484375, 3.48419046401977539, 2.744190931320190429, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+169, 20465, 546, 3716, 3716, 3, 1, 0, 224.5731658935546875, -515.55462646484375, 5.7463531494140625, 3.112236261367797851, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+170, 20465, 546, 3716, 3716, 3, 1, 0, 248.310302734375, -497.979888916015625, 34.93822479248046875, 3.526723384857177734, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+171, 20465, 546, 3716, 3716, 3, 1, 0, 292.789520263671875, -466.64056396484375, 3.48419046401977539, 4.818709373474121093, 86400, 1, 30, 19422, 0, 0, 0, 0, 0, 46368), -- 20465 (Area: 3716 - Difficulty: 1) (Auras: 18943 - 18943, 18950 - 18950) (possible waypoints or random movement) +(@CGUID+172, 3300, 546, 3716, 3716, 3, 1, 0, 361.69378662109375, -451.887908935546875, 30.06296730041503906, 4.588304042816162109, 86400, 1, 8, 1, 0, 0, 0, 0, 0, 46368), -- 3300 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+173, 17731, 546, 3716, 3716, 3, 1, 0, 310.3460693359375, -320.663238525390625, 19.90793991088867187, 5.707941055297851562, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) +(@CGUID+174, 16030, 546, 3716, 3716, 3, 1, 0, 307.504730224609375, -306.9287109375, 18.90543174743652343, 1.589548826217651367, 86400, 1, 9, 8, 0, 0, 0, 0, 0, 46368), -- 16030 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+175, 17731, 546, 3716, 3716, 3, 1, 0, 297.064788818359375, -297.573089599609375, 20.72171401977539062, 2.99703836441040039, 86400, 1, 8, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) +(@CGUID+176, 17732, 546, 3716, 3716, 3, 1, 0, 275.003387451171875, -292.1968994140625, 21.16566848754882812, 2.482410907745361328, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17732 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+177, 19632, 546, 3716, 3716, 3, 1, 0, 278.678192138671875, -287.45391845703125, 22.65006065368652343, 2.482411623001098632, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 19632 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+178, 17885, 546, 3716, 3716, 3, 1, 0, 296.697418212890625, -362.373046875, 50.1506195068359375, 5.567600250244140625, 86400, 0, 0, 4572, 2705, 0, 0, 0, 0, 46368), -- 17885 (Area: 3716 - Difficulty: 1) (Auras: 31526 - 31526) +(@CGUID+179, 17732, 546, 3716, 3716, 3, 1, 0, 276.840789794921875, -289.825408935546875, 21.84542465209960937, 2.482409477233886718, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17732 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+180, 17731, 546, 3716, 3716, 3, 1, 0, 269.434051513671875, -271.4952392578125, 25.82761192321777343, 2.013846158981323242, 86400, 1, 8, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+181, 16030, 546, 3716, 3716, 3, 1, 0, 265.589599609375, -257.714263916015625, 26.0072174072265625, 3.904292583465576171, 86400, 1, 9, 8, 0, 0, 0, 0, 0, 46368), -- 16030 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+182, 17731, 546, 3716, 3716, 3, 1, 0, 261.269378662109375, -266.996307373046875, 24.53288078308105468, 1.782908082008361816, 86400, 1, 8, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+183, 17731, 546, 3716, 3716, 3, 1, 0, 267.347259521484375, -259.0350341796875, 26.24045562744140625, 4.32236480712890625, 86400, 0, 0, 16574, 1, 8, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) +(@CGUID+184, 17731, 546, 3716, 3716, 3, 1, 0, 273.348663330078125, -222.741073608398437, 29.430328369140625, 2.017953872680664062, 86400, 1, 6, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) +(@CGUID+185, 16030, 546, 3716, 3716, 3, 1, 0, 262.991729736328125, -230.167022705078125, 27.49382400512695312, 3.45156407356262207, 86400, 1, 9, 8, 0, 0, 0, 0, 0, 46368), -- 16030 (Area: 3716 - Difficulty: 1) +(@CGUID+186, 17732, 546, 3716, 3716, 3, 1, 0, 266.96685791015625, -218.227981567382812, 28.86172866821289062, 5.894797325134277343, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17732 (Area: 3716 - Difficulty: 1) +(@CGUID+187, 17731, 546, 3716, 3716, 3, 1, 0, 271.235595703125, -210.660186767578125, 29.03068351745605468, 0.156309396028518676, 86400, 1, 4, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) +(@CGUID+188, 17732, 546, 3716, 3716, 3, 1, 0, 266.515289306640625, -207.49920654296875, 28.72848892211914062, 4.804712295532226562, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17732 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+189, 16030, 546, 3716, 3716, 3, 1, 0, 270.178741455078125, -201.12567138671875, 28.96302413940429687, 3.366828680038452148, 86400, 1, 9, 8, 0, 0, 0, 0, 0, 46368), -- 16030 (Area: 3716 - Difficulty: 1) +(@CGUID+190, 17732, 546, 3716, 3716, 3, 1, 0, 262.749908447265625, -210.218246459960937, 28.48742866516113281, 4.804712772369384765, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17732 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+191, 19632, 546, 3716, 3716, 3, 1, 0, 270.702239990234375, -209.333526611328125, 28.99435997009277343, 4.804712772369384765, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 19632 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+192, 17731, 546, 3716, 3716, 3, 1, 0, 276.651947021484375, -188.849929809570312, 28.7522735595703125, 3.996803998947143554, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) +(@CGUID+193, 17731, 546, 3716, 3716, 3, 1, 0, 272.976715087890625, -184.734725952148437, 28.97068977355957031, 3.647738218307495117, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) +(@CGUID+194, 17732, 546, 3716, 3716, 3, 1, 0, 253.9568634033203125, -183.705596923828125, 28.1859588623046875, 4.081171989440917968, 86400, 0, 0, 16028, 0, 0, 0, 0, 0, 46368), -- 17732 (Area: 3716 - Difficulty: 1) +(@CGUID+195, 17731, 546, 3716, 3716, 3, 1, 0, 245.215911865234375, -182.948806762695312, 26.83671379089355468, 1.8245391845703125, 86400, 1, 4, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+196, 16030, 546, 3716, 3716, 3, 1, 0, 247.648162841796875, -172.632354736328125, 27.69061470031738281, 4.107637405395507812, 86400, 1, 9, 8, 0, 0, 0, 0, 0, 46368), -- 16030 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+197, 17731, 546, 3716, 3716, 3, 1, 0, 249.083282470703125, -171.4796142578125, 27.97526931762695312, 1.225289702415466308, 86400, 1, 5, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+198, 17734, 546, 3716, 3716, 3, 1, 0, 217.05517578125, -131.514968872070312, 26.75313758850097656, 0.087230674922466278, 86400, 0, 0, 45720, 0, 0, 0, 0, 0, 46368), -- 17734 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+199, 17827, 546, 3716, 3716, 3, 1, 0, 289.255279541015625, -129.70013427734375, 29.82100868225097656, 2.49582076072692871, 86400, 0, 0, 53226, 0, 0, 0, 0, 0, 46368), -- 17827 (Area: 3716 - Difficulty: 1) +(@CGUID+200, 17826, 546, 3716, 3716, 3, 1, 0, 288.582305908203125, -121.830909729003906, 29.7032928466796875, 6.078789710998535156, 86400, 0, 0, 53224, 55800, 0, 0, 0, 0, 46368), -- 17826 (Area: 3716 - Difficulty: 1) +(@CGUID+201, 17731, 546, 3716, 3716, 3, 1, 0, 220.4241943359375, -33.270416259765625, 27.645843505859375, 5.829399585723876953, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+202, 17992, 546, 3716, 3716, 3, 1, 0, 154.5646820068359375, -120.868896484375, 93.1546630859375, 4.363323211669921875, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+203, 17992, 546, 3716, 3716, 3, 1, 0, 166.4525909423828125, -66.9316329956054687, 79.718658447265625, 0.226892799139022827, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+204, 17992, 546, 3716, 3716, 3, 1, 0, 188.73443603515625, -50.3364753723144531, 78.2408447265625, 2.0245819091796875, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+205, 17992, 546, 3716, 3716, 3, 1, 0, 209.5252227783203125, -35.4010810852050781, 67.54168701171875, 1.2042771577835083, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+206, 17992, 546, 3716, 3716, 3, 1, 0, 125.8939895629882812, -161.724563598632812, 74.32575225830078125, 1.256637096405029296, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+207, 17731, 546, 3716, 3716, 3, 1, 0, 178.977569580078125, 0.429706990718841552, 26.87487983703613281, 4.904375076293945312, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+208, 17731, 546, 3716, 3716, 3, 1, 0, 203.28253173828125, -7.22170209884643554, 27.64584541320800781, 4.468042850494384765, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+209, 17992, 546, 3716, 3716, 3, 1, 0, 141.1752166748046875, -3.96877694129943847, 51.25695419311523437, 6.2657318115234375, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+210, 17992, 546, 3716, 3716, 3, 1, 0, 220.7916107177734375, -8.57830715179443359, 56.90279006958007812, 5.864306449890136718, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+211, 3300, 546, 3716, 3716, 3, 1, 0, 185.8894195556640625, 15.59898090362548828, 27.24151039123535156, 0.32178431749343872, 86400, 1, 8, 1, 0, 0, 0, 0, 0, 46368), -- 3300 (Area: 3716 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+212, 17992, 546, 3716, 3716, 3, 1, 0, 172.5348358154296875, 11.44622135162353515, 46.7777862548828125, 1.588249564170837402, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+213, 17731, 546, 3716, 3716, 3, 1, 0, 159.397491455078125, 28.01762580871582031, 27.06750106811523437, 1.902408838272094726, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+214, 17731, 546, 3716, 3716, 3, 1, 0, 200.322113037109375, 31.8409423828125, 27.645843505859375, 0.92502450942993164, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+215, 17731, 546, 3716, 3716, 3, 1, 0, 209.040435791015625, 28.11860466003417968, 27.645843505859375, 2.373647689819335937, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+216, 17731, 546, 3716, 3716, 3, 1, 0, 200.22930908203125, 37.38312530517578125, 27.645843505859375, 4.502949237823486328, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368), -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) +(@CGUID+217, 17992, 546, 3716, 3716, 3, 1, 0, 146.314971923828125, 34.87497711181640625, 50.6389007568359375, 2.146754980087280273, 86400, 0, 0, 42, 0, 0, 0, 0, 0, 46368), -- 17992 (Area: 3716 - Difficulty: 1) +(@CGUID+218, 17731, 546, 3716, 3716, 3, 1, 0, 138.002899169921875, 39.86864852905273437, 25.25139045715332031, 3.874630928039550781, 86400, 0, 0, 16574, 0, 0, 0, 0, 0, 46368); -- 17731 (Area: 3716 - Difficulty: 1) (Auras: 31261 - 31261) + +-- Spawn auras for dead creatures and Emotes +DELETE FROM `creature_addon` WHERE `guid` IN (@CGUID+218, @CGUID+216, @CGUID+215, @CGUID+214, @CGUID+213, @CGUID+208, @CGUID+207, @CGUID+201, @CGUID+22 , @CGUID+20 , @CGUID+19, @CGUID+152, @CGUID+155, @CGUID+154); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(@CGUID+218, 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+216, 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+215, 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+214, 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+213, 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+208, 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+207, 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+201, 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+22 , 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+20 , 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+19 , 0, 0, 0, 0, 0, 0, '31261'), +(@CGUID+152, 0, 0, 0, 1, 234, 0, ''), +(@CGUID+155, 0, 0, 0, 1, 234, 0, ''), +(@CGUID+154, 0, 0, 8, 0, 0, 0, ''); + +-- Auras and bytes2 +DELETE FROM `creature_template_addon` WHERE `entry` IN (20465, 17726, 17727, 17728, 17735, 17771, 17729, 17730); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(20465, 0, 0, 0, 0, 0, 0, '18943 18950'), -- Underbog Frenzy +-- (17726, 0, 0, 0, 1, 0, 0, '32636'), // Wrathfin Myrmidon Overrun (aura 378027 in Classic) - Unconfirmed +(17726, 0, 0, 0, 1, 0, 0, ''), +(17727, 0, 0, 0, 1, 0, 0, '18950'), -- Wrathfin Sentry Stealth Detection aura +(17728, 0, 0, 0, 1, 0, 0, ''), +(17735, 0, 0, 0, 1, 0, 0, ''), +(17771, 0, 0, 0, 1, 0, 0, ''), +(17729, 0, 0, 0, 2, 0, 0, ''), +(17730, 0, 0, 0, 1, 0, 0, ''); + +-- Underbog Frenzy set RUN +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 20465) AND (`source_type` = 0) AND (`id` = 1); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(20465, 0, 1, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Frenzy - On Reset - Set Run On'); + +-- Ghaz'an Thrash +UPDATE `creature_template_addon` SET `auras` = '8876' WHERE (`entry` = 18105); + +SET @NPC := @CGUID+36; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,53.335827,-171.19751,-3.3044033,NULL,0,1,0,100,0), +(@PATH,2,35.609703,-185.99393,-4.075933,NULL,0,1,0,100,0), +(@PATH,3,17.48416,-192.44588,-4.426555,NULL,0,1,0,100,0), +(@PATH,4,2.884122,-185.09702,-4.5339727,NULL,0,1,0,100,0), +(@PATH,5,-11.849671,-150.05165,-4.5338936,NULL,0,1,0,100,0), +(@PATH,6,-17.999254,-117.81227,-4.533901,NULL,0,1,0,100,0), +(@PATH,7,-11.849671,-150.05165,-4.5338936,NULL,0,1,0,100,0), +(@PATH,8,2.884122,-185.09702,-4.5339727,NULL,0,1,0,100,0), +(@PATH,9,17.48416,-192.44588,-4.426555,NULL,0,1,0,100,0), +(@PATH,10,35.609703,-185.99393,-4.075933,NULL,0,1,0,100,0); + +SET @NPC := @CGUID+68; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-68.25427,-270.9585,-3.5277247,NULL,0,1,0,100,0), +(@PATH,2,-89.69933,-286.32974,0.33470756,NULL,0,1,0,100,0), +(@PATH,3,-102.27272,-287.3214,1.9546214,NULL,0,1,0,100,0), +(@PATH,4,-122.67276,-282.79837,6.121863,NULL,0,1,0,100,0), +(@PATH,5,-116.92185,-267.95047,12.211213,NULL,0,1,0,100,0), +(@PATH,6,-102.27272,-287.3214,1.9546214,NULL,0,1,0,100,0), +(@PATH,7,-89.69933,-286.32974,0.33470756,NULL,0,1,0,100,0); + +SET @NPC := @CGUID+73; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-11.016423,-392.69186,27.875362,NULL,0,1,0,100,0), +(@PATH,2,-19.358988,-359.81122,29.860739,NULL,0,1,0,100,0), +(@PATH,3,6.839859,-341.62842,29.919239,NULL,0,1,0,100,0), +(@PATH,4,5.573694,-326.43835,30.714275,NULL,0,1,0,100,0), +(@PATH,5,-4.692727,-317.54462,30.681536,NULL,0,1,0,100,0), +(@PATH,6,-20.202679,-316.25156,30.487944,NULL,0,1,0,100,0), +(@PATH,7,-31.772617,-320.19315,30.774057,NULL,0,1,0,100,0), +(@PATH,8,-39.692852,-330.91632,31.325401,NULL,0,1,0,100,0), +(@PATH,9,-40.69899,-345.8572,31.799494,NULL,0,1,0,100,0), +(@PATH,10,-35.312122,-360.4018,31.430618,NULL,0,1,0,100,0), +(@PATH,11,-27.32051,-380.549,32.004524,NULL,0,1,0,100,0), +(@PATH,12,-9.648621,-377.5021,28.132086,NULL,0,1,0,100,0), +(@PATH,13,-5.809507,-359.78894,28.126282,NULL,0,1,0,100,0), +(@PATH,14,12.883931,-352.98172,27.426939,NULL,0,1,0,100,0), +(@PATH,15,26.5498,-365.97595,27.250103,NULL,0,1,0,100,0), +(@PATH,16,25.296139,-387.69263,27.568605,NULL,0,1,0,100,0), +(@PATH,17,13.072289,-403.4628,27.36914,NULL,0,1,0,100,0); + +SET @NPC := @CGUID+79; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-151.45857,-286.00116,-5.0252166,NULL,0,0,0,100,0), +(@PATH,2,-147.45305,-265.93652,-4.460753,NULL,0,0,0,100,0), +(@PATH,3,-143.02681,-227.64442,-3.8760147,NULL,0,0,0,100,0), +(@PATH,4,-129.15343,-215.66437,-3.8939986,NULL,0,0,0,100,0), +(@PATH,5,-143.02681,-227.64442,-3.8760147,NULL,0,0,0,100,0), +(@PATH,6,-147.45305,-265.93652,-4.460753,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+9; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,70.82785,-65.18546,-2.7509038,NULL,0,1,0,100,0), +(@PATH,2,60.469746,-48.50313,-2.752787,NULL,1500,1,0,100,0), +(@PATH,3,66.39136,-88.559586,-2.7552373,NULL,0,1,0,100,0), +(@PATH,4,53.99983,-103.86216,-2.7446675,NULL,1500,1,0,100,0); + +SET @NPC := @CGUID+45; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,27.692041,-196.18343,-4.3031116,NULL,0,1,0,100,0), +(@PATH,2,34.727264,-231.44217,-4.483186,NULL,0,1,0,100,0), +(@PATH,3,52.006886,-241.20773,-4.4712386,NULL,0,1,0,100,0), +(@PATH,4,27.648382,-215.196,-4.533221,NULL,0,1,0,100,0); + +SET @NPC := @CGUID+38; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-25.224016,-210.4845,-4.5353093,NULL,0,1,0,100,0), +(@PATH,2,-8.694112,-208.17241,-4.5345955,NULL,0,1,0,100,0), +(@PATH,3,-9.591006,-198.76746,-4.5344644,NULL,0,1,0,100,0), +(@PATH,4,-23.865183,-196.50008,-4.5347757,NULL,0,1,0,100,0), +(@PATH,5,-25.224016,-210.4845,-4.5353093,NULL,0,1,0,100,0), +(@PATH,6,-8.694112,-208.17241,-4.5345955,NULL,0,1,0,100,0), +(@PATH,7,-9.591006,-198.76746,-4.5344644,NULL,0,1,0,100,0), +(@PATH,8,-23.865183,-196.50008,-4.5347757,NULL,0,1,0,100,0), +(@PATH,9,-25.224016,-210.4845,-4.5353093,NULL,0,1,0,100,0), +(@PATH,10,-8.694112,-208.17241,-4.5345955,NULL,0,1,0,100,0), +(@PATH,11,-9.591006,-198.76746,-4.5344644,NULL,0,1,0,100,0), +(@PATH,12,-23.865183,-196.50008,-4.5347757,NULL,0,1,0,100,0), +(@PATH,13,-25.224016,-210.4845,-4.5353093,NULL,0,1,0,100,0), +(@PATH,14,-16.935085,-214.41397,-4.5351872,NULL,0,1,0,100,0), +(@PATH,15,-9.591006,-198.76746,-4.5344644,NULL,0,1,0,100,0), +(@PATH,16,-16.808744,-194.3225,-4.534508,NULL,0,1,0,100,0), +(@PATH,17,-27.644753,-202.51695,-4.5350857,NULL,0,1,0,100,0), +(@PATH,18,-16.935085,-214.41397,-4.5351872,NULL,0,1,0,100,0), +(@PATH,19,-9.591006,-198.76746,-4.5344644,NULL,0,1,0,100,0), +(@PATH,20,-16.808744,-194.3225,-4.534508,NULL,0,1,0,100,0), +(@PATH,21,-27.644753,-202.51695,-4.5350857,NULL,0,1,0,100,0), +(@PATH,22,-16.935085,-214.41397,-4.5351872,NULL,0,1,0,100,0), +(@PATH,23,-8.694112,-208.17241,-4.5345955,NULL,0,1,0,100,0), +(@PATH,24,-16.808744,-194.3225,-4.534508,NULL,0,1,0,100,0), +(@PATH,25,-27.644753,-202.51695,-4.5350857,NULL,0,1,0,100,0); + +SET @NPC := @CGUID+10; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,51.442417,-44.740856,-2.7446182,NULL,1500,1,0,100,0), +(@PATH,2,64.93866,-57.066772,-2.7489753,NULL,1500,1,0,100,0); + +SET @NPC := @CGUID+47; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-17.989143,`position_y`=-229.64557,`position_z`=-4.53509 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-17.989143,-229.64557,-4.53509,NULL,0,1,0,100,0), +(@PATH,2,-20.986021,-245.65443,-4.5351024,NULL,0,1,0,100,0), +(@PATH,3,-5.987698,-240.33052,-4.5342875,NULL,0,1,0,100,0), +(@PATH,4,-20.986021,-245.65443,-4.5351024,NULL,0,1,0,100,0), +(@PATH,5,-12.229747,-247.23727,-4.5345397,NULL,0,1,0,100,0), +(@PATH,6,-9.433245,-231.52043,-4.5344515,NULL,0,1,0,100,0), +(@PATH,7,-24.067268,-236.38385,-4.535461,NULL,0,1,0,100,0), +(@PATH,8,-20.986021,-245.65443,-4.5351024,NULL,0,1,0,100,0), +(@PATH,9,-5.987698,-240.33052,-4.5342875,NULL,0,1,0,100,0), +(@PATH,10,-9.433245,-231.52043,-4.5344515,NULL,0,1,0,100,0), +(@PATH,11,-24.067268,-236.38385,-4.535461,NULL,0,1,0,100,0), +(@PATH,12,-20.986021,-245.65443,-4.5351024,NULL,0,1,0,100,0), +(@PATH,13,-5.987698,-240.33052,-4.5342875,NULL,0,1,0,100,0), +(@PATH,14,-17.989143,-229.64557,-4.53509,NULL,0,1,0,100,0), +(@PATH,15,-24.067268,-236.38385,-4.535461,NULL,0,1,0,100,0), +(@PATH,16,-12.229747,-247.23727,-4.5345397,NULL,0,1,0,100,0), +(@PATH,17,-5.987698,-240.33052,-4.5342875,NULL,0,1,0,100,0), +(@PATH,18,-17.989143,-229.64557,-4.53509,NULL,0,1,0,100,0), +(@PATH,19,-24.067268,-236.38385,-4.535461,NULL,0,1,0,100,0), +(@PATH,20,-12.229747,-247.23727,-4.5345397,NULL,0,1,0,100,0), +(@PATH,21,-9.433245,-231.52043,-4.5344515,NULL,0,1,0,100,0); + +SET @NPC := @CGUID+14; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-76.807045,-115.07598,68.56723,NULL,0,0,0,100,0), +(@PATH,2,-51.9431,-112.87946,51.103363,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+173; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,326.7678,-341.27536,26.27718,NULL,0,0,0,100,0), +(@PATH,2,303.30872,-323.57098,20.690649,NULL,0,0,0,100,0), +(@PATH,3,300.45547,-314.25027,19.71717,NULL,0,0,0,100,0), +(@PATH,4,310.34607,-320.66324,19.90794,NULL,0,0,0,100,0), +(@PATH,5,326.8262,-332.52115,22.322342,NULL,0,0,0,100,0), +(@PATH,6,340.7248,-345.90942,28.651798,NULL,0,0,0,100,0), +(@PATH,7,342.62613,-356.82632,32.390038,NULL,0,0,0,100,0), +(@PATH,8,334.96402,-350.80576,29.880644,NULL,0,0,0,100,0), +(@PATH,9,326.7678,-341.27536,26.27718,NULL,0,0,0,100,0), +(@PATH,10,303.30872,-323.57098,20.690649,NULL,0,0,0,100,0), +(@PATH,11,299.75455,-319.4571,20.507263,NULL,0,0,0,100,0), +(@PATH,12,310.34607,-320.66324,19.90794,NULL,0,0,0,100,0), +(@PATH,13,326.8262,-332.52115,22.322342,NULL,0,0,0,100,0), +(@PATH,14,340.7248,-345.90942,28.651798,NULL,0,0,0,100,0), +(@PATH,15,342.62613,-356.82632,32.390038,NULL,0,0,0,100,0), +(@PATH,16,334.96402,-350.80576,29.880644,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+198; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,217.05518,-131.51497,26.753138,NULL,0,0,0,100,0), +(@PATH,2,193.61502,-133.56485,28.525309,NULL,0,0,0,100,0), +(@PATH,3,169.54633,-135.7898,28.335976,NULL,0,0,0,100,0), +(@PATH,4,158.52997,-167.41908,32.282738,NULL,0,0,0,100,0), +(@PATH,5,169.54633,-135.7898,28.335976,NULL,0,0,0,100,0), +(@PATH,6,193.61502,-133.56485,28.525309,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+28; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,161.12509,-70.36053,27.062626,NULL,0,0,0,100,0), +(@PATH,2,153.02617,-93.89476,26.35261,NULL,0,0,0,100,0), +(@PATH,3,176.59203,-61.29988,26.51584,NULL,0,0,0,100,0), +(@PATH,4,190.18256,-52.506645,26.633347,NULL,0,0,0,100,0), +(@PATH,5,176.59203,-61.29988,26.51584,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+88; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,19.44412,-308.63614,31.892838,NULL,0,0,0,100,0), +(@PATH,2,42.476913,-293.77115,32.69076,NULL,0,0,0,100,0), +(@PATH,3,68.26116,-284.1465,32.08228,NULL,0,0,0,100,0), +(@PATH,4,88.84355,-286.01645,32.128727,NULL,0,0,0,100,0), +(@PATH,5,96.96455,-311.36377,32.529114,NULL,0,0,0,100,0), +(@PATH,6,101.42537,-344.6663,32.977905,NULL,0,0,0,100,0), +(@PATH,7,93.06754,-360.33292,33.215553,NULL,0,0,0,100,0), +(@PATH,8,101.42537,-344.6663,32.977905,NULL,0,0,0,100,0), +(@PATH,9,96.96455,-311.36377,32.529114,NULL,0,0,0,100,0), +(@PATH,10,88.84355,-286.01645,32.128727,NULL,0,0,0,100,0), +(@PATH,11,68.26116,-284.1465,32.08228,NULL,0,0,0,100,0), +(@PATH,12,42.476913,-293.77115,32.69076,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+61; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-69.680275,-228.86562,-4.5370073,NULL,0,0,0,100,0), +(@PATH,2,-96.95158,-227.70627,-4.376714,NULL,0,0,0,100,0), +(@PATH,3,-69.680275,-228.86562,-4.5370073,NULL,0,0,0,100,0), +(@PATH,4,-50.817432,-226.48108,-4.5365863,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+62; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-21.110575,-342.88358,30.821274,NULL,0,0,0,100,0), +(@PATH,2,1.211546,-323.15225,30.926214,NULL,0,0,0,100,0), +(@PATH,3,27.59817,-304.36447,32.139996,NULL,0,0,0,100,0), +(@PATH,4,1.211546,-323.15225,30.926214,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+64; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-92.30222,-302.19803,-4.5357122,NULL,0,0,0,100,0), +(@PATH,2,-59.19425,-289.67743,-4.5349183,NULL,0,0,0,100,0), +(@PATH,3,-42.62119,-269.50012,-4.535499,NULL,0,0,0,100,0), +(@PATH,4,-59.19425,-289.67743,-4.5349183,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+123; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,188.47975,-404.16498,72.504776,NULL,0,0,0,100,0), +(@PATH,2,171.54146,-424.23203,72.47367,NULL,0,0,0,100,0), +(@PATH,3,164.67918,-452.26797,72.48773,NULL,0,0,0,100,0), +(@PATH,4,171.54146,-424.23203,72.47367,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+151; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,272.08115,-381.04507,72.14804,NULL,0,0,0,100,0), +(@PATH,2,264.9766,-377.12155,72.15923,NULL,0,0,0,100,0), +(@PATH,3,256.61053,-374.54532,72.26968,NULL,0,0,0,100,0), +(@PATH,4,250.05904,-367.16782,72.172905,NULL,0,0,0,100,0), +(@PATH,5,256.61053,-374.54532,72.26968,NULL,0,0,0,100,0), +(@PATH,6,264.9766,-377.12155,72.15923,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+145; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=237.12813,`position_y`=-373.9269,`position_z`=48.178493 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,237.12813,-373.9269,48.178493,NULL,0,0,0,100,0), +(@PATH,2,227.23715,-378.54562,48.189976,NULL,0,0,0,100,0), +(@PATH,3,214.0971,-380.00208,48.148045,NULL,0,0,0,100,0), +(@PATH,4,204.41469,-378.89005,48.1181,NULL,0,0,0,100,0), +(@PATH,5,214.0971,-380.00208,48.148045,NULL,0,0,0,100,0), +(@PATH,6,227.23715,-378.54562,48.189976,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+179; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,266.3294,-220.27826,28.777576,NULL,0,1,0,100,0), +(@PATH,2,269.6321,-240.93237,27.48778,NULL,0,1,0,100,0), +(@PATH,3,265.96866,-271.0043,24.540274,NULL,0,1,0,100,0), +(@PATH,4,276.8408,-289.8254,21.845425,NULL,0,1,0,100,0), +(@PATH,5,303.27896,-310.3096,18.873123,NULL,0,1,0,100,0), +(@PATH,6,276.8408,-289.8254,21.845425,NULL,0,1,0,100,0), +(@PATH,7,265.96866,-271.0043,24.540274,NULL,0,1,0,100,0), +(@PATH,8,269.6321,-240.93237,27.48778,NULL,0,1,0,100,0); + +SET @NPC := @CGUID+188; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,268.6617,-230.68227,28.236944,NULL,0,1,0,100,0), +(@PATH,2,265.41608,-195.6269,28.487965,NULL,0,1,0,100,0), +(@PATH,3,251.65063,-161.90324,28.616928,NULL,0,1,0,100,0), +(@PATH,4,265.41608,-195.6269,28.487965,NULL,0,1,0,100,0); + +SET @NPC := @CGUID+200; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,288.5823,-121.83091,29.703293,NULL,0,0,0,100,0), +(@PATH,2,281.52713,-120.36844,29.751406,NULL,0,0,0,100,0), +(@PATH,3,274.06772,-122.05376,29.809622,NULL,0,0,0,100,0), +(@PATH,4,281.52713,-120.36844,29.751406,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+91; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,90.52101,-391.76727,34.237995,NULL,0,0,0,100,0), +(@PATH,2,99.41526,-396.64914,36.55695,NULL,0,0,0,100,0), +(@PATH,3,115.96061,-404.26944,42.522438,NULL,0,0,0,100,0), +(@PATH,4,141.5793,-416.62878,48.6011,NULL,0,0,0,100,0), +(@PATH,5,115.96061,-404.26944,42.522438,NULL,0,0,0,100,0), +(@PATH,6,99.41526,-396.64914,36.55695,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+111; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,202.6417,-380.7892,48.123344,NULL,0,0,0,100,0), +(@PATH,2,188.94055,-391.5165,48.133305,NULL,0,0,0,100,0), +(@PATH,3,165.59125,-417.70804,48.107246,NULL,0,0,0,100,0), +(@PATH,4,161.0618,-432.5178,48.088337,NULL,0,0,0,100,0), +(@PATH,5,165.59125,-417.70804,48.107246,NULL,0,0,0,100,0), +(@PATH,6,188.94055,-391.5165,48.133305,NULL,0,0,0,100,0); + +SET @NPC := @CGUID+173; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,326.8262,-332.52115,22.322342,NULL,0,1,0,100,0), +(@PATH,2,340.7248,-345.90942,28.651798,NULL,0,1,0,100,0), +(@PATH,3,342.62613,-356.82632,32.390038,NULL,0,1,0,100,0), +(@PATH,4,326.7678,-341.27536,26.27718,NULL,0,1,0,100,0), +(@PATH,5,303.30872,-323.57098,20.690649,NULL,0,1,0,100,0), +(@PATH,6,300.45547,-314.25027,19.71717,NULL,0,1,0,100,0), +(@PATH,7,310.34607,-320.66324,19.90794,NULL,0,1,0,100,0), +(@PATH,8,326.8262,-332.52115,22.322342,NULL,0,1,0,100,0), +(@PATH,9,340.7248,-345.90942,28.651798,NULL,0,1,0,100,0), +(@PATH,10,342.62613,-356.82632,32.390038,NULL,0,1,0,100,0), +(@PATH,11,334.96402,-350.80576,29.880644,NULL,0,1,0,100,0), +(@PATH,12,326.7678,-341.27536,26.27718,NULL,0,1,0,100,0), +(@PATH,13,303.30872,-323.57098,20.690649,NULL,0,1,0,100,0), +(@PATH,14,299.75455,-319.4571,20.507263,NULL,0,1,0,100,0), +(@PATH,15,310.34607,-320.66324,19.90794,NULL,0,1,0,100,0); + +-- Large AOI Underbat (18409) +SET @NPC := @CGUID+12; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +-- (@PATH,1 ,154.9921,-167.61511,14.614521,NULL,0,2,0,100,0), // Bad waypoint +(@PATH,1 ,131.52637,-183.17879,32.36646,NULL,0,2,0,100,0), +(@PATH,2 ,108.06063,-198.74246,50.11841,NULL,0,2,0,100,0), +(@PATH,3 ,100.05457,-228.34999,44.81282,NULL,0,2,0,100,0), +(@PATH,4 ,60.7907,-227.56961,44.812828,NULL,0,2,0,100,0), +(@PATH,5 ,34.299797,-212.09708,44.81282,NULL,0,2,0,100,0), +(@PATH,6 ,36.41552,-191.97911,44.812828,NULL,0,2,0,100,0), +(@PATH,7 ,55.430897,-192.46626,44.81282,NULL,0,2,0,100,0), +(@PATH,8 ,80.962364,-187.03317,44.81282,NULL,0,2,0,100,0), +(@PATH,9 ,96.50256,-206.56255,44.812828,NULL,0,2,0,100,0), +(@PATH,10,95.1273,-238.22154,47.340652,NULL,0,2,0,100,0), +(@PATH,11,123.91017,-264.36807,47.3406,NULL,0,2,0,100,0), +(@PATH,12,148.9432,-247.73517,47.34065,NULL,0,2,0,100,0), +(@PATH,13,130.2442,-205.76604,47.34065,NULL,0,2,0,100,0), +(@PATH,14,99.282715,-204.80722,47.3406,NULL,0,2,0,100,0), +(@PATH,15,59.021133,-226.75888,47.3406,NULL,0,2,0,100,0), +(@PATH,16,26.437294,-212.8669,47.34065,NULL,0,2,0,100,0), +(@PATH,17,30.30252,-191.83493,47.34065,NULL,0,2,0,100,0), +(@PATH,18,62.248665,-190.2552,57.59066,NULL,0,2,0,100,0), +(@PATH,19,97.91077,-189.59196,57.59067,NULL,0,2,0,100,0), +(@PATH,20,97.91077,-189.59196,57.59067,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+14; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,-108.28185,-123.0119,84.96994,NULL,0,2,0,100,0), +(@PATH,2 ,-76.807045,-115.07598,68.56723,NULL,0,2,0,100,0), +(@PATH,3 ,-45.332237,-107.14006,52.16452,NULL,0,2,0,100,0), +(@PATH,4 ,-20.51215,-95.233376,51.09309,NULL,0,2,0,100,0), +(@PATH,5 ,-25.869871,-76.09419,50.426445,NULL,0,2,0,100,0), +(@PATH,6 ,-43.694996,-41.884632,52.759766,NULL,0,2,0,100,0), +(@PATH,7 ,-59.02421,-52.862125,38.981976,NULL,0,2,0,100,0), +(@PATH,8 ,-64.57032,-79.98646,40.28752,NULL,0,2,0,100,0), +(@PATH,9 ,-37.521442,-90.8207,39.565323,NULL,0,2,0,100,0), +(@PATH,10,-57.595596,-107.23399,54.648655,NULL,0,2,0,100,0), +(@PATH,11,-37.62119,-128.1312,57.42642,NULL,0,2,0,100,0), +(@PATH,12,-15.798647,-140.48317,46.398712,NULL,0,2,0,100,0), +(@PATH,13,-4.585545,-145.59552,46.270008,NULL,0,2,0,100,0), +(@PATH,14,-9.124636,-176.6982,50.658886,NULL,0,2,0,100,0), +(@PATH,15,-39.587536,-182.26076,47.158863,NULL,0,2,0,100,0), +(@PATH,16,-46.393852,-155.3724,53.15889,NULL,0,2,0,100,0), +(@PATH,17,-22.20054,-113.48487,51.186653,NULL,0,2,0,100,0), +(@PATH,18,-15.712842,-67.52161,47.158863,NULL,0,2,0,100,0), +(@PATH,19,-37.95539,-31.795296,47.158863,NULL,0,2,0,100,0), +(@PATH,20,-58.608414,-46.52659,47.158863,NULL,0,2,0,100,0), +(@PATH,21,-76.67039,-80.39093,47.158863,NULL,0,2,0,100,0), +(@PATH,22,-69.5675,-106.50803,47.158863,NULL,0,2,0,100,0), +(@PATH,23,-24.164875,-102.90431,47.158863,NULL,0,2,0,100,0), +(@PATH,24,23.35232,-93.92218,47.158863,NULL,0,2,0,100,0), +(@PATH,25,29.369534,-121.53922,47.158863,NULL,0,2,0,100,0), +(@PATH,26,-16.498398,-126.52269,47.158863,NULL,0,2,0,100,0), +(@PATH,27,-58.09205,-130.19185,47.158863,NULL,0,2,0,100,0), +(@PATH,28,-70.25954,-145.45541,47.158863,NULL,0,2,0,100,0), +(@PATH,29,-62.45145,-157.46199,47.158863,NULL,0,2,0,100,0), +(@PATH,30,-36.585537,-135.96046,47.158863,NULL,0,2,0,100,0), +(@PATH,31,-24.866474,-124.54898,47.158863,NULL,0,2,0,100,0), +(@PATH,32,-45.38209,-118.6299,47.158863,NULL,0,2,0,100,0), +(@PATH,33,-51.9431,-112.87946,51.103363,NULL,0,2,0,100,0), +(@PATH,34,-51.9431,-112.87946,51.103363,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+16; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,24.991587,-372.86945,69.41328,NULL,0,2,0,100,0), +(@PATH,2 ,-7.396929,-326.5323,60.326595,NULL,0,2,0,100,0), +(@PATH,3 ,-23.009151,-313.9418,59.632145,NULL,0,2,0,100,0), +(@PATH,4 ,-31.253208,-269.30655,47.7744,NULL,0,2,0,100,0), +(@PATH,5 ,-10.634785,-247.24089,46.107727,NULL,0,2,0,100,0), +(@PATH,6 ,4.614754,-252.06383,51.441067,NULL,0,2,0,100,0), +(@PATH,7 ,19.598951,-265.07214,54.385517,NULL,0,2,0,100,0), +(@PATH,8 ,43.778988,-287.22424,57.05217,NULL,0,2,0,100,0), +(@PATH,9 ,86.04507,-291.14993,69.41328,NULL,0,2,0,100,0), +(@PATH,10,91.21444,-338.52487,69.41328,NULL,0,2,0,100,0), +(@PATH,11,72.42783,-374.7526,69.41328,NULL,0,2,0,100,0), +(@PATH,12,24.991587,-372.86945,69.41328,NULL,0,2,0,100,0), +(@PATH,13,-7.396929,-326.5323,60.326595,NULL,0,2,0,100,0), +(@PATH,14,-23.009151,-313.9418,59.632145,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+21; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,165.6056,-284.6903,71.49371,NULL,0,2,0,100,0), +(@PATH,2 ,134.0699,-283.9162,65.77147,NULL,0,2,0,100,0), +(@PATH,3 ,102.5342,-283.1421,60.04923,NULL,0,2,0,100,0), +(@PATH,4 ,93.376595,-247.07332,60.04923,NULL,0,2,0,100,0), +(@PATH,5 ,100.19172,-223.76892,60.04923,NULL,0,2,0,100,0), +(@PATH,6 ,121.08182,-203.34663,54.24367,NULL,0,2,0,100,0), +(@PATH,7 ,143.84032,-211.64243,61.88258,NULL,0,2,0,100,0), +(@PATH,8 ,148.72322,-258.20108,60.04923,NULL,0,2,0,100,0), +(@PATH,9 ,118.94029,-275.2946,60.04923,NULL,0,2,0,100,0), +(@PATH,10,89.12748,-263.73288,60.04923,NULL,0,2,0,100,0), +(@PATH,11,95.09115,-219.00238,68.74374,NULL,0,2,0,100,0), +(@PATH,12,107.90464,-197.00034,67.52149,NULL,0,2,0,100,0), +(@PATH,13,97.54861,-189.32976,61.52141,NULL,0,2,0,100,0), +(@PATH,14,67.05095,-183.16312,63.66034,NULL,0,2,0,100,0), +(@PATH,15,53.408592,-196.79137,46.91036,NULL,0,2,0,100,0), +(@PATH,16,65.69105,-231.1738,55.13259,NULL,0,2,0,100,0), +(@PATH,17,97.306076,-269.7393,60.99368,NULL,0,2,0,100,0), +(@PATH,18,130.48312,-291.46973,59.271454,NULL,0,2,0,100,0), +(@PATH,19,162.47664,-267.0222,54.43813,NULL,0,2,0,100,0), +(@PATH,20,188.08128,-234.17494,60.99368,NULL,0,2,0,100,0), +(@PATH,21,203.08362,-190.29329,60.99368,NULL,0,2,0,100,0), +(@PATH,22,191.97174,-176.27826,66.215904,NULL,0,2,0,100,0), +(@PATH,23,179.02602,-145.18202,58.271427,NULL,0,2,0,100,0), +(@PATH,24,147.88734,-172.183,60.99368,NULL,0,2,0,100,0), +(@PATH,25,117.32134,-194.10324,63.715897,NULL,0,2,0,100,0), +(@PATH,26,91.97928,-216.79158,63.715897,NULL,0,2,0,100,0), +(@PATH,27,51.413708,-238.56361,63.715897,NULL,0,2,0,100,0), +(@PATH,28,25.905827,-224.83733,63.715897,NULL,0,2,0,100,0), +(@PATH,29,35.49563,-191.9028,59.632576,NULL,0,2,0,100,0), +(@PATH,30,69.78642,-186.75629,59.632576,NULL,0,2,0,100,0), +(@PATH,31,117.99161,-193.8229,59.632576,NULL,0,2,0,100,0), +(@PATH,32,151.68486,-222.148,59.632576,NULL,0,2,0,100,0), +(@PATH,33,149.06055,-260.86972,59.632576,NULL,0,2,0,100,0), +(@PATH,34,134.0699,-283.9162,65.77147,NULL,0,2,0,100,0), +(@PATH,35,134.0699,-283.9162,65.77147,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+27; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +-- (@PATH,1 ,9.475447,-241.10661,-72.8901,NULL,0,2,0,100,0), +-- (@PATH,2 ,38.802418,-236.2365,-4.4498854,NULL,0,2,0,100,0), // Bad waypoints +(@PATH,1 ,68.12939,-231.36638,63.99033,NULL,0,2,0,100,0), +(@PATH,2 ,114.73135,-215.09467,52.990345,NULL,0,2,0,100,0), +(@PATH,3 ,140.06693,-226.13943,52.990345,NULL,0,2,0,100,0), +(@PATH,4 ,142.07785,-249.24118,52.990345,NULL,0,2,0,100,0), +(@PATH,5 ,127.6956,-262.71658,52.990345,NULL,0,2,0,100,0), +(@PATH,6 ,107.36506,-250.37044,52.990345,NULL,0,2,0,100,0), +(@PATH,7 ,86.796196,-205.80804,52.990345,NULL,0,2,0,100,0), +(@PATH,8 ,58.517166,-183.4336,52.990345,NULL,0,2,0,100,0), +(@PATH,9 ,31.715275,-188.83464,58.46258,NULL,0,2,0,100,0), +(@PATH,10,33.04268,-217.36946,58.462578,NULL,0,2,0,100,0), +(@PATH,11,56.239147,-223.5822,63.49035,NULL,0,2,0,100,0), +(@PATH,12,100.35423,-204.94261,63.49035,NULL,0,2,0,100,0), +(@PATH,13,66.10667,-176.69748,63.49035,NULL,0,2,0,100,0), +(@PATH,14,33.79453,-182.07773,71.35149,NULL,0,2,0,100,0), +(@PATH,15,11.390241,-203.7657,71.35149,NULL,0,2,0,100,0), +(@PATH,16,22.179758,-234.09207,71.35149,NULL,0,2,0,100,0), +(@PATH,17,54.407608,-234.28868,68.268036,NULL,0,2,0,100,0), +(@PATH,18,54.407608,-234.28868,68.268036,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+41; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,-17.554047,-397.13507,88.67853,NULL,0,2,0,100,0), +(@PATH,2 ,45.136578,-379.57333,72.997406,NULL,0,2,0,100,0), +(@PATH,3 ,107.8272,-362.0116,57.31628,NULL,0,2,0,100,0), +(@PATH,4 ,152.8699,-346.16525,54.038467,NULL,0,2,0,100,0), +(@PATH,5 ,165.88777,-317.33118,54.038467,NULL,0,2,0,100,0), +(@PATH,6 ,133.13345,-307.99796,54.038467,NULL,0,2,0,100,0), +(@PATH,7 ,101.74008,-314.87424,63.399567,NULL,0,2,0,100,0), +(@PATH,8 ,99.851585,-358.96057,61.982864,NULL,0,2,0,100,0), +(@PATH,9 ,138.873,-379.85318,84.997444,NULL,0,2,0,100,0), +(@PATH,10,156.86253,-364.7157,88.94193,NULL,0,2,0,100,0), +(@PATH,11,181.04306,-332.84772,88.94193,NULL,0,2,0,100,0), +(@PATH,12,174.56163,-305.77374,80.71969,NULL,0,2,0,100,0), +(@PATH,13,151.28624,-281.98145,60.525223,NULL,0,2,0,100,0), +(@PATH,14,103.94058,-273.8741,57.88634,NULL,0,2,0,100,0), +(@PATH,15,97.941734,-235.90349,47.969624,NULL,0,2,0,100,0), +(@PATH,16,122.31989,-200.21811,47.969624,NULL,0,2,0,100,0), +(@PATH,17,143.6595,-241.38338,47.969624,NULL,0,2,0,100,0), +(@PATH,18,146.22797,-286.85287,32.275192,NULL,0,2,0,100,0), +(@PATH,19,165.5804,-321.68304,32.275196,NULL,0,2,0,100,0), +(@PATH,20,184.80956,-345.76715,32.275196,NULL,0,2,0,100,0), +(@PATH,21,197.67366,-324.9148,29.414076,NULL,0,2,0,100,0), +(@PATH,22,180.50786,-311.22818,22.802954,NULL,0,2,0,100,0), +(@PATH,23,158.90865,-324.95157,22.802954,NULL,0,2,0,100,0), +(@PATH,24,149.56277,-357.3788,22.802954,NULL,0,2,0,100,0), +(@PATH,25,141.26537,-399.1162,22.802954,NULL,0,2,0,100,0), +(@PATH,26,108.31991,-409.51987,22.802954,NULL,0,2,0,100,0), +(@PATH,27,111.4886,-374.0559,22.802954,NULL,0,2,0,100,0), +(@PATH,28,138.26443,-340.13425,22.802954,NULL,0,2,0,100,0), +(@PATH,29,133.49611,-322.4106,29.636303,NULL,0,2,0,100,0), +(@PATH,30,135.93465,-307.53302,32.302967,NULL,0,2,0,100,0), +(@PATH,31,112.50607,-303.20105,56.525204,NULL,0,2,0,100,0), +(@PATH,32,100.18504,-326.30008,56.525204,NULL,0,2,0,100,0), +(@PATH,33,83.25131,-363.05505,56.525204,NULL,0,2,0,100,0), +(@PATH,34,67.215324,-395.4664,56.525204,NULL,0,2,0,100,0), +(@PATH,35,69.96099,-411.28693,56.525204,NULL,0,2,0,100,0), +(@PATH,36,112.86326,-404.80457,72.99741,NULL,0,2,0,100,0), +(@PATH,37,82.91771,-387.29904,72.99741,NULL,0,2,0,100,0), +(@PATH,38,39.05955,-399.753,72.99741,NULL,0,2,0,100,0), +(@PATH,39,20.09486,-401.21558,72.99741,NULL,0,2,0,100,0), +(@PATH,40,45.136562,-379.57336,72.99741,NULL,0,2,0,100,0), +(@PATH,41,45.136562,-379.57336,72.99741,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+48; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,-66.02303,-321.3474,11.018113,NULL,0,2,0,100,0), +(@PATH,2 ,-74.26941,-332.65573,8.657012,NULL,0,2,0,100,0), +(@PATH,3 ,-82.515785,-343.96405,6.295911,NULL,0,2,0,100,0), +(@PATH,4 ,-88.7316,-358.2072,6.295911,NULL,0,2,0,100,0), +(@PATH,5 ,-101.60222,-406.87582,8.684794,NULL,0,2,0,100,0), +(@PATH,6 ,-86.403175,-426.20718,8.684794,NULL,0,2,0,100,0), +(@PATH,7 ,-51.807484,-425.37628,14.684793,NULL,0,2,0,100,0), +(@PATH,8 ,-45.97381,-390.0173,8.684794,NULL,0,2,0,100,0), +(@PATH,9 ,-57.010506,-348.51276,6.212577,NULL,0,2,0,100,0), +(@PATH,10,-47.576263,-338.49866,11.323675,NULL,0,2,0,100,0), +(@PATH,11,-21.795689,-345.6191,8.295907,NULL,0,2,0,100,0), +(@PATH,12,6.314677,-377.24783,5.12925,NULL,0,2,0,100,0), +(@PATH,13,39.8706,-384.4937,8.684794,NULL,0,2,0,100,0), +(@PATH,14,80.97585,-377.99042,8.684794,NULL,0,2,0,100,0), +(@PATH,15,116.24075,-371.4774,8.684794,NULL,0,2,0,100,0), +(@PATH,16,93.89439,-398.7016,8.684794,NULL,0,2,0,100,0), +(@PATH,17,83.21564,-406.50748,8.684794,NULL,0,2,0,100,0), +(@PATH,18,48.240185,-426.58188,8.684794,NULL,0,2,0,100,0), +(@PATH,19,3.374041,-419.86044,8.684794,NULL,0,2,0,100,0), +(@PATH,20,-39.29324,-400.84177,6.684796,NULL,0,2,0,100,0), +(@PATH,21,-52.12625,-388.48563,6.684796,NULL,0,2,0,100,0), +(@PATH,22,-58.305847,-375.51797,6.684796,NULL,0,2,0,100,0), +(@PATH,23,-58.266766,-360.0314,6.684796,NULL,0,2,0,100,0), +(@PATH,24,-63.308018,-338.78717,6.684796,NULL,0,2,0,100,0), +(@PATH,25,-74.269424,-332.65573,8.657014,NULL,0,2,0,100,0), +(@PATH,26,-74.269424,-332.65573,8.657014,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+52; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,65.94562,-172.67117,16.405907,NULL,0,2,0,100,0), +(@PATH,2 ,54.452988,-231.6677,14.350344,NULL,0,2,0,100,0), +(@PATH,3 ,42.960358,-290.6642,12.294781,NULL,0,2,0,100,0), +(@PATH,4 ,67.75742,-300.49097,12.294782,NULL,0,2,0,100,0), +(@PATH,5 ,92.09971,-315.5064,12.294782,NULL,0,2,0,100,0), +(@PATH,6 ,104.02384,-341.875,12.294782,NULL,0,2,0,100,0), +(@PATH,7 ,83.7507,-366.5859,12.294782,NULL,0,2,0,100,0), +(@PATH,8 ,50.545082,-381.2382,12.294782,NULL,0,2,0,100,0), +(@PATH,9 ,82.10834,-411.10965,12.294782,NULL,0,2,0,100,0), +(@PATH,10,109.5321,-372.48477,12.294782,NULL,0,2,0,100,0), +(@PATH,11,132.29857,-346.03976,12.294782,NULL,0,2,0,100,0), +(@PATH,12,150.6117,-333.08597,12.294782,NULL,0,2,0,100,0), +(@PATH,13,171.8186,-345.58026,12.294782,NULL,0,2,0,100,0), +(@PATH,14,199.42459,-334.02628,12.294782,NULL,0,2,0,100,0), +(@PATH,15,192.086,-306.53082,12.294782,NULL,0,2,0,100,0), +(@PATH,16,169.34111,-310.2631,12.294782,NULL,0,2,0,100,0), +(@PATH,17,161.00313,-326.56055,19.017008,NULL,0,2,0,100,0), +(@PATH,18,151.13496,-329.13226,19.017008,NULL,0,2,0,100,0), +(@PATH,19,135.21587,-369.76703,19.017008,NULL,0,2,0,100,0), +(@PATH,20,108.37441,-348.45712,19.017008,NULL,0,2,0,100,0), +(@PATH,21,113.34895,-329.8578,19.017008,NULL,0,2,0,100,0), +(@PATH,22,125.52408,-322.7058,19.017008,NULL,0,2,0,100,0), +(@PATH,23,136.60739,-328.5185,19.017008,NULL,0,2,0,100,0), +(@PATH,24,134.74445,-352.99753,19.017008,NULL,0,2,0,100,0), +(@PATH,25,102.71191,-329.51318,19.017008,NULL,0,2,0,100,0), +(@PATH,26,80.124626,-312.5155,19.017008,NULL,0,2,0,100,0), +(@PATH,27,52.324085,-287.9494,19.017008,NULL,0,2,0,100,0), +(@PATH,28,56.976753,-281.74063,19.017008,NULL,0,2,0,100,0), +(@PATH,29,63.30662,-253.37297,19.017008,NULL,0,2,0,100,0), +(@PATH,30,84.68186,-246.2771,13.128126,NULL,0,2,0,100,0), +(@PATH,31,105.8536,-249.20723,13.128126,NULL,0,2,0,100,0), +(@PATH,32,114.09672,-215.57478,13.128126,NULL,0,2,0,100,0), +(@PATH,33,97.62928,-180.02473,13.128126,NULL,0,2,0,100,0), +(@PATH,34,63.12343,-173.66406,13.128126,NULL,0,2,0,100,0), +(@PATH,35,56.365395,-202.27565,13.128126,NULL,0,2,0,100,0), +(@PATH,36,54.45299,-231.6677,14.350344,NULL,0,2,0,100,0), +(@PATH,37,54.45299,-231.6677,14.350344,NULL,0,2,0,100,0); + +-- Modelid +-- Lykul Wasp +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17732) AND (`source_type` = 0) AND (`id` IN (9)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17732, 0, 9, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 3, 0, 18722, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Morph on Reset to 18722 due to modelid field being dropped.'); +-- Lykul Stinger +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19632) AND (`source_type` = 0) AND (`id` IN (2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(19632, 0, 2, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 3, 0, 19367, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Morph on Reset to 19367 due to modelid field being dropped.'); +-- Underbog Lord +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17734) AND (`source_type` = 0) AND (`id` IN (2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17734, 0, 2, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 3, 0, 17758, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Morph on Reset to 17758 due to modelid field being dropped.'); + +-- Patrolling Formations +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@CGUID+91, @CGUID+111, @CGUID+123, @CGUID+38, @CGUID+47, @CGUID+45, @CGUID+36, @CGUID+68, @CGUID+79, @CGUID+73, @CGUID+145, @CGUID+173, @CGUID+179, @CGUID+188) AND `memberGUID` IN (@CGUID+91, @CGUID+93, @CGUID+111, @CGUID+109, @CGUID+123, @CGUID+124, @CGUID+38, @CGUID+43, @CGUID+47, @CGUID+46, @CGUID+45, @CGUID+42, @CGUID+36, @CGUID+30, @CGUID+31, @CGUID+68, @CGUID+70, @CGUID+72, @CGUID+79, @CGUID+39, @CGUID+40, @CGUID+73, @CGUID+74, @CGUID+75, @CGUID+76, @CGUID+145, @CGUID+138, @CGUID+140, @CGUID+142, @CGUID+173, @CGUID+162, @CGUID+163, @CGUID+179, @CGUID+176, @CGUID+177, @CGUID+188, @CGUID+190, @CGUID+191); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(@CGUID+91, @CGUID+91, 0, 0, 3), +(@CGUID+91, @CGUID+93, 2.75, 90, 515), +(@CGUID+111, @CGUID+111, 0, 0, 3), +(@CGUID+111, @CGUID+109, 2.75, 90, 515), +(@CGUID+123, @CGUID+123, 0, 0, 3), +(@CGUID+123, @CGUID+124, 2.75, 90, 515), +(@CGUID+38, @CGUID+38, 0, 0, 3), +(@CGUID+38, @CGUID+43, 8, 180, 515), +(@CGUID+47, @CGUID+47, 0, 0, 3), +(@CGUID+47, @CGUID+46, 8, 180, 515), +(@CGUID+45, @CGUID+45, 0, 0, 3), +(@CGUID+45, @CGUID+42, 8, 180, 515), +(@CGUID+36, @CGUID+36, 0, 0, 3), +(@CGUID+36, @CGUID+30, 8, 150, 515), +(@CGUID+36, @CGUID+31, 8, 210, 515), +(@CGUID+68, @CGUID+68, 0, 0, 3), +(@CGUID+68, @CGUID+70, 8, 160, 515), +(@CGUID+68, @CGUID+72, 8, 200, 515), +(@CGUID+79, @CGUID+79, 0, 0, 3), +(@CGUID+79, @CGUID+39, 8, 150, 515), +(@CGUID+79, @CGUID+40, 8, 210, 515), +(@CGUID+73, @CGUID+73, 0, 0, 3), +(@CGUID+73, @CGUID+74, 14, 180, 515), +(@CGUID+73, @CGUID+75, 8, 160, 515), +(@CGUID+73, @CGUID+76, 8, 200, 515), +(@CGUID+145, @CGUID+145, 0, 0, 3), +(@CGUID+145, @CGUID+142, 6, 180, 515), +(@CGUID+145, @CGUID+138, 3, 150, 515), +(@CGUID+145, @CGUID+140, 3, 210, 515), +(@CGUID+173, @CGUID+173, 0, 0, 3), +(@CGUID+173, @CGUID+162, 8, 150, 515), +(@CGUID+173, @CGUID+163, 8, 210, 515), +(@CGUID+179, @CGUID+179, 0, 0, 3), +(@CGUID+179, @CGUID+176, 3, 90, 515), +(@CGUID+179, @CGUID+177, 3, 270, 515), +(@CGUID+188, @CGUID+188, 0, 0, 3), +(@CGUID+188, @CGUID+191, 3, 90, 515), +(@CGUID+188, @CGUID+190, 3, 270, 515); + +-- Static formations +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@CGUID+01,@CGUID+02,@CGUID+08,@CGUID+24,@CGUID+33,@CGUID+34,@CGUID+38,@CGUID+47,@CGUID+78,@CGUID+100,@CGUID+101,@CGUID+106,@CGUID+108,@CGUID+110,@CGUID+117,@CGUID+125,@CGUID+151,@CGUID+164,@CGUID+180,@CGUID+184,@CGUID+192,@CGUID+194,@CGUID+199) AND `memberGUID` IN (@CGUID+00,@CGUID+01,@CGUID+02,@CGUID+03,@CGUID+04,@CGUID+05,@CGUID+06,@CGUID+07,@CGUID+08,@CGUID+13,@CGUID+17,@CGUID+24,@CGUID+25,@CGUID+26,@CGUID+32,@CGUID+33,@CGUID+34,@CGUID+35,@CGUID+49,@CGUID+51,@CGUID+78,@CGUID+80,@CGUID+100,@CGUID+101,@CGUID+102,@CGUID+103,@CGUID+104,@CGUID+106,@CGUID+107,@CGUID+108,@CGUID+110,@CGUID+112,@CGUID+113,@CGUID+114,@CGUID+115,@CGUID+116,@CGUID+117,@CGUID+118,@CGUID+119,@CGUID+120,@CGUID+121,@CGUID+122,@CGUID+125,@CGUID+128,@CGUID+129,@CGUID+151,@CGUID+152,@CGUID+154,@CGUID+155,@CGUID+164,@CGUID+165,@CGUID+175,@CGUID+180,@CGUID+182,@CGUID+183,@CGUID+184,@CGUID+186,@CGUID+187,@CGUID+192,@CGUID+193,@CGUID+194,@CGUID+195,@CGUID+197,@CGUID+199,@CGUID+200) AND `groupAI`=3; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(@CGUID+01 , @CGUID+01 , 0, 0, 3), +(@CGUID+01 , @CGUID+00 , 0, 0, 3), +(@CGUID+01 , @CGUID+04 , 0, 0, 3), +(@CGUID+08 , @CGUID+08 , 0, 0, 3), +(@CGUID+08 , @CGUID+06 , 0, 0, 3), +(@CGUID+08 , @CGUID+07 , 0, 0, 3), +(@CGUID+02 , @CGUID+02 , 0, 0, 3), +(@CGUID+02 , @CGUID+03 , 0, 0, 3), +(@CGUID+02 , @CGUID+26 , 0, 0, 3), +(@CGUID+24 , @CGUID+24 , 0, 0, 3), +(@CGUID+24 , @CGUID+49 , 0, 0, 3), +(@CGUID+24 , @CGUID+51 , 0, 0, 3), +(@CGUID+34 , @CGUID+34 , 0, 0, 3), +(@CGUID+34 , @CGUID+17 , 0, 0, 3), +(@CGUID+34 , @CGUID+13 , 0, 0, 3), +(@CGUID+33 , @CGUID+33 , 0, 0, 3), +(@CGUID+33 , @CGUID+35 , 0, 0, 3), +(@CGUID+33 , @CGUID+32 , 0, 0, 3), +(@CGUID+78 , @CGUID+78 , 0, 0, 3), +(@CGUID+78 , @CGUID+80 , 0, 0, 3), +(@CGUID+101, @CGUID+101, 0, 0, 3), +(@CGUID+101, @CGUID+104, 0, 0, 3), +(@CGUID+117, @CGUID+117, 0, 0, 3), +(@CGUID+117, @CGUID+118, 0, 0, 3), +(@CGUID+117, @CGUID+119, 0, 0, 3), +(@CGUID+117, @CGUID+122, 0, 0, 3), +(@CGUID+108, @CGUID+108, 0, 0, 3), +(@CGUID+108, @CGUID+112, 0, 0, 3), +(@CGUID+108, @CGUID+120, 0, 0, 3), +(@CGUID+100, @CGUID+100, 0, 0, 3), +(@CGUID+100, @CGUID+102, 0, 0, 3), +(@CGUID+100, @CGUID+103, 0, 0, 3), +(@CGUID+151, @CGUID+151, 0, 0, 3), +(@CGUID+151, @CGUID+152, 0, 0, 3), +(@CGUID+151, @CGUID+154, 0, 0, 3), +(@CGUID+151, @CGUID+155, 0, 0, 3), +(@CGUID+125, @CGUID+125, 0, 0, 3), +(@CGUID+125, @CGUID+128, 0, 0, 3), +(@CGUID+125, @CGUID+129, 0, 0, 3), +(@CGUID+106, @CGUID+106, 0, 0, 3), +(@CGUID+106, @CGUID+107, 0, 0, 3), +(@CGUID+106, @CGUID+113, 0, 0, 3), +(@CGUID+106, @CGUID+115, 0, 0, 3), +(@CGUID+110, @CGUID+110, 0, 0, 3), +(@CGUID+110, @CGUID+114, 0, 0, 3), +(@CGUID+110, @CGUID+116, 0, 0, 3), +(@CGUID+110, @CGUID+121, 0, 0, 3), +(@CGUID+199, @CGUID+199, 0, 0, 3), +(@CGUID+199, @CGUID+200, 0, 0, 3), +(@CGUID+164, @CGUID+164, 0, 0, 3), +(@CGUID+164, @CGUID+165, 0, 0, 3), +(@CGUID+164, @CGUID+175, 0, 0, 3), +(@CGUID+180, @CGUID+180, 0, 0, 3), +(@CGUID+180, @CGUID+182, 0, 0, 3), +(@CGUID+180, @CGUID+183, 0, 0, 3), +(@CGUID+184, @CGUID+184, 0, 0, 3), +(@CGUID+184, @CGUID+186, 0, 0, 3), +(@CGUID+184, @CGUID+187, 0, 0, 3), +(@CGUID+192, @CGUID+192, 0, 0, 3), +(@CGUID+192, @CGUID+193, 0, 0, 3), +(@CGUID+194, @CGUID+194, 0, 0, 3), +(@CGUID+194, @CGUID+195, 0, 0, 3), +(@CGUID+194, @CGUID+197, 0, 0, 3), +(@CGUID+38 , @CGUID+05 , 0, 0, 3), +(@CGUID+47 , @CGUID+25 , 0, 0, 3); + +-- Gameobjects +-- Deletes +DELETE FROM `pool_template` WHERE `entry` IN (2035, 11710) AND `description` LIKE '%Underbog%'; +DELETE FROM `pool_pool` WHERE `pool_id`=11710 AND `description` LIKE '%Underbog%'; +DELETE FROM `pool_gameobject` WHERE `pool_entry`=11710 AND `description` LIKE '%Adamantite%'; +DELETE FROM `gameobject` WHERE `map`=546 AND `id` IN (181270, 181275, 181276, 181278, 181556, 181557, 181569, 183385); + +SET @OGUID := 104330; -- 83 +SET @POOL := 13297; +SET @POOLMOTHER := 8302; + +DELETE FROM `gameobject` WHERE `map`=546 AND `ZoneId`=3716 AND `guid` BETWEEN @OGUID+0 AND @OGUID+82; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES +-- Static Herbs +(@OGUID+0 , 181270, 546, 3716, 3716, 3, 1, 93.5056, -248.733, -4.49002, 4.03171, 0, 0, -0.902585, 0.430512, 86400, 255, 1, '', 46597), +(@OGUID+1 , 181270, 546, 3716, 3716, 3, 1, 137.237, -105.671, 25.2929, 1.65806, 0, 0, 0.737277, 0.675591, 86400, 255, 1, '', 46597), +(@OGUID+2 , 181270, 546, 3716, 3716, 3, 1, 203.842, 27.0237, 27.5625, 1.95477, 0, 0, 0.829038, 0.559193, 86400, 255, 1, '', 46597), +(@OGUID+3 , 181270, 546, 3716, 3716, 3, 1, -90.7205, -420.499, 36.0739, 0.488691, 0, 0, 0.241921, 0.970296, 86400, 255, 1, '', 46597), +(@OGUID+4 , 181270, 546, 3716, 3716, 3, 1, 182.117, -143.183, 29.97, 1.78023, 0, 0, 0.777145, 0.629321, 86400, 255, 1, '', 46597), +(@OGUID+5 , 181270, 546, 3716, 3716, 3, 1, 272.366, -119.92, 29.8515, 3.24635, 0, 0, -0.998629, 0.0523532, 86400, 255, 1, '', 46597), +(@OGUID+6 , 181270, 546, 3716, 3716, 3, 1, 61.0071, -373.113, 33.0967, 4.53786, 0, 0, -0.766044, 0.642789, 86400, 255, 1, '', 46597), +(@OGUID+7 , 181278, 546, 3716, 3716, 3, 1, -2.68117, -315.83, 30.7248, 5.02655, 0, 0, -0.587785, 0.809017, 86400, 255, 1, '', 46597), +(@OGUID+8 , 181278, 546, 3716, 3716, 3, 1, -116.675, -210.801, -3.94286, 4.20625, 0, 0, -0.861629, 0.507539, 86400, 255, 1, '', 46597), +(@OGUID+9 , 181278, 546, 3716, 3716, 3, 1, 62.9603, -139.88, -2.75016, 3.15906, 0, 0, -0.999962, 0.00873464, 86400, 255, 1, '', 46597), +(@OGUID+10, 181278, 546, 3716, 3716, 3, 1, 348.62, -457.65, 27.2505, 6.23083, 0, 0, -0.0261765, 0.999657, 86400, 255, 1, '', 46597), +(@OGUID+11, 181278, 546, 3716, 3716, 3, 1, -91.5404, -300.066, -4.53596, 2.63544, 0, 0, 0.968147, 0.250381, 86400, 255, 1, '', 46597), +(@OGUID+12, 181278, 546, 3716, 3716, 3, 1, 72.7041, -270.414, 32.2554, 5.58505, 0, 0, -0.34202, 0.939693, 86400, 255, 1, '', 46597), +(@OGUID+13, 181278, 546, 3716, 3716, 3, 1, -9.05861, -93.5046, -4.53404, 1.46608, 0, 0, 0.66913, 0.743145, 86400, 255, 1, '', 46597), +(@OGUID+14, 181278, 546, 3716, 3716, 3, 1, 15.0907, -397.518, 27.3274, 5.60251, 0, 0, -0.333807, 0.942641, 86400, 255, 1, '', 46597), +(@OGUID+15, 181278, 546, 3716, 3716, 3, 1, 346.822, -359.794, 34.2163, 0.296705, 0, 0, 0.147809, 0.989016, 86400, 255, 1, '', 46597), +(@OGUID+16, 181278, 546, 3716, 3716, 3, 1, -57.5731, -223.815, -4.5367, 5.16618, 0, 0, -0.529919, 0.848048, 86400, 255, 1, '', 46597), +(@OGUID+17, 181278, 546, 3716, 3716, 3, 1, 24.3616, -368.393, 27.2573, 1.37881, 0, 0, 0.636078, 0.771625, 86400, 255, 1, '', 46597), +(@OGUID+18, 181278, 546, 3716, 3716, 3, 1, -160.595, -274.614, -4.72734, 1.43117, 0, 0, 0.656058, 0.75471, 86400, 255, 1, '', 46597), +(@OGUID+19, 181278, 546, 3716, 3716, 3, 1, 356.161, -519.471, 31.7733, 3.56047, 0, 0, -0.978148, 0.207912, 86400, 255, 1, '', 46597), +(@OGUID+20, 181278, 546, 3716, 3716, 3, 1, 33.0805, -170.199, -3.80013, 2.87979, 0, 0, 0.991445, 0.130528, 86400, 255, 1, '', 46597), +(@OGUID+21, 181278, 546, 3716, 3716, 3, 1, 77.4358, -75.2255, -2.75669, 2.89725, 0, 0, 0.992546, 0.12187, 86400, 255, 1, '', 46597), +(@OGUID+22, 183385, 546, 3716, 3716, 3, 1, -145.452, -217.687, -3.40478, 0.558504, 0, 0, 0.275637, 0.961262, 86400, 255, 1, '', 46597), +(@OGUID+23, 183385, 546, 3716, 3716, 3, 1, 80.5045, -70.984, -2.75813, 4.76475, 0, 0, -0.688354, 0.725374, 86400, 255, 0, '', 46597), +(@OGUID+24, 183385, 546, 3716, 3716, 3, 1, 52.3858, -188.325, -4.27433, 3.80482, 0, 0, -0.945518, 0.325568, 86400, 255, 0, '', 46597), +(@OGUID+25, 183385, 546, 3716, 3716, 3, 1, -92.5955, -254.416, 23.0712, 3.64774, 0, 0, -0.968147, 0.250381, 86400, 255, 1, '', 46597), +(@OGUID+26, 183385, 546, 3716, 3716, 3, 1, 295.075, -124.002, 29.7138, 0.174532, 0, 0, 0.0871553, 0.996195, 86400, 255, 1, '', 46597), +(@OGUID+27, 183385, 546, 3716, 3716, 3, 1, 257.251, -263.907, 24.6426, 4.27606, 0, 0, -0.843391, 0.5373, 86400, 255, 1, '', 46597), +(@OGUID+28, 183385, 546, 3716, 3716, 3, 1, 22.0234, -339.981, 29.1816, 1.23918, 0, 0, 0.580703, 0.814116, 86400, 255, 1, '', 46597), +(@OGUID+29, 183385, 546, 3716, 3716, 3, 1, 246.218, -232.518, 25.9543, 1.46608, 0, 0, 0.66913, 0.743145, 86400, 255, 1, '', 46597), +(@OGUID+30, 183385, 546, 3716, 3716, 3, 1, -98.4295, -312.399, -3.89505, 5.07891, 0, 0, -0.566406, 0.824126, 86400, 255, 1, '', 46597), +(@OGUID+31, 183385, 546, 3716, 3716, 3, 1, 74.1957, -402.898, 33.6921, 1.74533, 0, 0, 0.766044, 0.642789, 86400, 255, 1, '', 46597), +(@OGUID+32, 183385, 546, 3716, 3716, 3, 1, -66.7795, -240.119, -4.53713, 3.00195, 0, 0, 0.997563, 0.0697661, 86400, 255, 1, '', 46597), +(@OGUID+33, 183385, 546, 3716, 3716, 3, 1, 144.881, -69.8086, 27.4349, 0.994837, 0, 0, 0.477159, 0.878817, 86400, 255, 1, '', 46597), +(@OGUID+34, 183385, 546, 3716, 3716, 3, 1, 97.2424, -216.338, 30.534, 1.20428, 0, 0, 0.566406, 0.824126, 86400, 255, 1, '', 46597), +(@OGUID+35, 183385, 546, 3716, 3716, 3, 1, -23.6591, -109.071, -4.53406, 4.08407, 0, 0, -0.891006, 0.453991, 86400, 255, 1, '', 46597), +(@OGUID+36, 183385, 546, 3716, 3716, 3, 1, 1.73994, -246.563, -4.53322, 5.18363, 0, 0, -0.522498, 0.85264, 86400, 255, 1, '', 46597), +(@OGUID+37, 183385, 546, 3716, 3716, 3, 1, 116.041, 4.26817, 27.5625, 1.22173, 0, 0, 0.573576, 0.819152, 86400, 255, 1, '', 46597), +(@OGUID+38, 183385, 546, 3716, 3716, 3, 1, 105.351, -295.466, 32.2288, 4.18879, 0, 0, -0.866025, 0.500001, 86400, 255, 1, '', 46597), +(@OGUID+39, 183385, 546, 3716, 3716, 3, 1, 57.5122, -228.652, -4.47403, 4.36332, 0, 0, -0.819152, 0.573577, 86400, 255, 1, '', 46597), +(@OGUID+40, 183385, 546, 3716, 3716, 3, 1, -151.674, -308.373, -4.80901, 1.65806, 0, 0, 0.737277, 0.675591, 86400, 255, 1, '', 46597), +(@OGUID+41, 183385, 546, 3716, 3716, 3, 1, 329.194, -478.867, 50.5704, 1.72787, 0, 0, 0.760406, 0.649449, 86400, 255, 1, '', 46597), +-- Ragveil (75%) +(@OGUID+42, 181275, 546, 3716, 3716, 3, 1, 146.34, -150.24, 30.7501, 3.89209, 0, 0, -0.930417, 0.366502, 86400, 255, 1, '', 46597), +(@OGUID+44, 181275, 546, 3716, 3716, 3, 1, 346.318, -336.01, 28.1087, 1.43117, 0, 0, 0.656058, 0.75471, 86400, 255, 1, '', 46597), +(@OGUID+46, 181275, 546, 3716, 3716, 3, 1, 278.916, -236.037, 29.1704, 2.70526, 0, 0, 0.976295, 0.216442, 86400, 255, 1, '', 46597), +(@OGUID+48, 181275, 546, 3716, 3716, 3, 1, 309.742, -299.783, 21.0056, 3.45576, 0, 0, -0.987688, 0.156436, 86400, 255, 1, '', 46597), +(@OGUID+50, 181275, 546, 3716, 3716, 3, 1, 376.429, -453.141, 33.1995, 4.03171, 0, 0, -0.902585, 0.430512, 86400, 255, 1, '', 46597), +(@OGUID+52, 181275, 546, 3716, 3716, 3, 1, 58.3593, -28.0166, 20.8195, 3.00195, 0, 0, 0.997563, 0.0697661, 86400, 255, 1, '', 46597), +(@OGUID+54, 181275, 546, 3716, 3716, 3, 1, 136.348, 53.4126, 27.5625, 3.50812, 0, 0, -0.983254, 0.182238, 86400, 255, 1, '', 46597), +-- Flame Cap (25%) +(@OGUID+43, 181276, 546, 3716, 3716, 3, 1, 146.34, -150.24, 30.7501, 3.89209, 0, 0, -0.930417, 0.366502, 86400, 255, 1, '', 46597), +(@OGUID+45, 181276, 546, 3716, 3716, 3, 1, 346.318, -336.01, 28.1087, 1.43117, 0, 0, 0.656058, 0.75471, 86400, 255, 1, '', 46597), +(@OGUID+47, 181276, 546, 3716, 3716, 3, 1, 278.916, -236.037, 29.1704, 2.70526, 0, 0, 0.976295, 0.216442, 86400, 255, 1, '', 46597), +(@OGUID+49, 181276, 546, 3716, 3716, 3, 1, 309.742, -299.783, 21.0056, 3.45576, 0, 0, -0.987688, 0.156436, 86400, 255, 1, '', 46597), +(@OGUID+51, 181276, 546, 3716, 3716, 3, 1, 376.429, -453.141, 33.1995, 4.03171, 0, 0, -0.902585, 0.430512, 86400, 255, 1, '', 46597), +(@OGUID+53, 181276, 546, 3716, 3716, 3, 1, 58.3593, -28.0166, 20.8195, 3.00195, 0, 0, 0.997563, 0.0697661, 86400, 255, 1, '', 46597), +(@OGUID+55, 181276, 546, 3716, 3716, 3, 1, 136.348, 53.4126, 27.5625, 3.50812, 0, 0, -0.983254, 0.182238, 86400, 255, 1, '', 46597), +-- Adamantite Deposit (45%) +(@OGUID+56, 181556, 546, 3716, 3716, 3, 1, -36.6434, -199.135, -4.53535, 3.97935, 0, 0, -0.913545, 0.406738, 86400, 255, 1, '', 46597), +(@OGUID+59, 181556, 546, 3716, 3716, 3, 1, 288.463, -222.083, 34.2095, 3.85718, 0, 0, -0.936671, 0.35021, 86400, 255, 1, '', 46597), +(@OGUID+62, 181556, 546, 3716, 3716, 3, 1, 272.727, -307.432, 22.2222, 4.08407, 0, 0, -0.891006, 0.453991, 86400, 255, 1, '', 46597), +(@OGUID+65, 181556, 546, 3716, 3716, 3, 1, -157.746, -233.748, -3.59433, 5.25344, 0, 0, -0.492423, 0.870356, 86400, 255, 1, '', 46597), +(@OGUID+68, 181556, 546, 3716, 3716, 3, 1, 15.6076, -257.257, -30.4535, 0.174532, 0, 0, 0.0871553, 0.996195, 86400, 255, 1, '', 46597), +(@OGUID+71, 181556, 546, 3716, 3716, 3, 1, -121.527, -204.633, -3.71037, 5.3058, 0, 0, -0.469471, 0.882948, 86400, 255, 1, '', 46597), +(@OGUID+74, 181556, 546, 3716, 3716, 3, 1, 69.0821, -220.409, -4.42387, 2.16421, 0, 0, 0.882947, 0.469473, 86400, 255, 1, '', 46597), +(@OGUID+77, 181556, 546, 3716, 3716, 3, 1, 269.613, -160.235, 31.2132, 6.21337, 0, 0, -0.0348988, 0.999391, 86400, 255, 1, '', 46597), +(@OGUID+80, 181556, 546, 3716, 3716, 3, 1, -72.0217, -249.287, -0.160408, 5.02655, 0, 0, -0.587785, 0.809017, 86400, 255, 1, '', 46597), +-- Rich Adamantite Deposit (40%) +(@OGUID+57, 181569, 546, 3716, 3716, 3, 1, -36.6434, -199.135, -4.53535, 3.97935, 0, 0, -0.913545, 0.406738, 86400, 255, 1, '', 46597), +(@OGUID+60, 181569, 546, 3716, 3716, 3, 1, 288.463, -222.083, 34.2095, 3.85718, 0, 0, -0.936671, 0.35021, 86400, 255, 1, '', 46597), +(@OGUID+63, 181569, 546, 3716, 3716, 3, 1, 272.727, -307.432, 22.2222, 4.08407, 0, 0, -0.891006, 0.453991, 86400, 255, 1, '', 46597), +(@OGUID+66, 181569, 546, 3716, 3716, 3, 1, -157.746, -233.748, -3.59433, 5.25344, 0, 0, -0.492423, 0.870356, 86400, 255, 1, '', 46597), +(@OGUID+69, 181569, 546, 3716, 3716, 3, 1, 15.6076, -257.257, -30.4535, 0.174532, 0, 0, 0.0871553, 0.996195, 86400, 255, 1, '', 46597), +(@OGUID+72, 181569, 546, 3716, 3716, 3, 1, -121.527, -204.633, -3.71037, 5.3058, 0, 0, -0.469471, 0.882948, 86400, 255, 1, '', 46597), +(@OGUID+75, 181569, 546, 3716, 3716, 3, 1, 69.0821, -220.409, -4.42387, 2.16421, 0, 0, 0.882947, 0.469473, 86400, 255, 1, '', 46597), +(@OGUID+78, 181569, 546, 3716, 3716, 3, 1, 269.613, -160.235, 31.2132, 6.21337, 0, 0, -0.0348988, 0.999391, 86400, 255, 1, '', 46597), +(@OGUID+81, 181569, 546, 3716, 3716, 3, 1, -72.0217, -249.287, -0.160408, 5.02655, 0, 0, -0.587785, 0.809017, 86400, 255, 1, '', 46597), +-- Khorium Vein (5%) +(@OGUID+58, 181557, 546, 3716, 3716, 3, 1, -36.6434, -199.135, -4.53535, 3.97935, 0, 0, -0.913545, 0.406738, 86400, 255, 1, '', 46597), +(@OGUID+61, 181557, 546, 3716, 3716, 3, 1, 288.463, -222.083, 34.2095, 3.85718, 0, 0, -0.936671, 0.35021, 86400, 255, 1, '', 46597), +(@OGUID+64, 181557, 546, 3716, 3716, 3, 1, 272.727, -307.432, 22.2222, 4.08407, 0, 0, -0.891006, 0.453991, 86400, 255, 1, '', 46597), +(@OGUID+67, 181557, 546, 3716, 3716, 3, 1, -157.746, -233.748, -3.59433, 5.25344, 0, 0, -0.492423, 0.870356, 86400, 255, 1, '', 46597), +(@OGUID+70, 181557, 546, 3716, 3716, 3, 1, 15.6076, -257.257, -30.4535, 0.174532, 0, 0, 0.0871553, 0.996195, 86400, 255, 1, '', 46597), +(@OGUID+73, 181557, 546, 3716, 3716, 3, 1, -121.527, -204.633, -3.71037, 5.3058, 0, 0, -0.469471, 0.882948, 86400, 255, 1, '', 46597), +(@OGUID+76, 181557, 546, 3716, 3716, 3, 1, 69.0821, -220.409, -4.42387, 2.16421, 0, 0, 0.882947, 0.469473, 86400, 255, 1, '', 46597), +(@OGUID+79, 181557, 546, 3716, 3716, 3, 1, 269.613, -160.235, 31.2132, 6.21337, 0, 0, -0.0348988, 0.999391, 86400, 255, 1, '', 46597), +(@OGUID+82, 181557, 546, 3716, 3716, 3, 1, -72.0217, -249.287, -0.160408, 5.02655, 0, 0, -0.587785, 0.809017, 86400, 255, 1, '', 46597); + +DELETE FROM `pool_template` WHERE `description` LIKE '%The Underbog%' AND `entry` BETWEEN @POOLMOTHER+0 AND @POOLMOTHER+3; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOLMOTHER+0, 1, 'The Underbog - Ores - Group 1'), +(@POOLMOTHER+1, 1, 'The Underbog - Ores - Group 2'), +(@POOLMOTHER+2, 1, 'The Underbog - Ragveil / Flame Cap - Group 1'), +(@POOLMOTHER+3, 1, 'The Underbog - Ragveil / Flame Cap - Group 2'); + +DELETE FROM `pool_pool` WHERE `description` LIKE '%The Underbog%' AND `pool_id` BETWEEN @POOL+0 AND @POOL+15 AND `mother_pool` BETWEEN @POOLMOTHER+0 AND @POOLMOTHER+3; +INSERT INTO `pool_pool` (`pool_id`, `mother_pool`, `chance`, `description`) VALUES +(@POOL+3, @POOLMOTHER+0, 0, 'The Underbog - Ores - Group 1'), +(@POOL+4, @POOLMOTHER+0, 0, 'The Underbog - Ores - Group 1'), +(@POOL+5, @POOLMOTHER+0, 0, 'The Underbog - Ores - Group 1'), +(@POOL+6, @POOLMOTHER+0, 0, 'The Underbog - Ores - Group 1'), +(@POOL+0, @POOLMOTHER+0, 0, 'The Underbog - Ores - Group 1'), +(@POOL+8, @POOLMOTHER+0, 0, 'The Underbog - Ores - Group 1'), +(@POOL+1, @POOLMOTHER+1, 0, 'The Underbog - Ores - Group 2'), +(@POOL+2, @POOLMOTHER+1, 0, 'The Underbog - Ores - Group 2'), +(@POOL+7, @POOLMOTHER+1, 0, 'The Underbog - Ores - Group 2'), +(@POOL+10, @POOLMOTHER+2, 0, 'The Underbog - Ragveil / Flame Cap - Group 1'), +(@POOL+11, @POOLMOTHER+2, 0, 'The Underbog - Ragveil / Flame Cap - Group 1'), +(@POOL+12, @POOLMOTHER+2, 0, 'The Underbog - Ragveil / Flame Cap - Group 1'), +(@POOL+13, @POOLMOTHER+2, 0, 'The Underbog - Ragveil / Flame Cap - Group 1'), +(@POOL+9, @POOLMOTHER+3, 0, 'The Underbog - Ragveil / Flame Cap - Group 2'), +(@POOL+14, @POOLMOTHER+3, 0, 'The Underbog - Ragveil / Flame Cap - Group 2'), +(@POOL+15, @POOLMOTHER+3, 0, 'The Underbog - Ragveil / Flame Cap - Group 2'); + +DELETE FROM `pool_template` WHERE `description` LIKE '%Underbog%' AND `entry` BETWEEN @POOL+0 AND @POOL+15; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOL+0 , 1, 'The Underbog - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+1 , 1, 'The Underbog - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+2 , 1, 'The Underbog - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+3 , 1, 'The Underbog - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+4 , 1, 'The Underbog - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+5 , 1, 'The Underbog - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+6 , 1, 'The Underbog - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+7 , 1, 'The Underbog - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+8 , 1, 'The Underbog - Adamantite Deposit / Rich Adamantite Deposit / Khorium Vein'), +(@POOL+9 , 1, 'The Underbog - Ragveil / Flame Cap'), +(@POOL+10, 1, 'The Underbog - Ragveil / Flame Cap'), +(@POOL+11, 1, 'The Underbog - Ragveil / Flame Cap'), +(@POOL+12, 1, 'The Underbog - Ragveil / Flame Cap'), +(@POOL+13, 1, 'The Underbog - Ragveil / Flame Cap'), +(@POOL+14, 1, 'The Underbog - Ragveil / Flame Cap'), +(@POOL+15, 1, 'The Underbog - Ragveil / Flame Cap'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE '%Underbog%' AND `guid` BETWEEN @OGUID+56 AND @OGUID+82 AND `pool_entry` BETWEEN @POOL+0 AND @POOL+8; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@OGUID+56, @POOL+0, 0, 'Adamantite Deposit - The Underbog'), +(@OGUID+59, @POOL+1, 0, 'Adamantite Deposit - The Underbog'), +(@OGUID+62, @POOL+2, 0, 'Adamantite Deposit - The Underbog'), +(@OGUID+65, @POOL+3, 0, 'Adamantite Deposit - The Underbog'), +(@OGUID+68, @POOL+4, 0, 'Adamantite Deposit - The Underbog'), +(@OGUID+71, @POOL+5, 0, 'Adamantite Deposit - The Underbog'), +(@OGUID+74, @POOL+6, 0, 'Adamantite Deposit - The Underbog'), +(@OGUID+77, @POOL+7, 0, 'Adamantite Deposit - The Underbog'), +(@OGUID+80, @POOL+8, 0, 'Adamantite Deposit - The Underbog'), +(@OGUID+57, @POOL+0, 40, 'Rich Adamantite Deposit - The Underbog'), +(@OGUID+60, @POOL+1, 40, 'Rich Adamantite Deposit - The Underbog'), +(@OGUID+63, @POOL+2, 40, 'Rich Adamantite Deposit - The Underbog'), +(@OGUID+66, @POOL+3, 40, 'Rich Adamantite Deposit - The Underbog'), +(@OGUID+69, @POOL+4, 40, 'Rich Adamantite Deposit - The Underbog'), +(@OGUID+72, @POOL+5, 40, 'Rich Adamantite Deposit - The Underbog'), +(@OGUID+75, @POOL+6, 40, 'Rich Adamantite Deposit - The Underbog'), +(@OGUID+78, @POOL+7, 40, 'Rich Adamantite Deposit - The Underbog'), +(@OGUID+81, @POOL+8, 40, 'Rich Adamantite Deposit - The Underbog'), +(@OGUID+58, @POOL+0, 5, 'Khorium Vein - The Underbog'), +(@OGUID+61, @POOL+1, 5, 'Khorium Vein - The Underbog'), +(@OGUID+64, @POOL+2, 5, 'Khorium Vein - The Underbog'), +(@OGUID+67, @POOL+3, 5, 'Khorium Vein - The Underbog'), +(@OGUID+70, @POOL+4, 5, 'Khorium Vein - The Underbog'), +(@OGUID+73, @POOL+5, 5, 'Khorium Vein - The Underbog'), +(@OGUID+76, @POOL+6, 5, 'Khorium Vein - The Underbog'), +(@OGUID+79, @POOL+7, 5, 'Khorium Vein - The Underbog'), +(@OGUID+82, @POOL+8, 5, 'Khorium Vein - The Underbog'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE '%Underbog%' AND `guid` BETWEEN @OGUID+42 AND @OGUID+55 AND `pool_entry` BETWEEN @POOL+9 AND @POOL+15; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@OGUID+42, @POOL+9 , 0, 'Ragveil - The Underbog'), +(@OGUID+44, @POOL+10, 0, 'Ragveil - The Underbog'), +(@OGUID+46, @POOL+11, 0, 'Ragveil - The Underbog'), +(@OGUID+48, @POOL+12, 0, 'Ragveil - The Underbog'), +(@OGUID+50, @POOL+13, 0, 'Ragveil - The Underbog'), +(@OGUID+52, @POOL+14, 0, 'Ragveil - The Underbog'), +(@OGUID+54, @POOL+15, 0, 'Ragveil - The Underbog'), +(@OGUID+43, @POOL+9 , 25, 'Flame Cap - The Underbog'), +(@OGUID+45, @POOL+10, 25, 'Flame Cap - The Underbog'), +(@OGUID+47, @POOL+11, 25, 'Flame Cap - The Underbog'), +(@OGUID+49, @POOL+12, 25, 'Flame Cap - The Underbog'), +(@OGUID+51, @POOL+13, 25, 'Flame Cap - The Underbog'), +(@OGUID+53, @POOL+14, 25, 'Flame Cap - The Underbog'), +(@OGUID+55, @POOL+15, 25, 'Flame Cap - The Underbog'); + +DELETE FROM `pool_template` WHERE `description` LIKE '%Underbog%' AND `entry` BETWEEN @POOLMOTHER+5 AND @POOLMOTHER+11; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOLMOTHER+5 , 12, 'The Underbog - Sanguine Hibiscus - Master Group'), +(@POOLMOTHER+6 , 1, 'The Underbog - Felweed - Group 1'), +(@POOLMOTHER+7 , 1, 'The Underbog - Felweed - Group 2'), +(@POOLMOTHER+8 , 1, 'The Underbog - Ancient Lichen - Group 1'), +(@POOLMOTHER+9 , 1, 'The Underbog - Ancient Lichen - Group 2'), +(@POOLMOTHER+10, 1, 'The Underbog - Ancient Lichen - Group 3'), +(@POOLMOTHER+11, 1, 'The Underbog - Ancient Lichen - Group 4'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE '%Underbog%' AND `guid` BETWEEN @OGUID+0 AND @OGUID+41 AND `pool_entry` BETWEEN @POOLMOTHER+5 AND @POOLMOTHER+11; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@OGUID+22, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+23, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+24, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+25, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+26, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+27, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+28, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+29, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+30, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+31, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+32, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+33, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+34, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+35, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+36, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+37, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+38, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+39, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+40, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+41, @POOLMOTHER+5, 0, 'Sanguine Hibiscus - The Underbog'), +(@OGUID+0, @POOLMOTHER+6, 0, 'Felweed - The Underbog'), +(@OGUID+3, @POOLMOTHER+6, 0, 'Felweed - The Underbog'), +(@OGUID+6, @POOLMOTHER+6, 0, 'Felweed - The Underbog'), +(@OGUID+5, @POOLMOTHER+7, 0, 'Felweed - The Underbog'), +(@OGUID+4, @POOLMOTHER+7, 0, 'Felweed - The Underbog'), +(@OGUID+1, @POOLMOTHER+7, 0, 'Felweed - The Underbog'), +(@OGUID+2, @POOLMOTHER+7, 0, 'Felweed - The Underbog'), +(@OGUID+21, @POOLMOTHER+8, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+9 , @POOLMOTHER+8, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+20, @POOLMOTHER+8, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+13, @POOLMOTHER+8, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+16, @POOLMOTHER+9, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+8 , @POOLMOTHER+9, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+18, @POOLMOTHER+9, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+11, @POOLMOTHER+9, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+14, @POOLMOTHER+10, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+17, @POOLMOTHER+10, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+7 , @POOLMOTHER+10, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+12, @POOLMOTHER+10, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+19, @POOLMOTHER+11, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+10, @POOLMOTHER+11, 0, 'Ancient Lichen - The Underbog'), +(@OGUID+15, @POOLMOTHER+11, 0, 'Ancient Lichen - The Underbog'); diff --git a/data/sql/updates/db_world/2022_11_21_19.sql b/data/sql/updates/db_world/2022_11_21_19.sql new file mode 100644 index 000000000..b9628b2b5 --- /dev/null +++ b/data/sql/updates/db_world/2022_11_21_19.sql @@ -0,0 +1,35 @@ +-- DB update 2022_11_21_18 -> 2022_11_21_19 +-- +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` + | 1 -- MECHANIC_CHARM + | 2 -- MECHANIC_DISORIENTED + | 4 -- MECHANIC_DISARM + | 8 -- MECHANIC_DISTRACT + | 16 -- MECHANIC_FEAR + | 32 -- MECHANIC_GRIP + | 64 -- MECHANIC_ROOT + -- | 128 -- MECHANIC_PACIFY + | 256 -- MECHANIC_SILENCE + | 512 -- MECHANIC_SLEEP + | 1024 -- MECHANIC_SNARE + | 2048 -- MECHANIC_STUN + | 4096 -- MECHANIC_FREEZE + | 8192 -- MECHANIC_KNOCKOUT + -- | 16384 -- MECHANIC_BLEED + | 32768 -- MECHANIC_BANDAGE + | 65536 -- MECHANIC_POLYMORPH + | 131072 -- MECHANIC_BANISH + -- | 262144 -- MECHANIC_SHIELD + | 524288 -- MECHANIC_SHACKLE + | 1048576 -- MECHANIC_MOUNT + -- | 2097152 -- MECHANIC_INFECTED + | 4194304 -- MECHANIC_TURN + | 8388608 -- MECHANIC_HORROR + -- | 16777216 -- MECHANIC_INVULNERABILITY + | 33554432 -- MECHANIC_INTERRUPT + | 67108864 -- MECHANIC_DAZE + -- | 134217728 -- MECHANIC_DISCOVERY + -- | 268435456 -- MECHANIC_IMMUNE_SHIELD + | 536870912 -- MECHANIC_SAPPED + -- | 1073741824 -- MECHANIC_ENRAGED +WHERE `entry` IN (18503,20309); diff --git a/data/sql/updates/db_world/2022_11_27_00.sql b/data/sql/updates/db_world/2022_11_27_00.sql new file mode 100644 index 000000000..9d7579f2f --- /dev/null +++ b/data/sql/updates/db_world/2022_11_27_00.sql @@ -0,0 +1,16 @@ +-- DB update 2022_11_21_19 -> 2022_11_27_00 +-- +DELETE FROM `npc_trainer` WHERE `ID`=33621 AND `SpellID`=-202009; +DELETE FROM `npc_trainer` WHERE `ID`=33623 AND `SpellID`=-202003; +DELETE FROM `npc_trainer` WHERE `ID`=33619 AND `SpellID`=-202006; +DELETE FROM `npc_trainer` WHERE `ID`=33618 AND `SpellID`=-201038; +DELETE FROM `npc_trainer` WHERE `ID`=33617 AND `SpellID`=-201035; +DELETE FROM `npc_trainer` WHERE `ID`=33616 AND `SpellID`=-201020; +DELETE FROM `npc_trainer` WHERE `ID`=33613 AND `SpellID`=-201041; +DELETE FROM `npc_trainer` WHERE `ID`=33612 AND `SpellID`=-201029; +DELETE FROM `npc_trainer` WHERE `ID`=33614 AND `SpellID`=-201026; +DELETE FROM `npc_trainer` WHERE `ID`=33615 AND `SpellID`=-201023; +DELETE FROM `npc_trainer` WHERE `ID`=33611 AND `SpellID`=-201014; +DELETE FROM `npc_trainer` WHERE `ID`=33610 AND `SpellID`=-201011; +DELETE FROM `npc_trainer` WHERE `ID`=33609 AND `SpellID`=-201006; +DELETE FROM `npc_trainer` WHERE `ID`=33608 AND `SpellID`=-201003; diff --git a/data/sql/updates/db_world/2022_12_02_00.sql b/data/sql/updates/db_world/2022_12_02_00.sql new file mode 100644 index 000000000..90982bac0 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_02_00.sql @@ -0,0 +1,12 @@ +-- DB update 2022_11_27_00 -> 2022_12_02_00 +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18130) AND (`source_type` = 0) AND (`id` IN (0, 1, 2, 3)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18130, 0, 0, 0, 0, 0, 75, 0, 3000, 3000, 9000, 9000, 0, 11, 3604, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshfang Ripper - In Combat - Cast \'Tendon Rip\''), +(18130, 0, 1, 0, 0, 0, 75, 0, 1000, 1000, 10000, 15000, 0, 11, 17008, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshfang Ripper - In Combat - Cast \'Drain Mana\''), +(18130, 0, 2, 0, 0, 0, 100, 0, 3000, 3000, 3000, 6000, 0, 11, 33860, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshfang Ripper - In Combat - Cast \'Arcane Explosion\''), +(18130, 0, 3, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshfang Ripper - On Reset - Set Mana To 0'); + +UPDATE `creature_template` SET `unit_flags2` = `unit_flags` &~ 2048 WHERE `entry` = 18130; + +UPDATE `creature` SET `curmana` = 0 WHERE `id1` = 18130; diff --git a/data/sql/updates/db_world/2022_12_02_01.sql b/data/sql/updates/db_world/2022_12_02_01.sql new file mode 100644 index 000000000..a22d23d0b --- /dev/null +++ b/data/sql/updates/db_world/2022_12_02_01.sql @@ -0,0 +1,17 @@ +-- DB update 2022_12_02_00 -> 2022_12_02_01 +-- +UPDATE `creature` SET `curmana` = 0 WHERE `id1` = 20196; +UPDATE `creature_template` SET `unit_flags2` = `unit_flags2`&~2048 WHERE (`entry` = 20196); +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 20196) AND (`source_type` = 0) AND (`id` IN (0, 1, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(20196, 0, 0, 0, 0, 0, 100, 0, 6000, 18000, 8000, 14000, 0, 11, 17008, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodthirsty Marshfang - In Combat - Cast \'Drain Mana\''), +(20196, 0, 1, 0, 0, 0, 100, 0, 10000, 12000, 10000, 12000, 0, 11, 35335, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodthirsty Marshfang - In Combat - Cast \'Nether Leech\''), +(20196, 0, 2, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodthirsty Marshfang - On Reset - Set Mana To 0'); + +UPDATE `creature` SET `curmana` = 0 WHERE `id1` = 18285; +UPDATE `creature_template` SET `unit_flags2` = `unit_flags2`&~2048 WHERE (`entry` = 18285); +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18285) AND (`source_type` = 0) AND (`id` IN (1, 2, 3)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18285, 0, 1, 0, 0, 0, 100, 0, 6000, 18000, 8000, 14000, 0, 11, 17008, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, '\'Count\' Ungula - In Combat - Cast \'Drain Mana\''), +(18285, 0, 2, 0, 0, 0, 100, 0, 10000, 12000, 10000, 12000, 0, 11, 35335, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, '\'Count\' Ungula - In Combat - Cast \'Nether Leech\''), +(18285, 0, 3, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '\'Count\' Ungula - On Reset - Set Mana To 0'); diff --git a/data/sql/updates/db_world/2022_12_02_02.sql b/data/sql/updates/db_world/2022_12_02_02.sql new file mode 100644 index 000000000..909291f2d --- /dev/null +++ b/data/sql/updates/db_world/2022_12_02_02.sql @@ -0,0 +1,709 @@ +-- DB update 2022_12_02_01 -> 2022_12_02_02 +-- Delete Old Objects +DELETE FROM `gameobject` WHERE `id`=185182 AND `map`=530 AND `guid` IN (26042,26043,26044,26045,26046,26047,26048,26049,26050,26051,26052,26053,26054,26055,26056,26057,26058,26059,26060,26061,26062,26063,26064,26065,26066,26067,26068,26069,26070,26071,26072,26073,26074); +DELETE FROM `gameobject` WHERE `id`=185877 AND `map`=530 AND `guid` IN (6909,12055,12061,12143,15031,15044,15047,15129,30681,30682,30686,30756,30771,30774,30776,42145,42146,42147,42148,42149,42150,42151,42152,42153); +DELETE FROM `gameobject` WHERE `id`=185881 AND `map`=530 AND `guid` IN (22240,22241,28438,28440,28443,28797,28931,29272,29574,29576,29577,29579,30918,30925,30933,30966,31028,42167,42168,42169,42170,42171,42172,42173,42174,42175,42176,85998,85999,86000,86001,86002,86003,86004,86005,86006,86007,86008,86009,86010,86011,86012,86013); +DELETE FROM `gameobject` WHERE `id`=185915 AND `map`=530 AND `guid` IN (50417,50418,50419,50420,50421,50422,50423,50424,50425,151889,151890,151891); + +SET @GUID := 104514; +SET @POOL := 8326; + +-- Nethervine Crystal +DELETE FROM `gameobject` WHERE `id` IN (185182, 185877, 185881, 185915) AND `ZoneId`=3520 AND `guid` BETWEEN @GUID+0 AND @GUID+338; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `ZoneId`, `spawnMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@GUID+0 , 185182, 530, 3520, 1, -5342.92, 169.069, 43.1128, 3.28124, 0, 0, -0.997563, 0.0697661, 180, 100, 1), +(@GUID+1 , 185182, 530, 3520, 1, -5313, 373.502, 47.7426, 1.67551, 0, 0, 0.743144, 0.669132, 180, 100, 1), +(@GUID+2 , 185182, 530, 3520, 1, -5292.84, 656.116, 24.6915, 0.523598, 0, 0, 0.258819, 0.965926, 180, 100, 1), +(@GUID+3 , 185182, 530, 3520, 1, -5283.54, 533.277, 39.0844, 6.10865, 0, 0, -0.0871553, 0.996195, 180, 100, 1), +(@GUID+4 , 185182, 530, 3520, 1, -5283.15, 228.309, 68.3574, 4.45059, 0, 0, -0.793353, 0.608762, 180, 100, 1), +(@GUID+5 , 185182, 530, 3520, 1, -5270.88, 771.748, 19.9527, 3.49067, 0, 0, -0.984807, 0.173652, 180, 100, 1), +(@GUID+6 , 185182, 530, 3520, 1, -5266.64, 148.314, 61.1633, 3.80482, 0, 0, -0.945518, 0.325568, 180, 100, 1), +(@GUID+7 , 185182, 530, 3520, 1, -5245.94, 298.236, 75.203, 3.45576, 0, 0, -0.987688, 0.156436, 180, 100, 1), +(@GUID+8 , 185182, 530, 3520, 1, -5244.6, 40.679, 47.3747, 2.37364, 0, 0, 0.927183, 0.374608, 180, 100, 1), +(@GUID+9 , 185182, 530, 3520, 1, -5242.47, 504.199, 57.0959, 2.60053, 0, 0, 0.96363, 0.267241, 180, 100, 1), +(@GUID+10 , 185182, 530, 3520, 1, -5241.66, 360.785, 71.6209, 1.32645, 0, 0, 0.615661, 0.788011, 180, 100, 1), +(@GUID+11 , 185182, 530, 3520, 1, -5228.35, 695.768, 52.3389, 5.02655, 0, 0, -0.587785, 0.809017, 180, 100, 1), +(@GUID+12 , 185182, 530, 3520, 1, -5222.48, 239.67, 72.4286, 0.575957, 0, 0, 0.284015, 0.95882, 180, 100, 1), +(@GUID+13 , 185182, 530, 3520, 1, -5219.48, 376.066, 73.5834, 1.25664, 0, 0, 0.587785, 0.809017, 180, 100, 1), +(@GUID+14 , 185182, 530, 3520, 1, -5198.54, 610.487, 61.3297, 1.8675, 0, 0, 0.803857, 0.594823, 180, 100, 1), +(@GUID+15 , 185182, 530, 3520, 1, -5188.88, 198.704, 77.5582, 3.42085, 0, 0, -0.990268, 0.139175, 180, 100, 1), +(@GUID+16 , 185182, 530, 3520, 1, -5178.76, 612.034, 70.3573, 0.226893, 0, 0, 0.113203, 0.993572, 180, 100, 1), +(@GUID+17 , 185182, 530, 3520, 1, -5169.02, 8.73069, 76.392, 2.47837, 0, 0, 0.945518, 0.325568, 180, 100, 1), +(@GUID+18 , 185182, 530, 3520, 1, -5161.82, -43.6775, 74.5861, 4.17134, 0, 0, -0.870356, 0.492424, 180, 100, 1), +(@GUID+19 , 185182, 530, 3520, 1, -5151.58, 65.0312, 78.1248, 4.46804, 0, 0, -0.788011, 0.615662, 180, 100, 1), +(@GUID+20 , 185182, 530, 3520, 1, -5139.69, -89.1358, 72.9877, 4.29351, 0, 0, -0.83867, 0.54464, 180, 100, 1), +(@GUID+21 , 185182, 530, 3520, 1, -5138.09, 26.3977, 78.173, 1.65806, 0, 0, 0.737277, 0.675591, 180, 100, 1), +(@GUID+22 , 185182, 530, 3520, 1, -5134.34, 457.041, 77.3143, 2.25147, 0, 0, 0.902585, 0.430512, 180, 100, 1), +(@GUID+23 , 185182, 530, 3520, 1, -5133.72, 779.347, 45.3405, 0.122173, 0, 0, 0.0610485, 0.998135, 180, 100, 1), +(@GUID+24 , 185182, 530, 3520, 1, -5123.21, -98.8994, 69.9624, 4.11898, 0, 0, -0.882947, 0.469473, 180, 100, 1), +(@GUID+25 , 185182, 530, 3520, 1, -5122.55, 656.237, 85.5111, 3.10665, 0, 0, 0.999847, 0.0174693, 180, 100, 1), +(@GUID+26 , 185182, 530, 3520, 1, -5122.5, 732.505, 74.2657, 3.94445, 0, 0, -0.920505, 0.390732, 180, 100, 1), +(@GUID+27 , 185182, 530, 3520, 1, -5114.04, 29.7987, 80.9924, 2.18166, 0, 0, 0.887011, 0.461749, 180, 100, 1), +(@GUID+28 , 185182, 530, 3520, 1, -5113.94, 64.6492, 81.7453, 4.13643, 0, 0, -0.878817, 0.47716, 180, 100, 1), +(@GUID+29 , 185182, 530, 3520, 1, -5110.73, 662.613, 85.9726, 1.20428, 0, 0, 0.566406, 0.824126, 180, 100, 1), +(@GUID+30 , 185182, 530, 3520, 1, -5101.7, 703.391, 85.5647, 4.85202, 0, 0, -0.656058, 0.75471, 180, 100, 1), +(@GUID+31 , 185182, 530, 3520, 1, -5091.96, 474.039, 84.1983, 1.65806, 0, 0, 0.737277, 0.675591, 180, 100, 1), +(@GUID+32 , 185182, 530, 3520, 1, -5089.65, 27.055, 79.6998, 1.25664, 0, 0, 0.587785, 0.809017, 180, 100, 1), +(@GUID+33 , 185182, 530, 3520, 1, -5070.44, 611.331, 88.6193, 2.28638, 0, 0, 0.909961, 0.414694, 180, 100, 1), +(@GUID+34 , 185182, 530, 3520, 1, -5068.79, -98.7845, 65.4091, 5.61996, 0, 0, -0.325567, 0.945519, 180, 100, 1), +(@GUID+35 , 185182, 530, 3520, 1, -5066.3, 685.682, 85.7909, 5.5676, 0, 0, -0.350207, 0.936672, 180, 100, 1), +(@GUID+36 , 185182, 530, 3520, 1, -5060.84, 460.418, 89.8367, 0.139625, 0, 0, 0.0697555, 0.997564, 180, 100, 1), +(@GUID+37 , 185182, 530, 3520, 1, -5060.12, 163.691, 130.327, 2.77507, 0, 0, 0.983254, 0.182238, 180, 100, 1), +(@GUID+38 , 185182, 530, 3520, 1, -5056.39, 627.865, 86.6371, 2.9845, 0, 0, 0.996917, 0.0784664, 180, 100, 1), +(@GUID+39 , 185182, 530, 3520, 1, -5041.9, 1.74935, 77.4621, 1.16937, 0, 0, 0.551936, 0.833886, 180, 100, 1), +(@GUID+40 , 185182, 530, 3520, 1, -5041.31, -66.7083, 71.8689, 5.49779, 0, 0, -0.382683, 0.92388, 180, 100, 1), +(@GUID+41 , 185182, 530, 3520, 1, -5038.9, 691.959, 82.4971, 4.43314, 0, 0, -0.798635, 0.601815, 180, 100, 1), +(@GUID+42 , 185182, 530, 3520, 1, -5037.21, 450.39, 85.3445, 1.43117, 0, 0, 0.656058, 0.75471, 180, 100, 1), +(@GUID+43 , 185182, 530, 3520, 1, -5013.88, 191.526, 82.1215, 0.59341, 0, 0, 0.292371, 0.956305, 180, 100, 1), +(@GUID+44 , 185182, 530, 3520, 1, -5010.42, 138.154, 77.4246, 5.75959, 0, 0, -0.258819, 0.965926, 180, 100, 1), +(@GUID+45 , 185182, 530, 3520, 1, -5007.1, 641.649, 86.0199, 0.733038, 0, 0, 0.358368, 0.933581, 180, 100, 1), +(@GUID+46 , 185182, 530, 3520, 1, -5004.85, 145.96, 78.3033, 1.16937, 0, 0, 0.551936, 0.833886, 180, 100, 1), +(@GUID+47 , 185182, 530, 3520, 1, -5001.34, 714.768, 81.3423, 6.24828, 0, 0, -0.0174522, 0.999848, 180, 100, 1), +(@GUID+48 , 185182, 530, 3520, 1, -5000.97, 226.542, 81.6826, 5.16618, 0, 0, -0.529919, 0.848048, 180, 100, 1), +(@GUID+49 , 185182, 530, 3520, 1, -4998.8, 304.154, 83.2504, 5.91667, 0, 0, -0.182235, 0.983255, 180, 100, 1), +(@GUID+50 , 185182, 530, 3520, 1, -4996.51, 241.706, 80.68, 5.41052, 0, 0, -0.422618, 0.906308, 180, 100, 1), +(@GUID+51 , 185182, 530, 3520, 1, -4990.46, 156.293, 80.3757, 2.79252, 0, 0, 0.984807, 0.173652, 180, 100, 1), +(@GUID+52 , 185182, 530, 3520, 1, -4989.7, 182.582, 83.3952, 4.04917, 0, 0, -0.898793, 0.438373, 180, 100, 1), +(@GUID+53 , 185182, 530, 3520, 1, -4982.72, 510.782, 83.672, 2.3911, 0, 0, 0.930417, 0.366502, 180, 100, 1), +(@GUID+54 , 185182, 530, 3520, 1, -4981.26, 72.1771, 69.0765, 4.27606, 0, 0, -0.843391, 0.5373, 180, 100, 1), +(@GUID+55 , 185182, 530, 3520, 1, -4979.36, -51.3351, 63.7263, 1.41372, 0, 0, 0.649447, 0.760406, 180, 100, 1), +(@GUID+56 , 185182, 530, 3520, 1, -4978.35, 616.3, 80.012, 1.8675, 0, 0, 0.803857, 0.594823, 180, 100, 1), +(@GUID+57 , 185182, 530, 3520, 1, -4977.98, 386.329, 86.3922, 5.53269, 0, 0, -0.366501, 0.930418, 180, 100, 1), +(@GUID+58 , 185182, 530, 3520, 1, -4977.46, 574.995, 79.1318, 0.209439, 0, 0, 0.104528, 0.994522, 180, 100, 1), +(@GUID+59 , 185182, 530, 3520, 1, -4977.1, 267.507, 80.3174, 2.19912, 0, 0, 0.891007, 0.453991, 180, 100, 1), +(@GUID+60 , 185182, 530, 3520, 1, -4976.12, 718.434, 81.9034, 4.66003, 0, 0, -0.725374, 0.688355, 180, 100, 1), +(@GUID+61 , 185182, 530, 3520, 1, -4972.7, -94.6309, 47.027, 5.06146, 0, 0, -0.573576, 0.819152, 180, 100, 1), +(@GUID+62 , 185182, 530, 3520, 1, -4972.11, 459.768, 84.847, 2.87979, 0, 0, 0.991445, 0.130528, 180, 100, 1), +(@GUID+63 , 185182, 530, 3520, 1, -4971.88, 221.57, 79.6872, 2.02458, 0, 0, 0.848047, 0.529921, 180, 100, 1), +(@GUID+64 , 185182, 530, 3520, 1, -4969.9, 116.569, 74.9234, 4.38078, 0, 0, -0.814116, 0.580703, 180, 100, 1), +(@GUID+65 , 185182, 530, 3520, 1, -4968.02, 321.025, 82.9921, 4.20625, 0, 0, -0.861628, 0.507539, 180, 100, 1), +(@GUID+66 , 185182, 530, 3520, 1, -4955.97, -31.1719, 62.9998, 2.47837, 0, 0, 0.945518, 0.325568, 180, 100, 1), +(@GUID+67 , 185182, 530, 3520, 1, -4954.96, 787.358, 64.1565, 0.663223, 0, 0, 0.325567, 0.945519, 180, 100, 1), +(@GUID+68 , 185182, 530, 3520, 1, -4949.99, -9.44694, 63.2846, 2.32129, 0, 0, 0.91706, 0.39875, 180, 100, 1), +(@GUID+69 , 185182, 530, 3520, 1, -4942.31, 406.736, 83.5411, 3.22886, 0, 0, -0.999048, 0.0436193, 180, 100, 1), +(@GUID+70 , 185182, 530, 3520, 1, -4940.77, 134.889, 59.8222, 4.93928, 0, 0, -0.622514, 0.782609, 180, 100, 1), +(@GUID+71 , 185182, 530, 3520, 1, -4940.48, 521.792, 75.2373, 1.83259, 0, 0, 0.793353, 0.608762, 180, 100, 1), +(@GUID+72 , 185182, 530, 3520, 1, -4933.12, -19.2702, 58.1625, 0.837758, 0, 0, 0.406736, 0.913545, 180, 100, 1), +(@GUID+73 , 185182, 530, 3520, 1, -4929.96, 205.171, 66.6562, 1.23918, 0, 0, 0.580703, 0.814116, 180, 100, 1), +(@GUID+74 , 185182, 530, 3520, 1, -4928.61, 367.286, 84.5948, 2.49582, 0, 0, 0.948323, 0.317306, 180, 100, 1), +(@GUID+75 , 185182, 530, 3520, 1, -4928.29, 254.934, 69.8808, 4.97419, 0, 0, -0.608761, 0.793354, 180, 100, 1), +(@GUID+76 , 185182, 530, 3520, 1, -4921.4, 367.252, 82.4107, 1.5708, 0, 0, 0.707107, 0.707107, 180, 100, 1), +(@GUID+77 , 185182, 530, 3520, 1, -4917.97, 409.195, 81.2423, 5.20108, 0, 0, -0.515037, 0.857168, 180, 100, 1), +(@GUID+78 , 185182, 530, 3520, 1, -4916.48, 687.448, 65.7138, 3.80482, 0, 0, -0.945518, 0.325568, 180, 100, 1), +(@GUID+79 , 185182, 530, 3520, 1, -4910.75, 362.107, 76.855, 0.436332, 0, 0, 0.216439, 0.976296, 180, 100, 1), +(@GUID+80 , 185182, 530, 3520, 1, -4910.63, 412.561, 81.1354, 3.97936, 0, 0, -0.913545, 0.406738, 180, 100, 1), +(@GUID+81 , 185182, 530, 3520, 1, -4907.44, -0.424262, 48.8307, 2.42601, 0, 0, 0.936672, 0.350207, 180, 100, 1), +(@GUID+82 , 185182, 530, 3520, 1, -4906.21, 699.878, 71.2891, 0.296705, 0, 0, 0.147809, 0.989016, 180, 100, 1), +(@GUID+83 , 185182, 530, 3520, 1, -4900.73, 724.94, 55.0799, 0.296705, 0, 0, 0.147809, 0.989016, 180, 100, 1), +(@GUID+84 , 185182, 530, 3520, 1, -4899.31, 4.9757, 45.9597, 2.28638, 0, 0, 0.909961, 0.414694, 180, 100, 1), +(@GUID+85 , 185182, 530, 3520, 1, -4895, 316.082, 98.4958, 4.79966, 0, 0, -0.67559, 0.737278, 180, 100, 1), +(@GUID+86 , 185182, 530, 3520, 1, -4894.87, 533.022, 48.0447, 3.42085, 0, 0, -0.990268, 0.139175, 180, 100, 1), +(@GUID+87 , 185182, 530, 3520, 1, -4891.07, 497.536, 65.9883, 0.645772, 0, 0, 0.317305, 0.948324, 180, 100, 1), +(@GUID+88 , 185182, 530, 3520, 1, -4889.03, 177.012, 38.8396, 4.88692, 0, 0, -0.642787, 0.766045, 180, 100, 1), +(@GUID+89 , 185182, 530, 3520, 1, -4888.37, 545.198, 44.4644, 1.55334, 0, 0, 0.700909, 0.713251, 180, 100, 1), +(@GUID+90 , 185182, 530, 3520, 1, -4885.76, 286.733, 63.6023, 3.99681, 0, 0, -0.909961, 0.414694, 180, 100, 1), +(@GUID+91 , 185182, 530, 3520, 1, -4884.85, 332.225, 108.887, 2.56563, 0, 0, 0.958819, 0.284016, 180, 100, 1), +(@GUID+92 , 185182, 530, 3520, 1, -4884.29, 182.973, 38.7629, 0.488691, 0, 0, 0.241921, 0.970296, 180, 100, 1), +(@GUID+93 , 185182, 530, 3520, 1, -4880.77, 461.426, 69.6938, 1.01229, 0, 0, 0.484809, 0.87462, 180, 100, 1), +(@GUID+94 , 185182, 530, 3520, 1, -4874.58, 291.252, 59.9165, 5.68977, 0, 0, -0.292372, 0.956305, 180, 100, 1), +(@GUID+95 , 185182, 530, 3520, 1, -4871.83, 445.466, 61.6636, 5.53269, 0, 0, -0.366501, 0.930418, 180, 100, 1), +(@GUID+96 , 185182, 530, 3520, 1, -4862.55, 352.866, 84.0767, 5.20108, 0, 0, -0.515037, 0.857168, 180, 100, 1), +(@GUID+97 , 185182, 530, 3520, 1, -4859.78, 211.651, 38.2026, 3.47321, 0, 0, -0.986285, 0.16505, 180, 100, 1), +(@GUID+98 , 185182, 530, 3520, 1, -4855.21, 220.886, 35.6181, 1.74533, 0, 0, 0.766044, 0.642789, 180, 100, 1), +(@GUID+99 , 185182, 530, 3520, 1, -4841.47, 452.311, 55.467, 1.74533, 0, 0, 0.766044, 0.642789, 180, 100, 1), +(@GUID+100, 185182, 530, 3520, 1, -4838.08, 444.877, 52.2892, 5.95157, 0, 0, -0.165047, 0.986286, 180, 100, 1), +-- Netherdust Bush (185881) +(@GUID+101, 185881, 530, 3520, 1, -5426.7, 480.226, 49.9151, 3.83973, 0, 0, -0.939692, 0.342021, 450, 255, 1), +(@GUID+102, 185881, 530, 3520, 1, -5425.32, 635.501, 90.2537, 5.96903, 0, 0, -0.156434, 0.987688, 450, 255, 1), +(@GUID+103, 185881, 530, 3520, 1, -5345.39, 199.094, 49.4195, 3.52557, 0, 0, -0.981627, 0.190812, 450, 255, 1), +(@GUID+104, 185881, 530, 3520, 1, -5324.82, 241.428, 56.9943, 5.86431, 0, 0, -0.207912, 0.978148, 450, 255, 1), +(@GUID+105, 185881, 530, 3520, 1, -5305.65, 294.403, 63.3974, 0.296705, 0, 0, 0.147809, 0.989016, 450, 255, 1), +(@GUID+106, 185881, 530, 3520, 1, -5297.5, 336.366, 64.2175, 0.90757, 0, 0, 0.438371, 0.898794, 450, 255, 1), +(@GUID+107, 185881, 530, 3520, 1, -5294.84, 139.849, 49.7378, 3.52557, 0, 0, -0.981627, 0.190812, 450, 255, 1), +(@GUID+108, 185881, 530, 3520, 1, -5276.86, 694.728, 39.7565, 1.36136, 0, 0, 0.62932, 0.777146, 450, 255, 1), +(@GUID+109, 185881, 530, 3520, 1, -5276.27, 458.093, 50.8947, 0.471238, 0, 0, 0.233445, 0.97237, 450, 255, 1), +(@GUID+110, 185881, 530, 3520, 1, -5269.45, 389.186, 58.4835, 1.8675, 0, 0, 0.803857, 0.594823, 450, 255, 1), +(@GUID+111, 185881, 530, 3520, 1, -5258.24, 551.351, 46.8299, 3.99681, 0, 0, -0.909961, 0.414694, 450, 255, 1), +(@GUID+112, 185881, 530, 3520, 1, -5238.6, 754.771, 45.4299, 0.0349062, 0, 0, 0.0174522, 0.999848, 450, 255, 1), +(@GUID+113, 185881, 530, 3520, 1, -5236.03, 75.3729, 63.297, 0.279252, 0, 0, 0.139173, 0.990268, 450, 255, 1), +(@GUID+114, 185881, 530, 3520, 1, -5220.56, 594.228, 58.3474, 1.98967, 0, 0, 0.83867, 0.54464, 450, 255, 1), +(@GUID+115, 185881, 530, 3520, 1, -5220.05, 0.626519, 64.5741, 6.12611, 0, 0, -0.0784588, 0.996917, 450, 255, 1), +(@GUID+116, 185881, 530, 3520, 1, -5214.52, -60.9998, 66.1487, 2.61799, 0, 0, 0.965925, 0.258821, 450, 255, 1), +(@GUID+117, 185881, 530, 3520, 1, -5208.73, 168.256, 69.8622, 4.57276, 0, 0, -0.754709, 0.656059, 450, 255, 1), +(@GUID+118, 185881, 530, 3520, 1, -5205.73, 262.022, 71.0352, 1.3439, 0, 0, 0.622514, 0.782609, 450, 255, 1), +(@GUID+119, 185881, 530, 3520, 1, -5202.5, 821.386, 183.064, 2.79252, 0, 0, 0.984807, 0.173652, 450, 255, 1), +(@GUID+120, 185881, 530, 3520, 1, -5199.28, 530.319, 74.5738, 3.7001, 0, 0, -0.961261, 0.27564, 450, 255, 1), +(@GUID+121, 185881, 530, 3520, 1, -5194.68, 413.596, 74.152, 1.13446, 0, 0, 0.537299, 0.843392, 450, 255, 1), +(@GUID+122, 185881, 530, 3520, 1, -5192.02, 85.9395, 69.8052, 1.37881, 0, 0, 0.636078, 0.771625, 450, 255, 1), +(@GUID+123, 185881, 530, 3520, 1, -5190.82, 672.716, 71.1034, 2.47837, 0, 0, 0.945518, 0.325568, 450, 255, 1), +(@GUID+124, 185881, 530, 3520, 1, -5187.12, 475.829, 75.8003, 6.16101, 0, 0, -0.0610485, 0.998135, 450, 255, 1), +(@GUID+125, 185881, 530, 3520, 1, -5163.42, 702.526, 73.9895, 1.02974, 0, 0, 0.492423, 0.870356, 450, 255, 1), +(@GUID+126, 185881, 530, 3520, 1, -5158.48, -121.623, 65.6004, 5.63741, 0, 0, -0.317305, 0.948324, 450, 255, 1), +(@GUID+127, 185881, 530, 3520, 1, -5149.1, 45.7016, 77.9364, 0.541051, 0, 0, 0.267238, 0.963631, 450, 255, 1), +(@GUID+128, 185881, 530, 3520, 1, -5141.43, 922.585, 36.635, 0, 0, 0, 0, 1, 450, 255, 1), +(@GUID+129, 185881, 530, 3520, 1, -5123.26, 488.328, 82.0753, 5.96903, 0, 0, -0.156434, 0.987688, 450, 255, 1), +(@GUID+130, 185881, 530, 3520, 1, -5122.02, 122.325, 129.771, 3.07177, 0, 0, 0.999391, 0.0349061, 450, 255, 1), +(@GUID+131, 185881, 530, 3520, 1, -5118.31, -141.376, 53.8094, 3.52557, 0, 0, -0.981627, 0.190812, 450, 255, 1), +(@GUID+132, 185881, 530, 3520, 1, -5109.26, 783.399, 58.1317, 1.0472, 0, 0, 0.5, 0.866025, 450, 255, 1), +(@GUID+133, 185881, 530, 3520, 1, -5098.7, 256.303, 150.706, 5.46288, 0, 0, -0.398748, 0.91706, 450, 255, 1), +(@GUID+134, 185881, 530, 3520, 1, -5089.35, 160.339, 129.451, 4.50295, 0, 0, -0.777145, 0.629321, 450, 255, 1), +(@GUID+135, 185881, 530, 3520, 1, -5081.87, 794.929, 60.562, 0.698131, 0, 0, 0.34202, 0.939693, 450, 255, 1), +(@GUID+136, 185881, 530, 3520, 1, -5081.16, 318.254, 167.886, 3.89209, 0, 0, -0.930417, 0.366502, 450, 255, 1), +(@GUID+137, 185881, 530, 3520, 1, -5067.8, 39.8734, 80.9828, 5.84685, 0, 0, -0.216439, 0.976296, 450, 255, 1), +(@GUID+138, 185881, 530, 3520, 1, -5063.72, 504.746, 86.185, 0.663223, 0, 0, 0.325567, 0.945519, 450, 255, 1), +(@GUID+139, 185881, 530, 3520, 1, -5052.97, 515.106, 87.2382, 2.82743, 0, 0, 0.987688, 0.156436, 450, 255, 1), +(@GUID+140, 185881, 530, 3520, 1, -5051.28, -112.554, 58.9778, 0.314158, 0, 0, 0.156434, 0.987688, 450, 255, 1), +(@GUID+141, 185881, 530, 3520, 1, -5048.05, 355.002, 170.646, 0.401425, 0, 0, 0.199367, 0.979925, 450, 255, 1), +(@GUID+142, 185881, 530, 3520, 1, -5041.54, 213.125, 108.68, 5.25344, 0, 0, -0.492423, 0.870356, 450, 255, 1), +(@GUID+143, 185881, 530, 3520, 1, -5026.32, 816.846, 51.4761, 0.331611, 0, 0, 0.165047, 0.986286, 450, 255, 1), +(@GUID+144, 185881, 530, 3520, 1, -5014.66, -70.1501, 67.2902, 5.18363, 0, 0, -0.522498, 0.852641, 450, 255, 1), +(@GUID+145, 185881, 530, 3520, 1, -5010.52, 485.865, 86.708, 3.59538, 0, 0, -0.97437, 0.224951, 450, 255, 1), +(@GUID+146, 185881, 530, 3520, 1, -5004.54, 182.954, 80.411, 4.81711, 0, 0, -0.66913, 0.743145, 450, 255, 1), +(@GUID+147, 185881, 530, 3520, 1, -5004.24, 44.9732, 77.3341, 4.86947, 0, 0, -0.649447, 0.760406, 450, 255, 1), +(@GUID+148, 185881, 530, 3520, 1, -4999.13, 102.752, 75.3494, 3.80482, 0, 0, -0.945518, 0.325568, 450, 255, 1), +(@GUID+149, 185881, 530, 3520, 1, -4994.19, 280.431, 81.9187, 3.10665, 0, 0, 0.999847, 0.0174693, 450, 255, 1), +(@GUID+150, 185881, 530, 3520, 1, -4993.89, -22.0152, 73.1766, 1.20428, 0, 0, 0.566406, 0.824126, 450, 255, 1), +(@GUID+151, 185881, 530, 3520, 1, -4988.35, 830.277, 37.5357, 0.95993, 0, 0, 0.461748, 0.887011, 450, 255, 1), +(@GUID+152, 185881, 530, 3520, 1, -4982.84, 435.638, 87.2519, 2.60053, 0, 0, 0.96363, 0.267241, 450, 255, 1), +(@GUID+153, 185881, 530, 3520, 1, -4969.25, 702.759, 83.7856, 5.67232, 0, 0, -0.300705, 0.953717, 450, 255, 1), +(@GUID+154, 185881, 530, 3520, 1, -4959.69, 391.508, 84.9454, 3.90954, 0, 0, -0.927183, 0.374608, 450, 255, 1), +(@GUID+155, 185881, 530, 3520, 1, -4943.54, 601.093, 72.1413, 5.86431, 0, 0, -0.207912, 0.978148, 450, 255, 1), +(@GUID+156, 185881, 530, 3520, 1, -4926.38, 73.6361, 53.6441, 0.331611, 0, 0, 0.165047, 0.986286, 450, 255, 1), +(@GUID+157, 185881, 530, 3520, 1, -4919.72, 556.622, 62.7886, 5.02655, 0, 0, -0.587785, 0.809017, 450, 255, 1), +(@GUID+158, 185881, 530, 3520, 1, -4913, 770.456, 58.0941, 1.44862, 0, 0, 0.66262, 0.748956, 450, 255, 1), +(@GUID+159, 185881, 530, 3520, 1, -4902.92, 383.868, 77.0322, 2.93214, 0, 0, 0.994521, 0.104535, 450, 255, 1), +(@GUID+160, 185881, 530, 3520, 1, -4888.37, 651.058, 72.204, 1.93731, 0, 0, 0.824125, 0.566408, 450, 255, 1), +(@GUID+161, 185881, 530, 3520, 1, -4886.32, 230.471, 52.0294, 3.7001, 0, 0, -0.961261, 0.27564, 450, 255, 1), +(@GUID+162, 185881, 530, 3520, 1, -4875.4, 137.229, 36.3884, 0.104719, 0, 0, 0.0523357, 0.99863, 450, 255, 1), +(@GUID+163, 185881, 530, 3520, 1, -4857.4, 671.773, 58.24, 0.0523589, 0, 0, 0.0261765, 0.999657, 450, 255, 1), +(@GUID+164, 185881, 530, 3520, 1, -4852.85, 558.638, 48.4878, 2.33874, 0, 0, 0.920505, 0.390732, 450, 255, 1), +(@GUID+165, 185881, 530, 3520, 1, -4852, 463.619, 63.2364, 3.71755, 0, 0, -0.958819, 0.284016, 450, 255, 1), +(@GUID+166, 185881, 530, 3520, 1, -4844.98, 494.166, 53.2687, 0.226893, 0, 0, 0.113203, 0.993572, 450, 255, 1), +(@GUID+167, 185881, 530, 3520, 1, -4844.71, 371.953, 60.5351, 0.977383, 0, 0, 0.469471, 0.882948, 450, 255, 1), +(@GUID+168, 185881, 530, 3520, 1, -4812.49, 956.703, -17.9028, 4.4855, 0, 0, -0.782608, 0.622515, 450, 255, 1), +(@GUID+169, 185881, 530, 3520, 1, -4780.75, 857.393, 97.4195, 1.64061, 0, 0, 0.731353, 0.681999, 450, 255, 1), +(@GUID+170, 185881, 530, 3520, 1, -4727.03, 138.535, 81.6504, 0.541051, 0, 0, 0.267238, 0.963631, 450, 255, 1), +(@GUID+171, 185881, 530, 3520, 1, -4637.75, 895.545, 6.45321, 1.5708, 0, 0, 0.707107, 0.707107, 450, 255, 1), +(@GUID+172, 185881, 530, 3520, 1, -4573.44, 763.756, -10.0483, 3.59538, 0, 0, -0.97437, 0.224951, 450, 255, 1), +(@GUID+173, 185881, 530, 3520, 1, -4566.27, 34.5459, 203.934, 6.19592, 0, 0, -0.0436192, 0.999048, 450, 255, 1), +(@GUID+174, 185881, 530, 3520, 1, -4541.06, 859.398, 9.72764, 0.0698117, 0, 0, 0.0348988, 0.999391, 450, 255, 1), +(@GUID+175, 185881, 530, 3520, 1, -4311.18, 314.591, 120.146, 5.8294, 0, 0, -0.224951, 0.97437, 450, 255, 1), +(@GUID+176, 185881, 530, 3520, 1, -4254.85, 261.138, 123.885, 1.69297, 0, 0, 0.748956, 0.66262, 450, 255, 1), +(@GUID+177, 185881, 530, 3520, 1, -4231.1, 428.019, 49.7114, 3.52557, 0, 0, -0.981627, 0.190812, 450, 255, 1), +(@GUID+178, 185881, 530, 3520, 1, -4203.97, 450.17, 30.8495, 2.51327, 0, 0, 0.951056, 0.309017, 450, 255, 1), +(@GUID+179, 185881, 530, 3520, 1, -4203.24, 510.76, 29.4429, 2.87979, 0, 0, 0.991445, 0.130528, 450, 255, 1), +(@GUID+180, 185881, 530, 3520, 1, -4194.29, 270.925, 123.405, 4.34587, 0, 0, -0.824126, 0.566406, 450, 255, 1), +(@GUID+181, 185881, 530, 3520, 1, -4193.77, 571.408, 18.6321, 2.30383, 0, 0, 0.913545, 0.406738, 450, 255, 1), +(@GUID+182, 185881, 530, 3520, 1, -4162.69, 505.787, 28.9088, 1.43117, 0, 0, 0.656058, 0.75471, 450, 255, 1), +(@GUID+183, 185881, 530, 3520, 1, -4143.87, 458.85, 32.479, 1.95477, 0, 0, 0.829038, 0.559193, 450, 255, 1), +(@GUID+184, 185881, 530, 3520, 1, -4116.71, 542.75, 17.7295, 4.03171, 0, 0, -0.902585, 0.430512, 450, 255, 1), +(@GUID+185, 185881, 530, 3520, 1, -4113.53, 473.452, 33.4408, 0.104719, 0, 0, 0.0523357, 0.99863, 450, 255, 1), +(@GUID+186, 185881, 530, 3520, 1, -4094.73, 373.8, 31.4659, 3.9619, 0, 0, -0.91706, 0.39875, 450, 255, 1), +-- Nethercite Deposit (185877) +(@GUID+187, 185877, 530, 3520, 1, -4094.22, 456.977, 30.5805, 4.18879, 0, 0, -0.866025, 0.500001, 450, 255, 1), +(@GUID+188, 185877, 530, 3520, 1, -4104.88, 599.296, 4.27204, 1.23918, 0, 0, 0.580703, 0.814116, 450, 255, 1), +(@GUID+189, 185877, 530, 3520, 1, -4308.03, 269.863, 128.466, 4.01426, 0, 0, -0.906307, 0.422619, 450, 255, 1), +(@GUID+190, 185877, 530, 3520, 1, -4888.58, 187.754, 45.9019, 1.13446, 0, 0, 0.537299, 0.843392, 450, 255, 1), +(@GUID+191, 185877, 530, 3520, 1, -4913.41, 710.029, 68.1203, 4.06662, 0, 0, -0.894934, 0.446199, 450, 255, 1), +(@GUID+192, 185877, 530, 3520, 1, -4922.5, 197.952, 63.1326, 0.890117, 0, 0, 0.43051, 0.902586, 450, 255, 1), +(@GUID+193, 185877, 530, 3520, 1, -4967.26, 589.661, 13.5339, 4.45059, 0, 0, -0.793353, 0.608762, 450, 255, 1), +(@GUID+194, 185877, 530, 3520, 1, -4974, 66.6007, 64.7468, 5.88176, 0, 0, -0.199367, 0.979925, 450, 255, 1), +(@GUID+195, 185877, 530, 3520, 1, -4982.16, 323.31, -1.66077, 3.07177, 0, 0, 0.999391, 0.0349061, 450, 255, 1), +(@GUID+196, 185877, 530, 3520, 1, -4982.21, 434.653, 6.61424, 1.69297, 0, 0, 0.748956, 0.66262, 450, 255, 1), +(@GUID+197, 185877, 530, 3520, 1, -4988.22, 219.199, -8.92974, 6.12611, 0, 0, -0.0784588, 0.996917, 450, 255, 1), +(@GUID+198, 185877, 530, 3520, 1, -4988.23, 167.875, -14.307, 0.453785, 0, 0, 0.224951, 0.97437, 450, 255, 1), +(@GUID+199, 185877, 530, 3520, 1, -4993.71, 490.135, -7.14347, 0.698131, 0, 0, 0.34202, 0.939693, 450, 255, 1), +(@GUID+200, 185877, 530, 3520, 1, -5029.19, 443.641, 86.8968, 2.14675, 0, 0, 0.878817, 0.47716, 450, 255, 1), +(@GUID+201, 185877, 530, 3520, 1, -5029.88, 625.001, 17.9749, 3.73501, 0, 0, -0.956305, 0.292372, 450, 255, 1), +(@GUID+202, 185877, 530, 3520, 1, -5057.16, 797.028, 54.9929, 2.54818, 0, 0, 0.956305, 0.292372, 450, 255, 1), +(@GUID+203, 185877, 530, 3520, 1, -5103.53, -97.9355, 69.9808, 4.66003, 0, 0, -0.725374, 0.688355, 450, 255, 1), +(@GUID+204, 185877, 530, 3520, 1, -5115.18, 349.677, -16.2853, 4.5204, 0, 0, -0.771625, 0.636078, 450, 255, 1), +(@GUID+205, 185877, 530, 3520, 1, -5121.94, 743.862, 70.6954, 5.48033, 0, 0, -0.390731, 0.920505, 450, 255, 1), +(@GUID+206, 185877, 530, 3520, 1, -5136.63, 912.589, 35.0102, 3.82227, 0, 0, -0.942641, 0.333808, 450, 255, 1), +(@GUID+207, 185877, 530, 3520, 1, -5140.78, 497.76, -13.7, 1.32645, 0, 0, 0.615661, 0.788011, 450, 255, 1), +(@GUID+208, 185877, 530, 3520, 1, -5147.91, 158.874, -10.5205, 1.64061, 0, 0, 0.731353, 0.681999, 450, 255, 1), +(@GUID+209, 185877, 530, 3520, 1, -5171.8, -14.0915, 81.9377, 0.541051, 0, 0, 0.267238, 0.963631, 450, 255, 1), +(@GUID+210, 185877, 530, 3520, 1, -5173.12, 374.285, 75.6265, 1.97222, 0, 0, 0.833885, 0.551938, 450, 255, 1), +(@GUID+211, 185877, 530, 3520, 1, -5180.41, 200.14, -13.6224, 0.785397, 0, 0, 0.382683, 0.92388, 450, 255, 1), +(@GUID+212, 185877, 530, 3520, 1, -5190.07, 205.77, 74.5371, 0.174532, 0, 0, 0.0871553, 0.996195, 450, 255, 1), +(@GUID+213, 185877, 530, 3520, 1, -5223.41, 794.442, 170.272, 0.837758, 0, 0, 0.406736, 0.913545, 450, 255, 1), +(@GUID+214, 185877, 530, 3520, 1, -5247.83, 245.788, -9.8592, 1.20428, 0, 0, 0.566406, 0.824126, 450, 255, 1), +(@GUID+215, 185877, 530, 3520, 1, -5296.79, 525.401, 34.1438, 3.97936, 0, 0, -0.913545, 0.406738, 450, 255, 1), +(@GUID+216, 185877, 530, 3520, 1, -5299.56, 377.137, 51.0671, 1.01229, 0, 0, 0.484809, 0.87462, 450, 255, 1), +(@GUID+217, 185877, 530, 3520, 1, -5394.73, 620.137, 88.6579, 2.28638, 0, 0, 0.909961, 0.414694, 450, 255, 1), +(@GUID+218, 185877, 530, 3520, 1, -5414.32, 494.163, 48.9216, 5.58505, 0, 0, -0.34202, 0.939693, 450, 255, 1), +-- Netherwing Egg (185915) - Dragonmaw Fortress (4) +(@GUID+219, 185915, 530, 3520, 1, -4159.2, 369.727, 142.105, 0.349065, 0, 0, 0.173648, 0.984808, 3600, 255, 1), +(@GUID+220, 185915, 530, 3520, 1, -4175.07, 300.02, 125.415, 4.64258, 0, 0, -0.731354, 0.681998, 3600, 255, 1), +(@GUID+221, 185915, 530, 3520, 1, -4190.31, 456.136, 30.5841, 5.42798, 0, 0, -0.414693, 0.909962, 3600, 255, 1), +(@GUID+222, 185915, 530, 3520, 1, -4197.24, 528.217, 29.2594, 4.66003, 0, 0, -0.725374, 0.688355, 3600, 255, 1), +(@GUID+223, 185915, 530, 3520, 1, -4234.24, 526.788, 78.4189, 3.85718, 0, 0, -0.936671, 0.35021, 3600, 255, 1), +(@GUID+224, 185915, 530, 3520, 1, -4239.12, 436.852, 49.3634, 2.89724, 0, 0, 0.992546, 0.12187, 3600, 255, 1), +(@GUID+225, 185915, 530, 3520, 1, -4244.83, 325.004, 134.417, 0.139625, 0, 0, 0.0697555, 0.997564, 3600, 255, 1), +(@GUID+226, 185915, 530, 3520, 1, -4138.3, 482.01, 60.3146, 3.08918, 0, 0, 0.999657, 0.0262017, 3600, 255, 1), +(@GUID+227, 185915, 530, 3520, 1, -4221.47, 370.147, 136.232, 2.11185, 0, 0, 0.870356, 0.492424, 3600, 255, 1), +(@GUID+228, 185915, 530, 3520, 1, -4141.23, 468.919, 32.5995, 0.872664, 0, 0, 0.422618, 0.906308, 3600, 255, 1), +(@GUID+229, 185915, 530, 3520, 1, -4094.41, 395.824, 30.4273, 0.331611, 0, 0, 0.165047, 0.986286, 3600, 255, 1), +(@GUID+230, 185915, 530, 3520, 1, -4286.16, 408.836, 129.779, 1.36136, 0, 0, 0.62932, 0.777146, 3600, 255, 1), +-- Netherwing Eggs (185915) - Netherwing Ledge (7) +(@GUID+231, 185915, 530, 3520, 1, -4930.13, 41.446, 61.4424, 1.88495, 0, 0, 0.809016, 0.587786, 3600, 255, 1), +(@GUID+232, 185915, 530, 3520, 1, -5103.11, 707.979, 85.0428, 0.279252, 0, 0, 0.139173, 0.990268, 3600, 255, 1), +(@GUID+233, 185915, 530, 3520, 1, -4866.49, -112.199, 62.6526, 4.43314, 0, 0, -0.798635, 0.601815, 3600, 255, 1), +(@GUID+234, 185915, 530, 3520, 1, -4922.48, -70.154, 123.481, 5.23599, 0, 0, -0.5, 0.866025, 3600, 255, 1), +(@GUID+235, 185915, 530, 3520, 1, -5103.52, 64.5565, 81.2546, 4.27606, 0, 0, -0.843391, 0.5373, 3600, 255, 1), +(@GUID+236, 185915, 530, 3520, 1, -5308.66, 394.053, 46.499, 5.15053, 0, 0, 0.536535, -0.843878, 3600, 255, 1), +(@GUID+237, 185915, 530, 3520, 1, -5054.15, 788.018, 56.7731, 0.860593, 0, 0, 0.41714, 0.908842, 3600, 255, 1), +(@GUID+238, 185915, 530, 3520, 1, -4936.54, 744.955, 123.693, 0.535405, 0, 0, 0.264517, 0.964381, 3600, 255, 1), +(@GUID+239, 185915, 530, 3520, 1, -5018.59, 759.192, 132.643, 2.72274, 0, 0, 0.97815, 0.2079, 3600, 255, 1), +(@GUID+240, 185915, 530, 3520, 1, -5058.2, 731.691, 146.694, 3.47671, 0, 0, 0.985995, -0.166777, 3600, 255, 1), +(@GUID+241, 185915, 530, 3520, 1, -4964.88, 171.673, 123.666, 4.40597, 0, 0, 0.806738, -0.59091, 3600, 255, 1), +(@GUID+242, 185915, 530, 3520, 1, -4949.78, 290.124, 115.715, 0.669819, 0, 0, 0.328684, 0.94444, 3600, 255, 1), +(@GUID+243, 185915, 530, 3520, 1, -5137.33, 165.547, 157.05, 1.64921, 0, 0, 0.73428, 0.678847, 3600, 255, 1), +(@GUID+244, 185915, 530, 3520, 1, -5144.73, 189.016, 150.898, 0.054852, 0, 0, 0.0274226, 0.999624, 3600, 255, 1), +(@GUID+245, 185915, 530, 3520, 1, -5319.04, 184.91, 55.1636, 5.1716, 0, 0, 0.527619, -0.849481, 3600, 255, 1), +(@GUID+246, 185915, 530, 3520, 1, -5046.01, 330.714, 172.475, 3.43587, 0, 0, 0.989195, -0.146609, 3600, 255, 1), +(@GUID+247, 185915, 530, 3520, 1, -5042.42, 402.531, 175.591, 4.37848, 0, 0, 0.814783, -0.579767, 3600, 255, 1), +(@GUID+248, 185915, 530, 3520, 1, -5135.77, 104.896, 142.188, 3.23179, 0, 0, 0.998983, -0.0450826, 3600, 255, 1), +(@GUID+249, 185915, 530, 3520, 1, -5065.14, 116.682, 170.545, 4.05313, 0, 0, 0.898055, -0.439884, 3600, 255, 1), +(@GUID+250, 185915, 530, 3520, 1, -5098.13, 383.002, 231.763, 5.10103, 0, 0, 0.557255, -0.830342, 3600, 255, 1), +(@GUID+251, 185915, 530, 3520, 1, -5448.83, -24.3292, 110.702, 2.00713, 0, 0, 0.843391, 0.5373, 3600, 255, 1), +(@GUID+252, 185915, 530, 3520, 1, -5260.72, 186.911, 128.841, 5.20108, 0, 0, -0.515037, 0.857168, 3600, 255, 1), +(@GUID+253, 185915, 530, 3520, 1, -5303.76, 544.032, 34.0402, 2.42601, 0, 0, 0.936672, 0.350207, 3600, 255, 1), +(@GUID+254, 185915, 530, 3520, 1, -5308.35, 57.9292, 110.024, 1.11701, 0, 0, 0.529919, 0.848048, 3600, 255, 1), +(@GUID+255, 185915, 530, 3520, 1, -5341.82, -43.5872, 90.3481, 3.29869, 0, 0, -0.996917, 0.0784664, 3600, 255, 1), +(@GUID+256, 185915, 530, 3520, 1, -5397.3, 612.787, 85.1582, 3.927, 0, 0, -0.923879, 0.382686, 3600, 255, 1), +(@GUID+257, 185915, 530, 3520, 1, -5418.63, 477.225, 46.6154, 2.47837, 0, 0, 0.945518, 0.325568, 3600, 255, 1), +(@GUID+258, 185915, 530, 3520, 1, -5215.15, 322.214, 123.416, 3.08918, 0, 0, 0.999657, 0.0262017, 3600, 255, 1), +(@GUID+259, 185915, 530, 3520, 1, -5228.35, 798.669, 173.603, 3.00195, 0, 0, 0.997563, 0.0697661, 3600, 255, 1), +(@GUID+260, 185915, 530, 3520, 1, -5174.38, -152.213, 51.7318, 2.56563, 0, 0, 0.958819, 0.284016, 3600, 255, 1), +(@GUID+261, 185915, 530, 3520, 1, -5143.51, 190.458, 150.333, 0.750491, 0, 0, 0.366501, 0.930418, 3600, 255, 1), +(@GUID+262, 185915, 530, 3520, 1, -5117.88, 294.901, 159.32, 1.15192, 0, 0, 0.544639, 0.838671, 3600, 255, 1), +(@GUID+263, 185915, 530, 3520, 1, -5117.35, -109.776, 68.2887, 4.97419, 0, 0, -0.608761, 0.793354, 3600, 255, 1), +(@GUID+264, 185915, 530, 3520, 1, -5096.4, -29.9565, 169.821, 0.418879, 0, 0, 0.207912, 0.978148, 3600, 255, 1), +(@GUID+265, 185915, 530, 3520, 1, -5055.72, 623.2, 89.5802, 0.0174525, 0, 0, 0.00872612, 0.999962, 3600, 255, 1), +(@GUID+266, 185915, 530, 3520, 1, -5084.45, 139.49, 130.919, 0.645772, 0, 0, 0.317305, 0.948324, 3600, 255, 1), +(@GUID+267, 185915, 530, 3520, 1, -5034.84, 612.646, 184.41, 2.9845, 0, 0, 0.996917, 0.0784664, 3600, 255, 1), +(@GUID+268, 185915, 530, 3520, 1, -5026.72, 347.3, 170.65, 4.71239, 0, 0, -0.707107, 0.707107, 3600, 255, 1), +(@GUID+269, 185915, 530, 3520, 1, -5023.42, 589.374, 163.848, 1.83259, 0, 0, 0.793353, 0.608762, 3600, 255, 1), +(@GUID+270, 185915, 530, 3520, 1, -5003.99, -113.395, -4.66754, 0.244346, 0, 0, 0.530934, 0.992546, 3600, 255, 1), +(@GUID+271, 185915, 530, 3520, 1, -5004.11, 14.8037, 76.3614, 4.67748, 0, 0, -0.719339, 0.694659, 3600, 255, 1), +(@GUID+272, 185915, 530, 3520, 1, -5017.84, 232.669, 109.655, 4.95674, 0, 0, -0.615661, 0.788011, 3600, 255, 1), +(@GUID+273, 185915, 530, 3520, 1, -4972.33, 87.7207, 61.2606, 1.22173, 0, 0, 0.573576, 0.819152, 3600, 255, 1), +(@GUID+274, 185915, 530, 3520, 1, -4987.07, 735.798, 81.0512, 1.93731, 0, 0, 0.824125, 0.566408, 3600, 255, 1), +(@GUID+275, 185915, 530, 3520, 1, -4968.88, 144.102, 94.8483, 5.42798, 0, 0, -0.414693, 0.909962, 3600, 255, 1), +(@GUID+276, 185915, 530, 3520, 1, -4934.19, 323.557, 138.55, 4.18879, 0, 0, -0.866025, 0.500001, 3600, 255, 1), +(@GUID+277, 185915, 530, 3520, 1, -4947.62, 477.917, 144.214, 3.24635, 0, 0, -0.998629, 0.0523532, 3600, 255, 1), +(@GUID+278, 185915, 530, 3520, 1, -4689.66, 771.303, 25.2163, 4.01426, 0, 0, -0.906307, 0.422619, 3600, 255, 1), +(@GUID+279, 185915, 530, 3520, 1, -4817.81, 933.67, -14.7275, 0.0523589, 0, 0, 0.0261765, 0.999657, 3600, 255, 1), +(@GUID+280, 185915, 530, 3520, 1, -5394.55, 624.369, 90.2262, 0.0109606, 0, 0, 0, 0, 3600, 255, 1), +(@GUID+281, 185915, 530, 3520, 1, -5418.32, 479.169, 46.8964, 0.333759, 0, 0, 0, 0, 3600, 255, 1), +(@GUID+282, 185915, 530, 3520, 1, -5175.32, -143.933, 57.6825, 2.89729, 0, 0, 0, 0, 3600, 255, 1), +(@GUID+283, 185915, 530, 3520, 1, -5127.7, 921.891, 31.0533, 4.87886, 0, 0, 0, 0, 3600, 255, 1), +(@GUID+284, 185915, 530, 3520, 1, -5287.05, 540.014, 38.6798, 4.90792, 0, 0, 0, 0, 3600, 255, 1), +(@GUID+285, 185915, 530, 3520, 1, -4771.52, 866.079, 98.9096, 0.249722, 0, 0, 0, 0, 3600, 255, 1), +-- Netherwing Eggs (185915) - Netherwing Mine (5) +(@GUID+286, 185915, 530, 3520, 1, -4856.32, 467.917, -5.42577, 4.72984, 0, 0, -0.700909, 0.713251, 3600, 255, 1), +(@GUID+287, 185915, 530, 3520, 1, -4883.4, 404.646, -5.77738, 1.95477, 0, 0, 0.829038, 0.559193, 3600, 255, 1), +(@GUID+288, 185915, 530, 3520, 1, -4901.97, 597.292, 4.66352, 0.418879, 0, 0, 0.207912, 0.978148, 3600, 255, 1), +(@GUID+289, 185915, 530, 3520, 1, -4931.31, 426.105, 0.003176, 1.43117, 0, 0, 0.656058, 0.75471, 3600, 255, 1), +(@GUID+290, 185915, 530, 3520, 1, -4957.64, 382.887, -2.43409, 1.46608, 0, 0, 0.66913, 0.743145, 3600, 255, 1), +(@GUID+291, 185915, 530, 3520, 1, -4959.43, 646.737, 18.4241, 0.85521, 0, 0, 0.414693, 0.909962, 3600, 255, 1), +(@GUID+292, 185915, 530, 3520, 1, -4960.82, 216.069, -11.42, 5.84685, 0, 0, -0.216439, 0.976296, 3600, 255, 1), +(@GUID+293, 185915, 530, 3520, 1, -4971.98, 487.725, 5.24322, 4.57276, 0, 0, -0.754709, 0.656059, 3600, 255, 1), +(@GUID+294, 185915, 530, 3520, 1, -4993.62, 157.017, -14.6653, 5.55015, 0, 0, -0.358368, 0.933581, 3600, 255, 1), +(@GUID+295, 185915, 530, 3520, 1, -4996.78, 669.637, 23.5955, 0.523598, 0, 0, 0.258819, 0.965926, 3600, 255, 1), +(@GUID+296, 185915, 530, 3520, 1, -5012.23, 435.849, -8.50751, 1.98967, 0, 0, 0.83867, 0.54464, 3600, 255, 1), +(@GUID+297, 185915, 530, 3520, 1, -5013.82, 447.382, 17.7421, 1.91986, 0, 0, 0.819152, 0.573577, 3600, 255, 1), +(@GUID+298, 185915, 530, 3520, 1, -5019.65, 654.349, 23.1631, 5.75959, 0, 0, -0.258819, 0.965926, 3600, 255, 1), +(@GUID+299, 185915, 530, 3520, 1, -5025.03, 359.934, 1.24235, 1.44862, 0, 0, 0.66262, 0.748956, 3600, 255, 1), +(@GUID+300, 185915, 530, 3520, 1, -5031.91, 289.691, 4.98487, 0.541051, 0, 0, 0.267238, 0.963631, 3600, 255, 1), +(@GUID+301, 185915, 530, 3520, 1, -5039.54, 415.692, -10.7986, 5.5676, 0, 0, -0.350207, 0.936672, 3600, 255, 1), +(@GUID+302, 185915, 530, 3520, 1, -5053.39, 312.4, 5.84981, 5.20108, 0, 0, -0.515037, 0.857168, 3600, 255, 1), +(@GUID+303, 185915, 530, 3520, 1, -5061.81, 640.964, 29.3313, 6.03884, 0, 0, -0.530934, 0.992546, 3600, 255, 1), +(@GUID+304, 185915, 530, 3520, 1, -5068.72, 178.252, -8.99214, 0.436332, 0, 0, 0.216439, 0.976296, 3600, 255, 1), +(@GUID+305, 185915, 530, 3520, 1, -5071.84, 663.63, 33.1395, 1.90241, 0, 0, 0.814116, 0.580703, 3600, 255, 1), +(@GUID+306, 185915, 530, 3520, 1, -5080.83, 491.369, -9.40129, 0.383971, 0, 0, 0.190808, 0.981627, 3600, 255, 1), +(@GUID+307, 185915, 530, 3520, 1, -5089.8, 336.709, 4.87949, 4.41568, 0, 0, -0.803857, 0.594823, 3600, 255, 1), +(@GUID+308, 185915, 530, 3520, 1, -5093.74, 439.616, -5.25503, 5.8294, 0, 0, -0.224951, 0.97437, 3600, 255, 1), +(@GUID+309, 185915, 530, 3520, 1, -5095.69, 641.456, 32.7262, 2.79252, 0, 0, 0.984807, 0.173652, 3600, 255, 1), +(@GUID+310, 185915, 530, 3520, 1, -5096.63, 151.436, -11.3379, 1.09956, 0, 0, 0.522498, 0.852641, 3600, 255, 1), +(@GUID+311, 185915, 530, 3520, 1, -5100.64, 166.182, -8.61069, 3.61284, 0, 0, -0.972369, 0.233448, 3600, 255, 1), +(@GUID+312, 185915, 530, 3520, 1, -5101.15, 166.01, -8.3702, 3.8751, 0, 0, -0.636078, 0.771625, 3600, 255, 1), +(@GUID+313, 185915, 530, 3520, 1, -5109.37, 524.847, -10.3982, 4.85202, 0, 0, -0.656058, 0.75471, 3600, 255, 1), +(@GUID+314, 185915, 530, 3520, 1, -5136.7, 353.425, -18.5068, 5.61996, 0, 0, -0.325567, 0.945519, 3600, 255, 1), +(@GUID+315, 185915, 530, 3520, 1, -5149.71, 671.502, 41.1243, 1.43117, 0, 0, 0.656058, 0.75471, 3600, 255, 1), +(@GUID+316, 185915, 530, 3520, 1, -5152.54, 707.566, 43.6404, 4.04917, 0, 0, -0.898793, 0.438373, 3600, 255, 1), +(@GUID+317, 185915, 530, 3520, 1, -5164.58, 615.068, 36.5102, 1.69297, 0, 0, 0.748956, 0.66262, 3600, 255, 1), +(@GUID+318, 185915, 530, 3520, 1, -5170.73, 251.741, -32.0139, 2.87979, 0, 0, 0.991445, 0.130528, 3600, 255, 1), +(@GUID+319, 185915, 530, 3520, 1, -5179.29, 363.463, -20.2674, 0.0698117, 0, 0, 0.0348988, 0.999391, 3600, 255, 1), +(@GUID+320, 185915, 530, 3520, 1, -5182.99, 424.538, -10.4361, 0.226893, 0, 0, 0.113203, 0.993572, 3600, 255, 1), +(@GUID+321, 185915, 530, 3520, 1, -5189.28, 123.318, -11.8921, 5.46288, 0, 0, -0.398748, 0.91706, 3600, 255, 1), +(@GUID+322, 185915, 530, 3520, 1, -5199.03, 624.213, 45.1267, 0.506145, 0, 0, 0.25038, 0.968148, 3600, 255, 1), +(@GUID+323, 185915, 530, 3520, 1, -5238, 137.927, -13.1254, 3.927, 0, 0, -0.923879, 0.382686, 3600, 255, 1), +(@GUID+324, 185915, 530, 3520, 1, -4961.22, 326.443, -3.23122, 3.4383, 0, 0, -0.989016, 0.147811, 3600, 255, 1), +(@GUID+325, 185915, 530, 3520, 1, -5121.47, 411.855, -11.8601, 4.17134, 0, 0, -0.870356, 0.492424, 3600, 255, 1), +(@GUID+326, 185915, 530, 3520, 1, -5115.41, 250.248, -33.759, 0.994837, 0, 0, 0.477158, 0.878817, 3600, 255, 1), +(@GUID+327, 185915, 530, 3520, 1, -5148.45, 136.622, -13.8303, 4.90438, 0, 0, -0.636078, 0.771625, 3600, 255, 1), +(@GUID+328, 185915, 530, 3520, 1, -5128.44, 694.609, 40.3193, 3.50812, 0, 0, -0.983254, 0.182238, 3600, 255, 1), +(@GUID+329, 185915, 530, 3520, 1, -4955.09, 545.788, 7.66699, 1.16937, 0, 0, 0.551936, 0.833886, 3600, 255, 1), +(@GUID+330, 185915, 530, 3520, 1, -5029.06, 700.02, 19.1022, 4.90438, 0, 0, -0.636078, 0.771625, 3600, 255, 1), +(@GUID+331, 185915, 530, 3520, 1, -4987.64, 451.117, 6.23003, 5.28835, 0, 0, -0.477158, 0.878817, 3600, 255, 1), +(@GUID+332, 185915, 530, 3520, 1, -5052.35, 121.676, -16.9854, 5.81195, 0, 0, -0.233445, 0.97237, 3600, 255, 1), +(@GUID+333, 185915, 530, 3520, 1, -5151.29, 492.122, -12.8063, 1.23918, 0, 0, 0.580703, 0.814116, 3600, 255, 1), +(@GUID+334, 185915, 530, 3520, 1, -4962.26, 580.082, 12.6127, 4.66003, 0, 0, -0.725374, 0.688355, 3600, 255, 1), +(@GUID+335, 185915, 530, 3520, 1, -5017.81, 237.62, -6.4276, 3.89209, 0, 0, -0.930417, 0.366502, 3600, 255, 1), +(@GUID+336, 185915, 530, 3520, 1, -5117.96, 89.7627, -12.0527, 5.32326, 0, 0, -0.461748, 0.887011, 3600, 255, 1), +(@GUID+337, 185915, 530, 3520, 1, -4911.07, 316.849, -11.5435, 1.3439, 0, 0, 0.622514, 0.782609, 3600, 255, 1), +(@GUID+338, 185915, 530, 3520, 1, -4928.36, 288.022, -12.45, 2.51327, 0, 0, 0.951056, 0.309017, 3600, 255, 1); + +-- Pooling +DELETE FROM `pool_template` WHERE `description` LIKE '%Nether%' AND `entry` BETWEEN @POOL+0 AND @POOL+5; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOL+0, 40, 'Nethervine Crystal (185182)'), +(@POOL+1, 17, 'Netherdust Bush (185881)'), +(@POOL+2, 8 , 'Nethercite Deposit (185877)'), +(@POOL+3, 4 , 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@POOL+4, 7 , 'Netherwing Egg (185915) - Netherwing Ledge'), +(@POOL+5, 5 , 'Netherwing Egg (185915) - Netherwing Mine'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE '%Nether%' AND `guid` BETWEEN @GUID+0 AND @GUID+338 AND `pool_entry` BETWEEN @POOL+0 AND @POOL+5; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@GUID+0 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+1 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+2 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+3 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+4 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+5 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+6 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+7 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+8 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+9 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+10 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+11 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+12 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+13 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+14 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+15 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+16 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+17 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+18 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+19 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+20 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+21 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+22 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+23 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+24 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+25 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+26 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+27 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+28 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+29 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+30 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+31 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+32 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+33 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+34 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+35 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+36 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+37 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+38 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+39 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+40 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+41 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+42 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+43 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+44 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+45 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+46 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+47 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+48 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+49 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+50 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+51 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+52 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+53 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+54 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+55 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+56 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+57 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+58 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+59 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+60 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+61 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+62 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+63 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+64 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+65 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+66 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+67 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+68 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+69 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+70 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+71 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+72 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+73 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+74 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+75 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+76 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+77 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+78 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+79 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+80 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+81 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+82 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+83 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+84 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+85 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+86 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+87 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+88 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+89 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+90 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+91 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+92 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+93 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+94 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+95 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+96 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+97 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+98 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+99 , @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+100, @POOL+0, 0, 'Nethervine Crystal (185182)'), +(@GUID+101, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+102, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+103, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+104, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+105, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+106, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+107, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+108, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+109, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+110, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+111, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+112, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+113, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+114, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+115, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+116, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+117, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+118, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+119, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+120, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+121, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+122, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+123, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+124, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+125, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+126, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+127, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+128, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+129, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+130, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+131, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+132, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+133, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+134, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+135, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+136, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+137, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+138, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+139, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+140, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+141, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+142, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+143, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+144, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+145, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+146, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+147, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+148, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+149, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+150, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+151, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+152, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+153, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+154, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+155, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+156, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+157, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+158, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+159, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+160, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+161, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+162, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+163, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+164, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+165, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+166, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+167, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+168, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+169, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+170, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+171, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+172, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+173, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+174, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+175, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+176, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+177, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+178, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+179, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+180, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+181, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+182, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+183, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+184, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+185, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+186, @POOL+1, 0, 'Netherdust Bush (185881)'), +(@GUID+187, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+188, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+189, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+190, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+191, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+192, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+193, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+194, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+195, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+196, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+197, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+198, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+199, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+200, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+201, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+202, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+203, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+204, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+205, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+206, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+207, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+208, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+209, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+210, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+211, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+212, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+213, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+214, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+215, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+216, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+217, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+218, @POOL+2, 0, 'Nethercite Deposit (185877)'), +(@GUID+219, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+220, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+221, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+222, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+223, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+224, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+225, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+226, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+227, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+228, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+229, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+230, @POOL+3, 0, 'Netherwing Egg (185915) - Dragonmaw Fortress'), +(@GUID+231, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+232, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+233, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+234, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+235, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+236, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+237, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+238, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+239, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+240, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+241, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+242, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+243, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+244, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+245, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+246, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+247, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+248, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+249, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+250, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+251, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+252, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+253, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+254, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+255, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+256, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+257, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+258, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+259, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+260, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+261, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+262, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+263, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+264, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+265, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+266, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+267, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+268, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+269, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+270, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+271, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+272, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+273, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+274, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+275, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+276, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+277, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+278, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+279, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+280, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+281, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+282, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+283, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+284, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+285, @POOL+4, 0, 'Netherwing Egg (185915) - Netherwing Ledge'), +(@GUID+286, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+287, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+288, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+289, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+290, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+291, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+292, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+293, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+294, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+295, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+296, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+297, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+298, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+299, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+300, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+301, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+302, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+303, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+304, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+305, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+306, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+307, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+308, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+309, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+310, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+311, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+312, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+313, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+314, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+315, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+316, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+317, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+318, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+319, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+320, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+321, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+322, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+323, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+324, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+325, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+326, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+327, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+328, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+329, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+330, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+331, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+332, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+333, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+334, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+335, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+336, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+337, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'), +(@GUID+338, @POOL+5, 0, 'Netherwing Egg (185915) - Netherwing Mine'); diff --git a/data/sql/updates/db_world/2022_12_02_03.sql b/data/sql/updates/db_world/2022_12_02_03.sql new file mode 100644 index 000000000..6ad30619a --- /dev/null +++ b/data/sql/updates/db_world/2022_12_02_03.sql @@ -0,0 +1,5 @@ +-- DB update 2022_12_02_02 -> 2022_12_02_03 +-- +DELETE FROM `creature_template_movement` WHERE `creatureId` = 15901; +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(15901, 1, 0, 0, 1, 0, 0, 0); diff --git a/data/sql/updates/db_world/2022_12_02_04.sql b/data/sql/updates/db_world/2022_12_02_04.sql new file mode 100644 index 000000000..c7c040e73 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_02_04.sql @@ -0,0 +1,5 @@ +-- DB update 2022_12_02_03 -> 2022_12_02_04 +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17734) AND (`source_type` = 0) AND (`id` = 4); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17734, 0, 4, 0, 0, 0, 100, 0, 5000, 5000, 30000, 30000, 0, 11, 25778, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Lord - In Combat - Cast \'Knock Away\''); diff --git a/data/sql/updates/db_world/2022_12_02_05.sql b/data/sql/updates/db_world/2022_12_02_05.sql new file mode 100644 index 000000000..25666c629 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_02_05.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_02_04 -> 2022_12_02_05 +-- +UPDATE `quest_offer_reward_locale` SET `RewardText` = 'Bien, bien, $n. No sé si esto es de buena calidad, pero si Zurdibrujo quería algo más específico, tenía que haberlo dejado claro antes de enviar a los Reivindicadores aquí fuera.$B$B¿Qué te pareces si te pones con el siguiente objeto de su lista?' WHERE `ID` = 1458 AND `locale` IN ('esMX', 'esES'); diff --git a/data/sql/updates/db_world/2022_12_06_00.sql b/data/sql/updates/db_world/2022_12_06_00.sql new file mode 100644 index 000000000..a8a31006b --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_00.sql @@ -0,0 +1,9 @@ +-- DB update 2022_12_02_05 -> 2022_12_06_00 +-- +SET @GUID := 24967; + +DELETE FROM `gameobject` WHERE `id`=184031 AND `zoneId`=3523 AND `areaId`=3734 AND `guid` IN (@GUID+0, @GUID+1, @GUID+2); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@GUID+0, 184031, 530, 3523, 3734, 1, 3096.23, 2195.02, 149.16, 0.314158, 0, 0, 0, 0, 181, 255, 1), +(@GUID+1, 184031, 530, 3523, 3734, 1, 3097.86, 2184.51, 149.162, 2.40855, 0, 0, 0, 0, 181, 255, 1), +(@GUID+2, 184031, 530, 3523, 3734, 1, 3098.44, 2164.58, 149.168, 0.628317, 0, 0, 0, 0, 181, 255, 1); diff --git a/data/sql/updates/db_world/2022_12_06_01.sql b/data/sql/updates/db_world/2022_12_06_01.sql new file mode 100644 index 000000000..c1608c822 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_01.sql @@ -0,0 +1,296 @@ +-- DB update 2022_12_06_00 -> 2022_12_06_01 +-- Aterac Mountains pooling +UPDATE `gameobject` SET `ZoneId`=36 WHERE `guid` IN (3030,3031,3034,3038,3111,3112,3176,3362,3545,3564,3607,3608,3609,3610,3671,3676,3853,3926,3927,3931,4046,4078,4102,4104,4151,4156,4171,4182,4201,4204,4250,4256,4257,4260,4278,4354,4371,4444,4445,4450,4492,4497,4498,29997,32114,32185,32188,32190,32195,32197,32198,32199,32200,32201,32202,32209,32210,32217,32284,32643,32644,33135,33137,33140,33168,33174,33197,33201,33203,33305,33310,35372,35375,35388,35389,35394,35397,35404,63407,64094,65095,65310,86323,86336,86801,86808,86836,87249,64067,8240,35407,8526,32204); + +SET @POOL := 564; + +DELETE FROM `pool_template` WHERE `description` LIKE '%Alterac Mountains%' AND `entry` BETWEEN @POOL+0 AND @POOL+9; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOL+0, 8, 'Bruiseweed in Alterac Mountains'), +(@POOL+1, 2, 'Kingsblood in Alterac Mountains'), +(@POOL+2, 12, 'Goldthorn in Alterac Mountains'), +(@POOL+3, 8, 'Khadgar\'s Whisker in Alterac Mountains'), +(@POOL+4, 2, 'Grave Moss in Alterac Mountains'), +(@POOL+5, 5, 'Wild Steelbloom in Alterac Mountains'), +(@POOL+6, 9, 'Wintersbite in Alterac Mountains'), +(@POOL+7, 8, 'Liferoot in Alterac Mountains'), +(@POOL+8, 11, 'Fadeleaf in Alterac Mountains'), +(@POOL+9, 1, 'Stranglekelp in Alterac Mountains'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE '%in Alterac Mountains%' AND `pool_entry` BETWEEN @POOL+0 AND @POOL+9; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(3030, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3031, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3034, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3038, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3111, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3112, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3176, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3362, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3545, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3564, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3607, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3608, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3609, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3610, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3671, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3676, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3853, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(32284, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(33168, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(35394, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(87249, @POOL+0, 0, 'Bruiseweed in Alterac Mountains'), +(3926, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(3927, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(3931, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4046, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4078, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4102, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4104, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4151, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4156, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4171, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4182, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4201, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4204, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4250, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4256, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4257, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4260, @POOL+5, 0, 'Wild Steelbloom in Alterac Mountains'), +(4278, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(4354, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(4371, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(21220, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(21279, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(32188, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(32202, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(32209, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(33174, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(33197, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(33305, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(63407, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(65095, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(86323, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(86336, @POOL+1, 0, 'Kingsblood in Alterac Mountains'), +(4444, @POOL+4, 0, 'Grave Moss in Alterac Mountains'), +(4445, @POOL+4, 0, 'Grave Moss in Alterac Mountains'), +(4450, @POOL+4, 0, 'Grave Moss in Alterac Mountains'), +(4492, @POOL+4, 0, 'Grave Moss in Alterac Mountains'), +(4497, @POOL+4, 0, 'Grave Moss in Alterac Mountains'), +(4498, @POOL+4, 0, 'Grave Moss in Alterac Mountains'), +(32644, @POOL+4, 0, 'Grave Moss in Alterac Mountains'), +(7357, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7379, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7388, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7389, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7391, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7396, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7397, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7401, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7402, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7403, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7404, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7405, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7406, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7408, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7409, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7415, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7420, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7421, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7422, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7424, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7451, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7452, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7457, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7459, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7465, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7507, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7508, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7510, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7511, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7527, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7550, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7552, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(32185, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(32197, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(33203, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(35372, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(65310, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(86801, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(86808, @POOL+7, 0, 'Liferoot in Alterac Mountains'), +(7576, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7585, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7621, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7646, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7647, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7665, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7668, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7670, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7675, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7678, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7683, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7684, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7685, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7688, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7689, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7690, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7691, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7696, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7699, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7702, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7704, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7707, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7721, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7723, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7738, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7760, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7768, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7774, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7775, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7797, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7820, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7822, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7825, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(32190, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(32195, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(33201, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(86836, @POOL+8, 0, 'Fadeleaf in Alterac Mountains'), +(7831, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(7843, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(7902, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(7906, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(7919, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(7959, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(7981, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(7982, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(7989, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8015, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8026, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8030, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8051, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8055, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8062, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8064, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8071, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8092, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8102, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8120, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8130, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8132, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8133, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8162, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8164, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8172, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8174, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(29997, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(32198, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(32200, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(32210, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(35375, @POOL+3, 0, 'Khadgar\'s Whisker in Alterac Mountains'), +(8190, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8191, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8192, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8193, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8194, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8195, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8196, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8197, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8198, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8199, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8200, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8201, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8202, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8203, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8204, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8205, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8206, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8207, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8208, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8209, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8210, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8211, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8212, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8213, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8214, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8215, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(32217, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(33135, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(33137, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(33310, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(35389, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(35397, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(35404, @POOL+6, 0, 'Wintersbite in Alterac Mountains'), +(8621, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8622, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8624, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8625, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8630, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8631, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8633, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8634, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8635, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8649, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8654, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8655, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8680, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8684, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8685, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8715, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8716, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8747, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8749, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8752, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8753, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8769, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8792, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8798, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8819, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8851, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8855, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8867, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8873, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8878, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8885, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8892, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8926, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8939, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8946, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8974, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8984, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8987, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8988, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8990, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(8991, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9002, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9008, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9009, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9010, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9031, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9046, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9048, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9049, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9050, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9051, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9102, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9105, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9142, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9143, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9162, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9165, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9172, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9173, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9191, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9211, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(9213, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(32114, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(32199, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(32201, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(32643, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(33140, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(35388, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(64094, @POOL+2, 0, 'Goldthorn in Alterac Mountains'), +(64067, @POOL+9, 0, 'Stranglekelp in Alterac Mountains'), +(8240, @POOL+9, 0, 'Stranglekelp in Alterac Mountains'), +(35407, @POOL+9, 0, 'Stranglekelp in Alterac Mountains'), +(8526, @POOL+9, 0, 'Stranglekelp in Alterac Mountains'), +(32204, @POOL+9, 0, 'Stranglekelp in Alterac Mountains'); diff --git a/data/sql/updates/db_world/2022_12_06_02.sql b/data/sql/updates/db_world/2022_12_06_02.sql new file mode 100644 index 000000000..16c740562 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_02.sql @@ -0,0 +1,4 @@ +-- DB update 2022_12_06_01 -> 2022_12_06_02 +-- +UPDATE `quest_template_addon` SET `ExclusiveGroup`=10888 WHERE `id` IN (10888,13430); +UPDATE `quest_template_addon` SET `NextQuestID`=13430 WHERE `id` IN (10884,10885,10886); diff --git a/data/sql/updates/db_world/2022_12_06_03.sql b/data/sql/updates/db_world/2022_12_06_03.sql new file mode 100644 index 000000000..0c000ac7c --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_03.sql @@ -0,0 +1,23 @@ +-- DB update 2022_12_06_02 -> 2022_12_06_03 +-- Fix gossip for trainers +UPDATE `creature_template` SET `npcflag`=`npcflag`|1 WHERE `entry` IN (33631, 33636, 33676, 33679, 33680, 33682); + +DELETE FROM `creature_template_movement` WHERE `CreatureId` IN (33608,33609,33610,33611,33612,33613,33614,33615,33616,33617,33618,33619,33621,33623); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(33608, 1, 0, 0, 1, 0, 0, 0), +(33609, 1, 0, 0, 1, 0, 0, 0), +(33610, 1, 0, 0, 1, 0, 0, 0), +(33611, 1, 0, 0, 1, 0, 0, 0), +(33612, 1, 0, 0, 1, 0, 0, 0), +(33613, 1, 0, 0, 1, 0, 0, 0), +(33614, 1, 0, 0, 1, 0, 0, 0), +(33615, 1, 0, 0, 1, 0, 0, 0), +(33616, 1, 0, 0, 1, 0, 0, 0), +(33617, 1, 0, 0, 1, 0, 0, 0), +(33618, 1, 0, 0, 1, 0, 0, 0), +(33619, 1, 0, 0, 1, 0, 0, 0), +(33621, 1, 0, 0, 1, 0, 0, 0), +(33623, 1, 0, 0, 1, 0, 0, 0); + +-- Immune to PC/NPC & CANNOT_TURN - Prevent turning to face player +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|768, `unit_flags2`=`unit_flags2`|32768 WHERE `entry` IN (33608,33609,33610,33611,33612,33613,33614,33615,33616,33617,33618,33619,33621,33623); diff --git a/data/sql/updates/db_world/2022_12_06_04.sql b/data/sql/updates/db_world/2022_12_06_04.sql new file mode 100644 index 000000000..61985e18c --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_04.sql @@ -0,0 +1,5 @@ +-- DB update 2022_12_06_03 -> 2022_12_06_04 +-- +DELETE FROM `creature_template_addon` WHERE `entry` IN (37072); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(37072, 0, 0, 0, 1, 173, 0, ''); diff --git a/data/sql/updates/db_world/2022_12_06_05.sql b/data/sql/updates/db_world/2022_12_06_05.sql new file mode 100644 index 000000000..0dce7290d --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_05.sql @@ -0,0 +1,10 @@ +-- DB update 2022_12_06_04 -> 2022_12_06_05 +-- +DELETE FROM `gossip_menu` WHERE `MenuID`=9581 AND `TextID`=12932; +INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES +(9581, 12932); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 14 AND `SourceGroup`=9581; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(14, 9581, 12932, 0, 0, 15, 0, 128, 0, 0, 1, 0, 0, '', 'Portal Trainer - Show gossip menu if player is not a mage'), +(14, 9581, 12933, 0, 0, 15, 0, 128, 0, 0, 0, 0, 0, '', 'Portal Trainer - Show gossip menu if player is a mage'); diff --git a/data/sql/updates/db_world/2022_12_06_06.sql b/data/sql/updates/db_world/2022_12_06_06.sql new file mode 100644 index 000000000..301aa0e83 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_06.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_05 -> 2022_12_06_06 +-- +UPDATE `smart_scripts` SET `target_type`=2 WHERE (`entryorguid` = 22993) AND (`source_type` = 0) AND (`id` IN (5)); diff --git a/data/sql/updates/db_world/2022_12_06_07.sql b/data/sql/updates/db_world/2022_12_06_07.sql new file mode 100644 index 000000000..6d33147cd --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_07.sql @@ -0,0 +1,11 @@ +-- DB update 2022_12_06_06 -> 2022_12_06_07 +-- +DELETE FROM `creature_text` WHERE `CreatureID` = 18338; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(18338, 0, 0, 'Azeroth has cowered too long under our shadow! Now, feel the power of the Burning Crusade, and despair!', 14, 0, 100, 0, 0, 0, 16046, 3, 'Highlord Kruul - On Spawn'), +(18338, 0, 1, 'Your fate is sealed, Azeroth! I will find the Aspect Shards, and then you will not stand against our might!', 14, 0, 100, 0, 0, 0, 16047, 3, 'Highlord Kruul - On Spawn'), +(18338, 0, 2, 'Cower, little worms! Your heroes are nothing! Your saviors will be our first feast!', 14, 0, 100, 0, 0, 0, 16045, 3, 'Highlord Kruul - On Spawn'), +(18338, 0, 3, 'Where? Where are the Shards! You cannot hide them from us!', 14, 0, 100, 0, 0, 0, 17097, 3, 'Highlord Kruul - On Spawn'), +(18338, 0, 4, 'Your world will die, mortals! Your doom is now at hand!', 14, 0, 100, 0, 0, 0, 16044, 3, 'Highlord Kruul - On Spawn'), +(18338, 1, 0, 'Your own strength feeds me, $n!', 14, 0, 100, 0, 0, 0, 8461, 0, 'Highlord Kruul - Just Killed'), +(18338, 2, 0, 'Ha! This place is not yet worthy of my infliction.', 14, 0, 100, 0, 0, 0, 16048, 0, 'Highlord Kruul - On Despawn'); diff --git a/data/sql/updates/db_world/2022_12_06_08.sql b/data/sql/updates/db_world/2022_12_06_08.sql new file mode 100644 index 000000000..ea4a36b6b --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_08.sql @@ -0,0 +1,21 @@ +-- DB update 2022_12_06_07 -> 2022_12_06_08 +-- Normal Mode regular creatures award 5 rep. Heroic awards 15 +UPDATE `creature_onkill_reputation` SET `RewOnKillRepValue1` = 5, `RewOnKillRepValue2` = 5 WHERE `creature_id` IN ( +17370, -- Laughing Skull Enforcer +17626, -- Laughing Skull Legionnaire +17624, -- Laughing Skull Warden +17397, -- Shadowmoon Adept +17491, -- Laughing Skull Rogue +17371, -- Shadowmoon Warlock +17395, -- Shadowmoon Summoner +17414, -- Shadowmoon Technician +17398, -- Nascent Fel Orc +17429, -- Fel Orc Neophyte +18894, -- Fel Guard Brute +17653 -- Shadowmoon Channeler +); +-- One of these heroic creatures awarded 1 instead of 3 and I forgot to check which +UPDATE `creature_onkill_reputation` SET `RewOnKillRepValue1` = 3, `RewOnKillRepValue2` = 3 WHERE `creature_id` IN ( +18606, -- Hellfire Imp +21646 -- Hellfire Familiar +); diff --git a/data/sql/updates/db_world/2022_12_06_09.sql b/data/sql/updates/db_world/2022_12_06_09.sql new file mode 100644 index 000000000..78032128b --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_09.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_08 -> 2022_12_06_09 +-- Set IMMUNE_TO_PC & IMMUNE_TO_NPC +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|768 WHERE (`entry` = 18161); diff --git a/data/sql/updates/db_world/2022_12_06_10.sql b/data/sql/updates/db_world/2022_12_06_10.sql new file mode 100644 index 000000000..48b18031d --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_10.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_09 -> 2022_12_06_10 +-- NOT_SELECTABLE, IMMUNE_TO_PC, IMMUNE_TO_NPC +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|33555200 WHERE `entry` IN (24222, 17378, 17407, 17408); diff --git a/data/sql/updates/db_world/2022_12_06_11.sql b/data/sql/updates/db_world/2022_12_06_11.sql new file mode 100644 index 000000000..72a321bb0 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_11.sql @@ -0,0 +1,13 @@ +-- DB update 2022_12_06_10 -> 2022_12_06_11 +-- Adds stealth detect aura +DELETE FROM `creature_template_addon` WHERE (`entry` = 17624); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17624, 0, 0, 0, 0, 0, 0, '18950'); +DELETE FROM `creature_addon` WHERE (`guid` IN (138187)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(138187, 1381870, 0, 0, 0, 0, 0, '18950'); +-- Remove Stealth detect smartai and reorder +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 17624; +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17624) AND (`source_type` = 0) AND (`id` IN (1, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17624, 0, 1, 0, 0, 0, 100, 0, 300, 1200, 15800, 15800, 0, 11, 9128, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Laughing Skull Warden - In Combat - Cast Battle Shout'); diff --git a/data/sql/updates/db_world/2022_12_06_12.sql b/data/sql/updates/db_world/2022_12_06_12.sql new file mode 100644 index 000000000..f30a03c27 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_12.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_11 -> 2022_12_06_12 +-- +UPDATE `smart_scripts` SET `event_chance`=30 WHERE (`entryorguid` = 17264) AND (`source_type` = 0) AND (`id` IN (0)); diff --git a/data/sql/updates/db_world/2022_12_06_13.sql b/data/sql/updates/db_world/2022_12_06_13.sql new file mode 100644 index 000000000..df1f05897 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_13.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_12 -> 2022_12_06_13 +-- Updates condition for Drain Schematics (24330) drop with prerequisite of having completed quest As the Crow Flies (9718) +UPDATE `conditions` SET `ConditionValue1` = 9718 WHERE `ConditionTypeOrReference` = 8 AND `SourceEntry` = 24330; diff --git a/data/sql/updates/db_world/2022_12_06_14.sql b/data/sql/updates/db_world/2022_12_06_14.sql new file mode 100644 index 000000000..c55fb7d4b --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_14.sql @@ -0,0 +1,5 @@ +-- DB update 2022_12_06_13 -> 2022_12_06_14 +-- +DELETE FROM `creature_text` WHERE `CreatureID`=15264 AND `groupid`=1; +INSERT INTO `creature_text` VALUES +(15264,1,0,'%s shares his powers with his brethren.',16,0,100,0,0,0,11692,0,'Anubisath Sentinel Emote'); diff --git a/data/sql/updates/db_world/2022_12_06_15.sql b/data/sql/updates/db_world/2022_12_06_15.sql new file mode 100644 index 000000000..23ab72b6a --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_15.sql @@ -0,0 +1,795 @@ +-- DB update 2022_12_06_14 -> 2022_12_06_15 +-- TrinityCore - WowPacketParser +-- File name: 3.4.0.46368_Auchenai Crypts.pkt +-- Detected build: V3_4_0_46368 +-- Detected locale: enUS +-- Targeted database: WrathOfTheLichKing +-- Parsing date: 11/18/2022 11:46:05 + +SET @CGUID := 132400; + +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+41; +INSERT INTO `creature` (`guid`, `id1`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES +(@CGUID+0 , 18778, 558, 3790, 3790, 3, 1, 0, 141.688201904296875, -17.8009662628173828, 9.308135986328125, 2.129301786422729492, 86400, 0, 0, 3914, 2846, 0, 0, 0, 0, 46368), -- 18778 (Area: 3790 - Difficulty: 1) (Auras: ) +(@CGUID+1 , 18726, 558, 3790, 3790, 3, 1, 0, 72.23728179931640625, -139.230804443359375, 41.13397598266601562, 3.973823785781860351, 86400, 10, 0, 3914, 2846, 1, 0, 0, 0, 46368), -- 18726 (Area: 3790 - Difficulty: 1) (Auras: ) (possible waypoints or random movement) +(@CGUID+2 , 14881, 558, 3790, 3790, 3, 1, 0, 45.05952835083007812, -22.7702369689941406, -0.06518066674470901, 1.5471726655960083, 86400, 10, 0, 8, 0, 1, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+3 , 18726, 558, 3790, 3790, 3, 1, 0, 146.81549072265625, 46.86194992065429687, 25.45572662353515625, 1.716990828514099121, 86400, 10, 0, 3785, 2790, 1, 0, 0, 0, 46368), -- 18726 (Area: 3790 - Difficulty: 1) (Auras: ) (possible waypoints or random movement) +(@CGUID+4 , 18558, 558, 3790, 3790, 3, 1, 0, 60.76089859008789062, 14.71425914764404296, 3.01380324363708496, 4.572762489318847656, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18558 (Area: 3790 - Difficulty: 1) (Auras: 33422 - 33422) (possible waypoints or random movement) +(@CGUID+5 , 14881, 558, 3790, 3790, 3, 1, 0, 92.6985931396484375, 39.83838272094726562, 4.261242866516113281, 3.175329923629760742, 86400, 10, 0, 8, 0, 1, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+6 , 18559, 558, 3790, 3790, 3, 1, 0, 103.51043701171875, -31.661163330078125, 2.187038183212280273, 1.361356854438781738, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18559 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+7 , 14881, 558, 3790, 3790, 3, 1, 0, 97.67818450927734375, -48.17626953125, 13.02889537811279296, 3.892084121704101562, 86400, 0, 0, 8, 0, 0, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) +(@CGUID+8 , 18559, 558, 3790, 3790, 3, 1, 0, 126.1765975952148437, 27.94812965393066406, -0.0451296642422676, 5.288347721099853515, 86400, 10, 0, 4731, 8370, 1, 0, 0, 0, 46368), -- 18559 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+9 , 18557, 558, 3790, 3790, 3, 1, 0, 127.6752700805664062, -9.82014083862304687, 0.99261629581451416, 4.747295379638671875, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18557 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+10, 18726, 558, 3790, 3790, 3, 1, 0, 97.7019195556640625, -196.2841796875, 32.13418960571289062, 3.175072669982910156, 86400, 10, 0, 3914, 2846, 1, 0, 0, 0, 46368), -- 18726 (Area: 3790 - Difficulty: 1) (Auras: ) (possible waypoints or random movement) +(@CGUID+11, 18556, 558, 3790, 3790, 3, 1, 0, 163.4202117919921875, -22.1444644927978515, 3.989299297332763671, 3.50811171531677246, 86400, 10, 0, 5914, 0, 1, 0, 0, 0, 46368), -- 18556 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+12, 14881, 558, 3790, 3790, 3, 1, 0, 159.0821685791015625, 48.30177688598632812, 13.00515556335449218, 2.722713708877563476, 86400, 0, 0, 8, 0, 0, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) +(@CGUID+13, 18557, 558, 3790, 3790, 3, 1, 0, 187.840087890625, -15.5929212570190429, 0.094242662191390991, 0.797547459602355957, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18557 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+14, 18557, 558, 3790, 3790, 3, 1, 0, 213.835174560546875, -4.47357988357543945, 27.13109397888183593, 3.855632543563842773, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18557 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+15, 18726, 558, 3790, 3790, 3, 1, 0, 228.5708770751953125, -154.554794311523437, 42.4182281494140625, 4.082814216613769531, 86400, 10, 0, 3914, 2846, 1, 0, 0, 0, 46368), -- 18726 (Area: 3790 - Difficulty: 1) (Auras: ) (possible waypoints or random movement) +(@CGUID+16, 18559, 558, 3790, 3790, 3, 1, 0, 235.888214111328125, 37.071319580078125, 26.60670852661132812, 6.230825424194335937, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18559 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+17, 18558, 558, 3790, 3790, 3, 1, 0, 233.9306640625, -81.6968917846679687, 26.59130859375, 1.873605251312255859, 86400, 10, 0, 4731, 8370, 1, 0, 0, 0, 46368), -- 18558 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+18, 14881, 558, 3790, 3790, 3, 1, 0, 231.3909759521484375, -89.6042861938476562, 26.59129714965820312, 3.194384336471557617, 86400, 10, 0, 8, 0, 1, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+19, 14881, 558, 3790, 3790, 3, 1, 0, 246.479034423828125, 28.41371917724609375, -0.0931381732225418, 2.503427028656005859, 86400, 10, 0, 8, 0, 1, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+20, 18559, 558, 3790, 3790, 3, 1, 0, 248.70538330078125, 8.750345230102539062, -0.05698036402463912, 4.583363533020019531, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18559 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+21, 18559, 558, 3790, 3790, 3, 1, 0, 243.87628173828125, -83.900970458984375, 26.59127998352050781, 1.63226020336151123, 86400, 10, 0, 4731, 8370, 1, 0, 0, 0, 46368), -- 18559 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+22, 18556, 558, 3790, 3790, 3, 1, 0, 186.60491943359375, -142.1177978515625, 26.49381256103515625, 1.495209813117980957, 86400, 10, 0, 5914, 0, 1, 0, 0, 0, 46368), -- 18556 (Area: 3790 - Difficulty: 1) (Auras: 32828 - 32828, 35838 - 35838) (possible waypoints or random movement) +(@CGUID+23, 14881, 558, 3790, 3790, 3, 1, 0, 279.230072021484375, -164.819198608398437, 26.59128189086914062, 5.252141952514648437, 86400, 10, 0, 8, 0, 1, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+24, 14881, 558, 3790, 3790, 3, 1, 0, 265.3153076171875, -165.703216552734375, 26.59129714965820312, 0.433016598224639892, 86400, 10, 0, 8, 0, 1, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+25, 18557, 558, 3790, 3790, 3, 1, 0, 223.129425048828125, -185.3570556640625, 26.59128952026367187, 3.803879976272583007, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18557 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+26, 14881, 558, 3790, 3790, 3, 1, 0, 242.442474365234375, -197.4185791015625, 26.78278923034667968, 0.544354975223541259, 86400, 10, 0, 8, 0, 1, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+27, 14881, 558, 3790, 3790, 3, 1, 0, 183.240753173828125, -184.31024169921875, 26.5577239990234375, 1.310078978538513183, 86400, 10, 0, 8, 0, 1, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) (possible waypoints or random movement) +(@CGUID+28, 18559, 558, 3790, 3790, 3, 1, 0, 152.7404937744140625, -152.847808837890625, 19.01497459411621093, 3.115509033203125, 86400, 10, 0, 4731, 8370, 1, 0, 0, 0, 46368), -- 18559 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+29, 18557, 558, 3790, 3790, 3, 1, 0, 252.762115478515625, -143.580169677734375, 31.34482765197753906, 3.944444179534912109, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18557 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+30, 18557, 558, 3790, 3790, 3, 1, 0, 63.40744400024414062, -175.263900756835937, 15.34021472930908203, 6.143558979034423828, 86400, 10, 0, 4731, 8370, 1, 0, 0, 0, 46368), -- 18557 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+31, 18558, 558, 3790, 3790, 3, 1, 0, 108.3681259155273437, -168.1009521484375, 14.66339969635009765, 4.031710624694824218, 86400, 10, 0, 4731, 8370, 1, 0, 0, 0, 46368), -- 18558 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+32, 18726, 558, 3790, 3790, 3, 1, 0, 25.89444541931152343, -345.461029052734375, 46.5911712646484375, 1.54946136474609375, 86400, 10, 0, 3914, 2846, 1, 0, 0, 0, 46368), -- 18726 (Area: 3790 - Difficulty: 1) (Auras: ) (possible waypoints or random movement) +(@CGUID+35, 14881, 558, 3790, 3790, 3, 1, 0, -109.882362365722656, -154.428543090820312, 26.5885162353515625, 3.14505171775817871, 86400, 0, 0, 8, 0, 0, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) +(@CGUID+36, 18556, 558, 3790, 3790, 3, 1, 0, -130.409500122070312, -169.439208984375, 26.58745956420898437, 0.149694308638572692, 86400, 10, 0, 6116, 0, 1, 0, 0, 0, 46368), -- 18556 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838, 32828 - 32828) (possible waypoints or random movement) +(@CGUID+37, 18558, 558, 3790, 3790, 3, 1, 0, -144.49114990234375, -158.025375366210937, 26.58998870849609375, 1.594105005264282226, 86400, 10, 0, 4892, 8538, 1, 0, 0, 0, 46368), -- 18558 (Area: 3790 - Difficulty: 1) (Auras: 35838 - 35838) (possible waypoints or random movement) +(@CGUID+38, 14881, 558, 3790, 3790, 3, 1, 0, -132.335433959960937, -243.223098754882812, 26.33264350891113281, 2.764749526977539062, 86400, 10, 0, 8, 0, 1, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) (possible waypoints or random movement) +-- (@CGUID+39, 18499, 558, 3790, 3790, 3, 1, 0, -143.103179931640625, -190.384490966796875, 26.67429924011230468, 4.689732074737548828, 86400, 0, 0, 6604, 8538, 0, 0, 0, 0, 46368), -- 18499 (Area: 3790 - Difficulty: 1) (Auras: 33422 - 33422) - !!! might be temporary spawn !!! +(@CGUID+40, 14881, 558, 3790, 3790, 3, 1, 0, -172.6209716796875, -314.437774658203125, 27.149200439453125, 4.899399280548095703, 86400, 0, 0, 8, 0, 0, 0, 0, 0, 46368), -- 14881 (Area: 3790 - Difficulty: 1) +(@CGUID+41, 14881, 558, 3790, 3790, 3, 1, 0, -126.184173583984375, -322.9429931640625, 28.4794464111328125, 4.805230140686035156, 86400, 0, 0, 8, 0, 0, 0, 0, 0, 46368); -- 14881 (Area: 3790 - Difficulty: 1) +-- (@CGUID+42, 18499, 558, 3790, 3790, 3, 1, 0, -119.939155578613281, -163.717010498046875, 26.67186164855957031, 0.069813169538974761, 86400, 0, 0, 6604, 8538, 0, 0, 0, 0, 46368), -- 18499 (Area: 3790 - Difficulty: 1) (Auras: 33422 - 33422) - !!! might be temporary spawn !!! +-- (@CGUID+43, 18499, 558, 3790, 3790, 3, 1, 0, -148.999969482421875, -157.538055419921875, 26.67399024963378906, 3.255656719207763671, 86400, 0, 0, 6387, 8370, 0, 0, 0, 0, 46368); -- 18499 (Area: 3790 - Difficulty: 1) (Auras: 33422 - 33422) - !!! might be temporary spawn !!! + +-- Cosmetic Flying creatures +UPDATE `creature_template_addon` SET `auras` = '32460' WHERE `entry` IN (18726, 18778); +-- ID - 35838 Ghost Visual +DELETE FROM `creature_template_addon` WHERE `entry` IN (18556, 18557, 18558, 18559, 18506); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(18556, 0, 0, 0, 0, 0, 0, '32828 35838 35841 35850'), +(18557, 0, 0, 0, 0, 0, 0, '35838'), +(18558, 0, 0, 0, 0, 0, 0, '35838'), +(18559, 0, 0, 0, 0, 0, 0, '35838'), +(18506, 0, 0, 0, 0, 0, 0, '35841 35850'); -- Raging Soul + +-- Correct Movement Speed of Auchenai Monks (Previously 1,6 and 1,71429) +UPDATE `creature_template` SET `speed_walk` = 1, `speed_run` = 1.14286 WHERE (`entry` = 18497); + +SET @NPC := @CGUID+1; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '32460'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,73.350945,-138.00761,31.271748,NULL,0,2,0,100,0), +(@PATH,2,72.23728,-139.2308,41.133976,NULL,0,2,0,100,0), +(@PATH,3,71.92045,-139.5788,43.93974,NULL,0,2,0,100,0), +(@PATH,4,44.709515,-139.31296,43.773067,NULL,0,2,0,100,0), +(@PATH,5,23.519997,-138.49461,43.661957,NULL,0,2,0,100,0), +(@PATH,6,-20.031794,-137.46468,43.273064,NULL,0,2,0,100,0), +(@PATH,7,-20.031794,-137.46468,43.273064,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+3; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '32460'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,151.24632,44.323353,15.399155,NULL,0,2,0,100,0), +(@PATH,2 ,147.2805,46.17681,24.390093,NULL,0,2,0,100,0), +(@PATH,3 ,146.81526,46.394245,25.444843,NULL,0,2,0,100,0), +(@PATH,4 ,146.69821,37.811546,25.500387,NULL,0,2,0,100,0), +(@PATH,5 ,146.4773,28.050829,25.667048,NULL,0,2,0,100,0), +(@PATH,6 ,147.59975,13.665521,25.611506,NULL,0,2,0,100,0), +(@PATH,7 ,148.03667,-3.350005,25.750395,NULL,0,2,0,100,0), +(@PATH,8 ,148.1382,-22.668484,25.444832,NULL,0,2,0,100,0), +(@PATH,9 ,147.31918,-37.111103,25.333727,NULL,0,2,0,100,0), +(@PATH,10,146.81532,-46.187805,25.333723,NULL,0,2,0,100,0), +(@PATH,11,146.81532,-46.187805,25.333723,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+10; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '32460'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,179.56317,-198.8384,10.106315,NULL,0,2,0,100,0), +(@PATH,2,157.18993,-196.71312,21.43171,NULL,0,2,0,100,0), +(@PATH,3,134.81668,-194.58784,32.757103,NULL,0,2,0,100,0), +(@PATH,4,108.52028,-195.8693,32.229393,NULL,0,2,0,100,0), +(@PATH,5,93.42153,-196.42836,32.118183,NULL,0,2,0,100,0), +(@PATH,6,93.42153,-196.42836,32.118183,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+15; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '32460'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1 ,232.20787,-145.59749,41.718987,NULL,0,2,0,100,0), +(@PATH,2 ,228.02461,-154.6508,42.452423,NULL,0,2,0,100,0), +(@PATH,3 ,225.33128,-160.47964,42.924637,NULL,0,2,0,100,0), +(@PATH,4 ,226.26433,-167.05211,43.61908,NULL,0,2,0,100,0), +(@PATH,5 ,228.99861,-171.22679,44.09132,NULL,0,2,0,100,0), +(@PATH,6 ,234.16539,-174.73897,44.61909,NULL,0,2,0,100,0), +(@PATH,7 ,240.23022,-175.16766,44.757957,NULL,0,2,0,100,0), +(@PATH,8 ,245.79956,-173.5961,44.836193,NULL,0,2,0,100,0), +(@PATH,9 ,250.73444,-170.3529,44.89179,NULL,0,2,0,100,0), +(@PATH,10,253.15332,-164.77332,44.44733,NULL,0,2,0,100,0), +(@PATH,11,251.40865,-158.42947,43.8496,NULL,0,2,0,100,0), +(@PATH,12,247.62373,-153.52211,43.168236,NULL,0,2,0,100,0), +(@PATH,13,241.58646,-149.26561,42.473785,NULL,0,2,0,100,0), +(@PATH,14,236.16528,-148.9468,42.22376,NULL,0,2,0,100,0), +(@PATH,15,231.14494,-151.02124,42.195972,NULL,0,2,0,100,0), +(@PATH,16,228.57088,-154.5548,42.41823,NULL,0,2,0,100,0), +(@PATH,17,228.57088,-154.5548,42.41823,NULL,0,2,0,100,0); + +SET @NPC := @CGUID+32; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '32460'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,24.944605,-358.5967,46.91501,NULL,0,2,0,100,0), +(@PATH,2,24.51828,-375.59692,47.02612,NULL,0,2,0,100,0), +(@PATH,3,24.289051,-397.9468,47.026104,NULL,0,2,0,100,0), +(@PATH,4,24.935328,-418.3117,46.803886,NULL,0,2,0,100,0), +(@PATH,5,25.588974,-434.98022,46.72057,NULL,0,2,0,100,0); + +-- Pathing for Phasing Soldier Entry: 18556 +SET @NPC := @CGUID+11; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '32828 35838 35841 35850'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,163.42021,-22.144464,3.9059505,NULL,0,0,491,100,0), +(@PATH,2,156.25214,-26.96173,7.3015285,NULL,0,0,0,100,0), +(@PATH,3,148.84656,-26.111628,9.093671,NULL,0,0,0,100,0), +(@PATH,4,143.56517,-26.607273,10.320737,NULL,0,0,0,100,0), +(@PATH,5,137.3586,-29.342598,11.133306,NULL,0,0,0,100,0), +(@PATH,6,132.71771,-32.661335,12.362364,NULL,0,0,0,100,0), +(@PATH,7,127.05344,-36.36787,11.95393,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F0000016F000061BFFA .go xyz 163.42021 -22.144464 3.9059505 + +-- Pathing for Phasing Soldier Entry: 18556 +SET @NPC := @CGUID+22; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '32828 35838 35841 35850'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,186.39815,-187.63376,26.586843,NULL,0,0,491,100,0), +(@PATH,2,186.01659,-170.86678,26.57505,NULL,0,0,0,100,0), +(@PATH,3,185.84586,-152.141,26.433743,NULL,0,0,0,100,0), +(@PATH,4,186.82649,-139.19202,26.515371,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F0000016F000061BFFB .go xyz 186.39815 -187.63376 26.586843 + +-- Pathing for Phasing Soldier Entry: 18556 +SET @NPC := @CGUID+36; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-140.33557,`position_y`=-182.85066,`position_z`=26.59173 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '32828 35838 35841 35850'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-140.33557,-182.85066,26.59173,NULL,0,0,491,100,0), +(@PATH,2,-139.43959,-177.26666,26.591074,NULL,0,0,0,100,0), +(@PATH,3,-137.69144,-172.42462,26.592718,NULL,0,0,0,100,0), +(@PATH,4,-130.4095,-169.43921,26.58746,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F0000016F0000E1BFFA .go xyz -140.33557 -182.85066 26.59173 + +-- Pathing for Phasing Cleric Entry: 18557 +SET @NPC := @CGUID+29; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=252.76212,`position_y`=-143.58017,`position_z`=31.344828 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,252.76212,-143.58017,31.344828,NULL,0,0,491,100,0), +(@PATH,2,247.20137,-141.40672,28.45697,NULL,0,0,0,100,0), +(@PATH,3,239.47426,-140.56499,26.604721,NULL,0,0,0,100,0), +(@PATH,4,232.98956,-142.09483,26.598186,NULL,0,0,0,100,0), +(@PATH,5,226.8533,-145.60709,26.592377,NULL,0,0,0,100,0), +(@PATH,6,223.00479,-149.41129,26.591297,NULL,0,0,0,100,0), +(@PATH,7,219.4117,-156.10533,26.591295,NULL,0,0,0,100,0), +(@PATH,8,218.31477,-163.05994,26.591297,NULL,0,0,0,100,0), +(@PATH,9,219.38469,-170.84055,26.591295,NULL,0,0,0,100,0), +(@PATH,10,222.65584,-177.14705,26.59129,NULL,0,0,0,100,0), +(@PATH,11,229.7245,-182.66959,26.591282,NULL,0,0,0,100,0), +(@PATH,12,233.93506,-186.75621,26.591286,NULL,0,0,0,100,0), +(@PATH,13,234.9648,-190.40332,26.59129,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F4000016F000061BFFA .go xyz 252.76212 -143.58017 31.344828 + +-- Pathing for Phasing Cleric Entry: 18557 +SET @NPC := @CGUID+25; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=265.72266,`position_y`=-167.39992,`position_z`=26.591297 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,265.72266,-167.39992,26.591297,NULL,0,0,491,100,0), +(@PATH,2,260.2587,-173.44904,26.5913,NULL,0,0,0,100,0), +(@PATH,3,254.21541,-174.24063,28.541336,NULL,0,0,0,100,0), +(@PATH,4,249.80678,-178.8307,29.993172,NULL,0,0,0,100,0), +(@PATH,5,243.34229,-182.10753,29.073282,NULL,0,0,0,100,0), +(@PATH,6,236.51315,-182.80513,26.591282,NULL,0,0,0,100,0), +(@PATH,7,230.59372,-180.36035,26.59128,NULL,0,0,0,100,0), +(@PATH,8,226.47932,-182.74487,26.591282,NULL,0,0,0,100,0), +(@PATH,9,223.12943,-185.35706,26.59129,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F4000016F0000E1BFFA .go xyz 265.72266 -167.39992 26.591297 + +-- Pathing for Phasing Cleric Entry: 18557 +SET @NPC := @CGUID+9; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=127.67527,`position_y`=-9.820141,`position_z`=0.9092922 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,127.67527,-9.820141,0.9092922,NULL,0,0,491,100,0), +(@PATH,2,129.5654,-17.583628,5.0594177,NULL,0,0,0,100,0), +(@PATH,3,129.5531,-21.944284,6.884782,NULL,0,0,0,100,0), +(@PATH,4,133.11812,-29.490608,10.753902,NULL,0,0,0,100,0), +(@PATH,5,136.52745,-31.686588,12.264767,NULL,0,0,0,100,0), +(@PATH,6,143.1685,-34.106094,13.614726,NULL,0,0,0,100,0), +(@PATH,7,150.10359,-36.330883,13.5456295,NULL,0,0,0,100,0), +(@PATH,8,154.84016,-37.25858,13.179008,NULL,0,0,0,100,0), +(@PATH,9,161.82185,-39.311287,12.2130375,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F4000016F000161BFFA .go xyz 127.67527 -9.820141 0.9092922 + +-- Pathing for Phasing Cleric Entry: 18557 +SET @NPC := @CGUID+13; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=170.21268,`position_y`=-18.678844,`position_z`=1.8106413 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,170.21268,-18.678844,1.8106413,NULL,0,0,491,100,0), +(@PATH,2,176.21935,-20.366,-0.12755382,NULL,0,0,0,100,0), +(@PATH,3,183.50932,-20.030233,-0.124699146,NULL,0,0,0,100,0), +(@PATH,4,187.84009,-15.592921,0.09424267,NULL,0,0,0,100,0), +(@PATH,5,191.94017,-6.714968,-0.12076864,NULL,0,0,0,100,0), +(@PATH,6,192.66939,2.518242,-0.116914734,NULL,0,0,0,100,0), +(@PATH,7,191.38432,9.125355,-0.11827608,NULL,0,0,0,100,0), +(@PATH,8,190.95491,15.178104,1.7854161,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F4000016F0001E1BFFA .go xyz 170.21268 -18.678844 1.8106413 + +-- Pathing for Phasing Cleric Entry: 18557 +SET @NPC := @CGUID+30; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=63.407444,`position_y`=-175.2639,`position_z`=15.340215 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,63.407444,-175.2639,15.340215,NULL,0,0,491,100,0), +(@PATH,2,63.922012,-164.90332,15.36321,NULL,0,0,0,100,0), +(@PATH,3,64.89777,-157.71608,15.324875,NULL,0,0,0,100,0), +(@PATH,4,63.779285,-154.1999,15.270904,NULL,0,0,0,100,0), +(@PATH,5,61.176,-152.29073,15.320725,NULL,0,0,0,100,0), +(@PATH,6,57.89829,-152.15157,15.305273,NULL,0,0,0,100,0), +(@PATH,7,54.855816,-154.90836,15.210086,NULL,0,0,0,100,0), +(@PATH,8,42.59613,-157.50063,14.917099,NULL,0,0,0,100,0), +(@PATH,9,38.038113,-157.83847,14.781163,NULL,0,0,0,100,0), +(@PATH,10,34.37812,-156.34639,14.540044,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F4000016F000261BFFA .go xyz 63.407444 -175.2639 15.340215 + +-- Pathing for Phasing Cleric Entry: 18557 +SET @NPC := @CGUID+14; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=219.37904,`position_y`=0.33060265,`position_z`=28.327349 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,219.37904,0.33060265,28.327349,NULL,0,0,491,100,0), +(@PATH,2,213.83517,-4.47358,27.131094,NULL,0,0,0,100,0), +(@PATH,3,212.30658,-9.702579,27.207218,NULL,0,0,0,100,0), +(@PATH,4,212.08582,-16.853407,27.295864,NULL,0,0,0,100,0), +(@PATH,5,212.82582,-22.971846,26.895174,NULL,0,0,0,100,0), +(@PATH,6,216.42055,-27.29053,26.591383,NULL,0,0,0,100,0), +(@PATH,7,222.45038,-29.665424,27.404846,NULL,0,0,0,100,0), +(@PATH,8,227.68648,-29.660278,27.280148,NULL,0,0,0,100,0), +(@PATH,9,237.29475,-29.352152,26.840483,NULL,0,0,0,100,0), +(@PATH,10,245.5611,-29.118198,26.610186,NULL,0,0,0,100,0), +(@PATH,11,256.06567,-29.392622,26.598423,NULL,0,0,0,100,0), +(@PATH,12,264.68683,-30.948347,26.591227,NULL,0,0,0,100,0), +(@PATH,13,273.67218,-31.774408,26.591225,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F4000016F0002E1BFFA .go xyz 219.37904 0.33060265 28.327349 + +-- Pathing for Phasing Sorcerer Entry: 18558 +SET @NPC := @CGUID+31; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=108.368126,`position_y`=-168.10095,`position_z`=14.6634 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,108.368126,-168.10095,14.6634,NULL,0,0,491,100,0), +(@PATH,2,94.0889,-166.98608,15.221693,NULL,0,0,0,100,0), +(@PATH,3,87.63592,-167.62035,15.353543,NULL,0,0,0,100,0), +(@PATH,4,83.18925,-169.28035,15.387257,NULL,0,0,0,100,0), +(@PATH,5,80.92766,-172.92093,15.428644,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F8000016F0000E1BFFA .go xyz 108.368126 -168.10095 14.6634 + +-- Pathing for Phasing Sorcerer Entry: 18558 +SET @NPC := @CGUID+4; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=60.7609,`position_y`=14.71426,`position_z`=2.9304667 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,60.7609,14.71426,2.9304667,NULL,0,0,491,100,0), +(@PATH,2,62.473858,-0.185765,-0.1819104,NULL,0,0,0,100,0), +(@PATH,3,60.937054,-19.739634,2.7972555,NULL,180000,0,492,100,0); +-- 0x204CB045C0121F8000016F000261BFFA .go xyz 60.7609 14.71426 2.9304667 + +-- Pathing for Phasing Sorcerer Entry: 18558 +SET @NPC := @CGUID+37; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-144.05402,-176.77612,26.591373,NULL,0,0,491,100,0), +(@PATH,2,-144.21027,-170.07382,26.590784,NULL,0,0,0,100,0), +(@PATH,3,-144.36652,-163.37152,26.590195,NULL,0,0,0,100,0), +(@PATH,4,-144.37608,-162.96107,26.58878,NULL,0,0,0,100,0), +(@PATH,5,-144.54129,-155.87457,26.590515,NULL,0,0,0,100,0), +(@PATH,6,-144.54129,-155.87457,26.590515,NULL,180000,0,492,100,0); + +-- Pathing for Phasing Sorcerer Entry: 18558 +SET @NPC := @CGUID+17; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,234.08588,-92.13391,26.591291,NULL,0,0,491,100,0), +(@PATH,2,234.09532,-91.47241,26.591291,NULL,0,0,0,100,0), +(@PATH,3,234.10477,-90.81091,26.591291,NULL,0,0,0,100,0), +(@PATH,4,234.46289,-89.07118,26.591288,NULL,0,0,0,100,0), +(@PATH,5,235.16656,-85.652824,26.59131,NULL,0,0,0,100,0), +(@PATH,6,234.99062,-85.08963,26.59131,NULL,0,0,0,100,0), +(@PATH,7,233.66092,-80.833466,26.591309,NULL,0,0,0,100,0), +(@PATH,8,233.66092,-80.833466,26.591309,NULL,180000,0,492,100,0); + +-- Pathing for Phasing Stalker Entry: 18559 +SET @NPC := @CGUID+20; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=254.08589,`position_y`=16.281115,`position_z`=1.0690411 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,254.08589,16.281115,1.0690411,NULL,0,0,491,100,0), +(@PATH,2,249.09479,11.751573,-0.057969235,NULL,0,0,0,100,0), +(@PATH,3,248.29317,5.573168,-0.05051643,NULL,0,0,0,100,0), +(@PATH,4,249.30978,0.292467,-0.04696809,NULL,0,0,0,100,0), +(@PATH,5,248.19304,-4.38714,-0.050115947,NULL,0,0,0,100,0), +(@PATH,6,245.5446,-7.974623,-0.058118563,NULL,0,0,0,100,0), +(@PATH,7,241.89896,-12.228353,-0.06918345,NULL,0,0,0,100,0), +(@PATH,8,239.66989,-16.145578,-0.07585467,NULL,0,0,0,100,0), +(@PATH,9,239.524,-20.53202,-0.06419688,NULL,0,0,0,100,0), +(@PATH,10,240.83255,-25.9776,-0.06601114,NULL,0,0,0,100,0), +(@PATH,11,244.28032,-28.857412,1.3836285,NULL,180000,0,492,100,0); +-- 0x204CB045C0121FC000016F000061BFFA .go xyz 254.08589 16.281115 1.0690411 + +-- Pathing for Phasing Stalker Entry: 18559 +SET @NPC := @CGUID+16; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=235.88821,`position_y`=37.07132,`position_z`=26.606709 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,235.88821,37.07132,26.606709,NULL,0,0,491,100,0), +(@PATH,2,247.22252,37.847027,20.479275,NULL,0,0,0,100,0), +(@PATH,3,257.5441,38.34387,13.4442425,NULL,0,0,0,100,0), +(@PATH,4,269.6288,37.601143,13.41417,NULL,0,0,0,100,0), +(@PATH,5,272.89047,36.50316,13.4086685,NULL,0,0,0,100,0), +(@PATH,6,274.30402,34.681675,13.410205,NULL,0,0,0,100,0), +(@PATH,7,274.67148,31.516829,13.418446,NULL,0,0,0,100,0), +(@PATH,8,274.31213,21.329618,13.449085,NULL,0,0,0,100,0), +(@PATH,9,274.1166,11.805699,6.4145527,NULL,0,0,0,100,0), +(@PATH,10,274.6112,1.604477,-0.08050743,NULL,180000,0,492,100,0); +-- 0x204CB045C0121FC000016F0000E1BFFA .go xyz 235.88821 37.07132 26.606709 + +-- Pathing for Phasing Stalker Entry: 18559 +SET @NPC := @CGUID+21; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,244.87045,-100.05577,26.59129,NULL,0,0,491,100,0), +(@PATH,2,244.45204,-93.25677,26.591284,NULL,0,0,0,100,0), +(@PATH,3,244.03363,-86.45776,26.591278,NULL,0,0,0,100,0), +(@PATH,4,243.87628,-83.90097,26.59128,NULL,0,0,0,100,0), +(@PATH,5,243.87628,-83.90097,26.59128,NULL,180000,0,492,100,0); + +-- Pathing for Phasing Stalker Entry: 18559 +SET @NPC := @CGUID+8; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=126.1766,`position_y`=27.948132,`position_z`=-0.105519295 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,126.1766,27.948132,-0.105519295,NULL,0,0,491,100,0), +(@PATH,2,130.59267,16.555323,-0.12910895,NULL,0,0,0,100,0), +(@PATH,3,130.62326,8.567173,-0.1291158,NULL,0,0,0,100,0), +(@PATH,4,132.76746,2.109716,-0.12837085,NULL,0,0,0,100,0), +(@PATH,5,135.87859,-4.567481,1.1544765,NULL,0,0,0,100,0), +(@PATH,6,141.38376,-6.336381,1.8670539,NULL,0,0,0,100,0), +(@PATH,7,150.151,-6.409088,1.8575414,NULL,0,0,0,100,0), +(@PATH,8,158.26154,-6.41169,1.2996879,NULL,0,0,0,100,0), +(@PATH,9,162.83406,-10.075247,1.2974932,NULL,0,0,0,100,0), +(@PATH,10,166.6864,-15.174739,2.4810312,NULL,180000,0,492,100,0); +-- 0x204CB045C0121FC000016F000261BFFA .go xyz 126.1766 27.948132 -0.105519295 + +-- Pathing for Phasing Stalker Entry: 18559 +SET @NPC := @CGUID+6; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=103.51044,`position_y`=-31.661163,`position_z`=2.2046442 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,103.51044,-31.661163,2.2046442,NULL,0,0,491,100,0), +(@PATH,2,104.59338,-23.583656,-0.07155674,NULL,0,0,0,100,0), +(@PATH,3,102.89938,-19.097414,-0.043581124,NULL,0,0,0,100,0), +(@PATH,4,102.20383,-13.462062,0.18044646,NULL,0,0,0,100,0), +(@PATH,5,104.55045,-7.681597,0.21229711,NULL,0,0,0,100,0), +(@PATH,6,105.15511,5.540357,0.5351643,NULL,0,0,0,100,0), +(@PATH,7,103.2398,12.823616,-0.098418705,NULL,0,0,0,100,0), +(@PATH,8,104.68291,17.770578,0.1706654,NULL,0,0,0,100,0), +(@PATH,9,108.10148,21.937067,0.16965415,NULL,0,0,0,100,0), +(@PATH,10,111.47976,22.290707,0.009937675,NULL,180000,0,492,100,0); +-- 0x204CB045C0121FC000016F0002E1BFFA .go xyz 103.51044 -31.661163 2.2046442 + +-- Pathing for Phasing Stalker Entry: 18559 +SET @NPC := @CGUID+28; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=182.65771,`position_y`=-140.55536,`position_z`=26.389036 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '35838'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,182.65771,-140.55536,26.389036,NULL,0,0,491,100,0), +(@PATH,2,181.64246,-147.2506,26.326574,NULL,0,0,0,100,0), +(@PATH,3,179.35037,-150.43063,26.26074,NULL,0,0,0,100,0), +(@PATH,4,174.82385,-152.08482,26.326044,NULL,0,0,0,100,0), +(@PATH,5,169.2696,-152.8632,26.444696,NULL,0,0,0,100,0), +(@PATH,6,162.41,-153.10008,26.06021,NULL,0,0,0,100,0), +(@PATH,7,152.7405,-152.84781,19.014975,NULL,0,0,0,100,0), +(@PATH,8,146.63557,-152.49663,14.267556,NULL,180000,0,492,100,0); +-- 0x204CB045C0121FC000016F000361BFFA .go xyz 182.65771 -140.55536 26.389036 + +-- Pathing for Auchenai Monk Entry: 18497 +SET @NPC := 83390; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=139.49518,`position_y`=2.368823,`position_z`=-0.12775199 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,139.49518,2.368823,-0.12775199,NULL,0,0,0,100,0), +(@PATH,2,148.84927,3.26893,-0.12693678,NULL,0,0,0,100,0), +(@PATH,3,158.58562,2.221657,-0.12592205,NULL,0,0,0,100,0), +(@PATH,4,164.71635,9.033345,-0.12607376,NULL,0,0,0,100,0), +(@PATH,5,164.69518,17.096685,0.042672906,NULL,0,0,0,100,0), +(@PATH,6,164.39384,27.017565,-0.03106403,NULL,0,0,0,100,0), +(@PATH,7,158.12143,30.15233,-0.110156626,NULL,0,0,0,100,0), +(@PATH,8,154.54019,31.208351,-0.10033583,NULL,0,0,0,100,0), +(@PATH,9,153.50821,38.660362,4.231137,NULL,40000,0,0,100,0), +(@PATH,10,150.59761,30.838694,-0.10033666,NULL,0,0,0,100,0), +(@PATH,11,132.99837,30.463366,-0.09167093,NULL,0,0,0,100,0), +(@PATH,12,130.24228,29.550669,-0.09694571,NULL,0,0,0,100,0), +(@PATH,13,129.23076,20.53834,-0.12918013,NULL,0,0,0,100,0), +(@PATH,14,130.77061,10.76564,0.09537189,NULL,0,0,0,100,0), +(@PATH,15,130.48642,2.902071,-0.12865439,NULL,0,0,0,100,0), +(@PATH,16,129.59958,-2.468409,0.06528245,NULL,0,0,0,100,0), +(@PATH,17,125.65282,-3.223653,0.120242454,NULL,40000,0,0,100,0); +-- 0x204CB045C012104000016F0002E1BFFA .go xyz 139.49518 2.368823 -0.12775199 + +-- Pathing for Auchenai Soulpriest Entry: 18493 +SET @NPC := 83386; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=268.32703,`position_y`=-3.305813,`position_z`=-0.0678567 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,268.32703,-3.305813,-0.0678567,NULL,0,0,0,100,0), +(@PATH,2,269.36295,21.878204,13.413179,NULL,0,0,0,100,0), +(@PATH,3,268.90814,29.680952,13.439169,NULL,0,0,0,100,0), +(@PATH,4,266.3649,32.88496,13.436618,NULL,0,0,0,100,0), +(@PATH,5,257.8986,33.67169,13.394914,NULL,0,0,0,100,0), +(@PATH,6,237.949,32.514015,26.632038,NULL,0,0,0,100,0), +(@PATH,7,217.88676,33.820267,26.621796,NULL,0,0,0,100,0), +(@PATH,8,211.06705,32.123497,26.631569,NULL,0,0,0,100,0), +(@PATH,9,209.0718,26.146828,26.627604,NULL,0,0,0,100,0), +(@PATH,10,215.35312,3.553464,28.625824,NULL,0,0,0,100,0), +(@PATH,11,211.31487,-9.173203,27.079954,NULL,0,0,0,100,0), +(@PATH,12,210.42763,-25.172428,26.591162,NULL,0,0,0,100,0), +(@PATH,13,212.88191,-30.137917,26.591192,NULL,0,0,0,100,0), +(@PATH,14,216.55647,-32.453876,26.591314,NULL,0,0,0,100,0), +(@PATH,15,226.7893,-32.321796,27.100355,NULL,0,0,0,100,0), +(@PATH,16,239.0565,-32.50906,26.59868,NULL,0,0,0,100,0), +(@PATH,17,226.7893,-32.321796,27.100355,NULL,0,0,0,100,0), +(@PATH,18,216.55647,-32.453876,26.591314,NULL,0,0,0,100,0), +(@PATH,19,212.88191,-30.137917,26.591192,NULL,0,0,0,100,0), +(@PATH,20,210.42763,-25.172428,26.591162,NULL,0,0,0,100,0), +(@PATH,21,211.31487,-9.173203,27.079954,NULL,0,0,0,100,0), +(@PATH,22,215.35312,3.553464,28.625824,NULL,0,0,0,100,0), +(@PATH,23,209.0718,26.146828,26.627604,NULL,0,0,0,100,0), +(@PATH,24,211.06705,32.123497,26.631569,NULL,0,0,0,100,0), +(@PATH,25,217.88676,33.820267,26.621796,NULL,0,0,0,100,0), +(@PATH,26,237.949,32.514015,26.632038,NULL,0,0,0,100,0), +(@PATH,27,257.8986,33.67169,13.394914,NULL,0,0,0,100,0), +(@PATH,28,266.3649,32.88496,13.436618,NULL,0,0,0,100,0), +(@PATH,29,268.90814,29.680952,13.439169,NULL,0,0,0,100,0), +(@PATH,30,269.36252,21.88547,13.4133215,NULL,0,0,0,100,0); +-- 0x204CB045C0120F4000016F000061BFFA .go xyz 268.32703 -3.305813 -0.0678567 + +-- Pathing for Auchenai Soulpriest Entry: 18493 +SET @NPC := 83391; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=238.85509,`position_y`=-84.930984,`position_z`=26.591291 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,238.85509,-84.930984,26.591291,NULL,0,0,0,100,0), +(@PATH,2,239.11743,-51.329662,26.591269,NULL,0,0,0,100,0), +(@PATH,3,238.85509,-84.930984,26.591291,NULL,0,0,0,100,0), +(@PATH,4,239.11603,-118.809,26.59132,NULL,0,0,0,100,0), +(@PATH,5,239.11743,-51.329662,26.591269,NULL,0,0,0,100,0); +-- 0x204CB045C0120F4000016F0004E1BFFA .go xyz 238.85509 -84.930984 26.591291 + +UPDATE `creature` SET `id1`=18493 WHERE `id1`=18497 AND `guid` IN (83391, 83392); + +-- Pathing for Auchenai Vindicator Entry: 18495 +SET @NPC := 83392; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=166.70355,`position_y`=-163.66641,`position_z`=26.316566 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,166.70355,-163.66641,26.316566,NULL,0,0,0,100,0), +(@PATH,2,143.57632,-163.27176,12.563573,NULL,0,0,0,100,0), +(@PATH,3,122.65221,-163.04219,13.356737,NULL,0,0,0,100,0), +(@PATH,4,104.99422,-162.99231,14.774395,NULL,0,0,0,100,0), +(@PATH,5,81.24179,-163.2077,15.368842,NULL,0,0,0,100,0), +(@PATH,6,64.53549,-162.75394,15.386806,NULL,0,0,0,100,0), +(@PATH,7,48.272915,-162.58008,15.13582,NULL,0,0,0,100,0), +(@PATH,8,64.53549,-162.75394,15.386806,NULL,0,0,0,100,0), +(@PATH,9,81.24179,-163.2077,15.368842,NULL,0,0,0,100,0), +(@PATH,10,104.99422,-162.99231,14.774395,NULL,0,0,0,100,0), +(@PATH,11,122.65221,-163.04219,13.356737,NULL,0,0,0,100,0), +(@PATH,12,143.57632,-163.27176,12.563573,NULL,0,0,0,100,0); +-- 0x204CB045C0120FC000016F0001E1BFFA .go xyz 166.70355 -163.66641 26.316566 + +-- Pathing for Auchenai Soulpriest Entry: 18493 +SET @NPC := 83405; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-105.24392,`position_y`=-388.10626,`position_z`=26.589207 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-105.24392,-388.10626,26.589207,NULL,0,0,0,100,0), +(@PATH,2,-121.20291,-388.12982,26.58856,NULL,0,0,0,100,0), +(@PATH,3,-139.48105,-387.83615,26.589808,NULL,0,0,0,100,0), +(@PATH,4,-143.4483,-384.72183,26.590303,NULL,0,0,0,100,0), +(@PATH,5,-144.98119,-375.0744,26.59283,NULL,0,0,0,100,0), +(@PATH,6,-144.88542,-342.67935,26.591034,NULL,0,0,0,100,0), +(@PATH,7,-144.98119,-375.0744,26.59283,NULL,0,0,0,100,0), +(@PATH,8,-143.4483,-384.72183,26.590303,NULL,0,0,0,100,0), +(@PATH,9,-139.48105,-387.83615,26.589808,NULL,0,0,0,100,0), +(@PATH,10,-121.20291,-388.12982,26.58856,NULL,0,0,0,100,0); +-- 0x203B1C45C0120F400006ED0001E1DDF1 .go xyz -105.24392 -388.10626 26.589207 + +-- Pathing for Auchenai Monk Entry: 18497 +SET @NPC := 83404; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=222.74164,`position_y`=13.925282,`position_z`=-0.070625804 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,222.74164,13.925282,-0.070625804,NULL,12000,0,0,100,0), +(@PATH,2,238.14801,13.610128,-0.06791845,NULL,12000,0,0,100,0); +-- 0x203B1C45C01210400006ED0002E1DDF1 .go xyz 222.74164 13.925282 -0.070625804 + +-- Emote State for Monks near Shirrak +DELETE FROM `creature_addon` WHERE (`guid` IN (83395, 83394, 83407, 83409)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(83395, 0, 0, 0, 1, 375, 0, NULL), +(83407, 0, 0, 0, 1, 375, 0, NULL), +(83394, 0, 0, 0, 1, 375, 0, NULL), +(83409, 0, 0, 0, 1, 375, 0, NULL); + +-- Delete redundant waypoints +DELETE FROM `waypoint_data` WHERE `id` IN (83374, 83385, 83378, 83406, 83372); +DELETE FROM `creature_addon` WHERE `guid` IN (83374*10, 83385*10, 83378*10, 83406*10, 83372*10); +UPDATE `creature` SET `wander_distance`=0, `MovementType`=0 WHERE `guid` IN (83374, 83385, 83378, 83406, 83372) AND `map`=558; + +-- Patrolling Formations +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (83405, 83392, 83386, 83391) AND `memberGUID` IN (83405, 83374, 83392, 83385, 83378, 83386, 83406, 83391, 83372); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(83405, 83405, 0, 0, 3), +(83405, 83374, 3.5, 90, 515), +(83392, 83392, 0, 0, 3), +(83392, 83385, 4, 135, 515), +(83392, 83378, 4, 225, 515), +(83386, 83386, 0, 0, 3), +(83386, 83406, 3.5, 180, 515), +(83391, 83391, 0, 0, 3), +(83391, 83372, 3.5, 180, 515); + +-- Static Formations +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (83352,83360,83368,83369,83373,83375,83380,83382,83384,83393,83394,83395,83396,83400,83415,83416,83423,83426,83427,83429,83356,83358) AND `memberGUID` IN (83352,83353,83360,83361,83368,83369,83371,83373,83375,83376,83377,83380,83381,83382,83384,83387,83389,83393,83394,83395,83396,83397,83398,83399,83400,83401,83402,83403,83404,83407,83408,83409,83410,83411,83412,83413,83414,83415,83416,83417,83418,83419,83420,83421,83422,83423,83424,83425,83426,83427,83428,83429,83430,83431,83432,83433,83434,83435,83436,83437,83438,83439,83440,83441,83442,83443,83444,83445,83446,83447,83448,83449,83450,83451,83452,88277,88278,88279,88280,88281,88283,88284,88285,88286,88287,88288,88289,88290,88291,83356,83357,83358,83363); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(83358, 83358, 0, 0, 3), +(83358, 83363, 0, 0, 3), +(83352, 83352, 0, 0, 3), +(83352, 83353, 0, 0, 3), +(83356, 83356, 0, 0, 3), +(83356, 83357, 0, 0, 3), +(83360, 83360, 0, 0, 3), +(83360, 83361, 0, 0, 3), +(83369, 83369, 0, 0, 3), +(83369, 83376, 0, 0, 3), +(83375, 83375, 0, 0, 3), +(83375, 83377, 0, 0, 3), +(83368, 83368, 0, 0, 3), +(83368, 83371, 0, 0, 3), +(83382, 83382, 0, 0, 3), +(83382, 83389, 0, 0, 3), +(83373, 83373, 0, 0, 3), +(83373, 83381, 0, 0, 3), +(83380, 83380, 0, 0, 3), +(83380, 83404, 0, 0, 3), +(83384, 83384, 0, 0, 3), +(83384, 83387, 0, 0, 3), +(83384, 83408, 0, 0, 3), +(83395, 83395, 0, 0, 3), +(83395, 83407, 0, 0, 3), +(83394, 83394, 0, 0, 3), +(83394, 83409, 0, 0, 3), +(83393, 83393, 0, 0, 3), +(83393, 83401, 0, 0, 3), +(83393, 83403, 0, 0, 3), +(83393, 83410, 0, 0, 3), +(83396, 83396, 0, 0, 3), +(83396, 83402, 0, 0, 3), +(83396, 83398, 0, 0, 3), +(83396, 83397, 0, 0, 3), +(83396, 83399, 0, 0, 3), +(83400, 83400, 0, 0, 3), +(83400, 83414, 0, 0, 3), +(83400, 83413, 0, 0, 3), +(83400, 83412, 0, 0, 3), +(83400, 83411, 0, 0, 3), +(83429, 83429, 0, 0, 3), +(83429, 83430, 0, 0, 3), +(83429, 83435, 0, 0, 3), +(83429, 83434, 0, 0, 3), +(83429, 83439, 0, 0, 3), +(83429, 83452, 0, 0, 3), +(83423, 83423, 0, 0, 3), +(83423, 83431, 0, 0, 3), +(83423, 83436, 0, 0, 3), +(83423, 83437, 0, 0, 3), +(83423, 83443, 0, 0, 3), +(83423, 83445, 0, 0, 3), +(83423, 83442, 0, 0, 3), +(83423, 83444, 0, 0, 3), +(83423, 83440, 0, 0, 3), +(83423, 88291, 0, 0, 3), +(83423, 83448, 0, 0, 3), +(83423, 83441, 0, 0, 3), +(83415, 83415, 0, 0, 3), +(83415, 83417, 0, 0, 3), +(83415, 83422, 0, 0, 3), +(83415, 83418, 0, 0, 3), +(83415, 83419, 0, 0, 3), +(83415, 83424, 0, 0, 3), +(83415, 83425, 0, 0, 3), +(83415, 83421, 0, 0, 3), +(83415, 83433, 0, 0, 3), +(83415, 83420, 0, 0, 3), +(83426, 83426, 0, 0, 3), +(83426, 88278, 0, 0, 3), +(83426, 83428, 0, 0, 3), +(83426, 83438, 0, 0, 3), +(83426, 83432, 0, 0, 3), +(83416, 83416, 0, 0, 3), +(83416, 88279, 0, 0, 3), +(83416, 88286, 0, 0, 3), +(83416, 88280, 0, 0, 3), +(83416, 88290, 0, 0, 3), +(83416, 88289, 0, 0, 3), +(83416, 88281, 0, 0, 3), +(83416, 88284, 0, 0, 3), +(83416, 88285, 0, 0, 3), +(83416, 88288, 0, 0, 3), +(83416, 88287, 0, 0, 3), +(83416, 88283, 0, 0, 3), +(83427, 83427, 0, 0, 3), +(83427, 83451, 0, 0, 3), +(83427, 88277, 0, 0, 3), +(83427, 83449, 0, 0, 3), +(83427, 83447, 0, 0, 3), +(83427, 83450, 0, 0, 3), +(83427, 83446, 0, 0, 3); + +-- Remove assistance from Reanimated Bones +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|33554432 WHERE `entry` = 18700; + +-- Condition for Blue Beam (32930) +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` = 32930) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 3) AND (`ConditionValue2` = 18778) AND (`ConditionValue3` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 32930, 0, 0, 31, 0, 3, 18778, 0, 0, 0, 0, '', 'Blue Beam (32930) can only target Cosmetic Raging Soul (18778)'); + +-- Use waypoint_scripts to script the +SET @NPC := 83375; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,131.563,-19.3444,6.32334,5.95491,2147483647,0,493,100,0); +SET @NPC := 83377; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,135.284,-27.3773,9.91618,0.999043,2147483647,0,493,100,0); + +-- DELETE creature Pools and replace with id2 +DELETE FROM `pool_template` WHERE `description` LIKE '%auchenai%' AND `entry` BETWEEN 1500 AND 1509; +DELETE FROM `pool_creature` WHERE `description` LIKE '%auchenai%' AND `pool_entry` BETWEEN 1500 AND 1509; +DELETE FROM `creature` WHERE `guid` IN (83355,83354,83365,83359,83364,83362,83366,83351,83367,83370) AND `id1`=18495 AND `map`=558; +DELETE FROM `creature_addon` WHERE `guid` IN (83355,83354,83365,83359,83364,83362,83366,83351,83367,83370); +DELETE FROM `linked_respawn` WHERE `guid` IN (83351,83354,83355,83359,83362,83364,83365,83366,83367,83370) AND `linkedGuid`=83388 AND `linkType`=0; +UPDATE `creature` SET `id2`=18495 WHERE `guid` IN (83363,83358,83353,83352,83360,83361,83356,83357,83368,83371) AND `id1`=18493 AND `map`=558; + +DELETE FROM `waypoint_scripts` WHERE `id` IN (491, 492, 493) AND `command`=15 AND `guid` IN (18559, 18560, 18561); +INSERT INTO `waypoint_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `guid`) VALUES +(491, 0, 15, 33422, 1, 18559), +(492, 0, 15, 32754, 1, 18560), +(493, 0, 15, 32930, 1, 18561); diff --git a/data/sql/updates/db_world/2022_12_06_16.sql b/data/sql/updates/db_world/2022_12_06_16.sql new file mode 100644 index 000000000..53ec7b9f0 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_16.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_15 -> 2022_12_06_16 +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=43450; diff --git a/data/sql/updates/db_world/2022_12_06_17.sql b/data/sql/updates/db_world/2022_12_06_17.sql new file mode 100644 index 000000000..97e3c3983 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_17.sql @@ -0,0 +1,29 @@ +-- DB update 2022_12_06_16 -> 2022_12_06_17 +-- +DELETE FROM `creature_text` WHERE `CreatureID` IN (17805,17959); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17805,0,0,'Hurry up with it already! The longer you take, the more of a hurtin\ I\m putting on you!',14,0,100,0,0,0,0,0,'Coilfang Slavemaster'), +(17805,0,1,'This is terrible..... my arms grow tired from beating on you lazy peons!',14,0,100,0,0,0,0,0,'Coilfang Slavemaster'), +(17805,0,2,'Too soon! You are slacking off too soon!',14,0,100,0,0,0,0,0,'Coilfang Slavemaster'), +(17805,0,3,'Wake up! Now get up and back to work!',14,0,100,0,0,0,0,0,'Coilfang Slavemaster'), +(17805,0,4,'What is this?! Didn\t mommy and daddy teach you anything?!',14,0,100,0,0,0,0,0,'Coilfang Slavemaster'), +(17805,1,0,'By Nazjatar\s Depths!',12,0,100,0,0,0,0,0,'Coilfang Slavemaster'), +(17805,1,1,'Die, warmblood!',12,0,100,0,0,0,0,0,'Coilfang Slavemaster'), +(17805,1,2,'For the Master!',12,0,100,0,0,0,0,0,'Coilfang Slavemaster'), +(17805,1,3,'Illidan reigns!',12,0,100,0,0,0,0,0,'Coilfang Slavemaster'), +(17805,1,4,'My blood is like venom!',12,0,100,0,0,0,0,0,'Coilfang Slavemaster'), + +(17959,0,0,'Hurry up with it already! The longer you take, the more of a hurtin\ I\m putting on you!',14,0,100,0,0,0,0,0,'Coilfang Slavehandler'), +(17959,0,1,'This is terrible..... my arms grow tired from beating on you lazy peons!',14,0,100,0,0,0,0,0,'Coilfang Slavehandler'), +(17959,0,2,'Too soon! You are slacking off too soon!',14,0,100,0,0,0,0,0,'Coilfang Slavehandler'), +(17959,0,3,'Wake up! Now get up and back to work!',14,0,100,0,0,0,0,0,'Coilfang Slavehandler'), +(17959,0,4,'What is this?! Didn\t mommy and daddy teach you anything?!',14,0,100,0,0,0,0,0,'Coilfang Slavehandler'), +(17959,1,0,'By Nazjatar\s Depths!',12,0,100,0,0,0,0,0,'Coilfang Slavehandler'), +(17959,1,1,'Die, warmblood!',12,0,100,0,0,0,0,0,'Coilfang Slavehandler'), +(17959,1,2,'For the Master!',12,0,100,0,0,0,0,0,'Coilfang Slavehandler'), +(17959,1,3,'Illidan reigns!',12,0,100,0,0,0,0,0,'Coilfang Slavehandler'), +(17959,1,4,'My blood is like venom!',12,0,100,0,0,0,0,0,'Coilfang Slavehandler'); + +UPDATE `smart_scripts` SET `event_chance`=50 WHERE `entryorguid`=17959 AND `source_type`=0 AND `id`=5; +UPDATE `smart_scripts` SET `event_chance`=50 WHERE `entryorguid`=17805 AND `source_type`=0 AND `id`=4; +UPDATE `smart_scripts` SET `event_chance`=50 WHERE `entryorguid`=18206 AND `source_type`=0 AND `id`=0; diff --git a/data/sql/updates/db_world/2022_12_06_18.sql b/data/sql/updates/db_world/2022_12_06_18.sql new file mode 100644 index 000000000..5a521f3e4 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_18.sql @@ -0,0 +1,5 @@ +-- DB update 2022_12_06_17 -> 2022_12_06_18 +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=17517 AND `source_type`=0 AND `id`=1; +INSERT INTO `smart_scripts` VALUES +(17517,0,1,0,4,0,100,0,0,0,0,0,0,45,0,1,0,0,0,0,23,0,0,0,0,0,0,0,0,'Hellfire Sentry - On Aggro - Set Data 0-1 on summoner'); diff --git a/data/sql/updates/db_world/2022_12_06_19.sql b/data/sql/updates/db_world/2022_12_06_19.sql new file mode 100644 index 000000000..611809d0a --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_19.sql @@ -0,0 +1,7 @@ +-- DB update 2022_12_06_18 -> 2022_12_06_19 +-- +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (18498,18499,18500,18501,18503) AND `source_type`=0 AND `event_type` IN (1, 7); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=18497 AND `source_type`=0 AND `id`=6; +INSERT INTO `smart_scripts` VALUES +(18497,0,6,0,7,0,100,0,0,0,0,0,0,41,0,0,0,0,0,0,204,0,0,0,0,0,0,0,0,'Auchenai Monk - On Evade - Despawn all summons'); diff --git a/data/sql/updates/db_world/2022_12_06_20.sql b/data/sql/updates/db_world/2022_12_06_20.sql new file mode 100644 index 000000000..fb4df095f --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_20.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_19 -> 2022_12_06_20 +-- +UPDATE `smart_scripts` SET `event_phase_mask`=0, `event_flags`=1, `event_param2`=20 WHERE `entryorguid`=18311 AND `source_type`=0 AND `id`=3; diff --git a/data/sql/updates/db_world/2022_12_06_21.sql b/data/sql/updates/db_world/2022_12_06_21.sql new file mode 100644 index 000000000..4c8da6e86 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_21.sql @@ -0,0 +1,9 @@ +-- DB update 2022_12_06_20 -> 2022_12_06_21 +-- +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (18498,18499,18500,18501,18503) AND `source_type`=0 AND `id`=12; +INSERT INTO `smart_scripts` VALUES +(18498,0,12,0,54,0,100,0,0,0,0,0,0,11,33422,2,0,0,0,0,1,0,0,0,0,0,0,0,0,'Unliving Soldier - on just summoned - cast Phase In'), +(18499,0,12,0,54,0,100,0,0,0,0,0,0,11,33422,2,0,0,0,0,1,0,0,0,0,0,0,0,0,'Unliving Sorcerer - on just summoned - cast Phase In'), +(18500,0,12,0,54,0,100,0,0,0,0,0,0,11,33422,2,0,0,0,0,1,0,0,0,0,0,0,0,0,'Unliving Cleric - on just summoned - cast Phase In'), +(18501,0,12,0,54,0,100,0,0,0,0,0,0,11,33422,2,0,0,0,0,1,0,0,0,0,0,0,0,0,'Unliving Stalker - on just summoned - cast Phase In'), +(18503,0,12,0,54,0,100,0,0,0,0,0,0,11,33422,2,0,0,0,0,1,0,0,0,0,0,0,0,0,'Phantasmal Possessor - on just summoned - cast Phase In'); diff --git a/data/sql/updates/db_world/2022_12_06_22.sql b/data/sql/updates/db_world/2022_12_06_22.sql new file mode 100644 index 000000000..af3e19770 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_22.sql @@ -0,0 +1,9 @@ +-- DB update 2022_12_06_21 -> 2022_12_06_22 +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=17477 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17477,0,0,0,1,0,100,1,1000,1000,0,0,0,11,30540,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Hellfire Imp - Out of Combat - Cast Summon Visual'), +(17477,0,1,0,4,0,100,0,0,0,0,0,0,28,30540,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Hellfire Imp - On Aggro - Remove Summon Visual'), +(17477,0,2,0,0,0,100,2,1000,3400,3400,4800,0,11,15242,64,0,0,0,0,5,0,0,0,0,0,0,0,0,'Hellfire Imp - In Combat CMC - Cast Fireball (Normal Dungeon)'), +(17477,0,3,0,0,0,100,4,1000,3400,3400,4800,0,11,17290,64,0,0,0,0,5,0,0,0,0,0,0,0,0,'Hellfire Imp - In Combat CMC - Cast Fireball (Heroic Dungeon)'), +(17477,0,4,0,0,0,100,4,6000,9000,6000,9000,0,11,16144,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Hellfire Imp - In Combat - Cast Fire Blast'); diff --git a/data/sql/updates/db_world/2022_12_06_23.sql b/data/sql/updates/db_world/2022_12_06_23.sql new file mode 100644 index 000000000..e5a007a46 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_23.sql @@ -0,0 +1,6 @@ +-- DB update 2022_12_06_22 -> 2022_12_06_23 +-- +DELETE FROM `dungeon_access_requirements` WHERE `dungeon_access_id` IN (62,63) AND `requirement_type`=1 AND `requirement_id`=10277; +INSERT INTO `dungeon_access_requirements` VALUES +(62,1,10277,'You must complete the quest "The Caverns of Time" before entering the Old Hillsbrad.',2,0,0,''), +(63,1,10277,'You must complete the quest "The Caverns of Time" before entering the Old Hillsbrad (Heroic).',2,0,0,''); diff --git a/data/sql/updates/db_world/2022_12_06_24.sql b/data/sql/updates/db_world/2022_12_06_24.sql new file mode 100644 index 000000000..77562bcbf --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_24.sql @@ -0,0 +1,5 @@ +-- DB update 2022_12_06_23 -> 2022_12_06_24 +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18113) AND (`source_type` = 0) AND (`id` IN (19)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18113, 0, 19, 0, 0, 1, 100, 0, 7000, 9000, 14000, 18000, 0, 11, 12024, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Feralfen Hunter - In Combat - Cast \'Net\' (Phase 1)'); diff --git a/data/sql/updates/db_world/2022_12_06_25.sql b/data/sql/updates/db_world/2022_12_06_25.sql new file mode 100644 index 000000000..9aef01624 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_25.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_24 -> 2022_12_06_25 +-- +UPDATE `creature_loot_template` SET `Chance` = 100 WHERE `Entry` = 18214 AND `Item` = 24486; diff --git a/data/sql/updates/db_world/2022_12_06_26.sql b/data/sql/updates/db_world/2022_12_06_26.sql new file mode 100644 index 000000000..cad82ea22 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_26.sql @@ -0,0 +1,6 @@ +-- DB update 2022_12_06_25 -> 2022_12_06_26 +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 21033) AND (`source_type` = 0) AND (`id` IN (0, 1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21033, 0, 0, 0, 0, 0, 100, 0, 0, 3000, 8000, 15000, 0, 11, 37839, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bladewing Bloodletter - In Combat - Cast \'Poison Spit\''), +(21033, 0, 1, 0, 0, 0, 100, 0, 3000, 5000, 13000, 18000, 0, 11, 37838, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bladewing Bloodletter - In Combat - Cast \'Blood Leech\''); diff --git a/data/sql/updates/db_world/2022_12_06_27.sql b/data/sql/updates/db_world/2022_12_06_27.sql new file mode 100644 index 000000000..c5144b88d --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_27.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_26 -> 2022_12_06_27 +-- +UPDATE `quest_template_addon` SET `PrevQuestID` = 11025 WHERE (`ID` = 11030); diff --git a/data/sql/updates/db_world/2022_12_06_28.sql b/data/sql/updates/db_world/2022_12_06_28.sql new file mode 100644 index 000000000..0f02b644d --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_28.sql @@ -0,0 +1,78 @@ +-- DB update 2022_12_06_27 -> 2022_12_06_28 +-- +SET @GUID := 72753; + +DELETE FROM `creature` WHERE `id1` IN (18037, 18065) AND `map`=530 AND `ZoneId`=3518 AND `guid` BETWEEN @GUID+0 AND @GUID+15; +INSERT INTO `creature` (`guid`, `id1`, `map`, `ZoneId`, `spawnMask`, `equipment_Id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `MovementType`) VALUES +(@GUID+0 , 18037, 530, 3518, 1, 1, -533.941, 8870.37, 208.906, 3.42234, 300, 5, 0, 1), +(@GUID+1 , 18037, 530, 3518, 1, 1, -454.681, 8803.77, 198.269, 2.41232, 300, 5, 0, 1), +(@GUID+2 , 18065, 530, 3518, 1, 0, -384.99, 8786.67, 212.753, 2.12956, 300, 0, 0, 2), +(@GUID+3 , 18037, 530, 3518, 1, 1, -447.605, 8763.69, 185.048, 1.68975, 300, 5, 0, 1), +(@GUID+4 , 18037, 530, 3518, 1, 1, -374.149, 8771.58, 210.73, 5.07874, 300, 5, 0, 1), +(@GUID+5 , 18037, 530, 3518, 1, 1, -437.458, 8821.92, 221.269, 0.511648, 300, 5, 0, 1), +(@GUID+6 , 18037, 530, 3518, 1, 1, -445.078, 8864.54, 224.601, 4.72138, 300, 5, 0, 1), +(@GUID+7 , 18037, 530, 3518, 1, 1, -502.455, 8893.33, 227.559, 6.17437, 300, 5, 0, 1), +(@GUID+8 , 18037, 530, 3518, 1, 1, -538.159, 8885.65, 230.808, 0.664801, 300, 5, 0, 1), +(@GUID+9 , 18037, 530, 3518, 1, 1, -523.295, 8844.17, 234.505, 1.51695, 300, 5, 0, 1), +(@GUID+10, 18065, 530, 3518, 1, 0, -478.179, 8842.4, 199.721, 2.17277, 300, 5, 0, 1), +(@GUID+11, 18065, 530, 3518, 1, 0, -458.151, 8732.37, 182.157, 4.32633, 300, 5, 0, 1), +(@GUID+12, 18065, 530, 3518, 1, 0, -406.833, 8714.88, 193.001, 5.81309, 300, 5, 0, 1), +(@GUID+13, 18065, 530, 3518, 1, 0, -401.754, 8807.28, 218.135, 5.49107, 300, 5, 0, 1), +(@GUID+14, 18065, 530, 3518, 1, 0, -487.607, 8852.84, 228.021, 2.50656, 300, 5, 0, 1), +(@GUID+15, 18065, 530, 3518, 1, 0, -473.313, 8844.19, 239.775, 2.88355, 300, 0, 0, 0); + +SET @PATH := @GUID+2 * 10; +DELETE FROM `creature_addon` WHERE `guid`=@GUID+2; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@GUID+2,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES +(@PATH, 1, -398.269, 8804.46, 217.325, 2.33377, 0), +(@PATH, 2, -412.053, 8812.45, 220.161, 2.90318, 0), +(@PATH, 3, -430.507, 8819.81, 221.395, 2.43587, 0), +(@PATH, 4, -441.296, 8830.23, 221.626, 2.00783, 0), +(@PATH, 5, -445.609, 8850.52, 223.452, 1.58842, 0), +(@PATH, 6, -445.632, 8867.33, 224.72, 1.98741, 0), +(@PATH, 7, -453.055, 8881.74, 224.406, 2.76417, 0), +(@PATH, 8, -470.271, 8889.71, 225.414, 3.19692, 0), +(@PATH, 9, -515.143, 8892.06, 228.826, 3.37678, 0), +(@PATH, 10, -534.872, 8886.37, 230.565, 3.97289, 0), +(@PATH, 11, -546.735, 8870.39, 229.176, 4.99313, 0), +(@PATH, 12, -540.254, 8856.33, 229.642, 5.70233, 0), +(@PATH, 13, -529.629, 8849.6, 232.416, 6.20656, 0), +(@PATH, 14, -506.749, 8845.22, 236.625, 0.169202, 0), +(@PATH, 15, -485.893, 8848.37, 239.283, 0.311357, 5000), +(@PATH, 16, -508.798, 8844.63, 236.39, 2.87176, 0), +(@PATH, 17, -529.363, 8848.72, 232.67, 2.64085, 0), +(@PATH, 18, -540.861, 8857.2, 229.432, 2.17197, 0), +(@PATH, 19, -547.196, 8871.09, 229.261, 1.57899, 0), +(@PATH, 20, -542.196, 8882.48, 230.796, 0.775528, 0), +(@PATH, 21, -530.482, 8889.93, 230.493, 0.263449, 0), +(@PATH, 22, -511.938, 8894.58, 228.543, 0.005053, 0), +(@PATH, 23, -470.208, 8890.2, 225.434, 5.89475, 0), +(@PATH, 24, -451.641, 8880.46, 224.297, 5.35676, 0), +(@PATH, 25, -445.421, 8866.58, 224.696, 4.70331, 0), +(@PATH, 26, -445.974, 8843.71, 222.71, 4.96092, 0), +(@PATH, 27, -440.18, 8829.58, 221.609, 5.52876, 0), +(@PATH, 28, -431.559, 8820.13, 221.376, 6.15394, 0), +(@PATH, 29, -406.215, 8810.67, 219.203, 5.61672, 0), +(@PATH, 30, -390.925, 8796.25, 214.569, 5.17219, 0), +(@PATH, 31, -377.17, 8778.05, 211.155, 4.91694, 0), +(@PATH, 32, -373.347, 8757.8, 208.023, 4.22343, 0), +(@PATH, 33, -382.987, 8744.06, 202.201, 3.7035, 0), +(@PATH, 34, -405.184, 8718.64, 193.11, 3.75004, 0), +(@PATH, 35, -419.225, 8713.4, 189.002, 3.29451, 0), +(@PATH, 36, -441.585, 8714.71, 184.544, 2.72195, 0), +(@PATH, 37, -451.864, 8719.73, 183.338, 2.31276, 0), +(@PATH, 38, -455.238, 8731.33, 182.193, 1.44097, 0), +(@PATH, 39, -452.53, 8740.64, 182.894, 1.25247, 0), +(@PATH, 40, -449.194, 8754.34, 183.497, 1.45275, 0), +(@PATH, 41, -450.988, 8793.51, 196.171, 1.97268, 0), +(@PATH, 42, -449.783, 8773.5, 189.535, 4.83781, 0), +(@PATH, 43, -447.893, 8752.71, 183.107, 4.30767, 0), +(@PATH, 44, -455.492, 8736.31, 182.568, 4.98469, 0), +(@PATH, 45, -450.041, 8721.45, 183.049, 5.64049, 0), +(@PATH, 46, -438.284, 8714.93, 184.711, 6.26959, 0), +(@PATH, 47, -412.573, 8715.54, 190.76, 0.806361, 0), +(@PATH, 48, -373.826, 8754.15, 207.196, 1.30195, 0), +(@PATH, 49, -374.3, 8774.6, 210.924, 1.9499, 0), +(@PATH, 50, -388.62, 8792.9, 213.872, 2.16746, 0); diff --git a/data/sql/updates/db_world/2022_12_06_29.sql b/data/sql/updates/db_world/2022_12_06_29.sql new file mode 100644 index 000000000..8af86b65a --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_29.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_28 -> 2022_12_06_29 +-- +UPDATE `quest_template_addon` SET `ExclusiveGroup` = -9868 WHERE (`ID` = 10011); diff --git a/data/sql/updates/db_world/2022_12_06_30.sql b/data/sql/updates/db_world/2022_12_06_30.sql new file mode 100644 index 000000000..af819ea92 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_30.sql @@ -0,0 +1,10 @@ +-- DB update 2022_12_06_29 -> 2022_12_06_30 +-- +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18131); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18131, 0, 0, 0, 0, 0, 75, 0, 3000, 3000, 9000, 9000, 0, 11, 35333, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshfang Slicer - In Combat - Cast \'Tail Swipe\''), +(18131, 0, 1, 0, 0, 0, 75, 0, 1000, 1000, 10000, 10000, 0, 11, 17008, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshfang Slicer - In Combat - Cast \'Drain Mana\''), +(18131, 0, 2, 0, 3, 0, 100, 0, 25, 100, 3600, 3600, 0, 11, 35334, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshfang Slicer - Between 25-100% Mana - Cast \'Nether Shock\''), +(18131, 0, 3, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshfang Slicer - On Reset - Set Mana To 0'); + +UPDATE `creature_template` SET `unit_flags2`=`unit_flags2`&~2048 WHERE (`entry` = 18131); diff --git a/data/sql/updates/db_world/2022_12_06_31.sql b/data/sql/updates/db_world/2022_12_06_31.sql new file mode 100644 index 000000000..92c6bca76 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_31.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_30 -> 2022_12_06_31 +-- +UPDATE `quest_template` SET `RewardItem1` = 0, `RewardAmount1` = 0 WHERE (`ID` = 10172); diff --git a/data/sql/updates/db_world/2022_12_06_32.sql b/data/sql/updates/db_world/2022_12_06_32.sql new file mode 100644 index 000000000..25ae9c306 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_32.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_31 -> 2022_12_06_32 +-- +UPDATE `creature_template` SET `detection_range` = 35 WHERE `entry` IN (17734, 20187); diff --git a/data/sql/updates/db_world/2022_12_06_33.sql b/data/sql/updates/db_world/2022_12_06_33.sql new file mode 100644 index 000000000..d78c424a1 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_33.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_32 -> 2022_12_06_33 +-- Delete independent Tamed Sporebat. Should be spawned by the summoner instead. +DELETE FROM `creature` WHERE `id1`=18201 AND `guid` IN (64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993); diff --git a/data/sql/updates/db_world/2022_12_06_34.sql b/data/sql/updates/db_world/2022_12_06_34.sql new file mode 100644 index 000000000..cbf994e3e --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_34.sql @@ -0,0 +1,53 @@ +-- DB update 2022_12_06_33 -> 2022_12_06_34 +-- Delete all old gameobjects andd add new ones +DELETE FROM `gameobject` WHERE `id`=185541; + +SET @GUID := 21800; + +DELETE FROM `gameobject` WHERE `id`=185541 AND `guid` BETWEEN @GUID+0 AND @GUID+44; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `ZoneId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@GUID+0 , 185541, 530, 3519, 1, 1, -3522.93, 3591.24, 279.984, 3.13623, 0, 0, 0.999996, 0.00268371, 320, 255, 1), +(@GUID+1 , 185541, 530, 3519, 1, 1, -3614.71, 3668.21, 277.876, 3.06554, 0, 0, 0.999277, 0.0380174, 320, 255, 1), +(@GUID+2 , 185541, 530, 3519, 1, 1, -3687.49, 3676.91, 275.849, 3.17157, 0, 0, 0.999888, -0.014987, 320, 255, 1), +(@GUID+3 , 185541, 530, 3519, 1, 1, -3591.01, 3724.4, 286.046, 2.90092, 0, 0, 0.992768, 0.120047, 320, 255, 1), +(@GUID+4 , 185541, 530, 3519, 1, 1, -3660.47, 3804.44, 256.671, 0.921711, 0, 0, 0.444715, 0.895672, 320, 255, 1), +(@GUID+5 , 185541, 530, 3519, 1, 1, -3709.67, 3744.53, 277.062, 2.56712, 0, 0, 0.959031, 0.283302, 320, 255, 1), +(@GUID+6 , 185541, 530, 3519, 1, 1, -3758.52, 3732.27, 276.852, 6.07391, 0, 0, 0.104445, -0.994531, 320, 255, 1), +(@GUID+7 , 185541, 530, 3519, 1, 1, -3945.16, 3664.53, 287.184, 3.24256, 0, 0, 0.998726, -0.0504627, 320, 255, 1), +(@GUID+8 , 185541, 530, 3519, 1, 1, -3869.19, 3813.33, 293.27, 2.40611, 0, 0, 0.933142, 0.359508, 320, 255, 1), +(@GUID+9 , 185541, 530, 3519, 1, 1, -3928.52, 3803.6, 296.713, 0.84317, 0, 0, 0.409207, 0.912442, 320, 255, 1), +(@GUID+10, 185541, 530, 3519, 1, 1, -4015.58, 3704.01, 296.699, 2.70849, 0, 0, 0.976644, 0.214862, 320, 255, 1), +(@GUID+11, 185541, 530, 3519, 1, 1, -4048.37, 3670.2, 306.466, 5.85008, 0, 0, 0.214865, -0.976644, 320, 255, 1), +(@GUID+12, 185541, 530, 3519, 1, 1, -4035.57, 3604.6, 289.111, 4.36568, 0, 0, 0.818477, -0.57454, 320, 255, 1), +(@GUID+13, 185541, 530, 3519, 1, 1, -4114.9, 3445.98, 291.461, 4.78586, 0, 0, 0.680659, -0.732601, 320, 255, 1), +(@GUID+14, 185541, 530, 3519, 1, 1, -4164.12, 3408.89, 293.794, 5.79116, 0, 0, 0.243536, -0.969892, 320, 255, 1), +(@GUID+15, 185541, 530, 3519, 1, 1, -4145.64, 3367.12, 286.617, 2.18226, 0, 0, 0.88715, 0.461482, 320, 255, 1), +(@GUID+16, 185541, 530, 3519, 1, 1, -4057.38, 3349.27, 285.711, 3.79233, 0, 0, 0.947534, -0.319656, 320, 255, 1), +(@GUID+17, 185541, 530, 3519, 1, 1, -4085.77, 3318.1, 288.168, 4.21251, 0, 0, 0.860035, -0.510236, 320, 255, 1), +(@GUID+18, 185541, 530, 3519, 1, 1, -4134.75, 3296.82, 291.336, 3.47031, 0, 0, 0.986524, -0.163619, 320, 255, 1), +(@GUID+19, 185541, 530, 3519, 1, 1, -4196.13, 3308.13, 284.064, 0.587893, 0, 0, 0.289732, 0.957108, 320, 255, 1), +(@GUID+20, 185541, 530, 3519, 1, 1, -4189.54, 3257.55, 292.043, 2.70455, 0, 0, 0.976219, 0.216787, 320, 255, 1), +(@GUID+21, 185541, 530, 3519, 1, 1, -4087.81, 3247.68, 298.522, 4.46776, 0, 0, 0.788098, -0.61555, 320, 255, 1), +(@GUID+22, 185541, 530, 3519, 1, 1, -4180.37, 3124.99, 321.346, 3.64701, 0, 0, 0.968238, -0.250029, 320, 255, 1), +(@GUID+23, 185541, 530, 3519, 1, 1, -4180.98, 2998.87, 314.479, 6.08959, 0, 0, 0.0966446, -0.995319, 320, 255, 1), +(@GUID+24, 185541, 530, 3519, 1, 1, -4066.43, 3066.54, 318.051, 0.458292, 0, 0, 0.227146, 0.973861, 320, 255, 1), +(@GUID+25, 185541, 530, 3519, 1, 1, -3976.59, 3165.93, 315.712, 0.415095, 0, 0, 0.206061, 0.978539, 320, 255, 1), +(@GUID+26, 185541, 530, 3519, 1, 1, -3913.84, 3258.51, 299.482, 5.97571, 0, 0, 0.153131, -0.988206, 320, 255, 1), +(@GUID+27, 185541, 530, 3519, 1, 1, -3825.82, 3296.92, 276.039, 0.332628, 0, 0, 0.165548, 0.986202, 320, 255, 1), +(@GUID+28, 185541, 530, 3519, 1, 1, -3896.6, 3304.55, 285.785, 3.59988, 0, 0, 0.973861, -0.227146, 320, 255, 1), +(@GUID+29, 185541, 530, 3519, 1, 1, -3888.72, 3199.02, 313.575, 5.30419, 0, 0, 0.470182, -0.88257, 320, 255, 1), +(@GUID+30, 185541, 530, 3519, 1, 1, -3862.88, 3234.32, 308.008, 0.199102, 0, 0, 0.0993868, 0.995049, 320, 255, 1), +(@GUID+31, 185541, 530, 3519, 1, 1, -3777.72, 3341.68, 276.476, 0.937377, 0, 0, 0.451716, 0.892162, 320, 255, 1), +(@GUID+32, 185541, 530, 3519, 1, 1, -3897.6, 3146.29, 326.375, 4.31067, 0, 0, 0.833968, -0.551813, 320, 255, 1), +(@GUID+33, 185541, 530, 3519, 1, 1, -3868.82, 3107.8, 333.388, 4.93506, 0, 0, 0.624167, -0.781291, 320, 255, 1), +(@GUID+34, 185541, 530, 3519, 1, 1, -3919.64, 3054.12, 358.956, 1.711, 0, 0, 0.754898, 0.655842, 320, 255, 1), +(@GUID+35, 185541, 530, 3519, 1, 1, -3994.67, 3021.64, 358.166, 1.28295, 0, 0, 0.598378, 0.801214, 320, 255, 1), +(@GUID+36, 185541, 530, 3519, 1, 1, -4002.35, 3003.2, 361.913, 4.85259, 0, 0, 0.655844, -0.754897, 320, 255, 1), +(@GUID+37, 185541, 530, 3519, 1, 1, -3716.99, 3343.28, 287.33, 0.0734353, 0, 0, 0.0367094, 0.999326, 320, 255, 1), +(@GUID+38, 185541, 530, 3519, 1, 1, -3652.02, 3308.09, 285.399, 0.689972, 0, 0, 0.338184, 0.94108, 320, 255, 1), +(@GUID+39, 185541, 530, 3519, 1, 1, -3689.99, 3391.04, 282.229, 1.88378, 0, 0, 0.808671, 0.588262, 320, 255, 1), +(@GUID+40, 185541, 530, 3519, 1, 1, -3623.51, 3372.87, 294.724, 5.37488, 0, 0, 0.438702, -0.898633, 320, 255, 1), +(@GUID+41, 185541, 530, 3519, 1, 1, -3467.18, 3487.59, 286.371, 4.38136, 0, 0, 0.813945, -0.580942, 320, 255, 1), +(@GUID+42, 185541, 530, 3519, 1, 1, -3642.29, 3189.84, 314.527, 4.04758, 0, 0, 0.899141, -0.437659, 320, 255, 1), +(@GUID+43, 185541, 530, 3519, 1, 1, -4116.15, 3212.55, 299.799, 5.08038, 0, 0, 0.565801, -0.824542, 320, 255, 1), +(@GUID+44, 185541, 530, 3519, 1, 1, -4108.74, 3544.24, 296.961, 1.6953, 0, 0, 0.749729, 0.661745, 320, 255, 1); diff --git a/data/sql/updates/db_world/2022_12_06_35.sql b/data/sql/updates/db_world/2022_12_06_35.sql new file mode 100644 index 000000000..604ed6a56 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_35.sql @@ -0,0 +1,17 @@ +-- DB update 2022_12_06_34 -> 2022_12_06_35 +DELETE FROM `gossip_menu_option` WHERE `MenuID` = 6529 AND `OptionID` = 0; +INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES +(6529, 0, 0, 'Baristolth, I have lost my badge and require a replacement.', 10679, 1, 1, 0, 0, 0, 0, '', 0, 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceGroup` = 6529 AND `SourceId` = 0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 6529, 0, 0, 0, 2, 0, 20402, 1, 0, 1, 0, 0, '', 'If player does not have \'Agent of Nozdormu\' in inventory'), +(15, 6529, 0, 0, 0, 2, 0, 20402, 1, 1, 1, 0, 0, '', 'If player does not have \'Agent of Nozdormu\' in bank'), +(15, 6529, 0, 0, 0, 8, 0, 8301, 0, 0, 0, 0, 0, '', 'If player has quest \'The Path of the Righteous\' rewarded'); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 15180; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 15180 AND `source_type` = 0 AND `id` IN (1,2); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(15180, 0, 1, 2, 62, 0, 100, 0, 6529, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Baristolth of the Shifting Sands - On Gossip Option 0 Selected - Close Gossip'), +(15180, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 11, 24727, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Baristolth of the Shifting Sands - On Link - Cast \'Lost Badge Agent of Nozdormu DND\''); diff --git a/data/sql/updates/db_world/2022_12_06_36.sql b/data/sql/updates/db_world/2022_12_06_36.sql new file mode 100644 index 000000000..5036b5814 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_36.sql @@ -0,0 +1,18 @@ +-- DB update 2022_12_06_35 -> 2022_12_06_36 +-- Alliance one signet +UPDATE `quest_request_items` SET `CompletionText` = 'For those adventurers who have but a single commendation signet, I\'ll exchange it for a small amount of recognition with Darnassus.$B$BPlease bear in mind that it is better to hand over a stack of ten signets at once; your efforts will receive greater recognition in doing so. We offer a single signet exchange as a service for those who don\'t have enough for a full stack of ten.$B$BWith that being said, I stand ready to assist you if you still wish to hand in a single signet.' WHERE (`ID` = 8811); +UPDATE `quest_request_items` SET `CompletionText` = 'For those adventurers who have but a single commendation signet, I\'ll exchange it for a small amount of recognition with the Gnomeregan exiles.$B$BPlease bear in mind that it is better to hand over a stack of ten signets at once; your efforts will receive greater recognition in doing so. We offer a single signet exchange as a service for those who don\'t have enough for a full stack of ten.$B$BWith that being said, I stand ready to assist you if you still wish to hand in a single signet.' WHERE (`ID` = 8812); +UPDATE `quest_request_items` SET `CompletionText` = 'For those adventurers who have but a single commendation signet, I\'ll exchange it for a small amount of recognition with Ironforge.$B$BPlease bear in mind that it is better to hand over a stack of ten signets at once; your efforts will receive greater recognition in doing so. We offer a single signet exchange as a service for those who don\'t have enough for a full stack of ten.$B$BWith that being said, I stand ready to assist you if you still wish to hand in a single signet.' WHERE (`ID` = 8813); +UPDATE `quest_request_items` SET `CompletionText` = 'For those adventurers who have but a single commendation signet, I\'ll exchange it for a small amount of recognition with Stormwind.$B$BPlease bear in mind that it is better to hand over a stack of ten signets at once; your efforts will receive greater recognition in doing so. We offer a single signet exchange as a service for those who don\'t have enough for a full stack of ten.$B$BWith that being said, I stand ready to assist you if you still wish to hand in a single signet.' WHERE (`ID` = 8814); +-- Alliance ten signets +UPDATE `quest_request_items` SET `CompletionText` = 'I accept commendation signets from adventurers who have received them in the line of duty. For each set of ten that you hand to me, I\'ll make sure that you receive a significant acknowledgement of your deeds with Darnassus. I also accept single tokens, but at a much reduced rate of recognition. We are much more interested in greater feats of duty, though no feat will be ignored.$B$BWith that said, I\'ll gladly take your signets if you are ready to hand in a set.' WHERE (`ID` = 8819); +UPDATE `quest_request_items` SET `CompletionText` = 'I accept commendation signets from adventurers who have received them in the line of duty. For each set of ten that you hand to me, I\'ll make sure that you receive a significant acknowledgement of your deeds with the Gnomeregan exiles. I also accept single tokens, but at a much reduced rate of recognition. We are much more interested in greater feats of duty, though no feat will be ignored.$B$BWith that said, I\'ll gladly take your signets if you are ready to hand in a set.' WHERE (`ID` = 8820); +UPDATE `quest_request_items` SET `CompletionText` = 'I accept commendation signets from adventurers who have received them in the line of duty. For each set of ten that you hand to me, I\'ll make sure that you receive a significant acknowledgement of your deeds with Ironforge. I also accept single tokens, but at a much reduced rate of recognition. We are much more interested in greater feats of duty, though no feat will be ignored.$B$BWith that said, I\'ll gladly take your signets if you are ready to hand in a set.' WHERE (`ID` = 8821); +UPDATE `quest_request_items` SET `CompletionText` = 'I accept commendation signets from adventurers who have received them in the line of duty. For each set of ten that you hand to me, I\'ll make sure that you receive a significant acknowledgement of your deeds with Stormwind. I also accept single tokens, but at a much reduced rate of recognition. We are much more interested in greater feats of duty, though no feat will be ignored.$B$BWith that said, I\'ll gladly take your signets if you are ready to hand in a set.' WHERE (`ID` = 8822); +-- Horde one signet +UPDATE `quest_request_items` SET `CompletionText` = 'For those adventurers who have but a single commendation signet, I\'ll exchange it for a small amount of recognition with the Darkspear tribe.$B$BPlease bear in mind that it is better to hand over a stack of ten signets at once; your efforts will receive greater recognition in doing so. We offer a single signet exchange as a service for those who don\'t have enough for a full stack of ten.$B$BWith that being said, I stand ready to assist you if you still wish to hand in a single signet.' WHERE (`ID` = 8816); +UPDATE `quest_request_items` SET `CompletionText` = 'For those adventurers who have but a single commendation signet, I\'ll exchange it for a small amount of recognition with Undercity.$B$BPlease bear in mind that it is better to hand over a stack of ten signets at once; your efforts will receive greater recognition in doing so. We offer a single signet exchange as a service for those who don\'t have enough for a full stack of ten.$B$BWith that being said, I stand ready to assist you if you still wish to hand in a single signet.' WHERE (`ID` = 8817); +UPDATE `quest_request_items` SET `CompletionText` = 'For those adventurers who have but a single commendation signet, I\'ll exchange it for a small amount of recognition with Thunder Bluff.$B$BPlease bear in mind that it is better to hand over a stack of ten signets at once; your efforts will receive greater recognition in doing so. We offer a single signet exchange as a service for those who don\'t have enough for a full stack of ten.$B$BWith that being said, I stand ready to assist you if you still wish to hand in a single signet.' WHERE (`ID` = 8818); +-- Horde ten signets +UPDATE `quest_request_items` SET `CompletionText` = 'I accept commendation signets from adventurers who have received them in the line of duty. For each set of ten that you hand to me, I\'ll make sure that you receive a significant acknowledgement of your deeds with the Darkspear tribe. I also accept single tokens, but at a much reduced rate of recognition. We are much more interested in greater feats of duty, though no feat will be ignored.$B$BWith that said, I\'ll gladly take your signets if you are ready to hand in a set.' WHERE (`ID` = 8824); +UPDATE `quest_request_items` SET `CompletionText` = 'I accept commendation signets from adventurers who have received them in the line of duty. For each set of ten that you hand to me, I\'ll make sure that you receive a significant acknowledgement of your deeds with Undercity. I also accept single tokens, but at a much reduced rate of recognition. We are much more interested in greater feats of duty, though no feat will be ignored.$B$BWith that said, I\'ll gladly take your signets if you are ready to hand in a set.' WHERE (`ID` = 8826); diff --git a/data/sql/updates/db_world/2022_12_06_37.sql b/data/sql/updates/db_world/2022_12_06_37.sql new file mode 100644 index 000000000..4dfa24b22 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_37.sql @@ -0,0 +1,191 @@ +-- DB update 2022_12_06_36 -> 2022_12_06_37 +-- Ratchet Bruiser (3502) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 3502) AND (`source_type` = 0) AND (`id` IN (0, 1, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(3502, 0, 0, 0, 0, 0, 100, 0, 0, 3000, 15000, 20000, 0, 11, 38661, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ratchet Bruiser - In Combat - Cast Net'), +(3502, 0, 1, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Ratchet Bruiser - On Death - Send Zone Under Attack'); +DELETE FROM `creature_template_addon` WHERE (`entry` = 3502); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(3502, 0, 0, 0, 0, 0, 0, '18950'); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (19470, 19487, 19488, 19489, 19490, 19503, 19504, 19505, 19506); + +-- Booty Bay Bruiser (4624) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 4624) AND (`source_type` = 0) AND (`id` IN (0, 1, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(4624, 0, 0, 0, 0, 0, 100, 0, 0, 3000, 15000, 20000, 0, 11, 12024, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Booty Bay Bruiser - In Combat - Cast Net'), +(4624, 0, 1, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Booty Bay Bruiser - On Death - Send Zone Under Attack'); +DELETE FROM `creature_template_addon` WHERE (`entry` = 4624); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(4624, 0, 0, 0, 0, 0, 0, '18950'); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (76, 77, 160, 161, 162, 163, 164, 165, 178, 182, 589, 590, 591, 592, 593, 594, 596, 597, 598, 599, 649, 650, 651, 652, 653, 654, 655, 656, 657, 679, 680, 681, 682, 683, 686, 687, 688, 689, 692, 693, 694, 695, 696, 697, 698, 699, 700, 715, 716, 717, 718, 719, 2164, 2167); + +-- Gadgetzan Bruiser (9460) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 9460) AND (`source_type` = 0) AND (`id` IN (0, 1, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(9460, 0, 0, 0, 0, 0, 100, 0, 0, 3000, 15000, 20000, 0, 11, 38661, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Gadgetzan Bruiser - In Combat - Cast Net'), +(9460, 0, 1, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Gadgetzan Bruiser - On Death - Send Zone Under Attack'); +DELETE FROM `creature_template_addon` WHERE (`entry` = 9460); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(9460, 0, 0, 0, 0, 0, 0, '18950'); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (23560, 23561, 23562, 23563, 23564, 23565, 23566, 23567, 23568, 23569, 23570, 23571, 23572, 23573, 23574, 23575, 23576, 23577, 23578, 23579, 23580, 23581, 23582, 23583, 23584, 23585, 23586, 23587, 23588, 23589, 23590, 23591, 23592, 23593, 23594, 23595, 23596, 24664, 24665); + +-- Everlook Bruiser (11190) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 11190) AND (`source_type` = 0) AND (`id` IN (0, 1, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(11190, 0, 0, 0, 0, 0, 100, 0, 0, 3000, 15000, 20000, 0, 11, 38661, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Everlook Bruiser - In Combat - Cast Net'), +(11190, 0, 1, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Everlook Bruiser - On Death - Send Zone Under Attack'); +DELETE FROM `creature_template_addon` WHERE (`entry` = 11190); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(11190, 0, 0, 0, 0, 0, 0, '18950'); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (42278, 42279, 42280, 42281, 42282, 42283, 42284, 42285, 42286, 42287, 42288, 42289, 42290, 42291, 42292, 42293, 42294, 42295); + +-- Shadowglen Sentinel (12160) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 12160) AND (`source_type` = 0); + +-- Huntress Skymane (14378) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 14378) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 14378); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (46216); + +-- Cenarion Hold Infantry (15184) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 15184) AND (`source_type` = 0) AND (`id` IN (0, 1, 2, 3, 4)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(15184, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Cenarion Hold Infantry - On Aggro - Say Line 0'), +(15184, 0, 1, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Cenarion Hold Infantry - On Death - Send Zone Under Attack'), +(15184, 0, 2, 0, 0, 0, 100, 0, 3000, 7000, 6000, 12000, 0, 11, 30223, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Cenarion Hold Infantry - In Combat - Cast Cleave'), +(15184, 0, 3, 0, 14, 0, 100, 0, 10000, 10000, 0, 0, 0, 11, 27620, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Cenarion Hold Infantry - Victim Casting - Cast Snap Kick'); +DELETE FROM `creature_template_addon` WHERE (`entry` = 15184); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(15184, 0, 0, 0, 0, 0, 0, '18950'); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (42766, 42767, 42768, 42769, 42770, 42771, 42772, 42773, 42774, 42775, 42776, 42777, 42778, 42779, 42780, 42781, 42782, 42783, 42784, 42785, 42868, 42884, 42885, 42886, 42891, 42892, 42895, 42896, 42897, 42898); + +-- Arcane Protector (16504) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16504) AND (`source_type` = 0) AND (`id` IN (3, 4, 5, 6)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16504, 0, 3, 0, 0, 0, 100, 0, 3000, 13000, 21000, 35000, 0, 11, 29840, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Arcane Protector - In Combat - Cast Fist of Stone'), +(16504, 0, 4, 0, 0, 0, 100, 512, 4000, 7000, 20500, 20500, 0, 88, 1650400, 1650402, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Arcane Protector - In Combat - Run Script Range'), +(16504, 0, 5, 0, 0, 0, 100, 0, 10000, 20000, 15000, 25000, 0, 11, 29857, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Arcane Protector - In Combat - Cast Summon Astral Spark'); +DELETE FROM `creature_template_addon` WHERE (`entry` = 16504); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(16504, 0, 0, 0, 0, 0, 0, '18950'); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (135684, 135685, 135686, 135687, 135688, 135689, 135690, 135691); + +-- Thrallmar Grunt (16580) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16580) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 16580); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (57492, 57494, 57495, 57496, 57502, 57505, 57506, 57509, 57511, 57523, 57527, 57528, 57530, 57531, 57533, 57537, 57538, 57540); + +-- Injured Thrallmar Grunt (16590) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16590) AND (`source_type` = 0) AND (`id` IN (0, 1, 2, 3, 4)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16590, 0, 0, 0, 1, 0, 30, 0, 129000, 129000, 509000, 509000, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Injured Thrallmar Grunt - Out of Combat - Say Line 0'), +(16590, 0, 1, 0, 1, 0, 30, 0, 454500, 454500, 454500, 454500, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Injured Thrallmar Grunt - Out of Combat - Say Line 1'), +(16590, 0, 2, 0, 1, 0, 30, 0, 459000, 459000, 459000, 459000, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Injured Thrallmar Grunt - Out of Combat - Say Line 2'), +(16590, 0, 3, 0, 1, 0, 100, 0, 464000, 464000, 464000, 464000, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Injured Thrallmar Grunt - Out of Combat - Say Line 3'); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 16590); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (57565); + +-- Thrallmar Peon (16591) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16591) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 16591); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (57567, 57569, 57572, 57574, 57575, 57576, 57578, 57579, 57580); + +-- Thrallmar Wolf Rider (16599) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 16599) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 16599); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (57591, 57593, 57594, 57595, 57596, 57597); + +-- Stone Guard Stok'ton (17493) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17493) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 17493); + +-- Caza'rez (17558) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17558) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 17558); + +-- Wrathfin Sentry (17727) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17727) AND (`source_type` = 0) AND (`id` IN (3)); +DELETE FROM `creature_template_addon` WHERE (`entry` = 17727); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17727, 0, 0, 0, 0, 0, 0, '18950'); + +-- Coilfang Defender (17958) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17958) AND (`source_type` = 0) AND (`id` IN (2, 3)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17958, 0, 2, 0, 0, 0, 100, 0, 9700, 10900, 22000, 28000, 0, 11, 31554, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Defender - In Combat - Cast Spell Reflection'); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 17958); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (79150, 79246, 79274, 79275, 79420, 79421); + +-- Arcane Guardian (18103) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18103) AND (`source_type` = 0) AND (`id` IN (0, 1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18103, 0, 0, 0, 1, 0, 100, 0, 120000, 120000, 120000, 120000, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Arcane Guardian - Out of Combat - Say Line 0 (No Repeat) (Dungeon)'); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 18103); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (64056, 64058, 64059, 64060); + +-- Stonebreaker Peon (19048) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19048) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 19048); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (68351, 68353, 68355, 68356, 68357); + +-- Shadowmoon Peon (19355) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19355) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 19355); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (69071); + +-- Orgrimmar Peon (19425) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19425) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 19425); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (69482, 69483, 69485, 69486, 69488, 69489); + +-- Peon Overseer (19426) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19426) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 19426); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (69491); + +-- Injured Grunt (19432) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19432) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 19432); +UPDATE `creature_addon` SET `auras`=18950 WHERE (`guid` IN (69493, 69494, 69496, 69498)); + +-- Peon Bolgar (19562) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19562) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 19562); + +-- Mixie Farshot (19836) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19836) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 19836); + +-- Shadowmoon Eye of Kilrogg (22134) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 22134) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 22134); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (77730); + +-- Amani Lynx (24043) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 24043) AND (`source_type` = 0); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 24043); + +-- Sunblade Protector (25507) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 25507) AND (`source_type` = 0) AND (`id` IN (0, 1)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(25507, 0, 0, 0, 0, 0, 100, 0, 5800, 6800, 10400, 11400, 0, 11, 46480, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunblade Protector - In Combat - Cast Fel Lightning'); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 25507); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (48394, 48400); + +-- 7th Legion Sentinel (27162) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 27162) AND (`source_type` = 0) AND (`id` IN (0, 1, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(27162, 0, 0, 0, 0, 0, 100, 0, 0, 0, 2300, 3900, 0, 11, 15547, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, '7th Legion Sentinel - Out of Combat - Stop Attacking (No Repeat)'), +(27162, 0, 1, 0, 0, 0, 100, 0, 9000, 14000, 17000, 22000, 0, 11, 49481, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, '7th Legion Sentinel - On Aggro - Cast \'Shoot\' (No Repeat)'); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 27162); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (131154, 131155, 131157, 133210, 133215); + +-- Nesingwary Game Warden (30737) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 30737) AND (`source_type` = 0) AND (`id` IN (0, 1, 2, 3, 4)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(30737, 0, 0, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Nesingwary Game Warden - On Death - Send Zone Under Attack'), +(30737, 0, 1, 0, 0, 0, 100, 0, 0, 0, 2300, 3900, 0, 11, 16100, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nesingwary Game Warden - In Combat - Cast Shoot'), +(30737, 0, 2, 0, 9, 0, 100, 0, 0, 20, 9000, 13000, 0, 11, 6533, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nesingwary Game Warden - 0-20 Range - Cast Net'), +(30737, 0, 3, 0, 9, 0, 100, 0, 5, 30, 8000, 10000, 0, 11, 31942, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Nesingwary Game Warden - 5-30 Range - Cast Multi-Shot'); +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE (`entry` = 30737); +UPDATE `creature_addon` SET `auras`=18950 WHERE `guid` IN (97851, 97852, 97853, 97854, 97865, 97866, 97867, 97875, 97876, 97877, 97878, 97879); diff --git a/data/sql/updates/db_world/2022_12_06_38.sql b/data/sql/updates/db_world/2022_12_06_38.sql new file mode 100644 index 000000000..ddf39606d --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_38.sql @@ -0,0 +1,9 @@ +-- DB update 2022_12_06_37 -> 2022_12_06_38 +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=30 AND `SourceEntry` IN (24753,22943); +INSERT INTO `conditions` VALUES +(30,0,24753,0,0,33,0,1,2,0,0,0,0,'','Pint-Sized Pink Pachyderm visible only if target is in party with its owner'), +(30,0,24753,0,1,10,0,2,0,0,0,0,0,'','Pint-Sized Pink Pachyderm visible only if target is drunk'), + +(30,0,22943,0,0,33,0,1,2,0,0,0,0,'','Pint-Sized Pink Pachyderm visible only if target is in party with its owner'), +(30,0,22943,0,1,10,0,2,0,0,0,0,0,'','Pint-Sized Pink Pachyderm visible only if target is drunk'); diff --git a/data/sql/updates/db_world/2022_12_06_39.sql b/data/sql/updates/db_world/2022_12_06_39.sql new file mode 100644 index 000000000..988163dfa --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_39.sql @@ -0,0 +1,30 @@ +-- DB update 2022_12_06_38 -> 2022_12_06_39 +-- +UPDATE `dungeon_access_requirements` SET `comment`='Hellfire Citadel: The Shattered Halls (Heroic)' WHERE `requirement_id`=30637 AND `requirement_type`=2 AND `dungeon_access_id`=34; +UPDATE `dungeon_access_requirements` SET `comment`='Hellfire Citadel: The Shattered Halls (Heroic)' WHERE `requirement_id`=30622 AND `requirement_type`=2 AND `dungeon_access_id`=34; +UPDATE `dungeon_access_requirements` SET `comment`='Hellfire Citadel: The Blood Furnace (Heroic)' WHERE `requirement_id`=30637 AND `requirement_type`=2 AND `dungeon_access_id`=36; +UPDATE `dungeon_access_requirements` SET `comment`='Hellfire Citadel: The Blood Furnace (Heroic)' WHERE `requirement_id`=30622 AND `requirement_type`=2 AND `dungeon_access_id`=36; +UPDATE `dungeon_access_requirements` SET `comment`='Hellfire Citadel: Hellfire Ramparts (Heroic)' WHERE `requirement_id`=30637 AND `requirement_type`=2 AND `dungeon_access_id`=38; +UPDATE `dungeon_access_requirements` SET `comment`='Hellfire Citadel: Hellfire Ramparts (Heroic)' WHERE `requirement_id`=30622 AND `requirement_type`=2 AND `dungeon_access_id`=38; +UPDATE `dungeon_access_requirements` SET `comment`='Coilfang Resevoir: The Steamvault (Heroic)' WHERE `requirement_id`=30623 AND `requirement_type`=2 AND `dungeon_access_id`=41; +UPDATE `dungeon_access_requirements` SET `comment`='Coilfang Resevoir: The Underbog (Heroic)' WHERE `requirement_id`=30623 AND `requirement_type`=2 AND `dungeon_access_id`=43; +UPDATE `dungeon_access_requirements` SET `comment`='Coilfang Resevoir: The Slave Pens (Heroic)' WHERE `requirement_id`=30623 AND `requirement_type`=2 AND `dungeon_access_id`=45; +UPDATE `dungeon_access_requirements` SET `comment`='Tempest Keep: The Arcatraz (Heroic)' WHERE `dungeon_access_id`=49 AND `requirement_type`=2 AND `requirement_id`=30634; +UPDATE `dungeon_access_requirements` SET `comment`='Tempest Keep: The Botanica (Heroic)' WHERE `dungeon_access_id`=51 AND `requirement_type`=2 AND `requirement_id`=30634; +UPDATE `dungeon_access_requirements` SET `comment`='Tempest Keep: The Mechanar (Heroic)' WHERE `dungeon_access_id`=53 AND `requirement_type`=2 AND `requirement_id`=30634; +UPDATE `dungeon_access_requirements` SET `comment`='Auchindoun: Shadow Labyrinth (Heroic)' WHERE `dungeon_access_id`=55 AND `requirement_type`=2 AND `requirement_id`=30633; +UPDATE `dungeon_access_requirements` SET `comment`='Auchindoun: Sethekk Halls (Heroic)' WHERE `dungeon_access_id`=57 AND `requirement_type`=2 AND `requirement_id`=30633; +UPDATE `dungeon_access_requirements` SET `comment`='Auchindoun: Mana-Tombs (Heroic)' WHERE `dungeon_access_id`=59 AND `requirement_type`=2 AND `requirement_id`=30633; +UPDATE `dungeon_access_requirements` SET `comment`='Auchindoun: Auchenai Crypts (Heroic)' WHERE `dungeon_access_id`=61 AND `requirement_type`=2 AND `requirement_id`=30633; +UPDATE `dungeon_access_requirements` SET `comment`='Caverns Of Time: Escape from Durnholde (Heroic)' WHERE `dungeon_access_id`=63 AND `requirement_type`=2 AND `requirement_id`=30635; +UPDATE `dungeon_access_requirements` SET `comment`='Isle of Quel\'Danas: Magisters\' Terrace (Heroic)' WHERE `dungeon_access_id`=77 AND `requirement_type`=1 AND `requirement_id`=11492; +UPDATE `dungeon_access_requirements` SET `comment`='Caverns of Time: Opening the Dark Portal (Heroic)' WHERE `dungeon_access_id`=18; +UPDATE `dungeon_access_requirements` SET `comment`='Caverns of Time: Opening the Dark Portal (Normal)' WHERE `dungeon_access_id`=17 AND `requirement_type`=1 AND `requirement_id`=10285; +UPDATE `dungeon_access_requirements` SET `comment`='Icecrown Citadel (10 player, Heroic)' WHERE `dungeon_access_id`=104 AND `requirement_type`=0 AND `requirement_id`=4530; +UPDATE `dungeon_access_requirements` SET `comment`='Icecrown Citadel (25 player, Heroic)' WHERE `dungeon_access_id`=105 AND `requirement_type`=0 AND `requirement_id`=4597; +UPDATE `dungeon_access_requirements` SET `comment`='Trial of the Crusader (10 player, Heroic)' WHERE `dungeon_access_id`=110 AND `requirement_type`=0 AND `requirement_id`=3917; +UPDATE `dungeon_access_requirements` SET `comment`='Trial of the Crusader (25 player, Heroic)' WHERE `dungeon_access_id`=111 AND `requirement_type`=0 AND `requirement_id`=3916; +UPDATE `dungeon_access_requirements` SET `comment`='Icecrown Citadel: Pit of Saron (Normal)' WHERE `dungeon_access_id`=114; +UPDATE `dungeon_access_requirements` SET `comment`='Icecrown Citadel: Pit of Saron (Heroic)' WHERE `dungeon_access_id`=115; +UPDATE `dungeon_access_requirements` SET `comment`='Icecrown Citadel: Halls of Reflection (Normal)' WHERE `dungeon_access_id`=116; +UPDATE `dungeon_access_requirements` SET `comment`='Icecrown Citadel: Halls of Reflection (Heroic)' WHERE `dungeon_access_id`=117; diff --git a/data/sql/updates/db_world/2022_12_06_40.sql b/data/sql/updates/db_world/2022_12_06_40.sql new file mode 100644 index 000000000..299e0b0ee --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_40.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_39 -> 2022_12_06_40 +UPDATE `game_event` SET `start_time`='2021-09-20 03:00:00' WHERE `eventEntry`=24; -- Brewfest +UPDATE `game_event` SET `start_time`='2021-09-17 03:00:00' WHERE `eventEntry`=70; -- Brewfest building (IF) diff --git a/data/sql/updates/db_world/2022_12_06_41.sql b/data/sql/updates/db_world/2022_12_06_41.sql new file mode 100644 index 000000000..cc776dec1 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_41.sql @@ -0,0 +1,3 @@ +-- DB update 2022_12_06_40 -> 2022_12_06_41 +-- Add Plans: Copper Chain Vest +UPDATE `quest_template` SET `RewardItem2` = 3609, `RewardAmount2` = 1 WHERE (`ID` = 1578); diff --git a/data/sql/updates/db_world/2022_12_06_42.sql b/data/sql/updates/db_world/2022_12_06_42.sql new file mode 100644 index 000000000..ffa7d70e0 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_42.sql @@ -0,0 +1,4 @@ +-- DB update 2022_12_06_41 -> 2022_12_06_42 +-- +UPDATE `dungeon_access_requirements` SET `priority`=(NULL), `requirement_note`='You must complete the quest "The Caverns of Time" before entering Old Hillsbrad Foothills', `comment`='Caverns Of Time: Escape from Durnholde (Normal)' WHERE `dungeon_access_id`=62 AND `requirement_type`=1 AND `requirement_id`=10277; +UPDATE `dungeon_access_requirements` SET `priority`=(NULL), `requirement_note`='You must complete the quest "The Caverns of Time" and be level 70 before entering the Heroic difficulty of Old Hillsbrad Foothills', `comment`='Caverns Of Time: Escape from Durnholde (Heroic)' WHERE `dungeon_access_id`=63 AND `requirement_type`=1 AND `requirement_id`=10277; diff --git a/data/sql/updates/db_world/2022_12_06_43.sql b/data/sql/updates/db_world/2022_12_06_43.sql new file mode 100644 index 000000000..d87ca99c4 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_43.sql @@ -0,0 +1,5 @@ +-- DB update 2022_12_06_42 -> 2022_12_06_43 +-- 4 rows out of 128 have QuestRequired set to 1. Also increase chances to match Cmangos. +UPDATE `creature_loot_template` SET `QuestRequired`=0, `Chance`=0.5 WHERE `Item` IN (20874, 20875, 20876, 20877, 20878, 20879, 20881, 20882); +-- Increase Large Scarab Coffer pool +UPDATE `pool_template` SET `max_limit`=11 WHERE `entry`=1161 AND `description`='Large Scarab Coffers'; diff --git a/data/sql/updates/db_world/2022_12_06_44.sql b/data/sql/updates/db_world/2022_12_06_44.sql new file mode 100644 index 000000000..d4a093153 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_44.sql @@ -0,0 +1,18 @@ +-- DB update 2022_12_06_43 -> 2022_12_06_44 +-- +SET @OGUID := 260580; +DELETE FROM `gameobject` WHERE `id` IN (183442,183496,183491,183492,183493,183443,183494,183495); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID,183442,532,1,1,-10890.9,-1744.06,90.4765,-1.67552,0,0,0,0,-3600,100,1), +(@OGUID+1,183443,532,1,1,-10890.9,-1744.06,90.4765,-1.67552,0,0,0,0,-3600,100,1), +(@OGUID+2,183491,532,1,1,-10890.9,-1744.06,90.4765,-1.67552,0,0,0,0,-3600,100,1), +(@OGUID+3,183492,532,1,1,-10880.2,-1760.6,90.47,-1.67552,0,0,0,0,-3600,100,1), +(@OGUID+4,183492,532,1,1,-10898.7,-1752.38,90.47,-1.67552,0,0,0,0,-3600,100,1), +(@OGUID+5,183492,532,1,1,-10907.4,-1759.4,90.47,-1.67552,0,0,0,0,-3600,100,1), +(@OGUID+6,183493,532,1,1,-10888.7,-1756.65,90.47,-1.67552,0,0,0,0,-3600,100,1), +(@OGUID+7,183494,532,1,1,-10905.8,-1749.38,110.477,-1.67552,0,0,0,0,-3600,100,1), +(@OGUID+8,183495,532,1,1,-10895.9,-1748.06,90.4765,-1.67552,0,0,0,0,-3600,100,1), +(@OGUID+9,183496,532,1,1,-10906.7,-1750.01,90.4765,-1.69297,0,0,0,0,-3600,100,1), +(@OGUID+10,183496,532,1,1,-10883,-1751.81,90.4765,-1.72788,0,0,0,0,-3600,100,1), +(@OGUID+11,183496,532,1,1,-10877.7,-1763.18,90.4771,-1.69297,0,0,0,0,-3600,100,1), +(@OGUID+12,183496,532,1,1,-10909.5,-1761.79,90.4773,-1.65806,0,0,0,0,-3600,100,1); diff --git a/data/sql/updates/db_world/2022_12_06_45.sql b/data/sql/updates/db_world/2022_12_06_45.sql new file mode 100644 index 000000000..c53144903 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_06_45.sql @@ -0,0 +1,10 @@ +-- DB update 2022_12_06_44 -> 2022_12_06_45 +-- +DELETE FROM `game_event` WHERE `eventEntry` IN (75, 76) AND `description` LIKE '%Arena Season%'; +INSERT INTO `game_event` (`eventEntry`, `description`) VALUES +(75, 'Arena Season 1'), +(76, 'Arena Season 2'); +DELETE FROM `game_event_arena_seasons` WHERE `eventEntry` IN (75, 76) AND `season` IN (1, 2); +INSERT INTO `game_event_arena_seasons` (`eventEntry`, `season`) VALUES +(75, 1), +(76, 2); diff --git a/data/sql/updates/db_world/2022_12_07_00.sql b/data/sql/updates/db_world/2022_12_07_00.sql new file mode 100644 index 000000000..a342ea9c7 --- /dev/null +++ b/data/sql/updates/db_world/2022_12_07_00.sql @@ -0,0 +1,9 @@ +-- DB update 2022_12_06_45 -> 2022_12_07_00 +-- Starter +DELETE FROM `creature_queststarter` WHERE (`quest` = 10259) AND (`id` IN (19942)); +INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES +(19942, 10259); +-- Ender +DELETE FROM `creature_questender` WHERE (`quest` = 10259) AND (`id` IN (19942)); +INSERT INTO `creature_questender` (`id`, `quest`) VALUES +(19942, 10259); diff --git a/deps/openssl/CMakeLists.txt b/deps/openssl/CMakeLists.txt index bc69bbfa4..a72459cd7 100644 --- a/deps/openssl/CMakeLists.txt +++ b/deps/openssl/CMakeLists.txt @@ -14,14 +14,11 @@ # (further support will be needed, this is a preliminary release!) set(OPENSSL_EXPECTED_VERSION 1.0.0) -find_package(OpenSSL REQUIRED) +find_package(OpenSSL REQUIRED COMPONENTS Crypto SSL) add_library(openssl INTERFACE) target_link_libraries(openssl INTERFACE - ${OPENSSL_LIBRARIES}) - -target_include_directories(openssl - INTERFACE - ${OPENSSL_INCLUDE_DIR}) \ No newline at end of file + OpenSSL::Crypto + OpenSSL::SSL) \ No newline at end of file diff --git a/src/cmake/macros/FindOpenSSL.cmake b/src/cmake/macros/FindOpenSSL.cmake index 4d46e5edd..f40a591f9 100644 --- a/src/cmake/macros/FindOpenSSL.cmake +++ b/src/cmake/macros/FindOpenSSL.cmake @@ -1,75 +1,195 @@ -# - Try to find the OpenSSL encryption library -# Once done this will define -# -# OPENSSL_ROOT_DIR - Set this variable to the root installation of OpenSSL -# -# Read-Only variables: -# OPENSSL_FOUND - system has the OpenSSL library -# OPENSSL_INCLUDE_DIR - the OpenSSL include directory -# OPENSSL_LIBRARIES - The libraries needed to use OpenSSL +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. -#============================================================================= -# Copyright 2006-2009 Kitware, Inc. -# Copyright 2006 Alexander Neundorf -# Copyright 2009-2010 Mathieu Malaterre -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distributed this file outside of CMake, substitute the full -# License text for the above reference.) +#[=======================================================================[.rst: +FindOpenSSL +----------- -# http://www.slproweb.com/products/Win32OpenSSL.html +Find the OpenSSL encryption library. -SET(_OPENSSL_ROOT_HINTS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]" - "$ENV{OPENSSL_ROOT_DIR}" - "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}" - ) +Optional COMPONENTS +^^^^^^^^^^^^^^^^^^^ -IF(PLATFORM EQUAL 64) - SET(_OPENSSL_ROOT_PATHS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;InstallLocation]" - "C:/OpenSSL-Win64/" - "C:/OpenSSL/" - "C:/Program Files/OpenSSL-Win64/" - ) -ELSE() - SET(_OPENSSL_ROOT_PATHS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]" - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]" - "C:/OpenSSL/" - "C:/Program Files/OpenSSL/" - ) -ENDIF() +This module supports two optional COMPONENTS: ``Crypto`` and ``SSL``. Both +components have associated imported targets, as described below. -FIND_PATH(OPENSSL_ROOT_DIR +Imported Targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``OpenSSL::SSL`` + The OpenSSL ``ssl`` library, if found. +``OpenSSL::Crypto`` + The OpenSSL ``crypto`` library, if found. +``OpenSSL::applink`` + The OpenSSL ``applink`` components that might be need to be compiled into + projects under MSVC. This target is available only if found OpenSSL version + is not less than 0.9.8. By linking this target the above OpenSSL targets can + be linked even if the project has different MSVC runtime configurations with + the above OpenSSL targets. This target has no effect on platforms other than + MSVC. + +NOTE: Due to how ``INTERFACE_SOURCES`` are consumed by the consuming target, +unless you certainly know what you are doing, it is always preferred to link +``OpenSSL::applink`` target as ``PRIVATE`` and to make sure that this target is +linked at most once for the whole dependency graph of any library or +executable: + +.. code-block:: cmake + + target_link_libraries(myTarget PRIVATE OpenSSL::applink) + +Otherwise you would probably encounter unexpected random problems when building +and linking, as both the ISO C and the ISO C++ standard claims almost nothing +about what a link process should be. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``OPENSSL_FOUND`` + System has the OpenSSL library. If no components are requested it only + requires the crypto library. +``OPENSSL_INCLUDE_DIR`` + The OpenSSL include directory. +``OPENSSL_CRYPTO_LIBRARY`` + The OpenSSL crypto library. +``OPENSSL_CRYPTO_LIBRARIES`` + The OpenSSL crypto library and its dependencies. +``OPENSSL_SSL_LIBRARY`` + The OpenSSL SSL library. +``OPENSSL_SSL_LIBRARIES`` + The OpenSSL SSL library and its dependencies. +``OPENSSL_LIBRARIES`` + All OpenSSL libraries and their dependencies. +``OPENSSL_VERSION`` + This is set to ``$major.$minor.$revision$patch`` (e.g. ``0.9.8s``). +``OPENSSL_APPLINK_SOURCE`` + The sources in the target ``OpenSSL::applink`` that is mentioned above. This + variable shall always be undefined if found openssl version is less than + 0.9.8 or if platform is not MSVC. + +Hints +^^^^^ + +Set ``OPENSSL_ROOT_DIR`` to the root directory of an OpenSSL installation. +Set ``OPENSSL_USE_STATIC_LIBS`` to ``TRUE`` to look for static libraries. +Set ``OPENSSL_MSVC_STATIC_RT`` set ``TRUE`` to choose the MT version of the lib. +#]=======================================================================] + +set(OPENSSL_EXPECTED_VERSION "1.0") + +macro(_OpenSSL_test_and_find_dependencies ssl_library crypto_library) + if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND + (("${ssl_library}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$") OR + ("${crypto_library}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$"))) + set(_OpenSSL_has_dependencies TRUE) + find_package(Threads) + else() + set(_OpenSSL_has_dependencies FALSE) + endif() +endmacro() + +function(_OpenSSL_add_dependencies libraries_var) + if(CMAKE_THREAD_LIBS_INIT) + list(APPEND ${libraries_var} ${CMAKE_THREAD_LIBS_INIT}) + endif() + list(APPEND ${libraries_var} ${CMAKE_DL_LIBS}) + set(${libraries_var} ${${libraries_var}} PARENT_SCOPE) +endfunction() + +function(_OpenSSL_target_add_dependencies target) + if(_OpenSSL_has_dependencies) + set_property( TARGET ${target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES Threads::Threads ) + set_property( TARGET ${target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS} ) + endif() +endfunction() + +if (UNIX) + find_package(PkgConfig QUIET) + pkg_check_modules(_OPENSSL QUIET openssl) +endif () + +# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES +if(OPENSSL_USE_STATIC_LIBS) + set(_openssl_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) + if(WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else() + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ) + endif() +endif() + +if (WIN32) + # http://www.slproweb.com/products/Win32OpenSSL.html + set(_OPENSSL_MSI_INSTALL_GUID "") + if(PLATFORM EQUAL 64) + set(_OPENSSL_MSI_INSTALL_GUID "117551DB-A110-4BBD-BB05-CFE0BCB3ED31") + set(_OPENSSL_ROOT_HINTS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]" + ${OPENSSL_ROOT_DIR} + ENV OPENSSL_ROOT_DIR + ) + file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles) + set(_OPENSSL_ROOT_PATHS + "${_programfiles}/OpenSSL" + "${_programfiles}/OpenSSL-Win64" + "C:/OpenSSL/" + "C:/OpenSSL-Win64/" + ) + else() + set(_OPENSSL_MSI_INSTALL_GUID "A1EEC576-43B9-4E75-9E02-03DA542D2A38") + set(_OPENSSL_ROOT_HINTS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]" + ${OPENSSL_ROOT_DIR} + ENV OPENSSL_ROOT_DIR + ) + file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles) + set(_OPENSSL_ROOT_PATHS + "${_programfiles}/OpenSSL" + "${_programfiles}/OpenSSL-Win32" + "C:/OpenSSL/" + "C:/OpenSSL-Win32/" + ) + endif() + unset(_programfiles) + # If OpenSSL was installed using .msi package instead of .exe, Inno Setup registry values are not written to Uninstall\OpenSSL + # but because it is only a shim around Inno Setup it does write the location of uninstaller which we can use to determine path + get_filename_component(_OPENSSL_MSI_INSTALL_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Inno Setup MSIs\\${_OPENSSL_MSI_INSTALL_GUID};]" DIRECTORY) + if(NOT _OPENSSL_MSI_INSTALL_PATH STREQUAL "/") + list(INSERT _OPENSSL_ROOT_HINTS 0 ${_OPENSSL_MSI_INSTALL_PATH}) + endif() +else () + set(_OPENSSL_ROOT_HINTS + ${OPENSSL_ROOT_DIR} + ENV OPENSSL_ROOT_DIR + ) +endif () + +set(_OPENSSL_ROOT_HINTS_AND_PATHS + HINTS ${_OPENSSL_ROOT_HINTS} + PATHS ${_OPENSSL_ROOT_PATHS} + ) + +find_path(OPENSSL_INCLUDE_DIR NAMES - include/openssl/ssl.h + openssl/ssl.h + ${_OPENSSL_ROOT_HINTS_AND_PATHS} HINTS - ${_OPENSSL_ROOT_HINTS} - PATHS - ${_OPENSSL_ROOT_PATHS} -) -MARK_AS_ADVANCED(OPENSSL_ROOT_DIR) - -# Re-use the previous path: -FIND_PATH(OPENSSL_INCLUDE_DIR openssl/ssl.h - ${OPENSSL_ROOT_DIR}/include + ${_OPENSSL_INCLUDEDIR} + ${_OPENSSL_INCLUDE_DIRS} + PATH_SUFFIXES + include ) -IF(WIN32 AND NOT CYGWIN) - # MINGW should go here too - IF(MSVC) +if(WIN32 AND NOT CYGWIN) + if(MSVC) # /MD and /MDd are the standard values - if someone wants to use # others, the libnames have to change here too # use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b - # TODO: handle /MT and static lib + # enable OPENSSL_MSVC_STATIC_RT to get the libs build /MT (Multithreaded no-DLL) # In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix: # * MD for dynamic-release # * MDd for dynamic-debug @@ -77,119 +197,475 @@ IF(WIN32 AND NOT CYGWIN) # * MTd for static-debug # Implementation details: - # We are using the libraries located in the VC subdir instead of the parent directory eventhough : + # We are using the libraries located in the VC subdir instead of the parent directory even though : # libeay32MD.lib is identical to ../libeay32.lib, and # ssleay32MD.lib is identical to ../ssleay32.lib + # enable OPENSSL_USE_STATIC_LIBS to use the static libs located in lib/VC/static - # In 1.1 version of OpenSSL we have other names of libs: libcrypto32MTd.lib and libssl32MTd.lib + if (OPENSSL_MSVC_STATIC_RT) + set(_OPENSSL_MSVC_RT_MODE "MT") + else () + set(_OPENSSL_MSVC_RT_MODE "MD") + endif () + + # Since OpenSSL 1.1, lib names are like libcrypto32MTd.lib and libssl32MTd.lib if( "${CMAKE_SIZEOF_VOID_P}" STREQUAL "8" ) set(_OPENSSL_MSVC_ARCH_SUFFIX "64") else() set(_OPENSSL_MSVC_ARCH_SUFFIX "32") endif() - FIND_LIBRARY(LIB_EAY_DEBUG - NAMES - libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}MDd libcrypto libeay32MDd libeay32 - PATHS - ${OPENSSL_ROOT_DIR}/lib/VC - ${OPENSSL_ROOT_DIR}/debug/lib - ) - - FIND_LIBRARY(LIB_EAY_RELEASE - NAMES - libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}MD libcrypto libeay32MD libeay32 - PATHS - ${OPENSSL_ROOT_DIR}/lib/VC - ${OPENSSL_ROOT_DIR}/lib - ) - - FIND_LIBRARY(SSL_EAY_DEBUG - NAMES - libssl${_OPENSSL_MSVC_ARCH_SUFFIX}MDd libssl ssleay32MDd ssleay32 ssl - PATHS - ${OPENSSL_ROOT_DIR}/lib/VC - ${OPENSSL_ROOT_DIR}/debug/lib - ) - - FIND_LIBRARY(SSL_EAY_RELEASE - NAMES - libssl${_OPENSSL_MSVC_ARCH_SUFFIX}MD libssl ssleay32MD ssleay32 ssl - PATHS - ${OPENSSL_ROOT_DIR}/lib/VC - ${OPENSSL_ROOT_DIR}/lib - ) - - if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) - set( OPENSSL_LIBRARIES - optimized ${SSL_EAY_RELEASE} ${LIB_EAY_RELEASE} - debug ${SSL_EAY_DEBUG} ${LIB_EAY_DEBUG} + if(OPENSSL_USE_STATIC_LIBS) + set(_OPENSSL_STATIC_SUFFIX + "_static" ) + set(_OPENSSL_PATH_SUFFIXES + "lib/VC/static" + "VC/static" + "lib" + ) else() - set( OPENSSL_LIBRARIES - ${SSL_EAY_RELEASE} - ${LIB_EAY_RELEASE} + set(_OPENSSL_STATIC_SUFFIX + "" ) + set(_OPENSSL_PATH_SUFFIXES + "lib/VC" + "VC" + "lib" + ) + endif () + + find_library(LIB_EAY_DEBUG + NAMES + # When OpenSSL is built with default options, the static library name is suffixed with "_static". + # Looking the "libcrypto_static.lib" with a higher priority than "libcrypto.lib" which is the + # import library of "libcrypto.dll". + libcrypto${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d + libcrypto${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d + libcrypto${_OPENSSL_STATIC_SUFFIX}d + libeay32${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d + libeay32${_OPENSSL_STATIC_SUFFIX}d + crypto${_OPENSSL_STATIC_SUFFIX}d + # When OpenSSL is built with the "-static" option, only the static build is produced, + # and it is not suffixed with "_static". + libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d + libcrypto${_OPENSSL_MSVC_RT_MODE}d + libcryptod + libeay32${_OPENSSL_MSVC_RT_MODE}d + libeay32d + cryptod + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + ${_OPENSSL_PATH_SUFFIXES} + ) + + find_library(LIB_EAY_RELEASE + NAMES + # When OpenSSL is built with default options, the static library name is suffixed with "_static". + # Looking the "libcrypto_static.lib" with a higher priority than "libcrypto.lib" which is the + # import library of "libcrypto.dll". + libcrypto${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE} + libcrypto${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE} + libcrypto${_OPENSSL_STATIC_SUFFIX} + libeay32${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE} + libeay32${_OPENSSL_STATIC_SUFFIX} + crypto${_OPENSSL_STATIC_SUFFIX} + # When OpenSSL is built with the "-static" option, only the static build is produced, + # and it is not suffixed with "_static". + libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE} + libcrypto${_OPENSSL_MSVC_RT_MODE} + libcrypto + libeay32${_OPENSSL_MSVC_RT_MODE} + libeay32 + crypto + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + ${_OPENSSL_PATH_SUFFIXES} + ) + + find_library(SSL_EAY_DEBUG + NAMES + # When OpenSSL is built with default options, the static library name is suffixed with "_static". + # Looking the "libssl_static.lib" with a higher priority than "libssl.lib" which is the + # import library of "libssl.dll". + libssl${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d + libssl${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d + libssl${_OPENSSL_STATIC_SUFFIX}d + ssleay32${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d + ssleay32${_OPENSSL_STATIC_SUFFIX}d + ssl${_OPENSSL_STATIC_SUFFIX}d + # When OpenSSL is built with the "-static" option, only the static build is produced, + # and it is not suffixed with "_static". + libssl${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d + libssl${_OPENSSL_MSVC_RT_MODE}d + libssld + ssleay32${_OPENSSL_MSVC_RT_MODE}d + ssleay32d + ssld + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + ${_OPENSSL_PATH_SUFFIXES} + ) + + find_library(SSL_EAY_RELEASE + NAMES + # When OpenSSL is built with default options, the static library name is suffixed with "_static". + # Looking the "libssl_static.lib" with a higher priority than "libssl.lib" which is the + # import library of "libssl.dll". + libssl${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE} + libssl${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE} + libssl${_OPENSSL_STATIC_SUFFIX} + ssleay32${_OPENSSL_STATIC_SUFFIX}${_OPENSSL_MSVC_RT_MODE} + ssleay32${_OPENSSL_STATIC_SUFFIX} + ssl${_OPENSSL_STATIC_SUFFIX} + # When OpenSSL is built with the "-static" option, only the static build is produced, + # and it is not suffixed with "_static". + libssl${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE} + libssl${_OPENSSL_MSVC_RT_MODE} + libssl + ssleay32${_OPENSSL_MSVC_RT_MODE} + ssleay32 + ssl + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + ${_OPENSSL_PATH_SUFFIXES} + ) + + set(LIB_EAY_LIBRARY_DEBUG "${LIB_EAY_DEBUG}") + set(LIB_EAY_LIBRARY_RELEASE "${LIB_EAY_RELEASE}") + set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}") + set(SSL_EAY_LIBRARY_RELEASE "${SSL_EAY_RELEASE}") + + include(SelectLibraryConfigurations) + select_library_configurations(LIB_EAY) + select_library_configurations(SSL_EAY) + + mark_as_advanced(LIB_EAY_LIBRARY_DEBUG LIB_EAY_LIBRARY_RELEASE + SSL_EAY_LIBRARY_DEBUG SSL_EAY_LIBRARY_RELEASE) + set(OPENSSL_SSL_LIBRARY ${SSL_EAY_LIBRARY} ) + set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY_LIBRARY} ) + elseif(MINGW) + # same player, for MinGW + set(LIB_EAY_NAMES crypto libeay32) + set(SSL_EAY_NAMES ssl ssleay32) + find_library(LIB_EAY + NAMES + ${LIB_EAY_NAMES} + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + "lib/MinGW" + "lib" + ) + + find_library(SSL_EAY + NAMES + ${SSL_EAY_NAMES} + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + PATH_SUFFIXES + "lib/MinGW" + "lib" + ) + + mark_as_advanced(SSL_EAY LIB_EAY) + set(OPENSSL_SSL_LIBRARY ${SSL_EAY} ) + set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY} ) + unset(LIB_EAY_NAMES) + unset(SSL_EAY_NAMES) + else() + # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues: + find_library(LIB_EAY + NAMES + libcrypto + libeay32 + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + HINTS + ${_OPENSSL_LIBDIR} + PATH_SUFFIXES + lib + ) + + find_library(SSL_EAY + NAMES + libssl + ssleay32 + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + HINTS + ${_OPENSSL_LIBDIR} + PATH_SUFFIXES + lib + ) + + mark_as_advanced(SSL_EAY LIB_EAY) + set(OPENSSL_SSL_LIBRARY ${SSL_EAY} ) + set(OPENSSL_CRYPTO_LIBRARY ${LIB_EAY} ) + endif() +else() + + find_library(OPENSSL_SSL_LIBRARY + NAMES + ssl + ssleay32 + ssleay32MD + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + HINTS + ${_OPENSSL_LIBDIR} + ${_OPENSSL_LIBRARY_DIRS} + PATH_SUFFIXES + lib + ) + + find_library(OPENSSL_CRYPTO_LIBRARY + NAMES + crypto + NAMES_PER_DIR + ${_OPENSSL_ROOT_HINTS_AND_PATHS} + HINTS + ${_OPENSSL_LIBDIR} + ${_OPENSSL_LIBRARY_DIRS} + PATH_SUFFIXES + lib + ) + + mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY) + +endif() + +set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY}) +set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY}) +set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES} ) +_OpenSSL_test_and_find_dependencies("${OPENSSL_SSL_LIBRARY}" "${OPENSSL_CRYPTO_LIBRARY}") +if(_OpenSSL_has_dependencies) + _OpenSSL_add_dependencies( OPENSSL_SSL_LIBRARIES ) + _OpenSSL_add_dependencies( OPENSSL_CRYPTO_LIBRARIES ) + _OpenSSL_add_dependencies( OPENSSL_LIBRARIES ) +endif() + +function(from_hex HEX DEC) + string(TOUPPER "${HEX}" HEX) + set(_res 0) + string(LENGTH "${HEX}" _strlen) + + while (_strlen GREATER 0) + math(EXPR _res "${_res} * 16") + string(SUBSTRING "${HEX}" 0 1 NIBBLE) + string(SUBSTRING "${HEX}" 1 -1 HEX) + if (NIBBLE STREQUAL "A") + math(EXPR _res "${_res} + 10") + elseif (NIBBLE STREQUAL "B") + math(EXPR _res "${_res} + 11") + elseif (NIBBLE STREQUAL "C") + math(EXPR _res "${_res} + 12") + elseif (NIBBLE STREQUAL "D") + math(EXPR _res "${_res} + 13") + elseif (NIBBLE STREQUAL "E") + math(EXPR _res "${_res} + 14") + elseif (NIBBLE STREQUAL "F") + math(EXPR _res "${_res} + 15") + else() + math(EXPR _res "${_res} + ${NIBBLE}") endif() - MARK_AS_ADVANCED(SSL_EAY_DEBUG SSL_EAY_RELEASE LIB_EAY_DEBUG LIB_EAY_RELEASE) - ELSEIF(MINGW) + string(LENGTH "${HEX}" _strlen) + endwhile() - # same player, for MingW - FIND_LIBRARY(LIB_EAY - NAMES - libeay32 - PATHS - ${OPENSSL_ROOT_DIR}/lib/MinGW + set(${DEC} ${_res} PARENT_SCOPE) +endfunction() + +if(OPENSSL_INCLUDE_DIR AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h") + file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str + REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*") + + if(openssl_version_str) + # The version number is encoded as 0xMNNFFPPS: major minor fix patch status + # The status gives if this is a developer or prerelease and is ignored here. + # Major, minor, and fix directly translate into the version numbers shown in + # the string. The patch field translates to the single character suffix that + # indicates the bug fix state, which 00 -> nothing, 01 -> a, 02 -> b and so + # on. + + string(REGEX REPLACE "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]).*$" + "\\1;\\2;\\3;\\4;\\5" OPENSSL_VERSION_LIST "${openssl_version_str}") + list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR) + list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR) + from_hex("${OPENSSL_VERSION_MINOR}" OPENSSL_VERSION_MINOR) + list(GET OPENSSL_VERSION_LIST 2 OPENSSL_VERSION_FIX) + from_hex("${OPENSSL_VERSION_FIX}" OPENSSL_VERSION_FIX) + list(GET OPENSSL_VERSION_LIST 3 OPENSSL_VERSION_PATCH) + + if (NOT OPENSSL_VERSION_PATCH STREQUAL "00") + from_hex("${OPENSSL_VERSION_PATCH}" _tmp) + # 96 is the ASCII code of 'a' minus 1 + math(EXPR OPENSSL_VERSION_PATCH_ASCII "${_tmp} + 96") + unset(_tmp) + # Once anyone knows how OpenSSL would call the patch versions beyond 'z' + # this should be updated to handle that, too. This has not happened yet + # so it is simply ignored here for now. + string(ASCII "${OPENSSL_VERSION_PATCH_ASCII}" OPENSSL_VERSION_PATCH_STRING) + endif () + + set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}") + else () + # Since OpenSSL 3.0.0, the new version format is MAJOR.MINOR.PATCH and + # a new OPENSSL_VERSION_STR macro contains exactly that + file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" OPENSSL_VERSION_STR + REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_STR[\t ]+\"([0-9])+\\.([0-9])+\\.([0-9])+\".*") + string(REGEX REPLACE "^.*OPENSSL_VERSION_STR[\t ]+\"([0-9]+\\.[0-9]+\\.[0-9]+)\".*$" + "\\1" OPENSSL_VERSION_STR "${OPENSSL_VERSION_STR}") + + set(OPENSSL_VERSION "${OPENSSL_VERSION_STR}") + + unset(OPENSSL_VERSION_STR) + endif () +endif () + +foreach(_comp IN LISTS OpenSSL_FIND_COMPONENTS) + if(_comp STREQUAL "Crypto") + if(EXISTS "${OPENSSL_INCLUDE_DIR}" AND + (EXISTS "${OPENSSL_CRYPTO_LIBRARY}" OR + EXISTS "${LIB_EAY_LIBRARY_DEBUG}" OR + EXISTS "${LIB_EAY_LIBRARY_RELEASE}") ) - - FIND_LIBRARY(SSL_EAY NAMES - NAMES - ssleay32 - PATHS - ${OPENSSL_ROOT_DIR}/lib/MinGW + set(OpenSSL_${_comp}_FOUND TRUE) + else() + set(OpenSSL_${_comp}_FOUND FALSE) + endif() + elseif(_comp STREQUAL "SSL") + if(EXISTS "${OPENSSL_INCLUDE_DIR}" AND + (EXISTS "${OPENSSL_SSL_LIBRARY}" OR + EXISTS "${SSL_EAY_LIBRARY_DEBUG}" OR + EXISTS "${SSL_EAY_LIBRARY_RELEASE}") ) - - MARK_AS_ADVANCED(SSL_EAY LIB_EAY) - - set( OPENSSL_LIBRARIES - ${SSL_EAY} - ${LIB_EAY} - ) - ELSE(MSVC) - # Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues: - FIND_LIBRARY(LIB_EAY - NAMES - libeay32 - PATHS - ${OPENSSL_ROOT_DIR}/lib - ${OPENSSL_ROOT_DIR}/lib/VC - ) - - FIND_LIBRARY(SSL_EAY - NAMES - ssleay32 - PATHS - ${OPENSSL_ROOT_DIR}/lib - ${OPENSSL_ROOT_DIR}/lib/VC - ) - MARK_AS_ADVANCED(SSL_EAY LIB_EAY) - - SET( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} ) - ENDIF(MSVC) -ELSE(WIN32 AND NOT CYGWIN) - FIND_LIBRARY(OPENSSL_SSL_LIBRARIES NAMES ssl ssleay32 ssleay32MD) - FIND_LIBRARY(OPENSSL_CRYPTO_LIBRARIES NAMES crypto) - MARK_AS_ADVANCED(OPENSSL_CRYPTO_LIBRARIES OPENSSL_SSL_LIBRARIES) - - SET(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES}) - -ENDIF(WIN32 AND NOT CYGWIN) + set(OpenSSL_${_comp}_FOUND TRUE) + else() + set(OpenSSL_${_comp}_FOUND FALSE) + endif() + else() + message(WARNING "${_comp} is not a valid OpenSSL component") + set(OpenSSL_${_comp}_FOUND FALSE) + endif() +endforeach() +unset(_comp) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(OpenSSL DEFAULT_MSG - OPENSSL_LIBRARIES - OPENSSL_INCLUDE_DIR +find_package_handle_standard_args(OpenSSL + REQUIRED_VARS + OPENSSL_CRYPTO_LIBRARY + OPENSSL_INCLUDE_DIR + VERSION_VAR + OPENSSL_VERSION + HANDLE_COMPONENTS + FAIL_MESSAGE + "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR" ) -MARK_AS_ADVANCED(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES) +mark_as_advanced(OPENSSL_INCLUDE_DIR) + +if(OPENSSL_FOUND) + message(STATUS "Found OpenSSL library: ${OPENSSL_LIBRARIES}") + message(STATUS "Found OpenSSL headers: ${OPENSSL_INCLUDE_DIR}") + include(EnsureVersion) + ENSURE_VERSION("${OPENSSL_EXPECTED_VERSION}" "${OPENSSL_VERSION}" OPENSSL_VERSION_OK) + if(NOT OPENSSL_VERSION_OK) + message(FATAL_ERROR "TrinityCore needs OpenSSL version ${OPENSSL_EXPECTED_VERSION} but found too new version ${OPENSSL_VERSION}. TrinityCore needs OpenSSL 1.0.x or 1.1.x to work properly. If you still have problems please install OpenSSL 1.0.x if you still have problems search on forum for TCE00022") + endif() + + if(NOT TARGET OpenSSL::Crypto AND + (EXISTS "${OPENSSL_CRYPTO_LIBRARY}" OR + EXISTS "${LIB_EAY_LIBRARY_DEBUG}" OR + EXISTS "${LIB_EAY_LIBRARY_RELEASE}") + ) + add_library(OpenSSL::Crypto UNKNOWN IMPORTED) + set_target_properties(OpenSSL::Crypto PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") + if(EXISTS "${OPENSSL_CRYPTO_LIBRARY}") + set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${OPENSSL_CRYPTO_LIBRARY}") + endif() + if(EXISTS "${LIB_EAY_LIBRARY_RELEASE}") + set_property(TARGET OpenSSL::Crypto APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C" + IMPORTED_LOCATION_RELEASE "${LIB_EAY_LIBRARY_RELEASE}") + endif() + if(EXISTS "${LIB_EAY_LIBRARY_DEBUG}") + set_property(TARGET OpenSSL::Crypto APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(OpenSSL::Crypto PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C" + IMPORTED_LOCATION_DEBUG "${LIB_EAY_LIBRARY_DEBUG}") + endif() + _OpenSSL_target_add_dependencies(OpenSSL::Crypto) + endif() + + if(NOT TARGET OpenSSL::SSL AND + (EXISTS "${OPENSSL_SSL_LIBRARY}" OR + EXISTS "${SSL_EAY_LIBRARY_DEBUG}" OR + EXISTS "${SSL_EAY_LIBRARY_RELEASE}") + ) + add_library(OpenSSL::SSL UNKNOWN IMPORTED) + set_target_properties(OpenSSL::SSL PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") + if(EXISTS "${OPENSSL_SSL_LIBRARY}") + set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${OPENSSL_SSL_LIBRARY}") + endif() + if(EXISTS "${SSL_EAY_LIBRARY_RELEASE}") + set_property(TARGET OpenSSL::SSL APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C" + IMPORTED_LOCATION_RELEASE "${SSL_EAY_LIBRARY_RELEASE}") + endif() + if(EXISTS "${SSL_EAY_LIBRARY_DEBUG}") + set_property(TARGET OpenSSL::SSL APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(OpenSSL::SSL PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C" + IMPORTED_LOCATION_DEBUG "${SSL_EAY_LIBRARY_DEBUG}") + endif() + if(TARGET OpenSSL::Crypto) + set_target_properties(OpenSSL::SSL PROPERTIES + INTERFACE_LINK_LIBRARIES OpenSSL::Crypto) + endif() + _OpenSSL_target_add_dependencies(OpenSSL::SSL) + endif() + + if("${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_FIX}" VERSION_GREATER_EQUAL "0.9.8") + if(MSVC) + if(EXISTS "${OPENSSL_INCLUDE_DIR}") + set(_OPENSSL_applink_paths PATHS ${OPENSSL_INCLUDE_DIR}) + endif() + find_file(OPENSSL_APPLINK_SOURCE + NAMES + openssl/applink.c + ${_OPENSSL_applink_paths} + NO_DEFAULT_PATH) + if(OPENSSL_APPLINK_SOURCE) + set(_OPENSSL_applink_interface_srcs ${OPENSSL_APPLINK_SOURCE}) + endif() + endif() + if(NOT TARGET OpenSSL::applink) + add_library(OpenSSL::applink INTERFACE IMPORTED) + set_property(TARGET OpenSSL::applink APPEND + PROPERTY INTERFACE_SOURCES + ${_OPENSSL_applink_interface_srcs}) + endif() + endif() +endif() + +# Restore the original find library ordering +if(OPENSSL_USE_STATIC_LIBS) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${_openssl_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) +endif() diff --git a/src/common/Cryptography/AES.cpp b/src/common/Cryptography/AES.cpp index 3087af2e2..31e084700 100644 --- a/src/common/Cryptography/AES.cpp +++ b/src/common/Cryptography/AES.cpp @@ -1,6 +1,18 @@ /* - * Copyright (C) 2016+ AzerothCore , released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3 - * Copyright (C) 2021+ WarheadCore + * This file is part of the AzerothCore 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 Affero General Public License as published by the + * Free Software Foundation; either version 3 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 Affero 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 . */ #include "AES.h" @@ -30,34 +42,24 @@ bool Acore::Crypto::AES::Process(IV const& iv, uint8* data, size_t length, Tag& ASSERT(length <= static_cast(std::numeric_limits::max())); int len = static_cast(length); if (!EVP_CipherInit_ex(_ctx, nullptr, nullptr, nullptr, iv.data(), -1)) - { return false; - } int outLen; if (!EVP_CipherUpdate(_ctx, data, &outLen, data, len)) - { return false; - } len -= outLen; if (!_encrypting && !EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_SET_TAG, sizeof(tag), tag)) - { return false; - } if (!EVP_CipherFinal_ex(_ctx, data + outLen, &outLen)) - { return false; - } ASSERT(len == outLen); if (_encrypting && !EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_GET_TAG, sizeof(tag), tag)) - { return false; - } return true; } diff --git a/src/common/Cryptography/AES.h b/src/common/Cryptography/AES.h index 1c0466aa7..c73aeebea 100644 --- a/src/common/Cryptography/AES.h +++ b/src/common/Cryptography/AES.h @@ -1,10 +1,22 @@ /* - * Copyright (C) 2016+ AzerothCore , released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3 - * Copyright (C) 2021+ WarheadCore + * This file is part of the AzerothCore 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 Affero General Public License as published by the + * Free Software Foundation; either version 3 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 Affero 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 . */ -#ifndef Warhead_AES_h__ -#define Warhead_AES_h__ +#ifndef Azeroth_AES_h__ +#define Azeroth_AES_h__ #include "Define.h" #include @@ -36,4 +48,4 @@ namespace Acore::Crypto }; } -#endif // Warhead_AES_h__ +#endif // Azeroth_AES_h__ diff --git a/src/common/Cryptography/ARC4.cpp b/src/common/Cryptography/ARC4.cpp index 4356deae0..90535f747 100644 --- a/src/common/Cryptography/ARC4.cpp +++ b/src/common/Cryptography/ARC4.cpp @@ -18,17 +18,26 @@ #include "ARC4.h" #include "Errors.h" -Acore::Crypto::ARC4::ARC4() - : _ctx(EVP_CIPHER_CTX_new()) +Acore::Crypto::ARC4::ARC4() : _ctx(EVP_CIPHER_CTX_new()) { +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + _cipher = EVP_CIPHER_fetch(nullptr, "RC4", nullptr); +#else + EVP_CIPHER const* _cipher = EVP_rc4(); +#endif + EVP_CIPHER_CTX_init(_ctx); - int result = EVP_EncryptInit_ex(_ctx, EVP_rc4(), nullptr, nullptr, nullptr); + int result = EVP_EncryptInit_ex(_ctx, _cipher, nullptr, nullptr, nullptr); ASSERT(result == 1); } Acore::Crypto::ARC4::~ARC4() { EVP_CIPHER_CTX_free(_ctx); + +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + EVP_CIPHER_free(_cipher); +#endif } void Acore::Crypto::ARC4::Init(uint8 const* seed, size_t len) diff --git a/src/common/Cryptography/ARC4.h b/src/common/Cryptography/ARC4.h index eb2096627..f598589a2 100644 --- a/src/common/Cryptography/ARC4.h +++ b/src/common/Cryptography/ARC4.h @@ -24,20 +24,25 @@ namespace Acore::Crypto { - class ARC4 + class AC_COMMON_API ARC4 { public: ARC4(); ~ARC4(); void Init(uint8 const* seed, size_t len); + template void Init(Container const& c) { Init(std::data(c), std::size(c)); } void UpdateData(uint8* data, size_t len); + template void UpdateData(Container& c) { UpdateData(std::data(c), std::size(c)); } private: +#if OPENSSL_VERSION_NUMBER >= 0x30000000L + EVP_CIPHER* _cipher; +#endif EVP_CIPHER_CTX* _ctx; }; } diff --git a/src/common/Cryptography/Argon2.cpp b/src/common/Cryptography/Argon2.cpp index 3d839646a..ead8449cb 100644 --- a/src/common/Cryptography/Argon2.cpp +++ b/src/common/Cryptography/Argon2.cpp @@ -1,6 +1,18 @@ /* - * Copyright (C) 2016+ AzerothCore , released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3 - * Copyright (C) 2021+ WarheadCore + * This file is part of the AzerothCore 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 Affero General Public License as published by the + * Free Software Foundation; either version 3 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 Affero 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 . */ #include "Argon2.h" @@ -20,9 +32,7 @@ ); if (status == ARGON2_OK) - { return std::string(buf); - } return {}; } diff --git a/src/common/Cryptography/Argon2.h b/src/common/Cryptography/Argon2.h index 4a3bcf239..b2f3ed968 100644 --- a/src/common/Cryptography/Argon2.h +++ b/src/common/Cryptography/Argon2.h @@ -1,15 +1,25 @@ /* - * Copyright (C) 2016+ AzerothCore , released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3 - * Copyright (C) 2021+ WarheadCore + * This file is part of the AzerothCore 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 Affero General Public License as published by the + * Free Software Foundation; either version 3 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 Affero 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 . */ -#ifndef WARHEAD_ARGON2_H -#define WARHEAD_ARGON2_H +#ifndef AC_ARGON2_H +#define AC_ARGON2_H #include "BigNumber.h" -#include "Define.h" #include "Optional.h" -#include namespace Acore::Crypto { diff --git a/src/common/Cryptography/Authentication/AuthCrypt.cpp b/src/common/Cryptography/Authentication/AuthCrypt.cpp index 791c7bcf6..21115ed15 100644 --- a/src/common/Cryptography/Authentication/AuthCrypt.cpp +++ b/src/common/Cryptography/Authentication/AuthCrypt.cpp @@ -19,19 +19,16 @@ #include "Errors.h" #include "HMAC.h" -AuthCrypt::AuthCrypt() : _initialized(false) -{ -} - void AuthCrypt::Init(SessionKey const& K) { uint8 ServerEncryptionKey[] = { 0xCC, 0x98, 0xAE, 0x04, 0xE8, 0x97, 0xEA, 0xCA, 0x12, 0xDD, 0xC0, 0x93, 0x42, 0x91, 0x53, 0x57 }; _serverEncrypt.Init(Acore::Crypto::HMAC_SHA1::GetDigestOf(ServerEncryptionKey, K)); + uint8 ServerDecryptionKey[] = { 0xC2, 0xB3, 0x72, 0x3C, 0xC6, 0xAE, 0xD9, 0xB5, 0x34, 0x3C, 0x53, 0xEE, 0x2F, 0x43, 0x67, 0xCE }; _clientDecrypt.Init(Acore::Crypto::HMAC_SHA1::GetDigestOf(ServerDecryptionKey, K)); // Drop first 1024 bytes, as WoW uses ARC4-drop1024. - std::array syncBuf; + std::array syncBuf{}; _serverEncrypt.UpdateData(syncBuf); _clientDecrypt.UpdateData(syncBuf); diff --git a/src/common/Cryptography/Authentication/AuthCrypt.h b/src/common/Cryptography/Authentication/AuthCrypt.h index c89079ddb..88239a9e3 100644 --- a/src/common/Cryptography/Authentication/AuthCrypt.h +++ b/src/common/Cryptography/Authentication/AuthCrypt.h @@ -20,12 +20,11 @@ #include "ARC4.h" #include "AuthDefines.h" -#include -class AuthCrypt +class AC_COMMON_API AuthCrypt { public: - AuthCrypt(); + AuthCrypt() = default; void Init(SessionKey const& K); void DecryptRecv(uint8* data, size_t len); @@ -36,6 +35,6 @@ public: private: Acore::Crypto::ARC4 _clientDecrypt; Acore::Crypto::ARC4 _serverEncrypt; - bool _initialized; + bool _initialized{ false }; }; #endif diff --git a/src/common/Cryptography/Authentication/SRP6.cpp b/src/common/Cryptography/Authentication/SRP6.cpp index 0e77c2326..20e05f5b2 100644 --- a/src/common/Cryptography/Authentication/SRP6.cpp +++ b/src/common/Cryptography/Authentication/SRP6.cpp @@ -50,8 +50,8 @@ using SRP6 = Acore::Crypto::SRP6; /*static*/ SessionKey SRP6::SHA1Interleave(SRP6::EphemeralKey const& S) { // split S into two buffers - std::array buf0, buf1; - for (size_t i = 0; i < EPHEMERAL_KEY_LENGTH/2; ++i) + std::array buf0{}, buf1{}; + for (size_t i = 0; i < EPHEMERAL_KEY_LENGTH / 2; ++i) { buf0[i] = S[2 * i + 0]; buf1[i] = S[2 * i + 1]; @@ -59,8 +59,12 @@ using SRP6 = Acore::Crypto::SRP6; // find position of first nonzero byte size_t p = 0; - while (p < EPHEMERAL_KEY_LENGTH && !S[p]) { ++p; } - if (p & 1) { ++p; } // skip one extra byte if p is odd + while (p < EPHEMERAL_KEY_LENGTH && !S[p]) + ++p; + + if (p & 1) + ++p; // skip one extra byte if p is odd + p /= 2; // offset into buffers // hash each of the halves, starting at the first nonzero byte @@ -82,14 +86,12 @@ SRP6::SRP6(std::string const& username, Salt const& salt, Verifier const& verifi std::optional SRP6::VerifyChallengeResponse(EphemeralKey const& A, SHA1::Digest const& clientM) { - ASSERT(!_used); + ASSERT(!_used, "A single SRP6 object must only ever be used to verify ONCE!"); _used = true; BigNumber const _A(A); if ((_A % _N).IsZero()) - { return std::nullopt; - } BigNumber const u(SHA1::GetDigestOf(A, B)); EphemeralKey const S = (_A * (_v.ModExp(u, _N))).ModExp(_b, N).ToByteArray<32>(); @@ -104,11 +106,7 @@ std::optional SRP6::VerifyChallengeResponse(EphemeralKey const& A, S SHA1::Digest const ourM = SHA1::GetDigestOf(NgHash, _I, s, A, B, K); if (ourM == clientM) - { return K; - } - else - { - return std::nullopt; - } + + return std::nullopt; } diff --git a/src/common/Cryptography/Authentication/SRP6.h b/src/common/Cryptography/Authentication/SRP6.h index 49f7ce6de..734ef1298 100644 --- a/src/common/Cryptography/Authentication/SRP6.h +++ b/src/common/Cryptography/Authentication/SRP6.h @@ -20,21 +20,20 @@ #include "AuthDefines.h" #include "BigNumber.h" -#include "Common.h" #include "CryptoHash.h" -#include "Define.h" -#include #include namespace Acore::Crypto { - class SRP6 + class AC_COMMON_API SRP6 { public: static constexpr size_t SALT_LENGTH = 32; using Salt = std::array; + static constexpr size_t VERIFIER_LENGTH = 32; using Verifier = std::array; + static constexpr size_t EPHEMERAL_KEY_LENGTH = 32; using EphemeralKey = std::array; @@ -43,6 +42,7 @@ namespace Acore::Crypto // username + password must be passed through Utf8ToUpperOnlyLatin FIRST! static std::pair MakeRegistrationData(std::string const& username, std::string const& password); + // username + password must be passed through Utf8ToUpperOnlyLatin FIRST! static bool CheckLogin(std::string const& username, std::string const& password, Salt const& salt, Verifier const& verifier) { diff --git a/src/common/Cryptography/BigNumber.cpp b/src/common/Cryptography/BigNumber.cpp index d557b8514..1cd8d6a19 100644 --- a/src/common/Cryptography/BigNumber.cpp +++ b/src/common/Cryptography/BigNumber.cpp @@ -1,11 +1,25 @@ /* - * Copyright (C) 2016+ AzerothCore , released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version. - * Copyright (C) 2021+ WarheadCore + * This file is part of the AzerothCore 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 Affero General Public License as published by the + * Free Software Foundation; either version 3 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 Affero 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 . */ -#include "Cryptography/BigNumber.h" +#include "BigNumber.h" #include "Errors.h" #include +#include +#include #include BigNumber::BigNumber() @@ -25,9 +39,7 @@ void BigNumber::SetDword(int32 val) { SetDword(uint32(std::abs(val))); if (val < 0) - { BN_set_negative(_bn, 1); - } } void BigNumber::SetDword(uint32 val) @@ -50,9 +62,7 @@ void BigNumber::SetBinary(uint8 const* bytes, int32 len, bool littleEndian) uint8* array = new uint8[len]; for (int i = 0; i < len; i++) - { array[i] = bytes[len - 1 - i]; - } BN_bin2bn(array, len, _bn); @@ -62,9 +72,7 @@ void BigNumber::SetBinary(uint8 const* bytes, int32 len, bool littleEndian) #endif } else - { BN_bin2bn(bytes, len, _bn); - } } bool BigNumber::SetHexStr(char const* str) @@ -81,9 +89,7 @@ void BigNumber::SetRand(int32 numbits) BigNumber& BigNumber::operator=(BigNumber const& bn) { if (this == &bn) - { return *this; - } BN_copy(_bn, bn._bn); return *this; @@ -103,7 +109,7 @@ BigNumber& BigNumber::operator-=(BigNumber const& bn) BigNumber& BigNumber::operator*=(BigNumber const& bn) { - BN_CTX* bnctx; + BN_CTX *bnctx; bnctx = BN_CTX_new(); BN_mul(_bn, _bn, bn._bn, bnctx); @@ -114,7 +120,7 @@ BigNumber& BigNumber::operator*=(BigNumber const& bn) BigNumber& BigNumber::operator/=(BigNumber const& bn) { - BN_CTX* bnctx; + BN_CTX *bnctx; bnctx = BN_CTX_new(); BN_div(_bn, nullptr, _bn, bn._bn, bnctx); @@ -125,7 +131,7 @@ BigNumber& BigNumber::operator/=(BigNumber const& bn) BigNumber& BigNumber::operator%=(BigNumber const& bn) { - BN_CTX* bnctx; + BN_CTX *bnctx; bnctx = BN_CTX_new(); BN_mod(_bn, _bn, bn._bn, bnctx); @@ -148,7 +154,7 @@ int BigNumber::CompareTo(BigNumber const& bn) const BigNumber BigNumber::Exp(BigNumber const& bn) const { BigNumber ret; - BN_CTX* bnctx; + BN_CTX *bnctx; bnctx = BN_CTX_new(); BN_exp(ret._bn, _bn, bn._bn, bnctx); @@ -160,7 +166,7 @@ BigNumber BigNumber::Exp(BigNumber const& bn) const BigNumber BigNumber::ModExp(BigNumber const& bn1, BigNumber const& bn2) const { BigNumber ret; - BN_CTX* bnctx; + BN_CTX *bnctx; bnctx = BN_CTX_new(); BN_mod_exp(ret._bn, _bn, bn1._bn, bn2._bn, bnctx); @@ -201,17 +207,13 @@ void BigNumber::GetBytes(uint8* buf, size_t bufsize, bool littleEndian) const // If we need more bytes than length of BigNumber set the rest to 0 if (numBytes < bufsize) - { memset((void*)buf, 0, bufsize); - } BN_bn2bin(_bn, buf + (bufsize - numBytes)); // openssl's BN stores data internally in big endian format, reverse if little endian desired if (littleEndian) - { std::reverse(buf, buf + bufsize); - } #else int res = littleEndian ? BN_bn2lebinpad(_bn, buf, bufsize) : BN_bn2binpad(_bn, buf, bufsize); ASSERT(res > 0, "Buffer of size {} is too small to hold bignum with {} bytes.\n", bufsize, BN_num_bytes(_bn)); diff --git a/src/common/Cryptography/BigNumber.h b/src/common/Cryptography/BigNumber.h index d53eb6bac..259fa92ed 100644 --- a/src/common/Cryptography/BigNumber.h +++ b/src/common/Cryptography/BigNumber.h @@ -1,6 +1,18 @@ /* - * Copyright (C) 2016+ AzerothCore , released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version. - * Copyright (C) 2021+ WarheadCore + * This file is part of the AzerothCore 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 Affero General Public License as published by the + * Free Software Foundation; either version 3 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 Affero 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 . */ #ifndef _AUTH_BIGNUMBER_H @@ -8,7 +20,6 @@ #include "Define.h" #include -#include #include #include diff --git a/src/common/Cryptography/CryptoConstants.h b/src/common/Cryptography/CryptoConstants.h index 7ec74483b..3ba8b55d6 100644 --- a/src/common/Cryptography/CryptoConstants.h +++ b/src/common/Cryptography/CryptoConstants.h @@ -24,7 +24,8 @@ namespace Acore::Crypto { struct Constants { - static constexpr size_t SHA1_DIGEST_LENGTH_BYTES = 20; + static constexpr size_t MD5_DIGEST_LENGTH_BYTES = 16; + static constexpr size_t SHA1_DIGEST_LENGTH_BYTES = 20; static constexpr size_t SHA256_DIGEST_LENGTH_BYTES = 32; }; } diff --git a/src/common/Cryptography/CryptoGenerics.h b/src/common/Cryptography/CryptoGenerics.h index 4d65699da..d4b799747 100644 --- a/src/common/Cryptography/CryptoGenerics.h +++ b/src/common/Cryptography/CryptoGenerics.h @@ -89,6 +89,7 @@ namespace Acore::Crypto { using IV = typename Cipher::IV; using Tag = typename Cipher::Tag; + // extract trailing IV and tag IV iv; Tag tag; diff --git a/src/common/Cryptography/CryptoHash.h b/src/common/Cryptography/CryptoHash.h index e2f38da8d..1763351bc 100644 --- a/src/common/Cryptography/CryptoHash.h +++ b/src/common/Cryptography/CryptoHash.h @@ -19,12 +19,12 @@ #define AZEROTHCORE_CRYPTOHASH_H #include "CryptoConstants.h" -#include "Define.h" #include "Errors.h" #include #include #include #include +#include class BigNumber; @@ -35,10 +35,10 @@ namespace Acore::Impl typedef EVP_MD const* (*HashCreator)(); #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x10100000L - static EVP_MD_CTX* MakeCTX() { return EVP_MD_CTX_create(); } + static EVP_MD_CTX* MakeCTX() noexcept { return EVP_MD_CTX_create(); } static void DestroyCTX(EVP_MD_CTX* ctx) { EVP_MD_CTX_destroy(ctx); } #else - static EVP_MD_CTX* MakeCTX() { return EVP_MD_CTX_new(); } + static EVP_MD_CTX* MakeCTX() noexcept { return EVP_MD_CTX_new(); } static void DestroyCTX(EVP_MD_CTX* ctx) { EVP_MD_CTX_free(ctx); } #endif }; @@ -46,74 +46,104 @@ namespace Acore::Impl template class GenericHash { - public: - static constexpr size_t DIGEST_LENGTH = DigestLength; - using Digest = std::array; + public: + static constexpr size_t DIGEST_LENGTH = DigestLength; + using Digest = std::array; - static Digest GetDigestOf(uint8 const* data, size_t len) - { - GenericHash hash; - hash.UpdateData(data, len); - hash.Finalize(); - return hash.GetDigest(); - } - - template - static auto GetDigestOf(Ts&& ... pack) -> std::enable_if_t < !(std::is_integral_v> || ...), Digest > - { - GenericHash hash; - (hash.UpdateData(std::forward(pack)), ...); - hash.Finalize(); - return hash.GetDigest(); - } - - GenericHash() : _ctx(GenericHashImpl::MakeCTX()) - { - int result = EVP_DigestInit_ex(_ctx, HashCreator(), nullptr); - ASSERT(result == 1); - } - - ~GenericHash() - { - if (!_ctx) + static Digest GetDigestOf(uint8 const* data, size_t len) { - return; + GenericHash hash; + hash.UpdateData(data, len); + hash.Finalize(); + return hash.GetDigest(); } - GenericHashImpl::DestroyCTX(_ctx); - _ctx = nullptr; - } - void UpdateData(uint8 const* data, size_t len) - { - int result = EVP_DigestUpdate(_ctx, data, len); - ASSERT(result == 1); - } - void UpdateData(std::string_view str) { UpdateData(reinterpret_cast(str.data()), str.size()); } - void UpdateData(std::string const& str) { UpdateData(std::string_view(str)); } /* explicit overload to avoid using the container template */ - void UpdateData(char const* str) { UpdateData(std::string_view(str)); } /* explicit overload to avoid using the container template */ - template - void UpdateData(Container const& c) { UpdateData(std::data(c), std::size(c)); } + template + static auto GetDigestOf(Ts&&... pack) -> std::enable_if_t> || ...), Digest> + { + GenericHash hash; + (hash.UpdateData(std::forward(pack)), ...); + hash.Finalize(); + return hash.GetDigest(); + } - void Finalize() - { - uint32 length; - int result = EVP_DigestFinal_ex(_ctx, _digest.data(), &length); - ASSERT(result == 1); - ASSERT(length == DIGEST_LENGTH); - GenericHashImpl::DestroyCTX(_ctx); - _ctx = nullptr; - } + GenericHash() : _ctx(GenericHashImpl::MakeCTX()) + { + int result = EVP_DigestInit_ex(_ctx, HashCreator(), nullptr); + ASSERT(result == 1); + } - Digest const& GetDigest() const { return _digest; } + GenericHash(GenericHash const& right) : _ctx(GenericHashImpl::MakeCTX()) + { + *this = right; + } - private: - EVP_MD_CTX* _ctx; - Digest _digest = { }; + GenericHash(GenericHash&& right) noexcept + { + *this = std::move(right); + } + + ~GenericHash() + { + if (!_ctx) + return; + GenericHashImpl::DestroyCTX(_ctx); + _ctx = nullptr; + } + + GenericHash& operator=(GenericHash const& right) + { + if (this == &right) + return *this; + + int result = EVP_MD_CTX_copy_ex(_ctx, right._ctx); + ASSERT(result == 1); + _digest = right._digest; + return *this; + } + + GenericHash& operator=(GenericHash&& right) noexcept + { + if (this == &right) + return *this; + + _ctx = std::exchange(right._ctx, GenericHashImpl::MakeCTX()); + _digest = std::exchange(right._digest, Digest{}); + return *this; + } + + void UpdateData(uint8 const* data, size_t len) + { + int result = EVP_DigestUpdate(_ctx, data, len); + ASSERT(result == 1); + } + + void UpdateData(std::string_view str) { UpdateData(reinterpret_cast(str.data()), str.size()); } + void UpdateData(std::string const& str) { UpdateData(std::string_view(str)); } /* explicit overload to avoid using the container template */ + void UpdateData(char const* str) { UpdateData(std::string_view(str)); } /* explicit overload to avoid using the container template */ + + template + void UpdateData(Container const& c) { UpdateData(std::data(c), std::size(c)); } + + void Finalize() + { + uint32 length; + int result = EVP_DigestFinal_ex(_ctx, _digest.data(), &length); + ASSERT(result == 1); + ASSERT(length == DIGEST_LENGTH); + } + + Digest const& GetDigest() const { return _digest; } + + private: + EVP_MD_CTX* _ctx{}; + Digest _digest{}; }; } namespace Acore::Crypto { + using MD5 = Acore::Impl::GenericHash; using SHA1 = Acore::Impl::GenericHash; using SHA256 = Acore::Impl::GenericHash; } diff --git a/src/common/Cryptography/CryptoRandom.cpp b/src/common/Cryptography/CryptoRandom.cpp index 78aa4af50..35d78f744 100644 --- a/src/common/Cryptography/CryptoRandom.cpp +++ b/src/common/Cryptography/CryptoRandom.cpp @@ -22,5 +22,5 @@ void Acore::Crypto::GetRandomBytes(uint8* buf, size_t len) { int result = RAND_bytes(buf, len); - ASSERT(result == 1); + ASSERT(result == 1, "Not enough randomness in OpenSSL's entropy pool. What in the world are you running on?"); } diff --git a/src/common/Cryptography/CryptoRandom.h b/src/common/Cryptography/CryptoRandom.h index 726fac5d6..07f87df00 100644 --- a/src/common/Cryptography/CryptoRandom.h +++ b/src/common/Cryptography/CryptoRandom.h @@ -23,7 +23,7 @@ namespace Acore::Crypto { - void GetRandomBytes(uint8* buf, size_t len); + AC_COMMON_API void GetRandomBytes(uint8* buf, size_t len); template void GetRandomBytes(Container& c) diff --git a/src/common/Cryptography/HMAC.h b/src/common/Cryptography/HMAC.h index e6e2d7f81..ebfc1e14b 100644 --- a/src/common/Cryptography/HMAC.h +++ b/src/common/Cryptography/HMAC.h @@ -19,10 +19,9 @@ #define AZEROTHCORE_HMAC_H #include "CryptoConstants.h" -#include "Define.h" +#include "CryptoHash.h" #include "Errors.h" #include -#include #include #include @@ -30,96 +29,108 @@ class BigNumber; namespace Acore::Impl { - struct HMACImpl - { - typedef EVP_MD const* (*HashCreator)(); - -#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x10100000L - static HMAC_CTX* MakeCTX() - { - HMAC_CTX* ctx = new HMAC_CTX(); - HMAC_CTX_init(ctx); - return ctx; - } - - static void DestroyCTX(HMAC_CTX* ctx) - { - HMAC_CTX_cleanup(ctx); - delete ctx; - } -#else - static HMAC_CTX* MakeCTX() { return HMAC_CTX_new(); } - static void DestroyCTX(HMAC_CTX* ctx) { HMAC_CTX_free(ctx); } -#endif - }; - - template + template class GenericHMAC { - public: - static constexpr size_t DIGEST_LENGTH = DigestLength; - using Digest = std::array; + public: + static constexpr size_t DIGEST_LENGTH = DigestLength; + using Digest = std::array; - template - static Digest GetDigestOf(Container const& seed, uint8 const* data, size_t len) - { - GenericHMAC hash(seed); - hash.UpdateData(data, len); - hash.Finalize(); - return hash.GetDigest(); - } - - template - static auto GetDigestOf(Container const& seed, Ts&& ... pack) -> std::enable_if_t < !(std::is_integral_v> || ...), Digest > - { - GenericHMAC hash(seed); - (hash.UpdateData(std::forward(pack)), ...); - hash.Finalize(); - return hash.GetDigest(); - } - - GenericHMAC(uint8 const* seed, size_t len) : _ctx(HMACImpl::MakeCTX()) - { - int result = HMAC_Init_ex(_ctx, seed, len, HashCreator(), nullptr); - ASSERT(result == 1); - } - template GenericHMAC(Container const& container) : GenericHMAC(std::data(container), std::size(container)) {} - - ~GenericHMAC() - { - if (!_ctx) + template + static Digest GetDigestOf(Container const& seed, uint8 const* data, size_t len) { - return; + GenericHMAC hash(seed); + hash.UpdateData(data, len); + hash.Finalize(); + return hash.GetDigest(); } - HMACImpl::DestroyCTX(_ctx); - _ctx = nullptr; - } - void UpdateData(uint8 const* data, size_t len) - { - int result = HMAC_Update(_ctx, data, len); - ASSERT(result == 1); - } - void UpdateData(std::string_view str) { UpdateData(reinterpret_cast(str.data()), str.size()); } - void UpdateData(std::string const& str) { UpdateData(std::string_view(str)); } /* explicit overload to avoid using the container template */ - void UpdateData(char const* str) { UpdateData(std::string_view(str)); } /* explicit overload to avoid using the container template */ - template - void UpdateData(Container const& c) { UpdateData(std::data(c), std::size(c)); } + template + static auto GetDigestOf(Container const& seed, Ts&&... pack) -> std::enable_if_t> || ...), Digest> + { + GenericHMAC hash(seed); + (hash.UpdateData(std::forward(pack)), ...); + hash.Finalize(); + return hash.GetDigest(); + } - void Finalize() - { - uint32 length = 0; - int result = HMAC_Final(_ctx, _digest.data(), &length); - ASSERT(result == 1); - ASSERT(length == DIGEST_LENGTH); - HMACImpl::DestroyCTX(_ctx); - _ctx = nullptr; - } + GenericHMAC(uint8 const* seed, size_t len) : _ctx(GenericHashImpl::MakeCTX()), _key(EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, nullptr, seed, len)) + { + int result = EVP_DigestSignInit(_ctx, nullptr, HashCreator(), nullptr, _key); + ASSERT(result == 1); + } - Digest const& GetDigest() const { return _digest; } - private: - HMAC_CTX* _ctx; - Digest _digest = { }; + template + GenericHMAC(Container const& container) : GenericHMAC(std::data(container), std::size(container)) {} + + GenericHMAC(GenericHMAC const& right) : _ctx(GenericHashImpl::MakeCTX()) + { + *this = right; + } + + GenericHMAC(GenericHMAC&& right) noexcept + { + *this = std::move(right); + } + + ~GenericHMAC() + { + GenericHashImpl::DestroyCTX(_ctx); + _ctx = nullptr; + EVP_PKEY_free(_key); + _key = nullptr; + } + + GenericHMAC& operator=(GenericHMAC const& right) + { + if (this == &right) + return *this; + + int result = EVP_MD_CTX_copy_ex(_ctx, right._ctx); + ASSERT(result == 1); + _key = right._key; // EVP_PKEY uses reference counting internally, just copy the pointer + EVP_PKEY_up_ref(_key); // Bump reference count for PKEY, as every instance of this class holds two references to PKEY and destructor decrements it twice + _digest = right._digest; + return *this; + } + + GenericHMAC& operator=(GenericHMAC&& right) noexcept + { + if (this == &right) + return *this; + + _ctx = std::exchange(right._ctx, GenericHashImpl::MakeCTX()); + _key = std::exchange(right._key, EVP_PKEY_new()); + _digest = std::exchange(right._digest, Digest{}); + return *this; + } + + void UpdateData(uint8 const* data, size_t len) + { + int result = EVP_DigestSignUpdate(_ctx, data, len); + ASSERT(result == 1); + } + + void UpdateData(std::string_view str) { UpdateData(reinterpret_cast(str.data()), str.size()); } + void UpdateData(std::string const& str) { UpdateData(std::string_view(str)); } /* explicit overload to avoid using the container template */ + void UpdateData(char const* str) { UpdateData(std::string_view(str)); } /* explicit overload to avoid using the container template */ + + template + void UpdateData(Container const& c) { UpdateData(std::data(c), std::size(c)); } + + void Finalize() + { + size_t length = DIGEST_LENGTH; + int result = EVP_DigestSignFinal(_ctx, _digest.data(), &length); + ASSERT(result == 1); + ASSERT(length == DIGEST_LENGTH); + } + + Digest const& GetDigest() const { return _digest; } + private: + EVP_MD_CTX* _ctx{}; + EVP_PKEY* _key{}; + Digest _digest{}; }; } @@ -128,4 +139,5 @@ namespace Acore::Crypto using HMAC_SHA1 = Acore::Impl::GenericHMAC; using HMAC_SHA256 = Acore::Impl::GenericHMAC; } + #endif diff --git a/src/common/Cryptography/OpenSSLCrypto.cpp b/src/common/Cryptography/OpenSSLCrypto.cpp index 7bba285bd..ccfe2de5f 100644 --- a/src/common/Cryptography/OpenSSLCrypto.cpp +++ b/src/common/Cryptography/OpenSSLCrypto.cpp @@ -15,49 +15,90 @@ * with this program. If not, see . */ -#include +#include "OpenSSLCrypto.h" +#include #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1010000fL #include #include #include + std::vector cryptoLocks; + static void lockingCallback(int mode, int type, char const* /*file*/, int /*line*/) { if (mode & CRYPTO_LOCK) - { cryptoLocks[type]->lock(); - } else - { cryptoLocks[type]->unlock(); - } } -static void threadIdCallback(CRYPTO_THREADID* id) + +static void threadIdCallback(CRYPTO_THREADID * id) { (void)id; CRYPTO_THREADID_set_numeric(id, std::hash()(std::this_thread::get_id())); } +#elif OPENSSL_VERSION_NUMBER >= 0x30000000L +#include +OSSL_PROVIDER* LegacyProvider; +OSSL_PROVIDER* DefaultProvider; +#endif + +#if OPENSSL_VERSION_NUMBER >= 0x30000000L && AC_PLATFORM == AC_PLATFORM_WINDOWS +#include +#include + +void SetupLibrariesForWindows() +{ + namespace fs = std::filesystem; + + fs::path programLocation{ boost::dll::program_location().remove_filename().string() }; + fs::path libLegacy{ boost::dll::program_location().remove_filename().string() + "/legacy.dll" }; + + ASSERT(fs::exists(libLegacy), "Not found 'legacy.dll'. Please copy library 'legacy.dll' from OpenSSL default dir to '{}'", programLocation.generic_string()); + OSSL_PROVIDER_set_default_search_path(nullptr, programLocation.generic_string().c_str()); +} +#endif + void OpenSSLCrypto::threadsSetup() { +#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1010000fL cryptoLocks.resize(CRYPTO_num_locks()); + for (int i = 0 ; i < CRYPTO_num_locks(); ++i) { cryptoLocks[i] = new std::mutex(); } + (void)&threadIdCallback; CRYPTO_THREADID_set_callback(threadIdCallback); + (void)&lockingCallback; CRYPTO_set_locking_callback(lockingCallback); +#elif OPENSSL_VERSION_NUMBER >= 0x30000000L +#if AC_PLATFORM == AC_PLATFORM_WINDOWS + SetupLibrariesForWindows(); +#endif + LegacyProvider = OSSL_PROVIDER_load(nullptr, "legacy"); + DefaultProvider = OSSL_PROVIDER_load(nullptr, "default"); +#endif } + void OpenSSLCrypto::threadsCleanup() { +#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1010000fL CRYPTO_set_locking_callback(nullptr); CRYPTO_THREADID_set_callback(nullptr); + for (int i = 0 ; i < CRYPTO_num_locks(); ++i) { delete cryptoLocks[i]; } + cryptoLocks.resize(0); -} +#elif OPENSSL_VERSION_NUMBER >= 0x30000000L + OSSL_PROVIDER_unload(LegacyProvider); + OSSL_PROVIDER_unload(DefaultProvider); + OSSL_PROVIDER_set_default_search_path(nullptr, nullptr); #endif +} diff --git a/src/common/Cryptography/OpenSSLCrypto.h b/src/common/Cryptography/OpenSSLCrypto.h index 5b86cfd5d..be6850451 100644 --- a/src/common/Cryptography/OpenSSLCrypto.h +++ b/src/common/Cryptography/OpenSSLCrypto.h @@ -15,11 +15,10 @@ * with this program. If not, see . */ -#ifndef OPENSSL_CRYPTO_H -#define OPENSSL_CRYPTO_H +#ifndef _AC_OPENSSL_CRYPTO_H +#define _AC_OPENSSL_CRYPTO_H #include "Define.h" -#include /** * A group of functions which setup openssl crypto module to work properly in multithreaded enviroment @@ -27,17 +26,11 @@ */ namespace OpenSSLCrypto { - -#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1010000fL /// Needs to be called before threads using openssl are spawned - void threadsSetup(); - /// Needs to be called after threads using openssl are despawned - void threadsCleanup(); -#else - void threadsSetup() { }; - void threadsCleanup() { }; -#endif + AC_COMMON_API void threadsSetup(); + /// Needs to be called after threads using openssl are despawned + AC_COMMON_API void threadsCleanup(); } #endif diff --git a/src/common/Cryptography/SessionKeyGenerator.h b/src/common/Cryptography/SessionKeyGenerator.h index b66f1014a..43dca3f23 100644 --- a/src/common/Cryptography/SessionKeyGenerator.h +++ b/src/common/Cryptography/SessionKeyGenerator.h @@ -15,17 +15,18 @@ * with this program. If not, see . */ -#include "CryptoHash.h" -#include - #ifndef AZEROTHCORE_SESSIONKEYGENERATOR_HPP #define AZEROTHCORE_SESSIONKEYGENERATOR_HPP +#include "CryptoHash.h" +#include + template class SessionKeyGenerator { public: - template SessionKeyGenerator(C const& buf) : + template + SessionKeyGenerator(C const& buf) : o0it(o0.begin()) { uint8 const* data = std::data(buf); @@ -52,9 +53,9 @@ public: } private: - typename Hash::Digest o0 = { }; - typename Hash::Digest o1 = { }; - typename Hash::Digest o2 = { }; + typename Hash::Digest o0{}; + typename Hash::Digest o1{}; + typename Hash::Digest o2{}; typename Hash::Digest::const_iterator o0it; }; diff --git a/src/common/Cryptography/TOTP.cpp b/src/common/Cryptography/TOTP.cpp index 937285bc9..3b132bc46 100644 --- a/src/common/Cryptography/TOTP.cpp +++ b/src/common/Cryptography/TOTP.cpp @@ -28,11 +28,8 @@ static constexpr uint32 HMAC_RESULT_SIZE = 20; { timestamp /= TOTP_INTERVAL; unsigned char challenge[8]; - for (int i = 8; i--; timestamp >>= 8) - { challenge[i] = timestamp; - } unsigned char digest[HMAC_RESULT_SIZE]; uint32 digestSize = HMAC_RESULT_SIZE; @@ -41,7 +38,6 @@ static constexpr uint32 HMAC_RESULT_SIZE = 20; uint32 offset = digest[19] & 0xF; uint32 truncated = (digest[offset] << 24) | (digest[offset + 1] << 16) | (digest[offset + 2] << 8) | (digest[offset + 3]); truncated &= 0x7FFFFFFF; - return (truncated % 1000000); } diff --git a/src/common/Cryptography/TOTP.h b/src/common/Cryptography/TOTP.h index 6a0e78294..01b2a53bd 100644 --- a/src/common/Cryptography/TOTP.h +++ b/src/common/Cryptography/TOTP.h @@ -1,6 +1,18 @@ /* - * Copyright (C) 2016+ AzerothCore , released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3 - * Copyright (C) 2021+ WarheadCore + * This file is part of the AzerothCore 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 Affero General Public License as published by the + * Free Software Foundation; either version 3 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 Affero 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 . */ #ifndef WARHEAD_TOTP_H diff --git a/src/common/Threading/PCQueue.h b/src/common/Threading/PCQueue.h index 19b164fdc..648405365 100644 --- a/src/common/Threading/PCQueue.h +++ b/src/common/Threading/PCQueue.h @@ -34,7 +34,7 @@ private: std::atomic _shutdown; public: - ProducerConsumerQueue() : _shutdown(false) { } + ProducerConsumerQueue() : _shutdown(false) { } void Push(const T& value) { diff --git a/src/server/apps/authserver/Main.cpp b/src/server/apps/authserver/Main.cpp index b0105d658..4c110db7a 100644 --- a/src/server/apps/authserver/Main.cpp +++ b/src/server/apps/authserver/Main.cpp @@ -35,6 +35,7 @@ #include "IoContext.h" #include "Log.h" #include "MySQLThreading.h" +#include "OpenSSLCrypto.h" #include "ProcessPriority.h" #include "RealmList.h" #include "SecretMgr.h" @@ -96,10 +97,14 @@ int main(int argc, char** argv) []() { LOG_INFO("server.authserver", "> Using configuration file {}", sConfigMgr->GetFilename()); - LOG_INFO("server.authserver", "> Using SSL version: {} (library: {})", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); + LOG_INFO("server.authserver", "> Using SSL version: {} (library: {})", OPENSSL_VERSION_TEXT, OpenSSL_version(OPENSSL_VERSION)); LOG_INFO("server.authserver", "> Using Boost version: {}.{}.{}", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100); }); + OpenSSLCrypto::threadsSetup(); + + std::shared_ptr opensslHandle(nullptr, [](void*) { OpenSSLCrypto::threadsCleanup(); }); + // authserver PID file creation std::string pidFile = sConfigMgr->GetOption("PidFile", ""); if (!pidFile.empty()) diff --git a/src/server/apps/worldserver/Main.cpp b/src/server/apps/worldserver/Main.cpp index ce1f8846c..b53f99387 100644 --- a/src/server/apps/worldserver/Main.cpp +++ b/src/server/apps/worldserver/Main.cpp @@ -160,7 +160,7 @@ int main(int argc, char** argv) []() { LOG_INFO("server.worldserver", "> Using configuration file {}", sConfigMgr->GetFilename()); - LOG_INFO("server.worldserver", "> Using SSL version: {} (library: {})", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); + LOG_INFO("server.worldserver", "> Using SSL version: {} (library: {})", OPENSSL_VERSION_TEXT, OpenSSL_version(OPENSSL_VERSION)); LOG_INFO("server.worldserver", "> Using Boost version: {}.{}.{}", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100); }); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 3e537d2da..749f46056 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -240,7 +240,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); // Account data - PrepareStatement(CHAR_SEL_ACCOUNT_DATA, "SELECT type, time, data FROM account_data WHERE accountId = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_ACCOUNT_DATA, "SELECT type, time, data FROM account_data WHERE accountId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_REP_ACCOUNT_DATA, "REPLACE INTO account_data (accountId, type, time, data) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ACCOUNT_DATA, "DELETE FROM account_data WHERE accountId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_PLAYER_ACCOUNT_DATA, "SELECT type, time, data FROM character_account_data WHERE guid = ?", CONNECTION_ASYNC); @@ -248,7 +248,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_PLAYER_ACCOUNT_DATA, "DELETE FROM character_account_data WHERE guid = ?", CONNECTION_ASYNC); // Tutorials - PrepareStatement(CHAR_SEL_TUTORIALS, "SELECT tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_TUTORIALS, "SELECT tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7 FROM account_tutorial WHERE accountId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_HAS_TUTORIALS, "SELECT 1 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_INS_TUTORIALS, "INSERT INTO account_tutorial(tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7, accountId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_TUTORIALS, "UPDATE account_tutorial SET tut0 = ?, tut1 = ?, tut2 = ?, tut3 = ?, tut4 = ?, tut5 = ?, tut6 = ?, tut7 = ? WHERE accountId = ?", CONNECTION_ASYNC); diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index c6ffa1462..86a331eed 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -108,14 +108,14 @@ void UnitAI::DoSpellAttackToRandomTargetIfReady(uint32 spell, uint32 threatTable } } -Unit* UnitAI::SelectTarget(SelectTargetMethod targetType, uint32 position, float dist, bool playerOnly, int32 aura) +Unit* UnitAI::SelectTarget(SelectTargetMethod targetType, uint32 position, float dist, bool playerOnly, bool withTank, int32 aura) { - return SelectTarget(targetType, position, DefaultTargetSelector(me, dist, playerOnly, aura)); + return SelectTarget(targetType, position, DefaultTargetSelector(me, dist, playerOnly, withTank, aura)); } -void UnitAI::SelectTargetList(std::list& targetList, uint32 num, SelectTargetMethod targetType, float dist, bool playerOnly, int32 aura) +void UnitAI::SelectTargetList(std::list& targetList, uint32 num, SelectTargetMethod targetType, uint32 position, float dist, bool playerOnly, bool withTank, int32 aura) { - SelectTargetList(targetList, DefaultTargetSelector(me, dist, playerOnly, aura), num, targetType); + SelectTargetList(targetList, num, targetType, position, DefaultTargetSelector(me, dist, playerOnly, withTank, aura)); } float UnitAI::DoGetSpellMaxRange(uint32 spellId, bool positive) @@ -210,7 +210,7 @@ SpellCastResult UnitAI::DoCast(uint32 spellId) bool playerOnly = spellInfo->HasAttribute(SPELL_ATTR3_ONLY_ON_PLAYER); float range = spellInfo->GetMaxRange(false); - DefaultTargetSelector targetSelector(me, range, playerOnly, -(int32)spellId); + DefaultTargetSelector targetSelector(me, range, playerOnly, true, -(int32)spellId); if (!(spellInfo->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_VICTIM) && targetSelector(me->GetVictim())) target = me->GetVictim(); @@ -317,6 +317,16 @@ void UnitAI::FillAISpellInfo() } } +ThreatMgr& UnitAI::GetThreatMgr() +{ + return me->GetThreatMgr(); +} + +void UnitAI::SortByDistance(std::list& list, bool ascending) +{ + list.sort(Acore::ObjectDistanceOrderPred(me, ascending)); +} + //Enable PlayerAI when charmed void PlayerAI::OnCharmed(bool apply) { @@ -397,5 +407,8 @@ bool NonTankTargetSelector::operator()(Unit const* target) const if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER) return false; + if (Unit* currentVictim = _source->GetThreatMgr().GetCurrentVictim()) + return target != currentVictim; + return target != _source->GetVictim(); } diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 1070a2ba5..d5288c4e4 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -43,14 +43,16 @@ struct DefaultTargetSelector : public Acore::unary_function { Unit const* me; float m_dist; + Unit const* except; bool m_playerOnly; int32 m_aura; // unit: the reference unit // dist: if 0: ignored, if > 0: maximum distance to the reference unit, if < 0: minimum distance to the reference unit // playerOnly: self explaining + // withMainTank: allow current tank to be selected // aura: if 0: ignored, if > 0: the target shall have the aura, if < 0, the target shall NOT have the aura - DefaultTargetSelector(Unit const* unit, float dist, bool playerOnly, int32 aura) : me(unit), m_dist(dist), m_playerOnly(playerOnly), m_aura(aura) {} + DefaultTargetSelector(Unit const* unit, float dist, bool playerOnly, bool withMainTank, int32 aura) : me(unit), m_dist(dist), except(withMainTank ? me->GetThreatMgr().GetCurrentVictim() : nullptr), m_playerOnly(playerOnly), m_aura(aura) {} bool operator()(Unit const* target) const { @@ -60,6 +62,9 @@ struct DefaultTargetSelector : public Acore::unary_function if (!target) return false; + if (target == except) + return false; + if (m_playerOnly && (target->GetTypeId() != TYPEID_PLAYER)) return false; @@ -208,7 +213,7 @@ public: // - Not the current tank (if withTank = false) // - Has aura with ID (if aura > 0) // - Does not have aura with ID - (if aura < 0) - Unit* SelectTarget(SelectTargetMethod targetType, uint32 position = 0, float dist = 0.0f, bool playerOnly = false, int32 aura = 0); + Unit* SelectTarget(SelectTargetMethod targetType, uint32 position = 0, float dist = 0.0f, bool playerOnly = false, bool withTank = true, int32 aura = 0); // Select the best target (in order) satisfying from the threat list. // If is nonzero, the first entries in order (or SelectTargetMethod::MaxThreat @@ -216,48 +221,30 @@ public: template Unit* SelectTarget(SelectTargetMethod targetType, uint32 position, PREDICATE const& predicate) { - ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().GetThreatList(); - if (position >= threatlist.size()) + ThreatMgr& mgr = GetThreatMgr(); + // shortcut: if we ignore the first elements, and there are at most elements, then we ignore ALL elements + if (mgr.GetThreatListSize() <= position) return nullptr; std::list targetList; - for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) - if (predicate((*itr)->getTarget())) - targetList.push_back((*itr)->getTarget()); + SelectTargetList(targetList, mgr.GetThreatListSize(), targetType, position, predicate); - if (position >= targetList.size()) + // maybe nothing fulfills the predicate + if (targetList.empty()) return nullptr; - if (targetType == SelectTargetMethod::MaxDistance || targetType == SelectTargetMethod::MinDistance) - targetList.sort(Acore::ObjectDistanceOrderPred(me)); - switch (targetType) { - case SelectTargetMethod::MaxDistance: - case SelectTargetMethod::MaxThreat: - { - std::list::iterator itr = targetList.begin(); - std::advance(itr, position); - return *itr; - } - case SelectTargetMethod::MinDistance: - case SelectTargetMethod::MinThreat: - { - std::list::reverse_iterator ritr = targetList.rbegin(); - std::advance(ritr, position); - return *ritr; - } - case SelectTargetMethod::Random: - { - std::list::iterator itr = targetList.begin(); - std::advance(itr, urand(position, targetList.size() - 1)); - return *itr; - } - default: - break; + case SelectTargetMethod::MaxThreat: + case SelectTargetMethod::MinThreat: + case SelectTargetMethod::MaxDistance: + case SelectTargetMethod::MinDistance: + return targetList.front(); + case SelectTargetMethod::Random: + return Acore::Containers::SelectRandomContainerElement(targetList); + default: + return nullptr; } - - return nullptr; } // Select the best (up to) targets (in order) from the threat list that fulfill the following: @@ -270,35 +257,79 @@ public: // - Has aura with ID (if aura > 0) // - Does not have aura with ID - (if aura < 0) // The resulting targets are stored in (which is cleared first). - void SelectTargetList(std::list& targetList, uint32 num, SelectTargetMethod targetType, float dist = 0.0f, bool playerOnly = false, int32 aura = 0); + void SelectTargetList(std::list& targetList, uint32 num, SelectTargetMethod targetType, uint32 position = 0, float dist = 0.0f, bool playerOnly = false, bool withTank = true, int32 aura = 0); // Select the best (up to) targets (in order) satisfying from the threat list and stores them in (which is cleared first). // If is nonzero, the first entries in order (or SelectTargetMethod::MaxThreat // order, if is SelectTargetMethod::Random) are skipped. template - void SelectTargetList(std::list& targetList, PREDICATE const& predicate, uint32 maxTargets, SelectTargetMethod targetType) + void SelectTargetList(std::list& targetList, uint32 num, SelectTargetMethod targetType, uint32 position, PREDICATE const& predicate) { - ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().GetThreatList(); - if (threatlist.empty()) - return; - - for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) - if (predicate((*itr)->getTarget())) - targetList.push_back((*itr)->getTarget()); - - if (targetList.size() < maxTargets) + targetList.clear(); + ThreatMgr& mgr = GetThreatMgr(); + // shortcut: we're gonna ignore the first elements, and there's at most elements, so we ignore them all - nothing to do here + if (mgr.GetThreatListSize() <= position) return; if (targetType == SelectTargetMethod::MaxDistance || targetType == SelectTargetMethod::MinDistance) - targetList.sort(Acore::ObjectDistanceOrderPred(me)); + { + for (ThreatReference const* ref : mgr.GetUnsortedThreatList()) + { + if (ref->IsOffline()) + continue; - if (targetType == SelectTargetMethod::MinDistance || targetType == SelectTargetMethod::MinThreat) + targetList.push_back(ref->GetVictim()); + } + } + else + { + Unit* currentVictim = mgr.GetCurrentVictim(); + if (currentVictim) + targetList.push_back(currentVictim); + + for (ThreatReference const* ref : mgr.GetSortedThreatList()) + { + if (ref->IsOffline()) + continue; + + Unit* thisTarget = ref->GetVictim(); + if (thisTarget != currentVictim) + targetList.push_back(thisTarget); + } + } + + // shortcut: the list isn't gonna get any larger + if (targetList.size() <= position) + { + targetList.clear(); + return; + } + + // right now, list is unsorted for DISTANCE types - re-sort by SelectTargetMethod::MaxDistance + if (targetType == SelectTargetMethod::MaxDistance || targetType == SelectTargetMethod::MinDistance) + SortByDistance(targetList, targetType == SelectTargetMethod::MinDistance); + + // now the list is MAX sorted, reverse for MIN types + if (targetType == SelectTargetMethod::MinThreat) targetList.reverse(); + // ignore the first elements + while (position) + { + targetList.pop_front(); + --position; + } + + // then finally filter by predicate + targetList.remove_if([&predicate](Unit* target) { return !predicate(target); }); + + if (targetList.size() <= num) + return; + if (targetType == SelectTargetMethod::Random) - Acore::Containers::RandomResize(targetList, maxTargets); + Acore::Containers::RandomResize(targetList, num); else - targetList.resize(maxTargets); + targetList.resize(num); } // Called at any Damage to any victim (before damage apply) @@ -348,6 +379,10 @@ public: virtual void sOnGameEvent(bool /*start*/, uint16 /*eventId*/) {} virtual std::string GetDebugInfo() const; + +private: + ThreatMgr& GetThreatMgr(); + void SortByDistance(std::list& list, bool ascending = true); }; class PlayerAI : public UnitAI diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 8706ebe4c..06c237acd 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -810,6 +810,7 @@ void SmartAI::KilledUnit(Unit* victim) void SmartAI::JustSummoned(Creature* creature) { GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT, creature); + GetScript()->AddCreatureSummon(creature->GetGUID()); } void SmartAI::SummonedCreatureDies(Creature* summon, Unit* /*killer*/) @@ -890,6 +891,7 @@ void SmartAI::DamageDealt(Unit* doneTo, uint32& damage, DamageEffectType /*damag void SmartAI::SummonedCreatureDespawn(Creature* unit) { GetScript()->ProcessEventsFor(SMART_EVENT_SUMMON_DESPAWNED, unit); + GetScript()->RemoveCreatureSummon(unit->GetGUID()); } void SmartAI::CorpseRemoved(uint32& respawnDelay) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index b93254fed..edc439a65 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1950,7 +1950,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } } - if (!foundTarget && me && IsCreature(me)) + if (!foundTarget && me && IsCreature(me) && me->IsAlive()) { if (e.action.moveRandom.distance) me->GetMotionMaster()->MoveRandom(float(e.action.moveRandom.distance)); @@ -3334,6 +3334,24 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, } } } + break; + } + case SMART_TARGET_SUMMONED_CREATURES: + { + if (me) + { + for (ObjectGuid const& guid : _summonList) + { + if (!e.target.summonedCreatures.entry || guid.GetEntry() == e.target.summonedCreatures.entry) + { + if (Creature* creature = me->GetMap()->GetCreature(guid)) + { + targets.push_back(creature); + } + } + } + } + break; } case SMART_TARGET_NONE: case SMART_TARGET_POSITION: @@ -4560,3 +4578,13 @@ bool SmartScript::IsInPhase(uint32 p) const return ((1 << (mEventPhase - 1)) & p) != 0; } + +void SmartScript::AddCreatureSummon(ObjectGuid const& guid) +{ + _summonList.insert(guid); +} + +void SmartScript::RemoveCreatureSummon(ObjectGuid const& guid) +{ + _summonList.erase(guid); +} diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 92142ec35..72007ebc4 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -232,6 +232,9 @@ public: bool AllowPhaseReset() const { return _allowPhaseReset; } void SetPhaseReset(bool allow) { _allowPhaseReset = allow; } + void AddCreatureSummon(ObjectGuid const& guid); + void RemoveCreatureSummon(ObjectGuid const& guid); + private: void IncPhase(uint32 p); void DecPhase(uint32 p); @@ -306,6 +309,8 @@ private: SmartScriptHolder s; return s; } + + GuidUnorderedSet _summonList; }; #endif diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 3da4072b2..bc9237320 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -413,6 +413,14 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e) return false; } break; + case SMART_TARGET_SUMMONED_CREATURES: + { + if (e.target.summonedCreatures.entry && !IsCreatureValid(e, e.target.summonedCreatures.entry)) + { + return false; + } + break; + } case SMART_TARGET_HOSTILE_SECOND_AGGRO: case SMART_TARGET_HOSTILE_LAST_AGGRO: case SMART_TARGET_HOSTILE_RANDOM: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 4bd38286b..e1bdfd60c 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1407,8 +1407,9 @@ enum SMARTAI_TARGETS SMART_TARGET_PLAYER_WITH_AURA = 201, // spellId, negation, MaxDist, MinDist, set target.o to a number to random resize the list SMART_TARGET_RANDOM_POINT = 202, // range, amount (for summoning creature), self als middle (0/1) else use xyz SMART_TARGET_ROLE_SELECTION = 203, // Range Max, TargetMask (Tanks (1), Healer (2) Damage (4)), resize list + SMART_TARGET_SUMMONED_CREATURES = 204, // Entry - SMART_TARGET_AC_END = 204 // placeholder + SMART_TARGET_AC_END = 205 // placeholder }; struct SmartTarget @@ -1564,6 +1565,11 @@ struct SmartTarget uint32 distMin; } playerWithAura; + struct + { + uint32 entry; + } summonedCreatures; + struct { uint32 param1; diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index e3636fd29..d2d9b0b5a 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -470,8 +470,8 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un bool AchievementCriteriaDataSet::Meets(Player const* source, Unit const* target, uint32 miscvalue /*= 0*/) const { - for (Storage::const_iterator itr = storage.begin(); itr != storage.end(); ++itr) - if (!itr->Meets(criteria_id, source, target, miscvalue)) + for (Storage::const_iterator itr = _storage.begin(); itr != _storage.end(); ++itr) + if (!itr->Meets(_criteria_id, source, target, miscvalue)) return false; return true; @@ -479,7 +479,7 @@ bool AchievementCriteriaDataSet::Meets(Player const* source, Unit const* target, AchievementMgr::AchievementMgr(Player* player) { - m_player = player; + _player = player; } AchievementMgr::~AchievementMgr() @@ -488,23 +488,23 @@ AchievementMgr::~AchievementMgr() void AchievementMgr::Reset() { - for (CompletedAchievementMap::const_iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter) + for (CompletedAchievementMap::const_iterator iter = _completedAchievements.begin(); iter != _completedAchievements.end(); ++iter) { WorldPacket data(SMSG_ACHIEVEMENT_DELETED, 4); data << uint32(iter->first); - m_player->SendDirectMessage(&data); + _player->SendDirectMessage(&data); } - for (CriteriaProgressMap::const_iterator iter = m_criteriaProgress.begin(); iter != m_criteriaProgress.end(); ++iter) + for (CriteriaProgressMap::const_iterator iter = _criteriaProgress.begin(); iter != _criteriaProgress.end(); ++iter) { WorldPacket data(SMSG_CRITERIA_DELETED, 4); data << uint32(iter->first); - m_player->SendDirectMessage(&data); + _player->SendDirectMessage(&data); } - m_completedAchievements.clear(); - m_criteriaProgress.clear(); - DeleteFromDB(m_player->GetGUID().GetCounter()); + _completedAchievements.clear(); + _criteriaProgress.clear(); + DeleteFromDB(_player->GetGUID().GetCounter()); // re-fill data CheckAllAchievementCriteria(); @@ -513,7 +513,7 @@ void AchievementMgr::Reset() void AchievementMgr::ResetAchievementCriteria(AchievementCriteriaCondition condition, uint32 value, bool evenIfCriteriaComplete) { // disable for gamemasters with GM-mode enabled - if (m_player->IsGameMaster()) + if (_player->IsGameMaster()) return; LOG_DEBUG("achievement", "AchievementMgr::ResetAchievementCriteria({}, {}, {})", condition, value, evenIfCriteriaComplete); @@ -554,9 +554,9 @@ void AchievementMgr::DeleteFromDB(ObjectGuid::LowType lowguid) void AchievementMgr::SaveToDB(CharacterDatabaseTransaction trans) { - if (!m_completedAchievements.empty()) + if (!_completedAchievements.empty()) { - for (CompletedAchievementMap::iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter) + for (CompletedAchievementMap::iterator iter = _completedAchievements.begin(); iter != _completedAchievements.end(); ++iter) { if (!iter->second.changed) continue; @@ -578,9 +578,9 @@ void AchievementMgr::SaveToDB(CharacterDatabaseTransaction trans) } } - if (!m_criteriaProgress.empty()) + if (!_criteriaProgress.empty()) { - for (CriteriaProgressMap::iterator iter = m_criteriaProgress.begin(); iter != m_criteriaProgress.end(); ++iter) + for (CriteriaProgressMap::iterator iter = _criteriaProgress.begin(); iter != _criteriaProgress.end(); ++iter) { if (!iter->second.changed) continue; @@ -622,7 +622,7 @@ void AchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, PreparedQ if (!achievement) continue; - CompletedAchievementData& ca = m_completedAchievements[achievementid]; + CompletedAchievementData& ca = _completedAchievements[achievementid]; ca.date = time_t(fields[1].Get()); ca.changed = false; @@ -662,7 +662,7 @@ void AchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, PreparedQ if (criteria->timeLimit && time_t(date + criteria->timeLimit) < GameTime::GetGameTime().count()) continue; - CriteriaProgress& progress = m_criteriaProgress[id]; + CriteriaProgress& progress = _criteriaProgress[id]; progress.counter = counter; progress.date = date; progress.changed = false; @@ -789,7 +789,7 @@ static const uint32 achievIdForDungeon[][4] = void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1 /*= 0*/, uint32 miscValue2 /*= 0*/, Unit* unit /*= nullptr*/) { // disable for gamemasters with GM-mode enabled - if (m_player->IsGameMaster()) + if (_player->IsGameMaster()) return; if (type >= ACHIEVEMENT_CRITERIA_TYPE_TOTAL) @@ -1596,7 +1596,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui if (!miscValue1) { uint32 points = 0; - for (CompletedAchievementMap::iterator itr = m_completedAchievements.begin(); itr != m_completedAchievements.end(); ++itr) + for (CompletedAchievementMap::iterator itr = _completedAchievements.begin(); itr != _completedAchievements.end(); ++itr) if (AchievementEntry const* pAchievement = sAchievementStore.LookupEntry(itr->first)) points += pAchievement->points; SetCriteriaProgress(achievementCriteria, points, PROGRESS_SET); @@ -2027,9 +2027,9 @@ bool AchievementMgr::IsCompletedAchievement(AchievementEntry const* entry) CriteriaProgress* AchievementMgr::GetCriteriaProgress(AchievementCriteriaEntry const* entry) { - CriteriaProgressMap::iterator iter = m_criteriaProgress.find(entry->ID); + CriteriaProgressMap::iterator iter = _criteriaProgress.find(entry->ID); - if (iter == m_criteriaProgress.end()) + if (iter == _criteriaProgress.end()) return nullptr; return &(iter->second); @@ -2038,8 +2038,8 @@ CriteriaProgress* AchievementMgr::GetCriteriaProgress(AchievementCriteriaEntry c void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, uint32 changeValue, ProgressType ptype) { // Don't allow to cheat - doing timed achievements without timer active - TimedAchievementMap::iterator timedIter = m_timedAchievements.find(entry->ID); - if (entry->timeLimit && timedIter == m_timedAchievements.end()) + TimedAchievementMap::iterator timedIter = _timedAchievements.find(entry->ID); + if (entry->timeLimit && timedIter == _timedAchievements.end()) return; if (!sScriptMgr->OnBeforeCriteriaProgress(GetPlayer(), entry)) @@ -2047,7 +2047,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, return; } - LOG_DEBUG("achievement", "AchievementMgr::SetCriteriaProgress({}, {}) for {}", entry->ID, changeValue, m_player->GetGUID().ToString()); + LOG_DEBUG("achievement", "AchievementMgr::SetCriteriaProgress({}, {}) for {}", entry->ID, changeValue, _player->GetGUID().ToString()); CriteriaProgress* progress = GetCriteriaProgress(entry); if (!progress) @@ -2057,7 +2057,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, if (changeValue == 0 && !entry->timeLimit) return; - progress = &m_criteriaProgress[entry->ID]; + progress = &_criteriaProgress[entry->ID]; progress->counter = changeValue; } else @@ -2103,7 +2103,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, // Remove the timer, we wont need it anymore if (timedCompleted) - m_timedAchievements.erase(timedIter); + _timedAchievements.erase(timedIter); } SendCriteriaUpdate(entry, progress, timeElapsed, true); @@ -2113,29 +2113,29 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, void AchievementMgr::RemoveCriteriaProgress(const AchievementCriteriaEntry* entry) { - CriteriaProgressMap::iterator criteriaProgress = m_criteriaProgress.find(entry->ID); - if (criteriaProgress == m_criteriaProgress.end()) + CriteriaProgressMap::iterator criteriaProgress = _criteriaProgress.find(entry->ID); + if (criteriaProgress == _criteriaProgress.end()) return; WorldPacket data(SMSG_CRITERIA_DELETED, 4); data << uint32(entry->ID); - m_player->SendDirectMessage(&data); + _player->SendDirectMessage(&data); - m_criteriaProgress.erase(criteriaProgress); + _criteriaProgress.erase(criteriaProgress); } void AchievementMgr::UpdateTimedAchievements(uint32 timeDiff) { - if (!m_timedAchievements.empty()) + if (!_timedAchievements.empty()) { - for (TimedAchievementMap::iterator itr = m_timedAchievements.begin(); itr != m_timedAchievements.end();) + for (TimedAchievementMap::iterator itr = _timedAchievements.begin(); itr != _timedAchievements.end();) { // Time is up, remove timer and reset progress if (itr->second <= timeDiff) { AchievementCriteriaEntry const* entry = sAchievementCriteriaStore.LookupEntry(itr->first); RemoveCriteriaProgress(entry); - m_timedAchievements.erase(itr++); + _timedAchievements.erase(itr++); } else { @@ -2155,12 +2155,12 @@ void AchievementMgr::StartTimedAchievement(AchievementCriteriaTimedTypes type, u continue; AchievementEntry const* achievement = sAchievementStore.LookupEntry((*i)->referredAchievement); - if (m_timedAchievements.find((*i)->ID) == m_timedAchievements.end() && !IsCompletedCriteria(*i, achievement)) + if (_timedAchievements.find((*i)->ID) == _timedAchievements.end() && !IsCompletedCriteria(*i, achievement)) { // Start the timer if ((*i)->timeLimit * IN_MILLISECONDS > timeLost) { - m_timedAchievements[(*i)->ID] = (*i)->timeLimit * IN_MILLISECONDS - timeLost; + _timedAchievements[(*i)->ID] = (*i)->timeLimit * IN_MILLISECONDS - timeLost; // and at client too SetCriteriaProgress(*i, 0, PROGRESS_SET); @@ -2177,26 +2177,26 @@ void AchievementMgr::RemoveTimedAchievement(AchievementCriteriaTimedTypes type, if ((*i)->timerStartEvent != entry) continue; - TimedAchievementMap::iterator timedIter = m_timedAchievements.find((*i)->ID); + TimedAchievementMap::iterator timedIter = _timedAchievements.find((*i)->ID); // We don't have timer for this achievement - if (timedIter == m_timedAchievements.end()) + if (timedIter == _timedAchievements.end()) continue; // remove progress RemoveCriteriaProgress(*i); // Remove the timer - m_timedAchievements.erase(timedIter); + _timedAchievements.erase(timedIter); } } void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) { // disable for gamemasters with GM-mode enabled - if (m_player->IsGameMaster()) + if (_player->IsGameMaster()) { LOG_INFO("achievement", "Not available in GM mode."); - ChatHandler(m_player->GetSession()).PSendSysMessage("Not available in GM mode"); + ChatHandler(_player->GetSession()).PSendSysMessage("Not available in GM mode"); return; } @@ -2211,7 +2211,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) LOG_DEBUG("achievement", "AchievementMgr::CompletedAchievement({})", achievement->ID); SendAchievementEarned(achievement); - CompletedAchievementData& ca = m_completedAchievements[achievement->ID]; + CompletedAchievementData& ca = _completedAchievements[achievement->ID]; ca.date = GameTime::GetGameTime().count(); ca.changed = true; @@ -2240,7 +2240,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) } } - if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL) && AccountMgr::IsPlayerAccount(m_player->GetSession()->GetSecurity())) + if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL) && AccountMgr::IsPlayerAccount(_player->GetSession()->GetSecurity())) sAchievementMgr->SetRealmCompleted(achievement); UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT, achievement->ID); @@ -2304,14 +2304,14 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) void AchievementMgr::SendAllAchievementData() const { - WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, m_completedAchievements.size() * 8 + 4 + m_criteriaProgress.size() * 38 + 4); + WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, _completedAchievements.size() * 8 + 4 + _criteriaProgress.size() * 38 + 4); BuildAllDataPacket(&data); GetPlayer()->GetSession()->SendPacket(&data); } void AchievementMgr::SendRespondInspectAchievements(Player* player) const { - WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9 + m_completedAchievements.size() * 8 + 4 + m_criteriaProgress.size() * 38 + 4); + WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9 + _completedAchievements.size() * 8 + 4 + _criteriaProgress.size() * 38 + 4); data << GetPlayer()->GetPackGUID(); BuildAllDataPacket(&data); player->GetSession()->SendPacket(&data); @@ -2322,7 +2322,7 @@ void AchievementMgr::SendRespondInspectAchievements(Player* player) const */ void AchievementMgr::BuildAllDataPacket(WorldPacket* data) const { - for (CompletedAchievementMap::const_iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter) + for (CompletedAchievementMap::const_iterator iter = _completedAchievements.begin(); iter != _completedAchievements.end(); ++iter) { // Skip hidden achievements AchievementEntry const* achievement = sAchievementStore.LookupEntry(iter->first); @@ -2336,7 +2336,7 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket* data) const *data << int32(-1); time_t now = GameTime::GetGameTime().count(); - for (CriteriaProgressMap::const_iterator iter = m_criteriaProgress.begin(); iter != m_criteriaProgress.end(); ++iter) + for (CriteriaProgressMap::const_iterator iter = _criteriaProgress.begin(); iter != _criteriaProgress.end(); ++iter) { *data << uint32(iter->first); data->appendPackGUID(iter->second.counter); @@ -2352,7 +2352,7 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket* data) const bool AchievementMgr::HasAchieved(uint32 achievementId) const { - return m_completedAchievements.find(achievementId) != m_completedAchievements.end(); + return _completedAchievements.find(achievementId) != _completedAchievements.end(); } bool AchievementMgr::CanUpdateCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement) @@ -2402,10 +2402,10 @@ AchievementGlobalMgr* AchievementGlobalMgr::instance() bool AchievementGlobalMgr::IsStatisticCriteria(AchievementCriteriaEntry const* achievementCriteria) const { - return isStatisticAchievement(sAchievementStore.LookupEntry(achievementCriteria->referredAchievement)); + return IsStatisticAchievement(sAchievementStore.LookupEntry(achievementCriteria->referredAchievement)); } -bool AchievementGlobalMgr::isStatisticAchievement(AchievementEntry const* achievement) const +bool AchievementGlobalMgr::IsStatisticAchievement(AchievementEntry const* achievement) const { if (!achievement) return false; @@ -2430,8 +2430,8 @@ bool AchievementGlobalMgr::isStatisticAchievement(AchievementEntry const* achiev bool AchievementGlobalMgr::IsRealmCompleted(AchievementEntry const* achievement) const { - auto itr = m_allCompletedAchievements.find(achievement->ID); - if (itr == m_allCompletedAchievements.end()) + auto itr = _allCompletedAchievements.find(achievement->ID); + if (itr == _allCompletedAchievements.end()) return false; if (itr->second == SystemTimePoint::min()) @@ -2459,7 +2459,7 @@ void AchievementGlobalMgr::SetRealmCompleted(AchievementEntry const* achievement if (IsRealmCompleted(achievement)) return; - m_allCompletedAchievements[achievement->ID] = GameTime::GetSystemTime(); + _allCompletedAchievements[achievement->ID] = GameTime::GetSystemTime(); } //========================================================== @@ -2481,67 +2481,67 @@ void AchievementGlobalMgr::LoadAchievementCriteriaList() if (!criteria) continue; - m_AchievementCriteriasByType[criteria->requiredType].push_back(criteria); - m_AchievementCriteriaListByAchievement[criteria->referredAchievement].push_back(criteria); + _achievementCriteriasByType[criteria->requiredType].push_back(criteria); + _achievementCriteriaListByAchievement[criteria->referredAchievement].push_back(criteria); if (criteria->additionalRequirements[0].additionalRequirement_type != ACHIEVEMENT_CRITERIA_CONDITION_NONE) - m_AchievementCriteriasByCondition[criteria->additionalRequirements[0].additionalRequirement_type][criteria->additionalRequirements[0].additionalRequirement_value].push_back(criteria); + _achievementCriteriasByCondition[criteria->additionalRequirements[0].additionalRequirement_type][criteria->additionalRequirements[0].additionalRequirement_value].push_back(criteria); if (criteria->additionalRequirements[1].additionalRequirement_type != ACHIEVEMENT_CRITERIA_CONDITION_NONE && criteria->additionalRequirements[1].additionalRequirement_type != criteria->additionalRequirements[0].additionalRequirement_type) - m_AchievementCriteriasByCondition[criteria->additionalRequirements[1].additionalRequirement_type][criteria->additionalRequirements[1].additionalRequirement_value].push_back(criteria); + _achievementCriteriasByCondition[criteria->additionalRequirements[1].additionalRequirement_type][criteria->additionalRequirements[1].additionalRequirement_value].push_back(criteria); switch (criteria->requiredType) { case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE: - m_SpecialList[criteria->requiredType][criteria->kill_creature.creatureID].push_back(criteria); + _specialList[criteria->requiredType][criteria->kill_creature.creatureID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG: - m_SpecialList[criteria->requiredType][criteria->win_bg.bgMapID].push_back(criteria); + _specialList[criteria->requiredType][criteria->win_bg.bgMapID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL: - m_SpecialList[criteria->requiredType][criteria->reach_skill_level.skillID].push_back(criteria); + _specialList[criteria->requiredType][criteria->reach_skill_level.skillID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: - m_SpecialList[criteria->requiredType][criteria->complete_achievement.linkedAchievement].push_back(criteria); + _specialList[criteria->requiredType][criteria->complete_achievement.linkedAchievement].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE: - m_SpecialList[criteria->requiredType][criteria->complete_quests_in_zone.zoneID].push_back(criteria); + _specialList[criteria->requiredType][criteria->complete_quests_in_zone.zoneID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND: - m_SpecialList[criteria->requiredType][criteria->complete_battleground.mapID].push_back(criteria); + _specialList[criteria->requiredType][criteria->complete_battleground.mapID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE: - m_SpecialList[criteria->requiredType][criteria->killed_by_creature.creatureEntry].push_back(criteria); + _specialList[criteria->requiredType][criteria->killed_by_creature.creatureEntry].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST: - m_SpecialList[criteria->requiredType][criteria->complete_quest.questID].push_back(criteria); + _specialList[criteria->requiredType][criteria->complete_quest.questID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET: - m_SpecialList[criteria->requiredType][criteria->be_spell_target.spellID].push_back(criteria); + _specialList[criteria->requiredType][criteria->be_spell_target.spellID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL: - m_SpecialList[criteria->requiredType][criteria->cast_spell.spellID].push_back(criteria); + _specialList[criteria->requiredType][criteria->cast_spell.spellID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: - m_SpecialList[criteria->requiredType][criteria->bg_objective.objectiveId].push_back(criteria); + _specialList[criteria->requiredType][criteria->bg_objective.objectiveId].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA: - m_SpecialList[criteria->requiredType][criteria->honorable_kill_at_area.areaID].push_back(criteria); + _specialList[criteria->requiredType][criteria->honorable_kill_at_area.areaID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL: - m_SpecialList[criteria->requiredType][criteria->learn_spell.spellID].push_back(criteria); + _specialList[criteria->requiredType][criteria->learn_spell.spellID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM: - m_SpecialList[criteria->requiredType][criteria->own_item.itemID].push_back(criteria); + _specialList[criteria->requiredType][criteria->own_item.itemID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL: - m_SpecialList[criteria->requiredType][criteria->learn_skill_level.skillID].push_back(criteria); + _specialList[criteria->requiredType][criteria->learn_skill_level.skillID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM: - m_SpecialList[criteria->requiredType][criteria->use_item.itemID].push_back(criteria); + _specialList[criteria->requiredType][criteria->use_item.itemID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM: - m_SpecialList[criteria->requiredType][criteria->own_item.itemID].push_back(criteria); + _specialList[criteria->requiredType][criteria->own_item.itemID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA: { @@ -2557,53 +2557,53 @@ void AchievementGlobalMgr::LoadAchievementCriteriaList() if (worldOverlayEntry->areatableID[j] == worldOverlayEntry->areatableID[i]) valid = false; if (valid) - m_SpecialList[criteria->requiredType][worldOverlayEntry->areatableID[j]].push_back(criteria); + _specialList[criteria->requiredType][worldOverlayEntry->areatableID[j]].push_back(criteria); } } break; case ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION: - m_SpecialList[criteria->requiredType][criteria->gain_reputation.factionID].push_back(criteria); + _specialList[criteria->requiredType][criteria->gain_reputation.factionID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM: - m_SpecialList[criteria->requiredType][criteria->equip_epic_item.itemSlot].push_back(criteria); + _specialList[criteria->requiredType][criteria->equip_epic_item.itemSlot].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS: - m_SpecialList[criteria->requiredType][criteria->hk_class.classID].push_back(criteria); + _specialList[criteria->requiredType][criteria->hk_class.classID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_HK_RACE: - m_SpecialList[criteria->requiredType][criteria->hk_race.raceID].push_back(criteria); + _specialList[criteria->requiredType][criteria->hk_race.raceID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE: - m_SpecialList[criteria->requiredType][criteria->do_emote.emoteID].push_back(criteria); + _specialList[criteria->requiredType][criteria->do_emote.emoteID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM: - m_SpecialList[criteria->requiredType][criteria->equip_item.itemID].push_back(criteria); + _specialList[criteria->requiredType][criteria->equip_item.itemID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT: - m_SpecialList[criteria->requiredType][criteria->use_gameobject.goEntry].push_back(criteria); + _specialList[criteria->requiredType][criteria->use_gameobject.goEntry].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2: - m_SpecialList[criteria->requiredType][criteria->be_spell_target.spellID].push_back(criteria); + _specialList[criteria->requiredType][criteria->be_spell_target.spellID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT: - m_SpecialList[criteria->requiredType][criteria->fish_in_gameobject.goEntry].push_back(criteria); + _specialList[criteria->requiredType][criteria->fish_in_gameobject.goEntry].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS: - m_SpecialList[criteria->requiredType][criteria->learn_skillline_spell.skillLine].push_back(criteria); + _specialList[criteria->requiredType][criteria->learn_skillline_spell.skillLine].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE: - m_SpecialList[criteria->requiredType][criteria->loot_type.lootType].push_back(criteria); + _specialList[criteria->requiredType][criteria->loot_type.lootType].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2: - m_SpecialList[criteria->requiredType][criteria->cast_spell.spellID].push_back(criteria); + _specialList[criteria->requiredType][criteria->cast_spell.spellID].push_back(criteria); break; case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE: - m_SpecialList[criteria->requiredType][criteria->learn_skill_line.skillLine].push_back(criteria); + _specialList[criteria->requiredType][criteria->learn_skill_line.skillLine].push_back(criteria); break; } if (criteria->timeLimit) - m_AchievementCriteriasByTimedType[criteria->timedType].push_back(criteria); + _achievementCriteriasByTimedType[criteria->timedType].push_back(criteria); ++loaded; } @@ -2631,7 +2631,7 @@ void AchievementGlobalMgr::LoadAchievementReferenceList() if (!achievement || !achievement->refAchievement) continue; - m_AchievementListByReferencedId[achievement->refAchievement].push_back(achievement); + _achievementListByReferencedId[achievement->refAchievement].push_back(achievement); ++count; } @@ -2643,7 +2643,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() { uint32 oldMSTime = getMSTime(); - m_criteriaDataMap.clear(); // need for reload case + _criteriaDataMap.clear(); // need for reload case QueryResult result = WorldDatabase.Query("SELECT criteria_id, type, value1, value2, ScriptName FROM achievement_criteria_data"); @@ -2686,7 +2686,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() continue; // this will allocate empty data set storage - AchievementCriteriaDataSet& dataSet = m_criteriaDataMap[criteria_id]; + AchievementCriteriaDataSet& dataSet = _criteriaDataMap[criteria_id]; dataSet.SetCriteriaId(criteria_id); // add real data only for not NONE data types @@ -2786,7 +2786,7 @@ void AchievementGlobalMgr::LoadCompletedAchievements() for (uint32 i = 0; i < sAchievementStore.GetNumRows(); ++i) if (AchievementEntry const* achievement = sAchievementStore.LookupEntry(i)) if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) - m_allCompletedAchievements[achievement->ID] = SystemTimePoint::min(); + _allCompletedAchievements[achievement->ID] = SystemTimePoint::min(); if (!result) { @@ -2814,10 +2814,10 @@ void AchievementGlobalMgr::LoadCompletedAchievements() continue; } else if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) - m_allCompletedAchievements[achievementId] = SystemTimePoint::max(); + _allCompletedAchievements[achievementId] = SystemTimePoint::max(); } while (result->NextRow()); - LOG_INFO("server.loading", ">> Loaded {} completed achievements in {} ms", (unsigned long)m_allCompletedAchievements.size(), GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("server.loading", ">> Loaded {} completed achievements in {} ms", (unsigned long)_allCompletedAchievements.size(), GetMSTimeDiffToNow(oldMSTime)); LOG_INFO("server.loading", " "); } @@ -2825,7 +2825,7 @@ void AchievementGlobalMgr::LoadRewards() { uint32 oldMSTime = getMSTime(); - m_achievementRewards.clear(); // need for reload case + _achievementRewards.clear(); // need for reload case // 0 1 2 3 4 5 6 7 QueryResult result = WorldDatabase.Query("SELECT ID, TitleA, TitleH, ItemID, Sender, Subject, Body, MailTemplateID FROM achievement_reward"); @@ -2934,7 +2934,7 @@ void AchievementGlobalMgr::LoadRewards() } } - m_achievementRewards[entry] = reward; + _achievementRewards[entry] = reward; ++count; } while (result->NextRow()); @@ -2946,7 +2946,7 @@ void AchievementGlobalMgr::LoadRewardLocales() { uint32 oldMSTime = getMSTime(); - m_achievementRewardLocales.clear(); // need for reload case + _achievementRewardLocales.clear(); // need for reload case // 0 1 2 3 QueryResult result = WorldDatabase.Query("SELECT ID, Locale, Subject, Text FROM achievement_reward_locale"); @@ -2963,7 +2963,7 @@ void AchievementGlobalMgr::LoadRewardLocales() Field* fields = result->Fetch(); uint32 ID = fields[0].Get(); - if (m_achievementRewards.find(ID) == m_achievementRewards.end()) + if (_achievementRewards.find(ID) == _achievementRewards.end()) { LOG_ERROR("sql.sql", "Table `achievement_reward_locale` (Entry: {}) has locale strings for non-existing achievement reward.", ID); continue; @@ -2973,12 +2973,12 @@ void AchievementGlobalMgr::LoadRewardLocales() if (locale == LOCALE_enUS) continue; - AchievementRewardLocale& data = m_achievementRewardLocales[ID]; + AchievementRewardLocale& data = _achievementRewardLocales[ID]; ObjectMgr::AddLocaleString(fields[2].Get(), locale, data.Subject); ObjectMgr::AddLocaleString(fields[3].Get(), locale, data.Text); } while (result->NextRow()); - LOG_INFO("server.loading", ">> Loaded {} Achievement Reward Locale Strings in {} ms", (unsigned long)m_achievementRewardLocales.size(), GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("server.loading", ">> Loaded {} Achievement Reward Locale Strings in {} ms", (unsigned long)_achievementRewardLocales.size(), GetMSTimeDiffToNow(oldMSTime)); LOG_INFO("server.loading", " "); } diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index 549ebf68a..bc9c0c7dd 100644 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -233,12 +233,12 @@ struct AchievementCriteriaDataSet { AchievementCriteriaDataSet() = default; typedef std::vector Storage; - void Add(AchievementCriteriaData const& data) { storage.push_back(data); } + void Add(AchievementCriteriaData const& data) { _storage.push_back(data); } bool Meets(Player const* source, Unit const* target, uint32 miscvalue = 0) const; - void SetCriteriaId(uint32 id) {criteria_id = id;} + void SetCriteriaId(uint32 id) {_criteria_id = id;} private: - uint32 criteria_id{0}; - Storage storage; + uint32 _criteria_id{0}; + Storage _storage; }; typedef std::map AchievementCriteriaDataMap; @@ -293,7 +293,7 @@ public: void SendAllAchievementData() const; void SendRespondInspectAchievements(Player* player) const; [[nodiscard]] bool HasAchieved(uint32 achievementId) const; - [[nodiscard]] Player* GetPlayer() const { return m_player; } + [[nodiscard]] Player* GetPlayer() const { return _player; } void UpdateTimedAchievements(uint32 timeDiff); void StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost = 0); void RemoveTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry); // used for quest and scripted timed achievements @@ -311,11 +311,11 @@ private: bool CanUpdateCriteria(AchievementCriteriaEntry const* criteria, AchievementEntry const* achievement); void BuildAllDataPacket(WorldPacket* data) const; - Player* m_player; - CriteriaProgressMap m_criteriaProgress; - CompletedAchievementMap m_completedAchievements; + Player* _player; + CriteriaProgressMap _criteriaProgress; + CompletedAchievementMap _completedAchievements; typedef std::map TimedAchievementMap; - TimedAchievementMap m_timedAchievements; // Criteria id/time left in MS + TimedAchievementMap _timedAchievements; // Criteria id/time left in MS }; class AchievementGlobalMgr @@ -327,60 +327,60 @@ public: static AchievementGlobalMgr* instance(); bool IsStatisticCriteria(AchievementCriteriaEntry const* achievementCriteria) const; - bool isStatisticAchievement(AchievementEntry const* achievement) const; + bool IsStatisticAchievement(AchievementEntry const* achievement) const; [[nodiscard]] AchievementCriteriaEntryList const* GetAchievementCriteriaByType(AchievementCriteriaTypes type) const { - return &m_AchievementCriteriasByType[type]; + return &_achievementCriteriasByType[type]; } AchievementCriteriaEntryList const* GetSpecialAchievementCriteriaByType(AchievementCriteriaTypes type, uint32 val) { - if (m_SpecialList[type].find(val) != m_SpecialList[type].end()) - return &m_SpecialList[type][val]; + if (_specialList[type].find(val) != _specialList[type].end()) + return &_specialList[type][val]; return nullptr; } AchievementCriteriaEntryList const* GetAchievementCriteriaByCondition(AchievementCriteriaCondition condition, uint32 val) { - if (m_AchievementCriteriasByCondition[condition].find(val) != m_AchievementCriteriasByCondition[condition].end()) - return &m_AchievementCriteriasByCondition[condition][val]; + if (_achievementCriteriasByCondition[condition].find(val) != _achievementCriteriasByCondition[condition].end()) + return &_achievementCriteriasByCondition[condition][val]; return nullptr; } [[nodiscard]] AchievementCriteriaEntryList const& GetTimedAchievementCriteriaByType(AchievementCriteriaTimedTypes type) const { - return m_AchievementCriteriasByTimedType[type]; + return _achievementCriteriasByTimedType[type]; } [[nodiscard]] AchievementCriteriaEntryList const* GetAchievementCriteriaByAchievement(uint32 id) const { - AchievementCriteriaListByAchievement::const_iterator itr = m_AchievementCriteriaListByAchievement.find(id); - return itr != m_AchievementCriteriaListByAchievement.end() ? &itr->second : nullptr; + AchievementCriteriaListByAchievement::const_iterator itr = _achievementCriteriaListByAchievement.find(id); + return itr != _achievementCriteriaListByAchievement.end() ? &itr->second : nullptr; } [[nodiscard]] AchievementEntryList const* GetAchievementByReferencedId(uint32 id) const { - AchievementListByReferencedId::const_iterator itr = m_AchievementListByReferencedId.find(id); - return itr != m_AchievementListByReferencedId.end() ? &itr->second : nullptr; + AchievementListByReferencedId::const_iterator itr = _achievementListByReferencedId.find(id); + return itr != _achievementListByReferencedId.end() ? &itr->second : nullptr; } AchievementReward const* GetAchievementReward(AchievementEntry const* achievement) const { - AchievementRewards::const_iterator iter = m_achievementRewards.find(achievement->ID); - return iter != m_achievementRewards.end() ? &iter->second : nullptr; + AchievementRewards::const_iterator iter = _achievementRewards.find(achievement->ID); + return iter != _achievementRewards.end() ? &iter->second : nullptr; } AchievementRewardLocale const* GetAchievementRewardLocale(AchievementEntry const* achievement) const { - AchievementRewardLocales::const_iterator iter = m_achievementRewardLocales.find(achievement->ID); - return iter != m_achievementRewardLocales.end() ? &iter->second : nullptr; + AchievementRewardLocales::const_iterator iter = _achievementRewardLocales.find(achievement->ID); + return iter != _achievementRewardLocales.end() ? &iter->second : nullptr; } AchievementCriteriaDataSet const* GetCriteriaDataSet(AchievementCriteriaEntry const* achievementCriteria) const { - AchievementCriteriaDataMap::const_iterator iter = m_criteriaDataMap.find(achievementCriteria->ID); - return iter != m_criteriaDataMap.end() ? &iter->second : nullptr; + AchievementCriteriaDataMap::const_iterator iter = _criteriaDataMap.find(achievementCriteria->ID); + return iter != _criteriaDataMap.end() ? &iter->second : nullptr; } bool IsRealmCompleted(AchievementEntry const* achievement) const; @@ -396,25 +396,25 @@ public: [[nodiscard]] AchievementEntry const* GetAchievement(uint32 achievementId) const; private: - AchievementCriteriaDataMap m_criteriaDataMap; + AchievementCriteriaDataMap _criteriaDataMap; // store achievement criterias by type to speed up lookup - AchievementCriteriaEntryList m_AchievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]; - AchievementCriteriaEntryList m_AchievementCriteriasByTimedType[ACHIEVEMENT_TIMED_TYPE_MAX]; + AchievementCriteriaEntryList _achievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]; + AchievementCriteriaEntryList _achievementCriteriasByTimedType[ACHIEVEMENT_TIMED_TYPE_MAX]; // store achievement criterias by achievement to speed up lookup - AchievementCriteriaListByAchievement m_AchievementCriteriaListByAchievement; + AchievementCriteriaListByAchievement _achievementCriteriaListByAchievement; // store achievements by referenced achievement id to speed up lookup - AchievementListByReferencedId m_AchievementListByReferencedId; + AchievementListByReferencedId _achievementListByReferencedId; typedef std::unordered_map AllCompletedAchievements; - AllCompletedAchievements m_allCompletedAchievements; + AllCompletedAchievements _allCompletedAchievements; - AchievementRewards m_achievementRewards; - AchievementRewardLocales m_achievementRewardLocales; + AchievementRewards _achievementRewards; + AchievementRewardLocales _achievementRewardLocales; // pussywizard: - std::map m_SpecialList[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]; - std::map m_AchievementCriteriasByCondition[ACHIEVEMENT_CRITERIA_CONDITION_TOTAL]; + std::map _specialList[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]; + std::map _achievementCriteriasByCondition[ACHIEVEMENT_CRITERIA_CONDITION_TOTAL]; }; #define sAchievementMgr AchievementGlobalMgr::instance() diff --git a/src/server/game/Addons/AddonMgr.cpp b/src/server/game/Addons/AddonMgr.cpp index 396babbda..918b1b517 100644 --- a/src/server/game/Addons/AddonMgr.cpp +++ b/src/server/game/Addons/AddonMgr.cpp @@ -17,10 +17,10 @@ #include "AddonMgr.h" #include "DatabaseEnv.h" +#include "CryptoHash.h" #include "Log.h" #include "Timer.h" #include -#include namespace AddonMgr { @@ -66,6 +66,7 @@ namespace AddonMgr oldMSTime = getMSTime(); result = CharacterDatabase.Query("SELECT id, name, version, UNIX_TIMESTAMP(timestamp) FROM banned_addons"); + if (result) { uint32 count2 = 0; @@ -78,14 +79,10 @@ namespace AddonMgr BannedAddon addon{}; addon.Id = fields[0].Get() + offset; addon.Timestamp = uint32(fields[3].Get()); + addon.NameMD5 = Acore::Crypto::MD5::GetDigestOf(fields[1].Get()); + addon.VersionMD5 = Acore::Crypto::MD5::GetDigestOf(fields[2].Get()); - std::string name = fields[1].Get(); - std::string version = fields[2].Get(); - - MD5(reinterpret_cast(name.c_str()), name.length(), addon.NameMD5); - MD5(reinterpret_cast(version.c_str()), version.length(), addon.VersionMD5); - - m_bannedAddons.push_back(addon); + m_bannedAddons.emplace_back(addon); ++count2; } while (result->NextRow()); diff --git a/src/server/game/Addons/AddonMgr.h b/src/server/game/Addons/AddonMgr.h index 897476a77..d51fb1402 100644 --- a/src/server/game/Addons/AddonMgr.h +++ b/src/server/game/Addons/AddonMgr.h @@ -19,6 +19,7 @@ #define _ADDONMGR_H #include "Define.h" +#include #include #include #include @@ -49,8 +50,8 @@ struct SavedAddon struct BannedAddon { uint32 Id; - uint8 NameMD5[16]; - uint8 VersionMD5[16]; + std::array NameMD5; + std::array VersionMD5; uint32 Timestamp; }; diff --git a/src/server/game/Combat/ThreatMgr.h b/src/server/game/Combat/ThreatMgr.h index 7196e5638..846a1fd28 100644 --- a/src/server/game/Combat/ThreatMgr.h +++ b/src/server/game/Combat/ThreatMgr.h @@ -225,6 +225,9 @@ public: [[nodiscard]] bool isThreatListEmpty() const { return iThreatContainer.empty(); } [[nodiscard]] bool areThreatListsEmpty() const { return iThreatContainer.empty() && iThreatOfflineContainer.empty(); } + Acore::IteratorPair::const_iterator> GetSortedThreatList() const { auto& list = iThreatContainer.GetThreatList(); return { list.cbegin(), list.cend() }; } + Acore::IteratorPair::const_iterator> GetUnsortedThreatList() const { return GetSortedThreatList(); } + void processThreatEvent(ThreatRefStatusChangeEvent* threatRefStatusChangeEvent); bool isNeedUpdateToClient(uint32 time); diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index c6e79b5bc..e246d2a30 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -768,21 +768,24 @@ uint32 Condition::GetMaxAvailableConditionTargets() // returns number of targets which are available for given source type switch (SourceType) { - case CONDITION_SOURCE_TYPE_SMART_EVENT: - return 3; - case CONDITION_SOURCE_TYPE_SPELL: - case CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET: - case CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE: - case CONDITION_SOURCE_TYPE_VEHICLE_SPELL: - case CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT: - case CONDITION_SOURCE_TYPE_GOSSIP_MENU: - case CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION: - case CONDITION_SOURCE_TYPE_NPC_VENDOR: - case CONDITION_SOURCE_TYPE_SPELL_PROC: - return 2; - default: - return 1; + case CONDITION_SOURCE_TYPE_SMART_EVENT: + return 3; + case CONDITION_SOURCE_TYPE_SPELL: + case CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET: + case CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE: + case CONDITION_SOURCE_TYPE_VEHICLE_SPELL: + case CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT: + case CONDITION_SOURCE_TYPE_GOSSIP_MENU: + case CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION: + case CONDITION_SOURCE_TYPE_NPC_VENDOR: + case CONDITION_SOURCE_TYPE_SPELL_PROC: + case CONDITION_SOURCE_TYPE_CREATURE_VISIBILITY: + return 2; + default: + break; } + + return 1; } ConditionMgr::ConditionMgr() {} diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 0efabd6e6..87a6751c4 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -52,6 +52,7 @@ GameObject::GameObject() : WorldObject(false), MovableMapObject(), m_respawnDelayTime = 300; m_despawnDelay = 0; m_despawnRespawnTime = 0s; + m_restockTime = 0s; m_lootState = GO_NOT_READY; m_spawnedByDefault = true; m_allowModifyDestructibleBuilding = true; @@ -585,6 +586,16 @@ void GameObject::Update(uint32 diff) spellCaster->CastSpell(spellCaster, spellId, triggered); return; } + case GAMEOBJECT_TYPE_CHEST: + if (m_restockTime > GameTime::GetGameTime()) + { + return; + } + // If there is no restock timer, or if the restock timer passed, the chest becomes ready to loot + m_restockTime = 0s; + m_lootState = GO_READY; + AddToObjectUpdateIfNeeded(); + break; default: m_lootState = GO_READY; // for other GOis same switched without delay to GO_READY break; @@ -768,6 +779,14 @@ void GameObject::Update(uint32 diff) m_groupLootTimer -= diff; } } + + // Non-consumable chest was partially looted and restock time passed, restock all loot now + if (GetGOInfo()->chest.consumable == 0 && GameTime::GetGameTime() >= m_restockTime) + { + m_restockTime = 0s; + m_lootState = GO_READY; + AddToObjectUpdateIfNeeded(); + } break; case GAMEOBJECT_TYPE_TRAP: { @@ -826,21 +845,29 @@ void GameObject::Update(uint32 diff) loot.clear(); - //! If this is summoned by a spell with ie. SPELL_EFFECT_SUMMON_OBJECT_WILD, with or without owner, we check respawn criteria based on spell - //! The GetOwnerGUID() check is mostly for compatibility with hacky scripts - 99% of the time summoning should be done trough spells. - if (GetSpellId() || GetOwnerGUID()) + // Do not delete chests or goobers that are not consumed on loot, while still allowing them to despawn when they expire if summoned + bool isSummonedAndExpired = (GetOwner() || GetSpellId()) && m_respawnTime == 0; + if ((GetGoType() == GAMEOBJECT_TYPE_CHEST || GetGoType() == GAMEOBJECT_TYPE_GOOBER) && !GetGOInfo()->IsDespawnAtAction() && !isSummonedAndExpired) { - //Don't delete spell spawned chests, which are not consumed on loot - if (m_respawnTime > 0 && GetGoType() == GAMEOBJECT_TYPE_CHEST && !GetGOInfo()->IsDespawnAtAction()) + if (GetGoType() == GAMEOBJECT_TYPE_CHEST && GetGOInfo()->chest.chestRestockTime > 0) { - UpdateObjectVisibility(); - SetLootState(GO_READY); + // Start restock timer when the chest is fully looted + m_restockTime = GameTime::GetGameTime() + Seconds(GetGOInfo()->chest.chestRestockTime); + SetLootState(GO_NOT_READY); + AddToObjectUpdateIfNeeded(); } else { - SetRespawnTime(0); - Delete(); + SetLootState(GO_READY); } + + UpdateObjectVisibility(); + return; + } + else if (GetOwnerGUID() || GetSpellId()) + { + SetRespawnTime(0); + Delete(); return; } @@ -2422,6 +2449,13 @@ void GameObject::SetLootState(LootState state, Unit* unit) AI()->OnStateChanged(state, unit); sScriptMgr->OnGameObjectLootStateChanged(this, state, unit); + + // Start restock timer if the chest is partially looted or not looted at all + if (GetGoType() == GAMEOBJECT_TYPE_CHEST && state == GO_ACTIVATED && GetGOInfo()->chest.chestRestockTime > 0 && m_restockTime == 0s) + { + m_restockTime = GameTime::GetGameTime() + Seconds(GetGOInfo()->chest.chestRestockTime); + } + // pussywizard: lootState has nothing to do with collision, it depends entirely on GOState. Loot state is for timed close/open door and respawning, which then sets GOState /*if (m_model) { diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index ce62f7a55..557a434e6 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -1072,9 +1072,10 @@ protected: uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer uint32 m_despawnDelay; Seconds m_despawnRespawnTime; // override respawn time after delayed despawn + Seconds m_restockTime; LootState m_lootState; bool m_spawnedByDefault; - uint32 m_cooldownTime; // used as internal reaction delay time store (not state change reaction). + uint32 m_cooldownTime; // used as internal reaction delay time store (not state change reaction). // For traps this: spell casting cooldown, for doors/buttons: reset time. std::unordered_map m_SkillupList; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 45f001630..d44f10f2d 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1737,7 +1737,7 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo // Creature scripts if (Creature const* cObj = obj->ToCreature()) { - if (Player const* player = this->ToPlayer()) + if (Player const* player = ToPlayer()) { if (cObj->IsAIEnabled && !cObj->AI()->CanBeSeen(player)) { @@ -1745,8 +1745,7 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo } ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_VISIBILITY, cObj->GetEntry()); - - if (!sConditionMgr->IsObjectMeetToConditions((WorldObject*)this, conditions)) + if (!sConditionMgr->IsObjectMeetToConditions((WorldObject*)this, (WorldObject*)obj, conditions)) { return false; } @@ -1755,8 +1754,12 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo // Gameobject scripts if (GameObject const* goObj = obj->ToGameObject()) - if (this->ToPlayer() && !goObj->AI()->CanBeSeen(this->ToPlayer())) + { + if (ToPlayer() && !goObj->AI()->CanBeSeen(ToPlayer())) + { return false; + } + } // pussywizard: arena spectator if (obj->GetTypeId() == TYPEID_PLAYER) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 9cedd098d..2b65ba52d 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1316,7 +1316,7 @@ public: void DestroyZoneLimitedItem(bool update, uint32 new_zone); void SplitItem(uint16 src, uint16 dst, uint32 count); void SwapItem(uint16 src, uint16 dst); - void AddItemToBuyBackSlot(Item* pItem); + void AddItemToBuyBackSlot(Item* pItem, uint32 money); Item* GetItemFromBuyBackSlot(uint32 slot); void RemoveItemFromBuyBackSlot(uint32 slot, bool del); [[nodiscard]] uint32 GetMaxKeyringSize() const { return KEYRING_SLOT_END - KEYRING_SLOT_START; } diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index 97da292f1..09773fbcc 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -3961,7 +3961,7 @@ void Player::SwapItem(uint16 src, uint16 dst) AutoUnequipOffhandIfNeed(); } -void Player::AddItemToBuyBackSlot(Item* pItem) +void Player::AddItemToBuyBackSlot(Item* pItem, uint32 money) { if (pItem) { @@ -4003,10 +4003,7 @@ void Player::AddItemToBuyBackSlot(Item* pItem) uint32 eslot = slot - BUYBACK_SLOT_START; SetGuidValue(PLAYER_FIELD_VENDORBUYBACK_SLOT_1 + (eslot * 2), pItem->GetGUID()); - if (ItemTemplate const* proto = pItem->GetTemplate()) - SetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + eslot, proto->SellPrice * pItem->GetCount()); - else - SetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + eslot, 0); + SetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + eslot, money); SetUInt32Value(PLAYER_FIELD_BUYBACK_TIMESTAMP_1 + eslot, (uint32)etime); // move to next (for non filled list is move most optimized choice) diff --git a/src/server/game/Entities/Player/PlayerUpdates.cpp b/src/server/game/Entities/Player/PlayerUpdates.cpp index 7c390df4f..f652c648e 100644 --- a/src/server/game/Entities/Player/PlayerUpdates.cpp +++ b/src/server/game/Entities/Player/PlayerUpdates.cpp @@ -1763,28 +1763,33 @@ void Player::UpdateForQuestWorldObjects() continue; // check if this unit requires quest specific flags - if (!obj->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK)) - continue; - - SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(obj->GetEntry()); - for (SpellClickInfoContainer::const_iterator _itr = clickPair.first; _itr != clickPair.second; ++_itr) + if (obj->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK)) { - //! This code doesn't look right, but it was logically converted to condition system to do the exact - //! same thing it did before. It definitely needs to be overlooked for intended functionality. - ConditionList conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId); - bool buildUpdateBlock = false; - for (ConditionList::const_iterator jtr = conds.begin(); jtr != conds.end() && !buildUpdateBlock; ++jtr) - if ((*jtr)->ConditionType == CONDITION_QUESTREWARDED || (*jtr)->ConditionType == CONDITION_QUESTTAKEN) - buildUpdateBlock = true; - - if (buildUpdateBlock) + SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(obj->GetEntry()); + for (SpellClickInfoContainer::const_iterator _itr = clickPair.first; _itr != clickPair.second; ++_itr) { - obj->BuildValuesUpdateBlockForPlayer(&udata, this); - break; + //! This code doesn't look right, but it was logically converted to condition system to do the exact + //! same thing it did before. It definitely needs to be overlooked for intended functionality. + ConditionList conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId); + bool buildUpdateBlock = false; + for (ConditionList::const_iterator jtr = conds.begin(); jtr != conds.end() && !buildUpdateBlock; ++jtr) + if ((*jtr)->ConditionType == CONDITION_QUESTREWARDED || (*jtr)->ConditionType == CONDITION_QUESTTAKEN) + buildUpdateBlock = true; + + if (buildUpdateBlock) + { + obj->BuildValuesUpdateBlockForPlayer(&udata, this); + break; + } } } + else if (obj->HasNpcFlag(UNIT_NPC_FLAG_VENDOR_MASK | UNIT_NPC_FLAG_TRAINER)) + { + obj->BuildValuesUpdateBlockForPlayer(&udata, this); + } } } + udata.BuildPacket(&packet); GetSession()->SendPacket(&packet); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index db66ac5b1..d45466a7c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1031,7 +1031,7 @@ uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage if (!attacker || attacker->IsControlledByPlayer() || attacker->IsCreatedByPlayer()) { uint32 unDamage = health < damage ? health : damage; - bool damagedByPlayer = unDamage && attacker && attacker->m_movedByPlayer != nullptr; + bool damagedByPlayer = unDamage && attacker && (attacker->IsPlayer() || attacker->m_movedByPlayer != nullptr); victim->ToCreature()->LowerPlayerDamageReq(unDamage, damagedByPlayer); } } @@ -18215,6 +18215,11 @@ void Unit::SetControlled(bool apply, UnitState state) void Unit::SetStunned(bool apply) { + if (HasUnitState(UNIT_STATE_IN_FLIGHT)) + { + return; + } + if (apply) { SetTarget(); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 6dbc3b914..6ae155ec6 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2303,7 +2303,7 @@ public: void SendPetAIReaction(ObjectGuid guid); ///----------End of Pet responses methods---------- - void propagateSpeedChange() { GetMotionMaster()->propagateSpeedChange(); } + void propagateSpeedChange() { GetMotionMaster()->PropagateSpeedChange(); } // reactive attacks void ClearAllReactives(); diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 19bcc766c..dae3a05a0 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -818,6 +818,51 @@ void WorldSession::HandleSellItemOpcode(WorldPacket& recvData) if (sWorld->getBoolConfig(CONFIG_ITEMDELETE_VENDOR)) recoveryItem(pItem); + uint32 maxDurability = pItem->GetUInt32Value(ITEM_FIELD_MAXDURABILITY); + if (maxDurability) + { + uint32 curDurability = pItem->GetUInt32Value(ITEM_FIELD_DURABILITY); + uint32 LostDurability = maxDurability - curDurability; + + if (LostDurability > 0) + { + DurabilityCostsEntry const* dcost = sDurabilityCostsStore.LookupEntry(pProto->ItemLevel); + if (!dcost) + { + _player->SendSellError(SELL_ERR_CANT_SELL_ITEM, creature, itemguid, 0); + LOG_ERROR("network.opcode", "WORLD: HandleSellItemOpcode - Wrong item lvl {} for item {} count = {}", pProto->ItemLevel, pItem->GetEntry(), count); + return; + } + + uint32 dQualitymodEntryId = (pProto->Quality + 1) * 2; + DurabilityQualityEntry const* dQualitymodEntry = sDurabilityQualityStore.LookupEntry(dQualitymodEntryId); + if (!dQualitymodEntry) + { + _player->SendSellError(SELL_ERR_CANT_SELL_ITEM, creature, itemguid, 0); + LOG_ERROR("network.opcode", "WORLD: HandleSellItemOpcode - Wrong dQualityModEntry {} for item {} count = {}", dQualitymodEntryId, pItem->GetEntry(), count); + return; + } + + uint32 dmultiplier = dcost->multiplier[ItemSubClassToDurabilityMultiplierId(pProto->Class, pProto->SubClass)]; + uint32 refund = uint32(std::ceil(LostDurability * dmultiplier * double(dQualitymodEntry->quality_mod))); + + if (!refund) + { + refund = 1; + } + + //starter items can cost more to refund than vendorprice + if (refund > money) + { + money = 1; + } + else + { + money -= refund; + } + } + } + if (count < pItem->GetCount()) // need split items { Item* pNewItem = pItem->CloneItem(count, _player); @@ -828,13 +873,15 @@ void WorldSession::HandleSellItemOpcode(WorldPacket& recvData) return; } + pNewItem->SetUInt32Value(ITEM_FIELD_DURABILITY, pItem->GetUInt32Value(ITEM_FIELD_DURABILITY)); + pItem->SetCount(pItem->GetCount() - count); _player->ItemRemovedQuestCheck(pItem->GetEntry(), count); if (_player->IsInWorld()) pItem->SendUpdateToPlayer(_player); pItem->SetState(ITEM_CHANGED, _player); - _player->AddItemToBuyBackSlot(pNewItem); + _player->AddItemToBuyBackSlot(pNewItem, money); if (_player->IsInWorld()) pNewItem->SendUpdateToPlayer(_player); } @@ -843,7 +890,7 @@ void WorldSession::HandleSellItemOpcode(WorldPacket& recvData) _player->ItemRemovedQuestCheck(pItem->GetEntry(), pItem->GetCount()); _player->RemoveItem(pItem->GetBagSlot(), pItem->GetSlot(), true); pItem->RemoveFromUpdateQueueOf(_player); - _player->AddItemToBuyBackSlot(pItem); + _player->AddItemToBuyBackSlot(pItem, money); _player->UpdateTitansGrip(); } diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index c45c86b5c..6e5d25669 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -405,7 +405,7 @@ LootItem::LootItem(LootStoreItem const& li) } // Basic checks for player/item compatibility - if false no chance to see the item in the loot -bool LootItem::AllowedForPlayer(Player const* player, bool isGivenByMasterLooter /*= false*/, bool allowQuestLoot /*= true*/, ObjectGuid source) const +bool LootItem::AllowedForPlayer(Player const* player, ObjectGuid source) const { ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(itemid); if (!pProto) @@ -419,7 +419,7 @@ bool LootItem::AllowedForPlayer(Player const* player, bool isGivenByMasterLooter if (!sConditionMgr->IsObjectMeetToConditions(const_cast(player), conditions)) { // Master Looter can see conditioned recipes - if (!isGivenByMasterLooter && isMasterLooter) + if (isMasterLooter && follow_loot_rules && !is_underthreshold) { if ((pProto->Flags & ITEM_FLAG_HIDE_UNUSABLE_RECIPE) || (pProto->Class == ITEM_CLASS_RECIPE && pProto->Bonding == BIND_WHEN_PICKED_UP && pProto->Spells[1].SpellId != 0)) { @@ -442,7 +442,7 @@ bool LootItem::AllowedForPlayer(Player const* player, bool isGivenByMasterLooter } // Master looter can see all items even if the character can't loot them - if (!isGivenByMasterLooter && isMasterLooter && allowQuestLoot) + if (isMasterLooter && follow_loot_rules && !is_underthreshold) { return true; } @@ -661,26 +661,35 @@ QuestItemList* Loot::FillQuestLoot(Player* player) QuestItemList* ql = new QuestItemList(); + Player* lootOwner = (roundRobinPlayer) ? ObjectAccessor::FindPlayer(roundRobinPlayer) : player; + for (uint8 i = 0; i < quest_items.size(); ++i) { LootItem& item = quest_items[i]; - if (!item.is_looted && (item.AllowedForPlayer(player, false, false) || (item.follow_loot_rules && player->GetGroup() && ((player->GetGroup()->GetLootMethod() == MASTER_LOOT && player->GetGroup()->GetMasterLooterGuid() == player->GetGUID()) || player->GetGroup()->GetLootMethod() != MASTER_LOOT )))) + // Quest item is not free for all and is already assigned to another player + // or player doesn't need it + if (item.is_blocked || !item.AllowedForPlayer(player, sourceWorldObjectGUID)) { - ql->push_back(QuestItem(i)); - - // quest items get blocked when they first appear in a - // player's quest vector - // - // increase once if one looter only, looter-times if free for all - if (item.freeforall || !item.is_blocked) - ++unlootedCount; - if (!player->GetGroup() || (player->GetGroup()->GetLootMethod() != GROUP_LOOT && player->GetGroup()->GetLootMethod() != ROUND_ROBIN)) - item.is_blocked = true; - - if (items.size() + ql->size() == MAX_NR_LOOT_ITEMS) - break; + continue; } + + // Player is not the loot owner, and loot owner still needs this quest item + if (!item.freeforall && lootOwner != player && item.AllowedForPlayer(lootOwner, sourceWorldObjectGUID)) + { + continue; + } + + ql->push_back(QuestItem(i)); + ++unlootedCount; + + if (!item.freeforall) + { + item.is_blocked = true; + } + + if (items.size() + ql->size() == MAX_NR_LOOT_ITEMS) + break; } if (ql->empty()) { @@ -699,7 +708,8 @@ QuestItemList* Loot::FillNonQuestNonFFAConditionalLoot(Player* player) for (uint8 i = 0; i < items.size(); ++i) { LootItem& item = items[i]; - if (!item.is_looted && !item.freeforall && (item.AllowedForPlayer(player, sourceWorldObjectGUID) || (item.follow_loot_rules && player->GetGroup() && ((player->GetGroup()->GetLootMethod() == MASTER_LOOT && player->GetGroup()->GetMasterLooterGuid() == player->GetGUID()) || player->GetGroup()->GetLootMethod() != MASTER_LOOT )))) + + if (!item.is_looted && !item.freeforall && item.AllowedForPlayer(player, sourceWorldObjectGUID)) { item.AddAllowedLooter(player); diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index 74bc9d20c..b21cfcdbd 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -177,8 +177,7 @@ struct LootItem LootItem() = default; // Basic checks for player/item compatibility - if false no chance to see the item in the loot - bool AllowedForPlayer(Player const* player, bool isGivenByMasterLooter = false, bool allowQuestLoot = true, ObjectGuid source = ObjectGuid::Empty) const; - bool AllowedForPlayer(Player const* player, ObjectGuid source) { return AllowedForPlayer(player, false, true, source); }; + bool AllowedForPlayer(Player const* player, ObjectGuid source) const; void AddAllowedLooter(Player const* player); [[nodiscard]] const AllowedLooterSet& GetAllowedLooters() const { return allowedGUIDs; } }; diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index fe8075ddb..0e052633c 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -791,7 +791,7 @@ void MotionMaster::MoveRotate(uint32 time, RotateDirection direction) Mutate(new RotateMovementGenerator(time, direction), MOTION_SLOT_ACTIVE); } -void MotionMaster::propagateSpeedChange() +void MotionMaster::PropagateSpeedChange() { /*Impl::container_type::iterator it = Impl::c.begin(); for (; it != end(); ++it) @@ -801,7 +801,7 @@ void MotionMaster::propagateSpeedChange() for (int i = 0; i <= _top; ++i) { if (Impl[i]) - Impl[i]->unitSpeedChanged(); + Impl[i]->UnitSpeedChanged(); } } diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 73d8144c6..a32ac1e35 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -238,7 +238,7 @@ public: [[nodiscard]] MovementGeneratorType GetMotionSlotType(int slot) const; [[nodiscard]] uint32 GetCurrentSplineId() const; // Xinef: Escort system - void propagateSpeedChange(); + void PropagateSpeedChange(); void ReinitializeMovement(); bool GetDestination(float& x, float& y, float& z); diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h index 2f317ec48..ce7875f38 100644 --- a/src/server/game/Movement/MovementGenerator.h +++ b/src/server/game/Movement/MovementGenerator.h @@ -42,7 +42,7 @@ public: virtual uint32 GetSplineId() const { return 0; } // Xinef: Escort system - virtual void unitSpeedChanged() { } + virtual void UnitSpeedChanged() { } // timer in ms virtual void Pause(uint32 /* timer = 0*/) {} diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 2e36eb0d9..cf2379183 100644 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -54,9 +54,9 @@ void ConfusedMovementGenerator::DoInitialize(T* unit) float new_z = unit->GetMapHeight(wanderX, wanderY, z); if (new_z <= INVALID_HEIGHT || std::fabs(z - new_z) > 3.0f) // pussywizard { - i_waypoints[idx][0] = idx > 0 ? i_waypoints[idx - 1][0] : x; - i_waypoints[idx][1] = idx > 0 ? i_waypoints[idx - 1][1] : y; - i_waypoints[idx][2] = idx > 0 ? i_waypoints[idx - 1][2] : z; + _waypoints[idx][0] = idx > 0 ? _waypoints[idx - 1][0] : x; + _waypoints[idx][1] = idx > 0 ? _waypoints[idx - 1][1] : y; + _waypoints[idx][2] = idx > 0 ? _waypoints[idx - 1][2] : z; continue; } else if (unit->IsWithinLOS(wanderX, wanderY, z)) @@ -66,32 +66,32 @@ void ConfusedMovementGenerator::DoInitialize(T* unit) if ((is_water && !is_water_ok) || (!is_water && !is_land_ok)) { //! Cannot use coordinates outside our InhabitType. Use the current or previous position. - i_waypoints[idx][0] = idx > 0 ? i_waypoints[idx - 1][0] : x; - i_waypoints[idx][1] = idx > 0 ? i_waypoints[idx - 1][1] : y; - i_waypoints[idx][2] = idx > 0 ? i_waypoints[idx - 1][2] : z; + _waypoints[idx][0] = idx > 0 ? _waypoints[idx - 1][0] : x; + _waypoints[idx][1] = idx > 0 ? _waypoints[idx - 1][1] : y; + _waypoints[idx][2] = idx > 0 ? _waypoints[idx - 1][2] : z; continue; } } else { //! Trying to access path outside line of sight. Skip this by using the current or previous position. - i_waypoints[idx][0] = idx > 0 ? i_waypoints[idx - 1][0] : x; - i_waypoints[idx][1] = idx > 0 ? i_waypoints[idx - 1][1] : y; - i_waypoints[idx][2] = idx > 0 ? i_waypoints[idx - 1][2] : z; + _waypoints[idx][0] = idx > 0 ? _waypoints[idx - 1][0] : x; + _waypoints[idx][1] = idx > 0 ? _waypoints[idx - 1][1] : y; + _waypoints[idx][2] = idx > 0 ? _waypoints[idx - 1][2] : z; continue; } //unit->UpdateAllowedPositionZ(wanderX, wanderY, z); //! Positions are fine - apply them to this waypoint - i_waypoints[idx][0] = wanderX; - i_waypoints[idx][1] = wanderY; - i_waypoints[idx][2] = new_z; + _waypoints[idx][0] = wanderX; + _waypoints[idx][1] = wanderY; + _waypoints[idx][2] = new_z; } // Xinef: Call movement immediately to broadcast movement packet // Xinef: Initial timer is set to 1 so update with 1 - i_nextMove = urand(1, MAX_CONF_WAYPOINTS); + _nextMove = urand(1, MAX_CONF_WAYPOINTS); DoUpdate(unit, 1); unit->SetUnitFlag(UNIT_FLAG_CONFUSED); @@ -127,30 +127,30 @@ bool ConfusedMovementGenerator::DoUpdate(T* unit, uint32 diff) return true; } - if (i_nextMoveTime.Passed()) + if (_nextMoveTime.Passed()) { // currently moving, update location unit->AddUnitState(UNIT_STATE_CONFUSED_MOVE); if (unit->movespline->Finalized()) { - i_nextMove = urand(1, MAX_CONF_WAYPOINTS); - i_nextMoveTime.Reset(urand(600, 1200)); // Guessed + _nextMove = urand(1, MAX_CONF_WAYPOINTS); + _nextMoveTime.Reset(urand(600, 1200)); // Guessed } } else { // waiting for next move - i_nextMoveTime.Update(diff); - if (i_nextMoveTime.Passed()) + _nextMoveTime.Update(diff); + if (_nextMoveTime.Passed()) { // start moving unit->AddUnitState(UNIT_STATE_CONFUSED_MOVE); - ASSERT(i_nextMove <= MAX_CONF_WAYPOINTS); - float x = i_waypoints[i_nextMove][0]; - float y = i_waypoints[i_nextMove][1]; - float z = i_waypoints[i_nextMove][2]; + ASSERT(_nextMove <= MAX_CONF_WAYPOINTS); + float x = _waypoints[_nextMove][0]; + float y = _waypoints[_nextMove][1]; + float z = _waypoints[_nextMove][2]; Movement::MoveSplineInit init(unit); init.MoveTo(x, y, z, true); init.Launch(); diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h index 73038a138..ddc499757 100644 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h @@ -27,7 +27,7 @@ template class ConfusedMovementGenerator : public MovementGeneratorMedium< T, ConfusedMovementGenerator > { public: - explicit ConfusedMovementGenerator() : i_nextMoveTime(1) {} + explicit ConfusedMovementGenerator() : _nextMoveTime(1) {} void DoInitialize(T*); void DoFinalize(T*); @@ -37,8 +37,8 @@ public: MovementGeneratorType GetMovementGeneratorType() { return CONFUSED_MOTION_TYPE; } private: void _InitSpecific(T*, bool&, bool&); - TimeTracker i_nextMoveTime; - float i_waypoints[MAX_CONF_WAYPOINTS + 1][3]; - uint32 i_nextMove; + TimeTracker _nextMoveTime; + float _waypoints[MAX_CONF_WAYPOINTS + 1][3]; + uint32 _nextMove; }; #endif diff --git a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp index 2f85ced8c..350bf93b0 100644 --- a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp @@ -22,6 +22,7 @@ #include "MoveSpline.h" #include "MoveSplineInit.h" #include "Player.h" +#include "Unit.h" #include "World.h" template @@ -31,13 +32,13 @@ void EscortMovementGenerator::DoInitialize(T* unit) unit->StopMoving(); unit->AddUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); - i_recalculateSpeed = false; + _recalculateSpeed = false; Movement::MoveSplineInit init(unit); - if (m_precomputedPath.size() == 2) // xinef: simple case, just call move to - init.MoveTo(m_precomputedPath[1].x, m_precomputedPath[1].y, m_precomputedPath[1].z, true); - else if (m_precomputedPath.size()) - init.MovebyPath(m_precomputedPath); + if (_precomputedPath.size() == 2) // xinef: simple case, just call move to + init.MoveTo(_precomputedPath[1].x, _precomputedPath[1].y, _precomputedPath[1].z, true); + else if (_precomputedPath.size()) + init.MovebyPath(_precomputedPath); init.Launch(); @@ -60,26 +61,26 @@ bool EscortMovementGenerator::DoUpdate(T* unit, uint32 /*diff*/) bool arrived = unit->movespline->Finalized(); - if (i_recalculateSpeed && !arrived) + if (_recalculateSpeed && !arrived) { - i_recalculateSpeed = false; + _recalculateSpeed = false; Movement::MoveSplineInit init(unit); // xinef: speed changed during path execution, calculate remaining path and launch it once more - if (m_precomputedPath.size()) + if (_precomputedPath.size()) { - uint32 offset = std::min(uint32(unit->movespline->_currentSplineIdx()), uint32(m_precomputedPath.size())); - Movement::PointsArray::iterator offsetItr = m_precomputedPath.begin(); + uint32 offset = std::min(uint32(unit->movespline->_currentSplineIdx()), uint32(_precomputedPath.size())); + Movement::PointsArray::iterator offsetItr = _precomputedPath.begin(); std::advance(offsetItr, offset); - m_precomputedPath.erase(m_precomputedPath.begin(), offsetItr); + _precomputedPath.erase(_precomputedPath.begin(), offsetItr); // restore 0 element (current position) - m_precomputedPath.insert(m_precomputedPath.begin(), G3D::Vector3(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ())); + _precomputedPath.insert(_precomputedPath.begin(), G3D::Vector3(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ())); - if (m_precomputedPath.size() > 2) - init.MovebyPath(m_precomputedPath); - else if (m_precomputedPath.size() == 2) - init.MoveTo(m_precomputedPath[1].x, m_precomputedPath[1].y, m_precomputedPath[1].z, true); + if (_precomputedPath.size() > 2) + init.MovebyPath(_precomputedPath); + else if (_precomputedPath.size() == 2) + init.MoveTo(_precomputedPath[1].x, _precomputedPath[1].y, _precomputedPath[1].z, true); } init.Launch(); diff --git a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h index edb410b8a..802ec48eb 100644 --- a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h @@ -24,10 +24,10 @@ template class EscortMovementGenerator : public MovementGeneratorMedium< T, EscortMovementGenerator > { public: - EscortMovementGenerator(Movement::PointsArray* _path = nullptr) : i_recalculateSpeed(false) + EscortMovementGenerator(Movement::PointsArray* _path = nullptr) : _recalculateSpeed(false) { if (_path) - m_precomputedPath = *_path; + _precomputedPath = *_path; } void DoInitialize(T*); @@ -35,15 +35,15 @@ public: void DoReset(T*); bool DoUpdate(T*, uint32); - void unitSpeedChanged() { i_recalculateSpeed = true; } + void unitSpeedChanged() { _recalculateSpeed = true; } MovementGeneratorType GetMovementGeneratorType() { return ESCORT_MOTION_TYPE; } uint32 GetSplineId() const { return _splineId; } private: - bool i_recalculateSpeed; - Movement::PointsArray m_precomputedPath; + bool _recalculateSpeed; + Movement::PointsArray _precomputedPath; uint32 _splineId; }; diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index 818342744..4c29493be 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -30,7 +30,7 @@ void HomeMovementGenerator::DoInitialize(Creature* owner) void HomeMovementGenerator::DoFinalize(Creature* owner) { owner->ClearUnitState(UNIT_STATE_EVADE); - if (arrived) + if (_arrived) { // Xinef: npc run by default //owner->SetWalk(true); @@ -68,15 +68,15 @@ void HomeMovementGenerator::_setTargetLocation(Creature* owner) init.SetWalk(false); init.Launch(); - arrived = false; + _arrived = false; owner->ClearUnitState(uint32(UNIT_STATE_ALL_STATE & ~(UNIT_STATE_POSSESSED | UNIT_STATE_EVADE | UNIT_STATE_IGNORE_PATHFINDING | UNIT_STATE_NO_ENVIRONMENT_UPD))); } bool HomeMovementGenerator::DoUpdate(Creature* owner, const uint32 /*time_diff*/) { - arrived = owner->movespline->Finalized(); - if (arrived) + _arrived = owner->movespline->Finalized(); + if (_arrived) return false; if (i_recalculateTravel) diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h index 1b4395d36..c97252d25 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h @@ -29,7 +29,7 @@ template <> class HomeMovementGenerator : public MovementGeneratorMedium< Creature, HomeMovementGenerator > { public: - HomeMovementGenerator() : arrived(false), i_recalculateTravel(false) {} + HomeMovementGenerator() : _arrived(false), i_recalculateTravel(false) {} ~HomeMovementGenerator() {} void DoInitialize(Creature*); @@ -41,7 +41,7 @@ public: private: void _setTargetLocation(Creature*); - bool arrived : 1; + bool _arrived : 1; bool i_recalculateTravel : 1; }; #endif diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp index 5f64daef3..1b4250632 100644 --- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp @@ -99,10 +99,10 @@ void DistractMovementGenerator::Finalize(Unit* owner) bool DistractMovementGenerator::Update(Unit* owner, uint32 time_diff) { - if (owner->IsInCombat() || time_diff > m_timer) + if (owner->IsInCombat() || time_diff > _timer) return false; - m_timer -= time_diff; + _timer -= time_diff; return true; } diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h index 293862bdd..fd9275e1c 100644 --- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h @@ -49,7 +49,7 @@ private: class DistractMovementGenerator : public MovementGenerator { public: - explicit DistractMovementGenerator(uint32 timer) : m_timer(timer) {} + explicit DistractMovementGenerator(uint32 timer) : _timer(timer) {} void Initialize(Unit*) override; void Finalize(Unit*) override; @@ -58,7 +58,7 @@ public: MovementGeneratorType GetMovementGeneratorType() override { return DISTRACT_MOTION_TYPE; } private: - uint32 m_timer; + uint32 _timer; }; class AssistanceDistractMovementGenerator : public DistractMovementGenerator diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index 5e06523fa..36f6cbeb8 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -33,7 +33,7 @@ void PointMovementGenerator::DoInitialize(T* unit) { // the next line is to ensure that a new spline is created in DoUpdate() once the unit is no longer rooted/stunned // todo: rename this flag to something more appropriate since it is set to true even without speed change now. - i_recalculateSpeed = true; + _recalculateSpeed = true; return; } @@ -46,48 +46,48 @@ void PointMovementGenerator::DoInitialize(T* unit) unit->AddUnitState(UNIT_STATE_CHARGING); } - i_recalculateSpeed = false; + _recalculateSpeed = false; Movement::MoveSplineInit init(unit); - if (m_precomputedPath.size() > 2) // pussywizard: for charge - init.MovebyPath(m_precomputedPath); + if (_precomputedPath.size() > 2) // pussywizard: for charge + init.MovebyPath(_precomputedPath); else if (_generatePath) { PathGenerator path(unit); - bool result = path.CalculatePath(i_x, i_y, i_z, _forceDestination); + bool result = path.CalculatePath(_x, _y, _z, _forceDestination); if (result && !(path.GetPathType() & PATHFIND_NOPATH) && path.GetPath().size() > 2) { - m_precomputedPath = path.GetPath(); - init.MovebyPath(m_precomputedPath); + _precomputedPath = path.GetPath(); + init.MovebyPath(_precomputedPath); } else { // Xinef: fix strange client visual bug, moving on z coordinate only switches orientation by 180 degrees (visual only) - if (G3D::fuzzyEq(unit->GetPositionX(), i_x) && G3D::fuzzyEq(unit->GetPositionY(), i_y)) + if (G3D::fuzzyEq(unit->GetPositionX(), _x) && G3D::fuzzyEq(unit->GetPositionY(), _y)) { - i_x += 0.2f * cos(unit->GetOrientation()); - i_y += 0.2f * std::sin(unit->GetOrientation()); + _x += 0.2f * cos(unit->GetOrientation()); + _y += 0.2f * std::sin(unit->GetOrientation()); } - init.MoveTo(i_x, i_y, i_z, true); + init.MoveTo(_x, _y, _z, true); } } else { // Xinef: fix strange client visual bug, moving on z coordinate only switches orientation by 180 degrees (visual only) - if (G3D::fuzzyEq(unit->GetPositionX(), i_x) && G3D::fuzzyEq(unit->GetPositionY(), i_y)) + if (G3D::fuzzyEq(unit->GetPositionX(), _x) && G3D::fuzzyEq(unit->GetPositionY(), _y)) { - i_x += 0.2f * cos(unit->GetOrientation()); - i_y += 0.2f * std::sin(unit->GetOrientation()); + _x += 0.2f * cos(unit->GetOrientation()); + _y += 0.2f * std::sin(unit->GetOrientation()); } - init.MoveTo(i_x, i_y, i_z, true); + init.MoveTo(_x, _y, _z, true); } if (speed > 0.0f) init.SetVelocity(speed); - if (i_orientation > 0.0f) + if (_orientation > 0.0f) { - init.SetFacing(i_orientation); + init.SetFacing(_orientation); } init.Launch(); @@ -117,35 +117,35 @@ bool PointMovementGenerator::DoUpdate(T* unit, uint32 /*diff*/) unit->AddUnitState(UNIT_STATE_ROAMING_MOVE); - if (id != EVENT_CHARGE_PREPATH && i_recalculateSpeed && !unit->movespline->Finalized()) + if (id != EVENT_CHARGE_PREPATH && _recalculateSpeed && !unit->movespline->Finalized()) { - i_recalculateSpeed = false; + _recalculateSpeed = false; Movement::MoveSplineInit init(unit); // xinef: speed changed during path execution, calculate remaining path and launch it once more - if (m_precomputedPath.size()) + if (_precomputedPath.size()) { - uint32 offset = std::min(uint32(unit->movespline->_currentSplineIdx()), uint32(m_precomputedPath.size())); - Movement::PointsArray::iterator offsetItr = m_precomputedPath.begin(); + uint32 offset = std::min(uint32(unit->movespline->_currentSplineIdx()), uint32(_precomputedPath.size())); + Movement::PointsArray::iterator offsetItr = _precomputedPath.begin(); std::advance(offsetItr, offset); - m_precomputedPath.erase(m_precomputedPath.begin(), offsetItr); + _precomputedPath.erase(_precomputedPath.begin(), offsetItr); // restore 0 element (current position) - m_precomputedPath.insert(m_precomputedPath.begin(), G3D::Vector3(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ())); + _precomputedPath.insert(_precomputedPath.begin(), G3D::Vector3(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ())); - if (m_precomputedPath.size() > 2) - init.MovebyPath(m_precomputedPath); - else if (m_precomputedPath.size() == 2) - init.MoveTo(m_precomputedPath[1].x, m_precomputedPath[1].y, m_precomputedPath[1].z, true); + if (_precomputedPath.size() > 2) + init.MovebyPath(_precomputedPath); + else if (_precomputedPath.size() == 2) + init.MoveTo(_precomputedPath[1].x, _precomputedPath[1].y, _precomputedPath[1].z, true); } else - init.MoveTo(i_x, i_y, i_z, true); + init.MoveTo(_x, _y, _z, true); if (speed > 0.0f) // Default value for point motion type is 0.0, if 0.0 spline will use GetSpeed on unit init.SetVelocity(speed); - if (i_orientation > 0.0f) + if (_orientation > 0.0f) { - init.SetFacing(i_orientation); + init.SetFacing(_orientation); } init.Launch(); @@ -247,5 +247,5 @@ void EffectMovementGenerator::Finalize(Unit* unit) //} if (unit->ToCreature()->AI()) - unit->ToCreature()->AI()->MovementInform(EFFECT_MOTION_TYPE, m_Id); + unit->ToCreature()->AI()->MovementInform(EFFECT_MOTION_TYPE, _Id); } diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h index fdff98725..21dcc3250 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h @@ -27,11 +27,11 @@ class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementG public: PointMovementGenerator(uint32 _id, float _x, float _y, float _z, float _speed = 0.0f, float orientation = 0.0f, const Movement::PointsArray* _path = nullptr, bool generatePath = false, bool forceDestination = false, ObjectGuid chargeTargetGUID = ObjectGuid::Empty) - : id(_id), i_x(_x), i_y(_y), i_z(_z), speed(_speed), i_orientation(orientation), _generatePath(generatePath), _forceDestination(forceDestination), + : id(_id), _x(_x), _y(_y), _z(_z), speed(_speed), _orientation(orientation), _generatePath(generatePath), _forceDestination(forceDestination), _chargeTargetGUID(chargeTargetGUID) { if (_path) - m_precomputedPath = *_path; + _precomputedPath = *_path; } void DoInitialize(T*); @@ -41,18 +41,18 @@ public: void MovementInform(T*); - void unitSpeedChanged() { i_recalculateSpeed = true; } + void unitSpeedChanged() { _recalculateSpeed = true; } MovementGeneratorType GetMovementGeneratorType() { return POINT_MOTION_TYPE; } - bool GetDestination(float& x, float& y, float& z) const { x = i_x; y = i_y; z = i_z; return true; } + bool GetDestination(float& x, float& y, float& z) const { x = _x; y = _y; z = _z; return true; } private: uint32 id; - float i_x, i_y, i_z; + float _x, _y, _z; float speed; - float i_orientation; - bool i_recalculateSpeed; - Movement::PointsArray m_precomputedPath; + float _orientation; + bool _recalculateSpeed; + Movement::PointsArray _precomputedPath; bool _generatePath; bool _forceDestination; ObjectGuid _chargeTargetGUID; @@ -72,14 +72,14 @@ public: class EffectMovementGenerator : public MovementGenerator { public: - explicit EffectMovementGenerator(uint32 Id) : m_Id(Id) {} + explicit EffectMovementGenerator(uint32 Id) : _Id(Id) {} void Initialize(Unit*) override {} void Finalize(Unit*) override; void Reset(Unit*) override {} bool Update(Unit*, uint32) override; MovementGeneratorType GetMovementGeneratorType() override { return EFFECT_MOTION_TYPE; } private: - uint32 m_Id; + uint32 _Id; }; #endif diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp index 73ee0b5c3..b5f21d977 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp @@ -36,7 +36,7 @@ RandomMovementGenerator::~RandomMovementGenerator() } template<> -void RandomMovementGenerator::_setRandomLocation(Creature* creature) +void RandomMovementGenerator::SetRandomLocation(Creature* creature) { if (creature->_moveState != MAP_OBJECT_CELL_MOVE_NONE) return; @@ -292,7 +292,7 @@ bool RandomMovementGenerator::DoUpdate(Creature* creature, const uint3 { _nextMoveTime.Update(diff); if (_nextMoveTime.Passed()) - _setRandomLocation(creature); + SetRandomLocation(creature); } return true; } diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h index 221aa81c1..3d976e5fd 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h @@ -49,7 +49,7 @@ public: } ~RandomMovementGenerator(); - void _setRandomLocation(T*); + void SetRandomLocation(T*); void DoInitialize(T*); void DoFinalize(T*); void DoReset(T*); diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index bd57f449f..c755f2a7b 100644 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -75,22 +75,22 @@ void WaypointMovementGenerator::OnArrived(Creature* creature) creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE); m_isArrivalDone = true; - if (i_path->at(i_currentNode)->event_id && urand(0, 99) < i_path->at(i_currentNode)->event_chance) + if (i_path->at(_currentNode)->event_id && urand(0, 99) < i_path->at(_currentNode)->event_chance) { LOG_DEBUG("maps.script", "Creature movement start script {} at point {} for {}.", - i_path->at(i_currentNode)->event_id, i_currentNode, creature->GetGUID().ToString()); + i_path->at(_currentNode)->event_id, _currentNode, creature->GetGUID().ToString()); creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE); - creature->GetMap()->ScriptsStart(sWaypointScripts, i_path->at(i_currentNode)->event_id, creature, nullptr); + creature->GetMap()->ScriptsStart(sWaypointScripts, i_path->at(_currentNode)->event_id, creature, nullptr); } // Inform script MovementInform(creature); - creature->UpdateWaypointID(i_currentNode); + creature->UpdateWaypointID(_currentNode); - if (i_path->at(i_currentNode)->delay) + if (i_path->at(_currentNode)->delay) { creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE); - Stop(i_path->at(i_currentNode)->delay); + Stop(i_path->at(_currentNode)->delay); } } @@ -111,11 +111,11 @@ bool WaypointMovementGenerator::StartMove(Creature* creature) if (m_isArrivalDone) { // Xinef: not true... update this at every waypoint! - //if ((i_currentNode == i_path->size() - 1) && !repeating) // If that's our last waypoint + //if ((_currentNode == i_path->size() - 1) && !repeating) // If that's our last waypoint { - float x = i_path->at(i_currentNode)->x; - float y = i_path->at(i_currentNode)->y; - float z = i_path->at(i_currentNode)->z; + float x = i_path->at(_currentNode)->x; + float y = i_path->at(_currentNode)->y; + float z = i_path->at(_currentNode)->z; float o = creature->GetOrientation(); if (!transportPath) @@ -136,14 +136,14 @@ bool WaypointMovementGenerator::StartMove(Creature* creature) } // Xinef: moved the upper IF here - if ((i_currentNode == i_path->size() - 1) && !repeating) // If that's our last waypoint + if ((_currentNode == i_path->size() - 1) && !repeating) // If that's our last waypoint { creature->AI()->PathEndReached(path_id); creature->GetMotionMaster()->Initialize(); return false; } - i_currentNode = (i_currentNode + 1) % i_path->size(); + _currentNode = (_currentNode + 1) % i_path->size(); } // xinef: do not initialize motion if we got stunned in movementinform @@ -152,7 +152,7 @@ bool WaypointMovementGenerator::StartMove(Creature* creature) return true; } - WaypointData const* node = i_path->at(i_currentNode); + WaypointData const* node = i_path->at(_currentNode); m_isArrivalDone = false; @@ -238,7 +238,7 @@ bool WaypointMovementGenerator::DoUpdate(Creature* creature, uint32 di bool finished = creature->movespline->Finalized(); // xinef: code to detect pre-empetively if we should start movement to next waypoint // xinef: do not start pre-empetive movement if current node has delay or we are ending waypoint movement - //if (!finished && !i_path->at(i_currentNode)->delay && ((i_currentNode != i_path->size() - 1) || repeating)) + //if (!finished && !i_path->at(_currentNode)->delay && ((_currentNode != i_path->size() - 1) || repeating)) // finished = (creature->movespline->_Spline().length(creature->movespline->_currentSplineIdx() + 1) - creature->movespline->timePassed()) < 200; if (finished) @@ -254,13 +254,13 @@ bool WaypointMovementGenerator::DoUpdate(Creature* creature, uint32 di void WaypointMovementGenerator::MovementInform(Creature* creature) { if (creature->AI()) - creature->AI()->MovementInform(WAYPOINT_MOTION_TYPE, i_currentNode); + creature->AI()->MovementInform(WAYPOINT_MOTION_TYPE, _currentNode); if (Unit* owner = creature->GetCharmerOrOwner()) { if (UnitAI* AI = owner->GetAI()) { - AI->SummonMovementInform(creature, WAYPOINT_MOTION_TYPE, i_currentNode); + AI->SummonMovementInform(creature, WAYPOINT_MOTION_TYPE, _currentNode); } } } @@ -269,13 +269,13 @@ void WaypointMovementGenerator::MovementInform(Creature* creature) uint32 FlightPathMovementGenerator::GetPathAtMapEnd() const { - if (i_currentNode >= i_path.size()) + if (_currentNode >= i_path.size()) { return i_path.size(); } - uint32 curMapId = i_path[i_currentNode]->mapid; - for (uint32 i = i_currentNode; i < i_path.size(); ++i) + uint32 curMapId = i_path[_currentNode]->mapid; + for (uint32 i = _currentNode; i < i_path.size(); ++i) { if (i_path[i]->mapid != curMapId) { @@ -401,15 +401,15 @@ bool FlightPathMovementGenerator::DoUpdate(Player* player, uint32 /*diff*/) { // skipping the first spline path point because it's our starting point and not a taxi path point uint32 pointId = player->movespline->currentPathIdx() <= 0 ? 0 : player->movespline->currentPathIdx() - 1; - if (pointId > i_currentNode && i_currentNode < i_path.size() - 1) + if (pointId > _currentNode && _currentNode < i_path.size() - 1) { bool departureEvent = true; do { - ASSERT(i_currentNode < i_path.size(), "Point Id: {}\n{}", pointId, player->GetGUID().ToString().c_str()); + ASSERT(_currentNode < i_path.size(), "Point Id: {}\n{}", pointId, player->GetGUID().ToString().c_str()); - DoEventIfAny(player, i_path[i_currentNode], departureEvent); - while (!_pointsForPathSwitch.empty() && _pointsForPathSwitch.front().PathIndex <= i_currentNode) + DoEventIfAny(player, i_path[_currentNode], departureEvent); + while (!_pointsForPathSwitch.empty() && _pointsForPathSwitch.front().PathIndex <= _currentNode) { _pointsForPathSwitch.pop_front(); player->m_taxi.NextTaxiDestination(); @@ -420,37 +420,37 @@ bool FlightPathMovementGenerator::DoUpdate(Player* player, uint32 /*diff*/) } } - if (pointId == i_currentNode) + if (pointId == _currentNode) { break; } - if (i_currentNode == _preloadTargetNode) + if (_currentNode == _preloadTargetNode) { PreloadEndGrid(); } - i_currentNode += departureEvent ? 1 : 0; + _currentNode += departureEvent ? 1 : 0; departureEvent = !departureEvent; - } while (i_currentNode < i_path.size() - 1); + } while (_currentNode < i_path.size() - 1); } - return i_currentNode < (i_path.size() - 1); + return _currentNode < (i_path.size() - 1); } void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport() { - if (i_path.empty() || i_currentNode >= i_path.size()) + if (i_path.empty() || _currentNode >= i_path.size()) { return; } - uint32 map0 = i_path[i_currentNode]->mapid; - for (size_t i = i_currentNode + 1; i < i_path.size(); ++i) + uint32 map0 = i_path[_currentNode]->mapid; + for (size_t i = _currentNode + 1; i < i_path.size(); ++i) { if (i_path[i]->mapid != map0) { - i_currentNode = i; + _currentNode = i; return; } } @@ -467,7 +467,7 @@ void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry bool FlightPathMovementGenerator::GetResetPos(Player*, float& x, float& y, float& z) { - TaxiPathNodeEntry const* node = i_path[i_currentNode]; + TaxiPathNodeEntry const* node = i_path[_currentNode]; x = node->x; y = node->y; z = node->z; diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h index 1699a71a6..0407310ee 100644 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h @@ -35,15 +35,15 @@ template class PathMovementBase { public: - PathMovementBase() : i_path(), i_currentNode(0) {} - PathMovementBase(P path) : i_path(path), i_currentNode(0) {} + PathMovementBase() : i_path(), _currentNode(0) {} + PathMovementBase(P path) : i_path(path), _currentNode(0) {} virtual ~PathMovementBase() {}; - uint32 GetCurrentNode() const { return i_currentNode; } + uint32 GetCurrentNode() const { return _currentNode; } protected: P i_path; - uint32 i_currentNode; + uint32 _currentNode; }; template @@ -104,7 +104,7 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig public: explicit FlightPathMovementGenerator(uint32 startNode = 0) { - i_currentNode = startNode; + _currentNode = startNode; _endGridX = 0.0f; _endGridY = 0.0f; _endMapId = 0; @@ -119,9 +119,9 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig TaxiPathNodeList const& GetPath() { return i_path; } uint32 GetPathAtMapEnd() const; - bool HasArrived() const { return (i_currentNode >= i_path.size()); } + bool HasArrived() const { return (_currentNode >= i_path.size()); } void SetCurrentNodeAfterTeleport(); - void SkipCurrentNode() { ++i_currentNode; } + void SkipCurrentNode() { ++_currentNode; } void DoEventIfAny(Player* player, TaxiPathNodeEntry const* node, bool departure); bool GetResetPos(Player*, float& x, float& y, float& z); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 4da60914f..353a4b1a8 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -863,13 +863,6 @@ void WorldSession::SendAuthWaitQueue(uint32 position) } } -void WorldSession::LoadGlobalAccountData() -{ - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_DATA); - stmt->SetData(0, GetAccountId()); - LoadAccountData(CharacterDatabase.Query(stmt), GLOBAL_CACHE_MASK); -} - void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask) { for (uint32 i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i) @@ -942,15 +935,17 @@ void WorldSession::SendAccountDataTimes(uint32 mask) SendPacket(&data); } -void WorldSession::LoadTutorialsData() +void WorldSession::LoadTutorialsData(PreparedQueryResult result) { memset(m_Tutorials, 0, sizeof(uint32) * MAX_ACCOUNT_TUTORIAL_VALUES); - CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_TUTORIALS); - stmt->SetData(0, GetAccountId()); - if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) + if (result) + { for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i) + { m_Tutorials[i] = (*result)[i].Get(); + } + } m_TutorialsChanged = false; } @@ -1275,8 +1270,8 @@ void WorldSession::SendAddonsInfo() for (AddonMgr::BannedAddonList::const_iterator itr = bannedAddons->begin(); itr != bannedAddons->end(); ++itr) { data << uint32(itr->Id); - data.append(itr->NameMD5, sizeof(itr->NameMD5)); - data.append(itr->VersionMD5, sizeof(itr->VersionMD5)); + data.append(itr->NameMD5); + data.append(itr->VersionMD5); data << uint32(itr->Timestamp); data << uint32(1); // IsBanned } @@ -1649,6 +1644,75 @@ void WorldSession::SendTimeSync() _timeSyncNextCounter++; } +class AccountInfoQueryHolderPerRealm : public CharacterDatabaseQueryHolder +{ +public: + enum + { + GLOBAL_ACCOUNT_DATA = 0, + TUTORIALS, + + MAX_QUERIES + }; + + AccountInfoQueryHolderPerRealm() { SetSize(MAX_QUERIES); } + + bool Initialize(uint32 accountId) + { + bool ok = true; + + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_DATA); + stmt->SetData(0, accountId); + ok = SetPreparedQuery(GLOBAL_ACCOUNT_DATA, stmt) && ok; + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_TUTORIALS); + stmt->SetData(0, accountId); + ok = SetPreparedQuery(TUTORIALS, stmt) && ok; + + return ok; + } +}; + +void WorldSession::InitializeSession() +{ + uint32 cacheVersion = sWorld->getIntConfig(CONFIG_CLIENTCACHE_VERSION); + sScriptMgr->OnBeforeFinalizePlayerWorldSession(cacheVersion); + + std::shared_ptr realmHolder = std::make_shared(); + if (!realmHolder->Initialize(GetAccountId())) + { + SendAuthResponse(AUTH_SYSTEM_ERROR, false); + return; + } + + AddQueryHolderCallback(CharacterDatabase.DelayQueryHolder(realmHolder)).AfterComplete([this, cacheVersion](SQLQueryHolderBase const& holder) + { + InitializeSessionCallback(static_cast(holder), cacheVersion); + }); +} + +void WorldSession::InitializeSessionCallback(CharacterDatabaseQueryHolder const& realmHolder, uint32 clientCacheVersion) +{ + LoadAccountData(realmHolder.GetPreparedResult(AccountInfoQueryHolderPerRealm::GLOBAL_ACCOUNT_DATA), GLOBAL_CACHE_MASK); + LoadTutorialsData(realmHolder.GetPreparedResult(AccountInfoQueryHolderPerRealm::TUTORIALS)); + + if (!m_inQueue) + { + SendAuthResponse(AUTH_OK, true); + } + else + { + SendAuthWaitQueue(0); + } + + SetInQueue(false); + ResetTimeOutTime(false); + + SendAddonsInfo(); + SendClientCacheVersion(clientCacheVersion); + SendTutorialsData(); +} + LockedQueue& WorldSession::GetPacketQueue() { return _recvQueue; diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index c1d92a2bb..d140c22d4 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -467,10 +467,9 @@ public: AccountData* GetAccountData(AccountDataType type) { return &m_accountData[type]; } void SetAccountData(AccountDataType type, time_t tm, std::string const& data); void SendAccountDataTimes(uint32 mask); - void LoadGlobalAccountData(); void LoadAccountData(PreparedQueryResult result, uint32 mask); - void LoadTutorialsData(); + void LoadTutorialsData(PreparedQueryResult result); void SendTutorialsData(); void SaveTutorialsData(CharacterDatabaseTransaction trans); uint32 GetTutorialInt(uint8 index) const { return m_Tutorials[index]; } @@ -1100,6 +1099,9 @@ public: // opcodes handlers TransactionCallback& AddTransactionCallback(TransactionCallback&& callback); SQLQueryHolderCallback& AddQueryHolderCallback(SQLQueryHolderCallback&& callback); + void InitializeSession(); + void InitializeSessionCallback(CharacterDatabaseQueryHolder const& realmHolder, uint32 clientCacheVersion); + LockedQueue& GetPacketQueue(); [[nodiscard]] bool IsBot() const diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 120392a85..d62f556e7 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -4430,9 +4430,22 @@ void SpellMgr::LoadSpellInfoCorrections() // Digestive Acid (Temporary) ApplySpellFix({ 26476 }, [](SpellInfo* spellInfo) { - spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES; - spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT; - spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT; + spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES; + spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT; + spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT; + }); + + // Drums of War/Battle/Speed/Restoration + ApplySpellFix({ 35475, 35476, 35477, 35478 }, [](SpellInfo* spellInfo) + { + spellInfo->ExcludeTargetAuraSpell = 51120; + }); + + // Slap! + ApplySpellFix({ 6754 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx |= SPELL_ATTR1_NO_THREAT; + spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPRESS_TARGET_PROCS; }); for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) diff --git a/src/server/game/Warden/Modules/WardenModuleMac.h b/src/server/game/Warden/Modules/WardenModuleMac.h index 5285392ef..90ec6651d 100644 --- a/src/server/game/Warden/Modules/WardenModuleMac.h +++ b/src/server/game/Warden/Modules/WardenModuleMac.h @@ -18,7 +18,9 @@ #ifndef _WARDEN_MODULE_MAC_H #define _WARDEN_MODULE_MAC_H -uint8 Module_0DBBF209A27B1E279A9FEC5C168A15F7_Data[9318] = +#include + +std::array Module_0DBBF209A27B1E279A9FEC5C168A15F7_Data = { 0x07, 0x0C, 0x44, 0xCD, 0xC9, 0xFB, 0x99, 0xBC, 0x7C, 0x77, 0xDC, 0xE8, 0x8D, 0x07, 0xBE, 0x55, 0x37, 0x5C, 0x84, 0x10, 0x23, 0xE1, 0x36, 0x5B, 0xF1, 0xBC, 0x60, 0xF3, 0x68, 0xBA, 0x60, 0x69, @@ -605,7 +607,7 @@ uint8 Module_0DBBF209A27B1E279A9FEC5C168A15F7_Data[9318] = 0x43, 0x82, 0xAA, 0x0C, 0xEE, 0x1B }; -uint8 Module_0DBBF209A27B1E279A9FEC5C168A15F7_Key[16] = +std::array Module_0DBBF209A27B1E279A9FEC5C168A15F7_Key = { 0x5B, 0x27, 0x27, 0x01, 0x24, 0x56, 0xB4, 0xD4, 0x2D, 0xD0, 0x96, 0x77, 0x49, 0x51, 0xDC, 0x0A }; diff --git a/src/server/game/Warden/Warden.cpp b/src/server/game/Warden/Warden.cpp index 919b7af22..8b53a43dd 100644 --- a/src/server/game/Warden/Warden.cpp +++ b/src/server/game/Warden/Warden.cpp @@ -19,7 +19,7 @@ #include "AccountMgr.h" #include "BanMgr.h" #include "ByteBuffer.h" -#include "Common.h" +#include "CryptoHash.h" #include "Log.h" #include "Opcodes.h" #include "Player.h" @@ -28,7 +28,6 @@ #include "World.h" #include "WorldPacket.h" #include "WorldSession.h" -#include Warden::Warden() : _session(nullptr), _checkTimer(10000/*10 sec*/), _clientResponseTimer(0), _dataSent(false), _module(nullptr), _initialized(false) @@ -77,11 +76,11 @@ void Warden::RequestModule() LOG_DEBUG("warden", "Request module"); // Create packet structure - WardenModuleUse request; + WardenModuleUse request{}; request.Command = WARDEN_SMSG_MODULE_USE; - memcpy(request.ModuleId, _module->Id, 16); - memcpy(request.ModuleKey, _module->Key, 16); + memcpy(request.ModuleId, _module->Id.data(), 16); + memcpy(request.ModuleKey, _module->Key.data(), 16); request.Size = _module->CompressedSize; EndianConvert(request.Size); @@ -155,30 +154,21 @@ bool Warden::IsValidCheckSum(uint32 checksum, const uint8* data, const uint16 le } } -struct keyData +union keyData { - union - { - struct - { - uint8 bytes[20]; - } bytes; - - struct - { - uint32 ints[5]; - } ints; - }; + std::array bytes; + std::array ints; }; uint32 Warden::BuildChecksum(const uint8* data, uint32 length) { - keyData hash; - SHA1(data, length, hash.bytes.bytes); + keyData hash{}; + hash.bytes = Acore::Crypto::SHA1::GetDigestOf(data, size_t(length)); uint32 checkSum = 0; + for (uint8 i = 0; i < 5; ++i) { - checkSum = checkSum ^ hash.ints.ints[i]; + checkSum = checkSum ^ hash.ints[i]; } return checkSum; diff --git a/src/server/game/Warden/Warden.h b/src/server/game/Warden/Warden.h index 278ad7a95..db0222c2b 100644 --- a/src/server/game/Warden/Warden.h +++ b/src/server/game/Warden/Warden.h @@ -91,10 +91,10 @@ struct WardenHashRequest struct ClientWardenModule { - uint8 Id[16]; - uint8 Key[16]; - uint32 CompressedSize; - uint8* CompressedData; + std::array Id{}; + std::array Key{}; + uint32 CompressedSize{}; + uint8* CompressedData{}; }; class WorldSession; diff --git a/src/server/game/Warden/WardenMac.cpp b/src/server/game/Warden/WardenMac.cpp index 039f17f78..c10ce9a3b 100644 --- a/src/server/game/Warden/WardenMac.cpp +++ b/src/server/game/Warden/WardenMac.cpp @@ -25,15 +25,12 @@ #include "WardenModuleMac.h" #include "WorldPacket.h" #include "WorldSession.h" -#include WardenMac::WardenMac() : Warden() { } -WardenMac::~WardenMac() -{ -} +WardenMac::~WardenMac() = default; void WardenMac::Init(WorldSession* pClient, SessionKey const& K) { @@ -64,29 +61,21 @@ void WardenMac::Init(WorldSession* pClient, SessionKey const& K) _module = GetModuleForClient(); - LOG_DEBUG("warden", "Module Key: {}", Acore::Impl::ByteArrayToHexStr(_module->Key, 16)); - LOG_DEBUG("warden", "Module ID: {}", Acore::Impl::ByteArrayToHexStr(_module->Id, 16)); + LOG_DEBUG("warden", "Module Key: {}", ByteArrayToHexStr(_module->Key)); + LOG_DEBUG("warden", "Module ID: {}", ByteArrayToHexStr(_module->Id)); RequestModule(); } ClientWardenModule* WardenMac::GetModuleForClient() { - ClientWardenModule* mod = new ClientWardenModule; - - uint32 len = sizeof(Module_0DBBF209A27B1E279A9FEC5C168A15F7_Data); + auto mod = new ClientWardenModule; // data assign - mod->CompressedSize = len; - mod->CompressedData = new uint8[len]; - memcpy(mod->CompressedData, Module_0DBBF209A27B1E279A9FEC5C168A15F7_Data, len); - memcpy(mod->Key, Module_0DBBF209A27B1E279A9FEC5C168A15F7_Key, 16); + mod->CompressedSize = Module_0DBBF209A27B1E279A9FEC5C168A15F7_Data.size(); + mod->CompressedData = Module_0DBBF209A27B1E279A9FEC5C168A15F7_Data.data(); // md5 hash - MD5_CTX ctx; - MD5_Init(&ctx); - MD5_Update(&ctx, mod->CompressedData, len); - MD5_Final((uint8*)&mod->Id, &ctx); - + mod->Id = Acore::Crypto::MD5::GetDigestOf(mod->CompressedData, mod->CompressedSize); return mod; } @@ -100,7 +89,7 @@ void WardenMac::RequestHash() LOG_DEBUG("warden", "Request hash"); // Create packet structure - WardenHashRequest Request; + WardenHashRequest Request{}; Request.Command = WARDEN_SMSG_HASH_REQUEST; memcpy(Request.Seed, _seed, 16); @@ -242,7 +231,7 @@ void WardenMac::HandleData(ByteBuffer& buff) sha1.UpdateData((uint8*)&magic, 4); sha1.Finalize(); - std::array sha1Hash; + Acore::Crypto::SHA1::Digest sha1Hash{}; buff.read(sha1Hash.data(), sha1Hash.size()); if (sha1Hash != sha1.GetDigest()) @@ -251,20 +240,15 @@ void WardenMac::HandleData(ByteBuffer& buff) //found = true; } - MD5_CTX ctx; - MD5_Init(&ctx); - MD5_Update(&ctx, str.c_str(), str.size()); - uint8 ourMD5Hash[16]; - MD5_Final(ourMD5Hash, &ctx); + auto ourMD5Hash = Acore::Crypto::MD5::GetDigestOf(str); + Acore::Crypto::MD5::Digest theirsMD5Hash{}; + buff.read(theirsMD5Hash); - uint8 theirsMD5Hash[16]; - buff.read(theirsMD5Hash, 16); - - if (memcmp(ourMD5Hash, theirsMD5Hash, 16)) + if (ourMD5Hash != theirsMD5Hash) { LOG_DEBUG("warden", "Handle data failed: MD5 hash is wrong!"); //found = true; } - _session->KickPlayer("WardenMac"); + _session->KickPlayer("WardenMac::HandleData"); } diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp index b3529d9e8..604192c55 100644 --- a/src/server/game/Warden/WardenWin.cpp +++ b/src/server/game/Warden/WardenWin.cpp @@ -31,7 +31,6 @@ #include "World.h" #include "WorldPacket.h" #include "WorldSession.h" -#include // GUILD is the shortest string that has no client validation (RAID only sends if in a raid group) static constexpr char _luaEvalPrefix[] = "local S,T,R=SendAddonMessage,function()"; @@ -97,9 +96,7 @@ static WorldIntConfigs GetMaxWardenChecksForType(uint8 type) WardenWin::WardenWin() : Warden(), _serverTicks(0) { } -WardenWin::~WardenWin() -{ -} +WardenWin::~WardenWin() = default; void WardenWin::Init(WorldSession* session, SessionKey const& k) { @@ -121,14 +118,14 @@ void WardenWin::Init(WorldSession* session, SessionKey const& k) _module = GetModuleForClient(); - LOG_DEBUG("warden", "Module Key: {}", Acore::Impl::ByteArrayToHexStr(_module->Key, 16)); - LOG_DEBUG("warden", "Module ID: {}", Acore::Impl::ByteArrayToHexStr(_module->Id, 16)); + LOG_DEBUG("warden", "Module Key: {}", ByteArrayToHexStr(_module->Key)); + LOG_DEBUG("warden", "Module ID: {}", ByteArrayToHexStr(_module->Id)); RequestModule(); } ClientWardenModule* WardenWin::GetModuleForClient() { - ClientWardenModule* mod = new ClientWardenModule; + auto mod = new ClientWardenModule; uint32 length = sizeof(Module.Module); @@ -136,13 +133,10 @@ ClientWardenModule* WardenWin::GetModuleForClient() mod->CompressedSize = length; mod->CompressedData = new uint8[length]; memcpy(mod->CompressedData, Module.Module, length); - memcpy(mod->Key, Module.ModuleKey, 16); + memcpy(mod->Key.data(), Module.ModuleKey, 16); // md5 hash - MD5_CTX ctx; - MD5_Init(&ctx); - MD5_Update(&ctx, mod->CompressedData, length); - MD5_Final((uint8*)&mod->Id, &ctx); + mod->Id = Acore::Crypto::MD5::GetDigestOf(mod->CompressedData, mod->CompressedSize); return mod; } @@ -152,7 +146,7 @@ void WardenWin::InitializeModule() LOG_DEBUG("warden", "Initialize module"); // Create packet structure - WardenInitModuleRequest Request; + WardenInitModuleRequest Request{}; Request.Command1 = WARDEN_SMSG_MODULE_INITIALIZE; Request.Size1 = 20; Request.Unk1 = 1; @@ -209,7 +203,7 @@ void WardenWin::RequestHash() LOG_DEBUG("warden", "Request hash"); // Create packet structure - WardenHashRequest Request; + WardenHashRequest Request{}; Request.Command = WARDEN_SMSG_HASH_REQUEST; memcpy(Request.Seed, _seed, 16); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 68e6079f8..127d11885 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -314,14 +314,12 @@ void World::AddSession_(WorldSession* s) if (pLimit > 0 && Sessions >= pLimit && AccountMgr::IsPlayerAccount(s->GetSecurity()) && !s->CanSkipQueue() && !HasRecentlyDisconnected(s)) { - AddQueuedPlayer (s); + AddQueuedPlayer(s); UpdateMaxSessionCounters(); return; } - s->SendAuthResponse(AUTH_OK, true); - - FinalizePlayerWorldSession(s); + s->InitializeSession(); UpdateMaxSessionCounters(); } @@ -401,13 +399,7 @@ bool World::RemoveQueuedPlayer(WorldSession* sess) if ((!GetPlayerAmountLimit() || sessions < GetPlayerAmountLimit()) && !m_QueuedPlayer.empty()) { WorldSession* pop_sess = m_QueuedPlayer.front(); - pop_sess->SetInQueue(false); - pop_sess->ResetTimeOutTime(false); - pop_sess->SendAuthWaitQueue(0); - pop_sess->SendAccountDataTimes(GLOBAL_CACHE_MASK); - - FinalizePlayerWorldSession(pop_sess); - + pop_sess->InitializeSession(); m_QueuedPlayer.pop_front(); // update iter to point first queued socket or end() if queue is empty now @@ -3402,16 +3394,6 @@ uint32 World::GetNextWhoListUpdateDelaySecs() return uint32(std::ceil(t / 1000.0f)); } -void World::FinalizePlayerWorldSession(WorldSession* session) -{ - uint32 cacheVersion = sWorld->getIntConfig(CONFIG_CLIENTCACHE_VERSION); - sScriptMgr->OnBeforeFinalizePlayerWorldSession(cacheVersion); - - session->SendAddonsInfo(); - session->SendClientCacheVersion(cacheVersion); - session->SendTutorialsData(); -} - CliCommandHolder::CliCommandHolder(void* callbackArg, char const* command, Print zprint, CommandFinished commandFinished) : m_callbackArg(callbackArg), m_command(strdup(command)), m_print(zprint), m_commandFinished(commandFinished) { diff --git a/src/server/scripts/Commands/cs_deserter.cpp b/src/server/scripts/Commands/cs_deserter.cpp index f20c1c15b..b884565ee 100644 --- a/src/server/scripts/Commands/cs_deserter.cpp +++ b/src/server/scripts/Commands/cs_deserter.cpp @@ -322,7 +322,7 @@ public: static bool HandleDeserterRemoveAll(ChatHandler* handler, bool isInstance, Optional maxTime) { uint32 deserterSpell = isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER; - int32 remainTime = isInstance ? 1800 : 900; + int32 remainTime = isInstance ? 1800 : 1800; uint64 deserterCount = 0; bool countOnline = true; diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index cdf362992..69536e1a7 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -129,7 +129,7 @@ public: } handler->PSendSysMessage("%s", GitRevision::GetFullVersion()); - handler->PSendSysMessage("Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); + handler->PSendSysMessage("Using SSL version: %s (library: %s)", OPENSSL_VERSION_TEXT, OpenSSL_version(OPENSSL_VERSION)); handler->PSendSysMessage("Using Boost version: %i.%i.%i", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100); handler->PSendSysMessage("Using MySQL version: %u", MySQL::GetLibraryVersion()); handler->PSendSysMessage("Using CMake version: %s", GitRevision::GetCMakeVersion()); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp index 25de4ec9d..a08644405 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp @@ -108,7 +108,25 @@ public: bool CanAIAttack(Unit const* target) const override { - return !(target->GetTypeId() == TYPEID_UNIT && !secondPhase) && !target->HasAura(SPELL_CONFLAGRATION); + if (target->GetTypeId() == TYPEID_UNIT && !secondPhase) + { + return false; + } + + if (me->GetThreatMgr().GetThreatListSize() > 1) + { + ThreatContainer::StorageType::const_iterator lastRef = me->GetThreatMgr().GetOnlineContainer().GetThreatList().end(); + --lastRef; + if (Unit* lastTarget = (*lastRef)->getTarget()) + { + if (lastTarget != target) + { + return !target->HasAura(SPELL_CONFLAGRATION); + } + } + } + + return true; } void EnterCombat(Unit* /*victim*/) override @@ -244,9 +262,6 @@ public: break; case EVENT_CONFLAGRATION: DoCastVictim(SPELL_CONFLAGRATION); - if (me->GetVictim() && me->GetVictim()->HasAura(SPELL_CONFLAGRATION)) - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1)) - me->TauntApply(target); events.ScheduleEvent(EVENT_CONFLAGRATION, 30000); break; } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp index 306d12a43..5e7440045 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp @@ -95,7 +95,7 @@ public: } case EVENT_IGNITE_MANA: { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, -SPELL_IGNITE_MANA)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true, -SPELL_IGNITE_MANA)) { DoCast(target, SPELL_IGNITE_MANA); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp index 951c86d49..786fef38f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp @@ -94,10 +94,10 @@ public: case EVENT_LAVA_BOMB_RANGED: { std::list targets; - SelectTargetList(targets, [this](Unit* target) + SelectTargetList(targets, 1, SelectTargetMethod::Random, 1, [this](Unit* target) { return target && target->IsPlayer() && target->GetDistance(me) > MELEE_TARGET_LOOKUP_DIST && target->GetDistance(me) < 100.0f; - }, 1, SelectTargetMethod::Random); + }); if (!targets.empty()) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp index e18944ee4..c079c9915 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp @@ -71,7 +71,7 @@ public: } case EVENT_SHAZZRAH_CURSE: { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, -SPELL_SHAZZRAH_CURSE)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true, -SPELL_SHAZZRAH_CURSE)) { DoCast(target, SPELL_SHAZZRAH_CURSE); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp index 516291820..f4f868736 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp @@ -174,7 +174,7 @@ public: } case EVENT_SHADOW_WORD_PAIN: { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, -SPELL_SHADOW_WORD_PAIN)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true, -SPELL_SHADOW_WORD_PAIN)) { DoCast(target, SPELL_SHADOW_WORD_PAIN); } @@ -183,7 +183,7 @@ public: } case EVENT_IMMOLATE: { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, -SPELL_IMMOLATE)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true, -SPELL_IMMOLATE)) { DoCast(target, SPELL_IMMOLATE); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index fc23bdba4..0f29956ee 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -112,6 +112,11 @@ public: } } break; + case NPC_HYAKISS_THE_LURKER: + case NPC_SHADIKITH_THE_GLIDER: + case NPC_ROKAD_THE_RAVAGER: + SetBossState(DATA_OPTIONAL_BOSS, DONE); + break; default: break; } @@ -127,6 +132,17 @@ public: else if (data == IN_PROGRESS) OzDeathCount = 0; break; + case DATA_SPAWN_OPERA_DECORATIONS: + { + for (ObjectGuid const& guid : _operaDecorations[data - 1]) + { + DoRespawnGameObject(guid, DAY); + } + + break; + } + default: + break; } } @@ -220,20 +236,25 @@ public: case GO_DUST_COVERED_CHEST: DustCoveredChest = go->GetGUID(); break; - } - - switch (OperaEvent) - { - /// @todo Set Object visibilities for Opera based on performance - case EVENT_OZ: + case GO_OZ_BACKDROP: + case GO_OZ_HAY: + _operaDecorations[EVENT_OZ - 1].push_back(go->GetGUID()); break; - - case EVENT_HOOD: + case GO_HOOD_BACKDROP: + case GO_HOOD_TREE: + case GO_HOOD_HOUSE: + _operaDecorations[EVENT_HOOD - 1].push_back(go->GetGUID()); break; - - case EVENT_RAJ: + case GO_RAJ_BACKDROP: + case GO_RAJ_MOON: + case GO_RAJ_BALCONY: + _operaDecorations[EVENT_RAJ - 1].push_back(go->GetGUID()); + break; + default: break; } + + InstanceScript::OnGameObjectCreate(go); } uint32 GetData(uint32 type) const override @@ -315,6 +336,7 @@ public: ObjectGuid ImageGUID; ObjectGuid DustCoveredChest; ObjectGuid m_uiRelayGUID; + GuidVector _operaDecorations[EVENT_RAJ]; }; }; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index fdbafe959..7884189fb 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -269,6 +269,8 @@ public: } RaidWiped = false; + + instance->SetData(DATA_SPAWN_OPERA_DECORATIONS, m_uiEventId); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h index eda7d1c16..cc0a72878 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h @@ -27,39 +27,39 @@ uint32 const EncounterCount = 12; enum KZDataTypes { - DATA_ATTUMEN = 0, - DATA_MOROES = 1, - DATA_MAIDEN = 2, - DATA_OPTIONAL_BOSS = 3, - DATA_OPERA_PERFORMANCE = 4, - DATA_CURATOR = 5, - DATA_ARAN = 6, - DATA_TERESTIAN = 7, - DATA_NETHERSPITE = 8, - DATA_CHESS = 9, - DATA_MALCHEZZAR = 10, - DATA_NIGHTBANE = 11, - DATA_SERVANT_QUARTERS = 12, - DATA_SELECTED_RARE = 13, + DATA_ATTUMEN = 0, + DATA_MOROES = 1, + DATA_MAIDEN = 2, + DATA_OPTIONAL_BOSS = 3, + DATA_OPERA_PERFORMANCE = 4, + DATA_CURATOR = 5, + DATA_ARAN = 6, + DATA_TERESTIAN = 7, + DATA_NETHERSPITE = 8, + DATA_CHESS = 9, + DATA_MALCHEZZAR = 10, + DATA_NIGHTBANE = 11, + DATA_SERVANT_QUARTERS = 12, + DATA_SELECTED_RARE = 13, + DATA_OPERA_OZ_DEATHCOUNT = 14, + DATA_KILREK = 15, - DATA_OPERA_OZ_DEATHCOUNT = 14, + MAX_ENCOUNTERS = 16, - DATA_KILREK = 15, - MAX_ENCOUNTERS = 16, - DATA_GO_CURTAINS = 18, - DATA_GO_STAGEDOORLEFT = 19, - DATA_GO_STAGEDOORRIGHT = 20, - DATA_GO_LIBRARY_DOOR = 21, - DATA_GO_MASSIVE_DOOR = 22, - DATA_GO_NETHER_DOOR = 23, - DATA_GO_GAME_DOOR = 24, - DATA_GO_GAME_EXIT_DOOR = 25, - - DATA_IMAGE_OF_MEDIVH = 26, - DATA_MASTERS_TERRACE_DOOR_1 = 27, - DATA_MASTERS_TERRACE_DOOR_2 = 28, - DATA_GO_SIDE_ENTRANCE_DOOR = 29, - DATA_PRINCE = 30 + DATA_GO_CURTAINS = 18, + DATA_GO_STAGEDOORLEFT = 19, + DATA_GO_STAGEDOORRIGHT = 20, + DATA_GO_LIBRARY_DOOR = 21, + DATA_GO_MASSIVE_DOOR = 22, + DATA_GO_NETHER_DOOR = 23, + DATA_GO_GAME_DOOR = 24, + DATA_GO_GAME_EXIT_DOOR = 25, + DATA_IMAGE_OF_MEDIVH = 26, + DATA_MASTERS_TERRACE_DOOR_1 = 27, + DATA_MASTERS_TERRACE_DOOR_2 = 28, + DATA_GO_SIDE_ENTRANCE_DOOR = 29, + DATA_PRINCE = 30, + DATA_SPAWN_OPERA_DECORATIONS = 31 }; enum KZOperaEvents @@ -95,18 +95,28 @@ enum KZMiscCreatures enum KZGameObjectIds { - GO_STAGE_CURTAIN = 183932, - GO_STAGE_DOOR_LEFT = 184278, - GO_STAGE_DOOR_RIGHT = 184279, - GO_PRIVATE_LIBRARY_DOOR = 184517, - GO_MASSIVE_DOOR = 185521, - GO_GAMESMAN_HALL_DOOR = 184276, - GO_GAMESMAN_HALL_EXIT_DOOR = 184277, - GO_NETHERSPACE_DOOR = 185134, - GO_MASTERS_TERRACE_DOOR = 184274, - GO_MASTERS_TERRACE_DOOR2 = 184280, - GO_SIDE_ENTRANCE_DOOR = 184275, - GO_DUST_COVERED_CHEST = 185119 + GO_STAGE_CURTAIN = 183932, + GO_STAGE_DOOR_LEFT = 184278, + GO_STAGE_DOOR_RIGHT = 184279, + GO_PRIVATE_LIBRARY_DOOR = 184517, + GO_MASSIVE_DOOR = 185521, + GO_GAMESMAN_HALL_DOOR = 184276, + GO_GAMESMAN_HALL_EXIT_DOOR = 184277, + GO_NETHERSPACE_DOOR = 185134, + GO_MASTERS_TERRACE_DOOR = 184274, + GO_MASTERS_TERRACE_DOOR2 = 184280, + GO_SIDE_ENTRANCE_DOOR = 184275, + GO_DUST_COVERED_CHEST = 185119, + + // Opera event stage decoration + GO_OZ_BACKDROP = 183442, + GO_OZ_HAY = 183496, + GO_HOOD_BACKDROP = 183491, + GO_HOOD_TREE = 183492, + GO_HOOD_HOUSE = 183493, + GO_RAJ_BACKDROP = 183443, + GO_RAJ_MOON = 183494, + GO_RAJ_BALCONY = 183495 }; enum KZMisc diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index bb78049f1..10e8898e9 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -140,7 +140,7 @@ public: events.ScheduleEvent(EVENT_SPELL_STOMP, 30000); break; case EVENT_SPELL_BURN: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true, -SPELL_BURN_DAMAGE)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true, true, -SPELL_BURN_DAMAGE)) me->CastSpell(target, SPELL_BURN, false); events.ScheduleEvent(EVENT_SPELL_BURN, 60000); break; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index f568b0411..d029d8329 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -215,7 +215,7 @@ public: break; case EVENT_MARK_OF_ARLOKK: { - Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, urand(1, 3), 0.0f, false, -SPELL_MARK_OF_ARLOKK); + Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, urand(1, 3), 0.0f, false, true, -SPELL_MARK_OF_ARLOKK); if (!target) target = me->GetVictim(); if (target) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp index 6b4a19674..cc52c0eea 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp @@ -130,7 +130,7 @@ class spell_gahzranka_slam : public SpellScript { if (Unit* caster = GetCaster()) { - _wipeThreat = targets.size() < caster->GetThreatMgr().GetThreatListSize();; + _wipeThreat = targets.size() < caster->GetThreatMgr().GetThreatListSize(); } } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp index 648057c56..c842bc2b1 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp @@ -80,8 +80,18 @@ struct boss_hazzarah : public BossAI bool CanAIAttack(Unit const* target) const override { - if (me->GetThreatMgr().GetThreatListSize() > 1 && me->GetThreatMgr().GetOnlineContainer().getMostHated()->getTarget() == target) - return !target->HasAura(SPELL_SLEEP); + if (me->GetThreatMgr().GetThreatListSize() > 1) + { + ThreatContainer::StorageType::const_iterator lastRef = me->GetThreatMgr().GetOnlineContainer().GetThreatList().end(); + --lastRef; + if (Unit* lastTarget = (*lastRef)->getTarget()) + { + if (lastTarget != target) + { + return !target->HasAura(SPELL_SLEEP); + } + } + } return true; } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp index 0c69b7a29..bc85b98fc 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp @@ -154,8 +154,18 @@ struct boss_jindo : public BossAI bool CanAIAttack(Unit const* target) const override { - if (me->GetThreatMgr().GetThreatListSize() > 1 && me->GetThreatMgr().GetOnlineContainer().getMostHated()->getTarget() == target) - return !target->HasAura(SPELL_HEX); + if (me->GetThreatMgr().GetThreatListSize() > 1) + { + ThreatContainer::StorageType::const_iterator lastRef = me->GetThreatMgr().GetOnlineContainer().GetThreatList().end(); + --lastRef; + if (Unit* lastTarget = (*lastRef)->getTarget()) + { + if (lastTarget != target) + { + return !target->HasAura(SPELL_HEX); + } + } + } return true; } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp index 570369938..09b7a57f1 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp @@ -85,8 +85,18 @@ public: bool CanAIAttack(Unit const* target) const override { - if (me->GetThreatMgr().GetThreatListSize() > 1 && me->GetThreatMgr().GetOnlineContainer().getMostHated()->getTarget() == target) - return !target->HasAura(SPELL_GOUGE); + if (me->GetThreatMgr().GetThreatListSize() > 1) + { + ThreatContainer::StorageType::const_iterator lastRef = me->GetThreatMgr().GetOnlineContainer().GetThreatList().end(); + --lastRef; + if (Unit* lastTarget = (*lastRef)->getTarget()) + { + if (lastTarget != target) + { + return !target->HasAura(SPELL_GOUGE); + } + } + } return true; } diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp index 12ce02ee2..b32fdbfeb 100644 --- a/src/server/scripts/Events/brewfest.cpp +++ b/src/server/scripts/Events/brewfest.cpp @@ -1009,6 +1009,14 @@ class spell_brewfest_apple_trap : public SpellScript { PrepareSpellScript(spell_brewfest_apple_trap); + void FilterTargets(std::list& targets) + { + targets.remove_if(Acore::UnitAuraCheck(false, SPELL_RAM_FATIGUE)); + + if (targets.empty()) + FinishCast(SPELL_FAILED_CASTER_AURASTATE); + } + void HandleDummyEffect(SpellEffIndex /*effIndex*/) { if (Unit* target = GetHitUnit()) @@ -1018,6 +1026,7 @@ class spell_brewfest_apple_trap : public SpellScript void Register() override { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_brewfest_apple_trap::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); OnEffectHitTarget += SpellEffectFn(spell_brewfest_apple_trap::HandleDummyEffect, EFFECT_0, SPELL_EFFECT_DUMMY); } }; @@ -1768,7 +1777,7 @@ struct npc_coren_direbrew_sisters : public ScriptedAI }) .Schedule(Seconds(2), [this](TaskContext mugChuck) { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, false, -SPELL_HAS_DARK_BREWMAIDENS_BREW)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, false, true, -SPELL_HAS_DARK_BREWMAIDENS_BREW)) { DoCast(target, SPELL_CHUCK_MUG); } diff --git a/src/server/scripts/Events/hallows_end.cpp b/src/server/scripts/Events/hallows_end.cpp index 8dec984ff..c290fa26b 100644 --- a/src/server/scripts/Events/hallows_end.cpp +++ b/src/server/scripts/Events/hallows_end.cpp @@ -156,7 +156,9 @@ enum eHallowsEndCandy SPELL_HALLOWS_END_CANDY_1 = 24924, SPELL_HALLOWS_END_CANDY_2 = 24925, SPELL_HALLOWS_END_CANDY_3 = 24926, - SPELL_HALLOWS_END_CANDY_4 = 24927, + SPELL_HALLOWS_END_CANDY_3_FEMALE = 44742, + SPELL_HALLOWS_END_CANDY_3_MALE = 44743, + SPELL_HALLOWS_END_CANDY_4 = 24927 }; class spell_hallows_end_candy : public SpellScript @@ -168,7 +170,7 @@ class spell_hallows_end_candy : public SpellScript if (Player* target = GetHitPlayer()) { uint32 spellId = SPELL_HALLOWS_END_CANDY_1 + urand(0, 3); - GetCaster()->CastSpell(target, spellId, true, nullptr); + GetCaster()->CastSpell(target, spellId, true); } } @@ -178,6 +180,34 @@ class spell_hallows_end_candy : public SpellScript } }; +class spell_hallows_end_candy_pirate_costume : public AuraScript +{ + PrepareAuraScript(spell_hallows_end_candy_pirate_costume); + + void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* target = GetTarget()) + { + target->CastSpell(target, target->getGender() == GENDER_MALE ? SPELL_HALLOWS_END_CANDY_3_MALE : SPELL_HALLOWS_END_CANDY_3_FEMALE, true); + } + } + + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* target = GetTarget()) + { + target->RemoveAurasDueToSpell(SPELL_HALLOWS_END_CANDY_3_MALE); + target->RemoveAurasDueToSpell(SPELL_HALLOWS_END_CANDY_3_FEMALE); + } + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_hallows_end_candy_pirate_costume::HandleEffectApply, EFFECT_0, SPELL_AURA_MOD_INCREASE_SWIM_SPEED, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_hallows_end_candy_pirate_costume::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_INCREASE_SWIM_SPEED, AURA_EFFECT_HANDLE_REAL); + } +}; + enum trickyTreat { SPELL_UPSET_TUMMY = 42966, @@ -1426,6 +1456,7 @@ void AddSC_event_hallows_end_scripts() RegisterSpellScript(spell_hallows_end_trick); RegisterSpellScript(spell_hallows_end_trick_or_treat); RegisterSpellScript(spell_hallows_end_candy); + RegisterSpellScript(spell_hallows_end_candy_pirate_costume); RegisterSpellScript(spell_hallows_end_tricky_treat); RegisterSpellScriptWithArgs(spell_hallows_end_put_costume, "spell_hallows_end_pirate_costume", SPELL_PIRATE_COSTUME_MALE, SPELL_PIRATE_COSTUME_FEMALE); RegisterSpellScriptWithArgs(spell_hallows_end_put_costume, "spell_hallows_end_leper_costume", SPELL_LEPER_GNOME_COSTUME_MALE, SPELL_LEPER_GNOME_COSTUME_FEMALE); diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.cpp index 24a926615..868fa8374 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.cpp @@ -105,10 +105,10 @@ struct npc_obsidian_destroyer : public ScriptedAI _scheduler.Schedule(6s, [this](TaskContext context) { std::list targets; - SelectTargetList(targets, [&](Unit* target) + SelectTargetList(targets, 6, SelectTargetMethod::Random, 1, [&](Unit* target) { return target && target->IsPlayer() && target->GetPower(POWER_MANA) > 0; - }, 6, SelectTargetMethod::Random); + }); for (Unit* target : targets) { diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index b1d1fc203..01ac35f6d 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -136,10 +136,7 @@ public: bool operator()(Unit* unit) const { - if (unit->GetTypeId() != TYPEID_PLAYER || unit->HasAura(SPELL_DIGESTIVE_ACID)) - return false; - - return true; + return unit->IsPlayer() && !unit->HasAura(SPELL_DIGESTIVE_ACID) && (unit->GetPositionZ() > 0.0f); } }; @@ -277,7 +274,7 @@ struct boss_eye_of_cthun : public BossAI task.SetGroup(GROUP_BEAM_PHASE); task.Repeat(); }) - .Schedule(50s, [this](TaskContext /*task*/) + .Schedule(46s, [this](TaskContext /*task*/) { _scheduler.CancelGroup(GROUP_BEAM_PHASE); @@ -446,15 +443,19 @@ struct boss_cthun : public BossAI { _scheduler.Schedule(13800ms, [this](TaskContext context) { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, -SPELL_DIGESTIVE_ACID)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NotInStomachSelector())) { target->CastSpell(target, SPELL_MOUTH_TENTACLE, true); target->m_Events.AddEventAtOffset([target, this]() { - DoCast(target, SPELL_DIGESTIVE_ACID, true); DoTeleportPlayer(target, STOMACH_X, STOMACH_Y, STOMACH_Z, STOMACH_O); target->RemoveAurasDueToSpell(SPELL_MIND_FLAY); + + target->m_Events.AddEventAtOffset([target, this]() + { + DoCast(target, SPELL_DIGESTIVE_ACID, true); + }, 2s); }, 3800ms); } @@ -469,7 +470,7 @@ struct boss_cthun : public BossAI context.Repeat(30s); }).Schedule(8s, [this](TaskContext context) { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, -SPELL_DIGESTIVE_ACID)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NotInStomachSelector())) { //Spawn claw tentacle on the random target if (Creature* spawned = me->SummonCreature(NPC_GIANT_CLAW_TENTACLE, *target, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000)) @@ -481,7 +482,7 @@ struct boss_cthun : public BossAI context.Repeat(1min); }).Schedule(38s, [this](TaskContext context) { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, -SPELL_DIGESTIVE_ACID)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NotInStomachSelector())) { //Spawn claw tentacle on the random target if (Creature* spawned = me->SummonCreature(NPC_GIANT_EYE_TENTACLE, *target, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5000)) @@ -637,7 +638,7 @@ struct npc_eye_tentacle : public ScriptedAI }) .Schedule(1s, 5s, [this](TaskContext context) { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, [&](Unit* u) { return u && u->GetTypeId() == TYPEID_PLAYER && !u->HasAura(SPELL_DIGESTIVE_ACID) && !u->HasAura(SPELL_MIND_FLAY); })) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NotInStomachSelector())) { DoCast(target, SPELL_MIND_FLAY); } @@ -925,7 +926,7 @@ struct npc_giant_eye_tentacle : public ScriptedAI DoCastAOE(SPELL_MASSIVE_GROUND_RUPTURE); }).Schedule(1s, 5s, [this](TaskContext context) { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, -SPELL_DIGESTIVE_ACID)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NotInStomachSelector())) { DoCast(target, SPELL_GREEN_BEAM); } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp index 7d9ffdc9b..dbc451e9e 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp @@ -49,7 +49,8 @@ enum Spells SPELL_HEAL_BRETHEN = 26565, SPELL_ENRAGE = 8599, - TALK_ENRAGE = 0 + TALK_ENRAGE = 0, + TALK_SHARE_BUFFS = 1 }; class npc_anubisath_sentinel : public CreatureScript @@ -275,6 +276,7 @@ public: void JustDied(Unit* /*killer*/) override { + bool cast = false; for (int ni = 0; ni < 3; ++ni) { Creature* sent = ObjectAccessor::GetCreature(*me, NearbyGUID[ni]); @@ -282,10 +284,16 @@ public: continue; if (sent->isDead()) continue; + cast = true; DoCast(sent, SPELL_HEAL_BRETHEN, true); DoCast(sent, SPELL_TRANSFER_POWER, true); } + if (cast) + { + Talk(TALK_SHARE_BUFFS); + } + DoCastSelf(SPELL_SUMMON_SMALL_OBSIDIAN_CHUNK, true); } diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp index a94d368fc..445c186db 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp @@ -204,7 +204,7 @@ struct boss_amanitar : public BossAI } } - if (SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, -SPELL_MINI)) + if (SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true, -SPELL_MINI)) { DoCastSelf(SPELL_REMOVE_MUSHROOM_POWER, true); DoCastAOE(SPELL_MINI); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp index 7b1ef38c7..07bf6f096 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp @@ -224,7 +224,7 @@ public: break; case EVENT_ENERVATING_BRAND: for (uint8 i = 0; i < RAID_MODE(2, 4, 2, 4); i++) - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true, -SPELL_ENERVATING_BRAND)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true, true, -SPELL_ENERVATING_BRAND)) me->CastSpell(target, SPELL_ENERVATING_BRAND, true); events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26000); break; @@ -311,7 +311,7 @@ public: break; case EVENT_ENERVATING_BRAND: for (uint8 i = 0; i < RAID_MODE(4, 10, 4, 10); i++) - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true, -SPELL_ENERVATING_BRAND)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true, true, -SPELL_ENERVATING_BRAND)) me->CastSpell(target, SPELL_ENERVATING_BRAND, true); _events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26000); break; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 55723e80e..2c89dca56 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -399,7 +399,7 @@ public: events.ScheduleEvent(EVENT_METEOR_STRIKE, 40000); break; case EVENT_FIERY_COMBUSTION: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, -SPELL_TWILIGHT_REALM)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, true, -SPELL_TWILIGHT_REALM)) me->CastSpell(target, SPELL_FIERY_COMBUSTION, false); events.ScheduleEvent(EVENT_FIERY_COMBUSTION, 25000); break; @@ -542,7 +542,7 @@ public: _events.ScheduleEvent(EVENT_BREATH, urand(10000, 12000)); break; case EVENT_SOUL_CONSUMPTION: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, SPELL_TWILIGHT_REALM)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, true, SPELL_TWILIGHT_REALM)) me->CastSpell(target, SPELL_SOUL_CONSUMPTION, false); _events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, 20000); break; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index 24e77ff24..28ff389cc 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -211,12 +211,12 @@ public: events.RepeatEvent(urand(10000, 15000)); break; case EVENT_SPELL_FEL_LIGHTNING: - if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true) ) + if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true) ) me->CastSpell(target, SPELL_FEL_LIGHTNING, false); events.RepeatEvent(urand(10000, 15000)); break; case EVENT_SPELL_INCINERATE_FLESH: - if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true) ) + if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true) ) { Talk(EMOTE_INCINERATE, target); Talk(SAY_INCINERATE); @@ -230,7 +230,7 @@ public: events.RepeatEvent(urand(25000, 45000)); break; case EVENT_SPELL_LEGION_FLAME: - if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true) ) + if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true) ) { Talk(EMOTE_LEGION_FLAME, target); me->CastSpell(target, SPELL_LEGION_FLAME, false); diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index f513dc46d..2563ba906 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -1562,7 +1562,7 @@ public: for (uint8 i = 3; i < PATH_WP_COUNT - 1; ++i) path.push_back(G3D::Vector3(PathWaypoints[i].GetPositionX(), PathWaypoints[i].GetPositionY(), PathWaypoints[i].GetPositionZ())); me->GetMotionMaster()->MoveSplinePath(&path); - me->GetMotionMaster()->propagateSpeedChange(); + me->GetMotionMaster()->PropagateSpeedChange(); events.ScheduleEvent(EVENT_LK_SUMMON, 1000); } break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 2615b8957..032ca2ff9 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -465,7 +465,7 @@ public: switch (action) { case ACTION_MARK_OF_THE_FALLEN_CHAMPION: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true, -SPELL_MARK_OF_THE_FALLEN_CHAMPION)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true, true, -SPELL_MARK_OF_THE_FALLEN_CHAMPION)) { ++_fallenChampionCastCount; me->CastSpell(target, SPELL_MARK_OF_THE_FALLEN_CHAMPION, false); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index 97043531c..644a371d8 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -235,7 +235,7 @@ public: { std::list targets; uint32 minTargets = RAID_MODE(3, 8, 3, 8); - SelectTargetList(targets, minTargets, SelectTargetMethod::Random, -5.0f, true); + SelectTargetList(targets, minTargets, SelectTargetMethod::Random, 0, -5.0f, true); float minDist = 0.0f; if (targets.size() >= minTargets) minDist = -5.0f; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 0ccd5fd16..f90b8eea6 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -445,7 +445,7 @@ public: count = 3; std::list targets; - SelectTargetList(targets, NonTankTargetSelector(me, true), count, SelectTargetMethod::Random); + SelectTargetList(targets, count, SelectTargetMethod::Random, 0, NonTankTargetSelector(me, true)); if (!targets.empty()) for (std::list::iterator itr = targets.begin(); itr != targets.end(); ++itr) me->CastSpell(*itr, SPELL_SUMMON_SHADE, true); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 99ce3c3b6..46c5015e0 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -479,7 +479,7 @@ public: void SelectTarget(std::list& targets) { targets.clear(); - Unit* target = GetCaster()->GetAI()->SelectTarget(SelectTargetMethod::Random, 1, -1.0f, true, -SPELL_IMPALED); // -1.0f as it takes into account object size + Unit* target = GetCaster()->GetAI()->SelectTarget(SelectTargetMethod::Random, 1, -1.0f, true,true, -SPELL_IMPALED); // -1.0f as it takes into account object size if (!target) target = GetCaster()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true); // if only tank or noone outside of boss' model if (!target) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 7e31e8550..52ca27b44 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -548,7 +548,7 @@ public: case EVENT_SLIME_PUDDLE: { std::list targets; - SelectTargetList(targets, 2, SelectTargetMethod::Random, 0.0f, true); + SelectTargetList(targets, 2, SelectTargetMethod::Random, 0, 0.0f, true); if (!targets.empty()) for (std::list::iterator itr = targets.begin(); itr != targets.end(); ++itr) me->CastSpell(*itr, SPELL_SLIME_PUDDLE_TRIGGER, true); @@ -634,7 +634,7 @@ public: if (Is25ManRaid()) { std::list targets; - SelectTargetList(targets, MalleableGooSelector(me), (IsHeroic() ? 3 : 2), SelectTargetMethod::Random); + SelectTargetList(targets, (IsHeroic() ? 3 : 2), SelectTargetMethod::Random, 0, MalleableGooSelector(me)); if (!targets.empty()) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index dceec2f43..0bfe9055b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -315,7 +315,7 @@ public: { std::list targets; uint32 minTargets = RAID_MODE(3, 8, 3, 8); - SelectTargetList(targets, minTargets, SelectTargetMethod::Random, -5.0f, true); + SelectTargetList(targets, minTargets, SelectTargetMethod::Random, 0, -5.0f, true); float minDist = 0.0f; if (targets.size() >= minTargets) minDist = -5.0f; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 88b8e27af..9f07f1b80 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -625,7 +625,7 @@ public: switch (eventId) { case EVENT_DEATH_PLAGUE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true, -SPELL_RECENTLY_INFECTED)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true, true, -SPELL_RECENTLY_INFECTED)) { Talk(EMOTE_DEATH_PLAGUE_WARNING, target); DoCast(target, SPELL_DEATH_PLAGUE); @@ -1175,7 +1175,7 @@ public: Talk(SAY_SVALNA_AGGRO); break; case EVENT_IMPALING_SPEAR: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true, -SPELL_IMPALING_SPEAR)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true, true, -SPELL_IMPALING_SPEAR)) { DoCast(me, SPELL_AETHER_SHIELD); me->AddAura(70203, me); @@ -1361,7 +1361,7 @@ public: Events.ScheduleEvent(EVENT_ARNATH_SMITE, urand(4000, 7000)); break; case EVENT_ARNATH_DOMINATE_MIND: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true, -SPELL_DOMINATE_MIND)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true, true, -SPELL_DOMINATE_MIND)) DoCast(target, SPELL_DOMINATE_MIND); Events.ScheduleEvent(EVENT_ARNATH_DOMINATE_MIND, urand(28000, 37000)); break; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp index 8a2a6b27e..00714018a 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp @@ -177,7 +177,7 @@ public: events.RepeatEvent(20000); break; case EVENT_MUTATING_INJECTION: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, -SPELL_MUTATING_INJECTION)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, true, -SPELL_MUTATING_INJECTION)) { me->CastSpell(target, SPELL_MUTATING_INJECTION, false); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 5617f54da..e362d1a43 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -427,7 +427,7 @@ public: case EVENT_CHAINS: for (uint8 i = 0; i < 3; ++i) { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 200, true, -SPELL_CHAINS_OF_KELTHUZAD)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 200, true, true, -SPELL_CHAINS_OF_KELTHUZAD)) { me->CastSpell(target, SPELL_CHAINS_OF_KELTHUZAD, true); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index 3ea610a5a..37c79a7f3 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -201,7 +201,7 @@ public: Talk(EMOTE_WEB_WRAP); for (uint8 i = 0; i < RAID_MODE(1, 2); ++i) { - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0, true, -SPELL_WEB_WRAP)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0, true, true, -SPELL_WEB_WRAP)) { target->RemoveAura(RAID_MODE(SPELL_WEB_SPRAY_10, SPELL_WEB_SPRAY_25)); uint8 pos = urand(0, 2); diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 32ace18ec..41977c51f 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -1505,7 +1505,7 @@ public: { uint8 i = 0; std::list drakes; - c->AI()->SelectTargetList(drakes, (c->GetMap()->GetSpawnMode() == 0 ? 1 : 3), SelectTargetMethod::Random, 0.0f, false, 57403 /*only drakes have this aura*/); + c->AI()->SelectTargetList(drakes, (c->GetMap()->GetSpawnMode() == 0 ? 1 : 3), SelectTargetMethod::Random, 0, 0.0f, false, true, 57403 /*only drakes have this aura*/); for (std::list::iterator itr = drakes.begin(); itr != drakes.end() && i < 3; ++itr) { DrakeGUID[i++] = (*itr)->GetGUID(); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index 1c1aa9c63..aa21ce401 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -197,7 +197,7 @@ public: events.RepeatEvent(urand(4000, 5000)); break; case EVENT_FROST_TOMB: - if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true) ) + if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true) ) if( !target->HasAura(SPELL_FROST_TOMB_AURA) ) { Talk(SAY_FROST_TOMB_EMOTE, target); diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp index ef760591d..f82b8d35d 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp @@ -191,6 +191,11 @@ public: void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) + { + return; + } + if (Unit* caster = GetCaster()) if (Unit* target = GetTarget()) caster->CastSpell(target, 32830 /*POSSESS*/, true); diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index 0ba0e9668..3cc1a18f5 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -44,18 +44,19 @@ public: struct boss_broggokAI : public ScriptedAI { - boss_broggokAI(Creature* creature) : ScriptedAI(creature) + boss_broggokAI(Creature* creature) : ScriptedAI(creature), summons(me) { instance = creature->GetInstanceScript(); } InstanceScript* instance; - EventMap events; + SummonList summons; bool canAttack; void Reset() override { events.Reset(); + summons.DespawnAll(); me->SetReactState(REACT_PASSIVE); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); @@ -73,10 +74,16 @@ public: void JustSummoned(Creature* summoned) override { + summons.Summon(summoned); + summoned->SetFaction(FACTION_MONSTER_2); - summoned->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - summoned->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - summoned->CastSpell(summoned, SPELL_POISON, false, 0, 0, me->GetGUID()); + summoned->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + summoned->CastSpell(summoned, SPELL_POISON, true, 0, 0, me->GetGUID()); + } + + void SummonedCreatureDespawn(Creature* summon) override + { + summons.Despawn(summon); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index f0ebbe7ee..24e0d42a8 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -132,6 +132,14 @@ public: BossAI::EnterEvadeMode(); } + void SetData(uint32 type, uint32 data) override + { + if (type == 0 && data == 1) + { + summons.DoZoneInCombat(NPC_HELLFIRE_SENTRY); + } + } + void UpdateAI(uint32 /*diff*/) override { if (!me->IsVisible() && summons.size() == 0) @@ -265,6 +273,7 @@ public: void Reset() override { events.Reset(); + _nazanCalled = false; } void EnterEvadeMode(EvadeReason /*why*/) override @@ -288,9 +297,17 @@ public: } } + void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override + { + if (!_nazanCalled && me->HealthBelowPctDamaged(35, damage)) + { + _nazanCalled = true; + me->CastSpell(me, SPELL_CALL_NAZAN, true); + } + } + void JustDied(Unit*) override { - me->CastSpell(me, SPELL_CALL_NAZAN, true); Talk(SAY_DIE); } @@ -316,6 +333,7 @@ public: private: EventMap events; + bool _nazanCalled; }; CreatureAI* GetAI(Creature* creature) const override diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 1e6b558f9..1d96eccb2 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -833,6 +833,9 @@ class spell_mage_master_of_elements : public AuraScript { PreventDefaultAction(); + if (!_spellInfo) + return; + if (Unit* target = GetTarget()) { int32 mana = int32(_spellInfo->CalcPowerCost(target, eventInfo.GetSchoolMask()) / _ticksModifier); diff --git a/src/tools/dbimport/Main.cpp b/src/tools/dbimport/Main.cpp index 644e80a29..0f4ddf5ff 100644 --- a/src/tools/dbimport/Main.cpp +++ b/src/tools/dbimport/Main.cpp @@ -16,13 +16,13 @@ */ #include "Banner.h" -#include "Common.h" #include "Config.h" #include "DatabaseEnv.h" #include "DatabaseLoader.h" #include "IoContext.h" #include "Log.h" #include "MySQLThreading.h" +#include "OpenSSLCrypto.h" #include "Util.h" #include #include @@ -73,11 +73,15 @@ int main(int argc, char** argv) []() { LOG_INFO("dbimport", "> Using configuration file: {}", sConfigMgr->GetFilename()); - LOG_INFO("dbimport", "> Using SSL version: {} (library: {})", OPENSSL_VERSION_TEXT, SSLeay_version(SSLEAY_VERSION)); + LOG_INFO("dbimport", "> Using SSL version: {} (library: {})", OPENSSL_VERSION_TEXT, OpenSSL_version(OPENSSL_VERSION)); LOG_INFO("dbimport", "> Using Boost version: {}.{}.{}", BOOST_VERSION / 100000, BOOST_VERSION / 100 % 1000, BOOST_VERSION % 100); } ); + OpenSSLCrypto::threadsSetup(); + + std::shared_ptr opensslHandle(nullptr, [](void*) { OpenSSLCrypto::threadsCleanup(); }); + // Initialize the database connection if (!StartDB()) return 1;