aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-12 19:14:12 -0700
committermaximius <none@none>2009-10-12 19:14:12 -0700
commitb8b49cb15abb60c1cdc747150bb597c22673de94 (patch)
tree12b4fe6aa4a547567d2896181fedef3237745af0 /src
parent404dacaaa56762d9f0eb005126c35cd39d09e1c4 (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.cpp246
-rw-r--r--src/bindings/scripts/scripts/northrend/utgarde_keep/utgarde_pinnacle/boss_svala.cpp4
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;