diff options
author | maximius <none@none> | 2009-10-12 19:14:12 -0700 |
---|---|---|
committer | maximius <none@none> | 2009-10-12 19:14:12 -0700 |
commit | b8b49cb15abb60c1cdc747150bb597c22673de94 (patch) | |
tree | 12b4fe6aa4a547567d2896181fedef3237745af0 /src | |
parent | 404dacaaa56762d9f0eb005126c35cd39d09e1c4 (diff) |
*Script for the boss Drakkari Colossus and Drakkari Elemental, by manuel
*Use Kill instead of DealDamage, should fix a crash in boss_svala, thanks Gyullo
*Update Naxxramas Worshippers script, by Destalker
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/bindings/scripts/scripts/northrend/gundrak/boss_drakkari_colossus.cpp | 246 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp | 4 |
2 files changed, 231 insertions, 19 deletions
diff --git a/src/bindings/scripts/scripts/northrend/gundrak/boss_drakkari_colossus.cpp b/src/bindings/scripts/scripts/northrend/gundrak/boss_drakkari_colossus.cpp index dcfaf33b66a..8d22b9547c6 100644 --- a/src/bindings/scripts/scripts/northrend/gundrak/boss_drakkari_colossus.cpp +++ b/src/bindings/scripts/scripts/northrend/gundrak/boss_drakkari_colossus.cpp @@ -1,21 +1,32 @@ /* Script Data Start SDName: Boss Drakkari Colossus -SDAuthor: LordVanMartin -SD%Complete: -SDComment: +SDAuthor: Manuel +SD%Complete: 95 % +SDComment: The event with the Living Mojos is not implemented, just is done that when one of the mojos around the boss take damage will make that the boss enter in combat! SDCategory: Script Data End */ -/*** SQL START *** -update creature_template set scriptname = '' where entry = ''; -*** SQL END ***/ #include "precompiled.h" #include "def_gundrak.h" -//Spells -#define SPELL_EMERGE 54850 //to phase2, Colossus unatackable, Elemental emerges -#define SPELL_EMERGE_2 54851 -#define SPELL_MIGHTY_BLOW 54719 +enum Spells +{ + SPELL_EMERGE = 54850, + SPELL_EMERGE_2 = 54851, + + SPELL_MIGHTY_BLOW = 54719, + + SPELL_MERGE = 54878, + SPELL_SURGE = 54801, + + SPELL_FREEZE_ANIM = 16245 +}; + +enum Entrys +{ + DRAKKARI_COLOSSUS = 29307, + DRAKKARI_ELEMENTAL = 29573 +}; struct TRINITY_DLL_DECL boss_drakkari_colossusAI : public ScriptedAI { @@ -23,35 +34,216 @@ struct TRINITY_DLL_DECL boss_drakkari_colossusAI : public ScriptedAI { pInstance = c->GetInstanceData(); } - + ScriptedInstance* pInstance; + bool Summoned; + + uint32 Summon_Timer; + uint32 MightyBlowTimer; + void Reset() { if (pInstance) pInstance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, NOT_STARTED); + + + m_creature->clearUnitState(UNIT_STAT_STUNNED); + m_creature->SetReactState(REACT_PASSIVE); + + Summoned = false; + + MightyBlowTimer = 10000; } - + void EnterCombat(Unit* who) { if (pInstance) pInstance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, IN_PROGRESS); } - + + void PrepareToSummonElemental() + { + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + m_creature->addUnitState(UNIT_STAT_STUNNED); + m_creature->CastSpell(m_creature,SPELL_EMERGE,false); + } void UpdateAI(const uint32 diff) { //Return since we have no target if (!UpdateVictim()) return; - - DoMeleeAttackIfReady(); + + if(Summoned == false && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50 && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() > 6) + { + PrepareToSummonElemental(); + m_creature->CastSpell(m_creature->getVictim(), SPELL_EMERGE_2, true); + Summoned = true; + } + + if(Summoned == true && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 5) + { + m_creature->RemoveAllAuras(); + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + m_creature->addUnitState(UNIT_STAT_STUNNED); + m_creature->RemoveAllAuras(); + + Summoned = false; + } + + if (MightyBlowTimer < diff) + { + if(!m_creature->hasUnitState(UNIT_STAT_STUNNED)) + { + m_creature->CastSpell(m_creature->getVictim(),SPELL_MIGHTY_BLOW,true); + } + + MightyBlowTimer = 10000; + }else MightyBlowTimer -= diff; + + if(!m_creature->hasUnitState(UNIT_STAT_STUNNED)) + { + DoMeleeAttackIfReady(); + } } - - void JustDied(Unit* killer) + + void JustDied(Unit* killer) { if (pInstance) pInstance->SetData(DATA_DRAKKARI_COLOSSUS_EVENT, DONE); } + + void JustSummoned(Creature* summoned) + { + summoned->AI()->AttackStart(m_creature->getVictim()); + } +}; + +struct TRINITY_DLL_DECL boss_drakkari_elementalAI : public ScriptedAI +{ + boss_drakkari_elementalAI(Creature *c) : ScriptedAI(c) + { + Colossus = c->FindNearestCreature(DRAKKARI_COLOSSUS, 30.0f, true); + } + + Creature* Colossus; + + uint32 SurgeTimer; + + bool PreparationDone; + bool GoToColossus; + bool Checked; + + void Reset() + { + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + m_creature->clearUnitState(UNIT_STAT_STUNNED); + + SurgeTimer = 7000; + + GoToColossus = false; + PreparationDone = false; + Checked = false; + } + + void UpdateAI(const uint32 diff) + { + //Return since we have no target + if(!UpdateVictim()) + return; + + if(GoToColossus == false && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50) + { + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + m_creature->CastSpell(Colossus ,SPELL_MERGE,true); + + GoToColossus = true; + PreparationDone = true; + } + + if(GoToColossus == true && PreparationDone == true) + { + m_creature->addUnitState(UNIT_STAT_STUNNED); + m_creature->SetVisibility(VISIBILITY_OFF); + m_creature->CastSpell(Colossus ,SPELL_MERGE,true); + + PreparationDone = false; + + Colossus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + Colossus->clearUnitState(UNIT_STAT_STUNNED); + } + + if (SurgeTimer < diff) + { + if(m_creature->GetVisibility() == VISIBILITY_ON) + { + Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0); + + m_creature->CastSpell(target,SPELL_SURGE,false); + } + + SurgeTimer = 7000; + }else SurgeTimer -= diff; + + if(Checked == false && Colossus->GetHealth()*100 / Colossus->GetMaxHealth() <= 5) + { + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + m_creature->clearUnitState(UNIT_STAT_STUNNED); + m_creature->SetVisibility(VISIBILITY_ON); + Checked = true; + } + + //prevent do melee if is invisible + if(m_creature->GetVisibility() == VISIBILITY_ON) + { + DoMeleeAttackIfReady(); + } + } + + void JustDied(Unit* killer) + { + Colossus->Kill(Colossus); + } +}; + +struct TRINITY_DLL_DECL npc_living_mojoAI : public ScriptedAI +{ + npc_living_mojoAI(Creature *c) : ScriptedAI(c) {} + + void Reset() + { + if(m_creature->IsInRange3d(1672.959,743.487,143.337,0.0f,17.0f)) + { + m_creature->SetReactState(REACT_PASSIVE); + + }else + + m_creature->SetReactState(REACT_AGGRESSIVE); + } + + void DamageTaken(Unit* pDone_by, uint32& uiDamage) + { + if(m_creature->HasReactState(REACT_PASSIVE)) + { + if(Creature* Colossus = m_creature->FindNearestCreature(DRAKKARI_COLOSSUS, 30.0f, true)) + { + Colossus->RemoveAura(SPELL_FREEZE_ANIM); + Colossus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); + Colossus->SetReactState(REACT_AGGRESSIVE); + } + + } + } + + void UpdateAI(const uint32 diff) + { + //Return since we have no target + if(!UpdateVictim()) + return; + + DoMeleeAttackIfReady(); + } + }; CreatureAI* GetAI_boss_drakkari_colossus(Creature* pCreature) @@ -59,6 +251,16 @@ CreatureAI* GetAI_boss_drakkari_colossus(Creature* pCreature) return new boss_drakkari_colossusAI (pCreature); } +CreatureAI* GetAI_boss_drakkari_elemental(Creature* pCreature) +{ + return new boss_drakkari_elementalAI (pCreature); +} + +CreatureAI* GetAI_npc_living_mojo(Creature* pCreature) +{ + return new npc_living_mojoAI (pCreature); +} + void AddSC_boss_drakkari_colossus() { Script *newscript; @@ -67,4 +269,14 @@ void AddSC_boss_drakkari_colossus() newscript->Name="boss_drakkari_colossus"; newscript->GetAI = &GetAI_boss_drakkari_colossus; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="boss_drakkari_elemental"; + newscript->GetAI = &GetAI_boss_drakkari_elemental; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_living_mojo"; + newscript->GetAI = &GetAI_npc_living_mojo; + newscript->RegisterSelf(); } diff --git a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp index db246aa3f91..abcd95416c4 100644 --- a/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp +++ b/src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp @@ -312,8 +312,8 @@ struct TRINITY_DLL_DECL boss_svala_sorrowgraveAI : public ScriptedAI } } if (bSacrificed && pSacrificeTarget && pSacrificeTarget->isAlive()) - m_creature->DealDamage(pSacrificeTarget, pSacrificeTarget->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); - + m_creature->Kill(pSacrificeTarget, false); + //go down Phase = NORMAL; pSacrificeTarget = NULL; |