aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefan@Vistax64-Stefan <none@none>2008-11-26 19:14:03 +0100
committerStefan@Vistax64-Stefan <none@none>2008-11-26 19:14:03 +0100
commit4d396bb990996592499d5304ea65e0f38ab6870c (patch)
treeef69d971636aa74536eaecfb1dbc9c7ce0cecec3 /src
parent273635e3513fbe83906480f72d4a48778ba51015 (diff)
*Add Script Warchief Kargath Bladefist
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/Makefile.am1
-rw-r--r--src/bindings/scripts/ScriptMgr.cpp2
-rw-r--r--src/bindings/scripts/VC71/71ScriptDev2.vcproj4
-rw-r--r--src/bindings/scripts/VC80/80ScriptDev2.vcproj4
-rw-r--r--src/bindings/scripts/VC90/90ScriptDev2.vcproj4
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp298
6 files changed, 313 insertions, 0 deletions
diff --git a/src/bindings/scripts/Makefile.am b/src/bindings/scripts/Makefile.am
index 19b28005497..2ff24f21015 100644
--- a/src/bindings/scripts/Makefile.am
+++ b/src/bindings/scripts/Makefile.am
@@ -195,6 +195,7 @@ scripts/zone/hellfire_citadel/magtheridons_lair/def_magtheridons_lair.h \
scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp \
scripts/zone/hellfire_citadel/shattered_halls/boss_nethekurse.cpp \
scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp \
+scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp \
scripts/zone/hellfire_citadel/shattered_halls/def_shattered_halls.h \
scripts/zone/hellfire_citadel/shattered_halls/instance_shattered_halls.cpp \
scripts/zone/hellfire_peninsula/boss_doomlord_kazzak.cpp \
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp
index ad6bcf76c08..00b2e6ada47 100644
--- a/src/bindings/scripts/ScriptMgr.cpp
+++ b/src/bindings/scripts/ScriptMgr.cpp
@@ -302,6 +302,7 @@ extern void AddSC_instance_magtheridons_lair();
//--Shattered Halls
extern void AddSC_boss_grand_warlock_nethekurse();
extern void AddSC_boss_warbringer_omrogg();
+extern void AddSC_boss_warchief_kargath_bladefist();
extern void AddSC_instance_shattered_halls();
//--Ramparts
@@ -1489,6 +1490,7 @@ void ScriptsInit()
//--Shattered Halls
AddSC_boss_grand_warlock_nethekurse();
AddSC_boss_warbringer_omrogg();
+ AddSC_boss_warchief_kargath_bladefist();
AddSC_instance_shattered_halls();
//--Ramparts
diff --git a/src/bindings/scripts/VC71/71ScriptDev2.vcproj b/src/bindings/scripts/VC71/71ScriptDev2.vcproj
index f0f7131b1f6..82b575861b5 100644
--- a/src/bindings/scripts/VC71/71ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC71/71ScriptDev2.vcproj
@@ -1377,6 +1377,10 @@
>
</File>
<File
+ RelativePath="..\scripts\zone\hellfire_citadel\shattered_halls\boss_warchief_kargath_bladefist.cpp"
+ >
+ </File>
+ <File
RelativePath="..\scripts\zone\hellfire_citadel\shattered_halls\def_shattered_halls.h"
>
</File>
diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
index fdb376e833f..83ce00c575e 100644
--- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
@@ -1622,6 +1622,10 @@
>
</File>
<File
+ RelativePath="..\scripts\zone\hellfire_citadel\shattered_halls\boss_warchief_kargath_bladefist.cpp"
+ >
+ </File>
+ <File
RelativePath="..\scripts\zone\hellfire_citadel\shattered_halls\def_shattered_halls.h"
>
</File>
diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
index b4f467d0470..37e715b64bf 100644
--- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
@@ -1608,6 +1608,10 @@
>
</File>
<File
+ RelativePath="..\scripts\zone\hellfire_citadel\shattered_halls\boss_warchief_kargath_bladefist.cpp"
+ >
+ </File>
+ <File
RelativePath="..\scripts\zone\hellfire_citadel\shattered_halls\def_shattered_halls.h"
>
</File>
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp
new file mode 100644
index 00000000000..88ddf64b162
--- /dev/null
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp
@@ -0,0 +1,298 @@
+/* Copyright (C) 2008 - 2009 BroodWyrm */
+#include "precompiled.h"
+
+#define SPELL_BLADE_DANCE 30739
+#define H_SPELL_CHARGE 25821
+
+#define TARGET_NUM 5
+
+#define MOB_SHATTERED_ASSASSIN 17695
+#define MOB_HEARTHEN_GUARD 17621
+#define MOB_SHARPSHOOTER_GUARD 17622
+#define MOB_REAVER_GUARD 17623
+
+float AssassEntrance[3] = {275.136,-84.29,2.3}; // y +-8
+float AssassExit[3] = {184.233,-84.29,2.3}; // y +-8
+float AddsEntrance[3] = {306.036,-84.29,1.93};
+
+#define SOUND_AGGRO1 10323
+#define SAY_AGGRO1 "Ours is the true Horde! The only Horde!"
+#define SOUND_AGGRO2 10324
+#define SAY_AGGRO2 "I'll carve the meat from your bones!"
+#define SOUND_AGGRO3 10325
+#define SAY_AGGRO3 "I am called Bladefist for a reason, as you will see!"
+#define SOUND_SLAY1 10326
+#define SAY_SLAY1 "For the real Horde!"
+#define SOUND_SLAY2 10327
+#define SAY_SLAY2 "I am the only Warchief!"
+#define SOUND_DEATH 10328
+#define SAY_DEATH "The true Horde... will.. prevail.."
+
+struct TRINITY_DLL_DECL boss_warchief_kargath_bladefistAI : public ScriptedAI
+{
+ boss_warchief_kargath_bladefistAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ HeroicMode = m_creature->GetMap()->IsHeroic();
+ Reset();
+ }
+
+ ScriptedInstance* pInstance;
+ bool HeroicMode;
+
+ std::vector<uint64> adds;
+ std::vector<uint64> assassins;
+
+ uint32 Charge_timer;
+ uint32 Blade_Dance_Timer;
+ uint32 Summon_Assistant_Timer;
+ uint32 resetcheck_timer;
+ uint32 Wait_Timer;
+
+ uint32 Assassins_Timer;
+
+ uint32 summoned;
+ bool InBlade;
+
+ uint32 target_num;
+
+ void Reset()
+ {
+ removeAdds();
+
+ m_creature->SetSpeed(MOVE_RUN,2);
+ m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+
+ summoned = 2;
+ InBlade = false;
+ Wait_Timer = 0;
+
+ Charge_timer = 0;
+ Blade_Dance_Timer = 30000;
+ Summon_Assistant_Timer = 15000;
+ Assassins_Timer = 5000;
+ resetcheck_timer = 5000;
+ }
+
+ void Aggro(Unit *who)
+ {
+ switch (rand()%3)
+ {
+ case 0:
+ DoPlaySoundToSet(m_creature,SOUND_AGGRO1);
+ DoYell(SAY_AGGRO1,LANG_UNIVERSAL,NULL);
+ break;
+ case 1:
+ DoPlaySoundToSet(m_creature,SOUND_AGGRO2);
+ DoYell(SAY_AGGRO2,LANG_UNIVERSAL,NULL);
+ break;
+ case 2:
+ DoPlaySoundToSet(m_creature,SOUND_AGGRO3);
+ DoYell(SAY_AGGRO3,LANG_UNIVERSAL,NULL);
+ break;
+ }
+ }
+
+ void JustSummoned(Creature *summoned)
+ {
+ switch(summoned->GetEntry())
+ {
+ case MOB_HEARTHEN_GUARD:
+ case MOB_SHARPSHOOTER_GUARD:
+ case MOB_REAVER_GUARD:
+ summoned->AI()->AttackStart(SelectUnit(SELECT_TARGET_RANDOM,0));
+ adds.push_back(summoned->GetGUID());
+ break;
+ case MOB_SHATTERED_ASSASSIN:
+ assassins.push_back(summoned->GetGUID());
+ break;
+ }
+ }
+
+ void KilledUnit(Unit *victim)
+ {
+ if(victim->GetTypeId() == TYPEID_PLAYER)
+ {
+ switch(rand()%2)
+ {
+ case 0:
+ DoPlaySoundToSet(m_creature, SOUND_SLAY1);
+ DoYell(SAY_SLAY1,LANG_UNIVERSAL,NULL);
+ break;
+ case 1:
+ DoPlaySoundToSet(m_creature, SOUND_SLAY2);
+ DoYell(SAY_SLAY2,LANG_UNIVERSAL,NULL);
+ break;
+ }
+ }
+ }
+
+ void JustDied(Unit* Killer)
+ {
+ DoPlaySoundToSet(m_creature, SOUND_DEATH);
+ DoYell(SAY_DEATH,LANG_UNIVERSAL,NULL);
+ removeAdds();
+ }
+
+ void MovementInform(uint32 type, uint32 id)
+ {
+ if(InBlade)
+ {
+ if(type != POINT_MOTION_TYPE)
+ return;
+
+ if(id != 1)
+ return;
+
+ if(target_num > 0) // to prevent loops
+ {
+ Wait_Timer = 1;
+ DoCast(m_creature,SPELL_BLADE_DANCE,true);
+ target_num--;
+ }
+ }
+ }
+
+ void removeAdds()
+ {
+ for(std::vector<uint64>::iterator itr = adds.begin(); itr!= adds.end(); ++itr)
+ {
+ Unit* temp = Unit::GetUnit((*m_creature),*itr);
+ if(temp && temp->isAlive())
+ {
+ (*temp).GetMotionMaster()->Clear(true);
+ m_creature->DealDamage(temp,temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ ((Creature*)temp)->RemoveCorpse();
+ }
+ }
+ adds.clear();
+
+ for(std::vector<uint64>::iterator itr = assassins.begin(); itr!= assassins.end(); ++itr)
+ {
+ Unit* temp = Unit::GetUnit((*m_creature),*itr);
+ if(temp && temp->isAlive())
+ {
+ (*temp).GetMotionMaster()->Clear(true);
+ m_creature->DealDamage(temp,temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ ((Creature*)temp)->RemoveCorpse();
+ }
+ }
+ assassins.clear();
+ }
+ void SpawnAssassin()
+ {
+ m_creature->SummonCreature(MOB_SHATTERED_ASSASSIN,AssassEntrance[0],AssassEntrance[1]+8, AssassEntrance[2], 0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000);
+ m_creature->SummonCreature(MOB_SHATTERED_ASSASSIN,AssassEntrance[0],AssassEntrance[1]-8, AssassEntrance[2], 0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000);
+ m_creature->SummonCreature(MOB_SHATTERED_ASSASSIN,AssassExit[0],AssassExit[1]+8, AssassExit[2], 0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000);
+ m_creature->SummonCreature(MOB_SHATTERED_ASSASSIN,AssassExit[0],AssassExit[1]-8, AssassExit[2], 0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
+ return;
+
+ if(Assassins_Timer)
+ if(Assassins_Timer < diff)
+ {
+ SpawnAssassin();
+ Assassins_Timer = 0;
+ }else Assassins_Timer -= diff;
+
+ if(InBlade)
+ {
+ if(Wait_Timer)
+ if(Wait_Timer < diff)
+ {
+ if(target_num <= 0)
+ {
+ // stop bladedance
+ InBlade = false;
+ m_creature->SetSpeed(MOVE_RUN,2);
+ (*m_creature).GetMotionMaster()->MoveChase(m_creature->getVictim());
+ Blade_Dance_Timer = 30000;
+ Wait_Timer = 0;
+ if(HeroicMode)
+ Charge_timer = 5000;
+ }
+ else
+ {
+ //move in bladedance
+ float x,y,randx,randy;
+ randx = (rand()%40);
+ randy = (rand()%40);
+ x = 210+ randx ;
+ y = -60- randy ;
+ (*m_creature).GetMotionMaster()->MovePoint(1,x,y,m_creature->GetPositionZ());
+ Wait_Timer = 0;
+ }
+ }else Wait_Timer -= diff;
+ }
+ else
+ {
+ if(Blade_Dance_Timer)
+ if(Blade_Dance_Timer < diff)
+ {
+ target_num = TARGET_NUM;
+ Wait_Timer = 1;
+ InBlade = true;
+ Blade_Dance_Timer = 0;
+ m_creature->SetSpeed(MOVE_RUN,4);
+ return;
+ }else Blade_Dance_Timer -= diff;
+
+ if(Charge_timer)
+ if(Charge_timer < diff)
+ {
+ DoCast(SelectUnit(SELECT_TARGET_RANDOM,0),H_SPELL_CHARGE);
+ Charge_timer = 0;
+ }else Charge_timer -= diff;
+
+ if (Summon_Assistant_Timer < diff)
+ {
+ Unit* target = NULL;
+ Creature* Summoned;
+
+ for(int i = 0; i < summoned; i++)
+ {
+ switch(rand()%3)
+ {
+ case 0: Summoned = m_creature->SummonCreature(MOB_HEARTHEN_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000); break;
+ case 1: Summoned = m_creature->SummonCreature(MOB_SHARPSHOOTER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000); break;
+ case 2: Summoned = m_creature->SummonCreature(MOB_REAVER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000); break;
+ }
+ }
+ if(rand()%100 < 20) summoned++;
+ Summon_Assistant_Timer = 15000 + (rand()%5000) ;
+ }else Summon_Assistant_Timer -= diff;
+
+ DoMeleeAttackIfReady();
+ }
+
+ if(resetcheck_timer < diff)
+ {
+ uint32 tempx,tempy;
+ tempx = m_creature->GetPositionX();
+ tempy = m_creature->GetPositionY();
+ if ( tempx > 255 || tempx < 205)
+ {
+ EnterEvadeMode();
+ }
+ resetcheck_timer = 5000;
+ }else resetcheck_timer -= diff;
+ }
+};
+
+CreatureAI* GetAI_boss_warchief_kargath_bladefist(Creature *_Creature)
+{
+ return new boss_warchief_kargath_bladefistAI (_Creature);
+}
+
+void AddSC_boss_warchief_kargath_bladefist()
+{
+ Script *newscript;
+ newscript = new Script;
+ newscript->Name="boss_warchief_kargath_bladefist";
+ newscript->GetAI = GetAI_boss_warchief_kargath_bladefist;
+ newscript->RegisterSelf();
+}