diff options
author | slg <none@none> | 2008-11-13 17:12:54 -0600 |
---|---|---|
committer | slg <none@none> | 2008-11-13 17:12:54 -0600 |
commit | 2c3130d415e1eed2cdd193424594fe560c6afa61 (patch) | |
tree | 18340310b97d6b60dec1965763e6388dbcd9b98d /src | |
parent | 55d58ea878c32215ba11aeb30a2993f2768353f3 (diff) |
[svn] * Merged SD2 Rev. 706 & 707
- Added: Pathaleon the Calculator script. Also added a Mechanar Instance script.
- Added: Fixed and improved version of High King Maulgar. (Timers, Spells, Adds...)
- Fixed: Nethermancer Sepethrea encounter. Spawning Adds, timers, spells...
- Fixed: Lot of timers and spells like for: Doomlord Kazzak, Doomwalker, Gruul, and more.
* Fixed 147_world.sql
--HG--
branch : trunk
Diffstat (limited to 'src')
21 files changed, 929 insertions, 373 deletions
diff --git a/src/bindings/scripts/Makefile.am b/src/bindings/scripts/Makefile.am index c09eed02d66..19b28005497 100644 --- a/src/bindings/scripts/Makefile.am +++ b/src/bindings/scripts/Makefile.am @@ -348,6 +348,9 @@ scripts/zone/tempest_keep/the_eye/the_eye.cpp \ scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_gyrokill.cpp \ scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp \ scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp \ +scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp \ +scripts/zone/tempest_keep/the_mechanar/def_mechanar.h \ +scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp \ scripts/zone/temple_of_ahnqiraj/boss_bug_trio.cpp \ scripts/zone/temple_of_ahnqiraj/boss_cthun.cpp \ scripts/zone/temple_of_ahnqiraj/boss_fankriss.cpp \ diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp index 3b553af3ee6..840cdc4be60 100644 --- a/src/bindings/scripts/ScriptMgr.cpp +++ b/src/bindings/scripts/ScriptMgr.cpp @@ -513,6 +513,8 @@ extern void AddSC_the_eye(); //--The Mechanar extern void AddSC_boss_gatewatcher_iron_hand(); extern void AddSC_boss_nethermancer_sepethrea(); +extern void AddSC_boss_pathaleon_the_calculator(); +extern void AddSC_instance_mechanar(); //Temple of ahn'qiraj extern void AddSC_boss_cthun(); @@ -1696,6 +1698,8 @@ void ScriptsInit() //--The Mechanar AddSC_boss_gatewatcher_iron_hand(); AddSC_boss_nethermancer_sepethrea(); + AddSC_boss_pathaleon_the_calculator(); + AddSC_instance_mechanar(); //Temple of ahn'qiraj AddSC_boss_cthun(); diff --git a/src/bindings/scripts/VC71/71ScriptDev2.vcproj b/src/bindings/scripts/VC71/71ScriptDev2.vcproj index 8608945014e..f0f7131b1f6 100644 --- a/src/bindings/scripts/VC71/71ScriptDev2.vcproj +++ b/src/bindings/scripts/VC71/71ScriptDev2.vcproj @@ -1568,6 +1568,18 @@ RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_nethermancer_sepethrea.cpp" > </File> + <File + RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_pathaleon_the_calculator.cpp" + > + </File> + <File + RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp" + > + </File> + <File + RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h" + > + </File> </Filter> </Filter> <Filter diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index dfd8dd44e7b..fdb376e833f 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -1813,6 +1813,18 @@ RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_nethermancer_sepethrea.cpp" > </File> + <File + RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_pathaleon_the_calculator.cpp" + > + </File> + <File + RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp" + > + </File> + <File + RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h" + > + </File> </Filter> </Filter> <Filter diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index 80e5cb2481f..b4f467d0470 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -1799,6 +1799,18 @@ RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_nethermancer_sepethrea.cpp" > </File> + <File + RelativePath="..\scripts\zone\tempest_keep\the_mechanar\boss_pathaleon_the_calculator.cpp" + > + </File> + <File + RelativePath="..\scripts\zone\tempest_keep\the_mechanar\instance_mechanar.cpp" + > + </File> + <File + RelativePath="..\scripts\zone\tempest_keep\the_mechanar\def_mechanar.h" + > + </File> </Filter> </Filter> <Filter diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp index 039e888fac9..a886a0d4902 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/auchenai_crypts/boss_exarch_maladaar.cpp @@ -162,9 +162,9 @@ struct TRINITY_DLL_DECL boss_exarch_maladaarAI : public ScriptedAI soulholder = 0; soulclass = 0; - Fear_timer = 20000; + Fear_timer = 15000 + rand()% 5000; Ribbon_of_Souls_timer = 5000; - StolenSoul_Timer = 30000; + StolenSoul_Timer = 25000 + rand()% 10000; HasTaunted = false; Avatar_summoned = false; @@ -250,7 +250,7 @@ struct TRINITY_DLL_DECL boss_exarch_maladaarAI : public ScriptedAI DoCast(m_creature, SPELL_SUMMON_AVATAR); Avatar_summoned = true; - StolenSoul_Timer = 45000; + StolenSoul_Timer = 15000 + rand()% 15000; } if (StolenSoul_Timer < diff) @@ -275,7 +275,7 @@ struct TRINITY_DLL_DECL boss_exarch_maladaarAI : public ScriptedAI DoCast(target,SPELL_STOLEN_SOUL); DoSpawnCreature(ENTRY_STOLEN_SOUL,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); - StolenSoul_Timer = 45000; + StolenSoul_Timer = 20000 + rand()% 10000; } else StolenSoul_Timer = 1000; } }else StolenSoul_Timer -= diff; @@ -291,7 +291,7 @@ struct TRINITY_DLL_DECL boss_exarch_maladaarAI : public ScriptedAI if (Fear_timer < diff) { DoCast(m_creature,SPELL_SOUL_SCREAM); - Fear_timer = 25000 + rand()% 10000; + Fear_timer = 15000 + rand()% 15000; }else Fear_timer -= diff; DoMeleeAttackIfReady(); diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp index 3caf80680b8..f51a28d61b3 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp @@ -59,7 +59,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI void Reset() { - LightningCloud_Timer = 28000; + LightningCloud_Timer = 15000; LungBurst_Timer = 7000; EnvelopingWinds_Timer = 9000; @@ -111,7 +111,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI if (HeroicMode) if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) DoCast(target, SPELL_LIGHTNING_CLOUD); - LightningCloud_Timer = 28000; + LightningCloud_Timer = 15000+rand()%10000; }else LightningCloud_Timer -=diff; //LungBurst_Timer @@ -119,7 +119,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI { if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) DoCast(target, SPELL_LUNG_BURST); - LungBurst_Timer = 10000+rand()%5000; + LungBurst_Timer = 7000+rand()%5000; }else LungBurst_Timer -=diff; //EnvelopingWinds_Timer @@ -164,7 +164,7 @@ struct TRINITY_DLL_DECL mob_coilfang_waterelementalAI : public ScriptedAI if (WaterBoltVolley_Timer < diff) { DoCast(m_creature, HeroicMode ? H_SPELL_WATER_BOLT_VOLLEY : SPELL_WATER_BOLT_VOLLEY); - WaterBoltVolley_Timer = 10000+rand()%5000; + WaterBoltVolley_Timer = 7000+rand()%5000; }else WaterBoltVolley_Timer -= diff; DoMeleeAttackIfReady(); diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp index e5b31c75456..85c6657bebb 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp @@ -105,7 +105,7 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI void Reset() { Reflection_Timer = 10000; - Impale_Timer = 30000; + Impale_Timer = 7000+rand()%7000; Rage_Timer = 45000; CanRage = false; @@ -186,14 +186,14 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI DoCast(m_creature,SPELL_WARLORDS_RAGE); ((mob_naga_distillerAI*)distiller->AI())->StartRageGen(m_creature); } - Rage_Timer = 45000; + Rage_Timer = 3000+rand()%15000; }else Rage_Timer -= diff; //Reflection_Timer if (Reflection_Timer < diff) { DoCast(m_creature, SPELL_SPELL_REFLECTION); - Reflection_Timer = 20000+rand()%5000; + Reflection_Timer = 15000+rand()%10000; }else Reflection_Timer -= diff; //Impale_Timer diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/underbog/boss_ghazan.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/underbog/boss_ghazan.cpp index 38be763ee90..b6da72e84dc 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/underbog/boss_ghazan.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/underbog/boss_ghazan.cpp @@ -22,6 +22,7 @@ SDCategory: Coilfang Resevoir, Underbog EndScriptData */ #include "../../../creature/simple_ai.h" +#include "precompiled.h" /* --== Ghaz'an ==-- diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp index 3f49a53cb73..bc5799ffe7e 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp @@ -41,10 +41,10 @@ EndContentData */ #define SPELL_CORRUPTION 30938 -#define SPELL_FIRE_NOVA 33775 +#define SPELL_FIRE_NOVA 33132 #define H_SPELL_FIRE_NOVA 37371 -#define SPELL_SHADOW_BOLT_VOLLEY 17228 +#define SPELL_SHADOW_BOLT_VOLLEY 28599 #define H_SPELL_SHADOW_BOLT_VOLLEY 40070 #define SPELL_BURNING_NOVA 30940 diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp index c1e6057104e..ec85747032d 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp @@ -46,10 +46,10 @@ struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI void Reset() { - AcidSpray_Timer = 10000; - ExplodingBreaker_Timer = 4000; + AcidSpray_Timer = 15000; + ExplodingBreaker_Timer = 6000; Domination_Timer = 120000; - Knockdown_Timer = 6000; + Knockdown_Timer = 10000; } void Aggro(Unit *who) @@ -84,7 +84,7 @@ struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI if (AcidSpray_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_ACID_SPRAY); - AcidSpray_Timer = 16000+rand()%8000; + AcidSpray_Timer = 15000+rand()%8000; }else AcidSpray_Timer -=diff; if (ExplodingBreaker_Timer < diff) diff --git a/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp b/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp index 3352713462a..7774f65411d 100644 --- a/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp +++ b/src/bindings/scripts/scripts/zone/onyxias_lair/boss_onyxia.cpp @@ -92,11 +92,15 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI SummonWhelpsTimer = 45000; BellowingRoarTimer = 30000; WingBuffetTimer = 17000; + + m_creature->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true); + m_creature->ApplySpellImmune(1, IMMUNITY_EFFECT,SPELL_EFFECT_ATTACK_ME, true); } void Aggro(Unit* who) { DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL); + DoZoneInCombat(); } void KilledUnit(Unit *victim) @@ -147,7 +151,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI if(CleaveTimer < diff) { DoCast(m_creature->getVictim(), SPELL_CLEAVE); - CleaveTimer = 10000; + CleaveTimer = 7000; }else CleaveTimer -= diff; if(WingBuffetTimer < diff) @@ -186,7 +190,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI if(EngulfingFlamesTimer < diff) { DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_ENGULFINGFLAMES); - EngulfingFlamesTimer = 10000; + EngulfingFlamesTimer = 8000; }else EngulfingFlamesTimer -= diff; if(SummonWhelpsTimer < diff) @@ -199,7 +203,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI if(Whelp) Whelp->AI()->AttackStart(SelectUnit(SELECT_TARGET_RANDOM, 0)); } - SummonWhelpsTimer = 45000; + SummonWhelpsTimer = 30000; }else SummonWhelpsTimer -= diff; } diff --git a/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp b/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp index e25f274c66a..dfae0432d12 100644 --- a/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp +++ b/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp @@ -1,23 +1,23 @@ /* Copyright (C) 2006 - 2008 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 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 - */ +* 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 +*/ /* ScriptData SDName: Boss_jandicebarov SD%Complete: 100 -SDComment: +SDComment: SDCategory: Scholomance EndScriptData */ @@ -60,15 +60,15 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI Rand = rand()%10; switch (rand()%2) { - case 0: RandX = 0 - Rand; break; - case 1: RandX = 0 + Rand; break; + case 0: RandX = 0 - Rand; break; + case 1: RandX = 0 + Rand; break; } Rand = 0; Rand = rand()%10; switch (rand()%2) { - case 0: RandY = 0 - Rand; break; - case 1: RandY = 0 + Rand; break; + case 0: RandY = 0 - Rand; break; + case 1: RandY = 0 + Rand; break; } Rand = 0; Summoned = DoSpawnCreature(11439, RandX, RandY, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); @@ -80,11 +80,10 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI { if (Invisible && Invisible_Timer < diff) { - //Become visible again + //Become visible again m_creature->setFaction(14); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - //Jandice Model - m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11073); + m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11073); //Jandice Model Invisible = false; } else if (Invisible) { @@ -100,19 +99,23 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI //CurseOfBlood_Timer if (CurseOfBlood_Timer < diff) { + //Cast DoCast(m_creature->getVictim(),SPELL_CURSEOFBLOOD); + + //45 seconds CurseOfBlood_Timer = 30000; }else CurseOfBlood_Timer -= diff; //Illusion_Timer if (!Invisible && Illusion_Timer < diff) { + //Inturrupt any spell casting m_creature->InterruptNonMeleeSpells(false); m_creature->setFaction(35); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - // Invisible Model - m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686); + m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686); // Invisible Model + m_creature->getThreatManager().modifyThreatPercent(m_creature->getVictim(),-99); //Summon 10 Illusions attacking random gamers Unit* target = NULL; @@ -124,15 +127,17 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI Invisible = true; Invisible_Timer = 3000; + //25 seconds until we should cast this agian Illusion_Timer = 25000; }else Illusion_Timer -= diff; + // //Illusion_Timer // if (Illusion_Timer < diff) // { // //Cast // DoCast(m_creature->getVictim(),SPELL_ILLUSION); - // + // // //3 Illusion will be summoned // if (Illusioncounter < 3) // { @@ -140,10 +145,11 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI // Illusioncounter++; // } // else { + // //15 seconds until we should cast this again // Illusion_Timer = 15000; // Illusioncounter=0; // } - // + // // }else Illusion_Timer -= diff; DoMeleeAttackIfReady(); @@ -160,7 +166,8 @@ struct TRINITY_DLL_DECL mob_illusionofjandicebarovAI : public ScriptedAI void Reset() { - Cleave_Timer = 4000; + Cleave_Timer = 2000 + rand()%6000; + m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); } void Aggro(Unit *who) @@ -169,19 +176,24 @@ struct TRINITY_DLL_DECL mob_illusionofjandicebarovAI : public ScriptedAI void UpdateAI(const uint32 diff) { + //Return since we have no target if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) return; //Cleave_Timer if (Cleave_Timer < diff) { + //Cast DoCast(m_creature->getVictim(),SPELL_CLEAVE); + + //5-8 seconds Cleave_Timer = 5000 + rand()%3000; }else Cleave_Timer -= diff; DoMeleeAttackIfReady(); } -}; +}; + CreatureAI* GetAI_boss_jandicebarov(Creature *_Creature) { @@ -193,6 +205,7 @@ CreatureAI* GetAI_mob_illusionofjandicebarov(Creature *_Creature) return new mob_illusionofjandicebarovAI (_Creature); } + void AddSC_boss_jandicebarov() { Script *newscript; diff --git a/src/bindings/scripts/scripts/zone/shadowmoon_valley/boss_doomwalker.cpp b/src/bindings/scripts/scripts/zone/shadowmoon_valley/boss_doomwalker.cpp index c425964dea5..89536b15ac2 100644 --- a/src/bindings/scripts/scripts/zone/shadowmoon_valley/boss_doomwalker.cpp +++ b/src/bindings/scripts/scripts/zone/shadowmoon_valley/boss_doomwalker.cpp @@ -1,23 +1,23 @@ /* Copyright (C) 2006 - 2008 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 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 - */ +* 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 +*/ /* ScriptData SDName: Boss_Doomwalker SD%Complete: 100 -SDComment: +SDComment: SDCategory: Shadowmoon Valley EndScriptData */ @@ -25,7 +25,7 @@ EndScriptData */ //-------------------------------------- //Spells -#define SPELL_SUNDER_ARMOR 30901 +#define SPELL_SUNDER_ARMOR 33661 #define SPELL_CHAIN_LIGHTNING 33665 @@ -35,7 +35,7 @@ EndScriptData */ #define SAY_OVERRUN_2 "Engage maximum speed." #define SOUND_OVERRUN_2 11348 -#define SPELL_ENRAGE 34624 +#define SPELL_ENRAGE 33653 #define SPELL_MARK_DEATH 37128 @@ -44,17 +44,20 @@ EndScriptData */ #define SOUND_EARTHQUAKE_1 11345 #define SAY_EARTHQUAKE_2 "Magnitude set. Release." #define SOUND_EARTHQUAKE_2 11346 - +//--------------------------------------- +//Aggro #define SAY_AGGRO "Do not proceed. You will be eliminated!" #define SOUND_AGGRO 11344 - +//--------------------------------------- +//Slay #define SAY_SLAY_1 "Threat level zero." #define SOUND_SLAY_1 11349 #define SAY_SLAY_2 "Directive accomplished." #define SOUND_SLAY_2 11350 #define SAY_SLAY_3 "Target exterminated." #define SOUND_SLAY_3 11351 - +//--------------------------------------- +//Death #define SAY_DEATH "System failure in five... four..." #define SOUND_DEATH 11352 @@ -62,10 +65,11 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI { boss_doomwalkerAI(Creature *c) : ScriptedAI(c) {Reset();} + uint32 Chain_Timer; - uint32 Enrage_Timer; + uint32 Enrage_Timer; uint32 Overrun_Timer; - uint32 Quake_Timer; + uint32 Quake_Timer; uint32 Armor_Timer; bool InEnrage; @@ -73,12 +77,12 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI void Reset() { Enrage_Timer = 0; - Armor_Timer = 10000; - Chain_Timer = 20000; - Quake_Timer = 60000; - Overrun_Timer = 120000; + Armor_Timer = 5000 + rand()%8000; + Chain_Timer = 10000 + rand()%20000; + Quake_Timer = 25000 + rand()%10000; + Overrun_Timer = 30000 + rand()%15000; - InEnrage = false; + InEnrage = false; } void KilledUnit(Unit* Victim) @@ -88,18 +92,18 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI switch(rand()%3) { - case 0: - DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_SLAY_1); - break; - case 1: - DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_SLAY_2); - break; - case 2: - DoYell(SAY_SLAY_3, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_SLAY_3); - break; + case 0: + DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature, SOUND_SLAY_1); + break; + case 1: + DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature, SOUND_SLAY_2); + break; + case 2: + DoYell(SAY_SLAY_3, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature, SOUND_SLAY_3); + break; } } @@ -111,20 +115,21 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI void Aggro(Unit *who) { - DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_AGGRO); + DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature, SOUND_AGGRO); } void UpdateAI(const uint32 diff) { + if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) return; - if (m_creature->IsWithinCombatDist(m_creature->getVictim(), ATTACK_DISTANCE)) + if (m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE)) { - //when hp <= 20% gain enrage - if (((m_creature->GetHealth()*100)/ m_creature->GetMaxHealth()) <= 20) - { + //Spell Enrage + if (((m_creature->GetHealth()*100)/ m_creature->GetMaxHealth()) <= 20)//when hp <= 20% gain enrage + { if(Enrage_Timer < diff) { DoCast(m_creature,SPELL_ENRAGE); @@ -135,20 +140,20 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI //Spell Overrun if (Overrun_Timer < diff) - { + { switch(rand()%2) { - case 0: - DoYell(SAY_OVERRUN_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_OVERRUN_1); - break; - case 1: - DoYell(SAY_OVERRUN_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_OVERRUN_2); - break; + case 0: + DoYell(SAY_OVERRUN_1, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature, SOUND_OVERRUN_1); + break; + case 1: + DoYell(SAY_OVERRUN_2, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature, SOUND_OVERRUN_2); + break; } DoCast(m_creature->getVictim(),SPELL_OVERRUN); - Overrun_Timer = (30 + rand()% 40) * 1000; //30-70sec cooldown + Overrun_Timer = 25000 + rand()%15000; }else Overrun_Timer -= diff; @@ -160,41 +165,41 @@ struct TRINITY_DLL_DECL boss_doomwalkerAI : public ScriptedAI switch(rand()%2) { - case 0: - DoYell(SAY_EARTHQUAKE_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_EARTHQUAKE_1); - break; - case 1: - DoYell(SAY_EARTHQUAKE_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_EARTHQUAKE_2); - break; + case 0: + DoYell(SAY_EARTHQUAKE_1, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature, SOUND_EARTHQUAKE_1); + break; + case 1: + DoYell(SAY_EARTHQUAKE_2, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature, SOUND_EARTHQUAKE_2); + break; } if(InEnrage) { m_creature->RemoveAura(SPELL_ENRAGE, 0);//remove enrage before casting earthquake because enrage + earthquake = 16000dmg over 8sec and all dead } DoCast(m_creature,SPELL_EARTHQUAKE); - Quake_Timer = (70 + rand()% 30) * 1000; //70-100sec cooldown + Quake_Timer = 30000 + rand()%25000; }else Quake_Timer -= diff; //Spell Chain Lightning if (Chain_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_CHAIN_LIGHTNING); - Chain_Timer = (50 + rand()% 50) * 1000; //50-100sec cooldown + Chain_Timer = 15000 + rand()%25000; }else Chain_Timer -= diff; - //Spell Sunder Armor + //Spell Sunder Armor if (Armor_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_SUNDER_ARMOR); - Armor_Timer = (15 + rand()% 7) * 1000; //15-23sec cooldown about 70 proc to stack + Armor_Timer = 15000 + rand()%15000; }else Armor_Timer -= diff; DoMeleeAttackIfReady(); } } -}; +}; CreatureAI* GetAI_boss_doomwalker(Creature *_Creature) { diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp index 046c4fe86f3..5f7c87adff4 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_warp_splinter.cpp @@ -1,18 +1,18 @@ /* Copyright (C) 2006,2007 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 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 - */ +* 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 +*/ /* ScriptData SDName: Boss_Warp_Splinter @@ -69,7 +69,7 @@ struct TRINITY_DLL_DECL mob_treantAI : public ScriptedAI #define WAR_STOMP 34716 #define SUMMON_TREANTS 34727 // DBC: 34727, 34731, 34733, 34734, 34736, 34739, 34741 (with Ancestral Life spell 34742) // won't work (guardian summon) -#define ARCANE_VOLLEY 35059 //37078, 34785 //must additional script them (because Splinter eats them after 20 sec ^) +#define ARCANE_VOLLEY 36705 //37078, 34785 //must additional script them (because Splinter eats them after 20 sec ^) #define SPELL_HEAL_FATHER 6262 #define CREATURE_TREANT 19949 @@ -92,7 +92,7 @@ struct TRINITY_DLL_DECL mob_treantAI : public ScriptedAI #define TREANT_SPAWN_DIST 50 //50 yards from Warp Splinter's spawn point -float treant_pos[6][3] = +float treant_pos[6][3] = { {24.301233, 427.221100, -27.060635}, {16.795492, 359.678802, -27.355425}, @@ -121,12 +121,15 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI float Treant_Spawn_Pos_X; float Treant_Spawn_Pos_Y; + bool InCombat; void Reset() { - War_Stomp_Timer = 60000; + InCombat = false; + + War_Stomp_Timer = 25000 + rand()%15000; Summon_Treants_Timer = 45000; - Arcane_Volley_Timer = 140000; + Arcane_Volley_Timer = 8000 + rand()%12000; CheckTreantLOS_Timer = 1000; TreantLife_Timer = 999999; @@ -140,6 +143,7 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI { DoYell(SAY_COMBAT_START,LANG_UNIVERSAL,NULL); DoPlaySoundToSet(m_creature,SOUND_COMBAT_START); + InCombat = true; } // On Killed Unit @@ -147,17 +151,18 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI { switch(rand()%2) { - case 0: - DoYell(SAY_SLAY_1,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_SLAY_1); - break; - case 1: - DoYell(SAY_SLAY_2,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_SLAY_2); - break; + case 0: + DoYell(SAY_SLAY_1,LANG_UNIVERSAL,NULL); + DoPlaySoundToSet(m_creature, SOUND_SLAY_1); + break; + case 1: + DoYell(SAY_SLAY_2,LANG_UNIVERSAL,NULL); + DoPlaySoundToSet(m_creature, SOUND_SLAY_2); + break; } } + // On Death void JustDied(Unit* Killer) { DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL); @@ -167,7 +172,7 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI void SummonTreants() { for(int i = 0; i < 6; ++i) - { + { float angle = (M_PI / 3) * i; float X = Treant_Spawn_Pos_X + TREANT_SPAWN_DIST * cos(angle); @@ -185,17 +190,16 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI ((mob_treantAI*)pTreant->AI())->WarpGuid = m_creature->GetGUID(); } } - switch(rand()%2) - { - case 0: - DoYell(SAY_SUMMON_1,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_SUMMON_1); - break; - case 1: - DoYell(SAY_SUMMON_2,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature,SOUND_SUMMON_2); - break; + { + case 0: + DoYell(SAY_SUMMON_1,LANG_UNIVERSAL,NULL); + DoPlaySoundToSet(m_creature,SOUND_SUMMON_1); + break; + case 1: + DoYell(SAY_SUMMON_2,LANG_UNIVERSAL,NULL); + DoPlaySoundToSet(m_creature,SOUND_SUMMON_2); + break; } } @@ -223,22 +227,29 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI void UpdateAI(const uint32 diff) { + //Return since we have no target if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; //Check for War Stomp if(War_Stomp_Timer < diff) { + //time to cast DoCast(m_creature->getVictim(),WAR_STOMP); - War_Stomp_Timer = 60000; + + //Cast again on time + War_Stomp_Timer = 25000 + rand()%15000; } else War_Stomp_Timer -= diff; //Check for Arcane Volley if(Arcane_Volley_Timer < diff) { + //time to cast DoCast(m_creature->getVictim(),ARCANE_VOLLEY); - Arcane_Volley_Timer = 40000+((rand()%20)*1000); + + //Cast again on time + Arcane_Volley_Timer = 20000 + rand()%15000; } else Arcane_Volley_Timer -= diff; @@ -246,7 +257,9 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI if(Summon_Treants_Timer < diff) { SummonTreants(); - Summon_Treants_Timer = 45000; + + //Cast again on time + Summon_Treants_Timer = 45000; } else Summon_Treants_Timer -= diff; @@ -254,6 +267,7 @@ struct TRINITY_DLL_DECL boss_warp_splinterAI : public ScriptedAI if( CheckTreantLOS_Timer < diff) { EatTreant(); + CheckTreantLOS_Timer = 1000; } else CheckTreantLOS_Timer -= diff; diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp index 235bd733a9b..90ec4076d21 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp @@ -1,147 +1,161 @@ /* Copyright (C) 2006 - 2008 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 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 - */ +* 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 +*/ /* ScriptData SDName: Boss Gatewatcher Ironhand SD%Complete: 100 -SDComment: +SDComment: SDCategory: Tempest Keep, The Mechanar EndScriptData */ #include "precompiled.h" -#define SPELL_SHADOW_POWER 35322 -#define SPELL_JACKHAMMER 35326 -#define SPELL_STREAM_OF_MACHINE_FLUID 35311 - -#define SAY_SPELL_JACKHAMMER_1 "With the precise angle and velocity... " -#define SOUND_SPELL_JACKHAMMER_1 11112 -#define SAY_SPELL_JACKHAMMER_2 "Low tech yet quiet effective!" -#define SOUND_SPELL_JACKHAMMER_2 11113 - -#define SAY_AGGRO_1 "You have approximately five seconds to live." -#define SOUND_SAY_AGGRO_1 11109 - -#define SAY_SLAY_1 "A foregone conclusion." -#define SOUND_SLAY_1 11110 -#define SAY_SLAY_2 "The processing will continue a schedule!" -#define SOUND_SLAY_2 11111 - -#define SAY_DEATH_1 "My calculations did not... " -#define SOUND_DEATH_1 11114 - - +// Spells to be casted +#define SPELL_SHADOW_POWER 35322 +#define SPELL_JACKHAMMER 35326 +#define SPELL_STREAM_OF_MACHINE_FLUID 35311 + +#define SAY_SPELL_JACKHAMMER_1 "With the precise angle and velocity... " +#define SOUND_SPELL_JACKHAMMER_1 11112 +#define SAY_SPELL_JACKHAMMER_2 "Low tech yet quiet effective!" +#define SOUND_SPELL_JACKHAMMER_2 11113 +// On Aggro +#define SAY_AGGRO_1 "You have approximately five seconds to live." +#define SOUND_SAY_AGGRO_1 11109 + +//On Kill Unit +#define SAY_SLAY_1 "A foregone conclusion." +#define SOUND_SLAY_1 11110 +#define SAY_SLAY_2 "The processing will continue a schedule!" +#define SOUND_SLAY_2 11111 +// On Death +#define SAY_DEATH_1 "My calculations did not... " +#define SOUND_DEATH_1 11114 + +// Gatewatcher Iron-Hand AI struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI -{ - boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c) { Reset(); } +{ + boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c) { Reset(); } - uint32 Shadow_Power_Timer; + uint32 Shadow_Power_Timer; uint32 Jackhammer_Timer; - uint32 Stream_of_Machine_Fluid_Timer; + uint32 Stream_of_Machine_Fluid_Timer; - void Reset() - { - Shadow_Power_Timer = 25000; + void Reset() + { + Shadow_Power_Timer = 25000; Jackhammer_Timer = 45000; Stream_of_Machine_Fluid_Timer = 55000; - } - void Aggro(Unit *who) - { - } + } + void Aggro(Unit *who) + { + } - void KilledUnit(Unit* victim) + // On Killed Unit + void KilledUnit(Unit* victim) { if (rand()%2) return; switch(rand()%2) { - case 0: - DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SLAY_1); - break; - case 1: - DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SLAY_2); - break; + case 0: + DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature,SOUND_SLAY_1); + break; + + case 1: + DoYell(SAY_SLAY_2, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature,SOUND_SLAY_2); + break; } - } + } - void JustDied(Unit* Killer) - { - DoYell(SAY_DEATH_1,LANG_UNIVERSAL,NULL); - DoPlaySoundToSet(m_creature, SOUND_DEATH_1); + // On Death + void JustDied(Unit* Killer) + { + DoYell(SAY_DEATH_1,LANG_UNIVERSAL,NULL); + DoPlaySoundToSet(m_creature, SOUND_DEATH_1); } - void UpdateAI(const uint32 diff) - { - if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) - return; + void UpdateAI(const uint32 diff) + { + //Return since we have no target + if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) + return; - //Shadow Power - if(Shadow_Power_Timer < diff) - { + //Check for Shadow Power + if(Shadow_Power_Timer < diff) + { + //time to cast DoCast(m_creature,SPELL_SHADOW_POWER); - Shadow_Power_Timer = 25000; - }else Shadow_Power_Timer -= diff; - //Jack Hammer - if(Jackhammer_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_JACKHAMMER); + //Cast again on time + Shadow_Power_Timer = 20000 + rand()%8000; + }else Shadow_Power_Timer -= diff; + + //Check for Jack Hammer + if(Jackhammer_Timer < diff) + { + //time to cast + DoCast(m_creature->getVictim(),SPELL_JACKHAMMER); if (rand()%2) return; switch(rand()%2) { - case 0: - DoYell(SAY_SPELL_JACKHAMMER_1, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_1); - break; - case 1: - DoYell(SAY_SPELL_JACKHAMMER_2, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_2); - break; - } - - Jackhammer_Timer = 45000; - }else Jackhammer_Timer -= diff; - - //Stream of Machine Fluid - if(Stream_of_Machine_Fluid_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_STREAM_OF_MACHINE_FLUID); - Stream_of_Machine_Fluid_Timer = 55000; + case 0: + DoYell(SAY_SPELL_JACKHAMMER_1, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_1); + break; + + case 1: + DoYell(SAY_SPELL_JACKHAMMER_2, LANG_UNIVERSAL, NULL); + DoPlaySoundToSet(m_creature,SOUND_SPELL_JACKHAMMER_2); + break; + } + //Cast again on time + Jackhammer_Timer = 30000; + }else Jackhammer_Timer -= diff; + + //Check for Stream of Machine Fluid + if(Stream_of_Machine_Fluid_Timer < diff) + { + //time to cast + DoCast(m_creature->getVictim(),SPELL_STREAM_OF_MACHINE_FLUID); + + //Cast again on time + Stream_of_Machine_Fluid_Timer = 35000 + rand()%15000; }else Stream_of_Machine_Fluid_Timer -= diff; DoMeleeAttackIfReady(); - } -}; + } +}; CreatureAI* GetAI_boss_gatewatcher_iron_hand(Creature *_Creature) -{ +{ return new boss_gatewatcher_iron_handAI (_Creature); -} +} void AddSC_boss_gatewatcher_iron_hand() -{ - Script *newscript; - newscript = new Script; - newscript->Name="boss_gatewatcher_iron_hand"; - newscript->GetAI = GetAI_boss_gatewatcher_iron_hand; +{ + Script *newscript; + newscript = new Script; + newscript->Name="boss_gatewatcher_iron_hand"; + newscript->GetAI = GetAI_boss_gatewatcher_iron_hand; m_scripts[nrscripts++] = newscript; } diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp index ea8defffba3..866f641922c 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp @@ -1,30 +1,32 @@ /* Copyright (C) 2006 - 2008 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 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 - */ +* 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 +*/ /* ScriptData SDName: Boss Nethermancer Sepethrea SD%Complete: 100 -SDComment: +SDComment: SDCategory: Tempest Keep, The Mechanar EndScriptData */ #include "precompiled.h" +#include "def_mechanar.h" +// Spells to be casted #define SPELL_SUMMON_RAGIN_FLAMES 35275 -#define SPELL_INFERNO 19695 +#define SPELL_INFERNO 35268 #define SPELL_FIRE_TAIL 35278 #define SPELL_FROST_ATTACK 35263 @@ -37,19 +39,21 @@ EndScriptData */ #define SOUND_SPELL_DRAGONS_BREATH_1 11189 #define SAY_SPELL_DRAGONS_BREATH_2 "Anar'endal dracon!" #define SOUND_SPELL_DRAGONS_BREATH_2 11190 - +// On Aggro #define SAY_AGGRO "Don't value your life very much, do you?" #define SOUND_SAY_AGGRO 11186 +//On Kill Unit #define SAY_SLAY "And don't come back!" #define SOUND_SLAY 11187 +// On Death #define SAY_DEATH "Anu... bala belore...alon." #define SOUND_DEATH 11192 struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI { - boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c) { Reset(); } + boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c) {Reset();} uint32 frost_attack_Timer; uint32 arcane_blast_Timer; @@ -57,109 +61,154 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI uint32 knockback_Timer; uint32 solarburn_Timer; - void Reset() + void Reset() { - frost_attack_Timer = 10000; - arcane_blast_Timer = 15000; - dragons_breath_Timer = 20000; - knockback_Timer = 25000; + frost_attack_Timer = 7000 + rand()%3000; + arcane_blast_Timer = 12000 + rand()%6000; + dragons_breath_Timer = 18000 + rand()%4000; + knockback_Timer = 22000 + rand()%6000; solarburn_Timer = 30000; - } - - void Aggro(Unit *who) - { - } - - void KilledUnit(Unit* victim) + } + + void Aggro(Unit *who) + { + for(int i = 0; i < 1;i++) //Summon two Guards + { + DoCast(m_creature->getVictim(),SPELL_SUMMON_RAGIN_FLAMES); + } + } + + // On Killed Unit + void KilledUnit(Unit* victim) { DoYell(SAY_SLAY, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(m_creature,SOUND_SLAY); } - void JustDied(Unit* Killer) - { + // On Death + void JustDied(Unit* Killer) + { DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL); - DoPlaySoundToSet(m_creature, SOUND_DEATH); + DoPlaySoundToSet(m_creature, SOUND_DEATH); + ScriptedInstance *pInstance = ((ScriptedInstance*)m_creature->GetInstanceData()); + if(pInstance) + pInstance->SetData(DATA_SEPETHREA_DEATH, 0); } void UpdateAI(const uint32 diff) { - if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) - return; - - //Frost Attack - if(frost_attack_Timer < diff) - { + + //Return since we have no target + if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) + return; + + //Check for Frost Attack + if(frost_attack_Timer < diff) + { + //time to cast DoCast(m_creature->getVictim(),SPELL_FROST_ATTACK); - frost_attack_Timer = 10000; + + //Cast again on time + frost_attack_Timer = 7000 + rand()%30000; }else frost_attack_Timer -= diff; - //Arcane Blast - if(arcane_blast_Timer < diff) - { + //Check for Arcane Blast + if(arcane_blast_Timer < diff) + { + //time to cast DoCast(m_creature->getVictim(),SPELL_ARCANE_BLAST); - arcane_blast_Timer = 15000; + + //Cast again on time + arcane_blast_Timer = 15000; }else arcane_blast_Timer -= diff; - //Dragons Breath - if(dragons_breath_Timer < diff) - { + //Check for Dragons Breath + if(dragons_breath_Timer < diff) + { + //time to cast DoCast(m_creature->getVictim(),SPELL_DRAGONS_BREATH); - dragons_breath_Timer = 20000; - if (rand()%2) - return; - - switch(rand()%2) { + + if (rand()%2) + return; + + switch(rand()%2) + { case 0: - DoYell(SAY_SPELL_DRAGONS_BREATH_1, LANG_UNIVERSAL, NULL); + DoYell(SAY_SPELL_DRAGONS_BREATH_1, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(m_creature,SOUND_SPELL_DRAGONS_BREATH_1); break; + case 1: DoYell(SAY_SPELL_DRAGONS_BREATH_2, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(m_creature,SOUND_SPELL_DRAGONS_BREATH_2); break; + } } - }else dragons_breath_Timer -= diff; + //Cast again on time + dragons_breath_Timer = 12000 + rand()%10000; + + }else dragons_breath_Timer -= diff; + + //Check for Knockback + if(knockback_Timer < diff) + { + + //time to cast + DoCast(m_creature->getVictim(),SPELL_KNOCKBACK); + + //Cast again on time + knockback_Timer = 15000 + rand()%10000; - //Knockback - if(knockback_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_KNOCKBACK); - knockback_Timer = 25000; }else knockback_Timer -= diff; - //Solarburn - if(solarburn_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_SOLARBURN); - solarburn_Timer = 30000; + //Check for Solarburn + if(solarburn_Timer < diff) + + { + + //time to cast + DoCast(m_creature->getVictim(),SPELL_SOLARBURN); + + //Cast again on time + solarburn_Timer = 30000; + }else solarburn_Timer -= diff; DoMeleeAttackIfReady(); - } + + } }; CreatureAI* GetAI_boss_nethermancer_sepethrea(Creature *_Creature) -{ +{ return new boss_nethermancer_sepethreaAI (_Creature); } - struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI { - mob_ragin_flamesAI(Creature *c) : ScriptedAI(c) {Reset();} + mob_ragin_flamesAI(Creature *c) : ScriptedAI(c) + { + pInstance = ((ScriptedInstance*)c->GetInstanceData()); + Reset(); + } + + ScriptedInstance *pInstance; uint32 inferno_Timer; uint32 flame_timer; + uint32 Check_Timer; bool onlyonce; void Reset() - { + { inferno_Timer = 10000; - flame_timer = 200; + flame_timer = 500; + Check_Timer = 2000; onlyonce = false; + m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); + m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true); } void Aggro(Unit* who) @@ -184,40 +233,54 @@ struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI if(inferno_Timer < diff) { - DoCast(m_creature->getVictim(),SPELL_INFERNO); - inferno_Timer = 10000; + DoCast(m_creature->getVictim(),SPELL_INFERNO); - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,0); + m_creature->TauntApply(m_creature->getVictim()); - m_creature->GetMotionMaster()->MoveChase(target); + inferno_Timer = 10000; }else inferno_Timer -= diff; if(flame_timer < diff) { DoCast(m_creature,SPELL_FIRE_TAIL); - flame_timer = 200; + flame_timer = 500; + }else flame_timer -=diff; + //Check_Timer + if(Check_Timer < diff) + { + if(pInstance) + { + if(pInstance->GetData(DATA_SEPETHREAISDEAD)) + { + //remove + m_creature->setDeathState(JUST_DIED); + m_creature->RemoveCorpse(); + } + } + + Check_Timer = 1000; + }else Check_Timer -= diff; + DoMeleeAttackIfReady(); } + }; CreatureAI* GetAI_mob_ragin_flames(Creature *_Creature) { return new mob_ragin_flamesAI (_Creature); } - void AddSC_boss_nethermancer_sepethrea() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="boss_nethermancer_sepethrea"; - newscript->GetAI = GetAI_boss_nethermancer_sepethrea; +{ + Script *newscript; + newscript = new Script; + newscript->Name="boss_nethermancer_sepethrea"; + newscript->GetAI = GetAI_boss_nethermancer_sepethrea; m_scripts[nrscripts++] = newscript; - newscript = new Script; - newscript->Name="mob_ragin_flames"; - newscript->GetAI = GetAI_mob_ragin_flames; + newscript = new Script; + newscript->Name="mob_ragin_flames"; + newscript->GetAI = GetAI_mob_ragin_flames; m_scripts[nrscripts++] = newscript; } diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp new file mode 100644 index 00000000000..06c57082357 --- /dev/null +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_pathaleon_the_calculator.cpp @@ -0,0 +1,306 @@ +/* Copyright (C) 2006 - 2008 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 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
+*/
+
+/* ScriptData
+SDName: Boss Pathaleon the Calculator
+SD%Complete: 50
+SDComment: Event missing. Script for himself 99% blizzlike.
+SDCategory: Tempest Keep, The Mechanar
+EndScriptData */
+
+#include "precompiled.h"
+
+// Spells to be casted
+#define SPELL_SUMMON_NETHER_WRAITH 35287 //Spell not working. Summon is working but Pets dont attack and wrong HP.
+#define SPELL_MANA_TAP 36021
+#define SPELL_ARCANE_TORRENT 36022
+#define SPELL_DOMINATION 35280
+#define H_SPELL_ARCANE_EXPLOSION 34791 //Spell not right.
+#define SPELL_ENRAGE 36992
+
+// Add Spells
+#define SPELL_DETONATION 35058
+#define SPELL_ARCANE_MISSILES 35034
+
+// On Domination
+#define SAY_SPELL_DOMINATION_1 "I'm looking for a team player... "
+#define SOUND_SPELL_DOMINATION_1 11197
+#define SAY_SPELL_DOMINATION_2 "You work for me now!"
+#define SOUND_SPELL_DOMINATION_2 11198
+
+// On Summon
+#define SAY_SUMMON_1 "Time to supplement my work force."
+#define SOUND_SAY_SUMMON_1 11196
+
+// On Enrage
+#define SAY_ENRAGE_1 "A minor inconvenience."
+#define SOUND_SAY_ENRAGE_1 11199
+
+// On Aggro
+#define SAY_AGGRO_1 "We are on a strict timetable. You will not interfere!"
+#define SOUND_SAY_AGGRO_1 11193
+
+//On Kill Unit
+#define SAY_SLAY_1 "Looks like you lose"
+#define SOUND_SLAY_1 11195
+
+// On Death
+#define SAY_DEATH_1 "The project will... continue."
+#define SOUND_DEATH_1 11200
+
+
+struct TRINITY_DLL_DECL boss_pathaleon_the_calculatorAI : public ScriptedAI
+{
+ boss_pathaleon_the_calculatorAI(Creature *c) : ScriptedAI(c)
+ {
+ HeroicMode = m_creature->GetMap()->IsHeroic();
+ Reset();
+ }
+
+ uint32 Summon_Timer;
+ uint32 ManaTap_Timer;
+ uint32 ArcaneTorrent_Timer;
+ uint32 Domination_Timer;
+ uint32 ArcaneExplosion_Timer;
+ bool HeroicMode;
+ bool Enraged;
+
+ uint32 Counter;
+ Creature* Wraith;
+
+ void Reset()
+ {
+ Summon_Timer = 30000;
+ ManaTap_Timer = 12000 + rand()%8000;
+ ArcaneTorrent_Timer = 16000 + rand()%9000;
+ Domination_Timer = 25000 + rand()%15000;
+ ArcaneExplosion_Timer = 8000 + rand()%5000;
+
+ Enraged = false;
+
+ Counter = 0;
+
+ }
+ void Aggro(Unit *who)
+ {
+ DoYell(SAY_AGGRO_1,LANG_UNIVERSAL,NULL);
+ DoPlaySoundToSet(m_creature, SOUND_SAY_AGGRO_1);
+ }
+
+ // On Killed Unit
+ void KilledUnit(Unit* victim)
+ {
+
+ DoYell(SAY_SLAY_1, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature,SOUND_SLAY_1);
+
+ }
+
+ // On Death
+ void JustDied(Unit* Killer)
+ {
+ DoYell(SAY_DEATH_1,LANG_UNIVERSAL,NULL);
+ DoPlaySoundToSet(m_creature, SOUND_DEATH_1);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ //Return since we have no target
+ if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
+ return;
+
+ if(Summon_Timer < diff)
+ {
+
+ Unit* target = NULL;
+
+ for(int i = 0; i < 3;i++)
+ {
+ target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ Wraith = m_creature->SummonCreature(21062,m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(),0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
+ if (target)
+ Wraith->AI()->AttackStart(target);
+ }
+
+ DoYell(SAY_SUMMON_1,LANG_UNIVERSAL,NULL);
+ DoPlaySoundToSet(m_creature, SOUND_SAY_SUMMON_1);
+
+ Summon_Timer = 30000 + rand()%15000;
+ }else Summon_Timer -= diff;
+
+ if(ManaTap_Timer < diff)
+ {
+ //time to cast
+ DoCast(m_creature->getVictim(),SPELL_MANA_TAP);
+
+ //Cast again on time
+ ManaTap_Timer = 14000 + rand()%8000;
+ }else ManaTap_Timer -= diff;
+
+ if(ArcaneTorrent_Timer < diff)
+ {
+ //time to cast
+ DoCast(m_creature->getVictim(),SPELL_ARCANE_TORRENT);
+
+ //Cast again on time
+ ArcaneTorrent_Timer = 12000 + rand()%6000;
+ }else ArcaneTorrent_Timer -= diff;
+
+ if(Domination_Timer < diff)
+ {
+ //time to cast
+ switch(rand()%2)
+ {
+ case 0:
+ DoYell(SAY_SPELL_DOMINATION_1, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature, SOUND_SPELL_DOMINATION_1);
+ break;
+
+ case 1:
+ DoYell(SAY_SPELL_DOMINATION_2, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature, SOUND_SPELL_DOMINATION_2);
+ break;
+ }
+
+ Unit* target = NULL;
+ target = SelectUnit(SELECT_TARGET_RANDOM,1);
+ if (target) DoCast(target,SPELL_DOMINATION);
+
+ //Cast again on time
+ Domination_Timer = 25000 + rand()%5000;
+ }else Domination_Timer -= diff;
+
+ //Only casting if Heroic Mode is used
+ if (HeroicMode)
+ {
+ if(ArcaneExplosion_Timer < diff)
+ {
+ //time to cast
+ DoCast(m_creature->getVictim(),H_SPELL_ARCANE_EXPLOSION);
+
+ //Cast again on time
+ ArcaneExplosion_Timer = 10000 + rand()%4000;
+ }else ArcaneExplosion_Timer -= diff;
+ }
+
+ if (!Enraged && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 21)
+ {
+
+ DoCast(m_creature, SPELL_ENRAGE);
+ DoYell(SAY_ENRAGE_1, LANG_UNIVERSAL, NULL);
+ DoPlaySoundToSet(m_creature,SOUND_SAY_ENRAGE_1);
+ Enraged = true;
+
+ }
+
+ DoMeleeAttackIfReady();
+ }
+};
+CreatureAI* GetAI_boss_pathaleon_the_calculator(Creature *_Creature)
+{
+ return new boss_pathaleon_the_calculatorAI (_Creature);
+}
+
+struct TRINITY_DLL_DECL mob_nether_wraithAI : public ScriptedAI
+{
+ mob_nether_wraithAI(Creature *c) : ScriptedAI(c) {Reset();}
+
+ ScriptedInstance *pInstance;
+
+ uint32 ArcaneMissiles_Timer;
+ uint32 Detonation_Timer;
+ uint32 Die_Timer;
+ bool Detonation;
+
+ void Reset()
+ {
+ ArcaneMissiles_Timer = 1000 + rand()%3000;
+ Detonation_Timer = 20000;
+ Die_Timer = 2200;
+ Detonation = false;
+
+ }
+
+ void Aggro(Unit* who)
+ {
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ Unit* target = NULL;
+
+ if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
+ return;
+
+ if(ArcaneMissiles_Timer < diff)
+ {
+
+ Unit* target = NULL;
+ target = SelectUnit(SELECT_TARGET_RANDOM,1);
+ if (!target)
+ target = m_creature->getVictim();
+ if (target)
+ {
+ DoCast(target,SPELL_ARCANE_MISSILES);
+ }
+
+ ArcaneMissiles_Timer = 5000 + rand()%5000;
+ }else ArcaneMissiles_Timer -=diff;
+
+ if (!Detonation)
+ {
+ if(Detonation_Timer < diff)
+ {
+ //time to cast
+ DoCast(m_creature,SPELL_DETONATION);
+ Detonation = true;
+
+ }else Detonation_Timer -= diff;
+
+ }
+
+ if (Detonation)
+ {
+ if (Die_Timer < diff)
+ {
+ m_creature->setDeathState(JUST_DIED);
+ m_creature->RemoveCorpse();
+ }else Die_Timer -= diff;
+ }
+
+
+ DoMeleeAttackIfReady();
+ }
+
+};
+CreatureAI* GetAI_mob_nether_wraith(Creature *_Creature)
+{
+ return new mob_nether_wraithAI (_Creature);
+}
+
+void AddSC_boss_pathaleon_the_calculator()
+{
+ Script *newscript;
+ newscript = new Script;
+ newscript->Name="boss_pathaleon_the_calculator";
+ newscript->GetAI = GetAI_boss_pathaleon_the_calculator;
+ m_scripts[nrscripts++] = newscript;
+
+ newscript = new Script;
+ newscript->Name="mob_nether_wraith";
+ newscript->GetAI = GetAI_mob_nether_wraith;
+ m_scripts[nrscripts++] = newscript;
+}
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h new file mode 100644 index 00000000000..2f657d85453 --- /dev/null +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/def_mechanar.h @@ -0,0 +1,6 @@ +#ifndef DEF_MECHANAR_H
+#define DEF_MECHANAR_H
+
+#define DATA_SEPETHREA_DEATH 1
+#define DATA_SEPETHREAISDEAD 2
+#endif
diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp new file mode 100644 index 00000000000..c58ab523b90 --- /dev/null +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/instance_mechanar.cpp @@ -0,0 +1,90 @@ +/* Copyright (C) 2006 - 2008 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 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
+ */
+
+/* ScriptData
+SDName: Instance_Mechanar
+SD%Complete: 100
+SDComment:
+SDCategory: Mechanar
+EndScriptData */
+
+#include "precompiled.h"
+#include "def_mechanar.h"
+
+struct TRINITY_DLL_DECL instance_mechanar : public ScriptedInstance
+{
+ instance_mechanar(Map *Map) : ScriptedInstance(Map) {Initialize();};
+
+
+ bool IsBossDied[1];
+
+ void OnCreatureCreate (Creature *creature, uint32 creature_entry)
+ {
+ }
+
+ void Initialize()
+ {
+ IsBossDied[0] = false;
+ }
+
+ bool IsEncounterInProgress() const
+ {
+ //not active
+ return false;
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ switch(type)
+ {
+ case DATA_SEPETHREAISDEAD:
+ if(IsBossDied[0])
+ return 1;
+ break;
+ }
+
+ return 0;
+ }
+
+ uint64 GetData64 (uint32 identifier)
+ {
+ return 0;
+ }
+
+ void SetData(uint32 type, uint32 data)
+ {
+ switch(type)
+ {
+ case DATA_SEPETHREA_DEATH:
+ IsBossDied[0] = true;
+ break;
+ }
+ }
+};
+
+InstanceData* GetInstanceData_instance_mechanar(Map* map)
+{
+ return new instance_mechanar(map);
+}
+
+void AddSC_instance_mechanar()
+{
+ Script *newscript;
+ newscript = new Script;
+ newscript->Name = "instance_mechanar";
+ newscript->GetInstanceData = GetInstanceData_instance_mechanar;
+ m_scripts[nrscripts++] = newscript;
+}
diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp index f57f1f3509c..3315e49732c 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_sartura.cpp @@ -6,31 +6,32 @@ * * 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 + * 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 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ScriptData -SDName: Boss_Sartura +SDName: boss_sartura SD%Complete: 99 -SDComment: +SDComment: SDCategory: Temple of Ahn'Qiraj EndScriptData */ #include "precompiled.h" #define SPELL_WHIRLWIND 26083 -#define SPELL_ENRAGE 28747 //Not sure if right ID. +#define SPELL_ENRAGE 28747 //Not sure if right ID. #define SPELL_ENRAGEHARD 28798 //Guard Spell #define SPELL_WHIRLWINDADD 26038 #define SPELL_KNOCKBACK 26027 + struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI { boss_sarturaAI(Creature *c) : ScriptedAI(c) {Reset();} @@ -58,8 +59,9 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI WhirlWind = false; AggroReset = false; - Enraged = false; + Enraged = false; EnragedHard = false; + } void Aggro(Unit *who) @@ -77,9 +79,7 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI if (WhirlWindRandom_Timer < diff) { //Attack random Gamers - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,1); - if (target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1)) AttackStart(target); WhirlWindRandom_Timer = 3000 + rand()%4000; @@ -104,13 +104,11 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI if (AggroReset_Timer < diff) { //Attack random Gamers - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,1); - if (target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1)) m_creature->TauntApply(target); - AggroReset = true; - AggroReset_Timer = 2000 + rand()%3000; + AggroReset = true; + AggroReset_Timer = 2000 + rand()%3000; }else AggroReset_Timer -= diff; if (AggroReset) @@ -119,7 +117,8 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI { AggroReset = false; AggroResetEnd_Timer = 5000; - }AggroResetEnd_Timer -= diff; + AggroReset_Timer = 35000 + rand()%10000; + } else AggroResetEnd_Timer -= diff; } //If she is 20% enrage @@ -130,7 +129,7 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI DoCast(m_creature, SPELL_ENRAGE); Enraged = true; } - } + } //After 10 minutes hard enrage if (!EnragedHard) @@ -139,13 +138,14 @@ struct TRINITY_DLL_DECL boss_sarturaAI : public ScriptedAI { DoCast(m_creature, SPELL_ENRAGEHARD); EnragedHard = true; - }EnrageHard_Timer -= diff; + } else EnrageHard_Timer -= diff; } DoMeleeAttackIfReady(); } } -}; +}; + struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI { @@ -157,7 +157,7 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI uint32 AggroReset_Timer; uint32 AggroResetEnd_Timer; uint32 KnockBack_Timer; - + bool WhirlWind; bool AggroReset; @@ -169,9 +169,10 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI AggroReset_Timer = 45000 + rand()%10000; AggroResetEnd_Timer = 5000; KnockBack_Timer = 10000; - + WhirlWind = false; AggroReset = false; + } void Aggro(Unit *who) @@ -197,9 +198,7 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI if (WhirlWindRandom_Timer < diff) { //Attack random Gamers - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,1); - if (target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1)) m_creature->TauntApply(target); WhirlWindRandom_Timer = 3000 + rand()%4000; @@ -213,12 +212,10 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI if (!WhirlWind) { - if(AggroReset_Timer < diff) + if (AggroReset_Timer < diff) { //Attack random Gamers - Unit* target = NULL; - target = SelectUnit(SELECT_TARGET_RANDOM,1); - if (target) + if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1)) AttackStart(target); AggroReset = true; @@ -238,7 +235,8 @@ struct TRINITY_DLL_DECL mob_sartura_royal_guardAI : public ScriptedAI { AggroReset = false; AggroResetEnd_Timer = 5000; - }AggroResetEnd_Timer -= diff; + AggroReset_Timer = 30000 + rand()%10000; + } else AggroResetEnd_Timer -= diff; } DoMeleeAttackIfReady(); @@ -258,7 +256,6 @@ CreatureAI* GetAI_mob_sartura_royal_guard(Creature *_Creature) void AddSC_boss_sartura() { Script *newscript; - newscript = new Script; newscript->Name="boss_sartura"; newscript->GetAI = GetAI_boss_sartura; |