Merge remote-tracking branch 'origin/master' into 4.3.4
Conflicts: src/server/game/Achievements/AchievementMgr.cpp src/server/game/DataStores/DBCStructure.h src/server/game/Entities/Item/ItemPrototype.h src/server/game/Globals/ObjectMgr.cpp src/server/game/Guilds/Guild.cpp src/server/game/Handlers/ItemHandler.cpp src/server/shared/Packets/ByteBuffer.h
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
-- East Porticullis(195648): close and corrections
|
||||
UPDATE `gameobject` SET `phaseMask`=1,`rotation2`=0.7071065,`rotation3`=0.707107,`spawntimesecs`=7200,`animprogress`=255,`state`=0 WHERE `guid`=151176;
|
||||
|
||||
-- North Portcullis(195650): delete extra spawn and corrections
|
||||
DELETE FROM `gameobject` WHERE `guid`=150080;
|
||||
UPDATE `gameobject` SET `phaseMask`=1,`rotation2`=0.7071065,`rotation3`=0.707107,`spawntimesecs`=7200,`animprogress`=255,`state`=1 WHERE `guid`=151178;
|
||||
|
||||
-- Web Door(195485): corrections
|
||||
UPDATE `gameobject` SET `spawnMask`=15,`rotation2`=0.7071067,`rotation3`=0.7071068,`spawntimesecs`=7200,`animprogress`=255 WHERE `guid`=151192;
|
||||
@@ -0,0 +1 @@
|
||||
DELETE FROM `creature` WHERE `id`=36095;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `item_template` CHANGE unk0 SoundOverrideSubclass tinyint(3) NOT NULL DEFAULT '-1';
|
||||
@@ -0,0 +1,91 @@
|
||||
-- Add support for quest ID: 11008 - "Fires Over Skettis" based on Warpten fix and Nelegalno/shlomi1515 updates
|
||||
-- Also add support for achievement - http://www.wowhead.com/achievement=1275/bombs-away
|
||||
SET @TRIGGER := 22991;
|
||||
SET @EGG := 185549;
|
||||
SET @SKYBLAST := 39844;
|
||||
SET @SUMMEGG := 39843;
|
||||
-- Adds SAI support for Monstrous Kaliri Egg Trigger and the GO
|
||||
UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=@TRIGGER;
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=@TRIGGER AND `source_type`=0;
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid`=@TRIGGER*100 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
|
||||
(@TRIGGER,0,0,0,25,0,100,0,0,0,0,0,11,@SUMMEGG,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Monstrous Kaliri Egg Trigger - On spawn/reset - Summon Monstrous Kaliri Egg (object wild)'),
|
||||
(@TRIGGER,0,1,2,8,0,100,0,@SKYBLAST,0,0,0,33,@TRIGGER,0,0,0,0,0,16,0,0,0,0,0,0,0, 'Monstrous Kaliri Egg Trigger - On Skyguard Blasting Charge hit - Give kill credit to invoker party'),
|
||||
(@TRIGGER,0,2,3,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,20,@EGG,1,0,0,0,0,0, 'Monstrous Kaliri Egg Trigger - Linked with previous event - Despawn'),
|
||||
(@TRIGGER,0,3,0,61,0,100,0,0,0,0,0,80,@TRIGGER*100,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Monstrous Kaliri Egg Trigger - Linked with previous event - Start script 0'),
|
||||
(@TRIGGER*100,9,0,0,0,0,100,0,44000,44000,0,0,11,@SUMMEGG,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Monstrous Kaliri Egg Trigger /On actionlist/ - Action 0 - Cast Summon Monstrous Kaliri Egg');
|
||||
-- Add SAI for Cannonball Stack
|
||||
UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@EGG;
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=1 AND `entryorguid`=@EGG;
|
||||
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
|
||||
(@EGG,1,0,0,38,0,100,0,0,1,0,0,70,45,0,0,0,0,0,1,0,0,0,0,0,0,0,' Monstrous Kaliri Egg - On data set 0 1 - Respawn object /make it reappear after 45 secs/');
|
||||
-- Remove achievement from disabled
|
||||
DELETE FROM `disables` WHERE `sourceType`=4 AND `entry`=3922;
|
||||
-- Insert GO spawns taken directly from already spawned triggers coordinates = no need to sniff them
|
||||
SET @guid := 74685;
|
||||
DELETE FROM `gameobject` WHERE `id`=@EGG;
|
||||
INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`) VALUES
|
||||
(@guid+0,@EGG,530,1,1,-3857.69,3426.25,363.733,-0.087267,180),
|
||||
(@guid+1,@EGG,530,1,1,-3845.16,3332.2,338.59,2.9147,180),
|
||||
(@guid+2,@EGG,530,1,1,-3965.16,3232.7,347.552,-0.122173,180),
|
||||
(@guid+3,@EGG,530,1,1,-3955.86,3222.16,347.503,0.244346,180),
|
||||
(@guid+4,@EGG,530,1,1,-3953.3,3227.94,347.564,-0.244346,180),
|
||||
(@guid+5,@EGG,530,1,1,-4044.66,3287.29,348.362,0.349066,180),
|
||||
(@guid+6,@EGG,530,1,1,-4041.39,3271,346.642,-2.09439,180),
|
||||
(@guid+7,@EGG,530,1,1,-4049.31,3285.9,348.335,1.43117,180),
|
||||
(@guid+8,@EGG,530,1,1,-4076.99,3415.22,334.008,-2.33874,180),
|
||||
(@guid+9,@EGG,530,1,1,-4076.79,3412.91,334.617,-1.0821,180),
|
||||
(@guid+10,@EGG,530,1,1,-4077.92,3412.57,334.768,-0.733038,180),
|
||||
(@guid+11,@EGG,530,1,1,-4107.93,3121.5,357.427,1.01229,180),
|
||||
(@guid+12,@EGG,530,1,1,-4108.31,3123.66,357.633,-0.680679,180),
|
||||
(@guid+13,@EGG,530,1,1,-4110.19,3122.64,358.083,-0.034907,180),
|
||||
(@guid+14,@EGG,530,1,1,-3996.89,3142.12,372.729,3.05433,180),
|
||||
(@guid+15,@EGG,530,1,1,-4109.06,3019.1,352.24,0.261799,180),
|
||||
(@guid+16,@EGG,530,1,1,-4018.35,3076.7,375.29,-0.733038,180),
|
||||
(@guid+17,@EGG,530,1,1,-4184.98,3044.71,352.394,1.81514,180),
|
||||
(@guid+18,@EGG,530,1,1,-4187.52,3040.39,352.071,-0.017453,180),
|
||||
(@guid+19,@EGG,530,1,1,-4189.67,3039.9,352.247,-0.785398,180),
|
||||
(@guid+20,@EGG,530,1,1,-4192.61,3045.1,352.096,3.14159,180),
|
||||
(@guid+21,@EGG,530,1,1,-4192.02,3046.91,352.297,2.46091,180),
|
||||
(@guid+22,@EGG,530,1,1,-4186.47,3047.19,352.316,2.60054,180),
|
||||
(@guid+23,@EGG,530,1,1,-3915.67,2983.4,396.957,-1.91986,180),
|
||||
(@guid+24,@EGG,530,1,1,-3883.21,3004.11,399.738,-1.64061,180),
|
||||
(@guid+25,@EGG,530,1,1,-3883.26,3001.55,399.431,-2.3911,180),
|
||||
(@guid+26,@EGG,530,1,1,-3884.29,3003.3,400.063,-1.88496,180),
|
||||
(@guid+27,@EGG,530,1,1,-3903.02,3095.85,383.783,-2.28638,180),
|
||||
(@guid+28,@EGG,530,1,1,-3898.45,3093.06,383.667,2.53073,180),
|
||||
(@guid+29,@EGG,530,1,1,-3900.75,3100.75,383.795,-0.436333,180),
|
||||
(@guid+30,@EGG,530,1,1,-4107.81,3023.42,352.142,1.06465,180),
|
||||
(@guid+31,@EGG,530,1,1,-4113.58,3022.4,352.157,-0.645772,180),
|
||||
(@guid+32,@EGG,530,1,1,-3893.09,3677.17,374.516,-1.23918,180),
|
||||
(@guid+33,@EGG,530,1,1,-3892.47,3674,374.478,-2.14675,180),
|
||||
(@guid+34,@EGG,530,1,1,-4198.53,3168.91,355.847,-0.383972,180),
|
||||
(@guid+35,@EGG,530,1,1,-4197.01,3170.04,356.117,-1.15192,180),
|
||||
(@guid+36,@EGG,530,1,1,-4196.54,3167.69,356.348,-0.541052,180),
|
||||
(@guid+37,@EGG,530,1,1,-4020.07,3077.84,374.391,1.53589,180),
|
||||
(@guid+38,@EGG,530,1,1,-4019.32,3079.74,375.109,-1.25664,180),
|
||||
(@guid+39,@EGG,530,1,1,-3917.21,2981.62,396.483,0.733038,180),
|
||||
(@guid+40,@EGG,530,1,1,-3918.45,2982.44,397.24,-1.72788,180),
|
||||
(@guid+41,@EGG,530,1,1,-3839.35,3344.85,337.834,2.75762,180),
|
||||
(@guid+42,@EGG,530,1,1,-3835.3,3344.77,338.155,-0.767945,180),
|
||||
(@guid+43,@EGG,530,1,1,-3846.43,3430.29,363.729,0.488692,180),
|
||||
(@guid+44,@EGG,530,1,1,-3864.13,3439.06,363.679,-0.05236,180),
|
||||
(@guid+45,@EGG,530,1,1,-3863.24,3440.42,363.655,0.349066,180),
|
||||
(@guid+46,@EGG,530,1,1,-3846.35,3439.34,363.628,-0.122173,180),
|
||||
(@guid+47,@EGG,530,1,1,-3847.32,3441.39,363.648,0.453786,180),
|
||||
(@guid+48,@EGG,530,1,1,-3686.21,3301,320.513,0.837758,180),
|
||||
(@guid+49,@EGG,530,1,1,-3687.77,3299.85,320.307,2.75762,180),
|
||||
(@guid+50,@EGG,530,1,1,-3692.64,3302.07,320.396,-0.226893,180),
|
||||
(@guid+51,@EGG,530,1,1,-3661.91,3379.15,320.377,0.890118,180),
|
||||
(@guid+52,@EGG,530,1,1,-3660.65,3381.9,320.182,1.18682,180),
|
||||
(@guid+53,@EGG,530,1,1,-3665.48,3380.11,320.365,-0.471239,180),
|
||||
(@guid+54,@EGG,530,1,1,-3685.07,3305.97,320.198,-2.87979,180),
|
||||
(@guid+55,@EGG,530,1,1,-3688.3,3308.93,320.337,1.65806,180),
|
||||
(@guid+56,@EGG,530,1,1,-3690.65,3306.77,320.43,-2.79253,180),
|
||||
(@guid+57,@EGG,530,1,1,-3879.37,3665.22,374.393,-2.30383,180),
|
||||
(@guid+58,@EGG,530,1,1,-3990.42,3139.13,372.878,-2.61799,180),
|
||||
(@guid+59,@EGG,530,1,1,-3991.59,3134.33,372.703,-0.017453,180),
|
||||
(@guid+60,@EGG,530,1,1,-3884.89,3684.98,374.492,-2.53073,180),
|
||||
(@guid+61,@EGG,530,1,1,-3800.8,3789.62,314,6.0912,180),
|
||||
(@guid+62,@EGG,530,1,1,-3799.02,3788.06,314.158,3.19395,180),
|
||||
(@guid+63,@EGG,530,1,1,-3798.91,3790.61,313.852,3.63029,180);
|
||||
@@ -0,0 +1,158 @@
|
||||
-- Quest support for http://www.wowhead.com/quest=11010 "Bombing Run", http://www.wowhead.com/quest=11102 "Bombing Run" /druid/ and http://www.wowhead.com/quest=11023 "Bomb Them Again!"
|
||||
-- Achievement support for http://www.wowhead.com/achievement=1282 and http://www.wowhead.com/achievement=1276,
|
||||
-- Based on Warpten Script
|
||||
SET @SKYGUARD_BOMB := 32456;
|
||||
SET @Run_Dummy := 23118;
|
||||
SET @Explosion_Bunny := 23119;
|
||||
SET @Flak_Cannon := 23076;
|
||||
SET @Flak_Cannon2 := 23082;
|
||||
SET @Fel_Cannon_Dummy := 23077;
|
||||
SET @RUN_MARK := 40196;
|
||||
SET @THROW_BOMB := 40160;
|
||||
SET @EXPLOSION_VISUAL := 40162;
|
||||
SET @See_Invisibility := 40195;
|
||||
SET @Invisibility := 40194;
|
||||
SET @CANNONBALL_STACK := 185861;
|
||||
-- Add class requirements for druid version of "Bombing Run"
|
||||
UPDATE `quest_template` SET `RequiredClasses`=1024 WHERE `Id`=11102;
|
||||
-- Add SAI support for Bombing Run Target Dummy
|
||||
UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=`flags_extra`|128 WHERE `entry`=@Run_Dummy;
|
||||
DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@Run_Dummy;
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@Run_Dummy;
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=@Run_Dummy*100;
|
||||
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
|
||||
(@Run_Dummy,0,0,1,8,0,100,0,@THROW_BOMB,0,1000,1000,33,@Run_Dummy,0,0,0,0,0,16,0,0,0,0,0,0,0, 'Run Target Dummy - On spell Throw Bomb hit - Give kill credit to invoker party'),
|
||||
(@Run_Dummy,0,1,2,61,0,100,0,0,0,0,0,28,@RUN_MARK,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Run Target Dummy - Linked with previous event - Remove auras from hunter mark'),
|
||||
(@Run_Dummy,0,2,3,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,20,@CANNONBALL_STACK,3,0,0,0,0,0, 'Run Target Dummy - Linked with previous event - Data set 0 1 on Cannonball Stack'),
|
||||
(@Run_Dummy,0,3,4,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,19,@Explosion_Bunny,3,0,0,0,0,0, 'Run Target Dummy - Linked with previous event - Data set 0 1 on Explosion Bunny'),
|
||||
(@Run_Dummy,0,4,0,61,0,100,0,0,0,0,0,80,@Run_Dummy*100,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Run Target Dummy - Linked with previous event - Start script 0'),
|
||||
(@Run_Dummy*100,9,0,0,0,0,100,0,29000,29000,0,0,11,@RUN_MARK,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Run Target Dummy - Action 0 - Cast run mark on self');
|
||||
-- Add SAI for Cannonball Stack
|
||||
UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@CANNONBALL_STACK;
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=1 AND `entryorguid`=@CANNONBALL_STACK;
|
||||
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
|
||||
(@CANNONBALL_STACK,1,0,0,38,0,100,0,0,1,0,0,70,30,0,0,0,0,0,1,0,0,0,0,0,0,0,' Cannonball Stack - On data set 0 1 - Respawn object /make it reappear after 30 secs/');
|
||||
-- Add SAI support for Bombing Run Fel Cannon Dummy
|
||||
UPDATE `creature_template` SET `AIName`='SmartAI',`unit_flags`=4,`flags_extra`=`flags_extra`|128 WHERE `entry`=@Fel_Cannon_Dummy;
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@Fel_Cannon_Dummy;
|
||||
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
|
||||
(@Fel_Cannon_Dummy,0,0,0,8,0,100,0,40110,0,4350,5000,11,40119,0,0,0,0,0,19,@Flak_Cannon,5,0,0,0,0,0, 'Fel Cannon Dummy - On spell hit by Cannon trigger - Cast Aggro Burst on Flak Cannon');
|
||||
-- Add SAI support for Bombing Run Flak Cannon
|
||||
UPDATE `creature_template` SET `AIName`='SmartAI',`unit_flags`=`unit_flags`|4|256|131072,`flags_extra`=`flags_extra`|2 WHERE `entry`=@Flak_Cannon;
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@Flak_Cannon;
|
||||
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
|
||||
(@Flak_Cannon,0,0,0,25,0,100,0,0,0,0,0,11,40111,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Flak Cannon - On reset - Cast The Aggro Bunnies'),
|
||||
(@Flak_Cannon,0,1,2,8,0,100,0,41598,0,0,0,66,0,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Flak Cannon - On hit by Bolt Pair - Set orientation to invoker'),
|
||||
(@Flak_Cannon,0,2,0,61,0,100,0,0,0,0,0,11,40109,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Flak Cannon - Linked with previous event - Cast spell The Bolt');
|
||||
-- Add SAI support for Bombing Run Flak Cannon 2 /target bunny/
|
||||
UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=`flags_extra`|128,`InhabitType`=4 WHERE `entry`=@Flak_Cannon2;
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@Flak_Cannon2;
|
||||
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
|
||||
(@Flak_Cannon2,0,0,0,54,0,100,0,0,0,0,0,11,41598,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Flak Cannon 2 - On just summoned - Cast The Bolt Pair on invoker'),
|
||||
(@Flak_Cannon2,0,1,2,8,0,100,0,40109,0,0,0,11,40075,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Flak Cannon 2 - On spell hit Cannon Bolt - Cast on self Fel Flak Fire'),
|
||||
(@Flak_Cannon2,0,2,0,61,0,100,0,0,0,0,0,41,5000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Flak Cannon 2 - Linked with previous event - Despawn in 5 sec');
|
||||
-- Add SAI support for Explosion Bunny
|
||||
UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=`flags_extra`|128,`unit_flags`=0 WHERE `entry`=@Explosion_Bunny;
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@Explosion_Bunny;
|
||||
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
|
||||
(@Explosion_Bunny,0,0,0,38,0,100,0,0,1,0,0,11,@EXPLOSION_VISUAL,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Explosion Bunny - On data set 0 1 - Cast Explosion Visual on self');
|
||||
-- Add conditions
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (@THROW_BOMB,40110,40112,40075);
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry` IN (@THROW_BOMB,40200,41598,40111);
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=@Fel_Cannon_Dummy;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`Comment`) VALUES
|
||||
(17,0,@THROW_BOMB,0,29,0,@Run_Dummy,35,0,0,0,'Throw Bomb requires Run Target Dummy within 35y'),
|
||||
(13,1,@THROW_BOMB,0,31,0,3,@Run_Dummy,0,0,0,'Throw Bomb implicit effect 0 can hit only Run Target Dummy'),
|
||||
(13,1,@THROW_BOMB,0,1,0,@RUN_MARK,0,0,0,0,'Throw Bomb can hit only targets under the aura of 40196'),
|
||||
(17,0,40200,0,9,0,11010,0,0,1,0,'To cast remove see invisibility player must not be on quest 11010'),
|
||||
(17,0,40200,0,9,0,11102,0,0,1,0,'To cast remove see invisibility player must not be on quest 11102'),
|
||||
(17,0,40200,0,9,0,11023,0,0,1,0,'To cast remove see invisibility player must not be on quest 11023'),
|
||||
(13,1,40110,0,31,0,3,23077,0,0,0,'Cannon Trigger implicit targets can be only Fel Cannon Dummies'),
|
||||
(13,1,40110,0,35,0,1,65,2,0,0,'Cannon Trigger implicit hit can happen only on targets under 65 yards range'),
|
||||
(17,0,40111,0,29,0,@Fel_Cannon_Dummy,10,0,1,0,'The Aggro Bunnies caster should not be around Fel Cannon Dummies to cast'),
|
||||
(13,1,40112,0,31,0,4,0,0,0,0,'Bombing Run Dummy aggro check can hit players'),
|
||||
(13,3,40075,0,31,0,4,0,0,0,0,'Fel Flak Fire effect 2 can hit only players'),
|
||||
(22,1,@Fel_Cannon_Dummy,0,1,1,40119,0,0,1,0,'Fel Cannon Dummy event 0 will happen only if target is missing aura from aggro burst');
|
||||
-- Insert addon data
|
||||
DELETE FROM `creature_template_addon` WHERE `entry` IN (@Run_Dummy,@Explosion_Bunny,@Fel_Cannon_Dummy);
|
||||
INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
|
||||
(@Run_Dummy,0,0,0,0,'40196 40194 40195'), -- Mark, See Invisibility, Invisibility
|
||||
(@Explosion_Bunny,0,0,0,0,'40194 40195'), -- See Invisibility, Invisibility
|
||||
(@Fel_Cannon_Dummy,0,0,0,0,'40113'); -- The Aggro Check Aura
|
||||
-- Remove achievement from disabled
|
||||
DELETE FROM `disables` WHERE `sourceType`=4 AND `entry`=3923;
|
||||
-- Add missing spell from dbc
|
||||
DELETE FROM `spell_dbc` WHERE `Id`=40200;
|
||||
INSERT INTO `spell_dbc` (`Id`,`Dispel`,`Mechanic`,`Attributes`,`AttributesEx`,`AttributesEx2`,`AttributesEx3`,`AttributesEx4`,`AttributesEx5`,`AttributesEx6`,`AttributesEx7`,`Stances`,`StancesNot`,`Targets`,`CastingTimeIndex`,`AuraInterruptFlags`,`ProcFlags`,`ProcChance`,`ProcCharges`,`MaxLevel`,`BaseLevel`,`SpellLevel`,`DurationIndex`,`RangeIndex`,`StackAmount`,`EquippedItemClass`,`EquippedItemSubClassMask`,`EquippedItemInventoryTypeMask`,`Effect1`,`Effect2`,`Effect3`,`EffectDieSides1`,`EffectDieSides2`,`EffectDieSides3`,`EffectRealPointsPerLevel1`,`EffectRealPointsPerLevel2`,`EffectRealPointsPerLevel3`,`EffectBasePoints1`,`EffectBasePoints2`,`EffectBasePoints3`,`EffectMechanic1`,`EffectMechanic2`,`EffectMechanic3`,`EffectImplicitTargetA1`,`EffectImplicitTargetA2`,`EffectImplicitTargetA3`,`EffectImplicitTargetB1`,`EffectImplicitTargetB2`,`EffectImplicitTargetB3`,`EffectRadiusIndex1`,`EffectRadiusIndex2`,`EffectRadiusIndex3`,`EffectApplyAuraName1`,`EffectApplyAuraName2`,`EffectApplyAuraName3`,`EffectAmplitude1`,`EffectAmplitude2`,`EffectAmplitude3`,`EffectMultipleValue1`,`EffectMultipleValue2`,`EffectMultipleValue3`,`EffectMiscValue1`,`EffectMiscValue2`,`EffectMiscValue3`,`EffectMiscValueB1`,`EffectMiscValueB2`,`EffectMiscValueB3`,`EffectTriggerSpell1`,`EffectTriggerSpell2`,`EffectTriggerSpell3`,`EffectSpellClassMaskA1`,`EffectSpellClassMaskA2`,`EffectSpellClassMaskA3`,`EffectSpellClassMaskB1`,`EffectSpellClassMaskB2`,`EffectSpellClassMaskB3`,`EffectSpellClassMaskC1`,`EffectSpellClassMaskC2`,`EffectSpellClassMaskC3`,`MaxTargetLevel`,`SpellFamilyName`,`SpellFamilyFlags1`,`SpellFamilyFlags2`,`SpellFamilyFlags3`,`MaxAffectedTargets`,`DmgClass`,`PreventionType`,`DmgMultiplier1`,`DmgMultiplier2`,`DmgMultiplier3`,`AreaGroupId`,`SchoolMask`,`Comment`) VALUES
|
||||
(40200,0,0,256,0,0,0,0,0,0,0,0,0,0,1,0,0,101,0,0,0,0,26,1,0,-1,0,0,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,'Bombing Run: See Invisibility Aura Remover');
|
||||
-- Spell area - Check to cast remove aura /against see invisibility aura/, if having it and not on quest
|
||||
DELETE FROM `spell_area` WHERE `spell`=40200;
|
||||
INSERT INTO `spell_area` (`spell`,`area`,`quest_start`,`quest_start_active`,`quest_end`,`aura_spell`,`racemask`,`gender`,`autocast`) VALUES
|
||||
(40200,3522,0,0,0,@See_Invisibility,0,2,1);
|
||||
-- Insert cannonballs spawns /based on sniffs/
|
||||
SET @guid := 14811;
|
||||
DELETE FROM `gameobject` WHERE `guid` BETWEEN @guid+0 AND @guid+13;
|
||||
INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
|
||||
(@guid+0,@CANNONBALL_STACK,530,1,1,2825.11,7024.05,369.982,5.69617,0,0,0.289313,-0.957235,300,0,1),
|
||||
(@guid+1,@CANNONBALL_STACK,530,1,1,2938.26,7094.72,369.413,2.78314,0,0,0.983982,0.178267,300,0,1),
|
||||
(@guid+2,@CANNONBALL_STACK,530,1,1,2924.84,7031.46,367.857,4.26205,0,0,0.847134,-0.53138,300,0,1),
|
||||
(@guid+3,@CANNONBALL_STACK,530,1,1,2938.02,7015.59,365.75,3.65778,0,0,0.966879,-0.255237,300,0,1),
|
||||
(@guid+4,@CANNONBALL_STACK,530,1,1,2998.57,7043.55,368.539,5.91266,0,0,0.184206,-0.982888,300,0,1),
|
||||
(@guid+5,@CANNONBALL_STACK,530,1,1,2982,7054.94,368.32,4.99766,0,0,0.599411,-0.800442,300,0,1),
|
||||
(@guid+6,@CANNONBALL_STACK,530,1,1,2978.73,6889.19,369.701,0.689745,0,0,0.338077,0.941119,300,0,1),
|
||||
(@guid+7,@CANNONBALL_STACK,530,1,1,2941.56,6827.17,367.3,4.08109,0,0,0.891683,-0.452661,300,0,1),
|
||||
(@guid+8,@CANNONBALL_STACK,530,1,1,2953.55,6859.3,369.954,6.14433,0,0,0.0693712,-0.997591,300,0,1),
|
||||
(@guid+9,@CANNONBALL_STACK,530,1,1,3023.13,6799.74,374.46,1.58666,0,0,0.712695,0.701474,300,0,1),
|
||||
(@guid+10,@CANNONBALL_STACK,530,1,1,3028.3,6824.84,373.591,5.0275,0,0,0.587401,-0.809296,300,0,1),
|
||||
(@guid+11,@CANNONBALL_STACK,530,1,1,3022.15,6859.05,369.546,3.44885,0,0,0.988222,-0.153025,300,0,1),
|
||||
(@guid+12,@CANNONBALL_STACK,530,1,1,3016.28,6876.11,370.188,3.47791,0,0,0.985895,-0.167365,300,0,1),
|
||||
(@guid+13,@CANNONBALL_STACK,530,1,1,2940.6,7106.65,370.123,0.88561,0,0,0.428475,0.903553,300,0,1);
|
||||
-- Insert spawns for Fel Flak Cannons, Run Target Dummies and Explosion Bunnies /based on sniffs/
|
||||
SET @guid := 85656;
|
||||
DELETE FROM `creature` WHERE `guid` BETWEEN @guid+0 AND @guid+44;
|
||||
INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES
|
||||
(@guid+0,23118,530,1,1,0,0,2764.71,7024.45,370.203,0,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+1,23119,530,1,1,0,0,2764.71,7024.45,370.203,0,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+2,23118,530,1,1,0,0,2786.61,7036.28,370.686,0,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+3,23119,530,1,1,0,0,2786.61,7036.28,370.686,0,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+4,23118,530,1,1,0,0,2824.71,7044.79,369.877,0,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+5,23119,530,1,1,0,0,2824.71,7044.79,369.877,0,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+6,23076,530,1,1,0,0,2775.81,7030.75,370.337,1.85606,300,0,0,22140,0,0,0,0,0),
|
||||
(@guid+7,23076,530,1,1,0,0,2933.28,7103.93,369.209,2.58129,300,0,0,21543,0,0,0,0,0),
|
||||
(@guid+8,23119,530,1,1,0,0,2940.82,7107.17,370.115,4.65944,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+9,23118,530,1,1,0,0,2940.82,7107.17,370.115,4.65944,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+10,23118,530,1,1,0,0,2825.11,7024.05,369.982,5.69617,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+11,23119,530,1,1,0,0,2825.11,7024.05,369.982,5.69617,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+12,23076,530,1,1,0,0,2834.14,7018.43,368.459,5.42992,300,0,0,21543,0,0,0,0,0),
|
||||
(@guid+13,23119,530,1,1,0,0,2938.84,7094.48,371.493,0.242375,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+14,23118,530,1,1,0,0,2938.84,7094.48,371.493,0.242375,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+15,23076,530,1,1,0,0,2925.49,7021.72,367.007,3.59446,300,0,0,22140,0,0,0,0,0),
|
||||
(@guid+16,23119,530,1,1,0,0,2924.84,7031.46,367.857,4.26205,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+17,23118,530,1,1,0,0,2924.84,7031.46,367.857,4.26205,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+18,23119,530,1,1,0,0,2938.02,7015.59,366.54,3.65778,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+19,23118,530,1,1,0,0,2938.02,7015.59,366.54,3.65778,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+20,23076,530,1,1,0,0,2994.48,7039.91,369.42,5.26077,300,0,0,22140,0,0,0,0,0),
|
||||
(@guid+21,23119,530,1,1,0,0,2998.57,7043.55,368.539,5.91266,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+22,23118,530,1,1,0,0,2998.57,7043.55,368.539,5.91266,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+23,23119,530,1,1,0,0,2982,7054.94,368.82,4.99766,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+24,23118,530,1,1,0,0,2982,7054.94,368.82,4.99766,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+25,23076,530,1,1,0,0,2982.59,6886.5,370.082,0.831123,300,0,0,22140,0,0,0,0,0),
|
||||
(@guid+26,23118,530,1,1,0,0,2978.74,6889.12,371.288,0.897875,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+27,23119,530,1,1,0,0,2978.74,6889.12,371.288,0.897875,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+28,23118,530,1,1,0,0,2941.56,6827.17,367.3,4.54054,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+29,23119,530,1,1,0,0,2941.56,6827.17,367.3,4.54054,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+30,23076,530,1,1,0,0,2938.19,6818.01,366.959,3.31926,300,0,0,21543,0,0,0,0,0),
|
||||
(@guid+31,23076,530,1,1,0,0,2946.3,6875.71,370.04,3.2148,300,0,0,22140,0,0,0,0,0),
|
||||
(@guid+32,23118,530,1,1,0,0,2953.55,6859.3,369.954,6.14433,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+33,23119,530,1,1,0,0,2953.55,6859.3,369.954,6.14433,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+34,23119,530,1,1,0,0,3023.13,6799.74,374.46,1.58666,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+35,23118,530,1,1,0,0,3023.13,6799.74,374.46,1.58666,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+36,23076,530,1,1,0,0,3028.22,6807.09,374.075,5.94641,300,0,0,22140,0,0,0,0,0),
|
||||
(@guid+37,23118,530,1,1,0,0,3028.3,6824.84,373.591,5.0275,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+38,23119,530,1,1,0,0,3028.3,6824.84,373.591,5.0275,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+39,23119,530,1,1,0,0,3022.15,6859.05,369.546,3.44885,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+40,23118,530,1,1,0,0,3022.15,6859.05,369.546,3.44885,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+41,23076,530,1,1,0,0,3022.21,6864.61,369.93,0.100696,300,0,0,22140,0,0,0,0,0),
|
||||
(@guid+42,23118,530,1,1,0,0,3016.28,6876.11,370.188,3.47791,300,0,0,42,0,0,0,33554432,0),
|
||||
(@guid+43,23119,530,1,1,0,0,3016.28,6876.11,370.188,3.47791,300,0,0,6986,0,0,0,33554432,0),
|
||||
(@guid+44,23076,530,1,1,0,0,2816.74,7057.61,369.779,1.4555,300,0,0,21543,0,0,0,0,0);
|
||||
@@ -0,0 +1,14 @@
|
||||
-- Add spell script name for Fires Over Skettis and Bombing Run quests
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=40113;
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=40160;
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=39844;
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=40056;
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=40112;
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=40119;
|
||||
INSERT INTO `spell_script_names` VALUES
|
||||
(39844,'spell_q11010_q11102_q11023_q11008_check_fly_mount'),
|
||||
(40160,'spell_q11010_q11102_q11023_q11008_check_fly_mount'),
|
||||
(40113,'spell_q11010_q11102_q11023_aggro_check_aura'),
|
||||
(40056,'spell_q11010_q11102_q11023_choose_loc'),
|
||||
(40112,'spell_q11010_q11102_q11023_aggro_check'),
|
||||
(40119,'spell_q11010_q11102_q11023_aggro_burst');
|
||||
@@ -0,0 +1,15 @@
|
||||
DELETE FROM `spell_target_position` WHERE `id` IN (60323,60324,60325,60326,60327,60328,60329,60330,60331,60332,60333,60334,60335);
|
||||
INSERT INTO `spell_target_position` (`id`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES
|
||||
(60323,0,-5506.339,-704.348,392.686,0.595), -- Steelgrills Depot
|
||||
(60324,0,-9470.760,3.909,49.794,4.802), -- Lions Pride Inn, Goldshire
|
||||
(60325,1,-3721.306,-4411.906,25.247,0.831), -- Theramore isle, Dustwallow Marsh
|
||||
(60326,0,286.314,-2184.086,122.612,2.271), -- Aerie Peak, The Hinterlands
|
||||
(60327,1,6395.708,433.256,33.260,0.566), -- Auberdine, Darkshore
|
||||
(60328,0,-14412.923,692.017,22.248,1.231), -- Boote Bay
|
||||
(60329,1,-7135.717,-3787.769,8.799,5.992), -- Tanaris, Gadgetzan
|
||||
(60330,0,-10336.138,-2934.057,116.723,4.523), -- Swamp of Sorrows, Z coord is intended
|
||||
(60331,0,-10446.900,-3261.909,20.179,5.875), -- Stonard, Swamp of Sorrows
|
||||
(60332,0,-103.988,-902.795,55.534,5.924), -- Tarren Mill, Hillsbrad Foothils
|
||||
(60333,0,1804.836,196.322,70.399,1.572), -- Undercity
|
||||
(60334,1,-1060.266,23.137,141.455,5.967), -- Thunder Bluff
|
||||
(60335,1,-506.224,-2590.084,113.150,2.445); -- Barrens, The Crossroads
|
||||
@@ -0,0 +1,12 @@
|
||||
DELETE FROM `command` WHERE `name` = 'cheat status';
|
||||
INSERT INTO `command` (`name`, `security`, `help`) VALUES
|
||||
('cheat status', 2, 'Syntax: .cheat status \n\nShows the cheats you currently have enabled.');
|
||||
|
||||
DELETE FROM `trinity_string` WHERE `entry` BETWEEN 357 AND 362;
|
||||
INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES
|
||||
(357, 'Cheat Command Status:'),
|
||||
(358, 'Godmode: %s.'),
|
||||
(359, 'Casttime: %s.'),
|
||||
(360, 'Cooldown: %s.'),
|
||||
(361, 'Power: %s.'),
|
||||
(362, 'Waterwalk: %s.');
|
||||
@@ -870,7 +870,7 @@ void AchievementMgr<Guild>::Reset()
|
||||
data.WriteByteSeq(guid[6]);
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data.WriteByteSeq(guid[7]);
|
||||
data << uint32(secsToTimeBitFields(iter->second.date));
|
||||
data.AppendPackedTime(iter->second.date);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
data.WriteByteSeq(guid[2]);
|
||||
SendPacket(&data);
|
||||
@@ -928,7 +928,7 @@ void AchievementMgr<T>::SendAchievementEarned(AchievementEntry const* achievemen
|
||||
WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8+4+8);
|
||||
data.append(GetOwner()->GetPackGUID());
|
||||
data << uint32(achievement->ID);
|
||||
data << uint32(secsToTimeBitFields(time(NULL)));
|
||||
data.AppendPackedTime(time(NULL));
|
||||
data << uint32(0); // does not notify player ingame
|
||||
GetOwner()->SendMessageToSetInRange(&data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), true);
|
||||
}
|
||||
@@ -949,7 +949,7 @@ void AchievementMgr<Guild>::SendAchievementEarned(AchievementEntry const* achiev
|
||||
data.WriteBit(guid[5]);
|
||||
|
||||
data.WriteByteSeq(guid[2]);
|
||||
data << uint32(secsToTimeBitFields(time(NULL)));
|
||||
data.AppendPackedTime(time(NULL));
|
||||
data.WriteByteSeq(guid[0]);
|
||||
data.WriteByteSeq(guid[4]);
|
||||
data.WriteByteSeq(guid[1]);
|
||||
@@ -981,7 +981,7 @@ void AchievementMgr<Player>::SendCriteriaUpdate(AchievementCriteriaEntry const*
|
||||
data << uint32(0);
|
||||
else
|
||||
data << uint32(timedCompleted ? 0 : 1); // this are some flags, 1 is for keeping the counter at 0 in client
|
||||
data << uint32(secsToTimeBitFields(progress->date));
|
||||
data.AppendPackedTime(progress->date);
|
||||
data << uint32(timeElapsed); // time elapsed in seconds
|
||||
data << uint32(0); // unk
|
||||
SendPacket(&data);
|
||||
@@ -2021,7 +2021,7 @@ void AchievementMgr<T>::SendAllAchievementData(Player* /*receiver*/) const
|
||||
criteriaData.WriteByteSeq(guid[7]);
|
||||
criteriaData.WriteByteSeq(counter[7]);
|
||||
criteriaData << uint32(0); // timer 1
|
||||
criteriaData << uint32(secsToTimeBitFields(itr->second.date)); // criteria date
|
||||
criteriaData.AppendPackedTime(itr->second.date); // criteria date
|
||||
criteriaData.WriteByteSeq(guid[1]);
|
||||
}
|
||||
|
||||
@@ -2035,7 +2035,7 @@ void AchievementMgr<T>::SendAllAchievementData(Player* /*receiver*/) const
|
||||
continue;
|
||||
|
||||
data << uint32(itr->first);
|
||||
data << uint32(secsToTimeBitFields(itr->second.date));
|
||||
data->AppendPackedTime(itr->second.date);
|
||||
}
|
||||
|
||||
SendPacket(&data);
|
||||
@@ -2048,7 +2048,7 @@ void AchievementMgr<Guild>::SendAllAchievementData(Player* receiver) const
|
||||
data.WriteBits(m_completedAchievements.size(), 23);
|
||||
for (CompletedAchievementMap::const_iterator itr = m_completedAchievements.begin(); itr != m_completedAchievements.end(); ++itr)
|
||||
{
|
||||
data << uint32(secsToTimeBitFields(itr->second.date));
|
||||
data->AppendPackedTime(itr->second.date);
|
||||
data << uint32(itr->first);
|
||||
}
|
||||
|
||||
@@ -2140,7 +2140,7 @@ void AchievementMgr<Player>::SendAchievementInfo(Player* receiver, uint32 /*achi
|
||||
continue;
|
||||
|
||||
data << uint32(itr->first);
|
||||
data << uint32(secsToTimeBitFields(itr->second.date));
|
||||
data.AppendPackedTime(itr->second.date);
|
||||
}
|
||||
|
||||
data.WriteByteSeq(guid[7]);
|
||||
|
||||
@@ -44,7 +44,7 @@ struct ItemEntry
|
||||
uint32 ID; // 0
|
||||
uint32 Class; // 1
|
||||
uint32 SubClass; // 2
|
||||
int32 Unk0; // 3
|
||||
int32 SoundOverrideSubclass; // 3
|
||||
int32 Material; // 4
|
||||
uint32 DisplayId; // 5
|
||||
uint32 InventoryType; // 6
|
||||
|
||||
@@ -619,7 +619,7 @@ struct ItemTemplate
|
||||
uint32 ItemId;
|
||||
uint32 Class; // id from ItemClass.dbc
|
||||
uint32 SubClass; // id from ItemSubClass.dbc
|
||||
int32 Unk0;
|
||||
int32 SoundOverrideSubclass; // < 0: id from ItemSubClass.dbc, used to override weapon sound from actual SubClass
|
||||
std::string Name1;
|
||||
uint32 DisplayInfoID; // id from ItemDisplayInfo.dbc
|
||||
uint32 Quality;
|
||||
|
||||
@@ -22361,7 +22361,7 @@ void Player::SendInitialPacketsBeforeAddToMap()
|
||||
SendEquipmentSetList();
|
||||
|
||||
data.Initialize(SMSG_LOGIN_SETTIMESPEED, 4 + 4 + 4);
|
||||
data << uint32(secsToTimeBitFields(sWorld->GetGameTime()));
|
||||
data.AppendPackedTime(sWorld->GetGameTime());
|
||||
data << float(0.01666667f); // game speed
|
||||
data << uint32(0); // added in 3.1.2
|
||||
GetSession()->SendPacket(&data);
|
||||
|
||||
@@ -859,7 +859,7 @@ void GameEventMgr::LoadFromDB()
|
||||
|
||||
if (!result)
|
||||
{
|
||||
sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 battleground holidays in game events. DB table `game_event_condition` is empty.");
|
||||
sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 battleground holidays in game events. DB table `game_event_battleground_holiday` is empty.");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -2249,7 +2249,7 @@ void ObjectMgr::LoadItemTemplates()
|
||||
itemTemplate.ItemId = itemId;
|
||||
itemTemplate.Class = db2Data->Class;
|
||||
itemTemplate.SubClass = db2Data->SubClass;
|
||||
itemTemplate.Unk0 = db2Data->Unk0;
|
||||
itemTemplate.SoundOverrideSubclass = db2Data->SoundOverrideSubclass;
|
||||
itemTemplate.Name1 = sparse->Name;
|
||||
itemTemplate.DisplayInfoID = db2Data->DisplayId;
|
||||
itemTemplate.Quality = sparse->Quality;
|
||||
@@ -2348,7 +2348,7 @@ void ObjectMgr::LoadItemTemplates()
|
||||
|
||||
// Load missing items from item_template AND overwrite data from Item-sparse.db2 (item_template is supposed to contain Item-sparse.adb data)
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13
|
||||
QueryResult result = WorldDatabase.Query("SELECT entry, Class, SubClass, Unk0, Name, DisplayId, Quality, Flags, FlagsExtra, Unk430_1, Unk430_2, BuyCount, BuyPrice, SellPrice, "
|
||||
QueryResult result = WorldDatabase.Query("SELECT entry, Class, SubClass, SoundOverrideSubclass, Name, DisplayId, Quality, Flags, FlagsExtra, Unk430_1, Unk430_2, BuyCount, BuyPrice, SellPrice, "
|
||||
// 14 15 16 17 18 19 20 21
|
||||
"InventoryType, AllowableClass, AllowableRace, ItemLevel, RequiredLevel, RequiredSkill, RequiredSkillRank, RequiredSpell, "
|
||||
// 22 23 24 25 26 27 28
|
||||
@@ -2401,7 +2401,7 @@ void ObjectMgr::LoadItemTemplates()
|
||||
itemTemplate.ItemId = itemId;
|
||||
itemTemplate.Class = uint32(fields[1].GetUInt8());
|
||||
itemTemplate.SubClass = uint32(fields[2].GetUInt8());
|
||||
itemTemplate.Unk0 = fields[3].GetInt32();
|
||||
itemTemplate.SoundOverrideSubclass = fields[3].GetInt32();
|
||||
itemTemplate.Name1 = fields[4].GetString();
|
||||
itemTemplate.DisplayInfoID = fields[5].GetUInt32();
|
||||
itemTemplate.Quality = uint32(fields[6].GetUInt8());
|
||||
|
||||
@@ -1304,7 +1304,7 @@ void Guild::HandleRoster(WorldSession* session /*= NULL*/)
|
||||
data.WriteString(m_motd);
|
||||
data << uint32(m_accountsNumber);
|
||||
data << uint32(sWorld->getIntConfig(CONFIG_GUILD_WEEKLY_REP_CAP));
|
||||
data << uint32(secsToTimeBitFields(m_createdDate));
|
||||
data.AppendPackedTime(m_createdDate);
|
||||
data << uint32(0);
|
||||
|
||||
if (session)
|
||||
@@ -3345,7 +3345,7 @@ void Guild::GuildNewsLog::BuildNewsData(uint32 id, GuildNewsEntry& guildNew, Wor
|
||||
|
||||
data << uint32(id);
|
||||
data << uint32(guildNew.EventType);
|
||||
data << uint32(secsToTimeBitFields(guildNew.Date));
|
||||
data.AppendPackedTime(guildNew.Date);
|
||||
}
|
||||
|
||||
void Guild::GuildNewsLog::BuildNewsData(WorldPacket& data)
|
||||
@@ -3389,6 +3389,6 @@ void Guild::GuildNewsLog::BuildNewsData(WorldPacket& data)
|
||||
|
||||
data << uint32(it->first);
|
||||
data << uint32(it->second.EventType);
|
||||
data << uint32(secsToTimeBitFields(it->second.Date));
|
||||
data.AppendPackedTime(it->second.Date);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,9 +90,9 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket& /*recvData*/)
|
||||
if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(*it))
|
||||
{
|
||||
data << uint64(*it);
|
||||
data << calendarEvent->GetTitle().c_str();
|
||||
data << calendarEvent->GetTitle();
|
||||
data << uint32(calendarEvent->GetType());
|
||||
data << uint32(calendarEvent->GetTime());
|
||||
data.AppendPackedTime(calendarEvent->GetTime());
|
||||
data << uint32(calendarEvent->GetFlags());
|
||||
data << uint32(calendarEvent->GetDungeonId());
|
||||
data.appendPackGUID(calendarEvent->GetCreatorGUID());
|
||||
@@ -111,7 +111,7 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket& /*recvData*/)
|
||||
}
|
||||
|
||||
data << uint32(cur_time); // server time
|
||||
data << uint32(secsToTimeBitFields(cur_time)); // server time
|
||||
data.AppendPackedTime(cur_time); // server time
|
||||
|
||||
uint32 counter = 0;
|
||||
size_t p_counter = data.wpos();
|
||||
@@ -240,7 +240,10 @@ void WorldSession::HandleCalendarAddEvent(WorldPacket& recvData)
|
||||
uint8 rank;
|
||||
|
||||
recvData >> title >> description >> type >> repeatable >> maxInvites;
|
||||
recvData >> dungeonId >> eventPackedTime >> unkPackedTime >> flags;
|
||||
recvData >> dungeonId;
|
||||
recvData.ReadPackedTime(eventPackedTime);
|
||||
recvData.ReadPackedTime(unkPackedTime);
|
||||
recvData >> flags;
|
||||
|
||||
if (!(flags & CALENDAR_FLAG_WITHOUT_INVITES))
|
||||
{
|
||||
@@ -317,7 +320,9 @@ void WorldSession::HandleCalendarUpdateEvent(WorldPacket& recvData)
|
||||
|
||||
recvData >> eventId >> inviteId >> title >> description >> type;
|
||||
recvData >> repeatable >> maxInvites >> dungeonId;
|
||||
recvData >> eventPackedTime >> timeZoneTime >> flags;
|
||||
recvData.ReadPackedTime(eventPackedTime);
|
||||
recvData.ReadPackedTime(timeZoneTime);
|
||||
recvData >> flags;
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_CALENDAR_UPDATE_EVENT [" UI64FMTD "] EventId [" UI64FMTD
|
||||
"], InviteId [" UI64FMTD "] Title %s, Description %s, type %u "
|
||||
@@ -372,7 +377,8 @@ void WorldSession::HandleCalendarCopyEvent(WorldPacket& recvData)
|
||||
uint64 inviteId;
|
||||
uint32 time;
|
||||
|
||||
recvData >> eventId >> inviteId >> time;
|
||||
recvData >> eventId >> inviteId;
|
||||
recvData.ReadPackedTime(time);
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_CALENDAR_COPY_EVENT [" UI64FMTD "], EventId [" UI64FMTD
|
||||
"] inviteId [" UI64FMTD "] Time: %u", guid, eventId, inviteId, time);
|
||||
|
||||
@@ -607,15 +613,15 @@ void WorldSession::SendCalendarEvent(CalendarEvent const& calendarEvent, Calenda
|
||||
data << uint8(sendEventType);
|
||||
data.appendPackGUID(calendarEvent.GetCreatorGUID());
|
||||
data << uint64(eventId);
|
||||
data << calendarEvent.GetTitle().c_str();
|
||||
data << calendarEvent.GetDescription().c_str();
|
||||
data << calendarEvent.GetTitle();
|
||||
data << calendarEvent.GetDescription();
|
||||
data << uint8(calendarEvent.GetType());
|
||||
data << uint8(calendarEvent.GetRepeatable());
|
||||
data << uint32(calendarEvent.GetMaxInvites());
|
||||
data << int32(calendarEvent.GetDungeonId());
|
||||
data << uint32(calendarEvent.GetFlags());
|
||||
data << uint32(calendarEvent.GetTime());
|
||||
data << uint32(calendarEvent.GetTimeZoneTime());
|
||||
data.AppendPackedTime(calendarEvent.GetTime());
|
||||
data.AppendPackedTime(calendarEvent.GetTimeZoneTime());
|
||||
data << uint32(calendarEvent.GetGuildId());
|
||||
|
||||
CalendarInviteIdList const& invites = calendarEvent.GetInviteIdList();
|
||||
@@ -635,7 +641,7 @@ void WorldSession::SendCalendarEvent(CalendarEvent const& calendarEvent, Calenda
|
||||
data << uint8(calendarEvent.GetGuildId() != 0);
|
||||
data << uint64(invite->GetInviteId());
|
||||
data << uint32(invite->GetStatusTime());
|
||||
data << invite->GetText().c_str();
|
||||
data << invite->GetText();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -692,7 +698,7 @@ void WorldSession::SendCalendarEventInviteAlert(CalendarEvent const& calendarEve
|
||||
WorldPacket data(SMSG_CALENDAR_EVENT_INVITE_ALERT);
|
||||
data << uint64(eventId);
|
||||
data << calendarEvent.GetTitle().c_str();
|
||||
data << uint32(calendarEvent.GetTime());
|
||||
data.AppendPackedTime(calendarEvent.GetTime());
|
||||
data << uint32(calendarEvent.GetFlags());
|
||||
data << uint32(calendarEvent.GetType());
|
||||
data << uint32(calendarEvent.GetDungeonId());
|
||||
@@ -717,9 +723,9 @@ void WorldSession::SendCalendarEventUpdateAlert(CalendarEvent const& calendarEve
|
||||
calendarEvent.GetTitle().size() + calendarEvent.GetDescription().size() + 1 + 4 + 4);
|
||||
data << uint8(sendEventType);
|
||||
data << uint64(eventId);
|
||||
data << uint32(calendarEvent.GetTime());
|
||||
data.AppendPackedTime(calendarEvent.GetTime());
|
||||
data << uint32(calendarEvent.GetFlags());
|
||||
data << uint32(calendarEvent.GetTime());
|
||||
data.AppendPackedTime(calendarEvent.GetTime());
|
||||
data << uint8(calendarEvent.GetType());
|
||||
data << uint32(calendarEvent.GetDungeonId());
|
||||
data << calendarEvent.GetTitle().c_str();
|
||||
@@ -734,7 +740,7 @@ void WorldSession::SendCalendarEventRemovedAlert(CalendarEvent const& calendarEv
|
||||
{
|
||||
uint64 guid = _player->GetGUID();
|
||||
uint64 eventId = calendarEvent.GetEventId();
|
||||
uint32 eventTime = (calendarEvent.GetTime());
|
||||
uint32 eventTime = calendarEvent.GetTime();
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "SMSG_CALENDAR_EVENT_REMOVED_ALERT [" UI64FMTD "] EventId ["
|
||||
UI64FMTD "] Time %u", guid, eventId, eventTime);
|
||||
@@ -742,7 +748,7 @@ void WorldSession::SendCalendarEventRemovedAlert(CalendarEvent const& calendarEv
|
||||
WorldPacket data(SMSG_CALENDAR_EVENT_REMOVED_ALERT, 1 + 8 + 1);
|
||||
data << uint8(1); // FIXME: If true does not SignalEvent(EVENT_CALENDAR_ACTION_PENDING)
|
||||
data << uint64(eventId);
|
||||
data << uint32(eventTime);
|
||||
data.AppendPackedTime(eventTime);
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
@@ -752,11 +758,11 @@ void WorldSession::SendCalendarEventStatus(CalendarEvent const& calendarEvent, C
|
||||
uint64 eventId = calendarEvent.GetEventId();
|
||||
uint64 inviteId = invite.GetInviteId();
|
||||
uint64 invitee = invite.GetInvitee();
|
||||
uint32 eventTime = (calendarEvent.GetTime());
|
||||
uint32 eventTime = calendarEvent.GetTime();
|
||||
uint32 flags = calendarEvent.GetFlags();
|
||||
uint8 status = invite.GetStatus();
|
||||
uint8 rank = invite.GetRank();
|
||||
uint32 statusTime = secsToTimeBitFields(invite.GetStatusTime());
|
||||
uint32 statusTime = invite.GetStatusTime();
|
||||
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "SMSG_CALENDAR_EVENT_STATUS [" UI64FMTD "] EventId ["
|
||||
@@ -768,11 +774,11 @@ void WorldSession::SendCalendarEventStatus(CalendarEvent const& calendarEvent, C
|
||||
WorldPacket data(SMSG_CALENDAR_EVENT_STATUS, 8 + 8 + 4 + 4 + 1 + 1 + 4);
|
||||
data.appendPackGUID(invitee);
|
||||
data << uint64(eventId);
|
||||
data << uint32(eventTime);
|
||||
data.AppendPackedTime(eventTime);
|
||||
data << uint32(flags);
|
||||
data << uint8(status);
|
||||
data << uint8(rank);
|
||||
data << uint32(statusTime);
|
||||
data.AppendPackedTime(statusTime);
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
@@ -801,7 +807,7 @@ void WorldSession::SendCalendarEventInviteRemoveAlert(CalendarEvent const& calen
|
||||
{
|
||||
uint64 guid = _player->GetGUID();
|
||||
uint64 eventId = calendarEvent.GetEventId();
|
||||
uint32 eventTime = (calendarEvent.GetTime());
|
||||
uint32 eventTime = calendarEvent.GetTime();
|
||||
uint32 flags = calendarEvent.GetFlags();
|
||||
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT ["
|
||||
@@ -810,7 +816,7 @@ void WorldSession::SendCalendarEventInviteRemoveAlert(CalendarEvent const& calen
|
||||
|
||||
WorldPacket data(SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT, 8 + 4 + 4 + 1);
|
||||
data << uint64(eventId);
|
||||
data << uint32(eventTime);
|
||||
data.AppendPackedTime(eventTime);
|
||||
data << uint32(flags);
|
||||
data << uint8(status);
|
||||
SendPacket(&data);
|
||||
@@ -877,7 +883,7 @@ void WorldSession::SendCalendarRaidLockout(InstanceSave const* save, bool add)
|
||||
if (add)
|
||||
{
|
||||
data.SetOpcode(SMSG_CALENDAR_RAID_LOCKOUT_ADDED);
|
||||
data << uint32(secsToTimeBitFields(currTime));
|
||||
data.AppendPackedTime(currTime);
|
||||
}
|
||||
|
||||
data << uint32(save->GetMapId());
|
||||
@@ -899,7 +905,7 @@ void WorldSession::SendCalendarRaidLockoutUpdated(InstanceSave const* save)
|
||||
time_t cur_time = time_t(time(NULL));
|
||||
|
||||
WorldPacket data(SMSG_CALENDAR_RAID_LOCKOUT_UPDATED, 4 + 4 + 4 + 4 + 8);
|
||||
data << secsToTimeBitFields(cur_time);
|
||||
data.AppendPackedTime(cur_time);
|
||||
data << uint32(save->GetMapId());
|
||||
data << uint32(save->GetDifficulty());
|
||||
data << uint32(0); // Amount of seconds that has changed to the reset time
|
||||
|
||||
@@ -299,7 +299,7 @@ void WorldSession::SendItemDb2Reply(uint32 entry)
|
||||
buff << uint32(entry);
|
||||
buff << uint32(proto->Class);
|
||||
buff << uint32(proto->SubClass);
|
||||
buff << int32(proto->Unk0);
|
||||
buff << int32(proto->SoundOverrideSubclass);
|
||||
buff << uint32(proto->Material);
|
||||
buff << uint32(proto->DisplayInfoID);
|
||||
buff << uint32(proto->InventoryType);
|
||||
|
||||
@@ -541,6 +541,7 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData)
|
||||
player->RemoveMItem(it->GetGUIDLow());
|
||||
|
||||
uint32 count = it->GetCount(); // save counts before store and possible merge with deleting
|
||||
it->SetState(ITEM_UNCHANGED); // need to set this state, otherwise item cannot be removed later, if neccessary
|
||||
player->MoveItemToInventory(dest, it, true);
|
||||
|
||||
player->SaveInventoryAndGoldToDB(trans);
|
||||
|
||||
@@ -338,7 +338,13 @@ enum TrinityStrings
|
||||
LANG_TITLE_REMOVE_RES = 354,
|
||||
LANG_TITLE_CURRENT_RES = 355,
|
||||
LANG_CURRENT_TITLE_RESET = 356,
|
||||
// Room for more level 2 357-399 not used
|
||||
LANG_COMMAND_CHEAT_STATUS = 357,
|
||||
LANG_COMMAND_CHEAT_GOD = 358,
|
||||
LANG_COMMAND_CHEAT_CT = 359,
|
||||
LANG_COMMAND_CHEAT_CD = 360,
|
||||
LANG_COMMAND_CHEAT_POWER = 361,
|
||||
LANG_COMMAND_CHEAT_WW = 362,
|
||||
// Room for more level 2 363-399 not used
|
||||
|
||||
// level 3 chat
|
||||
LANG_SCRIPTS_RELOADED = 400,
|
||||
|
||||
@@ -1026,6 +1026,14 @@ void Spell::EffectTeleportUnits(SpellEffIndex /*effIndex*/)
|
||||
if (unitTarget->getLevel() > uiMaxSafeLevel)
|
||||
{
|
||||
unitTarget->AddAura(60444, unitTarget); //Apply Lost! Aura
|
||||
|
||||
// ALLIANCE from 60323 to 60330 - HORDE from 60328 to 60335
|
||||
uint32 spellId = 60323;
|
||||
if (m_caster->ToPlayer()->GetTeam() == HORDE)
|
||||
spellId += 5;
|
||||
|
||||
spellId += urand(0, 7);
|
||||
m_caster->CastSpell(m_caster, spellId, true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1130,7 +1130,7 @@ bool SpellInfo::IsPassiveStackableWithRanks() const
|
||||
|
||||
bool SpellInfo::IsMultiSlotAura() const
|
||||
{
|
||||
return IsPassive() || Id == 44413;
|
||||
return IsPassive() || Id == 40075 || Id == 44413; // No other way to make 40075 have more than 1 copy of aura
|
||||
}
|
||||
|
||||
bool SpellInfo::IsDeathPersistent() const
|
||||
|
||||
@@ -41,6 +41,7 @@ public:
|
||||
{ "cooldown", SEC_GAMEMASTER, false, &HandleCoolDownCheatCommand, "", NULL },
|
||||
{ "power", SEC_GAMEMASTER, false, &HandlePowerCheatCommand, "", NULL },
|
||||
{ "waterwalk", SEC_GAMEMASTER, false, &HandleWaterWalkCheatCommand, "", NULL },
|
||||
{ "status", SEC_GAMEMASTER, false, &HandleCheatStatusCommand, "", NULL },
|
||||
{ "taxi", SEC_GAMEMASTER, false, &HandleTaxiCheatCommand, "", NULL },
|
||||
{ "explore", SEC_GAMEMASTER, false, &HandleExploreCheatCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
@@ -159,6 +160,22 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool HandleCheatStatusCommand(ChatHandler* handler, const char* /*args*/)
|
||||
{
|
||||
Player* player = handler->GetSession()->GetPlayer();
|
||||
|
||||
const char* enabled = "enabled";
|
||||
const char* disabled = "disabled";
|
||||
|
||||
handler->SendSysMessage(LANG_COMMAND_CHEAT_STATUS);
|
||||
handler->PSendSysMessage(LANG_COMMAND_CHEAT_GOD, player->GetCommandStatus(CHEAT_GOD) ? enabled : disabled);
|
||||
handler->PSendSysMessage(LANG_COMMAND_CHEAT_CD, player->GetCommandStatus(CHEAT_COOLDOWN) ? enabled : disabled);
|
||||
handler->PSendSysMessage(LANG_COMMAND_CHEAT_CT, player->GetCommandStatus(CHEAT_CASTTIME) ? enabled : disabled);
|
||||
handler->PSendSysMessage(LANG_COMMAND_CHEAT_POWER, player->GetCommandStatus(CHEAT_POWER) ? enabled : disabled);
|
||||
handler->PSendSysMessage(LANG_COMMAND_CHEAT_WW, player->GetCommandStatus(CHEAT_WATERWALK) ? enabled : disabled);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleWaterWalkCheatCommand(ChatHandler* handler, const char* args)
|
||||
{
|
||||
if (!handler->GetSession() && !handler->GetSession()->GetPlayer())
|
||||
|
||||
+2
-1
@@ -332,7 +332,8 @@ class instance_trial_of_the_crusader : public InstanceMapScript
|
||||
}
|
||||
if (tributeChest)
|
||||
if (Creature* tirion = instance->GetCreature(TirionGUID))
|
||||
if (GameObject* chest = tirion->SummonGameObject(tributeChest, 805.62f, 134.87f, 142.16f, 3.27f, 0, 0, 0, 0, 90000000))
|
||||
// need proper location.this one is guessed based on videos
|
||||
if (GameObject* chest = tirion->SummonGameObject(tributeChest, 643.814f, 136.027f, 141.295f, 0, 0, 0, 0, 0, 90000000))
|
||||
chest->SetRespawnTime(chest->GetRespawnDelay());
|
||||
break;
|
||||
}
|
||||
|
||||
+5
-4
@@ -25,7 +25,6 @@ EndScriptData */
|
||||
|
||||
//Known Bugs:
|
||||
// - Need better implementation of Gossip and correct gossip text and option
|
||||
// - Misses Dalaran Teleport at the end.
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
@@ -219,7 +218,7 @@ class npc_announcer_toc10 : public CreatureScript
|
||||
return true;
|
||||
|
||||
if (GameObject* floor = GameObject::GetGameObject(*player, instanceScript->GetData64(GO_ARGENT_COLISEUM_FLOOR)))
|
||||
floor->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED);
|
||||
floor->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
|
||||
|
||||
creature->CastSpell(creature, 69016, false);
|
||||
|
||||
@@ -337,7 +336,7 @@ class boss_lich_king_toc : public CreatureScript
|
||||
break;
|
||||
case 5080:
|
||||
if (GameObject* go = instance->instance->GetGameObject(instance->GetData64(GO_ARGENT_COLISEUM_FLOOR)))
|
||||
go->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED);
|
||||
go->SetDestructibleState(GO_DESTRUCTIBLE_DAMAGED);
|
||||
me->CastSpell(me, 69016, false);
|
||||
if (instance)
|
||||
{
|
||||
@@ -797,7 +796,9 @@ class npc_tirion_toc : public CreatureScript
|
||||
instance->SetData(TYPE_EVENT, 0);
|
||||
break;
|
||||
case 6000:
|
||||
me->NearTeleportTo(AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 4.0f);
|
||||
me->SummonCreature(NPC_TIRION_FORDRING, EndSpawnLoc[0].GetPositionX(), EndSpawnLoc[0].GetPositionY(), EndSpawnLoc[0].GetPositionZ());
|
||||
me->SummonCreature(NPC_ARGENT_MAGE, EndSpawnLoc[1].GetPositionX(), EndSpawnLoc[1].GetPositionY(), EndSpawnLoc[1].GetPositionZ());
|
||||
me->SummonGameObject(GO_PORTAL_TO_DALARAN, EndSpawnLoc[2].GetPositionX(), EndSpawnLoc[2].GetPositionY(), EndSpawnLoc[2].GetPositionZ(), 5, 0, 0, 0, 0, 0);
|
||||
m_uiUpdateTimer = 20000;
|
||||
instance->SetData(TYPE_EVENT, 6005);
|
||||
break;
|
||||
|
||||
+9
@@ -129,6 +129,13 @@ const Position AnubarakLoc[]=
|
||||
{740.184509f, 193.443390f, 142.117584f, 0}, // 4 - Nerub Spawn
|
||||
};
|
||||
|
||||
const Position EndSpawnLoc[]=
|
||||
{
|
||||
{648.9167f, 131.0208f, 141.6161f, 0}, // 0 - Highlord Tirion Fordring
|
||||
{649.1614f, 142.0399f, 141.3057f ,0}, // 1 - Argent Mage
|
||||
{644.6250f, 149.2743f, 140.6015f ,0}, // 2 - Portal to Dalaran
|
||||
};
|
||||
|
||||
enum euiWorldStates
|
||||
{
|
||||
UPDATE_STATE_UI_SHOW = 4390,
|
||||
@@ -163,6 +170,7 @@ enum eCreature
|
||||
NPC_BARRENT = 34816,
|
||||
NPC_TIRION = 34996,
|
||||
NPC_TIRION_FORDRING = 36095,
|
||||
NPC_ARGENT_MAGE = 36097,
|
||||
NPC_FIZZLEBANG = 35458,
|
||||
NPC_GARROSH = 34995,
|
||||
NPC_VARIAN = 34990,
|
||||
@@ -245,6 +253,7 @@ enum eGameObject
|
||||
GO_MAIN_GATE_DOOR = 195647,
|
||||
GO_EAST_PORTCULLIS = 195648,
|
||||
GO_WEB_DOOR = 195485,
|
||||
GO_PORTAL_TO_DALARAN = 195682,
|
||||
};
|
||||
|
||||
enum eAchievementData
|
||||
|
||||
@@ -181,6 +181,23 @@ public:
|
||||
me->RemoveAurasDueToSpell(SPELL_SUBMERGE);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
if (!who)
|
||||
return;
|
||||
|
||||
if (me->isInCombat())
|
||||
return;
|
||||
|
||||
if (who->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
if (me->GetDistance(who) > 50.0f)
|
||||
return;
|
||||
|
||||
AttackStartNoMove(who);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
me->AddThreat(who, 10000.0f);
|
||||
@@ -412,6 +429,7 @@ public:
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->Yell(SUFF_SAY_RECAP, LANG_UNIVERSAL, 0);
|
||||
DoScriptText(SUFF_SAY_RECAP, me);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -532,6 +550,7 @@ public:
|
||||
damage = 0;
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
DoScriptText(SUFF_SAY_RECAP, me);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -25,6 +25,9 @@
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellScript.h"
|
||||
#include "Vehicle.h"
|
||||
#include "GridNotifiers.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "CellImpl.h"
|
||||
|
||||
class spell_generic_quest_update_entry_SpellScript : public SpellScript
|
||||
{
|
||||
@@ -1314,6 +1317,174 @@ class spell_q12372_destabilize_azure_dragonshrine_dummy : public SpellScriptLoad
|
||||
}
|
||||
};
|
||||
|
||||
// "Bombing Run" and "Bomb Them Again!"
|
||||
enum Quest11010_11102_11023Data
|
||||
{
|
||||
// Spell
|
||||
SPELL_FLAK_CANNON_TRIGGER = 40110,
|
||||
SPELL_CHOOSE_LOC = 40056,
|
||||
SPELL_AGGRO_CHECK = 40112,
|
||||
// NPCs
|
||||
NPC_FEL_CANNON2 = 23082
|
||||
};
|
||||
|
||||
// 40113 Knockdown Fel Cannon: The Aggro Check Aura
|
||||
class spell_q11010_q11102_q11023_aggro_check_aura : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_q11010_q11102_q11023_aggro_check_aura() : SpellScriptLoader("spell_q11010_q11102_q11023_aggro_check_aura") { }
|
||||
|
||||
class spell_q11010_q11102_q11023_aggro_check_aura_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_q11010_q11102_q11023_aggro_check_aura_AuraScript);
|
||||
|
||||
void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
if (Unit* target = GetTarget())
|
||||
// On trigger proccing
|
||||
target->CastSpell(target, SPELL_AGGRO_CHECK);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_q11010_q11102_q11023_aggro_check_aura_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_q11010_q11102_q11023_aggro_check_aura_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 40112 Knockdown Fel Cannon: The Aggro Check
|
||||
class spell_q11010_q11102_q11023_aggro_check : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_q11010_q11102_q11023_aggro_check() : SpellScriptLoader("spell_q11010_q11102_q11023_aggro_check") { }
|
||||
|
||||
class spell_q11010_q11102_q11023_aggro_check_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_q11010_q11102_q11023_aggro_check_SpellScript);
|
||||
|
||||
void HandleDummy(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Player* playerTarget = GetHitPlayer())
|
||||
// Check if found player target is on fly mount or using flying form
|
||||
if (playerTarget->HasAuraType(SPELL_AURA_FLY) || playerTarget->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))
|
||||
playerTarget->CastSpell(playerTarget, SPELL_FLAK_CANNON_TRIGGER, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_q11010_q11102_q11023_aggro_check_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_q11010_q11102_q11023_aggro_check_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 40119 Knockdown Fel Cannon: The Aggro Burst
|
||||
class spell_q11010_q11102_q11023_aggro_burst : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_q11010_q11102_q11023_aggro_burst() : SpellScriptLoader("spell_q11010_q11102_q11023_aggro_burst") { }
|
||||
|
||||
class spell_q11010_q11102_q11023_aggro_burst_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_q11010_q11102_q11023_aggro_burst_AuraScript);
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
if (Unit* target = GetTarget())
|
||||
// On each tick cast Choose Loc to trigger summon
|
||||
target->CastSpell(target, SPELL_CHOOSE_LOC);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_q11010_q11102_q11023_aggro_burst_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_q11010_q11102_q11023_aggro_burst_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 40056 Knockdown Fel Cannon: Choose Loc
|
||||
class spell_q11010_q11102_q11023_choose_loc : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_q11010_q11102_q11023_choose_loc() : SpellScriptLoader("spell_q11010_q11102_q11023_choose_loc") { }
|
||||
|
||||
class spell_q11010_q11102_q11023_choose_loc_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_q11010_q11102_q11023_choose_loc_SpellScript);
|
||||
|
||||
void HandleDummy(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
// Check for player that is in 65 y range
|
||||
std::list<Player*> playerList;
|
||||
Trinity::AnyPlayerInObjectRangeCheck checker(caster, 765.0f);
|
||||
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(caster, playerList, checker);
|
||||
caster->VisitNearbyWorldObject(65.0f, searcher);
|
||||
for (std::list<Player*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
|
||||
// Check if found player target is on fly mount or using flying form
|
||||
if ((*itr)->HasAuraType(SPELL_AURA_FLY) || (*itr)->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))
|
||||
// Summom Fel Cannon (bunny version) at found player
|
||||
caster->SummonCreature(NPC_FEL_CANNON2, (*itr)->GetPositionX(), (*itr)->GetPositionY(), (*itr)->GetPositionZ());
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectHit += SpellEffectFn(spell_q11010_q11102_q11023_choose_loc_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_q11010_q11102_q11023_choose_loc_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 39844 - Skyguard Blasting Charge
|
||||
// 40160 - Throw Bomb
|
||||
class spell_q11010_q11102_q11023_q11008_check_fly_mount : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_q11010_q11102_q11023_q11008_check_fly_mount() : SpellScriptLoader("spell_q11010_q11102_q11023_q11008_check_fly_mount") { }
|
||||
|
||||
class spell_q11010_q11102_q11023_q11008_check_fly_mount_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_q11010_q11102_q11023_q11008_check_fly_mount_SpellScript);
|
||||
|
||||
SpellCastResult CheckRequirement()
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
// This spell will be cast only if caster has one of these auras
|
||||
if (!(caster->HasAuraType(SPELL_AURA_FLY) || caster->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED)))
|
||||
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_q11010_q11102_q11023_q11008_check_fly_mount_SpellScript::CheckRequirement);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_q11010_q11102_q11023_q11008_check_fly_mount_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_quest_spell_scripts()
|
||||
{
|
||||
new spell_q55_sacred_cleansing();
|
||||
@@ -1345,4 +1516,9 @@ void AddSC_quest_spell_scripts()
|
||||
new spell_q12735_song_of_cleansing();
|
||||
new spell_q12372_cast_from_gossip_trigger();
|
||||
new spell_q12372_destabilize_azure_dragonshrine_dummy();
|
||||
new spell_q11010_q11102_q11023_aggro_check_aura();
|
||||
new spell_q11010_q11102_q11023_aggro_check();
|
||||
new spell_q11010_q11102_q11023_aggro_burst();
|
||||
new spell_q11010_q11102_q11023_choose_loc();
|
||||
new spell_q11010_q11102_q11023_q11008_check_fly_mount();
|
||||
}
|
||||
|
||||
@@ -501,6 +501,28 @@ class ByteBuffer
|
||||
append(str.c_str(), len);
|
||||
}
|
||||
|
||||
uint32 ReadPackedTime()
|
||||
{
|
||||
uint32 packedDate = read<uint32>();
|
||||
tm lt;
|
||||
memset(<, 0, sizeof(lt));
|
||||
|
||||
lt.tm_min = packedDate & 0x3F;
|
||||
lt.tm_hour = (packedDate >> 6) & 0x1F;
|
||||
//lt.tm_wday = (packedDate >> 11) & 7;
|
||||
lt.tm_mday = ((packedDate >> 14) & 0x3F) + 1;
|
||||
lt.tm_mon = (packedDate >> 20) & 0xF;
|
||||
lt.tm_year = ((packedDate >> 24) & 0x1F) + 100;
|
||||
|
||||
return mktime(<) + timezone;
|
||||
}
|
||||
|
||||
ByteBuffer& ReadPackedTime(uint32& time)
|
||||
{
|
||||
time = ReadPackedTime();
|
||||
return *this;
|
||||
}
|
||||
|
||||
const uint8 *contents() const { return &_storage[0]; }
|
||||
|
||||
size_t size() const { return _storage.size(); }
|
||||
@@ -580,6 +602,12 @@ class ByteBuffer
|
||||
append(packGUID, size);
|
||||
}
|
||||
|
||||
void AppendPackedTime(time_t time)
|
||||
{
|
||||
tm* lt = localtime(&time);
|
||||
append<uint32>((lt->tm_year - 100) << 24 | lt->tm_mon << 20 | (lt->tm_mday - 1) << 14 | lt->tm_wday << 11 | lt->tm_hour << 6 | lt->tm_min);
|
||||
}
|
||||
|
||||
void put(size_t pos, const uint8 *src, size_t cnt)
|
||||
{
|
||||
if (pos + cnt > size())
|
||||
|
||||
@@ -48,12 +48,6 @@ std::string secsToTimeString(uint64 timeInSecs, bool shortText = false, bool hou
|
||||
uint32 TimeStringToSecs(const std::string& timestring);
|
||||
std::string TimeToTimestampStr(time_t t);
|
||||
|
||||
inline uint32 secsToTimeBitFields(time_t secs)
|
||||
{
|
||||
tm* lt = localtime(&secs);
|
||||
return uint32((lt->tm_year - 100) << 24 | lt->tm_mon << 20 | (lt->tm_mday - 1) << 14 | lt->tm_wday << 11 | lt->tm_hour << 6 | lt->tm_min);
|
||||
}
|
||||
|
||||
/* Return a random number in the range min..max; (max-min) must be smaller than 32768. */
|
||||
int32 irand(int32 min, int32 max);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user