Core: Add wintergrasp-patch to wintergrasp_cleanup branch - resurrected from an old work-repository, now over as a branch to work on.
Original patch by socolin, cand a ton of contributors : mathman, joda, spp, silinoron, josh, malcrom, shauren, machiavelli, click, rat, leak, tobmaps, _manuel_, the tcfr team (via socolin), and tons of others for chiming in. NOTE: THIS IS A WORKING-BRANCH, AND _NOT_ MENT FOR PUBLIC USE OR EVEN CONSIDERED STABLE!
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
TODO (add new things to sort out here) :
|
||||
- Move spawns to database : NPCs / GOs
|
||||
- Spawn NPC/GO in their correct phase
|
||||
- Fix teleport spells for vehicles/drivers
|
||||
- Get official texts for horde in db
|
||||
- Clean up code to use phases-system / spells instead of hardcoded spawn/despawn functionality
|
||||
- Remove hardcoded entities from headerfile
|
||||
- Spawn horde/alliance spiritguides spawn/change depending on holder
|
||||
- Clean up some minor hacks
|
||||
|
||||
COMPLETED (move completed things from the above list here) :
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
Spell 56617 "Alliance Controls Factory Phase Shift" Adds Phase 32
|
||||
Spell 56618 "Horde Controls Factory Phase Shift" Adds Phase 16
|
||||
|
||||
Spell 55773 "Horde Control Phase Shift" Adds Phase 64
|
||||
Spell 55774 "Alliance Control Phase Shift" Adds Phase 128
|
||||
|
||||
Spell 58045 "Essence of Wintergrasp" Adds Phase 256
|
||||
|
||||
Spell 37795 "Recruit" Gained when joining WG battle
|
||||
|
||||
Spell 74411 "Battleground - Dampening" Gained when joining WG battle
|
||||
|
||||
|
||||
Wintergrasp Vehicle On spawn entries: 28312,27881,28094,32627
|
||||
set x,y,z,o to nearest trigger entry: 23472
|
||||
make player cast 60968 on vehicle
|
||||
aura 14267 on self if player is horde
|
||||
aura 14268 on self if player is alliance
|
||||
@@ -0,0 +1,474 @@
|
||||
-- Replace Wintergrasp spawns with properly phased spawns
|
||||
SET @GUID := 290000;
|
||||
DELETE FROM `creature` WHERE `id` IN (31841,31842,30400,30499,30489,30869,31036,31051,31052,31054,31108,31109,31153,39172,30870,31053,31091,31101,31102,31106,31107,31151,32294,39173,32296,30488);
|
||||
INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`DeathState`,`MovementType`) VALUES
|
||||
-- Horde Spirt Guides
|
||||
(@GUID+0,31841,571,1,0x00000010,0,0,4318.436,2408.06738,392.675751,6.23082542,120,0,0,1,0,0,0), -- Eastspark Workshop
|
||||
(@GUID+1,31841,571,1,0x00000010,0,0,4336.25439,3235.51978,390.334,0.628318548,120,0,0,1,0,0,0), -- Westspark Workshop
|
||||
(@GUID+2,31841,571,1,0x00000010,0,0,5104.753,2300.9458,368.568054,0.7330383,120,0,0,1,0,0,0), -- The Sunken Ring
|
||||
(@GUID+3,31841,571,1,0x00000010,0,0,5103.133,3462.128,368.568054,5.270895,120,0,0,1,0,0,0), -- The Chilled Quagmire "Outside broker Temple"
|
||||
(@GUID+4,31841,571,1,0x00000040,0,0,5537.482,2898.90674,517.2589,4.86946869,120,0,0,1,0,0,0), -- Fortress
|
||||
(@GUID+5,31841,571,1,0x00000001,0,0,5031.84131,3710.74878,372.4835,0,120,5,0,1,0,0,0), -- Horde Landing Zone
|
||||
-- Alliance Spirt Guides
|
||||
(@GUID+6,31842,571,1,0x00000020,0,0,4318.436,2408.06738,392.675751,6.23082542,120,0,0,1,0,0,0), -- Eastspark Workshop
|
||||
(@GUID+7,31842,571,1,0x00000020,0,0,4336.25439,3235.51978,390.334,0.628318548,120,0,0,1,0,0,0), -- Westspark Workshop
|
||||
(@GUID+8,31842,571,1,0x00000020,0,0,5104.753,2300.9458,368.568054,0.7330383,120,0,0,1,0,0,0), -- The Sunken Ring
|
||||
(@GUID+9,31842,571,1,0x00000020,0,0,5103.133,3462.128,368.568054,5.270895,120,0,0,1,0,0,0), -- The Chilled Quagmire "Outside The Broken Temple"
|
||||
(@GUID+10,31842,571,1,0x00000080,0,0,5537.482,2898.90674,517.2589,4.86946869,120,0,0,1,0,0,0), -- Fortress
|
||||
(@GUID+11,31842,571,1,0x00000001,0,0,5140.7876,2179.12451,390.9512,1.97222209,120,0,0,1,0,0,0), -- Aliance Landing Zone
|
||||
-- Horde Engineers
|
||||
(@GUID+12,30400,571,1,0x00000010,0,0,4964.89,3383.06,382.911,6.12611,180,0,0,1,0,0,0), -- The Broken Temple
|
||||
(@GUID+13,30400,571,1,0x00000010,0,0,4939.76,2389.06,326.153,3.26377,180,0,0,1,0,0,0), -- The Sunken Ring
|
||||
(@GUID+14,30400,571,1,0x00000010,0,0,4357.67,2357.99,382.007,1.67552,180,0,0,1,0,0,0), -- Eastspark Workshop
|
||||
(@GUID+15,30400,571,1,0x00000010,0,0,4354.15,3312.82,378.046,1.67552,180,0,0,1,0,0,0), -- Westspark Workshop
|
||||
(@GUID+16,30400,571,1,0x00000040,0,0,5391.61,2707.72,415.051,4.55531,180,0,0,1,0,0,0), -- Wintergrasp Fortress
|
||||
(@GUID+17,30400,571,1,0x00000040,0,0,5392.91,2975.26,415.223,4.55531,180,0,0,1,0,0,0), -- Wintergrasp Fortress
|
||||
-- Alliance Engineers
|
||||
(@GUID+18,30499,571,1,0x00000020,0,0,4964.89,3383.06,382.911,6.12611,180,0,0,1,0,0,0), -- The Broken Temple
|
||||
(@GUID+19,30499,571,1,0x00000020,0,0,4939.76,2389.06,326.153,3.26377,180,0,0,1,0,0,0), -- The Sunken Ring
|
||||
(@GUID+20,30499,571,1,0x00000020,0,0,4357.67,2357.99,382.007,1.67552,180,0,0,1,0,0,0), -- Eastspark Workshop
|
||||
(@GUID+21,30499,571,1,0x00000020,0,0,4354.15,3312.82,378.046,1.67552,180,0,0,1,0,0,0), -- Westspark Workshop
|
||||
(@GUID+22,30499,571,1,0x00000080,0,0,5391.61,2707.72,415.051,4.55531,180,0,0,1,0,0,0), -- Wintergrasp Fortress
|
||||
(@GUID+23,30499,571,1,0x00000080,0,0,5392.91,2975.26,415.223,4.55531,180,0,0,1,0,0,0), -- Wintergrasp Fortress
|
||||
-- Alliance NPC's
|
||||
(@GUID+24,30489,571,1,0x00000080,0,0,5369.973,2874.83081,409.3225,3.12413931,120,0,0,1,0,0,0),
|
||||
(@GUID+25,30869,571,1,0x00000001,0,0,5102.75049,2187.82837,365.707855,3.996804,120,0,0,1,0,0,0),
|
||||
(@GUID+26,31036,571,1,0x00000040,0,0,5078.281,2183.704,365.028564,1.46607661,120,0,0,1,0,0,0),
|
||||
(@GUID+27,31036,571,1,0x00000080,0,0,5358.641,2841.76416,409.3225,1.13262534,120,0,0,1,0,0,0),
|
||||
(@GUID+28,31051,571,1,0x00000040,0,0,5081.697,2173.73,365.8777,0.8552113,120,0,0,1,0,0,0),
|
||||
(@GUID+29,31051,571,1,0x00000080,0,0,5296.869,2887.67114,409.274658,5.60250664,120,0,0,1,0,0,0),
|
||||
(@GUID+30,31052,571,1,0x00000040,0,0,5100.06543,2168.89,365.7788,1.97222209,120,0,0,1,0,0,0),
|
||||
(@GUID+31,31052,571,1,0x00000080,0,0,5302.57373,2750.40332,409.274658,5.46288061,120,0,0,1,0,0,0),
|
||||
(@GUID+32,31054,571,1,0x00000040,0,0,5088.611,2167.66235,365.688751,0.6806784,120,0,0,1,0,0,0),
|
||||
(@GUID+33,31054,571,1,0x00000080,0,0,5372.05859,3028.33618,409.206024,0.012565271,120,0,0,1,0,0,0),
|
||||
(@GUID+34,31108,571,1,0x00000040,0,0,5095.673,2193.284,365.9236,4.939282,120,0,0,1,0,0,0),
|
||||
(@GUID+35,31108,571,1,0x00000080,0,0,5298.267,2924.97632,409.274658,0.9075712,120,0,0,1,0,0,0),
|
||||
(@GUID+36,31109,571,1,0x00000040,0,0,5080.403,2199.00244,359.4894,2.96705961,120,0,0,1,0,0,0),
|
||||
(@GUID+37,31109,571,1,0x00000080,0,0,5228.2915,2809.888,409.274658,3.19395256,120,0,0,1,0,0,0),
|
||||
(@GUID+38,31153,571,1,0x00000040,0,0,5088.48633,2188.17871,365.646973,5.253441,120,0,0,1,0,0,0),
|
||||
(@GUID+39,31153,571,1,0x00000080,0,0,5364.784,2835.135,409.3225,3.12413931,120,0,0,1,0,0,0),
|
||||
(@GUID+40,32294,571,1,0x00000080,0,0,5374.568,2790.784,409.3225,2.72271371,120,0,0,1,0,0,0),
|
||||
(@GUID+41,39172,571,1,0x00000080,0,0,5372.672,2786.74048,409.4423,2.80998015,120,0,0,1,0,0,0),
|
||||
(@GUID+42,30488,571,1,0x00000080,0,0,5370.428,2814.274,409.3225,3.054326,120,0,0,1,0,0,0),
|
||||
-- Horde NPC's
|
||||
(@GUID+43,30870,571,1,0x00000001,0,0,5023.4043,3686.03345,363.1192,5.131268,120,0,0,1,0,0,0),
|
||||
(@GUID+44,31053,571,1,0x00000040,0,0,5379.875,3027.43359,409.206024,0,120,0,0,1,0,0,0),
|
||||
(@GUID+45,31053,571,1,0x00000080,0,0,5034.703125,3666.703125,363.273865,4.310963,120,0,0,1,0,0,0),
|
||||
(@GUID+46,31091,571,1,0x00000040,0,0,5347.7915,2837.38574,409.3466,2.62603331,120,0,0,1,0,0,0),
|
||||
(@GUID+47,31091,571,1,0x00000080,0,0,5018.662109,3672.279541,362.862885,2.209141,120,0,0,1,0,0,0),
|
||||
(@GUID+48,31101,571,1,0x00000040,0,0,5296.564,2789.87378,409.274658,0.7330383,120,0,0,1,0,0,0),
|
||||
(@GUID+49,31101,571,1,0x00000080,0,0,5014.065430,3678.846436,362.995575,5.096361,120,0,0,1,0,0,0),
|
||||
(@GUID+50,31102,571,1,0x00000040,0,0,5295.455,2732.87549,409.274658,4.7211113,120,0,0,1,0,0,0),
|
||||
(@GUID+51,31102,571,1,0x00000080,0,0,5031.676270,3655.820801,362.234558,5.131268,120,0,0,1,0,0,0),
|
||||
(@GUID+52,31106,571,1,0x00000040,0,0,5295.56348,2926.67188,409.274658,0.87266463,120,0,0,1,0,0,0),
|
||||
(@GUID+53,31106,571,1,0x00000080,0,0,5037.602051,3675.459717,363.147888,3.176499,120,0,0,1,0,0,0),
|
||||
(@GUID+54,31107,571,1,0x00000040,0,0,5230.09033,2876.635,409.316254,-2.19854617,120,0,0,1,0,0,0),
|
||||
(@GUID+55,31107,571,1,0x00000080,0,0,5004.455078,3661.089111,361.335785,3.979351,120,0,0,1,0,0,0),
|
||||
(@GUID+56,31151,571,1,0x00000040,0,0,5363.2876,2834.52954,409.3606,2.76273036,120,0,0,1,0,0,0),
|
||||
(@GUID+57,31151,571,1,0x00000080,0,0,5034.698242,3683.268799,363.129120,4.310963,120,0,0,1,0,0,0),
|
||||
(@GUID+58,32296,571,1,0x00000040,0,0,5374.568,2790.784,409.3225,2.60054,120,0,0,1,0,0,0),
|
||||
-- Missing noc in fortress
|
||||
(@GUID+60,39173,571,1,0x00000040,0,0,5372.672,2786.74048,409.4423,2.80998015,120,0,0,1,0,0,0);
|
||||
|
||||
DELETE FROM `creature_addon` WHERE `guid` IN (@GUID+26,@GUID+27,@GUID+38,@GUID+39,@GUID+40,@GUID+41,@GUID+57,@GUID+58,@GUID+59,@GUID+60);
|
||||
INSERT INTO `creature_addon` (`guid`,`mount`,`path_id`,`bytes2`) VALUES
|
||||
(@GUID+26,14337,0,257), -- Commander Zanneth "Horde Controlled"
|
||||
(@GUID+27,14337,0,257), -- Commander Zanneth "Alliance Controlled"
|
||||
(@GUID+38,6569,0,257), -- Tactical Officer Ahbramis "Horde Controlled"
|
||||
(@GUID+39,6569,0,257), -- Tactical Officer Ahbramis "Alliance Controlled"
|
||||
(@GUID+40,27247,0,1), -- Knight Dameron "Alliance Controlled"
|
||||
(@GUID+41,28912,0,1), -- Marshal Magruder "Alliance Controlled"
|
||||
(@GUID+58,27245,0,1), -- Stone Guard Mukar "Horde Controlled"
|
||||
(@GUID+60,29261,0,1); -- Champion Ros'slai "Horde Controlled"
|
||||
|
||||
-- Pathing for Anchorite Tessa Entry: 31054
|
||||
SET @NPC := @GUID+33;
|
||||
SET @PATH := @NPC * 10;
|
||||
UPDATE `creature` SET `MovementType`=2 WHERE `guid`=@NPC;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
|
||||
INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,5382.507,3028.468,409.206,0,0,0,100,0),
|
||||
(@PATH,2,5392.744,3028.737,409.206,0,0,0,100,0),
|
||||
(@PATH,3,5382.507,3028.468,409.206,0,0,0,100,0),
|
||||
(@PATH,4,5371.491,3028.329,409.206,0,0,0,100,0),
|
||||
(@PATH,5,5360.032,3028.516,409.3161,0,0,0,100,0),
|
||||
(@PATH,6,5371.491,3028.329,409.206,0,0,0,100,0);
|
||||
|
||||
-- Pathing for Commander Zanneth Entry: 31036
|
||||
SET @NPC := @GUID+27;
|
||||
SET @PATH := @NPC * 10;
|
||||
UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5358.854,`position_y`=2859.232,`position_z`=409.5425 WHERE `guid`=@NPC;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
|
||||
INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,14337, '');
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,5359.788,2846.359,409.3642,0,0,0,100,0),
|
||||
(@PATH,2,5359.187,2839.211,409.3642,0,0,0,100,0),
|
||||
(@PATH,3,5360.083,2823.116,409.5381,0,0,0,100,0),
|
||||
(@PATH,4,5359.187,2839.211,409.3642,0,0,0,100,0),
|
||||
(@PATH,5,5359.788,2846.359,409.3642,0,0,0,100,0),
|
||||
(@PATH,6,5358.854,2859.232,409.5425,0,0,0,100,0);
|
||||
|
||||
-- Pathing for Commander Dardosh Entry: 31091
|
||||
SET @NPC := @GUID+46;
|
||||
SET @PATH := @NPC * 10;
|
||||
UPDATE `creature` SET `MovementType`=2,`position_x`=5359.546,`position_y`=2858.049,`position_z`=409.3642 WHERE `guid`=@NPC;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
|
||||
INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,257,0, '');
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,5359.202,2843.208,409.3642,0,0,0,100,0),
|
||||
(@PATH,2,5358.997,2827.974,409.3639,0,0,0,100,0),
|
||||
(@PATH,3,5359.202,2843.208,409.3642,0,0,0,100,0),
|
||||
(@PATH,4,5359.546,2858.049,409.3642,0,0,0,100,0);
|
||||
|
||||
-- Pathing for Commander Dardosh Entry: 31091
|
||||
SET @NPC := @GUID+47;
|
||||
SET @PATH := @NPC * 10;
|
||||
UPDATE `creature` SET `MovementType`=2,`position_x`=5018.411133,`position_y`=3672.615967,`position_z`=362.863525 WHERE `guid`=@NPC;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
|
||||
INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,257,0, '');
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,5022.827637,3666.665771,362.205750,0,0,0,100,0),
|
||||
(@PATH,2,5024.270508,3658.739258,361.705750,0,0,0,100,0),
|
||||
(@PATH,3,5022.827637,3666.665771,362.205750,0,0,0,100,0),
|
||||
(@PATH,4,5018.411133,3672.615967,362.863525,0,0,0,100,0);
|
||||
|
||||
-- Pathing for Primalist Mulfort Entry: 31053
|
||||
SET @NPC := @GUID+44;
|
||||
SET @PATH := @NPC * 10;
|
||||
UPDATE `creature` SET `MovementType`=2 WHERE `guid`=@NPC;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
|
||||
INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,257,0, '');
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,5390.624,3027.994,409.206,0,0,0,100,0),
|
||||
(@PATH,2,5379.875,3027.434,409.206,0,0,0,100,0),
|
||||
(@PATH,3,5371.404,3026.511,409.206,0,0,0,100,0),
|
||||
(@PATH,4,5379.875,3027.434,409.206,0,0,0,100,0);
|
||||
|
||||
-- Pathing for Vieron Blazefeather Entry: 31102
|
||||
SET @NPC := @GUID+50;
|
||||
SET @PATH := @NPC * 10;
|
||||
UPDATE `creature` SET `MovementType`=2,`position_x`=5296.644,`position_y`=2731.107,`position_z`=409.3163 WHERE `guid`=@NPC;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
|
||||
INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
|
||||
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
|
||||
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
|
||||
(@PATH,1,5295.544,2722.631,409.3163,0,0,0,100,0),
|
||||
(@PATH,2,5296.644,2731.107,409.3163,0,0,0,100,0),
|
||||
(@PATH,3,5297.874,2738.155,409.3163,0,0,0,100,0),
|
||||
(@PATH,4,5305.192,2746.161,409.3061,0,0,0,100,0),
|
||||
(@PATH,5,5297.874,2738.155,409.3163,0,0,0,100,0),
|
||||
(@PATH,6,5296.644,2731.107,409.3163,0,0,0,100,0);
|
||||
|
||||
DELETE FROM `creature_template_addon` WHERE `entry` IN (30740);
|
||||
INSERT INTO `creature_template_addon` (`entry`,`bytes2`,`emote`) VALUES
|
||||
(30740,257,375); -- Guards "Alliance"
|
||||
|
||||
-- Guards "Alliance"
|
||||
SET @GUID := 291000;
|
||||
DELETE FROM `creature` WHERE `id` IN (30740);
|
||||
INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`DeathState`,`MovementType`) VALUES
|
||||
-- Fortress
|
||||
(@GUID+0,30740,571,1,0x00000080,0,0,5150.26855,2786.02173,409.5469,3.22885919,120,0,0,1,0,0,0),
|
||||
(@GUID+1,30740,571,1,0x00000080,0,0,5150.657,2777.9502,409.4053,2.94960642,120,0,0,1,0,0,0),
|
||||
(@GUID+2,30740,571,1,0x00000080,0,0,5193.632,2734.172,409.272552,4.694936,120,0,0,1,0,0,0),
|
||||
(@GUID+3,30740,571,1,0x00000080,0,0,5200.497,2733.88843,409.272552,4.677482,120,0,0,1,0,0,0),
|
||||
(@GUID+4,30740,571,1,0x00000080,0,0,5264.64648,2670.1936,409.1819,3.07177949,120,0,0,1,0,0,0),
|
||||
(@GUID+5,30740,571,1,0x00000080,0,0,5265.30566,2663.15381,409.1819,3.12413931,120,0,0,1,0,0,0),
|
||||
(@GUID+6,30740,571,1,0x00000080,0,0,5307.02051,2613.89771,409.172363,4.694936,120,0,0,1,0,0,0),
|
||||
(@GUID+7,30740,571,1,0x00000080,0,0,5311.133,3061.04248,408.809937,1.50098312,120,0,0,1,0,0,0),
|
||||
(@GUID+8,30740,571,1,0x00000080,0,0,5315.87354,2614.21924,408.972748,4.677482,120,0,0,1,0,0,0),
|
||||
(@GUID+9,30740,571,1,0x00000080,0,0,5318.09,3060.634,408.882782,1.62315619,120,0,0,1,0,0,0),
|
||||
(@GUID+10,30740,571,1,0x00000080,0,0,5149.395,2897.044,409.304443,3.03687286,120,0,0,1,0,0,0),
|
||||
(@GUID+11,30740,571,1,0x00000080,0,0,5149.51953,2904.19336,409.276062,3.07177949,120,0,0,1,0,0,0),
|
||||
(@GUID+12,30740,571,1,0x00000080,0,0,5192.79248,2948.454,409.2746,1.50098312,120,0,0,1,0,0,0),
|
||||
(@GUID+13,30740,571,1,0x00000080,0,0,5201.645,2948.77612,409.2746,1.62315619,120,0,0,1,0,0,0),
|
||||
(@GUID+14,30740,571,1,0x00000080,0,0,5265.28,3010.10083,408.895782,2.82743335,120,0,0,1,0,0,0),
|
||||
(@GUID+15,30740,571,1,0x00000080,0,0,5265.47559,3017.39941,408.582977,3.07177949,120,0,0,1,0,0,0),
|
||||
(@GUID+16,30740,571,1,0x00000080,0,0,5367.91455,2826.52026,409.3225,3.33357882,120,0,0,1,0,0,0),
|
||||
(@GUID+17,30740,571,1,0x00000080,0,0,5368.71338,2856.36035,409.3225,2.94960642,120,0,0,1,0,0,0),
|
||||
(@GUID+18,30740,571,1,0x00000080,0,0,5388.56,2834.76782,418.7585,3.07177949,120,0,0,1,0,0,0),
|
||||
(@GUID+19,30740,571,1,0x00000080,0,0,5389.272,2847.36816,418.7585,3.106686,120,0,0,1,0,0,0),
|
||||
(@GUID+20,30740,571,1,0x00000080,0,0,4684.475,2414.28979,369.9621,-2.85779858,120,0,0,1,0,0,0),
|
||||
(@GUID+21,30740,571,1,0x00000080,0,0,4692.75635,2392.88574,369.0177,-2.82921553,120,0,0,1,0,0,0),
|
||||
(@GUID+22,30740,571,1,0x00000080,0,0,5327.264648,2659.455322,409.178711,3.069901,120,0,0,1,0,0,0), -- F1307814000A2DAD path
|
||||
(@GUID+23,30740,571,1,0x00000080,0,0,5154.225586,2833.824219,409.262451,3.124139,120,0,0,1,0,0,0),
|
||||
(@GUID+24,30740,571,1,0x00000080,0,0,5154.119629,2847.892822,409.247559,3.071779,120,0,0,1,0,0,0),
|
||||
(@GUID+25,30740,571,1,0x00000080,0,0,5179.111328,2837.129639,409.274658,3.211406,120,0,0,1,0,0,0),
|
||||
(@GUID+26,30740,571,1,0x00000080,0,0,5179.666504,2846.597900,409.274658,3.089233,120,0,0,1,0,0,0),
|
||||
(@GUID+27,30740,571,1,0x00000080,0,0,5270.163086,2833.479248,409.274658,3.124139,120,0,0,1,0,0,0),
|
||||
(@GUID+28,30740,571,1,0x00000080,0,0,5270.057129,2847.547607,409.274658,3.071779,120,0,0,1,0,0,0),
|
||||
(@GUID+29,30740,571,1,0x00000080,0,0,5307.750000,3008.872559,409.193024,4.781681,120,0,0,1,0,0,0), -- F1307814000A43AE path
|
||||
(@GUID+30,30740,571,1,0x00000080,0,0,5335.117188,2916.802002,409.443756,1.500983,120,0,0,1,0,0,0),
|
||||
(@GUID+31,30740,571,1,0x00000080,0,0,5350.681152,2917.011719,409.274658,1.466077,120,0,0,1,0,0,0),
|
||||
(@GUID+32,30740,571,1,0x00000080,0,0,5335.306152,2764.110352,409.274567,4.834562,120,0,0,1,0,0,0),
|
||||
(@GUID+33,30740,571,1,0x00000080,0,0,5349.811523,2763.634766,409.333374,4.660029,120,0,0,1,0,0,0),
|
||||
-- -- Eastspark Workshop
|
||||
(@GUID+34,30740,571,1,0x00000080,0,0,4349.537,2411.25781,374.743317,2.05948853,120,0,0,1,0,0,0),
|
||||
(@GUID+35,30740,571,1,0x00000080,0,0,4388.13135,2411.97827,374.743317,1.6406095,120,0,0,1,0,0,0),
|
||||
(@GUID+36,30740,571,1,0x00000080,0,0,4391.6665,2300.60913,374.7433,4.92182827,120,0,0,1,0,0,0),
|
||||
(@GUID+37,30740,571,1,0x00000080,0,0,4413.42969,2393.44946,376.3599,1.06465089,120,0,0,1,0,0,0),
|
||||
(@GUID+38,30740,571,1,0x00000080,0,0,4417.92,2331.237,370.9189,5.846853,120,0,0,1,0,0,0),
|
||||
(@GUID+39,30740,571,1,0x00000080,0,0,4349.11768,2299.27954,374.7433,4.904375,120,0,0,1,0,0,0),
|
||||
(@GUID+40,30740,571,1,0x00000080,0,0,4418.608,2355.28735,372.4907,6.02138567,120,0,0,1,0,0,0);
|
||||
|
||||
-- banners
|
||||
SET @OGUID := 281000;
|
||||
DELETE FROM `gameobject` WHERE `id` IN (192269,192284,192285,192338,192339,192488,192254,192255,192336,192501,192502);
|
||||
DELETE FROM `gameobject` WHERE `id` BETWEEN 192349 AND 192379;
|
||||
DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID AND @OGUID+115;
|
||||
INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
|
||||
-- Fortress Banners "Alliance"
|
||||
(@OGUID+0,192286,571,1,128,5371.44873,2820.79346,409.426575,3.124123,0,0,0,0,120,0,1),
|
||||
(@OGUID+1,192287,571,1,128,5372.42432,2862.47925,409.3659,3.14159274,0,0,0,0,120,0,1),
|
||||
(@OGUID+2,192292,571,1,128,5154.35059,2862.08423,445.0105,3.14159274,0,0,0,0,120,0,1),
|
||||
(@OGUID+3,192299,571,1,128,5155.21631,2820.63013,444.9789,-3.115388,0,0,0,0,120,0,1),
|
||||
(@OGUID+4,192304,571,1,128,5398.03564,2873.013,455.203552,3.132858,0,0,0,0,120,0,1),
|
||||
(@OGUID+5,192305,571,1,128,5397.31348,2809.264,455.101624,3.132858,0,0,0,0,120,0,1),
|
||||
(@OGUID+6,192306,571,1,128,5270.55469,2861.68237,444.917236,-3.124123,0,0,0,0,120,0,1),
|
||||
(@OGUID+7,192307,571,1,128,5271.16064,2820.10864,445.109,-3.132858,0,0,0,0,120,0,1),
|
||||
(@OGUID+8,192308,571,1,128,5235.12744,2942.12329,444.2792,1.58824873,0,0,0,0,120,0,1),
|
||||
(@OGUID+9,192309,571,1,128,5272.549,2976.54175,444.493,3.132858,0,0,0,0,120,0,1),
|
||||
(@OGUID+10,192310,571,1,128,5352.19775,3055.0166,444.5646,1.57952213,0,0,0,0,120,0,1),
|
||||
(@OGUID+11,192312,571,1,128,5236.315,2739.21533,444.992828,-1.60570168,0,0,0,0,120,0,1),
|
||||
(@OGUID+12,192313,571,1,128,5271.634,2704.829,445.182617,-3.124123,0,0,0,0,120,0,1),
|
||||
(@OGUID+13,192314,571,1,128,5350.905,2622.48,444.649323,-1.56206989,0,0,0,0,120,0,1),
|
||||
(@OGUID+14,192316,571,1,128,5322.013,2781.13281,435.6727,1.57952213,0,0,0,0,120,0,1),
|
||||
(@OGUID+15,192317,571,1,128,5363.387,2781.27856,435.634125,1.58824873,0,0,0,0,120,0,1),
|
||||
(@OGUID+16,192318,571,1,128,5322.24854,2898.94629,435.642975,-1.57952213,0,0,0,0,120,0,1),
|
||||
(@OGUID+17,192319,571,1,128,5364.30371,2899.216,435.690826,-1.55334139,0,0,0,0,120,0,1),
|
||||
(@OGUID+18,192320,571,1,128,5289.048,2820.22656,435.6738,0,0,0,0,0,120,0,1),
|
||||
(@OGUID+19,192321,571,1,128,5288.847,2861.82128,435.590485,0.0261791088,0,0,0,0,120,0,1),
|
||||
(@OGUID+20,192322,571,1,128,5322.89258,2917.14233,445.1543,1.56206989,0,0,0,0,120,0,1),
|
||||
(@OGUID+21,192323,571,1,128,5364.283,2917.264,445.332184,1.58824611,0,0,0,0,120,0,1),
|
||||
(@OGUID+22,192324,571,1,128,5290.514,2976.56177,435.087463,0.008724241,0,0,0,0,120,0,1),
|
||||
(@OGUID+23,192325,571,1,128,5352.37744,3036.95483,435.111053,-1.56206989,0,0,0,0,120,0,1),
|
||||
(@OGUID+24,192326,571,1,128,5392.64063,3036.967,433.648682,-1.51843357,0,0,0,0,120,0,1),
|
||||
(@OGUID+25,192327,571,1,128,5172.336,2862.57544,435.65802,0,0,0,0,0,120,0,1),
|
||||
(@OGUID+26,192328,571,1,128,5173.12842,2820.95654,435.657623,0.0261791088,0,0,0,0,120,0,1),
|
||||
(@OGUID+27,192329,571,1,128,5235.32227,2924.31079,434.8981,-1.56206989,0,0,0,0,120,0,1),
|
||||
(@OGUID+28,192330,571,1,128,5237.02344,2757.35669,435.625641,1.55334139,0,0,0,0,120,0,1),
|
||||
(@OGUID+29,192331,571,1,128,5289.78125,2704.62158,435.714325,0.008724241,0,0,0,0,120,0,1),
|
||||
(@OGUID+30,192332,571,1,128,5350.93945,2640.43066,435.2642,1.56206989,0,0,0,0,120,0,1),
|
||||
(@OGUID+31,192333,571,1,128,5392.28027,2639.84033,435.207916,1.52716041,0,0,0,0,120,0,1),
|
||||
(@OGUID+32,192334,571,1,128,5322.17041,2763.20142,444.9744,-1.56206715,0,0,0,0,120,0,1),
|
||||
(@OGUID+33,192335,571,1,128,5363.71631,2763.24731,445.023132,-1.54461551,0,0,0,0,120,0,1),
|
||||
(@OGUID+34,192487,571,1,128,5145.11133,2934.948,433.254852,-3.10665226,0,0,0,0,120,0,1),
|
||||
(@OGUID+35,192487,571,1,128,5146.04443,2747.30249,433.527039,3.124123,0,0,0,0,120,0,1),
|
||||
(@OGUID+36,192487,571,1,128,5158.71,2882.90161,431.27417,3.14159274,0,0,0,0,120,0,1),
|
||||
(@OGUID+37,192487,571,1,128,5160.28369,2798.59766,430.6037,-3.124123,0,0,0,0,120,0,1),
|
||||
(@OGUID+38,192487,571,1,128,5162.90674,2952.59766,433.368,1.57079577,0,0,0,0,120,0,1),
|
||||
(@OGUID+39,192487,571,1,128,5163.85,2729.677,433.327545,-1.60570168,0,0,0,0,120,0,1),
|
||||
(@OGUID+40,192487,571,1,128,5260.82471,2631.81763,433.181061,3.124123,0,0,0,0,120,0,1),
|
||||
(@OGUID+41,192487,571,1,128,5262.544,3047.93018,431.96524,3.124123,0,0,0,0,120,0,1),
|
||||
(@OGUID+42,192487,571,1,128,5278.43066,2613.83276,433.294434,-1.62315571,0,0,0,0,120,0,1),
|
||||
(@OGUID+43,192487,571,1,128,5280.894,3064.95386,431.9758,1.55334139,0,0,0,0,120,0,1),
|
||||
-- Fortress Banners "Horde"
|
||||
(@OGUID+44,192269,571,1,64,4526.46,2810.18,391.2,-2.99322,0,0,0,1,180,0,1),
|
||||
(@OGUID+45,192284,571,1,64,5372.48,2862.5,409.049,3.14159,0,0,0,1,180,0,1),
|
||||
(@OGUID+46,192285,571,1,64,5371.49,2820.8,409.177,3.14159,0,0,0,1,180,0,1),
|
||||
(@OGUID+47,192338,571,1,64,5397.76,2873.08,455.461,3.10665,0,0,0,1,180,0,1),
|
||||
(@OGUID+48,192339,571,1,64,5397.39,2809.33,455.344,3.10665,0,0,0,1,180,0,1),
|
||||
(@OGUID+49,192349,571,1,64,5155.31,2820.74,444.979,-3.13286,0,0,0,1,180,0,1),
|
||||
(@OGUID+50,192350,571,1,64,5270.69,2861.78,445.058,-3.11539,0,0,0,1,180,0,1),
|
||||
(@OGUID+51,192351,571,1,64,5271.28,2820.16,445.201,-3.13286,0,0,0,1,180,0,1),
|
||||
(@OGUID+52,192352,571,1,64,5173.02,2820.93,435.72,0.017452,0,0,0,1,180,0,1),
|
||||
(@OGUID+53,192353,571,1,64,5172.11,2862.57,435.721,0.017452,0,0,0,1,180,0,1),
|
||||
(@OGUID+54,192354,571,1,64,5288.41,2861.79,435.721,0.017452,0,0,0,1,180,0,1),
|
||||
(@OGUID+55,192355,571,1,64,5288.92,2820.22,435.721,0.017452,0,0,0,1,180,0,1),
|
||||
(@OGUID+56,192356,571,1,64,5237.07,2757.03,435.796,1.51844,0,0,0,1,180,0,1),
|
||||
(@OGUID+57,192357,571,1,64,5235.34,2924.34,435.04,-1.5708,0,0,0,1,180,0,1),
|
||||
(@OGUID+58,192358,571,1,64,5322.23,2899.43,435.808,-1.58825,0,0,0,1,180,0,1),
|
||||
(@OGUID+59,192359,571,1,64,5364.35,2899.4,435.839,-1.5708,0,0,0,1,180,0,1),
|
||||
(@OGUID+60,192360,571,1,64,5352.37,3037.09,435.252,-1.5708,0,0,0,1,180,0,1),
|
||||
(@OGUID+61,192361,571,1,64,5392.65,3037.11,433.713,-1.52716,0,0,0,1,180,0,1),
|
||||
(@OGUID+62,192362,571,1,64,5322.12,2763.61,444.974,-1.55334,0,0,0,1,180,0,1),
|
||||
(@OGUID+63,192363,571,1,64,5363.61,2763.39,445.024,-1.54462,0,0,0,1,180,0,1),
|
||||
(@OGUID+64,192364,571,1,64,5350.88,2622.72,444.686,-1.5708,0,0,0,1,180,0,1),
|
||||
(@OGUID+65,192366,571,1,64,5236.27,2739.46,444.992,-1.59698,0,0,0,1,180,0,1),
|
||||
(@OGUID+66,192367,571,1,64,5271.8,2704.87,445.183,-3.13286,0,0,0,1,180,0,1),
|
||||
(@OGUID+67,192368,571,1,64,5289.46,2704.68,435.875,-0.017451,0,0,0,1,180,0,1),
|
||||
(@OGUID+68,192369,571,1,64,5350.95,2640.36,435.408,1.5708,0,0,0,1,180,0,1),
|
||||
(@OGUID+69,192370,571,1,64,5392.27,2639.74,435.331,1.50971,0,0,0,1,180,0,1),
|
||||
(@OGUID+70,192371,571,1,64,5364.29,2916.94,445.331,1.57952,0,0,0,1,180,0,1),
|
||||
(@OGUID+71,192372,571,1,64,5322.86,2916.95,445.154,1.56207,0,0,0,1,180,0,1),
|
||||
(@OGUID+72,192373,571,1,64,5290.35,2976.56,435.221,0.017452,0,0,0,1,180,0,1),
|
||||
(@OGUID+73,192374,571,1,64,5272.94,2976.55,444.492,3.12412,0,0,0,1,180,0,1),
|
||||
(@OGUID+74,192375,571,1,64,5235.19,2941.9,444.278,1.58825,0,0,0,1,180,0,1),
|
||||
(@OGUID+75,192376,571,1,64,5352.19775,3055.0166,444.5646,1.57952,0,0,0,0,120,0,1),
|
||||
(@OGUID+76,192377,571,1,64,5414.19,3069.8,415.187,1.64061,0,0,0,1,180,0,1),
|
||||
(@OGUID+77,192378,571,1,64,5322.02,2781.13,435.811,1.5708,0,0,0,1,180,0,1),
|
||||
(@OGUID+78,192379,571,1,64,5363.42,2781.03,435.763,1.5708,0,0,0,1,180,0,1),
|
||||
(@OGUID+79,192254,571,1,64,5154.46,2828.94,409.189,3.14159,0,0,0,1,180,0,1),
|
||||
(@OGUID+80,192255,571,1,64,5154.52,2853.31,409.183,3.14159,0,0,0,1,180,0,1),
|
||||
(@OGUID+81,192336,571,1,64,5154.49,2862.15,445.012,3.14159,0,0,0,1,180,0,1),
|
||||
(@OGUID+82,192488,571,1,64,5160.34,2798.61,430.769,3.14159,0,0,0,1,180,0,1),
|
||||
(@OGUID+83,192488,571,1,64,5158.81,2883.13,431.618,3.14159,0,0,0,1,180,0,1),
|
||||
(@OGUID+84,192488,571,1,64,5278.38,2613.83,433.409,-1.58825,0,0,0,1,180,0,1),
|
||||
(@OGUID+85,192488,571,1,64,5260.82,2631.8,433.324,3.05433,0,0,0,1,180,0,1),
|
||||
(@OGUID+86,192488,571,1,64,5163.13,2952.59,433.503,1.53589,0,0,0,1,180,0,1),
|
||||
(@OGUID+87,192488,571,1,64,5145.11,2935,433.386,3.14159,0,0,0,1,180,0,1),
|
||||
(@OGUID+88,192488,571,1,64,5262.54,3047.95,432.055,3.10665,0,0,0,1,180,0,1),
|
||||
(@OGUID+89,192488,571,1,64,5146.04,2747.21,433.584,3.07177,0,0,0,1,180,0,1),
|
||||
(@OGUID+90,192488,571,1,64,5163.78,2729.68,433.394,-1.58825,0,0,0,1,180,0,1),
|
||||
(@OGUID+91,192488,571,1,64,5280.894,3064.95386,431.9758,1.55334139,0,0,0,0,120,0,1),
|
||||
-- Tower Banners "Alliance"
|
||||
(@OGUID+92,192501,571,1,64,4398.82,2804.7,429.792,-1.58825,0,0,0,1,180,0,1),
|
||||
(@OGUID+93,192501,571,1,64,4416,2822.67,429.851,-0.017452,0,0,0,1,180,0,1),
|
||||
(@OGUID+94,192501,571,1,64,4559.11,3606.22,419.999,-1.48353,0,0,0,1,180,0,1),
|
||||
(@OGUID+95,192501,571,1,64,4539.42,3622.49,420.034,-3.07177,0,0,0,1,180,0,1),
|
||||
(@OGUID+96,192501,571,1,64,4555.26,3641.65,419.974,1.67551,0,0,0,1,180,0,1),
|
||||
(@OGUID+97,192501,571,1,64,4574.87,3625.91,420.079,0.087266,0,0,0,1,180,0,1),
|
||||
(@OGUID+98,192501,571,1,64,4466.79,1960.42,459.144,1.15192,0,0,0,1,180,0,1),
|
||||
(@OGUID+99,192501,571,1,64,4475.35,1937.03,459.07,-0.436332,0,0,0,1,180,0,1),
|
||||
(@OGUID+100,192501,571,1,64,4451.76,1928.1,459.076,-2.00713,0,0,0,1,180,0,1),
|
||||
(@OGUID+101,192501,571,1,64,4442.99,1951.9,459.093,2.74016,0,0,0,1,180,0,1),
|
||||
(@OGUID+102,192501,571,1,64,4380.36328,2822.38013,429.8818,-3.106652,0,0,0,0,120,0,1),
|
||||
(@OGUID+103,192501,571,1,64,4397.6626,2840.299,429.921661,1.58824873,0,0,0,0,120,0,1),
|
||||
-- Tower Banners "Horde"
|
||||
(@OGUID+104,192502,571,1,128,4398.82,2804.7,429.792,-1.58825,0,0,0,1,180,0,1),
|
||||
(@OGUID+105,192502,571,1,128,4416,2822.67,429.851,-0.017452,0,0,0,1,180,0,1),
|
||||
(@OGUID+106,192502,571,1,128,4559.11,3606.22,419.999,-1.48353,0,0,0,1,180,0,1),
|
||||
(@OGUID+107,192502,571,1,128,4539.42,3622.49,420.034,-3.07177,0,0,0,1,180,0,1),
|
||||
(@OGUID+108,192502,571,1,128,4555.26,3641.65,419.974,1.67551,0,0,0,1,180,0,1),
|
||||
(@OGUID+109,192502,571,1,128,4574.87,3625.91,420.079,0.087266,0,0,0,1,180,0,1),
|
||||
(@OGUID+110,192502,571,1,128,4466.79,1960.42,459.144,1.15192,0,0,0,1,180,0,1),
|
||||
(@OGUID+111,192502,571,1,128,4475.35,1937.03,459.07,-0.436332,0,0,0,1,180,0,1),
|
||||
(@OGUID+112,192502,571,1,128,4451.76,1928.1,459.076,-2.00713,0,0,0,1,180,0,1),
|
||||
(@OGUID+113,192502,571,1,128,4442.99,1951.9,459.093,2.74016,0,0,0,1,180,0,1),
|
||||
(@OGUID+114,192502,571,1,128,4380.36328,2822.38013,429.8818,-3.106652,0,0,0,0,120,0,1),
|
||||
(@OGUID+115,192502,571,1,128,4397.6626,2840.299,429.921661,1.58824873,0,0,0,0,120,0,1);
|
||||
|
||||
SET @OGUID := 280000;
|
||||
DELETE FROM `gameobject` WHERE `id` IN (192458,192459,192460,192461,192289,192290,192434,192435,192280,192283,192425,192426,192427,192428,192288,192291);
|
||||
INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
|
||||
-- The Sunken Ring "Horde"
|
||||
(@OGUID+0,192458,571,1,16,4811.4,2441.9,358.207,-2.0333,0,0,0,1,180,0,1),
|
||||
(@OGUID+1,192459,571,1,16,4805.67,2407.48,358.191,1.78023,0,0,0,1,180,0,1),
|
||||
(@OGUID+2,192460,571,1,16,5004.35,2486.36,358.449,2.17294,0,0,0,1,180,0,1),
|
||||
(@OGUID+3,192461,571,1,16,4983.28,2503.09,358.177,-0.427603,0,0,0,1,180,0,1),
|
||||
(@OGUID+4,192289,571,1,16,4778.19,2438.06,345.644,-2.94088,0,0,0,1,180,0,1),
|
||||
(@OGUID+5,192290,571,1,16,5024.57,2532.75,344.023,-1.93732,0,0,0,1,180,0,1),
|
||||
-- The Sunken Ring "Alliance"
|
||||
(@OGUID+6,192425,571,1,32,4811.435,2441.84546,357.982483,-2.02457881,0,0,0,0,120,0,1),
|
||||
(@OGUID+7,192426,571,1,32,4805.514,2407.84375,357.940765,1.7715075,0,0,0,0,120,0,1),
|
||||
(@OGUID+8,192427,571,1,32,5004.35,2486.36,358.449,2.17294,0,0,0,1,180,0,1),
|
||||
(@OGUID+9,192428,571,1,32,4983.221,2503.27271,357.959534,-0.43633157,0,0,0,0,120,0,1),
|
||||
(@OGUID+10,192288,571,1,32,4778.065,2438.02441,345.7063,-2.932139,0,0,0,0,120,0,1),
|
||||
(@OGUID+11,192291,571,1,32,5024.608,2532.72583,344.4308,-1.94604158,0,0,0,0,120,0,1),
|
||||
-- The Broken Temple "Horde"
|
||||
(@OGUID+12,192434,571,1,16,5041.61,3294.4,382.15,-1.63188,0,0,0,1,180,0,1),
|
||||
(@OGUID+13,192435,571,1,16,4855.63,3297.62,376.739,-3.13286,0,0,0,1,180,0,1),
|
||||
(@OGUID+14,192280,571,1,16,4857.97,3335.44,368.881,-2.94959,0,0,0,1,180,0,1),
|
||||
(@OGUID+15,192283,571,1,16,5006.34,3280.4,371.163,2.22529,0,0,0,1,180,0,1),
|
||||
-- The Broken Temple "Alliance"
|
||||
(@OGUID+16,192400,571,1,32,5041.650879,3294.318604,381.919952,-1.605702,0,0,0,1,180,0,1),
|
||||
(@OGUID+17,192401,571,1,32,4855.444336,3297.600830,376.495758,-3.115388,0,0,0,1,180,0,1),
|
||||
(@OGUID+18,192281,571,1,32,4857.971191,3335.415771,369.291901,-2.888511,0,0,0,1,180,0,1),
|
||||
(@OGUID+19,192282,571,1,32,5006.322754,3280.362061,371.242249,2.242746,0,0,0,1,180,0,1);
|
||||
|
||||
-- EVERYTHING UNDER HERE IS WIP
|
||||
|
||||
-- Eastspark Workshop "Horde"
|
||||
(@OGUID+20,192452,571,1,16,4416.7993,2414.0383,377.4869,0.0087,0,0,0,0,120,0,1),
|
||||
-- Eastspark Workshop "Alliance"
|
||||
(@OGUID+21,192416,571,1,32,4408.57,2422.61,377.179,1.58825,0,0,0,1,180,0,1),
|
||||
(@OGUID+22,192417,571,1,32,4416.59,2414.08,377.196,0,0,0,0,1,180,0,1),
|
||||
(@OGUID+23,192418,571,1,32,4417.25,2301.14,377.214,0.026179,0,0,0,1,180,0,1),
|
||||
(@OGUID+24,192273,571,1,32,4417.94,2324.81,371.577,3.08051,0,0,0,1,180,0,1),
|
||||
-- Westspark Workshop "Horde"
|
||||
|
||||
-- Westspark Workshop "Alliance"
|
||||
(@OGUID+25,192274,571,1,32,4424.15,3286.54,371.546,3.12412,0,0,0,1,180,0,1),
|
||||
(@OGUID+26,192406,571,1,32,4438.3,3361.08,371.568,-0.017451,0,0,0,1,180,0,1),
|
||||
(@OGUID+27,192407,571,1,32,4448.17,3235.63,370.412,-1.56207,0,0,0,1,180,0,1),
|
||||
(@OGUID+28,192433,571,1,32,4401.63,3377.46,363.365,1.55334,0,0,0,1,180,0,1),
|
||||
|
||||
-- *** in progress zone horde banner in phase 128 + 32
|
||||
|
||||
-- Winters Edge tower alliance
|
||||
(192429,571,1,64,4464.123535 2855.453125 406.110596,0.829032,0,0,0,0,120,0,1);
|
||||
(192430,571,1,64,4434.555664,2883.448730,406.025299,0.759217,0,0,0,0,120,0,1);
|
||||
(192431,571,1,64,4349.900391,2885.561768,406.104889,1.605702,0,0,0,0,120,0,1);
|
||||
(192414,571,1,64,4387.621582 2719.565918 389.935120,-1.544616,0,0,0,0,120,0,1);
|
||||
-- Winters Edge tower horde
|
||||
(192442,571,1,128,4350.039,2885.61377,406.3287,1.58824873,0,0,0,0,120,0,1);
|
||||
(192443,571,1,128,4434.32568,2883.244,406.3456,0.767943859,0,0,0,0,120,0,1);
|
||||
(192444,571,1,128,4464.17432,2855.3186,406.390961,0.802850962,0,0,0,0,120,0,1);
|
||||
(192450,571,1,128,4387.59033,2719.90015,390.200531,-1.51843357,0,0,0,0,120,0,1);
|
||||
|
||||
(192449,571,1,129,4517.75342,2717.231,387.811981,-1.53588688,0,0,0,0,120,0,1);
|
||||
(192424,571,1,417,4563.70166,2171.03125,367.607056,-1.82386875,0,0,0,0,120,0,1),
|
||||
(192626,571,1,65,4938.364,2454.59863,320.391785,-2.513274,0,0,0,0,120,0,1);
|
||||
(192627,571,1,65,4939.48535,3339.65259,376.874939,0.890116632,0,0,0,0,120,0,1);
|
||||
|
||||
192271 4424.741211 2975.604980 367.226807 1.701696 -- banner pole shawdowsight
|
||||
|
||||
|
||||
-- Misc objects in fortress phased properly
|
||||
SET @OGUID := 282000;
|
||||
DELETE FROM `gameobject` WHERE `guid` IN (67165,67224,67222,67190,67195,67216,67193,67182,67186,67192,67161,67164,67180,67187);
|
||||
DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID AND @OGUID+55;
|
||||
INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
|
||||
(@OGUID+0,193096,571,1,128,5379.885,3008.093,409.181915,-3.124123,0,0,0,0,120,0,1),
|
||||
(@OGUID+1,193097,571,1,128,5381.73975,3008.15454,409.181915,2.98449826,0,0,0,0,120,0,1),
|
||||
(@OGUID+2,193098,571,1,128,5383.672,3008.02783,409.181915,-3.115388,0,0,0,0,120,0,1),
|
||||
(@OGUID+3,193099,571,1,128,5386.25342,3007.79614,409.181915,2.932139,0,0,0,0,120,0,1),
|
||||
(@OGUID+4,193100,571,1,128,5387.354,3009.64941,409.181915,-1.30899549,0,0,0,0,120,0,1),
|
||||
(@OGUID+5,193101,571,1,128,5381.12744,3010.09717,409.181915,-2.72271276,0,0,0,0,120,0,1),
|
||||
(@OGUID+6,193102,571,1,128,5383.12061,3007.90967,410.8231,-2.530723,0,0,0,0,120,0,1),
|
||||
(@OGUID+7,193103,571,1,128,5381.105,3007.89575,410.8231,-3.09791875,0,0,0,0,120,0,1),
|
||||
(@OGUID+8,193104,571,1,128,5376.777,3010.619,409.191742,-2.60926127,0,0,0,0,120,0,1),
|
||||
(@OGUID+9,193105,571,1,128,5381.47559,3010.24731,410.8231,-2.80997539,0,0,0,0,120,0,1),
|
||||
(@OGUID+10,193106,571,1,128,5381.059,3009.85864,410.8231,2.66161919,0,0,0,0,120,0,1),
|
||||
(@OGUID+11,193107,571,1,128,5381.038,3010.44263,410.8157,-2.0507617,0,0,0,0,120,0,1),
|
||||
(@OGUID+12,193108,571,1,128,5379.83154,3007.82373,410.8161,-2.02457881,0,0,0,0,120,0,1),
|
||||
(@OGUID+13,193109,571,1,128,5379.99463,3008.40356,410.815918,-3.03687477,0,0,0,0,120,0,1),
|
||||
(@OGUID+14,193124,571,1,128,5293.65869,2924.44019,409.29306,1.20427489,0,0,0,0,120,0,1),
|
||||
(@OGUID+15,193125,571,1,1,5293.28,2932.32813,409.065247,-2.49581814,0,0,0,0,120,0,1),
|
||||
(@OGUID+16,193126,571,1,1,5292.30469,2930.5105,409.157135,-3.06302428,0,0,0,0,120,0,1),
|
||||
(@OGUID+17,193127,571,1,64,5293.349,2923.712,409.844757,-1.8762306,0,0,0,0,120,0,1),
|
||||
(@OGUID+18,193128,571,1,128,5293.12256,2895.22754,409.208771,-0.9861096,0,0,0,0,120,0,1),
|
||||
(@OGUID+19,193129,571,1,128,5292.913,2895.54346,410.419617,-0.122171074,0,0,0,0,120,0,1),
|
||||
(@OGUID+20,193130,571,1,128,5294.09473,2894.191,409.164063,-0.7330382,0,0,0,0,120,0,1),
|
||||
(@OGUID+21,193131,571,1,128,5295.1875,2895.382,409.143219,-0.349065244,0,0,0,0,120,0,1),
|
||||
(@OGUID+22,193132,571,1,128,5294.527,2895.57471,410.6591,-1.92858779,0,0,0,0,120,0,1),
|
||||
(@OGUID+23,193133,571,1,128,5295.3916,2895.05737,410.6686,0.6894028,0,0,0,0,120,0,1),
|
||||
(@OGUID+24,193134,571,1,128,5295.13525,2895.68481,410.618866,-2.22529364,0,0,0,0,120,0,1),
|
||||
(@OGUID+25,193135,571,1,128,5294.97559,2895.33521,410.657684,-2.73143482,0,0,0,0,120,0,1),
|
||||
(@OGUID+26,193136,571,1,128,5293.22559,2895.46436,410.413483,-0.802850962,0,0,0,0,120,0,1),
|
||||
(@OGUID+27,193137,571,1,128,5295.56,2895.24146,410.628052,-2.11184788,0,0,0,0,120,0,1),
|
||||
(@OGUID+28,193138,571,1,128,5293.741,2894.48169,409.183167,-2.72271276,0,0,0,0,120,0,1),
|
||||
(@OGUID+29,193139,571,1,64,5294.599,2786.85254,409.8877,-2.356195,0,0,0,0,120,0,1),
|
||||
(@OGUID+30,193140,571,1,64,5294.37939,2785.03833,409.175018,-2.33873963,0,0,0,0,120,0,1),
|
||||
(@OGUID+31,193141,571,1,64,5293.205,2787.03052,409.218872,3.03687477,0,0,0,0,120,0,1),
|
||||
(@OGUID+32,193142,571,1,64,5294.241,2786.42456,409.174347,0.0174524616,0,0,0,0,120,0,1),
|
||||
(@OGUID+33,193143,571,1,64,5291.705,2785.86646,409.282135,-2.03330517,0,0,0,0,120,0,1),
|
||||
(@OGUID+34,193144,571,1,64,5293.03369,2785.632,409.22522,-1.2915417,0,0,0,0,120,0,1),
|
||||
(@OGUID+35,193145,571,1,64,5295.866,2787.7666,409.1923,2.155478,0,0,0,0,120,0,1),
|
||||
(@OGUID+36,193146,571,1,64,5293.56445,2787.31079,410.55954,0.261798173,0,0,0,0,120,0,1),
|
||||
(@OGUID+37,193147,571,1,128,5233.12061,2920.362,409.163544,-0.7243115,0,0,0,0,120,0,1),
|
||||
(@OGUID+38,193148,571,1,128,5238.27539,2920.67358,409.256439,-0.418878615,0,0,0,0,120,0,1),
|
||||
(@OGUID+39,193149,571,1,128,5235.902,2920.751,409.224457,-0.951203167,0,0,0,0,120,0,1),
|
||||
(@OGUID+40,193150,571,1,128,5237.36963,2919.89771,409.556641,0.8202983,0,0,0,0,120,0,1),
|
||||
(@OGUID+41,193151,571,1,128,5234.19775,2918.99731,409.322754,-2.33873963,0,0,0,0,120,0,1),
|
||||
(@OGUID+42,193152,571,1,128,5234.52344,2921.76221,409.175781,-2.2165668,0,0,0,0,120,0,1),
|
||||
(@OGUID+43,193153,571,1,128,5234.119,2918.93921,409.1339,-3.098036,0,0,0,0,120,0,1),
|
||||
(@OGUID+44,193154,571,1,128,5234.26758,2919.40015,409.502869,-2.18166113,0,0,0,0,120,0,1),
|
||||
(@OGUID+45,193155,571,1,128,5293.37939,2746.05566,409.22052,-0.06981169,0,0,0,0,120,0,1),
|
||||
(@OGUID+46,193156,571,1,128,5293.65039,2755.67529,409.1913,-0.43633157,0,0,0,0,120,0,1),
|
||||
(@OGUID+47,193157,571,1,128,5292.23535,2753.59473,409.0867,-0.357789934,0,0,0,0,120,0,1),
|
||||
(@OGUID+48,193158,571,1,128,5292.42969,2748.62427,409.131042,0.253072351,0,0,0,0,120,0,1),
|
||||
(@OGUID+49,193159,571,1,128,5293.384,2750.90283,409.234924,-0.0610866137,0,0,0,0,120,0,1),
|
||||
(@OGUID+50,193160,571,1,64,5371.89746,2805.47583,409.3072,0.0610866137,0,0,0,0,120,0,1),
|
||||
(@OGUID+51,193161,571,1,64,5376.616,2875.105,409.254822,1.59697616,0,0,0,0,120,0,1),
|
||||
(@OGUID+52,193162,571,1,128,5377.54932,2870.92456,409.239166,-0.549776852,0,0,0,0,120,0,1),
|
||||
(@OGUID+53,193163,571,1,128,5378.068,2813.61719,409.239166,1.55334139,0,0,0,0,120,0,1),
|
||||
(@OGUID+54,193164,571,1,128,5378.921,2805.43677,409.239166,1.53588688,0,0,0,0,120,0,1),
|
||||
(@OGUID+55,193165,571,1,128,5378.452,2876.67456,409.239166,1.54461825,0,0,0,0,120,0,1);
|
||||
|
||||
@@ -0,0 +1,341 @@
|
||||
-- Unused yet:
|
||||
-- Wintergrasp is under attack!
|
||||
-- Wintergrasp Fortress is under attack!
|
||||
-- Winter's Edge Tower is under attack!
|
||||
-- Eastern Bridge is under attack!
|
||||
-- Western Bridge is under attack!
|
||||
-- Westspark Bridge is under attack!
|
||||
-- Flamewatch Tower is under attack!
|
||||
|
||||
-- 'You have reached Rank 1: Corporal' Sent to player by raid leader
|
||||
-- 'You have reached Rank 2: First Lieutenant' Sent to player by raid leader
|
||||
|
||||
-- Wintergrasp coreside texts
|
||||
DELETE FROM trinity_string WHERE entry BETWEEN 12050 AND 12072;
|
||||
INSERT INTO `trinity_string` (`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`)VALUES
|
||||
(12050, '%s has been captured by %s ', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
(12051, '%s is under attack by %s', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12052, 'The Broken Temple siege workshop', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12053, 'Eastspark siege workshop', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12054, 'Westspark siege workshop', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12055, 'The Sunken Ring siege workshop', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12057, 'Alliance', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12056, 'Horde', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12058, 'The battle for Wintergrasp is about to begin!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12059, 'You have reached Rank 1: Corporal', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12060, 'You have reached Rank 2: First Lieutenant', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12061, 'The south-eastern keep tower', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12062, 'The north-eastern keep tower', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12063, 'The south-western keep tower', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12064, 'The north-western keep tower', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12065, '%s has been damaged !', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12066, '%s has been destroyed!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12067, 'The battle for Wintergrasp begin!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12068, '%s has successfully defended the Wintergrasp fortress!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12069, 'The southern tower', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12070, 'The eastern tower', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12071, 'The western tower', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
(12072, 'The Wintergrasp fortress has been captured by %s !', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
|
||||
|
||||
-- Wintergrasp script texts
|
||||
DELETE FROM `script_texts` WHERE entry BETWEEN -1850500 AND -1850507;
|
||||
INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`,`sound`,`type`,`language`,`emote`,`comment`)VALUES
|
||||
(0, -1850500, 'Guide me to the Fortress Graveyard.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, ''),
|
||||
(0, -1850501, 'Guide me to the Sunken Ring Graveyard.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, ''),
|
||||
(0, -1850502, 'Guide me to the Broken Temple Graveyard.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, ''),
|
||||
(0, -1850503, 'Guide me to the Westspark Graveyard.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, ''),
|
||||
(0, -1850504, 'Guide me to the Eastspark Graveyard.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, ''),
|
||||
(0, -1850505, 'Guide me back to the Horde landing camp.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, ''),
|
||||
(0, -1850506, 'Guide me back to the Alliance landing camp.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, ''),
|
||||
(0, -1850507, 'Se mettre dans la file pour le Joug-d''hiver.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, ''); -- (Needs proper english text)
|
||||
|
||||
-- Wintergrasp queue template NPCs
|
||||
UPDATE `creature_template` SET `ScriptName`= 'npc_wg_dalaran_queue' WHERE `entry` IN (32169,32170,35599,35596,35600,35601,35598,35603,35602,35597,35612,35611);
|
||||
|
||||
-- 54640 Teleport (Teleports defenders behind the walls on the Isle of Ulduran, Strand of the Ancients) - FIX THIS?
|
||||
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=54640;
|
||||
INSERT INTO `spell_linked_spell` (`spell_trigger`,`spell_effect`,`type`,`comment`) VALUES (54640,54643,0, 'WG teleporter');
|
||||
|
||||
-- ???
|
||||
DELETE FROM `gameobject` WHERE `id` IN (194162,192951,192273,192274,192277,192280,192283,192289,192290,192338,192339,192406,192407,192414,192417,192418,192429,192433,192434,192435,192458,192459,192460,192461,192819,190475,190487,194959,194962,192829,190219,190220,191795,191796,191799,191800,191801,191802,191803,191804,191806,191807,191808,191809,190369,190370,190371,190372,190374,190376,190221,190373,190377,190378,191797,191798,191805,190356,190357,190358,190375,191810, 192488,192501,192374,192416,192375,192336,192255,192269,192254,192349,192366,192367,192364,192370,192369,192368,192362,192363,192379,192378,192355,192354,192358,192359,192284,192285,192371,192372,192373,192360,192361,192356,192352,192353,192357,192350,192351,190763,192501,192488,192269,192278) AND `map`=571;
|
||||
DELETE FROM `creature` WHERE `id` IN (30739,30740,31102,31841,31151,31153,32296,31051,31106,31108,31109,31053,30489,39172,31107,32294,31101,30499,31842,31036,31091,39173,31052,30400,31054) AND `map`=571;
|
||||
|
||||
-- ???
|
||||
UPDATE `creature_template` SET `InhabitType`=7 WHERE `entry`=27852;
|
||||
|
||||
-- Wintergrasp spiritguide NPC script
|
||||
UPDATE `creature_template` SET `ScriptName`= 'npc_wg_spiritguide' WHERE `entry` IN (31841,31842);
|
||||
|
||||
-- Wintergrasp demolisher engineer NPC script
|
||||
UPDATE `creature_template` SET `ScriptName`= 'npc_demolisher_engineerer' WHERE `entry` IN (30400,30499);
|
||||
|
||||
-- 58730 Restricted Flight Area (Wintergrasp Eject)
|
||||
DELETE FROM `spell_area` WHERE `spell`=58730;
|
||||
INSERT INTO `spell_area` (`spell`,`area`,`quest_start`,`quest_start_active`,`quest_end`,`aura_spell`,`racemask`,`gender`,`autocast`)VALUES
|
||||
(58730,4581,0,0,0,0,0,2,1),
|
||||
(58730,4539,0,0,0,0,0,2,1),
|
||||
(58730,4197,0,0,0,0,0,2,1),
|
||||
(58730,4585,0,0,0,0,0,2,1),
|
||||
(58730,4612,0,0,0,0,0,2,1),
|
||||
(58730,4582,0,0,0,0,0,2,1),
|
||||
(58730,4583,0,0,0,0,0,2,1),
|
||||
(58730,4589,0,0,0,0,0,2,1),
|
||||
(58730,4575,0,0,0,0,0,2,1),
|
||||
(58730,4538,0,0,0,0,0,2,1),
|
||||
(58730,4577,0,0,0,0,0,2,1);
|
||||
|
||||
-- 57940 Essence of Wintergrasp
|
||||
DELETE FROM `spell_area` WHERE `spell`=57940;
|
||||
INSERT INTO `spell_area` (`spell`,`area`,`quest_start`,`quest_start_active`,`quest_end`,`aura_spell`,`racemask`,`gender`,`autocast`)VALUES
|
||||
(57940,65,0,0,0,0,0,2,1),
|
||||
(57940,66,0,0,0,0,0,2,1),
|
||||
(57940,67,0,0,0,0,0,2,1),
|
||||
(57940,206,0,0,0,0,0,2,1),
|
||||
(57940,210,0,0,0,0,0,2,1),
|
||||
(57940,394,0,0,0,0,0,2,1),
|
||||
(57940,395,0,0,0,0,0,2,1),
|
||||
(57940,1196,0,0,0,0,0,2,1),
|
||||
(57940,2817,0,0,0,0,0,2,1),
|
||||
(57940,3456,0,0,0,0,0,2,1),
|
||||
(57940,3477,0,0,0,0,0,2,1),
|
||||
(57940,3537,0,0,0,0,0,2,1),
|
||||
(57940,3711,0,0,0,0,0,2,1),
|
||||
(57940,4100,0,0,0,0,0,2,1),
|
||||
(57940,4196,0,0,0,0,0,2,1),
|
||||
(57940,4228,0,0,0,0,0,2,1),
|
||||
(57940,4264,0,0,0,0,0,2,1),
|
||||
(57940,4265,0,0,0,0,0,2,1),
|
||||
(57940,4272,0,0,0,0,0,2,1),
|
||||
(57940,4273,0,0,0,0,0,2,1),
|
||||
(57940,4395,0,0,0,0,0,2,1),
|
||||
(57940,4415,0,0,0,0,0,2,1),
|
||||
(57940,4416,0,0,0,0,0,2,1),
|
||||
(57940,4493,0,0,0,0,0,2,1),
|
||||
(57940,4494,0,0,0,0,0,2,1),
|
||||
(57940,4603,0,0,0,0,0,2,1);
|
||||
|
||||
-- Wintergrasp Cannons (Spell 51421 : Fire Cannon)
|
||||
UPDATE `creature_template` SET `faction_A`=1732,`faction_H`=1735,`spell1`=51421 WHERE `entry`=28366; -- *** WRONG ****
|
||||
UPDATE `creature_template` SET `faction_A`=1732,`faction_H`=1732 WHERE `entry` IN (30499,30740, 28319); -- Alliance
|
||||
UPDATE `creature_template` SET `faction_A`=1735,`faction_H`=1735 WHERE `entry` IN (30400,30739, 32629); -- Horde
|
||||
|
||||
-- Added by Malcrom
|
||||
UPDATE `creature_template` SET `faction_A`=1732,`faction_H`=1732 WHERE `entry` IN (28312); -- Alliance
|
||||
UPDATE `creature_template` SET `faction_A`=1735,`faction_H`=1735 WHERE `entry` IN (32627); -- Horde
|
||||
|
||||
-- New support-commands for battlefield class
|
||||
DELETE FROM `command` WHERE name IN ('bf start', 'bf stop', 'bf enable', 'bf switch', 'bf timer');
|
||||
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('bf start',3,'Syntaxe: .bf start #battleid');
|
||||
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('bf stop',3,'Syntaxe: .bf stop #battleid');
|
||||
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('bf enable',3,'Syntaxe: .bf enable #battleid');
|
||||
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('bf switch',3,'Syntaxe: .bf switch #battleid');
|
||||
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('bf timer',3,'Syntaxe: .bf timer #battleid #timer');
|
||||
|
||||
-- 49899 Activate Robotic Arms
|
||||
DELETE FROM `spell_scripts` WHERE `id`=49899;
|
||||
INSERT INTO `spell_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`y`,`z`,`o`) VALUES
|
||||
(49899,0,1,406,0,0,0,0,0,0);
|
||||
|
||||
-- Wintergrasp creature addon cleanups
|
||||
DELETE FROM `creature_addon` WHERE `guid` BETWEEN 131258 AND 131322;
|
||||
DELETE FROM `creature_addon` WHERE `guid` BETWEEN 131326 AND 131328;
|
||||
DELETE FROM `creature_addon` WHERE `guid` BETWEEN 131350 AND 131353;
|
||||
DELETE FROM `creature_addon` WHERE `guid` BETWEEN 131376 AND 131380;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=131392;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=131437;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=131458;
|
||||
DELETE FROM `creature_addon` WHERE `guid` BETWEEN 131631 AND 131634;
|
||||
DELETE FROM `creature_addon` WHERE `guid`=131706;
|
||||
DELETE FROM `creature_addon` WHERE `guid` BETWEEN 131727 AND 131731;
|
||||
|
||||
-- Wintergrasp vehicle teleport
|
||||
UPDATE `gameobject_template` SET `ScriptName`= 'go_wintergrasp_teleporter' WHERE `entry`=192951;
|
||||
|
||||
-- Wintergrasp Quests - Horde
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13180 WHERE `entry` IN (13180, 13178);
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13185 WHERE `entry` IN (13185, 13223);
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13192 WHERE `entry` IN (13192, 13202);
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13199 WHERE `entry` IN (13193, 13199);
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13200 WHERE `entry` IN (13200, 13191);
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13201 WHERE `entry` IN (13201, 13194);
|
||||
|
||||
-- Wintergrasp Quests - Alliance
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13179 WHERE `entry` IN (13179, 13177);
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13186 WHERE `entry` IN (13186, 13222);
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13195 WHERE `entry` IN (13195, 13156);
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13196 WHERE `entry` IN (13196, 13154);
|
||||
UPDATE `quest_template` SET `ExclusiveGroup`=13198 WHERE `entry` IN (13198, 13153);
|
||||
|
||||
-- Wintergrasp Questgiver NPCs - requires binding to Wintergrasp questgiver script
|
||||
UPDATE `creature_template` SET `ScriptName`= 'npc_wintergrasp_quest_giver' WHERE `entry` IN (31054, 31052, 31091, 31036, 31101, 31107, 31053, 31051, 31153, 31151, 31102, 31106);
|
||||
|
||||
-- Wintergrasp Catapult speed adjustments
|
||||
UPDATE `creature_template` SET `speed_walk`=2.8,`speed_run`=1.6 WHERE `entry`=27881;
|
||||
|
||||
-- Add Missing Horde Spirt Healer options Wintergrasp
|
||||
DELETE FROM `gossip_menu_option` WHERE `menu_id`=10129 AND `id` IN (2,4);
|
||||
INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`action_script_id`,`box_coded`,`box_money`,`box_text`) VALUES
|
||||
(10129,2,0, 'Guide me to the Broken Temple Graveyard.',1,1,0,0,0,0,0, ''),
|
||||
(10129,4,0, 'Guide me to the Eastspark Graveyard.',1,1,0,0,0,0,0, '');
|
||||
|
||||
-- Add Spell Target position for Wintergrasp Graveyard spells
|
||||
DELETE FROM `spell_target_position` WHERE `id` IN (59760,59762,59763,59765,59766,59767,59769);
|
||||
INSERT INTO `spell_target_position` (`id`,`target_map`,`target_position_x`,`target_position_y`,`target_position_z`,`target_orientation`) VALUES
|
||||
(59760,571,5537.986,2897.493,517.057,4.819249), -- Teleport: Fortress Graveyard
|
||||
(59762,571,5104.750,2300.940,368.579,0.733038), -- Teleport: Sunken Ring "area 4538"
|
||||
(59763,571,5099.120,3466.036,368.484,5.317802), -- Teleport: Broken Temple "area 4539 & 4589"
|
||||
(59765,571,5032.454,3711.382,372.468,3.971623), -- Teleport: Horde Landing Zone
|
||||
(59766,571,4331.716,3235.695,390.251,0.008500), -- Teleport: Westspark Factory Graveyard "area 4611"
|
||||
(59767,571,4314.648,2408.522,392.642,6.268125), -- Teleport: Eastspark Factory Graveyard "area 4612"
|
||||
(59769,571,5140.790,2179.120,390.950,1.972220); -- Teleport: Alliance Landing Zone
|
||||
|
||||
-- Add scripts to Wintergrasp spirit guide gossip
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=1012800 WHERE `menu_id` IN (10128,10129) AND `id`=0;
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=1012801 WHERE `menu_id` IN (10128,10129) AND `id`=1;
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=1012802 WHERE `menu_id` IN (10128,10129) AND `id`=2;
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=1012803 WHERE `menu_id` IN (10128,10129) AND `id`=3;
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=1012804 WHERE `menu_id` IN (10128,10129) AND `id`=4;
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=1012805 WHERE `menu_id`=10128 AND `id`=5;
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=1012806 WHERE `menu_id`=10129 AND `id`=5;
|
||||
|
||||
-- Add Teleport graveyard Spells to gossip scripts
|
||||
DELETE FROM `gossip_scripts` WHERE `id` IN (1012800,1012801,1012802,1012803,1012804,1012805,1012806);
|
||||
INSERT INTO `gossip_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`) VALUES
|
||||
(1012800,0,33,0,0),(1012800,0,15,59760,1),
|
||||
(1012801,0,33,0,0),(1012801,0,15,59762,1),
|
||||
(1012802,0,33,0,0),(1012802,0,15,59763,1),
|
||||
(1012803,0,33,0,0),(1012803,0,15,59766,1),
|
||||
(1012804,0,33,0,0),(1012804,0,15,59767,1),
|
||||
(1012805,0,33,0,0),(1012805,0,15,59769,1),
|
||||
(1012806,0,33,0,0),(1012806,0,15,59765,1);
|
||||
|
||||
-- Taunka Spirit Guide SAI
|
||||
SET @ENTRY := 31841;
|
||||
UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=@ENTRY;
|
||||
DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY);
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
|
||||
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,0,11,0,100,0,0,0,0,0,11,58729,0,0,0,0,0,1,0,0,0,0,0,0,0, 'on spawn aura self'),
|
||||
(@ENTRY,0,1,0,1,0,100,0,0,0,30000,30000,11,22011,0,0,0,0,0,1,0,0,0,0,0,0,0, 'cast Spirit Heal Channel every 30 sec');
|
||||
-- Dwarven Spirit Guide SAI
|
||||
SET @ENTRY := 31842;
|
||||
UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=@ENTRY;
|
||||
DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id`=@ENTRY);
|
||||
DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
|
||||
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,0,11,0,100,0,0,0,0,0,11,58729,0,0,0,0,0,1,0,0,0,0,0,0,0, 'on spawn aura self'),
|
||||
(@ENTRY,0,1,0,1,0,100,0,0,0,30000,30000,11,22011,0,0,0,0,0,1,0,0,0,0,0,0,0, 'cast Spirit Heal Channel every 30 sec');
|
||||
|
||||
-- Gossip Menu insert from sniff
|
||||
DELETE FROM `gossip_menu` WHERE `entry`=9904 AND `text_id`=13759;
|
||||
INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9904,13759);
|
||||
DELETE FROM `gossip_menu` WHERE `entry`=9904 AND `text_id`=13761;
|
||||
INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9904,13761);
|
||||
DELETE FROM `gossip_menu` WHERE `entry`=9923 AND `text_id`=14172;
|
||||
INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (9923,14172);
|
||||
DELETE FROM `gossip_menu` WHERE `entry`=10229 AND `text_id`=14221;
|
||||
INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (10229,14221);
|
||||
|
||||
-- Creature Gossip_menu_id Update from sniff
|
||||
UPDATE `creature_template` SET `gossip_menu_id`=9904 WHERE `entry`=30400;
|
||||
UPDATE `creature_template` SET `gossip_menu_id`=10229 WHERE `entry`=31091;
|
||||
-- Creature Gossip_menu_option Update from sniff
|
||||
DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (9904);
|
||||
INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`action_script_id`,`box_coded`,`box_money`,`box_text`) VALUES
|
||||
(9904,0,0, 'I would like to build a catapult.',1,1,0,0,0,0,0, ''),
|
||||
(9904,1,0, 'I would like to build a demolisher.',1,1,0,0,0,0,0, ''),
|
||||
(9904,2,0, 'I would like to build a siege engine.',1,1,0,0,0,0,0, '');
|
||||
-- Add gossip_menu condition for 9904 Horde
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=9904;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`) VALUES
|
||||
(14,9904,13759,0,1,33280), -- Must have Rank 1: Corporal
|
||||
(14,9904,13759,1,1,55629), -- Or must have Rank 2: First Lieutenant
|
||||
(14,9904,13761,0,11,33280), -- Must not have Rank 1: Corporal
|
||||
(14,9904,13761,0,11,55629); -- Must not have Rank 2: First Lieutenant
|
||||
-- Add gossip_menu condition for 9923 Alliance
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=9923;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`) VALUES
|
||||
(14,9923,13798,0,1,33280), -- Must have Rank 1: Corporal
|
||||
(14,9923,13798,1,1,55629), -- Or must have Rank 2: First Lieutenant
|
||||
(14,9923,14172,0,11,33280), -- Must not have Rank 1: Corporal
|
||||
(14,9923,14172,0,11,55629); -- Must not have Rank 2: First Lieutenant
|
||||
-- Add conditions to gossip options horde
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9904;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`) VALUES
|
||||
(15,9904,0,0,1,33280,0), -- Must have reached Rank 1: Corporal
|
||||
(15,9904,0,1,1,55629,0), -- Or must have reached Rank 2: First Lieutenant
|
||||
(15,9904,1,0,1,55629,0), -- Must have reached Rank 2: First Lieutenant
|
||||
(15,9904,2,0,1,55629,0); -- Must have reached Rank 2: First Lieutenant
|
||||
-- Add conditions to gossip options alliance
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9923;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`) VALUES
|
||||
(15,9923,0,0,1,33280,0), -- Must have reached Rank 1: Corporal
|
||||
(15,9923,0,1,1,55629,0), -- Or must have reached Rank 2: First Lieutenant
|
||||
(15,9923,1,0,1,55629,0), -- Must have reached Rank 2: First Lieutenant
|
||||
(15,9923,2,0,1,55629,0); -- Must have reached Rank 2: First Lieutenant
|
||||
|
||||
-- Add scripts to Wintergrasp engineers
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=990400 WHERE `menu_id` IN (9904,9923) AND `id`=0;
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=990401 WHERE `menu_id` IN (9904,9923) AND `id`=1;
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=990402 WHERE `menu_id` IN (9904) AND `id`=2;
|
||||
UPDATE `gossip_menu_option` SET `action_script_id`=990403 WHERE `menu_id` IN (9923) AND `id`=2;
|
||||
-- Add create vehicle Spells to gossip scripts
|
||||
DELETE FROM `gossip_scripts` WHERE `id` IN (990400,990401,990402);
|
||||
INSERT INTO `gossip_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`) VALUES
|
||||
(990400,0,33,0,0),(990400,0,15,56663,1),
|
||||
(990401,0,33,0,0),(990401,0,15,56575,1),
|
||||
(990402,0,33,0,0),(990402,0,15,61408,1),
|
||||
(990403,0,33,0,0),(990403,0,15,56661,1);
|
||||
|
||||
-- NPC talk text insert from sniff
|
||||
DELETE FROM `creature_text` WHERE `entry`=15214 AND `groupid` BETWEEN 0 AND 30;
|
||||
DELETE FROM `creature_text` WHERE `entry` IN (31036,31091) AND `groupid` BETWEEN 0 AND 3;
|
||||
DELETE FROM `creature_text` WHERE `entry` IN (31108,31109,34924) AND `groupid`=0;
|
||||
INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
|
||||
(15214,0,0, 'Let the battle begin!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,1,0, 'The southern tower has been damaged!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,2,0, 'The southern tower has been destroyed!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,3,0, 'The eastern tower has been damaged!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,4,0, 'The eastern tower has been destroyed!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,5,0, 'The western tower has been damaged!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,6,0, 'The western tower has been destroyed!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,7,0, 'The north-western keep tower has been damaged!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,8,0, 'The north-western keep tower has been destroyed!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,9,0, 'The south-eastern keep tower has been damaged!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,10,0, 'The south-eastern keep tower has been destroyed!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,11,0, 'The Broken Temple siege workshop has been attacked by the Alliance!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,12,0, 'The Broken Temple siege workshop has been captured by the Alliance!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,13,0, 'The Broken Temple siege workshop has been attacked by the Horde!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,14,0, 'The Broken Temple siege workshop has been captured by the Horde!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,15,0, 'The Eastspark siege workshop has been attacked by the Alliance!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,16,0, 'The Eastspark siege workshop has been captured by the Alliance!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,17,0, 'The Eastspark siege workshop has been attacked by the Horde!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,18,0, 'The Eastspark siege workshop has been captured by the Horde!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,19,0, 'The Sunken Ring siege workshop has been attacked by the Alliance!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,20,0, 'The Sunken Ring siege workshop has been captured by the Alliance!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,21,0, 'The Sunken Ring siege workshop has been attacked by the Horde!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,22,0, 'The Sunken Ring siege workshop has been captured by the Horde!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,23,0, 'The Westspark siege workshop has been attacked by the Alliance!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,24,0, 'The Westspark siege workshop has been captured by the Alliance!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,25,0, 'The Westspark siege workshop has been attacked by the Horde!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,26,0, 'The Westspark siege workshop has been captured by the Horde!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,27,0, 'The Alliance has defended Wintergrasp Fortress!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,28,0, 'The Alliance has captured Wintergrasp Fortress!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,29,0, 'The Horde has defended Wintergrasp Fortress!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
(15214,30,0, 'The Horde has captured Wintergrasp Fortress!',3,0,100,0,0,0, 'Invisible Stalker'),
|
||||
-- Not sure if all Alliance text is here, need horde text
|
||||
(31036,0,0, 'The first of the Horde towers has fallen! Destroy all three and we will hasten their retreat!',1,7,100,0,0,0, 'Commander Zanneth'),
|
||||
(31036,1,0, 'The second tower has fallen! Destroy the final tower and we will hasten their retreat!',1,7,100,0,0,0, 'Commander Zanneth'),
|
||||
(31036,2,0, 'The Horde towers have fallen! We have forced their hand. Finish off the remaining forces!',1,7,100,0,0,0, 'Commander Zanneth'),
|
||||
(31036,3,0, 'Show those animals no mercy, $n!',0,7,100,0,0,0, 'Commander Zanneth'),
|
||||
(31091,0,0, 'The first of the Alliance towers has fallen! Destroy all three and we will hasten their retreat!',1,7,100,0,0,0, 'Commander Dardosh'),
|
||||
(31091,1,0, 'Lok''tar! The second tower falls! Destroy the final tower and we will hasten their retreat!',1,7,100,0,0,0, 'Commander Dardosh'),
|
||||
(31091,2,0, 'The Alliance towers have fallen! We have forced their hand. Finish off the remaining forces!',1,7,100,0,0,0, 'Commander Dardosh'),
|
||||
(31091,3,0, 'Show those animals no mercy, $n!',0,7,100,0,0,0, 'Commander Dardosh'), -- ???
|
||||
(31108,0,0, 'Stop the Horde from retrieving the embers, $n. We cannot risk them having the advantage when the battle resumes!',0,7,100,0,0,0, 'Siege Master Stouthandle'),
|
||||
(31109,0,0, 'Destroy their foul machines of war, $n!',0,7,100,0,0,0, 'Senior Demolitionist Legoso'),
|
||||
(34924,0,0, 'The gates have been breached! Defend the keep!',1,0,100,0,0,0, 'High Commander Halford Wyrmbane');
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -39,6 +39,12 @@ class GameObjectAI
|
||||
|
||||
virtual void Reset() {};
|
||||
|
||||
// Pass parameters between AI
|
||||
virtual void DoAction(const int32 /*param = 0 */) {}
|
||||
virtual uint32 GetData(uint32 /*id = 0*/) { return 0; }
|
||||
virtual void SetGUID(const uint64 &/*guid*/, int32 /*id = 0 */) {}
|
||||
virtual uint64 GetGUID(int32 /*id = 0 */) { return 0; }
|
||||
|
||||
static int Permissible(const GameObject* go);
|
||||
|
||||
virtual bool GossipHello(Player* /*player*/) {return false;}
|
||||
|
||||
@@ -134,6 +134,11 @@ namespace FactorySelector
|
||||
GameObjectAIRegistry& ai_registry(*GameObjectAIRepository::instance());
|
||||
|
||||
ai_factory = ai_registry.GetRegistryItem(go->GetAIName());
|
||||
|
||||
//scriptname in db
|
||||
if (!ai_factory)
|
||||
if (GameObjectAI* scriptedAI = sScriptMgr->GetGameObjectAI(go))
|
||||
return scriptedAI;
|
||||
|
||||
//future goAI types go here
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,401 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
|
||||
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef BATTLEFIELD_H_
|
||||
#define BATTLEFIELD_H_
|
||||
|
||||
#include "Utilities/Util.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "ZoneScript.h"
|
||||
#include "WorldPacket.h"
|
||||
#include "GameObject.h"
|
||||
|
||||
enum BattlefieldTypes
|
||||
{
|
||||
BATTLEFIELD_WG, // Wintergrasp
|
||||
BATTLEFIELD_TB, // Tol Barad (cataclysm)
|
||||
};
|
||||
|
||||
enum BattlefieldIDs
|
||||
{
|
||||
BATTLEFIELD_BATTLEID_WG = 1, // Wintergrasp battle
|
||||
};
|
||||
|
||||
enum BattlefieldObjectiveStates
|
||||
{
|
||||
BF_CAPTUREPOINT_OBJECTIVESTATE_NEUTRAL = 0,
|
||||
BF_CAPTUREPOINT_OBJECTIVESTATE_ALLIANCE,
|
||||
BF_CAPTUREPOINT_OBJECTIVESTATE_HORDE,
|
||||
BF_CAPTUREPOINT_OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE,
|
||||
BF_CAPTUREPOINT_OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE,
|
||||
BF_CAPTUREPOINT_OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE,
|
||||
BF_CAPTUREPOINT_OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE,
|
||||
};
|
||||
|
||||
enum BattlefieldSounds
|
||||
{
|
||||
BF_HORDE_WINS = 8454,
|
||||
BF_ALLIANCE_WINS = 8455,
|
||||
BF_START = 3439
|
||||
};
|
||||
|
||||
enum BattlefieldTimers
|
||||
{
|
||||
BATTLEFIELD_OBJECTIVE_UPDATE_INTERVAL = 1000
|
||||
};
|
||||
|
||||
// some class predefs
|
||||
class Player;
|
||||
class GameObject;
|
||||
class WorldPacket;
|
||||
class Creature;
|
||||
class Unit;
|
||||
|
||||
class Battlefield;
|
||||
class BfGraveYard;
|
||||
|
||||
typedef std::set < uint64 > GuidSet;
|
||||
typedef std::vector < BfGraveYard * >GraveYardVect;
|
||||
typedef std::map < uint64, uint32 > PlayerTimerMap;
|
||||
|
||||
class BfCapturePoint
|
||||
{
|
||||
public:
|
||||
BfCapturePoint(Battlefield * bf);
|
||||
|
||||
virtual void FillInitialWorldStates(WorldPacket & /*data */ ) {}
|
||||
|
||||
// send world state update to all players present
|
||||
void SendUpdateWorldState(uint32 field, uint32 value);
|
||||
|
||||
// send kill notify to players in the controlling faction
|
||||
void SendObjectiveComplete(uint32 id, uint64 guid);
|
||||
|
||||
// used when player is activated/inactivated in the area
|
||||
virtual bool HandlePlayerEnter(Player * plr);
|
||||
virtual void HandlePlayerLeave(Player * plr);
|
||||
//virtual void HandlePlayerActivityChanged(Player * plr);
|
||||
|
||||
// checks if player is in range of a capture credit marker
|
||||
bool IsInsideObjective(Player * plr) const;
|
||||
|
||||
// returns true if the state of the objective has changed, in this case, the OutdoorPvP must send a world state ui update.
|
||||
virtual bool Update(uint32 diff);
|
||||
virtual void ChangeTeam(TeamId /*oldTeam */ ) {}
|
||||
virtual void SendChangePhase();
|
||||
|
||||
bool SetCapturePointData(uint32 entry, uint32 map, float x, float y, float z, float o);
|
||||
GameObject *GetCapturePointGo() { return m_capturePoint; }
|
||||
|
||||
TeamId GetTeamId() {return m_team;}
|
||||
protected:
|
||||
bool DelCapturePoint();
|
||||
|
||||
// active players in the area of the objective, 0 - alliance, 1 - horde
|
||||
GuidSet m_activePlayers[2];
|
||||
|
||||
// total shift needed to capture the objective
|
||||
float m_maxValue;
|
||||
float m_minValue;
|
||||
|
||||
// maximum speed of capture
|
||||
float m_maxSpeed;
|
||||
|
||||
// the status of the objective
|
||||
float m_value;
|
||||
TeamId m_team;
|
||||
|
||||
// objective states
|
||||
BattlefieldObjectiveStates m_OldState;
|
||||
BattlefieldObjectiveStates m_State;
|
||||
|
||||
// neutral value on capture bar
|
||||
uint32 m_neutralValuePct;
|
||||
|
||||
// pointer to the Battlefield this objective belongs to
|
||||
Battlefield *m_Bf;
|
||||
uint32 m_capturePointEntry;
|
||||
GameObject *m_capturePoint;
|
||||
};
|
||||
|
||||
class BfGraveYard
|
||||
{
|
||||
public:
|
||||
BfGraveYard(Battlefield *Bf);
|
||||
|
||||
// method for change who control the graveyard
|
||||
void ChangeControl(TeamId team);
|
||||
TeamId GetControlTeamId() { return m_ControlTeam; }
|
||||
|
||||
// use for found the nearest graveyard
|
||||
float GetDistance(Player * plr);
|
||||
void Init(uint32 horde_entry, uint32 alliance_entry, float x, float y, float z, float o, TeamId startcontrol, uint32 gy);
|
||||
void AddPlayer(uint64 player_guid);
|
||||
void RemovePlayer(uint64 player_guid);
|
||||
|
||||
void Resurrect();
|
||||
void RelocateDeadPlayers();
|
||||
|
||||
bool HasNpc(uint64 guid) { return (m_SpiritGuide[0]->GetGUID() == guid || m_SpiritGuide[1]->GetGUID() == guid); }
|
||||
bool HasPlayer(uint64 guid) { return m_ResurrectQueue.find(guid) != m_ResurrectQueue.end(); }
|
||||
uint32 GetGraveYardId() { return m_GraveyardId; }
|
||||
|
||||
protected:
|
||||
|
||||
TeamId m_ControlTeam;
|
||||
uint32 m_GraveyardId;
|
||||
Creature *m_SpiritGuide[2];
|
||||
GuidSet m_ResurrectQueue;
|
||||
Battlefield *m_Bf;
|
||||
};
|
||||
|
||||
class Battlefield:public ZoneScript
|
||||
{
|
||||
friend class BattlefieldMgr;
|
||||
|
||||
public:
|
||||
/// Constructor
|
||||
Battlefield();
|
||||
/// Destructor
|
||||
virtual ~Battlefield();
|
||||
|
||||
/// typedef of map witch store capturepoint and the associate gameobject entry
|
||||
typedef std::map < uint32 /*lowguid */ , BfCapturePoint * >BfCapturePointMap;
|
||||
|
||||
/// Call this to init the Battlefield
|
||||
virtual bool SetupBattlefield() { return true; }
|
||||
|
||||
/// Generate packet which contain all worldstatedata of area
|
||||
virtual void FillInitialWorldStates(WorldPacket & /*data */ ) {}
|
||||
|
||||
/// Call when a GameObject/Creature is created OR destroyed (view bool add)
|
||||
void OnGameObjectCreate(GameObject * /*go */ , bool /*add */ ) {}
|
||||
void OnCreatureCreate(Creature * /*cre */ , bool /*add */ ) {}
|
||||
|
||||
/// Update data of a worldstate to all players present in zone
|
||||
void SendUpdateWorldState(uint32 field, uint32 value);
|
||||
|
||||
/**
|
||||
* \brief Called every time for update bf data and time
|
||||
* -Update timer for start/end battle
|
||||
* -Invite player in zone to queue x minutes before start (x = m_StartGroupingTimer)
|
||||
* -Kick Afk players
|
||||
* \param diff : time ellapsed since last call (in ms)
|
||||
*/
|
||||
virtual bool Update(uint32 diff);
|
||||
|
||||
/// Invite all player in zone, to join the queue, called x minutes before battle start in Update()
|
||||
void InvitePlayerInZoneToQueue();
|
||||
/// Invite all player in queue to join battle on battle start
|
||||
void InvitePlayerInQueueToWar();
|
||||
/// Invite all player in zone to join battle on battle start
|
||||
void InvitePlayerInZoneToWar();
|
||||
|
||||
/// Called when a Unit is kill in battlefield zone
|
||||
virtual void HandleKill(Player * /*killer */ , Unit * /*killed */ ) {};
|
||||
|
||||
uint32 GetTypeId() { return m_TypeId; }
|
||||
uint32 GetZoneId() { return m_ZoneId; }
|
||||
|
||||
void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2 = 0);
|
||||
|
||||
/// Return true if battle is start, false if battle is not started
|
||||
bool IsWarTime() { return m_WarTime; }
|
||||
|
||||
/// Enable or Disable battlefield
|
||||
void SetEnable(bool enable) { m_enable = enable; }
|
||||
/// Return if battlefield is enable
|
||||
bool GetEnable() { return m_enable; }
|
||||
|
||||
/**
|
||||
* \brief Kick player from battlefield and teleport him to kick-point location
|
||||
* \param guid : guid of player who must be kick
|
||||
*/
|
||||
void KickPlayerFromBf(uint64 guid);
|
||||
|
||||
/// Called when player (plr) enter in zone
|
||||
void HandlePlayerEnterZone(Player * plr, uint32 zone);
|
||||
/// Called when player (plr) leave the zone
|
||||
void HandlePlayerLeaveZone(Player * plr, uint32 zone);
|
||||
|
||||
// All-purpose data storage 64 bit
|
||||
virtual uint64 GetData64(uint32 DataId) { return m_Data64[DataId]; }
|
||||
virtual void SetData64(uint32 DataId, uint64 Value) { m_Data64[DataId] = Value; }
|
||||
|
||||
// All-purpose data storage 32 bit
|
||||
virtual uint32 GetData(uint32 DataId) { return m_Data32[DataId]; }
|
||||
virtual void SetData(uint32 DataId, uint32 Value) { m_Data32[DataId] = Value; }
|
||||
|
||||
// Battlefield - generic methods
|
||||
TeamId GetDefenderTeam() { return m_DefenderTeam; }
|
||||
TeamId GetAttackerTeam() { return TeamId(1 - m_DefenderTeam); }
|
||||
void SetDefenderTeam(TeamId team) { m_DefenderTeam = team; }
|
||||
|
||||
// Group methods
|
||||
/**
|
||||
* \brief Find a not full battlefield group, if there is no, create one
|
||||
* \param TeamId : Id of player team for who we search a group (plr->GetTeamId())
|
||||
*/
|
||||
Group *GetFreeBfRaid(TeamId TeamId);
|
||||
/// Return battlefield group where player is.
|
||||
Group *GetGroupPlayer(uint64 guid, TeamId TeamId);
|
||||
/// Force player to join a battlefield group
|
||||
bool AddOrSetPlayerToCorrectBfGroup(Player * plr);
|
||||
|
||||
// Graveyard methods
|
||||
// Find which graveyard the player must be teleported to to be resurrected by spiritguide
|
||||
WorldSafeLocsEntry const *GetClosestGraveYard(Player * plr);
|
||||
|
||||
virtual void AddPlayerToResurrectQueue(uint64 npc_guid, uint64 player_guid);
|
||||
void RemovePlayerFromResurrectQueue(uint64 player_guid);
|
||||
void SetGraveyardNumber(uint32 number) { m_GraveYardList.resize(number); }
|
||||
BfGraveYard *GetGraveYardById(uint32 id);
|
||||
|
||||
// Misc methods
|
||||
Creature *SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId team);
|
||||
Creature *SpawnCreature(uint32 entry, Position pos, TeamId team);
|
||||
GameObject *SpawnGameObject(uint32 entry, float x, float y, float z, float o);
|
||||
|
||||
// Script-methods
|
||||
|
||||
/// Called on start
|
||||
virtual void OnBattleStart() {};
|
||||
/// Called at the end of battle
|
||||
virtual void OnBattleEnd(bool /*endbytimer */ ) {};
|
||||
/// Called x minutes before battle start when player in zone are invite to join queue
|
||||
virtual void OnStartGrouping() {};
|
||||
/// Called when a player accept to join the battle
|
||||
virtual void OnPlayerJoinWar(Player * /*plr */ ) {};
|
||||
/// Called when a player leave the battle
|
||||
virtual void OnPlayerLeaveWar(Player * /*plr */ ) {};
|
||||
/// Called when a player leave battlefield zone
|
||||
virtual void OnPlayerLeaveZone(Player * /*plr */ ) {};
|
||||
/// Called when a player enter in battlefield zone
|
||||
virtual void OnPlayerEnterZone(Player * /*plr */ ) {};
|
||||
|
||||
WorldPacket BuildWarningAnnPacket(std::string msg);
|
||||
void SendWarningToAllInZone(uint32 entry);
|
||||
//void SendWarningToAllInWar(int32 entry, ...); -- UNUSED
|
||||
void SendWarningToPlayer(Player * plr, uint32 entry);
|
||||
|
||||
void PlayerAcceptInviteToQueue(Player * plr);
|
||||
void PlayerAcceptInviteToWar(Player * plr);
|
||||
uint32 GetBattleId() { return m_BattleId; }
|
||||
void AskToLeaveQueue(Player * plr);
|
||||
|
||||
virtual void DoCompleteOrIncrementAchievement(uint32 /*achievement */ , Player * /*player */ , uint8 /*incrementNumber = 1 */ ) {};
|
||||
|
||||
/// Send all worldstate data to all player in zone.
|
||||
virtual void SendInitWorldStatesToAll() {};
|
||||
|
||||
/// Return if we can use mount in battlefield
|
||||
bool CanFlyIn() { return !m_WarTime; } // Used for check if we can use flying mount or not
|
||||
bool IncrementQuest(Player * player, uint32 quest, bool complete = false);
|
||||
void SendAreaSpiritHealerQueryOpcode(Player * pl, const uint64 & guid);
|
||||
|
||||
void StartBattle();
|
||||
void EndBattle(bool endbytimer);
|
||||
|
||||
void HideNpc(Creature * p_Creature);
|
||||
void ShowNpc(Creature * p_Creature, bool p_Aggressive);
|
||||
|
||||
GraveYardVect GetGraveYardVect() { return m_GraveYardList; }
|
||||
|
||||
uint32 GetTimer() { return m_Timer; }
|
||||
void SetTimer(uint32 timer) { m_Timer = timer; }
|
||||
|
||||
void PlaySoundToAll(uint32 SoundID);
|
||||
|
||||
void InvitePlayerToQueue(Player * plr);
|
||||
void InvitePlayerToWar(Player * plr);
|
||||
|
||||
void InitStalker(uint32 entry, float x, float y, float z, float o);
|
||||
|
||||
protected:
|
||||
uint64 StalkerGuid;
|
||||
uint32 m_Timer; // Global timer for event
|
||||
bool m_enable;
|
||||
bool m_WarTime;
|
||||
TeamId m_DefenderTeam;
|
||||
|
||||
// the map of the objectives belonging to this outdoorpvp
|
||||
BfCapturePointMap m_capturePoints;
|
||||
|
||||
// the set of player
|
||||
GuidSet m_players[BG_TEAMS_COUNT]; // Players in zone
|
||||
GuidSet m_PlayersInQueue[BG_TEAMS_COUNT]; // Players in the queue
|
||||
GuidSet m_PlayersInWar[BG_TEAMS_COUNT]; // Players in WG combat
|
||||
PlayerTimerMap m_InvitedPlayers[BG_TEAMS_COUNT];
|
||||
PlayerTimerMap m_PlayersWillBeKick[BG_TEAMS_COUNT];
|
||||
|
||||
//Variables that must exist for each battlefield
|
||||
uint32 m_TypeId; // See enum BattlefieldTypes
|
||||
uint32 m_BattleId; // BattleID (for packet)
|
||||
uint32 m_ZoneId; // ZoneID of Wintergrasp = 4197
|
||||
uint32 m_MapId; // MapId where is Battlefield
|
||||
uint32 m_MaxPlayer; // Maximum number of player that participated to Battlefield
|
||||
uint32 m_MinPlayer; // Minimum number of player for Battlefield start
|
||||
uint32 m_MinLevel; // Required level to participate at Battlefield
|
||||
uint32 m_BattleTime; // Length of a battle
|
||||
uint32 m_NoWarBattleTime; // Time between two battles
|
||||
uint32 m_RestartAfterCrash; // Delay to restart Wintergrasp if the server crashed during a running battle.
|
||||
uint32 m_TimeForAcceptInvite;
|
||||
uint32 m_uiKickDontAcceptTimer;
|
||||
WorldLocation KickPosition; // Position where player is teleport if they switch to afk during battle or if they dont accept invitation
|
||||
|
||||
uint32 m_uiKickAfkTimer; // Timer for check Afk in war
|
||||
|
||||
//Graveyard variables
|
||||
GraveYardVect m_GraveYardList; // Vector witch contain the different GY of the battle
|
||||
uint32 m_LastResurectTimer; // Timer for resurect player every 30 sec
|
||||
|
||||
uint32 m_StartGroupingTimer; // Timer for invite players in area 15 minute before start battle
|
||||
bool m_StartGrouping; // bool for know if all players in area has been invited
|
||||
|
||||
GuidSet m_Groups[BG_TEAMS_COUNT]; // Contain different raid group
|
||||
|
||||
std::vector < uint64 > m_Data64;
|
||||
std::vector < uint32 > m_Data32;
|
||||
|
||||
void KickAfk();
|
||||
// use for switch off all worldstate for client
|
||||
virtual void SendRemoveWorldStates(Player * /*plr */ ) {}
|
||||
|
||||
// use for send a packet for all player list
|
||||
void BroadcastPacketZone(WorldPacket & data) const;
|
||||
void BroadcastPacketQueue(WorldPacket & data) const;
|
||||
void BroadcastPacketWar(WorldPacket & data) const;
|
||||
|
||||
//CapturePoint system
|
||||
void AddCapturePoint(BfCapturePoint * cp) { m_capturePoints[cp->GetCapturePointGo()->GetEntry()] = cp; }
|
||||
|
||||
BfCapturePoint *GetCapturePoint(uint32 lowguid) const
|
||||
{
|
||||
Battlefield::BfCapturePointMap::const_iterator itr = m_capturePoints.find(lowguid);
|
||||
if (itr != m_capturePoints.end())
|
||||
return itr->second;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void RegisterZone(uint32 zoneid);
|
||||
bool HasPlayer(Player * plr) const;
|
||||
void TeamCastSpell(TeamId team, int32 spellId);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,152 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
|
||||
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Common.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "WorldPacket.h"
|
||||
#include "WorldSession.h"
|
||||
|
||||
#include "Battlefield.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "Opcodes.h"
|
||||
|
||||
//This send to player windows for invite player to join the war
|
||||
//Param1:(BattleId) the BattleId of Bf
|
||||
//Param2:(ZoneId) the zone where the battle is (4197 for wg)
|
||||
//Param3:(time) Time in second that the player have for accept
|
||||
void WorldSession::SendBfInvitePlayerToWar(uint32 BattleId, uint32 ZoneId, uint32 p_time)
|
||||
{
|
||||
//Send packet
|
||||
WorldPacket data(SMSG_BATTLEFIELD_MGR_ENTRY_INVITE, 12);
|
||||
data << uint32(BattleId);
|
||||
data << uint32(ZoneId);
|
||||
data << uint32((time(NULL) + p_time));
|
||||
|
||||
//Sending the packet to player
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
//This send invitation to player to join the queue
|
||||
//Param1:(BattleId) the BattleId of Bf
|
||||
void WorldSession::SendBfInvitePlayerToQueue(uint32 BattleId)
|
||||
{
|
||||
WorldPacket data(SMSG_BATTLEFIELD_MGR_QUEUE_INVITE, 5);
|
||||
|
||||
data << uint32(BattleId);
|
||||
data << uint8(1); //warmup ? used ?
|
||||
|
||||
//Sending packet to player
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
//This send packet for inform player that he join queue
|
||||
//Param1:(BattleId) the BattleId of Bf
|
||||
//Param2:(ZoneId) the zone where the battle is (4197 for wg)
|
||||
void WorldSession::SendBfQueueInviteResponce(uint32 BattleId, uint32 ZoneId)
|
||||
{
|
||||
WorldPacket data(SMSG_BATTLEFIELD_MGR_QUEUE_REQUEST_RESPONSE, 11);
|
||||
data << uint32(BattleId);
|
||||
data << uint32(ZoneId);
|
||||
data << uint8(1); //Accepted
|
||||
data << uint8(0); //Logging In
|
||||
data << uint8(1); //Warmup
|
||||
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
//This is call when player accept to join war
|
||||
//Param1:(BattleId) the BattleId of Bf
|
||||
void WorldSession::SendBfEntered(uint32 BattleId)
|
||||
{
|
||||
// m_PlayerInWar[plr->GetTeamId()].insert(plr->GetGUID());
|
||||
WorldPacket data(SMSG_BATTLEFIELD_MGR_ENTERED, 7);
|
||||
data << uint32(BattleId);
|
||||
data << uint8(1); //unk
|
||||
data << uint8(1); //unk
|
||||
data << uint8(_player->isAFK() ? 1 : 0); //Clear AFK
|
||||
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
//Send when player is kick from Battlefield
|
||||
void WorldSession::SendBfLeaveMessage(uint32 BattleId)
|
||||
{
|
||||
WorldPacket data(SMSG_BATTLEFIELD_MGR_EJECTED, 7);
|
||||
data << uint32(BattleId);
|
||||
data << uint8(8); //byte Reason
|
||||
data << uint8(2); //byte BattleStatus
|
||||
data << uint8(0); //bool Relocated
|
||||
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
//Send by client when he click on accept for queue
|
||||
void WorldSession::HandleBfQueueInviteResponse(WorldPacket & recv_data)
|
||||
{
|
||||
uint32 BattleId;
|
||||
uint8 Accepted;
|
||||
|
||||
recv_data >> BattleId >> Accepted;
|
||||
sLog->outError("HandleQueueInviteResponse: BattleID:%u Accepted:%u", BattleId, Accepted);
|
||||
Battlefield* Bf = sBattlefieldMgr.GetBattlefieldByBattleId(BattleId);
|
||||
if (!Bf)
|
||||
return;
|
||||
|
||||
if (Accepted)
|
||||
{
|
||||
Bf->PlayerAcceptInviteToQueue(_player);
|
||||
}
|
||||
}
|
||||
|
||||
//Send by client on clicking in accept or refuse of invitation windows for join game
|
||||
void WorldSession::HandleBfEntryInviteResponse(WorldPacket & recv_data)
|
||||
{
|
||||
uint32 BattleId;
|
||||
uint8 Accepted;
|
||||
|
||||
recv_data >> BattleId >> Accepted;
|
||||
sLog->outError("HandleBattlefieldInviteResponse: BattleID:%u Accepted:%u", BattleId, Accepted);
|
||||
Battlefield* Bf = sBattlefieldMgr.GetBattlefieldByBattleId(BattleId);
|
||||
if (!Bf)
|
||||
return;
|
||||
|
||||
//If player accept invitation
|
||||
if (Accepted)
|
||||
{
|
||||
Bf->PlayerAcceptInviteToWar(_player);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_player->GetZoneId() == Bf->GetZoneId())
|
||||
Bf->KickPlayerFromBf(_player->GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleBfExitRequest(WorldPacket & recv_data)
|
||||
{
|
||||
uint32 BattleId;
|
||||
|
||||
recv_data >> BattleId;
|
||||
sLog->outError("HandleBfExitRequest: BattleID:%u ", BattleId);
|
||||
Battlefield* Bf = sBattlefieldMgr.GetBattlefieldByBattleId(BattleId);
|
||||
if (!Bf)
|
||||
return;
|
||||
|
||||
Bf->AskToLeaveQueue(_player);
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
|
||||
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "Zones/BattlefieldWG.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "Player.h"
|
||||
|
||||
BattlefieldMgr::BattlefieldMgr()
|
||||
{
|
||||
m_UpdateTimer = 0;
|
||||
//sLog->outDebug(LOG_FILTER_BATTLEFIELD, "Instantiating BattlefieldMgr");
|
||||
}
|
||||
|
||||
BattlefieldMgr::~BattlefieldMgr()
|
||||
{
|
||||
//sLog->outDebug(LOG_FILTER_BATTLEFIELD, "Deleting BattlefieldMgr");
|
||||
for (BattlefieldSet::iterator itr = m_BattlefieldSet.begin(); itr != m_BattlefieldSet.end(); ++itr)
|
||||
delete *itr;
|
||||
}
|
||||
|
||||
void BattlefieldMgr::InitBattlefield()
|
||||
{
|
||||
Battlefield* pBf = new BattlefieldWG;
|
||||
// respawn, init variables
|
||||
if (!pBf->SetupBattlefield())
|
||||
{
|
||||
sLog->outString();
|
||||
sLog->outString("Battlefield : Wintergrasp init failed.");
|
||||
delete pBf;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_BattlefieldSet.push_back(pBf);
|
||||
sLog->outString();
|
||||
sLog->outString("Battlefield : Wintergrasp successfully initiated.");
|
||||
}
|
||||
|
||||
/* For Cataclysm: Tol Barad
|
||||
pBf = new BattlefieldTB;
|
||||
// respawn, init variables
|
||||
if(!pBf->SetupBattlefield())
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_BATTLEFIELD, "Battlefield : Tol Barad init failed.");
|
||||
delete pBf;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_BattlefieldSet.push_back(pBf);
|
||||
sLog->outDebug(LOG_FILTER_BATTLEFIELD, "Battlefield : Tol Barad successfully initiated.");
|
||||
} */
|
||||
}
|
||||
|
||||
void BattlefieldMgr::AddZone(uint32 zoneid, Battlefield *handle)
|
||||
{
|
||||
m_BattlefieldMap[zoneid] = handle;
|
||||
}
|
||||
|
||||
void BattlefieldMgr::HandlePlayerEnterZone(Player * plr, uint32 zoneid)
|
||||
{
|
||||
BattlefieldMap::iterator itr = m_BattlefieldMap.find(zoneid);
|
||||
if (itr == m_BattlefieldMap.end())
|
||||
return;
|
||||
|
||||
if (itr->second->HasPlayer(plr))
|
||||
return;
|
||||
if (itr->second->GetEnable() == false)
|
||||
return;
|
||||
itr->second->HandlePlayerEnterZone(plr, zoneid);
|
||||
sLog->outDebug(LOG_FILTER_BATTLEFIELD, "Player %u entered outdoorpvp id %u", plr->GetGUIDLow(), itr->second->GetTypeId());
|
||||
}
|
||||
|
||||
void BattlefieldMgr::HandlePlayerLeaveZone(Player * plr, uint32 zoneid)
|
||||
{
|
||||
BattlefieldMap::iterator itr = m_BattlefieldMap.find(zoneid);
|
||||
if (itr == m_BattlefieldMap.end())
|
||||
return;
|
||||
|
||||
// teleport: remove once in removefromworld, once in updatezone
|
||||
if (!itr->second->HasPlayer(plr))
|
||||
return;
|
||||
itr->second->HandlePlayerLeaveZone(plr, zoneid);
|
||||
sLog->outDebug(LOG_FILTER_BATTLEFIELD, "Player %u left outdoorpvp id %u", plr->GetGUIDLow(), itr->second->GetTypeId());
|
||||
}
|
||||
|
||||
Battlefield *BattlefieldMgr::GetBattlefieldToZoneId(uint32 zoneid)
|
||||
{
|
||||
BattlefieldMap::iterator itr = m_BattlefieldMap.find(zoneid);
|
||||
if (itr == m_BattlefieldMap.end())
|
||||
{
|
||||
// no handle for this zone, return
|
||||
return NULL;
|
||||
}
|
||||
if (itr->second->GetEnable() == false)
|
||||
return NULL;
|
||||
return itr->second;
|
||||
}
|
||||
|
||||
Battlefield *BattlefieldMgr::GetBattlefieldByBattleId(uint32 battleid)
|
||||
{
|
||||
for (BattlefieldSet::iterator itr = m_BattlefieldSet.begin(); itr != m_BattlefieldSet.end(); ++itr)
|
||||
{
|
||||
if ((*itr)->GetBattleId() == battleid)
|
||||
return (*itr);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void BattlefieldMgr::Update(uint32 diff)
|
||||
{
|
||||
m_UpdateTimer += diff;
|
||||
if (m_UpdateTimer > BATTLEFIELD_OBJECTIVE_UPDATE_INTERVAL)
|
||||
{
|
||||
for (BattlefieldSet::iterator itr = m_BattlefieldSet.begin(); itr != m_BattlefieldSet.end(); ++itr)
|
||||
if ((*itr)->GetEnable())
|
||||
(*itr)->Update(m_UpdateTimer);
|
||||
m_UpdateTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ZoneScript *BattlefieldMgr::GetZoneScript(uint32 zoneId)
|
||||
{
|
||||
BattlefieldMap::iterator itr = m_BattlefieldMap.find(zoneId);
|
||||
if (itr != m_BattlefieldMap.end())
|
||||
return itr->second;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
|
||||
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef BATTLEFIELD_MGR_H_
|
||||
#define BATTLEFIELD_MGR_H_
|
||||
|
||||
#include "Battlefield.h"
|
||||
#include "ace/Singleton.h"
|
||||
|
||||
class Player;
|
||||
class GameObject;
|
||||
class Creature;
|
||||
class ZoneScript;
|
||||
struct GossipMenuItems;
|
||||
|
||||
// class to handle player enter / leave / areatrigger / GO use events
|
||||
class BattlefieldMgr
|
||||
{
|
||||
public:
|
||||
// ctor
|
||||
BattlefieldMgr();
|
||||
// dtor
|
||||
~BattlefieldMgr();
|
||||
|
||||
// create battlefield events
|
||||
void InitBattlefield();
|
||||
// called when a player enters an battlefield area
|
||||
void HandlePlayerEnterZone(Player * plr, uint32 areaflag);
|
||||
// called when player leaves an battlefield area
|
||||
void HandlePlayerLeaveZone(Player * plr, uint32 areaflag);
|
||||
// called when player resurrects
|
||||
void HandlePlayerResurrects(Player * plr, uint32 areaflag);
|
||||
// return assigned battlefield
|
||||
Battlefield *GetBattlefieldToZoneId(uint32 zoneid);
|
||||
Battlefield *GetBattlefieldByBattleId(uint32 battleid);
|
||||
|
||||
ZoneScript *GetZoneScript(uint32 zoneId);
|
||||
|
||||
void AddZone(uint32 zoneid, Battlefield * handle);
|
||||
|
||||
void Update(uint32 diff);
|
||||
|
||||
void HandleGossipOption(Player * player, uint64 guid, uint32 gossipid);
|
||||
|
||||
bool CanTalkTo(Player * player, Creature * creature, GossipMenuItems gso);
|
||||
|
||||
void HandleDropFlag(Player * plr, uint32 spellId);
|
||||
|
||||
typedef std::vector < Battlefield * >BattlefieldSet;
|
||||
typedef std::map < uint32 /* zoneid */ , Battlefield * >BattlefieldMap;
|
||||
private:
|
||||
// contains all initiated battlefield events
|
||||
// used when initing / cleaning up
|
||||
BattlefieldSet m_BattlefieldSet;
|
||||
// maps the zone ids to an battlefield event
|
||||
// used in player event handling
|
||||
BattlefieldMap m_BattlefieldMap;
|
||||
// update interval
|
||||
uint32 m_UpdateTimer;
|
||||
};
|
||||
|
||||
#define sBattlefieldMgr (*ACE_Singleton<BattlefieldMgr, ACE_Null_Mutex>::instance())
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1148,7 +1148,7 @@ void Battleground::AddOrSetPlayerToCorrectBgGroup(Player* player, uint32 team)
|
||||
if (group->IsMember(playerGuid))
|
||||
{
|
||||
uint8 subgroup = group->GetMemberGroup(playerGuid);
|
||||
player->SetBattlegroundRaid(group, subgroup);
|
||||
player->SetBattlegroundOrBattlefieldRaid(group, subgroup);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -17,6 +17,7 @@ file(GLOB_RECURSE sources_Achievements Achievements/*.cpp Achievements/*.h)
|
||||
file(GLOB_RECURSE sources_Addons Addons/*.cpp Addons/*.h)
|
||||
file(GLOB_RECURSE sources_AI AI/*.cpp AI/*.h)
|
||||
file(GLOB_RECURSE sources_AuctionHouse AuctionHouse/*.cpp AuctionHouse/*.h)
|
||||
file(GLOB_RECURSE sources_Battlefield Battlefield/*.cpp Battlefield/*.h)
|
||||
file(GLOB_RECURSE sources_Battlegrounds Battlegrounds/*.cpp Battlegrounds/*.h)
|
||||
file(GLOB_RECURSE sources_Calendar Calendar/*.cpp Calendar/*.h)
|
||||
file(GLOB_RECURSE sources_Chat Chat/*.cpp Chat/*.h)
|
||||
@@ -66,6 +67,7 @@ set(game_STAT_SRCS
|
||||
${sources_Addons}
|
||||
${sources_AI}
|
||||
${sources_AuctionHouse}
|
||||
${sources_Battlefield}
|
||||
${sources_Battlegrounds}
|
||||
${sources_Calendar}
|
||||
${sources_Chat}
|
||||
@@ -132,6 +134,9 @@ include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/AI/ScriptedAI
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/AI/SmartScripts
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/AuctionHouse
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Battlefield
|
||||
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Battlefield/Zones
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Battlegrounds
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Battlegrounds/Zones
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Calendar
|
||||
|
||||
@@ -831,6 +831,13 @@ bool GameObject::IsDynTransport() const
|
||||
return gInfo->type == GAMEOBJECT_TYPE_MO_TRANSPORT || (gInfo->type == GAMEOBJECT_TYPE_TRANSPORT && !gInfo->transport.pause);
|
||||
}
|
||||
|
||||
bool GameObject::IsDestructibleBuilding() const
|
||||
{
|
||||
GameObjectTemplate const* gInfo = GetGOInfo();
|
||||
if (!gInfo) return false;
|
||||
return gInfo->type == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING;
|
||||
}
|
||||
|
||||
Unit* GameObject::GetOwner() const
|
||||
{
|
||||
return ObjectAccessor::GetUnit(*this, GetOwnerGUID());
|
||||
@@ -847,7 +854,7 @@ bool GameObject::isAlwaysVisibleFor(WorldObject const* seer) const
|
||||
if (WorldObject::isAlwaysVisibleFor(seer))
|
||||
return true;
|
||||
|
||||
if (IsTransport())
|
||||
if (IsTransport() || IsDestructibleBuilding())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
||||
@@ -631,6 +631,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>
|
||||
|
||||
bool IsTransport() const;
|
||||
bool IsDynTransport() const;
|
||||
bool IsDestructibleBuilding() const;
|
||||
|
||||
uint32 GetDBTableGUIDLow() const { return m_DBTableGuid; }
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
#include "GridNotifiers.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "TemporarySummon.h"
|
||||
#include "Totem.h"
|
||||
#include "OutdoorPvPMgr.h"
|
||||
@@ -2210,7 +2210,12 @@ void WorldObject::SetZoneScript()
|
||||
if (map->IsDungeon())
|
||||
m_zoneScript = (ZoneScript*)((InstanceMap*)map)->GetInstanceScript();
|
||||
else if (!map->IsBattlegroundOrArena())
|
||||
m_zoneScript = sOutdoorPvPMgr->GetZoneScript(GetZoneId());
|
||||
{
|
||||
if (Battlefield* bf = sBattlefieldMgr.GetBattlefieldToZoneId(GetZoneId()))
|
||||
m_zoneScript = bf;
|
||||
else
|
||||
m_zoneScript = sOutdoorPvPMgr->GetZoneScript(GetZoneId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
#include "DisableMgr.h"
|
||||
#include "WeatherMgr.h"
|
||||
#include "LFGMgr.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "CharacterDatabaseCleaner.h"
|
||||
#include "InstanceScript.h"
|
||||
#include <cmath>
|
||||
@@ -2405,6 +2406,7 @@ void Player::RemoveFromWorld()
|
||||
StopCastingBindSight();
|
||||
UnsummonPetTemporaryIfAny();
|
||||
sOutdoorPvPMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId);
|
||||
sBattlefieldMgr.HandlePlayerLeaveZone(this, m_zoneUpdateId);
|
||||
}
|
||||
|
||||
///- Do not add/remove the player from the object storage
|
||||
@@ -5483,7 +5485,12 @@ void Player::RepopAtGraveyard()
|
||||
if (Battleground *bg = GetBattleground())
|
||||
ClosestGrave = bg->GetClosestGraveYard(this);
|
||||
else
|
||||
ClosestGrave = sObjectMgr->GetClosestGraveYard(GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(), GetTeam());
|
||||
{
|
||||
if (sBattlefieldMgr.GetBattlefieldToZoneId(GetZoneId()))
|
||||
ClosestGrave = sBattlefieldMgr.GetBattlefieldToZoneId(GetZoneId())->GetClosestGraveYard(this);
|
||||
else
|
||||
ClosestGrave = sObjectMgr->GetClosestGraveYard(GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(), GetTeam());
|
||||
}
|
||||
|
||||
// stop countdown until repop
|
||||
m_deathTimer = 0;
|
||||
@@ -7379,6 +7386,8 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
|
||||
{
|
||||
sOutdoorPvPMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId);
|
||||
sOutdoorPvPMgr->HandlePlayerEnterZone(this, newZone);
|
||||
sBattlefieldMgr.HandlePlayerLeaveZone(this, m_zoneUpdateId);
|
||||
sBattlefieldMgr.HandlePlayerEnterZone(this, newZone);
|
||||
SendInitWorldStates(newZone, newArea); // only if really enters to new zone, not just area change, works strange...
|
||||
}
|
||||
|
||||
@@ -7513,7 +7522,7 @@ void Player::CheckDuelDistance(time_t currTime)
|
||||
|
||||
bool Player::IsOutdoorPvPActive()
|
||||
{
|
||||
return isAlive() && !HasInvisibilityAura() && !HasStealthAura() && (IsPvP() || sWorld->IsPvPRealm()) && !HasUnitMovementFlag(MOVEMENTFLAG_FLYING) && !isInFlight();
|
||||
return isAlive() && !HasInvisibilityAura() && !HasStealthAura() && IsPvP() && !HasUnitMovementFlag(MOVEMENTFLAG_FLYING) && !isInFlight();
|
||||
}
|
||||
|
||||
void Player::DuelComplete(DuelCompleteType type)
|
||||
@@ -22547,7 +22556,7 @@ bool Player::isUsingLfg()
|
||||
return sLFGMgr->GetState(guid) != LFG_STATE_NONE;
|
||||
}
|
||||
|
||||
void Player::SetBattlegroundRaid(Group* group, int8 subgroup)
|
||||
void Player::SetBattlegroundOrBattlefieldRaid(Group *group, int8 subgroup)
|
||||
{
|
||||
//we must move references from m_group to m_originalGroup
|
||||
SetOriginalGroup(GetGroup(), GetSubGroup());
|
||||
@@ -22557,7 +22566,7 @@ void Player::SetBattlegroundRaid(Group* group, int8 subgroup)
|
||||
m_group.setSubGroup((uint8)subgroup);
|
||||
}
|
||||
|
||||
void Player::RemoveFromBattlegroundRaid()
|
||||
void Player::RemoveFromBattlegroundOrBattlefieldRaid()
|
||||
{
|
||||
//remove existing reference
|
||||
m_group.unlink();
|
||||
|
||||
@@ -2378,8 +2378,8 @@ class Player : public Unit, public GridObject<Player>
|
||||
Player* GetNextRandomRaidMember(float radius);
|
||||
PartyResult CanUninviteFromGroup() const;
|
||||
// Battleground Group System
|
||||
void SetBattlegroundRaid(Group* group, int8 subgroup = -1);
|
||||
void RemoveFromBattlegroundRaid();
|
||||
void SetBattlegroundOrBattlefieldRaid(Group *group, int8 subgroup = -1);
|
||||
void RemoveFromBattlegroundOrBattlefieldRaid();
|
||||
Group * GetOriginalGroup() { return m_originalGroup.getTarget(); }
|
||||
GroupReference& GetOriginalGroupRef() { return m_originalGroup; }
|
||||
uint8 GetOriginalSubGroup() const { return m_originalGroup.getSubGroup(); }
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
#include "Vehicle.h"
|
||||
#include "Transport.h"
|
||||
#include "InstanceScript.h"
|
||||
|
||||
#include "BattlefieldMgr.h"
|
||||
#include <math.h>
|
||||
|
||||
float baseMoveSpeed[MAX_MOVE_TYPE] =
|
||||
@@ -15487,9 +15487,14 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
|
||||
// outdoor pvp things, do these after setting the death state, else the player activity notify won't work... doh...
|
||||
// handle player kill only if not suicide (spirit of redemption for example)
|
||||
if (player && this != victim)
|
||||
{
|
||||
if (OutdoorPvP* pvp = player->GetOutdoorPvP())
|
||||
pvp->HandleKill(player, victim);
|
||||
|
||||
if (Battlefield* bf = sBattlefieldMgr.GetBattlefieldToZoneId(player->GetZoneId()))
|
||||
bf->HandleKill(player, victim);
|
||||
}
|
||||
|
||||
//if (pVictim->GetTypeId() == TYPEID_PLAYER)
|
||||
// if (OutdoorPvP* pvp = pVictim->ToPlayer()->GetOutdoorPvP())
|
||||
// pvp->HandlePlayerActivityChangedpVictim->ToPlayer();
|
||||
|
||||
@@ -178,8 +178,13 @@ void Vehicle::ApplyAllImmunities()
|
||||
// Different immunities for vehicles goes below
|
||||
switch (GetVehicleInfo()->m_ID)
|
||||
{
|
||||
case 160:
|
||||
case 160: //Isle of conquest turret
|
||||
case 244: //Wintergrasp turret
|
||||
_me->SetControlled(true, UNIT_STAT_ROOT);
|
||||
//me->AddUnitMovementFlag(MOVEMENTFLAG_ROOT);
|
||||
//me->SetSpeed(MOVE_TURN_RATE, 0.7f);
|
||||
//me->SetSpeed(MOVE_PITCH_RATE, 0.7f);
|
||||
//me->m_movementInfo.flags2=59;
|
||||
_me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_DECREASE_SPEED, true);
|
||||
break;
|
||||
default:
|
||||
@@ -464,6 +469,20 @@ void Vehicle::Dismiss()
|
||||
_me->AddObjectToRemoveList();
|
||||
}
|
||||
|
||||
void Vehicle::TeleportVehicle(float x, float y, float z, float ang)
|
||||
{
|
||||
vehiclePlayers.clear();
|
||||
for(int8 i = 0; i < 8; i++)
|
||||
if (Unit* player = GetPassenger(i))
|
||||
vehiclePlayers.insert(player->GetGUID());
|
||||
|
||||
RemoveAllPassengers(); // this can unlink Guns from Siege Engines
|
||||
_me->NearTeleportTo(x, y, z, ang);
|
||||
for (GuidSet::const_iterator itr = vehiclePlayers.begin(); itr != vehiclePlayers.end(); ++itr)
|
||||
if(Unit* plr = sObjectAccessor->FindUnit(*itr))
|
||||
plr->NearTeleportTo(x, y, z, ang);
|
||||
}
|
||||
|
||||
void Vehicle::InitMovementInfoForBase()
|
||||
{
|
||||
uint32 vehicleFlags = GetVehicleInfo()->m_flags;
|
||||
|
||||
@@ -98,6 +98,7 @@ struct VehicleAccessory
|
||||
typedef std::vector<VehicleAccessory> VehicleAccessoryList;
|
||||
typedef std::map<uint32, VehicleAccessoryList> VehicleAccessoryMap;
|
||||
typedef std::map<int8, VehicleSeat> SeatMap;
|
||||
typedef std::set<uint64> GuidSet;
|
||||
|
||||
class Vehicle
|
||||
{
|
||||
@@ -129,6 +130,7 @@ class Vehicle
|
||||
void RelocatePassengers(float x, float y, float z, float ang);
|
||||
void RemoveAllPassengers();
|
||||
void Dismiss();
|
||||
void TeleportVehicle(float x, float y, float z, float ang);
|
||||
bool IsVehicleInUse() { return Seats.begin() != Seats.end(); }
|
||||
|
||||
SeatMap Seats;
|
||||
@@ -144,6 +146,7 @@ class Vehicle
|
||||
|
||||
Unit* _me;
|
||||
VehicleEntry const* _vehicleInfo;
|
||||
GuidSet vehiclePlayers;
|
||||
uint32 _usableSeatNum; // Number of seats that match VehicleSeatEntry::UsableByPlayer, used for proper display flags
|
||||
uint32 _creatureEntry; // Can be different than me->GetBase()->GetEntry() in case of players
|
||||
};
|
||||
|
||||
@@ -194,6 +194,7 @@ class ObjectAccessor
|
||||
// ACCESS LIKE THAT IS NOT THREAD SAFE
|
||||
static Pet * FindPet(uint64);
|
||||
static Player* FindPlayer(uint64);
|
||||
static Creature* FindCreature(uint64);
|
||||
static Unit* FindUnit(uint64);
|
||||
Player* FindPlayerByName(const char* name);
|
||||
|
||||
|
||||
@@ -836,6 +836,11 @@ class ObjectMgr
|
||||
return &mCreatureQuestRelations;
|
||||
}
|
||||
|
||||
QuestRelations* GetCreatureQuestInvolvedRelation()
|
||||
{
|
||||
return &mCreatureQuestInvolvedRelations;
|
||||
}
|
||||
|
||||
QuestRelationBounds GetCreatureQuestRelationBounds(uint32 creature_entry)
|
||||
{
|
||||
return mCreatureQuestRelations.equal_range(creature_entry);
|
||||
|
||||
@@ -57,7 +57,7 @@ Loot* Roll::getLoot()
|
||||
|
||||
Group::Group() : m_leaderGuid(0), m_leaderName(""), m_groupType(GROUPTYPE_NORMAL),
|
||||
m_dungeonDifficulty(DUNGEON_DIFFICULTY_NORMAL), m_raidDifficulty(RAID_DIFFICULTY_10MAN_NORMAL),
|
||||
m_bgGroup(NULL), m_lootMethod(FREE_FOR_ALL), m_lootThreshold(ITEM_QUALITY_UNCOMMON), m_looterGuid(0),
|
||||
m_bgGroup(NULL), m_bfGroup(NULL), m_lootMethod(FREE_FOR_ALL), m_lootThreshold(ITEM_QUALITY_UNCOMMON), m_looterGuid(0),
|
||||
m_subGroupsCounts(NULL), m_guid(0), m_counter(0), m_maxEnchantingLevel(0), m_dbStoreId(0)
|
||||
{
|
||||
for (uint8 i = 0; i < TARGETICONCOUNT; ++i)
|
||||
@@ -102,7 +102,7 @@ bool Group::Create(Player *leader)
|
||||
m_leaderGuid = leaderGuid;
|
||||
m_leaderName = leader->GetName();
|
||||
|
||||
m_groupType = isBGGroup() ? GROUPTYPE_BGRAID : GROUPTYPE_NORMAL;
|
||||
m_groupType = (isBGGroup() || isBFGroup()) ? GROUPTYPE_BGRAID : GROUPTYPE_NORMAL;
|
||||
|
||||
if (m_groupType & GROUPTYPE_RAID)
|
||||
_initRaidSubGroupsCounter();
|
||||
@@ -114,7 +114,7 @@ bool Group::Create(Player *leader)
|
||||
m_dungeonDifficulty = DUNGEON_DIFFICULTY_NORMAL;
|
||||
m_raidDifficulty = RAID_DIFFICULTY_10MAN_NORMAL;
|
||||
|
||||
if (!isBGGroup())
|
||||
if (!isBGGroup() || !isBFGroup())
|
||||
{
|
||||
m_dungeonDifficulty = leader->GetDungeonDifficulty();
|
||||
m_raidDifficulty = leader->GetRaidDifficulty();
|
||||
@@ -200,7 +200,7 @@ void Group::ConvertToLFG()
|
||||
{
|
||||
m_groupType = GroupType(m_groupType | GROUPTYPE_LFG | GROUPTYPE_UNK1);
|
||||
m_lootMethod = NEED_BEFORE_GREED;
|
||||
if (!isBGGroup())
|
||||
if (!isBGGroup() && !isBFGroup())
|
||||
CharacterDatabase.PExecute("UPDATE groups SET groupType='%u' WHERE guid='%u'", uint8(m_groupType), m_dbStoreId);
|
||||
SendUpdate();
|
||||
}
|
||||
@@ -211,7 +211,7 @@ void Group::ConvertToRaid()
|
||||
|
||||
_initRaidSubGroupsCounter();
|
||||
|
||||
if (!isBGGroup())
|
||||
if (!isBGGroup() && !isBFGroup())
|
||||
CharacterDatabase.PExecute("UPDATE groups SET groupType='%u' WHERE guid='%u'", uint8(m_groupType), m_dbStoreId);
|
||||
SendUpdate();
|
||||
|
||||
@@ -226,7 +226,7 @@ bool Group::AddInvite(Player* player)
|
||||
if (!player || player->GetGroupInvite())
|
||||
return false;
|
||||
Group* group = player->GetGroup();
|
||||
if (group && group->isBGGroup())
|
||||
if (group && (group->isBGGroup() || group->isBFGroup()))
|
||||
group = player->GetOriginalGroup();
|
||||
if (group)
|
||||
return false;
|
||||
@@ -323,8 +323,8 @@ bool Group::AddMember(Player* player)
|
||||
if (player)
|
||||
{
|
||||
player->SetGroupInvite(NULL);
|
||||
if (player->GetGroup() && isBGGroup()) //if player is in group and he is being added to BG raid group, then call SetBattlegroundRaid()
|
||||
player->SetBattlegroundRaid(this, subGroup);
|
||||
if (player->GetGroup() && (isBGGroup() || isBFGroup())) //if player is in group and he is being added to BG raid group, then call SetBattlegroundRaid()
|
||||
player->SetBattlegroundOrBattlefieldRaid(this, subGroup);
|
||||
else if (player->GetGroup()) //if player is in bg raid and we are adding him to normal group, then call SetOriginalGroup()
|
||||
player->SetOriginalGroup(this, subGroup);
|
||||
else //if player is not in group, then call set group
|
||||
@@ -343,7 +343,7 @@ bool Group::AddMember(Player* player)
|
||||
}
|
||||
|
||||
// insert into the table if we're not a battleground group
|
||||
if (!isBGGroup())
|
||||
if (!isBGGroup() || !isBFGroup())
|
||||
CharacterDatabase.PExecute("INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(%u, %u, %u, %u, %u)",
|
||||
m_dbStoreId, GUID_LOPART(member.guid), member.flags, member.group, member.roles);
|
||||
|
||||
@@ -352,7 +352,7 @@ bool Group::AddMember(Player* player)
|
||||
|
||||
if (player)
|
||||
{
|
||||
if (!IsLeader(player->GetGUID()) && !isBGGroup())
|
||||
if (!IsLeader(player->GetGUID()) && !isBGGroup() && !isBFGroup())
|
||||
{
|
||||
// reset the new member's instances, unless he is currently in one of them
|
||||
// including raid/heroic instances that they are not permanently bound to!
|
||||
@@ -397,15 +397,15 @@ bool Group::RemoveMember(const uint64 &guid, const RemoveMethod &method /*= GROU
|
||||
if (isLFGGroup() && method == GROUP_REMOVEMETHOD_KICK)
|
||||
return m_memberSlots.size();
|
||||
|
||||
// remove member and change leader (if need) only if strong more 2 members _before_ member remove (BG allow 1 member group)
|
||||
if (GetMembersCount() > (isBGGroup() ? 1u : 2u))
|
||||
// remove member and change leader (if need) only if strong more 2 members _before_ member remove (BG/BF allow 1 member group)
|
||||
if (GetMembersCount() > ((isBGGroup() || isBFGroup()) ? 1u : 2u))
|
||||
{
|
||||
Player* player = sObjectMgr->GetPlayer(guid);
|
||||
if (player)
|
||||
{
|
||||
// Battleground group handling
|
||||
if (isBGGroup())
|
||||
player->RemoveFromBattlegroundRaid();
|
||||
if (isBGGroup() || isBFGroup())
|
||||
player->RemoveFromBattlegroundOrBattlefieldRaid();
|
||||
else
|
||||
// Regular group
|
||||
{
|
||||
@@ -513,7 +513,7 @@ void Group::ChangeLeader(const uint64 &guid)
|
||||
|
||||
sScriptMgr->OnGroupChangeLeader(this, m_leaderGuid, guid);
|
||||
|
||||
if (!isBGGroup())
|
||||
if (!isBGGroup() || !isBFGroup())
|
||||
{
|
||||
// Remove the groups permanent instance bindings
|
||||
for (uint8 i = 0; i < MAX_DIFFICULTY; ++i)
|
||||
@@ -563,8 +563,8 @@ void Group::Disband(bool hideDestroy /* = false */)
|
||||
|
||||
//we cannot call _removeMember because it would invalidate member iterator
|
||||
//if we are removing player from battleground raid
|
||||
if (isBGGroup())
|
||||
player->RemoveFromBattlegroundRaid();
|
||||
if (isBGGroup() || isBFGroup())
|
||||
player->RemoveFromBattlegroundOrBattlefieldRaid();
|
||||
else
|
||||
{
|
||||
//we can remove player who is in battleground from his original group
|
||||
@@ -608,7 +608,7 @@ void Group::Disband(bool hideDestroy /* = false */)
|
||||
|
||||
RemoveAllInvites();
|
||||
|
||||
if (!isBGGroup())
|
||||
if (!isBGGroup() || !isBFGroup())
|
||||
{
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
trans->PAppend("DELETE FROM groups WHERE guid = %u", m_dbStoreId);
|
||||
@@ -1213,7 +1213,7 @@ void Group::SendUpdate()
|
||||
Player* member = sObjectMgr->GetPlayer(citr2->guid);
|
||||
|
||||
uint8 onlineState = (member) ? MEMBER_STATUS_ONLINE : MEMBER_STATUS_OFFLINE;
|
||||
onlineState = onlineState | ((isBGGroup()) ? MEMBER_STATUS_PVP : 0);
|
||||
onlineState = onlineState | ((isBGGroup() || isBFGroup()) ? MEMBER_STATUS_PVP : 0);
|
||||
|
||||
data << citr2->name;
|
||||
data << uint64(citr2->guid); // guid
|
||||
@@ -1305,7 +1305,7 @@ bool Group::_setMembersGroup(const uint64 &guid, const uint8 &group)
|
||||
|
||||
SubGroupCounterIncrease(group);
|
||||
|
||||
if (!isBGGroup())
|
||||
if (!isBGGroup() || !isBFGroup())
|
||||
CharacterDatabase.PExecute("UPDATE group_member SET subgroup='%u' WHERE memberGuid='%u'", group, GUID_LOPART(guid));
|
||||
|
||||
return true;
|
||||
@@ -1538,7 +1538,7 @@ void Roll::targetObjectBuildLink()
|
||||
void Group::SetDungeonDifficulty(Difficulty difficulty)
|
||||
{
|
||||
m_dungeonDifficulty = difficulty;
|
||||
if (!isBGGroup())
|
||||
if (!isBGGroup() || !isBFGroup())
|
||||
CharacterDatabase.PExecute("UPDATE groups SET difficulty = %u WHERE guid ='%u'", m_dungeonDifficulty, m_dbStoreId);
|
||||
|
||||
for (GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
@@ -1555,7 +1555,7 @@ void Group::SetDungeonDifficulty(Difficulty difficulty)
|
||||
void Group::SetRaidDifficulty(Difficulty difficulty)
|
||||
{
|
||||
m_raidDifficulty = difficulty;
|
||||
if (!isBGGroup())
|
||||
if (!isBGGroup() || !isBFGroup())
|
||||
CharacterDatabase.PExecute("UPDATE groups SET raiddifficulty = %u WHERE guid ='%u'", m_raidDifficulty, m_dbStoreId);
|
||||
|
||||
for (GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
@@ -1584,7 +1584,7 @@ bool Group::InCombatToInstance(uint32 instanceId)
|
||||
|
||||
void Group::ResetInstances(uint8 method, bool isRaid, Player* SendMsgTo)
|
||||
{
|
||||
if (isBGGroup())
|
||||
if (isBGGroup() || isBFGroup())
|
||||
return;
|
||||
|
||||
// method can be INSTANCE_RESET_ALL, INSTANCE_RESET_CHANGE_DIFFICULTY, INSTANCE_RESET_GROUP_DISBAND
|
||||
@@ -1692,7 +1692,7 @@ InstanceGroupBind* Group::GetBoundInstance(MapEntry const* mapEntry)
|
||||
|
||||
InstanceGroupBind* Group::BindToInstance(InstanceSave *save, bool permanent, bool load)
|
||||
{
|
||||
if (!save || isBGGroup())
|
||||
if (!save || isBGGroup() || isBFGroup())
|
||||
return NULL;
|
||||
|
||||
InstanceGroupBind& bind = m_boundInstances[save->GetDifficulty()][save->GetMapId()];
|
||||
@@ -1807,6 +1807,11 @@ bool Group::isBGGroup() const
|
||||
return m_bgGroup != NULL;
|
||||
}
|
||||
|
||||
bool Group::isBFGroup() const
|
||||
{
|
||||
return m_bfGroup != NULL;
|
||||
}
|
||||
|
||||
bool Group::IsCreated() const
|
||||
{
|
||||
return GetMembersCount() > 0;
|
||||
@@ -1922,6 +1927,11 @@ void Group::SetBattlegroundGroup(Battleground *bg)
|
||||
m_bgGroup = bg;
|
||||
}
|
||||
|
||||
void Group::SetBattlefieldGroup(Battlefield *bg)
|
||||
{
|
||||
m_bfGroup = bg;
|
||||
}
|
||||
|
||||
void Group::SetGroupMemberFlag(uint64 guid, const bool &apply, GroupMemberFlags flag)
|
||||
{
|
||||
// Assistants, main assistants and main tanks are only available in raid groups
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "QueryResult.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "Player.h"
|
||||
#include "../../Battlefield/BattlefieldMgr.h" //FIXME
|
||||
|
||||
class Creature;
|
||||
class GroupReference;
|
||||
@@ -204,6 +205,7 @@ class Group
|
||||
bool IsFull() const;
|
||||
bool isLFGGroup() const;
|
||||
bool isRaidGroup() const;
|
||||
bool isBFGroup() const;
|
||||
bool isBGGroup() const;
|
||||
bool IsCreated() const;
|
||||
const uint64& GetLeaderGUID() const;
|
||||
@@ -239,6 +241,7 @@ class Group
|
||||
void ConvertToRaid();
|
||||
|
||||
void SetBattlegroundGroup(Battleground *bg);
|
||||
void SetBattlefieldGroup(Battlefield *bf);
|
||||
GroupJoinBattlegroundResult CanJoinBattlegroundQueue(Battleground const* bgOrTemplate, BattlegroundQueueTypeId bgQueueTypeId, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot);
|
||||
|
||||
void ChangeMembersGroup(const uint64 &guid, const uint8 &group);
|
||||
@@ -319,6 +322,7 @@ class Group
|
||||
GroupType m_groupType;
|
||||
Difficulty m_dungeonDifficulty;
|
||||
Difficulty m_raidDifficulty;
|
||||
Battlefield* m_bfGroup;
|
||||
Battleground* m_bgGroup;
|
||||
uint64 m_targetIcons[TARGETICONCOUNT];
|
||||
LootMethod m_lootMethod;
|
||||
|
||||
@@ -250,7 +250,7 @@ class Quest
|
||||
bool IsWeekly() const { return QuestFlags & QUEST_FLAGS_WEEKLY; }
|
||||
bool IsDailyOrWeekly() const { return QuestFlags & (QUEST_FLAGS_DAILY | QUEST_FLAGS_WEEKLY); }
|
||||
bool IsAutoAccept() const { return QuestFlags & QUEST_FLAGS_AUTO_ACCEPT; }
|
||||
bool IsRaidQuest() const { return Type == QUEST_TYPE_RAID || Type == QUEST_TYPE_RAID_10 || Type == QUEST_TYPE_RAID_25; }
|
||||
bool IsRaidQuest() const { return Type == QUEST_TYPE_RAID || Type == QUEST_TYPE_RAID_10 || Type == QUEST_TYPE_RAID_25 || Type == QUEST_TYPE_PVP; }
|
||||
bool IsAllowedInRaid() const;
|
||||
bool IsDFQuest() const { return QuestFlags & QUEST_TRINITY_FLAGS_DF_QUEST; }
|
||||
uint32 CalculateHonorGain(uint8 level) const;
|
||||
|
||||
@@ -45,6 +45,7 @@ void AddSC_SmartSCripts();
|
||||
//Commands
|
||||
void AddSC_account_commandscript();
|
||||
void AddSC_achievement_commandscript();
|
||||
void AddSC_bf_commandscript();
|
||||
void AddSC_debug_commandscript();
|
||||
void AddSC_event_commandscript();
|
||||
void AddSC_gm_commandscript();
|
||||
@@ -644,6 +645,7 @@ void AddCommandScripts()
|
||||
{
|
||||
AddSC_account_commandscript();
|
||||
AddSC_achievement_commandscript();
|
||||
AddSC_bf_commandscript();
|
||||
AddSC_debug_commandscript();
|
||||
AddSC_event_commandscript();
|
||||
AddSC_gm_commandscript();
|
||||
|
||||
@@ -753,6 +753,14 @@ CreatureAI* ScriptMgr::GetCreatureAI(Creature* creature)
|
||||
return tmpscript->GetAI(creature);
|
||||
}
|
||||
|
||||
GameObjectAI* ScriptMgr::GetGameObjectAI(GameObject* gameobject)
|
||||
{
|
||||
ASSERT(gameobject);
|
||||
|
||||
GET_SCRIPT_RET(GameObjectScript, gameobject->GetScriptId(), tmpscript, NULL);
|
||||
return tmpscript->GetAI(gameobject);
|
||||
}
|
||||
|
||||
void ScriptMgr::OnCreatureUpdate(Creature* creature, uint32 diff)
|
||||
{
|
||||
ASSERT(creature);
|
||||
|
||||
@@ -37,6 +37,7 @@ class Channel;
|
||||
class ChatCommand;
|
||||
class Creature;
|
||||
class CreatureAI;
|
||||
class GameObjectAI;
|
||||
class DynamicObject;
|
||||
class GameObject;
|
||||
class Guild;
|
||||
@@ -468,6 +469,9 @@ class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject>
|
||||
virtual void OnDestroyed(GameObject* /*go*/, Player* /*player*/, uint32 /*eventId*/) { }
|
||||
// Called when the gameobject is damaged (destructible buildings only).
|
||||
virtual void OnDamaged(GameObject* /*go*/, Player* /*player*/, uint32 /*eventId*/) { }
|
||||
|
||||
// Called when a CreatureAI object is needed for the creature.
|
||||
virtual GameObjectAI* GetAI(GameObject* /*gameobject*/) const { return NULL; }
|
||||
};
|
||||
|
||||
class AreaTriggerScript : public ScriptObject
|
||||
@@ -867,6 +871,7 @@ class ScriptMgr
|
||||
uint32 GetDialogStatus(Player* player, GameObject* go);
|
||||
void OnGameObjectDestroyed(GameObject* go, Player* player, uint32 eventId);
|
||||
void OnGameObjectDamaged(GameObject* go, Player* player, uint32 eventId);
|
||||
GameObjectAI* GetGameObjectAI(GameObject* gameobject);
|
||||
void OnGameObjectUpdate(GameObject* go, uint32 diff);
|
||||
|
||||
public: /* AreaTriggerScript */
|
||||
|
||||
@@ -586,46 +586,6 @@ void WorldSession::HandleBattlefieldStatusOpcode(WorldPacket & /*recv_data*/)
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleAreaSpiritHealerQueryOpcode(WorldPacket & recv_data)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_AREA_SPIRIT_HEALER_QUERY");
|
||||
|
||||
Battleground *bg = _player->GetBattleground();
|
||||
|
||||
uint64 guid;
|
||||
recv_data >> guid;
|
||||
|
||||
Creature* unit = GetPlayer()->GetMap()->GetCreature(guid);
|
||||
if (!unit)
|
||||
return;
|
||||
|
||||
if (!unit->isSpiritService()) // it's not spirit service
|
||||
return;
|
||||
|
||||
if (bg)
|
||||
sBattlegroundMgr->SendAreaSpiritHealerQueryOpcode(_player, bg, guid);
|
||||
}
|
||||
|
||||
void WorldSession::HandleAreaSpiritHealerQueueOpcode(WorldPacket & recv_data)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_AREA_SPIRIT_HEALER_QUEUE");
|
||||
|
||||
Battleground *bg = _player->GetBattleground();
|
||||
|
||||
uint64 guid;
|
||||
recv_data >> guid;
|
||||
|
||||
Creature* unit = GetPlayer()->GetMap()->GetCreature(guid);
|
||||
if (!unit)
|
||||
return;
|
||||
|
||||
if (!unit->isSpiritService()) // it's not spirit service
|
||||
return;
|
||||
|
||||
if (bg)
|
||||
bg->AddPlayerToResurrectQueue(guid, _player->GetGUID());
|
||||
}
|
||||
|
||||
void WorldSession::HandleBattlemasterJoinArena(WorldPacket & recv_data)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_BATTLEMASTER_JOIN_ARENA");
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
#include "zlib.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "Object.h"
|
||||
#include "Battleground.h"
|
||||
#include "BattlegroundMgr.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "OutdoorPvP.h"
|
||||
#include "Pet.h"
|
||||
#include "SocialMgr.h"
|
||||
@@ -1723,11 +1724,64 @@ void WorldSession::SendSetPhaseShift(uint32 PhaseShift)
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
//Battlefield and Battleground
|
||||
void WorldSession::HandleAreaSpiritHealerQueryOpcode(WorldPacket & recv_data)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_AREA_SPIRIT_HEALER_QUERY");
|
||||
|
||||
Battleground* bg = _player->GetBattleground();
|
||||
|
||||
uint64 guid;
|
||||
recv_data >> guid;
|
||||
|
||||
Creature* unit = GetPlayer()->GetMap()->GetCreature(guid);
|
||||
if (!unit)
|
||||
return;
|
||||
|
||||
if (!unit->isSpiritService()) // it's not spirit service
|
||||
return;
|
||||
|
||||
if (bg)
|
||||
sBattlegroundMgr->SendAreaSpiritHealerQueryOpcode(_player, bg, guid);
|
||||
|
||||
if (Battlefield* bf = sBattlefieldMgr.GetBattlefieldToZoneId(_player->GetZoneId()))
|
||||
bf->SendAreaSpiritHealerQueryOpcode(_player,guid);
|
||||
}
|
||||
|
||||
void WorldSession::HandleAreaSpiritHealerQueueOpcode(WorldPacket & recv_data)
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: CMSG_AREA_SPIRIT_HEALER_QUEUE");
|
||||
|
||||
Battleground* bg = _player->GetBattleground();
|
||||
|
||||
uint64 guid;
|
||||
recv_data >> guid;
|
||||
|
||||
Creature* unit = GetPlayer()->GetMap()->GetCreature(guid);
|
||||
if (!unit)
|
||||
return;
|
||||
|
||||
if (!unit->isSpiritService()) // it's not spirit service
|
||||
return;
|
||||
|
||||
if (bg)
|
||||
bg->AddPlayerToResurrectQueue(guid, _player->GetGUID());
|
||||
|
||||
if (Battlefield* bf = sBattlefieldMgr.GetBattlefieldToZoneId(_player->GetZoneId()))
|
||||
bf->AddPlayerToResurrectQueue(guid, _player->GetGUID());
|
||||
}
|
||||
|
||||
void WorldSession::HandleHearthAndResurrect(WorldPacket& /*recv_data*/)
|
||||
{
|
||||
if (_player->isInFlight())
|
||||
return;
|
||||
|
||||
if(Battlefield* bf = sBattlefieldMgr.GetBattlefieldToZoneId(_player->GetZoneId()))
|
||||
{
|
||||
// bf->PlayerAskToLeave(_player); FIXME
|
||||
return;
|
||||
}
|
||||
|
||||
AreaTableEntry const *atEntry = GetAreaEntryByAreaID(_player->GetAreaId());
|
||||
if (!atEntry || !(atEntry->flags & AREA_FLAG_WINTERGRASP_2))
|
||||
return;
|
||||
|
||||
@@ -1273,15 +1273,15 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
||||
/*0x4DC*/ { "UMSG_UNKNOWN_1244", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
|
||||
/*0x4DD*/ { "UMSG_UNKNOWN_1245", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
|
||||
/*0x4DE*/ { "SMSG_BATTLEFIELD_MGR_ENTRY_INVITE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
|
||||
/*0x4DF*/ { "CMSG_BATTLEFIELD_MGR_ENTRY_INVITE_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
|
||||
/*0x4DF*/ { "CMSG_BATTLEFIELD_MGR_ENTRY_INVITE_RESPONSE", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBfEntryInviteResponse },
|
||||
/*0x4E0*/ { "SMSG_BATTLEFIELD_MGR_ENTERED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
|
||||
/*0x4E1*/ { "SMSG_BATTLEFIELD_MGR_QUEUE_INVITE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
|
||||
/*0x4E2*/ { "CMSG_BATTLEFIELD_MGR_QUEUE_INVITE_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
|
||||
/*0x4E2*/ { "CMSG_BATTLEFIELD_MGR_QUEUE_INVITE_RESPONSE", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBfQueueInviteResponse },
|
||||
/*0x4E3*/ { "CMSG_BATTLEFIELD_MGR_QUEUE_REQUEST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
|
||||
/*0x4E4*/ { "SMSG_BATTLEFIELD_MGR_QUEUE_REQUEST_RESPONSE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
|
||||
/*0x4E5*/ { "SMSG_BATTLEFIELD_MGR_EJECT_PENDING", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
|
||||
/*0x4E6*/ { "SMSG_BATTLEFIELD_MGR_EJECTED", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
|
||||
/*0x4E7*/ { "CMSG_BATTLEFIELD_MGR_EXIT_REQUEST", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
|
||||
/*0x4E7*/ { "CMSG_BATTLEFIELD_MGR_EXIT_REQUEST", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBfExitRequest },
|
||||
/*0x4E8*/ { "SMSG_BATTLEFIELD_MGR_STATE_CHANGE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
|
||||
/*0x4E9*/ { "UMSG_UNKNOWN_1257", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
|
||||
/*0x4EA*/ { "UMSG_UNKNOWN_1258", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
|
||||
|
||||
@@ -785,6 +785,16 @@ class WorldSession
|
||||
void HandleHearthAndResurrect(WorldPacket& recv_data);
|
||||
void HandleInstanceLockResponse(WorldPacket& recvPacket);
|
||||
|
||||
// Battlefield
|
||||
void SendBfInvitePlayerToWar(uint32 BattleId,uint32 ZoneId,uint32 time);
|
||||
void SendBfInvitePlayerToQueue(uint32 BattleId);
|
||||
void SendBfQueueInviteResponce(uint32 BattleId,uint32 ZoneId);
|
||||
void SendBfEntered(uint32 BattleId);
|
||||
void SendBfLeaveMessage(uint32 BattleId);
|
||||
void HandleBfQueueInviteResponse(WorldPacket &recv_data);
|
||||
void HandleBfEntryInviteResponse(WorldPacket &recv_data);
|
||||
void HandleBfExitRequest(WorldPacket &recv_data);
|
||||
|
||||
// Looking for Dungeon/Raid
|
||||
void HandleLfgSetCommentOpcode(WorldPacket & recv_data);
|
||||
void HandleLfgPlayerLockInfoRequestOpcode(WorldPacket& recv_data);
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "CellImpl.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
|
||||
class Aura;
|
||||
//
|
||||
@@ -4815,8 +4816,12 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
||||
case 2584: // Waiting to Resurrect
|
||||
// Waiting to resurrect spell cancel, we must remove player from resurrect queue
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
if (Battleground *bg = target->ToPlayer()->GetBattleground())
|
||||
{
|
||||
if (Battleground* bg = target->ToPlayer()->GetBattleground())
|
||||
bg->RemovePlayerFromResurrectQueue(target->GetGUID());
|
||||
if(Battlefield* bf = sBattlefieldMgr.GetBattlefieldToZoneId(target->GetZoneId()))
|
||||
bf->RemovePlayerFromResurrectQueue(target->GetGUID());
|
||||
}
|
||||
break;
|
||||
case 36730: // Flame Strike
|
||||
{
|
||||
@@ -4853,6 +4858,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
||||
target->CastSpell((Unit*)NULL, GetAmount(), true, NULL, this);
|
||||
break;
|
||||
case 58600: // Restricted Flight Area
|
||||
case 58730: // Restricted Flight Area
|
||||
if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE)
|
||||
target->CastSpell(target, 58601, true);
|
||||
break;
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
#include "DisableMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
|
||||
extern pEffect SpellEffects[TOTAL_SPELL_EFFECTS];
|
||||
|
||||
@@ -5472,8 +5473,9 @@ SpellCastResult Spell::CheckCast(bool strict)
|
||||
// allow always ghost flight spells
|
||||
if (m_originalCaster && m_originalCaster->GetTypeId() == TYPEID_PLAYER && m_originalCaster->isAlive())
|
||||
{
|
||||
Battlefield* Bf = sBattlefieldMgr.GetBattlefieldToZoneId(m_originalCaster->GetZoneId());
|
||||
if (AreaTableEntry const* pArea = GetAreaEntryByAreaID(m_originalCaster->GetAreaId()))
|
||||
if (pArea->flags & AREA_FLAG_NO_FLY_ZONE)
|
||||
if ((pArea->flags & AREA_FLAG_NO_FLY_ZONE) || (Bf && !Bf->CanFlyIn()))
|
||||
return m_IsTriggeredSpell ? SPELL_FAILED_DONT_REPORT : SPELL_FAILED_NOT_HERE;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -6976,6 +6976,7 @@ void Spell::EffectPlayerNotification(SpellEffIndex effIndex)
|
||||
case 58730: // Restricted Flight Area
|
||||
case 58600: // Restricted Flight Area
|
||||
unitTarget->ToPlayer()->GetSession()->SendNotification(LANG_ZONE_NOFLYZONE);
|
||||
unitTarget->PlayDirectSound(9417); // Fel Reaver sound
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "Chat.h"
|
||||
#include "Spell.h"
|
||||
#include "BattlegroundMgr.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "CreatureAI.h"
|
||||
#include "MapManager.h"
|
||||
#include "BattlegroundIC.h"
|
||||
@@ -3289,6 +3290,26 @@ bool SpellArea::IsFitToRequirements(Player const* player, uint32 newZone, uint32
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case 58730: // No fly Zone - Wintergrasp
|
||||
{
|
||||
if (!player)
|
||||
return false;
|
||||
|
||||
Battlefield* Bf = sBattlefieldMgr.GetBattlefieldToZoneId(player->GetZoneId());
|
||||
if (!Bf || Bf->CanFlyIn() || (!player->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !player->HasAuraType(SPELL_AURA_FLY)))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case 57940: // Essence of Wintergrasp - Northrend
|
||||
{
|
||||
if (!player)
|
||||
return false;
|
||||
|
||||
Battlefield* Bf = sBattlefieldMgr.GetBattlefieldToZoneId(4197);
|
||||
if (!Bf || player->GetTeamId() != Bf->GetDefenderTeam())
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
case SPELL_OIL_REFINERY: // Oil Refinery - Isle of Conquest.
|
||||
case SPELL_QUARRY: // Quarry - Isle of Conquest.
|
||||
{
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "MapManager.h"
|
||||
#include "CreatureAIRegistry.h"
|
||||
#include "BattlegroundMgr.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "OutdoorPvPMgr.h"
|
||||
#include "TemporarySummon.h"
|
||||
#include "WaypointMovementGenerator.h"
|
||||
@@ -1184,6 +1185,15 @@ void World::LoadConfigSettings(bool reload)
|
||||
// MySQL ping time interval
|
||||
m_int_configs[CONFIG_DB_PING_INTERVAL] = sConfig->GetIntDefault("MaxPingTime", 30);
|
||||
|
||||
// Wintergrasp
|
||||
m_bool_configs[CONFIG_WINTERGRASP_ENABLE] = sConfig->GetBoolDefault("Wintergrasp.Enable", false);
|
||||
m_int_configs[CONFIG_WINTERGRASP_PLR_MAX] = sConfig->GetIntDefault("Wintergrasp.PlayerMax", 100);
|
||||
m_int_configs[CONFIG_WINTERGRASP_PLR_MIN] = sConfig->GetIntDefault("Wintergrasp.PlayerMin", 0);
|
||||
m_int_configs[CONFIG_WINTERGRASP_PLR_MIN_LVL] = sConfig->GetIntDefault("Wintergrasp.PlayerMinLvl", 77);
|
||||
m_int_configs[CONFIG_WINTERGRASP_BATTLETIME] = sConfig->GetIntDefault("Wintergrasp.BattleTimer", 30);
|
||||
m_int_configs[CONFIG_WINTERGRASP_NOBATTLETIME] = sConfig->GetIntDefault("Wintergrasp.NoBattleTimer", 150);
|
||||
m_int_configs[CONFIG_WINTERGRASP_RESTART_AFTER_CRASH] = sConfig->GetIntDefault("Wintergrasp.CrashRestartTimer", 10);
|
||||
|
||||
sScriptMgr->OnConfigLoad(reload);
|
||||
}
|
||||
|
||||
@@ -1698,6 +1708,10 @@ void World::SetInitialWorldSettings()
|
||||
sLog->outString("Starting Outdoor PvP System");
|
||||
sOutdoorPvPMgr->InitOutdoorPvP();
|
||||
|
||||
///- Initialize Battlefield
|
||||
sLog->outString("Starting Battlefield System");
|
||||
sBattlefieldMgr.InitBattlefield();
|
||||
|
||||
sLog->outString("Loading Transports...");
|
||||
sMapMgr->LoadTransports();
|
||||
|
||||
@@ -1948,6 +1962,9 @@ void World::Update(uint32 diff)
|
||||
sOutdoorPvPMgr->Update(diff);
|
||||
RecordTimeDiff("UpdateOutdoorPvPMgr");
|
||||
|
||||
sBattlefieldMgr.Update(diff);
|
||||
RecordTimeDiff("BattlefieldMgr");
|
||||
|
||||
///- Delete all characters which have been deleted X days before
|
||||
if (m_timers[WUPDATE_DELETECHARS].Passed())
|
||||
{
|
||||
|
||||
@@ -158,6 +158,7 @@ enum WorldBoolConfigs
|
||||
CONFIG_ALLOW_TICKETS,
|
||||
CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES,
|
||||
CONFIG_PRESERVE_CUSTOM_CHANNELS,
|
||||
CONFIG_WINTERGRASP_ENABLE,
|
||||
BOOL_CONFIG_VALUE_COUNT
|
||||
};
|
||||
|
||||
@@ -306,6 +307,12 @@ enum WorldIntConfigs
|
||||
CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION,
|
||||
CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS,
|
||||
CONFIG_MAX_INSTANCES_PER_HOUR,
|
||||
CONFIG_WINTERGRASP_PLR_MAX,
|
||||
CONFIG_WINTERGRASP_PLR_MIN,
|
||||
CONFIG_WINTERGRASP_PLR_MIN_LVL,
|
||||
CONFIG_WINTERGRASP_BATTLETIME,
|
||||
CONFIG_WINTERGRASP_NOBATTLETIME,
|
||||
CONFIG_WINTERGRASP_RESTART_AFTER_CRASH,
|
||||
INT_CONFIG_VALUE_COUNT
|
||||
};
|
||||
|
||||
|
||||
@@ -82,6 +82,9 @@ include_directories(
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/AI/ScriptedAI
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/AI/SmartScripts
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/AuctionHouse
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/Battlefield
|
||||
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/Battlefield/Zones
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/Battlegrounds
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/Battlegrounds/Zones
|
||||
${CMAKE_SOURCE_DIR}/src/server/game/Calendar
|
||||
|
||||
@@ -12,6 +12,7 @@ set(scripts_STAT_SRCS
|
||||
${scripts_STAT_SRCS}
|
||||
Commands/cs_account.cpp
|
||||
Commands/cs_achievement.cpp
|
||||
Commands/cs_bf.cpp
|
||||
Commands/cs_gm.cpp
|
||||
Commands/cs_npc.cpp
|
||||
Commands/cs_go.cpp
|
||||
|
||||
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
Name: bf_commandscript
|
||||
%Complete: 100
|
||||
Comment: All bf related commands
|
||||
Category: commandscripts
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "Chat.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
|
||||
class bf_commandscript : public CommandScript
|
||||
{
|
||||
public:
|
||||
bf_commandscript() : CommandScript("bf_commandscript") { }
|
||||
|
||||
ChatCommand* GetCommands() const
|
||||
{
|
||||
static ChatCommand battlefieldcommandTable[] =
|
||||
{
|
||||
{ "start", SEC_ADMINISTRATOR, false, &HandleBattlefieldStart, "", NULL },
|
||||
{ "stop", SEC_ADMINISTRATOR, false, &HandleBattlefieldEnd, "", NULL },
|
||||
{ "switch", SEC_ADMINISTRATOR, false, &HandleBattlefieldSwitch, "", NULL },
|
||||
{ "timer", SEC_ADMINISTRATOR, false, &HandleBattlefieldTimer, "", NULL },
|
||||
{ "enable", SEC_ADMINISTRATOR, false, &HandleBattlefieldEnable, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
static ChatCommand commandTable[] =
|
||||
{
|
||||
{ "bf", SEC_ADMINISTRATOR, false, NULL, "", battlefieldcommandTable },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
return commandTable;
|
||||
}
|
||||
|
||||
static bool HandleBattlefieldStart(ChatHandler* handler, const char* args)
|
||||
{
|
||||
uint32 battleid = 0;
|
||||
char* battleid_str = strtok((char*)args, " ");
|
||||
if (!battleid_str)
|
||||
return false;
|
||||
|
||||
battleid = atoi(battleid_str);
|
||||
|
||||
Battlefield* bf = sBattlefieldMgr.GetBattlefieldByBattleId(battleid);
|
||||
|
||||
if (!bf)
|
||||
return false;
|
||||
|
||||
bf->StartBattle();
|
||||
|
||||
if (battleid == 1)
|
||||
handler->SendGlobalGMSysMessage("Wintergrasp (Command start used)");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleBattlefieldEnd(ChatHandler* handler, const char* args)
|
||||
{
|
||||
uint32 battleid = 0;
|
||||
char* battleid_str = strtok((char*)args, " ");
|
||||
if (!battleid_str)
|
||||
return false;
|
||||
|
||||
battleid = atoi(battleid_str);
|
||||
|
||||
Battlefield* bf = sBattlefieldMgr.GetBattlefieldByBattleId(battleid);
|
||||
|
||||
if (!bf)
|
||||
return false;
|
||||
|
||||
bf->EndBattle(true);
|
||||
|
||||
if (battleid == 1)
|
||||
handler->SendGlobalGMSysMessage("Wintergrasp (Command stop used)");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleBattlefieldEnable(ChatHandler* handler, const char* args)
|
||||
{
|
||||
uint32 battleid = 0;
|
||||
char* battleid_str = strtok((char*)args, " ");
|
||||
if (!battleid_str)
|
||||
return false;
|
||||
|
||||
battleid = atoi(battleid_str);
|
||||
|
||||
Battlefield* bf = sBattlefieldMgr.GetBattlefieldByBattleId(battleid);
|
||||
|
||||
if (!bf)
|
||||
return false;
|
||||
|
||||
if (bf->GetEnable())
|
||||
{
|
||||
bf->SetEnable(false);
|
||||
if (battleid == 1)
|
||||
handler->SendGlobalGMSysMessage("Wintergrasp is disabled");
|
||||
}
|
||||
else
|
||||
{
|
||||
bf->SetEnable(true);
|
||||
if (battleid == 1)
|
||||
handler->SendGlobalGMSysMessage("Wintergrasp is enabled");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleBattlefieldSwitch(ChatHandler* handler, const char* args)
|
||||
{
|
||||
uint32 battleid = 0;
|
||||
char* battleid_str = strtok((char*)args, " ");
|
||||
if (!battleid_str)
|
||||
return false;
|
||||
|
||||
battleid = atoi(battleid_str);
|
||||
|
||||
Battlefield* bf = sBattlefieldMgr.GetBattlefieldByBattleId(battleid);
|
||||
|
||||
if (!bf)
|
||||
return false;
|
||||
|
||||
bf->EndBattle(false);
|
||||
if (battleid == 1)
|
||||
handler->SendGlobalGMSysMessage("Wintergrasp (Command switch used)");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleBattlefieldTimer(ChatHandler* handler, const char* args)
|
||||
{
|
||||
uint32 battleid = 0;
|
||||
uint32 time = 0;
|
||||
char* battleid_str = strtok((char*)args, " ");
|
||||
if (!battleid_str)
|
||||
return false;
|
||||
char* time_str = strtok(NULL, " ");
|
||||
if (!time_str)
|
||||
return false;
|
||||
|
||||
battleid = atoi(battleid_str);
|
||||
|
||||
time = atoi(time_str);
|
||||
|
||||
Battlefield* bf = sBattlefieldMgr.GetBattlefieldByBattleId(battleid);
|
||||
|
||||
if (!bf)
|
||||
return false;
|
||||
|
||||
bf->SetTimer(time * IN_MILLISECONDS);
|
||||
bf->SendInitWorldStatesToAll();
|
||||
if (battleid == 1)
|
||||
handler->SendGlobalGMSysMessage("Wintergrasp (Command timer used)");
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_bf_commandscript()
|
||||
{
|
||||
new bf_commandscript();
|
||||
}
|
||||
@@ -174,6 +174,7 @@ set(scripts_STAT_SRCS
|
||||
Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
|
||||
Northrend/IcecrownCitadel/boss_sindragosa.cpp
|
||||
Northrend/zuldrak.cpp
|
||||
Northrend/wintergrasp.cpp
|
||||
Northrend/icecrown.cpp
|
||||
Northrend/Gundrak/boss_slad_ran.cpp
|
||||
Northrend/Gundrak/instance_gundrak.cpp
|
||||
|
||||
@@ -0,0 +1,418 @@
|
||||
/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "BattlefieldMgr.h"
|
||||
#include "BattlefieldWG.h"
|
||||
#include "Battlefield.h"
|
||||
#include "ScriptSystem.h"
|
||||
#include "WorldSession.h"
|
||||
#include "ObjectMgr.h"
|
||||
|
||||
#define GOSSIP_HELLO_DEMO1 "Build catapult."
|
||||
#define GOSSIP_HELLO_DEMO2 "Build demolisher."
|
||||
#define GOSSIP_HELLO_DEMO3 "Build siege engine."
|
||||
#define GOSSIP_HELLO_DEMO4 "I cannot build more!"
|
||||
|
||||
enum eWGqueuenpctext
|
||||
{
|
||||
WG_NPCQUEUE_TEXT_H_NOWAR = 14775,
|
||||
WG_NPCQUEUE_TEXT_H_QUEUE = 14790,
|
||||
WG_NPCQUEUE_TEXT_H_WAR = 14777,
|
||||
WG_NPCQUEUE_TEXT_A_NOWAR = 14782,
|
||||
WG_NPCQUEUE_TEXT_A_QUEUE = 14791,
|
||||
WG_NPCQUEUE_TEXT_A_WAR = 14781,
|
||||
WG_NPCQUEUE_TEXTOPTION_JOIN = -1850507,
|
||||
};
|
||||
|
||||
class npc_demolisher_engineerer : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_demolisher_engineerer() : CreatureScript("npc_demolisher_engineerer")
|
||||
{
|
||||
}
|
||||
|
||||
bool OnGossipHello(Player * pPlayer, Creature * pCreature)
|
||||
{
|
||||
if (pCreature->isQuestGiver())
|
||||
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
|
||||
|
||||
BattlefieldWG *BfWG = (BattlefieldWG *) sBattlefieldMgr.GetBattlefieldByBattleId(1);
|
||||
|
||||
if (!BfWG)
|
||||
return true;
|
||||
|
||||
if (BfWG->GetData(pCreature->GetEntry() == 30400 ? BATTLEFIELD_WG_DATA_MAX_VEHICLE_H : BATTLEFIELD_WG_DATA_MAX_VEHICLE_A) >
|
||||
BfWG->GetData(pCreature->GetEntry() == 30400 ? BATTLEFIELD_WG_DATA_VEHICLE_H : BATTLEFIELD_WG_DATA_VEHICLE_A))
|
||||
{
|
||||
if (pPlayer->HasAura(SPELL_CORPORAL))
|
||||
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
else if (pPlayer->HasAura(SPELL_LIEUTENANT))
|
||||
{
|
||||
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
}
|
||||
}
|
||||
else
|
||||
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
|
||||
|
||||
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player * pPlayer, Creature * pCreature, uint32 /*uiSender */ , uint32 uiAction)
|
||||
{
|
||||
pPlayer->CLOSE_GOSSIP_MENU();
|
||||
|
||||
BattlefieldWG *BfWG = (BattlefieldWG *) sBattlefieldMgr.GetBattlefieldByBattleId(1);
|
||||
|
||||
if (!BfWG)
|
||||
return true;
|
||||
|
||||
if (BfWG->GetData(pCreature->GetEntry() == 30400 ? BATTLEFIELD_WG_DATA_MAX_VEHICLE_H : BATTLEFIELD_WG_DATA_MAX_VEHICLE_A) >
|
||||
BfWG->GetData(pCreature->GetEntry() == 30400 ? BATTLEFIELD_WG_DATA_VEHICLE_H : BATTLEFIELD_WG_DATA_VEHICLE_A))
|
||||
{
|
||||
switch (uiAction - GOSSIP_ACTION_INFO_DEF)
|
||||
{
|
||||
case 0:
|
||||
pPlayer->CastSpell(pPlayer, 56663, false, NULL, NULL, pCreature->GetGUID());
|
||||
break;
|
||||
case 1:
|
||||
pPlayer->CastSpell(pPlayer, 56575, false, NULL, NULL, pCreature->GetGUID());
|
||||
break;
|
||||
case 2:
|
||||
pPlayer->CastSpell(pPlayer, pPlayer->GetTeamId()? 61408 : 56661, false, NULL, NULL, pCreature->GetGUID());
|
||||
break;
|
||||
}
|
||||
//spell 49899 Emote : 406 from sniff
|
||||
//INSERT INTO `spell_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES ('49899', '0', '1', '406', '0', '0', '0', '0', '0', '0');
|
||||
if (Creature * creature = pCreature->FindNearestCreature(27852, 30.0f, true))
|
||||
creature->CastSpell(creature, 49899, true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class npc_wg_spiritguide : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_wg_spiritguide() : CreatureScript("npc_wg_spiritguide")
|
||||
{
|
||||
}
|
||||
|
||||
bool OnGossipHello(Player * pPlayer, Creature * pCreature)
|
||||
{
|
||||
if (pCreature->isQuestGiver())
|
||||
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
|
||||
|
||||
BattlefieldWG *BfWG = (BattlefieldWG *) sBattlefieldMgr.GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
|
||||
if (BfWG)
|
||||
{
|
||||
GraveYardVect gy = BfWG->GetGraveYardVect();
|
||||
for (uint8 i = 0; i < gy.size(); i++)
|
||||
{
|
||||
if (gy[i]->GetControlTeamId() == pPlayer->GetTeamId())
|
||||
{
|
||||
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, sObjectMgr->GetTrinityStringForDBCLocale(((BfGraveYardWG *) gy[i])->GetTextId()), GOSSIP_SENDER_MAIN,
|
||||
GOSSIP_ACTION_INFO_DEF + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player * pPlayer, Creature * /*pCreature */ , uint32 /*uiSender */ , uint32 uiAction)
|
||||
{
|
||||
pPlayer->CLOSE_GOSSIP_MENU();
|
||||
|
||||
BattlefieldWG *BfWG = (BattlefieldWG *) sBattlefieldMgr.GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
|
||||
if (BfWG)
|
||||
{
|
||||
GraveYardVect gy = BfWG->GetGraveYardVect();
|
||||
for (uint8 i = 0; i < gy.size(); i++)
|
||||
{
|
||||
if (uiAction - GOSSIP_ACTION_INFO_DEF == i && gy[i]->GetControlTeamId() == pPlayer->GetTeamId())
|
||||
{
|
||||
const WorldSafeLocsEntry *ws = sWorldSafeLocsStore.LookupEntry(gy[i]->GetGraveYardId());
|
||||
pPlayer->TeleportTo(ws->map_id, ws->x, ws->y, ws->z, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class npc_wg_dalaran_queue : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_wg_dalaran_queue() : CreatureScript("npc_wg_dalaran_queue")
|
||||
{
|
||||
}
|
||||
|
||||
bool OnGossipHello(Player * pPlayer, Creature * pCreature)
|
||||
{
|
||||
if (pCreature->isQuestGiver())
|
||||
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
|
||||
|
||||
BattlefieldWG *BfWG = (BattlefieldWG *) sBattlefieldMgr.GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
|
||||
if (BfWG)
|
||||
{
|
||||
|
||||
if (BfWG->IsWarTime())
|
||||
{
|
||||
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, sObjectMgr->GetTrinityStringForDBCLocale(WG_NPCQUEUE_TEXTOPTION_JOIN), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
pPlayer->SEND_GOSSIP_MENU(BfWG->GetDefenderTeam()? WG_NPCQUEUE_TEXT_H_WAR : WG_NPCQUEUE_TEXT_A_WAR, pCreature->GetGUID());
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32 uiTime = BfWG->GetTimer() / 1000;
|
||||
pPlayer->SendUpdateWorldState(4354, time(NULL) + uiTime);
|
||||
if (uiTime < 15 * MINUTE)
|
||||
{
|
||||
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, sObjectMgr->GetTrinityStringForDBCLocale(WG_NPCQUEUE_TEXTOPTION_JOIN), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
|
||||
pPlayer->SEND_GOSSIP_MENU(BfWG->GetDefenderTeam()? WG_NPCQUEUE_TEXT_H_QUEUE : WG_NPCQUEUE_TEXT_A_QUEUE, pCreature->GetGUID());
|
||||
}
|
||||
else
|
||||
{
|
||||
pPlayer->SEND_GOSSIP_MENU(BfWG->GetDefenderTeam()? WG_NPCQUEUE_TEXT_H_NOWAR : WG_NPCQUEUE_TEXT_A_NOWAR, pCreature->GetGUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player * pPlayer, Creature * /*pCreature */ , uint32 /*uiSender */ , uint32 /*uiAction */ )
|
||||
{
|
||||
pPlayer->CLOSE_GOSSIP_MENU();
|
||||
|
||||
BattlefieldWG *BfWG = (BattlefieldWG *) sBattlefieldMgr.GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
|
||||
if (BfWG)
|
||||
{
|
||||
if (BfWG->IsWarTime())
|
||||
{
|
||||
BfWG->InvitePlayerToWar(pPlayer);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32 uiTime = BfWG->GetTimer() / 1000;
|
||||
if (uiTime < 15 * MINUTE)
|
||||
BfWG->InvitePlayerToQueue(pPlayer);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
const uint32 Vehicules[4] = { 32627, 28312, 28094, 27881 };
|
||||
|
||||
#define SPELL_VEHICLE_TELEPORT 49759
|
||||
|
||||
class go_wintergrasp_teleporter : public GameObjectScript
|
||||
{
|
||||
public:
|
||||
go_wintergrasp_teleporter() : GameObjectScript("go_wintergrasp_teleporter")
|
||||
{
|
||||
}
|
||||
|
||||
struct go_wintergrasp_teleporterAI : public GameObjectAI
|
||||
{
|
||||
go_wintergrasp_teleporterAI(GameObject * g) : GameObjectAI(g)
|
||||
{
|
||||
uiCheckTimer = 1000;
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (uiCheckTimer <= diff)
|
||||
{
|
||||
for (uint8 i = 0; i < 4; i++)
|
||||
if (Creature * pVehicle = go->FindNearestCreature(Vehicules[i], 3.0f, true))
|
||||
if (!pVehicle->HasAura(SPELL_VEHICLE_TELEPORT))
|
||||
{
|
||||
if (pVehicle->GetVehicle())
|
||||
{
|
||||
if (Unit * player = pVehicle->GetVehicle()->GetPassenger(0))
|
||||
{
|
||||
uint32 gofaction = go->GetUInt32Value(GAMEOBJECT_FACTION);
|
||||
uint32 plfaction = player->getFaction();
|
||||
if (gofaction == plfaction)
|
||||
{
|
||||
pVehicle->CastSpell(pVehicle, SPELL_VEHICLE_TELEPORT, true);
|
||||
if (Creature * TargetTeleport = pVehicle->FindNearestCreature(23472, 100.0f, true))
|
||||
{
|
||||
float x, y, z, o;
|
||||
TargetTeleport->GetPosition(x, y, z, o);
|
||||
pVehicle->GetVehicle()->TeleportVehicle(x, y, z, o);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
uiCheckTimer = 1000;
|
||||
}
|
||||
else
|
||||
uiCheckTimer -= diff;
|
||||
}
|
||||
private:
|
||||
uint32 uiCheckTimer;
|
||||
};
|
||||
|
||||
GameObjectAI *GetAI(GameObject * go) const
|
||||
{
|
||||
return new go_wintergrasp_teleporterAI(go);
|
||||
}
|
||||
};
|
||||
|
||||
class npc_wintergrasp_quest_giver : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_wintergrasp_quest_giver() : CreatureScript("npc_wintergrasp_quest_giver")
|
||||
{
|
||||
}
|
||||
|
||||
bool OnGossipHello(Player * pPlayer, Creature * pCreature)
|
||||
{
|
||||
if (pCreature->isQuestGiver())
|
||||
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
|
||||
|
||||
BattlefieldWG *BfWG = (BattlefieldWG *) sBattlefieldMgr.GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
|
||||
if (BfWG)
|
||||
{
|
||||
if (pCreature->isQuestGiver())
|
||||
{
|
||||
Object* pObject = (Object *) pCreature;
|
||||
QuestRelations* pObjectQR = sObjectMgr->GetCreatureQuestRelationMap();
|
||||
QuestRelations* pObjectQIR = sObjectMgr->GetCreatureQuestInvolvedRelation();
|
||||
|
||||
QuestMenu & qm = pPlayer->PlayerTalkClass->GetQuestMenu();
|
||||
qm.ClearMenu();
|
||||
|
||||
for (QuestRelations::const_iterator i = pObjectQIR->lower_bound(pObject->GetEntry()); i != pObjectQIR->upper_bound(pObject->GetEntry()); ++i)
|
||||
{
|
||||
uint32 quest_id = i->second;
|
||||
QuestStatus status = pPlayer->GetQuestStatus(quest_id);
|
||||
if (status == QUEST_STATUS_COMPLETE && !pPlayer->GetQuestRewardStatus(quest_id))
|
||||
qm.AddMenuItem(quest_id, 4);
|
||||
else if (status == QUEST_STATUS_INCOMPLETE)
|
||||
qm.AddMenuItem(quest_id, 4);
|
||||
}
|
||||
|
||||
for (QuestRelations::const_iterator i = pObjectQR->lower_bound(pObject->GetEntry()); i != pObjectQR->upper_bound(pObject->GetEntry()); ++i)
|
||||
{
|
||||
uint32 quest_id = i->second;
|
||||
Quest const* pQuest = sObjectMgr->GetQuestTemplate(quest_id);
|
||||
if (!pQuest)
|
||||
continue;
|
||||
|
||||
switch (quest_id)
|
||||
{
|
||||
// Horde attacker
|
||||
case 13193:
|
||||
case 13202:
|
||||
case 13180:
|
||||
case 13200:
|
||||
case 13201:
|
||||
case 13223:
|
||||
if (BfWG->GetAttackerTeam() == TEAM_HORDE)
|
||||
{
|
||||
QuestStatus status = pPlayer->GetQuestStatus(quest_id);
|
||||
|
||||
if (pQuest->IsAutoComplete() && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 4);
|
||||
else if (status == QUEST_STATUS_NONE && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 2);
|
||||
}
|
||||
break;
|
||||
// Horde defender
|
||||
case 13199:
|
||||
case 13192:
|
||||
case 13178:
|
||||
case 13191:
|
||||
case 13194:
|
||||
case 13539:
|
||||
case 13185:
|
||||
if (BfWG->GetDefenderTeam() == TEAM_HORDE)
|
||||
{
|
||||
QuestStatus status = pPlayer->GetQuestStatus(quest_id);
|
||||
|
||||
if (pQuest->IsAutoComplete() && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 4);
|
||||
else if (status == QUEST_STATUS_NONE && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 2);
|
||||
}
|
||||
break;
|
||||
// Alliance attacker
|
||||
case 13196:
|
||||
case 13198:
|
||||
case 13179:
|
||||
case 13222:
|
||||
case 13195:
|
||||
if (BfWG->GetAttackerTeam() == TEAM_ALLIANCE)
|
||||
{
|
||||
QuestStatus status = pPlayer->GetQuestStatus(quest_id);
|
||||
|
||||
if (pQuest->IsAutoComplete() && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 4);
|
||||
else if (status == QUEST_STATUS_NONE && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 2);
|
||||
}
|
||||
break;
|
||||
// Alliance defender
|
||||
case 13154:
|
||||
case 13153:
|
||||
case 13177:
|
||||
case 13538:
|
||||
case 13186:
|
||||
case 13156:
|
||||
if (BfWG->GetDefenderTeam() == TEAM_ALLIANCE)
|
||||
{
|
||||
QuestStatus status = pPlayer->GetQuestStatus(quest_id);
|
||||
|
||||
if (pQuest->IsAutoComplete() && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 4);
|
||||
else if (status == QUEST_STATUS_NONE && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 2);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
QuestStatus status = pPlayer->GetQuestStatus(quest_id);
|
||||
|
||||
if (pQuest->IsAutoComplete() && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 4);
|
||||
else if (status == QUEST_STATUS_NONE && pPlayer->CanTakeQuest(pQuest, false))
|
||||
qm.AddMenuItem(quest_id, 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_wintergrasp()
|
||||
{
|
||||
new npc_wg_dalaran_queue();
|
||||
new npc_wg_spiritguide();
|
||||
new npc_demolisher_engineerer();
|
||||
new go_wintergrasp_teleporter();
|
||||
new npc_wintergrasp_quest_giver();
|
||||
}
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "InstanceScript.h"
|
||||
#include "CombatAI.h"
|
||||
#include "PassiveAI.h"
|
||||
#include "GameObjectAI.h"
|
||||
#include "Chat.h"
|
||||
#include "DBCStructure.h"
|
||||
#include "DBCStores.h"
|
||||
|
||||
@@ -50,6 +50,7 @@ enum DebugLogFilters
|
||||
LOG_FILTER_LOOT = 0x00100000, // Loot related
|
||||
LOG_FILTER_GUILD = 0x00200000, // Guild related
|
||||
LOG_FILTER_TRANSPORTS = 0x00400000, // Transport related
|
||||
LOG_FILTER_BATTLEFIELD = 0x00800000, // Battlefield related
|
||||
};
|
||||
|
||||
enum LogTypes
|
||||
|
||||
@@ -1387,6 +1387,57 @@ AllowTickets = 1
|
||||
|
||||
DungeonFinder.Enable = 0
|
||||
|
||||
#
|
||||
# Wintergrasp.Enable
|
||||
# Description: Enable the Wintergrasp battlefield.
|
||||
# Default: 0 - (Disabled)
|
||||
# 1 - (Enabled, Experimental as of still being in development)
|
||||
|
||||
Wintergrasp.Enable = 0
|
||||
|
||||
#
|
||||
# Wintergrasp.PlayerMax
|
||||
# Description: Maximum number of players allowed in Wintergrasp.
|
||||
# Default: 100
|
||||
|
||||
Wintergrasp.PlayerMax = 100
|
||||
|
||||
#
|
||||
# Wintergrasp.PlayerMin
|
||||
# Description: Minimum number of players required for Wintergrasp.
|
||||
# Default: 0
|
||||
|
||||
Wintergrasp.PlayerMin = 0
|
||||
|
||||
#
|
||||
# Wintergrasp.PlayerMinLvl
|
||||
# Description: Required character level for the Wintergrasp battle.
|
||||
# Default: 77
|
||||
|
||||
Wintergrasp.PlayerMinLvl = 77
|
||||
|
||||
#
|
||||
# Wintergrasp.BattleTimer
|
||||
# Description: Time (in minutes) for the Wintergrasp battle to last.
|
||||
# Default: 30
|
||||
|
||||
Wintergrasp.BattleTimer = 30
|
||||
|
||||
#
|
||||
# Wintergrasp.NoBattleTimer
|
||||
# Description: Time (in minutes) between Wintergrasp battles.
|
||||
# Default: 150
|
||||
|
||||
Wintergrasp.NoBattleTimer = 150
|
||||
|
||||
#
|
||||
# Wintergrasp.CrashRestartTimer
|
||||
# Description: Time (in minutes) to delay the restart of Wintergrasp if the world server
|
||||
# crashed during a running battle.
|
||||
# Default: 10
|
||||
|
||||
Wintergrasp.CrashRestartTimer = 10
|
||||
|
||||
#
|
||||
# DBC.EnforceItemAttributes
|
||||
# Description: Disallow overriding item attributes stored in DBC files with values from the
|
||||
|
||||
Reference in New Issue
Block a user