diff options
author | Supabad <supabad.trinity@gmail.com> | 2011-05-09 21:39:22 +0200 |
---|---|---|
committer | Supabad <supabad.trinity@gmail.com> | 2011-05-09 21:39:22 +0200 |
commit | 63e04e9ef81cbc2f1176aebf86a69e3c3defcb96 (patch) | |
tree | b7d7d7132be3617104b67f98407b71837d63814a | |
parent | f7372e767e8503dfc344ec1a8c9ae56707447c0e (diff) |
Scripts/Ulduar: Add proper support for Razorscale summon event.
DB/SQL: Remove duplicate script from world database
-rw-r--r-- | sql/updates/world/2011_05_09_01_world_creature_template.sql | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp | 97 |
2 files changed, 55 insertions, 44 deletions
diff --git a/sql/updates/world/2011_05_09_01_world_creature_template.sql b/sql/updates/world/2011_05_09_01_world_creature_template.sql new file mode 100644 index 00000000000..38c32517c29 --- /dev/null +++ b/sql/updates/world/2011_05_09_01_world_creature_template.sql @@ -0,0 +1,2 @@ +UPDATE `creature_template` SET `flags_extra`=128 WHERE `entry` IN (33245,34188); +UPDATE `creature_template` SET `ScriptName`= '' WHERE `entry`=33282; diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp index 8b3f700c67d..1687fd6bee1 100644 --- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_razorscale.cpp @@ -55,6 +55,12 @@ enum Spells SPELL_HARPOON_SHOT_2 = 63657, SPELL_HARPOON_SHOT_3 = 63659, SPELL_HARPOON_SHOT_4 = 63524, + // MoleMachine Spells + SPELL_SUMMON_MOLE_MACHINE = 62899, + SPELL_SUMMON_IRON_DWARVES = 63116, + SPELL_SUMMON_IRON_DWARVES_2 = 63114, + SPELL_SUMMON_IRON_DWARVE_GUARDIAN = 62926, + SPELL_SUMMON_IRON_DWARVE_WATCHER = 63135, }; enum NPC @@ -541,7 +547,7 @@ class boss_razorscale : public CreatureScript float x = float(irand(540, 640)); // Safe range is between 500 and 650 float y = float(irand(-230, -195)); // Safe range is between -235 and -145 float z = GROUND_Z; // Ground level - me->SummonCreature(MOLE_MACHINE_TRIGGER, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN, 10000); + me->SummonCreature(MOLE_MACHINE_TRIGGER, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN, 15000); } } @@ -726,45 +732,64 @@ class npc_mole_machine_trigger : public CreatureScript { npc_mole_machine_triggerAI(Creature* creature) : Scripted_NoMovementAI(creature) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); - me->SetVisible(false); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED); } - uint32 SummonTimer; + uint32 SummonGobTimer; + uint32 SummonNpcTimer; + uint32 DissapearTimer; + bool GobSummoned; + bool NpcSummoned; void Reset() { - if (GameObject* MoleMachine = me->SummonGameObject(GO_MOLE_MACHINE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), float(urand(0, 6)), 0, 0, 0, 0, 300)) - MoleMachine->SetGoState(GO_STATE_ACTIVE); - SummonTimer = 6000; + SummonGobTimer = 2000; + SummonNpcTimer = 6000; + DissapearTimer = 10000; + GobSummoned = false; + NpcSummoned = false; } void UpdateAI(uint32 const Diff) { - if (!UpdateVictim()) - return; - - if (SummonTimer <= Diff) + if (!GobSummoned && SummonGobTimer <= Diff) { - float x = me->GetPositionX(); - float y = me->GetPositionY(); - float z = me->GetPositionZ(); + DoCast(SPELL_SUMMON_MOLE_MACHINE); + if (GameObject* molemachine = me->FindNearestGameObject(GO_MOLE_MACHINE, 1)) + molemachine->SetGoState(GO_STATE_ACTIVE); + GobSummoned = true; + } + else + SummonGobTimer -= Diff; - // One mole can spawn a Dark Rune Watcher with 1-2 Guardians, or a lone Sentinel - uint8 id = urand(0, 1); - if (id) + if (!NpcSummoned && SummonNpcTimer <= Diff) + { + switch (urand(0, 1 )) { - me->SummonCreature(NPC_DARK_RUNE_WATCHER, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000); - for (uint8 n = 0; n < urand(1, 2); n++) - me->SummonCreature(NPC_DARK_RUNE_GUARDIAN, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000); + case 0: + DoCast(SPELL_SUMMON_IRON_DWARVES); + break; + case 1: + DoCast(SPELL_SUMMON_IRON_DWARVES_2); + break; } - else - me->SummonCreature(NPC_DARK_RUNE_SENTINEL, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000); - SummonTimer = 15000; + DoCast(SPELL_SUMMON_IRON_DWARVE_GUARDIAN); + DoCast(SPELL_SUMMON_IRON_DWARVE_WATCHER); + NpcSummoned = true; } else - SummonTimer -= Diff; + SummonNpcTimer -= Diff; + + if (DissapearTimer <= Diff) + { + if (GameObject* molemachine = me->FindNearestGameObject(GO_MOLE_MACHINE, 1)) + molemachine->Delete(); + + me->DisappearAndDie(); + } + else + DissapearTimer -= Diff; } void JustSummoned(Creature* summoned) @@ -788,8 +813,7 @@ class npc_devouring_flame : public CreatureScript { npc_devouring_flameAI(Creature* creature) : Scripted_NoMovementAI(creature) { - me->SetDisplayId(me->GetCreatureInfo()->Modelid2); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED); } void Reset() @@ -811,12 +835,7 @@ class npc_darkrune_watcher : public CreatureScript struct npc_darkrune_watcherAI : public ScriptedAI { - npc_darkrune_watcherAI(Creature* creature) : ScriptedAI(creature) - { - instance = me->GetInstanceScript(); - } - - InstanceScript* instance; + npc_darkrune_watcherAI(Creature* creature) : ScriptedAI(creature){} uint32 ChainTimer; uint32 LightTimer; @@ -865,12 +884,7 @@ class npc_darkrune_guardian : public CreatureScript struct npc_darkrune_guardianAI : public ScriptedAI { - npc_darkrune_guardianAI(Creature* creature) : ScriptedAI(creature) - { - instance = me->GetInstanceScript(); - } - - InstanceScript* instance; + npc_darkrune_guardianAI(Creature* creature) : ScriptedAI(creature){} uint32 StormTimer; @@ -909,12 +923,7 @@ class npc_darkrune_sentinel : public CreatureScript struct npc_darkrune_sentinelAI : public ScriptedAI { - npc_darkrune_sentinelAI(Creature* creature) : ScriptedAI(creature) - { - instance = me->GetInstanceScript(); - } - - InstanceScript* instance; + npc_darkrune_sentinelAI(Creature* creature) : ScriptedAI(creature){} uint32 HeroicTimer; uint32 WhirlTimer; |