diff options
26 files changed, 836 insertions, 239 deletions
diff --git a/sql/updates/world/2013_08_07_04_world_misc.sql b/sql/updates/world/2013_08_07_04_world_misc.sql new file mode 100644 index 00000000000..ef29b786ee5 --- /dev/null +++ b/sql/updates/world/2013_08_07_04_world_misc.sql @@ -0,0 +1,8 @@ +-- Move boss_anzu from EAI to CPP +UPDATE `creature_template` SET `AIName`= '', `ScriptName`= 'boss_anzu' WHERE `entry`=23035; +DELETE FROM creature_ai_scripts WHERE `creature_id`=23035; +DELETE FROM `creature_text` WHERE `entry`=23035; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES +(23035, 0, 0, 'Awaken, my children and assist your master!', 14, 0, 100, 0, 0, 0, 'Anzu - Summon Brood'), +(23035, 1, 0, 'Your spells... ke-kaw... are weak magics... easy to turn against you...', 15, 0, 100, 0, 0, 0, 'Anzu - Spell Bomb'), +(23035, 1, 1, 'Yes... cast your precious little spells, ak-a-ak!', 15, 0, 100, 0, 0, 0, 'Anzu - Spell Bomb'); diff --git a/sql/updates/world/2013_08_07_05_world_misc.sql b/sql/updates/world/2013_08_07_05_world_misc.sql new file mode 100644 index 00000000000..0bb1bc5c560 --- /dev/null +++ b/sql/updates/world/2013_08_07_05_world_misc.sql @@ -0,0 +1,2 @@ +UPDATE `smart_scripts` SET `event_param2`=100, `event_param4`=100 WHERE `entryorguid`=7271 AND `source_type`=0 AND `id`=5 AND `link`=0; -- Kirk +DELETE FROM `command` WHERE `name`='reload gameobject_involvedrelation'; -- Runico diff --git a/sql/updates/world/2013_08_07_06_world_drak_tharon_keep.sql b/sql/updates/world/2013_08_07_06_world_drak_tharon_keep.sql new file mode 100644 index 00000000000..d35fcc9565c --- /dev/null +++ b/sql/updates/world/2013_08_07_06_world_drak_tharon_keep.sql @@ -0,0 +1,31 @@ +DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (49555, 49380, 49381); +INSERT INTO `spelldifficulty_dbc` (`id`, `spellid0`, `spellid1`) VALUES +(49555, 49555, 59807), +(49380, 49380, 59803), +(49381, 49381, 59805); + +UPDATE `creature_template` SET `InhabitType`=5 WHERE `entry`=27724; + +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id` IN (27709,27753,27754)); +INSERT INTO `creature_addon` (`guid`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +(127478, 0, 0x0, 0x1, '31261'), +(127479, 0, 0x0, 0x1, '31261'), +(127517, 0, 0x0, 0x1, '31261'), +(127518, 0, 0x0, 0x1, '31261'), +(127519, 0, 0x0, 0x1, '31261'), +(127528, 0, 0x0, 0x1, '31261'), +(127539, 0, 0x0, 0x1, '31261'); + +DELETE FROM `creature` WHERE `guid` > 127479 AND `guid` < 127489; +DELETE FROM `creature` WHERE `guid` > 127519 AND `guid` < 127539 AND `guid` != 127528; + +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `id` IN (27709,27753,27754); + +UPDATE `creature_template` SET `faction_A`=1693, `faction_H`=1693, `unit_flags`=768, `InhabitType`=5 WHERE `entry` IN (27709,27753,27754); +UPDATE `creature_template` SET `ScriptName` = 'npc_drakkari_invader' WHERE `entry` IN (27709,27753,27754); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (27709,27753,27754); +INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +(27709, 26751, 0x0, 0x1, NULL), +(27753, 26751, 0x0, 0x1, NULL), +(27754, 26751, 0x0, 0x1, NULL); diff --git a/sql/updates/world/2013_08_07_06_world_sai.sql b/sql/updates/world/2013_08_07_06_world_sai.sql new file mode 100644 index 00000000000..32eb2cfbc5d --- /dev/null +++ b/sql/updates/world/2013_08_07_06_world_sai.sql @@ -0,0 +1,96 @@ +-- Random comment +SET @IMMOLATION := 58627; +SET @CHECKTRIGGER := 58594; +SET @CHECK := 58593; +SET @ABOMINATION := 30689; +SET @CREDIT := 58599; +SET @EXPLOSION := 58596; +SET @SKELETON := 31048; +SET @KC := 30995; + +-- Add SAI for Burning Skeleton +UPDATE `creature_template` SET AIName='SmartAI' WHERE `entry`=@SKELETON; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@SKELETON; +INSERT INTO `smart_scripts` VALUES +(@SKELETON,0,0,1,25,0,100,0,0,0,0,0,11,@IMMOLATION,0,0,0,0,0,1,0,0,0,0,0,0,0,'Burning Skeleton - On spawn - Cast Immolation on self'), +(@SKELETON,0,1,0,61,0,100,0,0,0,0,0,11,@CHECKTRIGGER,0,0,0,0,0,1,0,0,0,0,0,0,0,'Burning Skeleton - Linked with event 0 - Cast Skeleton Check Master on self'), +(@SKELETON,0,2,3,31,0,100,0,@CHECK,0,0,0,33,@KC,0,0,0,0,0,23,0,0,0,0,0,0,0,'Burning Skeleton - On target hit by spell Check - Cast Credit Trigger on self'), +(@SKELETON,0,3,4,61,0,100,0,0,0,0,0,28,@CHECKTRIGGER,0,0,0,0,0,1,0,0,0,0,0,0,0,'Burning Skeleton - Linked with event 2 - Remove auras from spell CheckTrigger'), +(@SKELETON,0,4,0,61,0,100,0,0,0,0,0,11,@EXPLOSION,0,0,0,0,0,1,0,0,0,0,0,0,0,'Burning Skeleton - Linked with event 3 - Cast explosion on self'); + +-- Add condition for Check to target only abominations /that are alive/ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=@CHECK; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,@CHECK,0,0,31,0,3,@ABOMINATION,0,0,0,'','Check can target only chained abominations'), +(13,1,@CHECK,0,0,36,0,0,0,0,0,0,'','Check can target only target alive creatures'); + +-- Add conditions for Explosion effect 1 +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=@EXPLOSION; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition` ,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,2,@EXPLOSION,0,0,31,0,3,@ABOMINATION,0,0,0,'','Explosion effect 1 can target only abomination'); + +SET @STALKER := 23033; +SET @ABOMINATION := 30689; +SET @RIGHT_HAND := 57983; -- Reference to Nayd's wife +SET @LEFT_HAND := 57980; +-- Using creature range as a targeting method; guid wise would be wiser but it has bugs out and targets the next living abomination (Not what we want) +UPDATE `creature_template` SET AIName='SmartAI',`InhabitType`=4 WHERE `entry`=@STALKER; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-124991,-124992,-124993,-124981,-124980,-124979); +INSERT INTO `smart_scripts` VALUES +(-124991,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124992,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124993,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124981,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124980,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124979,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'); +-- Group 2 +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-124982,-124983,-124984,-124969,-124968,-124967); +INSERT INTO `smart_scripts` VALUES +(-124982,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124983,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124984,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124969,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124968,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124967,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'); +-- Group 3 +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-125000,-125001,-125002,-124985,-124986,-124987); +INSERT INTO `smart_scripts` VALUES +(-125000,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-125001,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-125002,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124985,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124986,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124987,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'); +-- Group 4 +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-124973,-124974,-124975,-124976,-124977,-124978); +INSERT INTO `smart_scripts` VALUES +(-124973,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124974,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124975,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124976,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124977,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124978,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'); +-- Group 5 +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-124988,-124989,-124990,-124970,-124971,-124972); +INSERT INTO `smart_scripts` VALUES +(-124988,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124989,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124990,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124970,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124971,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124972,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'); +-- Group 6 +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-124998,-124999,-124997,-124996,-124995,-124994); +INSERT INTO `smart_scripts` VALUES +(-124997,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124998,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124999,0,0,0,60,0,100,0,0,1,20000,20000,11,@RIGHT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain right hand on abomination'), +(-124994,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124995,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'), +(-124996,0,0,0,60,0,100,0,0,1,20000,20000,11,@LEFT_HAND,0,0,0,0,0,11,@ABOMINATION,5,0,0,0,0,0,'Stalker - OOC - Cast Chain left hand on abomination'); + +-- Add condition target for chains +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (@LEFT_HAND,@RIGHT_HAND); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,@LEFT_HAND,0,0,31,0,3,@ABOMINATION,0,0,0,'','Left Hand Chains only target Chained Abomination'), +(13,1,@RIGHT_HAND,0,0,31,0,3,@ABOMINATION,0,0,0,'','Right Hand Chains only target Chained Abomination'); diff --git a/sql/updates/world/2013_08_07_07_world_pathing.sql b/sql/updates/world/2013_08_07_07_world_pathing.sql new file mode 100644 index 00000000000..55bdf5e752c --- /dev/null +++ b/sql/updates/world/2013_08_07_07_world_pathing.sql @@ -0,0 +1,29 @@ +DELETE FROM `creature_template_addon` WHERE `entry`=27003; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(27003, 270030, 0, 0, 1, 0, NULL); + +UPDATE `creature` SET `currentwaypoint`=0,`MovementType`=2,`spawndist`=0 WHERE `guid`=107239; +DELETE FROM `waypoint_data` WHERE `id`=270030; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES +(270030, 1, 3671.979, -497.5903, 157.9536, 0, 0, 0, 0, 100, 0), +(270030, 2, 3693.592, -472.8958, 163.496, 0, 0, 0, 0, 100, 0), +(270030, 3, 3694.013, -466.6045, 160.7129, 0, 0, 0, 0, 100, 0), +(270030, 4, 3713.763, -454.1045, 159.2129, 0, 10000, 0, 0, 100, 0), +(270030, 5, 3717.158, -453.4165, 161.311, 0, 0, 0, 0, 100, 0), +(270030, 6, 3717.857, -415.6472, 151.0353, 0, 0, 0, 0, 100, 0), +(270030, 7, 3716.621, -404.0498, 152.4212, 0, 0, 0, 0, 100, 0), +(270030, 8, 3704.548, -388.2196, 162.9577, 0, 10000, 0, 0, 100, 0), +(270030, 9, 3717.158, -453.4165, 161.311, 0, 0, 0, 0, 100, 0), +(270030, 10, 3717.357, -443.3972, 160.0353, 0, 0, 0, 0, 100, 0), +(270030, 11, 3717.357, -440.3972, 159.2853, 0, 0, 0, 0, 100, 0), +(270030, 12, 3717.607, -438.3972, 158.7853, 0, 0, 0, 0, 100, 0), +(270030, 13, 3717.607, -436.3972, 158.0353, 0, 0, 0, 0, 100, 0), +(270030, 14, 3717.607, -434.3972, 157.2853, 0, 0, 0, 0, 100, 0), +(270030, 15, 3717.607, -432.6472, 156.2853, 0, 0, 0, 0, 100, 0), +(270030, 16, 3717.607, -430.6472, 155.5353, 0, 0, 0, 0, 100, 0), +(270030, 17, 3717.607, -428.6472, 154.5353, 0, 0, 0, 0, 100, 0), +(270030, 18, 3717.607, -426.6472, 153.7853, 0, 0, 0, 0, 100, 0), +(270030, 19, 3717.607, -424.6472, 153.0353, 0, 0, 0, 0, 100, 0), +(270030, 20, 3717.607, -422.6472, 152.2853, 0, 0, 0, 0, 100, 0), +(270030, 21, 3717.607, -418.6472, 151.5353, 0, 0, 0, 0, 100, 0), +(270030, 22, 3717.857, -415.6472, 151.0353, 0, 10000, 0, 0, 100, 0); diff --git a/sql/updates/world/2013_08_07_08_world_sai.sql b/sql/updates/world/2013_08_07_08_world_sai.sql new file mode 100644 index 00000000000..7da2f89d09c --- /dev/null +++ b/sql/updates/world/2013_08_07_08_world_sai.sql @@ -0,0 +1,22 @@ +-- Fueling the Project (11715) +-- oh, and guess what! random comment +SET @NPC_OIL := 25781; -- Oil Pool +SET @SPELL_OIL_COLLECTOR := 45990; -- Collect Oil +SET @SPELL_SUMON_COLLECTOR := 45991; -- Summon Oil Collector +SET @SPELL_OIL_COAT := 46011; -- Oil Coat (small) +SET @SPELL_FD := 35357; -- Spawn Feign Death + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@NPC_OIL; +DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@NPC_OIL; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@NPC_OIL; +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 +(@NPC_OIL,0,0,1,25,0,100,0,0,0,0,0,11,@SPELL_FD,0,0,0,0,0,1,0,0,0,0,0,0,0,'On reset - Cast Spawn Feign Death'), +(@NPC_OIL,0,1,0,61,0,100,0,0,0,0,0,11,@SPELL_OIL_COAT,0,0,0,0,0,1,0,0,0,0,0,0,0,'On link - Cast Oil Coat (small)'), +-- +(@NPC_OIL,0,2,3,8,0,100,0,@SPELL_OIL_COLLECTOR,0,0,0,11,@SPELL_SUMON_COLLECTOR,0,0,0,0,0,7,0,0,0,0,0,0,0,'On spellhit - Cast Summon Oil Collector'), +(@NPC_OIL,0,3,4,61,0,100,0,0,0,0,0,33,@NPC_OIL,0,0,0,0,0,7,0,0,0,0,0,0,0,'On spellhit - Give killcredit'), +(@NPC_OIL,0,4,0,61,0,100,0,0,0,0,0,41,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,'On link - Despawn in 1 sec'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=@SPELL_OIL_COLLECTOR; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,@SPELL_OIL_COLLECTOR,0,0,31,0,3,@NPC_OIL,0,0,0,'','Collect Oil target Oil Pool'); diff --git a/sql/updates/world/2013_08_07_09_world_sai.sql b/sql/updates/world/2013_08_07_09_world_sai.sql new file mode 100644 index 00000000000..2f5cf9b026e --- /dev/null +++ b/sql/updates/world/2013_08_07_09_world_sai.sql @@ -0,0 +1,22 @@ +-- Strengthen the Ancients (12092) +-- Woodlands Walker +SET @ENTRY := 26421; +UPDATE `creature_template` SET `npcflag`=1,`AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100+0,@ENTRY*100+1); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,2,0,100,1,0,50,0,0,11,50994,0,0,0,0,0,1,0,0,0,0,0,0,0,'Woodlands Walker - Cast Toughen Hide - at 50% HP'), +(@ENTRY,0,1,2,64,0,100,1,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'On gossip hello - Close gossip - Invoker'), +(@ENTRY,0,2,0,61,0,100,1,0,0,0,0,88,@ENTRY*100+0,@ENTRY*100+1,0,0,0,0,1,0,0,0,0,0,0,0,'On link - Run random script - Self'), +-- +(@ENTRY*100+0,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Woodlands Walker - Emote text - Self'), +(@ENTRY*100+0,9,1,0,0,0,100,0,1000,1000,0,0,2,16,0,0,0,0,0,1,0,0,0,0,0,0,0,'Woodlands Walker - Set faction monster - Self'), +-- +(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Woodlands Walker - Emote text - Self'), +(@ENTRY*100+1,9,1,0,0,0,100,0,1000,1000,0,0,11,47550,0,0,0,0,0,7,0,0,0,0,0,0,0,'Woodlands Walker - Cast Create Bark of the Walkers - Invoker'), +(@ENTRY*100+1,9,2,0,0,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Woodlands Walker - Despawn - Self'); + +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY,0,0,"The %s is angered by your request and attacks!",16,0,100,0,0,0,"emote text"), +(@ENTRY,1,0,"Breaking off a piece of its bark, the %s hands it to you before departing.",16,0,100,0,0,0,"emote text"); diff --git a/sql/updates/world/2013_08_07_10_world_sai.sql b/sql/updates/world/2013_08_07_10_world_sai.sql new file mode 100644 index 00000000000..c43fd76aaf2 --- /dev/null +++ b/sql/updates/world/2013_08_07_10_world_sai.sql @@ -0,0 +1,78 @@ +-- See You on the Other Side (12121) +-- Jin'arrak's End (12152) + +SET @ENTRY1 := 27199; -- Warlord Jinarrak +SET @ENTRY2 := 27200; -- Offering Bunny - Drakil'jin Exterior +SET @ENTRY3 := 26902; -- Essence of Warlord Jin'arrak +SET @ENTRY4 := 32742; -- Your Corpse +SET @ENTRY5 := 27201; -- Offering Target Bunny - Drakil'jin Exterior +SET @RAGE := 47744; -- Rage of Jin'arrak +SET @OTOS := 61611; -- On the Other Side +SET @BODY := 61612; -- Summon Your Corpse +SET @OFFER := 48059; -- Place Offering +SET @FEED := 48060; -- Jin'arrak Feeds +SET @CREDIT := 48194; -- Jin'arrak Kill Credit + +-- Warlord Jinarrak +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY1; +INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@ENTRY1,0,0,0,0,'17327 31951'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY1,@ENTRY1*100,@ENTRY1*100+1); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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 +(@ENTRY1,0,0,0,54,0,100,1,0,0,0,0,44,3,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,'Warlord Jin''Arrak - Just summoned - Set phasemask 3 - Self'), +(@ENTRY1,0,1,2,38,0,100,0,0,2,0,0,80,@ENTRY1*100+1,0,2,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,'Warlord Jin''Arrak - On dataset 0 2 - Run script - Self'), +(@ENTRY1,0,2,0,61,0,100,0,0,0,0,0,5,15,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Linked - Play emote roar'), +(@ENTRY1,0,3,4,38,0,100,0,0,1,0,0,80,@ENTRY1*100,0,2,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,'Warlord Jin''Arrak - On dataset 0 1 - Run script - Self'), +(@ENTRY1,0,4,0,61,0,100,0,0,0,0,0,5,15,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Linked - Play emote roar'), +-- Scr 1 +(@ENTRY1*100,9,0,0,0,0,100,1,0,0,0,0,11,47730,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Script - Gong Effect - Self'), +(@ENTRY1*100,9,1,0,0,0,100,1,10000,10000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Script - Emote Text - Self'), +(@ENTRY1*100,9,2,0,0,0,100,1,0,0,0,0,11,@RAGE,0,0,0,0,0,18,20,0,0,0,0,0,0,'Warlord Jin''Arrak - Script - Cast Rage of Jin''arrak - Players in range'), +(@ENTRY1*100,9,3,0,0,0,100,1,10000,10000,0,0,33,@ENTRY3,0,0,0,0,0,18,20,0,0,0,0,0,0,'Warlord Jin''Arrak - Script- Kill credit - Players in range'), +-- Scr2 +(@ENTRY1*100+1,9,0,0,0,0,100,0,1500,1500,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Script - Say 0'), +(@ENTRY1*100+1,9,1,0,0,0,100,0,1000,1000,0,0,11,48060,0,0,0,0,0,19,@ENTRY5,0,0,0,0,0,0,'Warlord Jin''Arrak - Script - Cast feed'), +(@ENTRY1*100+1,9,2,0,0,0,100,0,7000,7000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Script - Say 1'), +(@ENTRY1*100+1,9,3,0,0,0,100,0,3000,3000,0,0,17,64,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Script - emotestate stun'), +(@ENTRY1*100+1,9,4,0,0,0,100,0,5000,5000,0,0,17,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Script - emotestate none'), +(@ENTRY1*100+1,9,5,0,0,0,100,0,0,0,0,0,90,7,0,0,0,0,0,1,0,0,0,0,0,0,0,'Warlord Jin''Arrak - Script - Set field_byte_1 to 7'), +(@ENTRY1*100+1,9,6,0,0,0,100,0,2000,2000,0,0,11,@CREDIT,0,0,0,0,0,18,20,0,0,0,0,0,0,'OOC - Cast credit - Players in range'), +(@ENTRY1*100+1,9,7,0,0,0,100,0,10000,10000,0,0,41,0,0,0,0,0,0,0,1,0,0,0,0,0,0,'OOC - Cast credit - Players in range'); + + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (-@RAGE,@OTOS); +INSERT INTO `spell_linked_spell` (`spell_trigger`,`spell_effect`,`type`,`comment`) VALUES +(-@RAGE,@OTOS,0,'Cast other side when curse expires'), +(@OTOS,@BODY,1,'Summon body when going to other side'); + + +DELETE FROM `creature_text` WHERE `entry`=@ENTRY1; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY1,0,0,'Finally, a worthy offering!',41,0,0,0,0,0,'Warlord Jinarrak - Say Text'), +(@ENTRY1,1,0,'Ahhh! What be happenin'' to me, mon?',41,0,0,0,0,0,'Warlord Jinarrak - Say Text'), +(@ENTRY1,2,0,'How dare you summon me without an offering!',41,0,0,0,0,0,'Warlord Jinarrak - Say Text'); + +-- Offering Bunny - Drakil'jin Exterior +UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=128 WHERE `entry`=@ENTRY2; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY2; +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 +(@ENTRY2,0,0,1,54,0,100,1,0,0,0,0,12,@ENTRY1,3,180000,0,0,0,8,0,0,0,4678.47,-4859.35,35.48,3.11,'Just summoned - Temp summon Warlord Jinarrak - Position'), +(@ENTRY2,0,1,0,61,0,100,1,0,0,0,0,11,@OFFER,0,0,0,0,0,1,0,0,0,0,0,0,0,'Link - Cast Place Offering - Self'), +(@ENTRY2,0,2,0,1,0,100,1,1000,1000,0,0,45,0,2,0,0,0,0,11,@ENTRY1,50,0,0,0,0,0,'OOC 2 sec later - Set data 0 2 - Warlord Jinarrak'); + +-- Essence of Warlord Jin'arrak +UPDATE `creature_template` SET `AIName`='SmartAI',`flags_extra`=128 WHERE `entry`=@ENTRY3; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY3; +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 +(@ENTRY3,0,0,0,54,0,100,1,0,0,0,0,12,@ENTRY1,3,30000,0,0,0,8,0,0,0,4678.47,-4859.35,35.48,3.11,'Just summoned - Temp summon - Position'), +(@ENTRY3,0,1,0,1,0,100,1,1000,1000,0,0,45,0,1,0,0,0,0,11,@ENTRY1,50,0,0,0,0,0,'OOC 1 sec later - Set data 0 1 - Warlord Jinarrak'); +UPDATE creature_template SET AIName = 'SmartAI' WHERE entry =@ENTRY1; +UPDATE `creature_template` SET `flags_extra`=128 WHERE `entry`=@ENTRY5; +-- Your Corpse +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY4; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY4; +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 +(@ENTRY4,0,0,1,54,0,100,1,0,0,0,0,85,60352,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,'Just summoned - Invoker cast Mirror Image - Invoker'), +(@ENTRY4,0,1,2,61,0,100,1,0,0,0,0,44,3,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,'Link - Set phasemask 3 - Self'), +(@ENTRY4,0,2,0,61,0,100,1,0,0,0,0,11,29266,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,'Link - Cast Permanent Feign Death - Self'); diff --git a/sql/updates/world/2013_08_07_11_world_sai.sql b/sql/updates/world/2013_08_07_11_world_sai.sql new file mode 100644 index 00000000000..c97659b3359 --- /dev/null +++ b/sql/updates/world/2013_08_07_11_world_sai.sql @@ -0,0 +1,28 @@ +SET @Crystal=31131; -- Containment Crystal +SET @Watcher=31110; -- Eidolon Watcher + +-- Update creature_templates and template_addons +UPDATE `creature_template` SET `exp`=2,`minlevel`=80,`maxlevel`=80,`unit_flags`=`unit_flags`|32776 WHERE `entry`=@Watcher; +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|33555200,`AIname`='SmartAI' WHERE `entry`=@Crystal; +DELETE FROM `creature_template_addon` WHERE `entry` IN (@Watcher,@Crystal); +INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@Watcher,0,0,1,0, NULL), +(@Crystal,0,0,1,0, NULL); +-- Delete old condition +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=193058 AND `SourceId`=1; +-- Four quests need gains control of the Eidolon Watcher not only one +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=10028 AND `sourceEntry`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15,10028,0,0,0,9,0,13168,0,0,0,0,0,'','Show Gossip option only if player has quest active'), +(15,10028,0,0,1,9,0,13171,0,0,0,0,0,'','Show Gossip option only if player has quest active'), +(15,10028,0,0,2,9,0,13169,0,0,0,0,0,'','Show Gossip option only if player has quest active'), +(15,10028,0,0,3,9,0,13170,0,0,0,0,0,'','Show Gossip option only if player has quest active'); +-- Conditions for Banish Scourge Crystal spell +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `sourceEntry`=58658; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13,1,58658,0,0,31,0,3,@Crystal,0,0,0,0,'','Banish Scourge Crystal Hits Only Containment Crystal'); +-- Sai for Containment Crystal +DELETE FROM `smart_scripts` WHERE `entryorguid`=31131 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@Crystal,0,0,1,8,0,100,0,58662,0,0,0,33,@Crystal,0,0,0,0,0,7,0,0,0,0,0,0,0,'Containment Crystal - On Spell Hit - Give Quest Credit'), +(@Crystal,0,1,0,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Containment Crystal - Link With Previous Event - Despawn'); diff --git a/sql/updates/world/2013_08_07_12_world_sai.sql b/sql/updates/world/2013_08_07_12_world_sai.sql new file mode 100644 index 00000000000..61c96994eb7 --- /dev/null +++ b/sql/updates/world/2013_08_07_12_world_sai.sql @@ -0,0 +1 @@ +UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid`=2546000 AND `source_type`=9 AND `id`=1; diff --git a/sql/updates/world/2013_08_07_13_world_creature_template.sql b/sql/updates/world/2013_08_07_13_world_creature_template.sql new file mode 100644 index 00000000000..390d43220f1 --- /dev/null +++ b/sql/updates/world/2013_08_07_13_world_creature_template.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `faction_A`=103, `faction_H`=103 WHERE `entry`=21264; -- Seeping Ooze diff --git a/sql/updates/world/2013_08_07_14_world_sai_335.sql b/sql/updates/world/2013_08_07_14_world_sai_335.sql new file mode 100644 index 00000000000..fa7c5e149f9 --- /dev/null +++ b/sql/updates/world/2013_08_07_14_world_sai_335.sql @@ -0,0 +1,13 @@ +UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=5353; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=5353 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(5353, 0, 0, 1,62, 0, 100, 0, 1364, 0, 0, 0, 85, 12578, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Itharius - On Gossip Select - Cast Create Oathstone of Yseras Dragonflight'), +(5353, 0, 1, 0,61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Itharius - Linked with Previous Event - Close Gossip'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=1341; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,1341,1,0,0,2,0,10455,1,1,0,0,'','Itharius show gossip only if player has Chained Essence of Eranikus'), +(15,1341,1,0,0,2,0,10589,1,1,1,0,'','Itharius show gossip only if player Does not have Oathstone of Yseras Dragonflight'), +(15,1341,1,0,0,8,0,3374,0,0,1,0,'','Itharius show gossip only if player has not completed The Essence of Eranikus q3374'), +(15,1341,1,0,0,8,0,3373,0,0,0,0,'','Itharius show gossip only if player has completed The Essence of Eranikus q3373'); diff --git a/sql/updates/world/2013_08_08_00_world_creature_template.sql b/sql/updates/world/2013_08_08_00_world_creature_template.sql new file mode 100644 index 00000000000..63e00e9881e --- /dev/null +++ b/sql/updates/world/2013_08_08_00_world_creature_template.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `AIName`='' WHERE `AIName`='0'; diff --git a/sql/updates/world/2013_08_08_01_world_creature_template.sql b/sql/updates/world/2013_08_08_01_world_creature_template.sql new file mode 100644 index 00000000000..e64befe6269 --- /dev/null +++ b/sql/updates/world/2013_08_08_01_world_creature_template.sql @@ -0,0 +1 @@ +UPDATE `smart_scripts` SET `action_param3`=0 WHERE `entryorguid`=19055 AND `source_type`=0 AND `id`=0; diff --git a/sql/updates/world/2013_08_08_02_world_creature_template.sql b/sql/updates/world/2013_08_08_02_world_creature_template.sql new file mode 100644 index 00000000000..2baeddd0cd1 --- /dev/null +++ b/sql/updates/world/2013_08_08_02_world_creature_template.sql @@ -0,0 +1,2 @@ +UPDATE `creature` SET `MovementType`=0 WHERE `guid`=107239; +UPDATE `creature_template` SET `MovementType`=2 WHERE `entry`=27003; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 04940858062..1a445435d4e 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1422,7 +1422,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u e.GetTargetType() == SMART_TARGET_CREATURE_DISTANCE || e.GetTargetType() == SMART_TARGET_GAMEOBJECT_RANGE || e.GetTargetType() == SMART_TARGET_GAMEOBJECT_GUID || e.GetTargetType() == SMART_TARGET_GAMEOBJECT_DISTANCE || e.GetTargetType() == SMART_TARGET_CLOSEST_CREATURE || e.GetTargetType() == SMART_TARGET_CLOSEST_GAMEOBJECT || - e.GetTargetType() == SMART_TARGET_OWNER_OR_SUMMONER || e.GetTargetType() == SMART_TARGET_ACTION_INVOKER) + e.GetTargetType() == SMART_TARGET_OWNER_OR_SUMMONER || e.GetTargetType() == SMART_TARGET_ACTION_INVOKER || + e.GetTargetType() == SMART_TARGET_CLOSEST_ENEMY) { ObjectList* targets = GetTargets(e, unit); if (!targets) @@ -2485,6 +2486,14 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /* } break; } + case SMART_TARGET_CLOSEST_ENEMY: + { + if (me) + if (Unit* target = me->SelectNearestTarget(e.target.closestAttackable.maxDist)) + l->push_back(target); + + break; + } case SMART_TARGET_POSITION: default: break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 3c6be82c28b..fe78c4fce06 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -300,6 +300,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e) case SMART_TARGET_THREAT_LIST: case SMART_TARGET_CLOSEST_GAMEOBJECT: case SMART_TARGET_CLOSEST_CREATURE: + case SMART_TARGET_CLOSEST_ENEMY: case SMART_TARGET_STORED: break; default: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index d80b4816d4b..ede8101b522 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -993,7 +993,8 @@ enum SMARTAI_TARGETS SMART_TARGET_ACTION_INVOKER_VEHICLE = 22, // Unit's vehicle who caused this Event to occur SMART_TARGET_OWNER_OR_SUMMONER = 23, // Unit's owner or summoner SMART_TARGET_THREAT_LIST = 24, // All units on creature's threat list - SMART_TARGET_END = 25 + SMART_TARGET_CLOSEST_ENEMY = 25, // maxDist + SMART_TARGET_END = 26 }; struct SmartTarget @@ -1077,6 +1078,11 @@ struct SmartTarget struct { + uint32 maxDist; + } closestAttackable; + + struct + { uint32 param1; uint32 param2; uint32 param3; diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 8253516867b..6d12a073824 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -536,6 +536,7 @@ void AddSC_boss_nexusprince_shaffar(); //Auchindoun Mana Tombs void AddSC_boss_pandemonius(); void AddSC_boss_darkweaver_syth(); //Auchindoun Sekketh Halls void AddSC_boss_talon_king_ikiss(); +void AddSC_boss_anzu(); void AddSC_instance_sethekk_halls(); void AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth void AddSC_boss_ambassador_hellmaw(); @@ -1035,6 +1036,7 @@ void AddOutlandScripts() AddSC_boss_pandemonius(); AddSC_boss_darkweaver_syth(); //Auchindoun Sekketh Halls AddSC_boss_talon_king_ikiss(); + AddSC_boss_anzu(); AddSC_instance_sethekk_halls(); AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth AddSC_boss_ambassador_hellmaw(); diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index 225fa79b1fd..d0cec8a4f43 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -15,10 +15,6 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* - * Comment: @todo spawn troll waves - */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "SpellScript.h" @@ -37,10 +33,9 @@ enum Spells SPELL_SUMMON_INVADER_A = 49456, SPELL_SUMMON_INVADER_B = 49457, - //SPELL_SUMMON_INVADER_C = 49458, // can't find any sniffs + SPELL_SUMMON_INVADER_C = 49458, // can't find any sniffs - H_SPELL_CORPSE_EXPLODE = 59807, - H_SPELL_CONSUME = 59803, + SPELL_INVADER_TAUNT = 49405 }; #define SPELL_CONSUME_BUFF_HELPER DUNGEON_MODE<uint32>(SPELL_CONSUME_BUFF, SPELL_CONSUME_BUFF_H) @@ -56,147 +51,164 @@ enum Yells enum Misc { - DATA_CONSUMPTION_JUNCTION = 1 + DATA_CONSUMPTION_JUNCTION = 1, + POINT_LANDING = 1 }; -Position AddSpawnPoint = { -260.493011f, -622.968018f, 26.605301f, 3.036870f }; - -class boss_trollgore : public CreatureScript +enum Events { -public: - boss_trollgore() : CreatureScript("boss_trollgore") { } - - struct boss_trollgoreAI : public ScriptedAI - { - boss_trollgoreAI(Creature* creature) : ScriptedAI(creature), lSummons(me) - { - instance = creature->GetInstanceScript(); - } - - uint32 uiConsumeTimer; - uint32 uiAuraCountTimer; - uint32 uiCrushTimer; - uint32 uiInfectedWoundTimer; - uint32 uiExplodeCorpseTimer; - uint32 uiSpawnTimer; - - bool consumptionJunction; - - SummonList lSummons; - - InstanceScript* instance; - - void Reset() OVERRIDE - { - uiConsumeTimer = 15*IN_MILLISECONDS; - uiAuraCountTimer = 15500; - uiCrushTimer = urand(1*IN_MILLISECONDS, 5*IN_MILLISECONDS); - uiInfectedWoundTimer = urand(10*IN_MILLISECONDS, 60*IN_MILLISECONDS); - uiExplodeCorpseTimer = 3*IN_MILLISECONDS; - uiSpawnTimer = urand(30*IN_MILLISECONDS, 40*IN_MILLISECONDS); - - consumptionJunction = true; - - lSummons.DespawnAll(); - - me->RemoveAura(SPELL_CONSUME_BUFF_HELPER); + EVENT_CONSUME = 1, + EVENT_CRUSH, + EVENT_INFECTED_WOUND, + EVENT_CORPSE_EXPLODE, + EVENT_SPAWN +}; - instance->SetBossState(DATA_TROLLGORE, NOT_STARTED); - } +Position const Landing = { -263.0534f, -660.8658f, 26.50903f, 0.0f }; - void EnterCombat(Unit* /*who*/) OVERRIDE - { - Talk(SAY_AGGRO); - instance->SetBossState(DATA_TROLLGORE, IN_PROGRESS); - } +class boss_trollgore : public CreatureScript +{ + public: + boss_trollgore() : CreatureScript("boss_trollgore") { } - void UpdateAI(uint32 diff) OVERRIDE + struct boss_trollgoreAI : public BossAI { - //Return since we have no target - if (!UpdateVictim()) - return; + boss_trollgoreAI(Creature* creature) : BossAI(creature, DATA_TROLLGORE) { } - if (uiSpawnTimer <= diff) + void Reset() OVERRIDE { - uint32 spawnNumber = urand(2, DUNGEON_MODE(3, 5)); - for (uint8 i = 0; i < spawnNumber; ++i) - DoSummon(RAND(NPC_DRAKKARI_INVADER_A, NPC_DRAKKARI_INVADER_B), AddSpawnPoint, 0, TEMPSUMMON_DEAD_DESPAWN); - uiSpawnTimer = urand(30*IN_MILLISECONDS, 40*IN_MILLISECONDS); - } else uiSpawnTimer -= diff; + _Reset(); + _consumptionJunction = true; + } - if (uiConsumeTimer <= diff) + void EnterCombat(Unit* /*who*/) OVERRIDE { - Talk(SAY_CONSUME); - DoCast(SPELL_CONSUME); - uiConsumeTimer = 15*IN_MILLISECONDS; - } else uiConsumeTimer -= diff; + _EnterCombat(); + Talk(SAY_AGGRO); + + events.ScheduleEvent(EVENT_CONSUME, 15000); + events.ScheduleEvent(EVENT_CRUSH, urand(1000, 5000)); + events.ScheduleEvent(EVENT_INFECTED_WOUND, urand(10000, 60000)); + events.ScheduleEvent(EVENT_CORPSE_EXPLODE, 3000); + events.ScheduleEvent(EVENT_SPAWN, urand(30000, 40000)); + } - if (consumptionJunction) + void UpdateAI(uint32 diff) OVERRIDE { - Aura* ConsumeAura = me->GetAura(SPELL_CONSUME_BUFF_HELPER); - if (ConsumeAura && ConsumeAura->GetStackAmount() > 9) - consumptionJunction = false; + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_CONSUME: + Talk(SAY_CONSUME); + DoCastAOE(SPELL_CONSUME); + events.ScheduleEvent(EVENT_CONSUME, 15000); + break; + case EVENT_CRUSH: + DoCastVictim(SPELL_CRUSH); + events.ScheduleEvent(EVENT_CRUSH, urand(10000, 15000)); + break; + case EVENT_INFECTED_WOUND: + DoCastVictim(SPELL_INFECTED_WOUND); + events.ScheduleEvent(EVENT_INFECTED_WOUND, urand(25000, 35000)); + break; + case EVENT_CORPSE_EXPLODE: + Talk(SAY_EXPLODE); + DoCastAOE(SPELL_CORPSE_EXPLODE); + events.ScheduleEvent(EVENT_CORPSE_EXPLODE, urand(15000, 19000)); + break; + case EVENT_SPAWN: + for (uint8 i = 0; i < 3; ++i) + if (Creature* trigger = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TROLLGORE_INVADER_SUMMONER_1 + i))) + trigger->CastSpell(trigger, RAND(SPELL_SUMMON_INVADER_A, SPELL_SUMMON_INVADER_B, SPELL_SUMMON_INVADER_C), true, NULL, NULL, me->GetGUID()); + + events.ScheduleEvent(EVENT_SPAWN, urand(30000, 40000)); + break; + default: + break; + } + } + + if (_consumptionJunction) + { + Aura* ConsumeAura = me->GetAura(SPELL_CONSUME_BUFF_HELPER); + if (ConsumeAura && ConsumeAura->GetStackAmount() > 9) + _consumptionJunction = false; + } + + DoMeleeAttackIfReady(); } - if (uiCrushTimer <= diff) + void JustDied(Unit* /*killer*/) OVERRIDE { - DoCastVictim(SPELL_CRUSH); - uiCrushTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS); - } else uiCrushTimer -= diff; + _JustDied(); + Talk(SAY_DEATH); + } - if (uiInfectedWoundTimer <= diff) + uint32 GetData(uint32 type) const OVERRIDE { - DoCastVictim(SPELL_INFECTED_WOUND); - uiInfectedWoundTimer = urand(25*IN_MILLISECONDS, 35*IN_MILLISECONDS); - } else uiInfectedWoundTimer -= diff; + if (type == DATA_CONSUMPTION_JUNCTION) + return _consumptionJunction ? 1 : 0; - if (uiExplodeCorpseTimer <= diff) - { - DoCast(SPELL_CORPSE_EXPLODE); - Talk(SAY_EXPLODE); - uiExplodeCorpseTimer = urand(15*IN_MILLISECONDS, 19*IN_MILLISECONDS); - } else uiExplodeCorpseTimer -= diff; + return 0; + } - DoMeleeAttackIfReady(); - } + void KilledUnit(Unit* victim) OVERRIDE + { + if (victim->GetTypeId() != TYPEID_PLAYER) + return; - void JustDied(Unit* /*killer*/) OVERRIDE - { - Talk(SAY_DEATH); + Talk(SAY_KILL); + } - lSummons.DespawnAll(); + void JustSummoned(Creature* summon) OVERRIDE + { + summon->GetMotionMaster()->MovePoint(POINT_LANDING, Landing); + summons.Summon(summon); + } - instance->SetBossState(DATA_TROLLGORE, DONE); - } + private: + bool _consumptionJunction; + }; - uint32 GetData(uint32 type) const OVERRIDE + CreatureAI* GetAI(Creature* creature) const OVERRIDE { - if (type == DATA_CONSUMPTION_JUNCTION) - return consumptionJunction ? 1 : 0; - - return 0; + return GetDrakTharonKeepAI<boss_trollgoreAI>(creature); } +}; + +class npc_drakkari_invader : public CreatureScript +{ + public: + npc_drakkari_invader() : CreatureScript("npc_drakkari_invader") { } - void KilledUnit(Unit* victim) OVERRIDE + struct npc_drakkari_invaderAI : public ScriptedAI { - if (victim->GetTypeId() != TYPEID_PLAYER) - return; + npc_drakkari_invaderAI(Creature* creature) : ScriptedAI(creature) { } - Talk(SAY_KILL); - } + void MovementInform(uint32 type, uint32 pointId) OVERRIDE + { + if (type == POINT_MOTION_TYPE && pointId == POINT_LANDING) + { + me->Dismount(); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + DoCastAOE(SPELL_INVADER_TAUNT); + } + } + }; - void JustSummoned(Creature* summon) OVERRIDE + CreatureAI* GetAI(Creature* creature) const OVERRIDE { - lSummons.Summon(summon); - if (summon->AI()) - summon->AI()->AttackStart(me); + return GetDrakTharonKeepAI<npc_drakkari_invaderAI>(creature); } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return GetDrakTharonKeepAI<boss_trollgoreAI>(creature); - } }; // 49380, 59803 - Consume @@ -335,6 +347,7 @@ class achievement_consumption_junction : public AchievementCriteriaScript void AddSC_boss_trollgore() { new boss_trollgore(); + new npc_drakkari_invader(); new spell_trollgore_consume(); new spell_trollgore_corpse_explode(); new spell_trollgore_invader_taunt(); diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp new file mode 100644 index 00000000000..707f6c34a90 --- /dev/null +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2008-2013 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/>. + */ + +/* +Name: Boss_Anzu +%Complete: 80% +Comment: +Category: Auchindoun, Sethekk Halls +*/ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "sethekk_halls.h" + +enum Says +{ + SAY_SUMMON_BROOD = 0, + SAY_SPELL_BOMB = 1 +}; + +enum Spells +{ + SPELL_PARALYZING_SCREECH = 40184, + SPELL_SPELL_BOMB = 40303, + SPELL_CYCLONE_OF_FEATHERS = 40321, + SPELL_BANISH_SELF = 42354, + SPELL_FLESH_RIP = 40199 +}; + +enum Events +{ + EVENT_PARALYZING_SCREECH = 1, + EVENT_SPELL_BOMB = 2, + EVENT_CYCLONE_OF_FEATHERS = 3, + EVENT_SUMMON = 4 +}; + +Position const PosSummonBrood[7] = +{ + { -118.1717f, 284.5299f, 121.2287f, 2.775074f }, + { -98.15528f, 293.4469f, 109.2385f, 0.174533f }, + { -99.70160f, 270.1699f, 98.27389f, 6.178465f }, + { -69.25543f, 303.0768f, 97.84479f, 5.532694f }, + { -87.59662f, 263.5181f, 92.70478f, 1.658063f }, + { -73.54323f, 276.6267f, 94.25807f, 2.802979f }, + { -81.70527f, 280.8776f, 44.58830f, 0.526849f }, +}; + +class boss_anzu : public CreatureScript +{ +public: + boss_anzu() : CreatureScript("boss_anzu") { } + + struct boss_anzuAI : public BossAI + { + boss_anzuAI(Creature* creature) : BossAI(creature, DATA_ANZU) { } + + void Reset() OVERRIDE + { + summon66 = false; + summon33 = false; + } + + void EnterCombat(Unit* /*who*/) OVERRIDE + { + events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 14000); + events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 5000); + } + + void JustDied(Unit* /*killer*/) OVERRIDE + { + if (instance) + instance->SetData(DATA_ANZU, DONE); + } + + void KilledUnit(Unit* /*victim*/) OVERRIDE {} + + void UpdateAI(uint32 diff) OVERRIDE + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_PARALYZING_SCREECH: + DoCastVictim(SPELL_PARALYZING_SCREECH); + events.ScheduleEvent(EVENT_PARALYZING_SCREECH, 26000); + break; + + case EVENT_CYCLONE_OF_FEATHERS: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_CYCLONE_OF_FEATHERS); + events.ScheduleEvent(EVENT_CYCLONE_OF_FEATHERS, 21000); + break; + case EVENT_SUMMON: + // TODO: Add pathing for Brood of Anzu + me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[0], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000); + me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[1], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000); + me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[2], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000); + me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[3], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000); + me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[4], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000); + me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[5], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000); + me->SummonCreature(NPC_BROOD_OF_ANZU, PosSummonBrood[6], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 46000); + DoCast(me, SPELL_BANISH_SELF); + events.ScheduleEvent(EVENT_SPELL_BOMB, 12000); + break; + case EVENT_SPELL_BOMB: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + { + if (target->getPowerType() == POWER_MANA) + { + DoCast(target, SPELL_SPELL_BOMB); + Talk(SAY_SPELL_BOMB, target->GetGUID()); + } + } + break; + default: + break; + } + } + + if (HealthBelowPct(66) && !summon66) + { + summon66 = true; + Talk(SAY_SUMMON_BROOD); + events.ScheduleEvent(EVENT_SUMMON, 3000); + } + + if (HealthBelowPct(33) && !summon33) + { + summon33 = true; + Talk(SAY_SUMMON_BROOD); + events.ScheduleEvent(EVENT_SUMMON, 3000); + } + + DoMeleeAttackIfReady(); + } + + private: + bool summon66; + bool summon33; + + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new boss_anzuAI(creature); + } +}; + +void AddSC_boss_anzu() +{ + new boss_anzu(); +} diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp index 7a486876b3f..782db325496 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp @@ -25,14 +25,18 @@ EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "sethekk_halls.h" -enum DarkweaverSyth +enum Says { SAY_SUMMON = 0, SAY_AGGRO = 1, SAY_SLAY = 2, - SAY_DEATH = 3, + SAY_DEATH = 3 +}; +enum Spells +{ SPELL_FROST_SHOCK = 21401, //37865 SPELL_FLAME_SHOCK = 34354, SPELL_SHADOW_SHOCK = 30138, @@ -51,40 +55,26 @@ enum DarkweaverSyth SPELL_SHADOW_BUFFET = 33529 }; +enum Events +{ + EVENT_FLAME_SHOCK = 1, + EVENT_ARCANE_SHOCK = 2, + EVENT_FROST_SHOCK = 3, + EVENT_SHADOW_SHOCK = 4, + EVENT_CHAIN_LIGHTNING = 5 +}; + class boss_darkweaver_syth : public CreatureScript { public: boss_darkweaver_syth() : CreatureScript("boss_darkweaver_syth") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_darkweaver_sythAI(creature); - } - - struct boss_darkweaver_sythAI : public ScriptedAI + struct boss_darkweaver_sythAI : public BossAI { - boss_darkweaver_sythAI(Creature* creature) : ScriptedAI(creature) - { - } - - uint32 flameshock_timer; - uint32 arcaneshock_timer; - uint32 frostshock_timer; - uint32 shadowshock_timer; - uint32 chainlightning_timer; - - bool summon90; - bool summon50; - bool summon10; + boss_darkweaver_sythAI(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH) { } void Reset() OVERRIDE { - flameshock_timer = 2000; - arcaneshock_timer = 4000; - frostshock_timer = 6000; - shadowshock_timer = 8000; - chainlightning_timer = 15000; - summon90 = false; summon50 = false; summon10 = false; @@ -92,12 +82,21 @@ public: void EnterCombat(Unit* /*who*/) OVERRIDE { + events.ScheduleEvent(EVENT_FLAME_SHOCK, 2000); + events.ScheduleEvent(EVENT_ARCANE_SHOCK, 4000); + events.ScheduleEvent(EVENT_FROST_SHOCK, 6000); + events.ScheduleEvent(EVENT_SHADOW_SHOCK, 8000); + events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 15000); + Talk(SAY_AGGRO); } void JustDied(Unit* /*killer*/) OVERRIDE { Talk(SAY_DEATH); + + if (instance) + instance->SetData(DATA_DARKWEAVER_SYTH, DONE); } void KilledUnit(Unit* /*victim*/) OVERRIDE @@ -132,6 +131,42 @@ public: if (!UpdateVictim()) return; + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_FLAME_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_FLAME_SHOCK); + events.ScheduleEvent(EVENT_FLAME_SHOCK, urand(10000, 15000)); + break; + case EVENT_ARCANE_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_ARCANE_SHOCK); + events.ScheduleEvent(EVENT_ARCANE_SHOCK, urand(10000, 15000)); + break; + case EVENT_FROST_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_FROST_SHOCK); + events.ScheduleEvent(EVENT_FROST_SHOCK, urand(10000, 15000)); + break; + case EVENT_SHADOW_SHOCK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_SHADOW_SHOCK); + events.ScheduleEvent(EVENT_SHADOW_SHOCK, urand(10000, 15000)); + break; + case EVENT_CHAIN_LIGHTNING: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_CHAIN_LIGHTNING); + events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 25000); + break; + default: + break; + } + } + if (HealthBelowPct(90) && !summon90) { SythSummoning(); @@ -150,50 +185,19 @@ public: summon10 = true; } - if (flameshock_timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_FLAME_SHOCK); - - flameshock_timer = urand(10000, 15000); - } else flameshock_timer -= diff; - - if (arcaneshock_timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_ARCANE_SHOCK); - - arcaneshock_timer = urand(10000, 15000); - } else arcaneshock_timer -= diff; - - if (frostshock_timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_FROST_SHOCK); - - frostshock_timer = urand(10000, 15000); - } else frostshock_timer -= diff; - - if (shadowshock_timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_SHADOW_SHOCK); - - shadowshock_timer = urand(10000, 15000); - } else shadowshock_timer -= diff; - - if (chainlightning_timer <= diff) - { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_CHAIN_LIGHTNING); - - chainlightning_timer = 25000; - } else chainlightning_timer -= diff; - DoMeleeAttackIfReady(); } + + private: + bool summon90; + bool summon50; + bool summon10; }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new boss_darkweaver_sythAI(creature); + } }; /* ELEMENTALS */ diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp index 4123da48ba6..9d3aa623011 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp @@ -27,14 +27,17 @@ EndScriptData */ #include "ScriptedCreature.h" #include "sethekk_halls.h" -enum TailonkingIkiss +enum Says { SAY_INTRO = 0, SAY_AGGRO = 1, SAY_SLAY = 2, SAY_DEATH = 3, - EMOTE_ARCANE_EXP = 4, + EMOTE_ARCANE_EXP = 4 +}; +enum Spells +{ SPELL_BLINK = 38194, SPELL_BLINK_TELEPORT = 38203, SPELL_MANA_SHIELD = 38151, @@ -53,28 +56,9 @@ class boss_talon_king_ikiss : public CreatureScript public: boss_talon_king_ikiss() : CreatureScript("boss_talon_king_ikiss") { } - CreatureAI* GetAI(Creature* creature) const OVERRIDE + struct boss_talon_king_ikissAI : public BossAI { - return new boss_talon_king_ikissAI(creature); - } - - struct boss_talon_king_ikissAI : public ScriptedAI - { - boss_talon_king_ikissAI(Creature* creature) : ScriptedAI(creature) - { - instance = creature->GetInstanceScript(); - } - - InstanceScript* instance; - - uint32 ArcaneVolley_Timer; - uint32 Sheep_Timer; - uint32 Blink_Timer; - uint32 Slow_Timer; - - bool ManaShield; - bool Blink; - bool Intro; + boss_talon_king_ikissAI(Creature* creature) : BossAI(creature, DATA_TALON_KING_IKISS) { } void Reset() OVERRIDE { @@ -120,7 +104,7 @@ public: Talk(SAY_DEATH); if (instance) - instance->SetData(DATA_IKISSDOOREVENT, DONE); + instance->SetData(DATA_TALON_KING_IKISS, DONE); } void KilledUnit(Unit* /*victim*/) OVERRIDE @@ -204,8 +188,22 @@ public: if (!Blink) DoMeleeAttackIfReady(); } + + private: + uint32 ArcaneVolley_Timer; + uint32 Sheep_Timer; + uint32 Blink_Timer; + uint32 Slow_Timer; + + bool ManaShield; + bool Blink; + bool Intro; }; + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return new boss_talon_king_ikissAI(creature); + } }; void AddSC_boss_talon_king_ikiss() diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp index d44789f4c39..67f4dc1423a 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp @@ -27,16 +27,6 @@ EndScriptData */ #include "InstanceScript.h" #include "sethekk_halls.h" -enum Creatures -{ - NPC_ANZU = 23035 -}; - -enum GameObjects -{ - GO_IKISS_DOOR = 177203 -}; - class instance_sethekk_halls : public InstanceMapScript { public: @@ -49,49 +39,102 @@ public: struct instance_sethekk_halls_InstanceMapScript : public InstanceScript { - instance_sethekk_halls_InstanceMapScript(Map* map) : InstanceScript(map) {} - - uint32 AnzuEncounter; - uint64 m_uiIkissDoorGUID; + instance_sethekk_halls_InstanceMapScript(Map* map) : InstanceScript(map) + { + SetBossNumber(EncounterCount); + } void Initialize() { - AnzuEncounter = NOT_STARTED; - m_uiIkissDoorGUID = 0; + SetBossState(DATA_ANZU, NOT_STARTED); + iIkissDoorGUID = 0; } void OnCreatureCreate(Creature* creature) { if (creature->GetEntry() == NPC_ANZU) { - if (AnzuEncounter >= IN_PROGRESS) + if (GetBossState(DATA_ANZU) == DONE) creature->DisappearAndDie(); else - AnzuEncounter = IN_PROGRESS; + SetBossState(DATA_ANZU, IN_PROGRESS); } } void OnGameObjectCreate(GameObject* go) { if (go->GetEntry() == GO_IKISS_DOOR) - m_uiIkissDoorGUID = go->GetGUID(); + iIkissDoorGUID = go->GetGUID(); } - void SetData(uint32 type, uint32 data) OVERRIDE + bool SetBossState(uint32 type, EncounterState state) { + if (!InstanceScript::SetBossState(type, state)) + return false; + switch (type) { - case DATA_IKISSDOOREVENT: - if (data == DONE) - DoUseDoorOrButton(m_uiIkissDoorGUID, DAY*IN_MILLISECONDS); + case DATA_DARKWEAVER_SYTH: + break; + case DATA_TALON_KING_IKISS: + if (state == DONE) + DoUseDoorOrButton(iIkissDoorGUID, DAY*IN_MILLISECONDS); + break; + case DATA_ANZU: break; - case TYPE_ANZU_ENCOUNTER: - AnzuEncounter = data; + default: break; } + + return true; } - }; + std::string GetSaveData() + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << "S H " << GetBossSaveData(); + + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } + + void Load(const char* str) + { + if (!str) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } + + OUT_LOAD_INST_DATA(str); + + char dataHead1, dataHead2; + + std::istringstream loadStream(str); + loadStream >> dataHead1 >> dataHead2; + + if (dataHead1 == 'S' && dataHead2 == 'H') + { + for (uint32 i = 0; i < EncounterCount; ++i) + { + uint32 tmpState; + loadStream >> tmpState; + if (tmpState == IN_PROGRESS || tmpState > SPECIAL) + tmpState = NOT_STARTED; + SetBossState(i, EncounterState(tmpState)); + } + } + else + OUT_LOAD_INST_DATA_FAIL; + + OUT_LOAD_INST_DATA_COMPLETE; + } + + protected: + uint64 iIkissDoorGUID; + }; }; void AddSC_instance_sethekk_halls() diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h index 15ffda4ada9..86789e9982f 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> * * 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 @@ -19,10 +18,24 @@ #ifndef DEF_SETHEKK_HALLS_H #define DEF_SETHEKK_HALLS_H +uint32 const EncounterCount = 3; + enum DataTypes { - DATA_IKISSDOOREVENT = 1, - TYPE_ANZU_ENCOUNTER = 2, + DATA_DARKWEAVER_SYTH = 0, + DATA_TALON_KING_IKISS = 1, + DATA_ANZU = 2 +}; + +enum CreatureIds +{ + NPC_ANZU = 23035, + NPC_BROOD_OF_ANZU = 23132 }; -#endif +enum GameObjectIds +{ + GO_IKISS_DOOR = 177203 +}; + +#endif diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt index f038af07634..d7b863da0db 100644 --- a/src/server/scripts/Outland/CMakeLists.txt +++ b/src/server/scripts/Outland/CMakeLists.txt @@ -76,6 +76,7 @@ set(scripts_STAT_SRCS Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp Outland/Auchindoun/SethekkHalls/boss_tailonking_ikiss.cpp Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp + Outland/Auchindoun/SethekkHalls/boss_anzu.cpp Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp Outland/Auchindoun/SethekkHalls/sethekk_halls.h Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp |
