aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp7
-rw-r--r--src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp254
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp184
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp35
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp49
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp44
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp8
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp121
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp9
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/def_zulgurub.h47
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/instance_zulgurub.cpp221
11 files changed, 446 insertions, 533 deletions
diff --git a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp
index 5703158389e..7e03c2f57cd 100644
--- a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp
+++ b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp
@@ -1094,8 +1094,11 @@ bool GossipSelect_npc_death_knight_initiate(Player* pPlayer, Creature* pCreature
{
pPlayer->CLOSE_GOSSIP_MENU();
- if (CAST_AI(npc_death_knight_initiateAI, pCreature->AI())->m_bIsDuelInProgress)
- return true;
+ if (npc_death_knight_initiateAI* pInitiateAI = CAST_AI(npc_death_knight_initiateAI, pCreature->AI()))
+ {
+ if(pInitiateAI->m_bIsDuelInProgress)
+ return true;
+ }
pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15);
diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp
index 8f2e6210110..9fdbd9617b3 100644
--- a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp
+++ b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp
@@ -16,8 +16,8 @@
/* ScriptData
SDName: Boss_Gruul
-SD%Complete: 50
-SDComment: Ground Slam seriously messed up due to core problem
+SD%Complete: 60
+SDComment: Ground Slam need further development (knock back effect and shatter effect must be added to mangos)
SDCategory: Gruul's Lair
EndScriptData */
@@ -47,10 +47,9 @@ enum
SPELL_SHATTER_EFFECT = 33671,
SPELL_HURTFUL_STRIKE = 33813,
SPELL_STONED = 33652, //Spell is self cast by target
+
SPELL_MAGNETIC_PULL = 28337,
SPELL_KNOCK_BACK = 24199, //Knockback spell until correct implementation is made
-
- SPELL_GRONN_LORDS_GRASP = 33572 //Triggered by Ground Slam
};
struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
@@ -62,25 +61,24 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
ScriptedInstance *pInstance;
- uint32 Growth_Timer;
- uint32 CaveIn_Timer;
- uint32 CaveIn_StaticTimer;
- uint32 GroundSlamTimer;
- uint32 GroundSlamStage;
- uint32 PerformingGroundSlam;
- uint32 HurtfulStrike_Timer;
- uint32 Reverberation_Timer;
+ uint32 m_uiGrowth_Timer;
+ uint32 m_uiCaveIn_Timer;
+ uint32 m_uiCaveIn_StaticTimer;
+ uint32 m_uiGroundSlamTimer;
+ uint32 m_uiHurtfulStrike_Timer;
+ uint32 m_uiReverberation_Timer;
+
+ bool m_bPerformingGroundSlam;
void Reset()
{
- Growth_Timer= 30000;
- CaveIn_Timer= 27000;
- CaveIn_StaticTimer = 30000;
- GroundSlamTimer= 35000;
- GroundSlamStage= 0;
- PerformingGroundSlam= false;
- HurtfulStrike_Timer= 8000;
- Reverberation_Timer= 60000+45000;
+ m_uiGrowth_Timer= 30000;
+ m_uiCaveIn_Timer= 27000;
+ m_uiCaveIn_StaticTimer = 30000;
+ m_uiGroundSlamTimer= 35000;
+ m_bPerformingGroundSlam= false;
+ m_uiHurtfulStrike_Timer= 8000;
+ m_uiReverberation_Timer= 60000+45000;
if (pInstance)
pInstance->SetData(DATA_GRUULEVENT, NOT_STARTED);
@@ -115,183 +113,131 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
}
}
- void UpdateAI(const uint32 diff)
+ void SpellHitTarget(Unit* pTarget, const SpellEntry* pSpell)
+ {
+ //This to emulate effect1 (77) of SPELL_GROUND_SLAM, knock back to any direction
+ //It's initially wrong, since this will cause fall damage, which is by comments, not intended.
+ if (pSpell->Id == SPELL_GROUND_SLAM)
+ {
+ if (pTarget->GetTypeId() == TYPEID_PLAYER)
+ {
+ switch(rand()%2)
+ {
+ case 0: pTarget->CastSpell(pTarget, SPELL_MAGNETIC_PULL, true, NULL, NULL, m_creature->GetGUID()); break;
+ case 1: pTarget->CastSpell(pTarget, SPELL_KNOCK_BACK, true, NULL, NULL, m_creature->GetGUID()); break;
+ }
+ }
+ }
+
+ //this part should be in mangos
+ if (pSpell->Id == SPELL_SHATTER)
+ {
+ //this spell must have custom handling in mangos, dealing damage based on distance
+ pTarget->CastSpell(pTarget, SPELL_SHATTER_EFFECT, true);
+
+ if (pTarget->HasAura(SPELL_STONED))
+ pTarget->RemoveAurasDueToSpell(SPELL_STONED);
+
+ //clear this, if we are still performing
+ if (m_bPerformingGroundSlam)
+ {
+ m_bPerformingGroundSlam = false;
+
+ //and correct movement, if not already
+ if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() != TARGETED_MOTION_TYPE)
+ {
+ if (m_creature->getVictim())
+ m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
+ }
+ }
+ }
+ }
+
+ void UpdateAI(const uint32 uiDiff)
{
//Return since we have no target
- if (!UpdateVictim() )
+ if (!UpdateVictim())
return;
// Growth
// Gruul can cast this spell up to 30 times
- if (Growth_Timer < diff)
+ if (m_uiGrowth_Timer < uiDiff)
{
DoScriptText(EMOTE_GROW, m_creature);
DoCast(m_creature,SPELL_GROWTH);
- Growth_Timer = 30000;
- }else Growth_Timer -= diff;
+ m_uiGrowth_Timer = 30000;
+ }
+ else
+ m_uiGrowth_Timer -= uiDiff;
- if (PerformingGroundSlam)
+ if (m_bPerformingGroundSlam)
{
- if (GroundSlamTimer < diff)
+ if (m_uiGroundSlamTimer < uiDiff)
{
- switch(GroundSlamStage)
- {
- case 0:
- {
- //Begin the whole ordeal
- std::list<HostilReference*>& m_threatlist = m_creature->getThreatManager().getThreatList();
-
- std::vector<Unit*> knockback_targets;
-
- //First limit the list to only players
- for(std::list<HostilReference*>::iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
- {
- Unit *target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid());
-
- if (target && target->GetTypeId() == TYPEID_PLAYER)
- knockback_targets.push_back(target);
- }
-
- //Now to totally disoriend those players
- for(std::vector<Unit*>::iterator itr = knockback_targets.begin(); itr!= knockback_targets.end(); ++itr)
- {
- Unit *target = *itr;
- Unit *target2 = *(knockback_targets.begin() + rand()%knockback_targets.size());
-
- if (target && target2)
- {
- switch(rand()%2)
- {
- case 0: target2->CastSpell(target, SPELL_MAGNETIC_PULL, true, NULL, NULL, m_creature->GetGUID()); break;
- case 1: target2->CastSpell(target, SPELL_KNOCK_BACK, true, NULL, NULL, m_creature->GetGUID()); break;
- }
- }
- }
-
- GroundSlamTimer = 7000;
- break;
- }
-
- case 1:
- {
- //Players are going to get stoned
- std::list<HostilReference*>& m_threatlist = m_creature->getThreatManager().getThreatList();
-
- for(std::list<HostilReference*>::iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
- {
- Unit *target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid());
-
- if(target)
- {
- target->RemoveAurasDueToSpell(SPELL_GRONN_LORDS_GRASP);
- target->CastSpell(target, SPELL_STONED, true, NULL, NULL, m_creature->GetGUID());
- }
- }
-
- GroundSlamTimer = 5000;
- break;
- }
-
- case 2:
- {
- //The dummy shatter spell is cast
- DoCast(m_creature, SPELL_SHATTER);
- GroundSlamTimer = 1000;
- break;
- }
-
- case 3:
- {
- //Shatter takes effect
- std::list<HostilReference*>& m_threatlist = m_creature->getThreatManager().getThreatList();
-
- for(std::list<HostilReference*>::iterator itr = m_threatlist.begin(); itr!= m_threatlist.end(); ++itr)
- {
- Unit *target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid());
-
- if(target)
- {
- target->RemoveAurasDueToSpell(SPELL_STONED);
-
- if(target->GetTypeId() == TYPEID_PLAYER)
- target->CastSpell(target, SPELL_SHATTER_EFFECT, false, NULL, NULL, m_creature->GetGUID());
- }
-
- }
-
- m_creature->GetMotionMaster()->Clear();
-
- Unit *victim = m_creature->getVictim();
- if (victim)
- {
- m_creature->GetMotionMaster()->MoveChase(victim);
- m_creature->SetUInt64Value(UNIT_FIELD_TARGET, victim->GetGUID());
- }
-
- PerformingGroundSlam = false;
- GroundSlamTimer =120000;
- HurtfulStrike_Timer= 8000;
-
- if (Reverberation_Timer < 10000) //Give a little time to the players to undo the damage from shatter
- Reverberation_Timer += 10000;
-
- break;
- }
- }
+ m_uiGroundSlamTimer =120000;
+ m_uiHurtfulStrike_Timer= 8000;
- GroundSlamStage++;
+ if (m_uiReverberation_Timer < 10000) //Give a little time to the players to undo the damage from shatter
+ m_uiReverberation_Timer += 10000;
+
+ DoCast(m_creature, SPELL_SHATTER);
}
else
- GroundSlamTimer-=diff;
+ m_uiGroundSlamTimer -= uiDiff;
}
else
{
// Hurtful Strike
- if (HurtfulStrike_Timer < diff)
+ if (m_uiHurtfulStrike_Timer < uiDiff)
{
- Unit* target = NULL;
- target = SelectUnit(SELECT_TARGET_TOPAGGRO,1);
+ Unit* target = SelectUnit(SELECT_TARGET_TOPAGGRO,1);
if (target && m_creature->IsWithinMeleeRange(m_creature->getVictim()))
DoCast(target,SPELL_HURTFUL_STRIKE);
else
DoCast(m_creature->getVictim(),SPELL_HURTFUL_STRIKE);
- HurtfulStrike_Timer= 8000;
- }else HurtfulStrike_Timer -= diff;
+ m_uiHurtfulStrike_Timer= 8000;
+ }
+ else
+ m_uiHurtfulStrike_Timer -= uiDiff;
// Reverberation
- if (Reverberation_Timer < diff)
+ if (m_uiReverberation_Timer < uiDiff)
{
DoCast(m_creature->getVictim(), SPELL_REVERBERATION, true);
- Reverberation_Timer = 15000 + rand()%10000;
- }else Reverberation_Timer -= diff;
+ m_uiReverberation_Timer = 15000 + rand()%10000;
+ }
+ else
+ m_uiReverberation_Timer -= uiDiff;
// Cave In
- if (CaveIn_Timer < diff)
+ if (m_uiCaveIn_Timer < uiDiff)
{
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target,SPELL_CAVE_IN);
- if(CaveIn_StaticTimer >= 4000)
- CaveIn_StaticTimer -= 2000;
+ if(m_uiCaveIn_StaticTimer >= 4000)
+ m_uiCaveIn_StaticTimer -= 2000;
- CaveIn_Timer = CaveIn_StaticTimer;
-
- }else CaveIn_Timer -= diff;
+ m_uiCaveIn_Timer = m_uiCaveIn_StaticTimer;
+ }
+ else
+ m_uiCaveIn_Timer -= uiDiff;
// Ground Slam, Gronn Lord's Grasp, Stoned, Shatter
- if (GroundSlamTimer < diff)
+ if (m_uiGroundSlamTimer < uiDiff)
{
m_creature->GetMotionMaster()->Clear();
m_creature->GetMotionMaster()->MoveIdle();
- m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0);
- PerformingGroundSlam= true;
- GroundSlamTimer = 0;
- GroundSlamStage = 0;
- DoCast(m_creature->getVictim(), SPELL_GROUND_SLAM);
- } else GroundSlamTimer -=diff;
+ m_bPerformingGroundSlam= true;
+ m_uiGroundSlamTimer = 10000;
+
+ DoCast(m_creature, SPELL_GROUND_SLAM);
+ }
+ else
+ m_uiGroundSlamTimer -= uiDiff;
DoMeleeAttackIfReady();
}
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp
index 9789d362ab9..9e020ed495f 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp
@@ -24,101 +24,126 @@ EndScriptData */
#include "precompiled.h"
#include "def_zulgurub.h"
-#define SAY_AGGRO -1309011
-#define SAY_FEAST_PANTHER -1309012
-#define SAY_DEATH -1309013
+bool GOHello_go_gong_of_bethekk(Player* pPlayer, GameObject* pGo)
+{
+ if (ScriptedInstance* m_pInstance = (ScriptedInstance*)pGo->GetInstanceData())
+ {
+ if (m_pInstance->GetData(TYPE_ARLOKK) == DONE || m_pInstance->GetData(TYPE_ARLOKK) == IN_PROGRESS)
+ return true;
+
+ m_pInstance->SetData(TYPE_ARLOKK, IN_PROGRESS);
+ }
+
+ return false;
+}
+
+enum
+{
+ SAY_AGGRO = -1309011,
+ SAY_FEAST_PANTHER = -1309012,
+ SAY_DEATH = -1309013,
-#define SPELL_SHADOWWORDPAIN 23952
-#define SPELL_GOUGE 24698
-#define SPELL_MARK 24210
-#define SPELL_CLEAVE 26350 //Perhaps not right. Not a red aura...
-#define SPELL_PANTHER_TRANSFORM 24190
+ SPELL_SHADOWWORDPAIN = 23952,
+ SPELL_GOUGE = 24698,
+ SPELL_MARK = 24210,
+ SPELL_CLEAVE = 26350, //Perhaps not right. Not a red aura...
+ SPELL_PANTHER_TRANSFORM = 24190,
+
+ MODEL_ID_NORMAL = 15218,
+ MODEL_ID_PANTHER = 15215,
+ MODEL_ID_BLANK = 11686,
+
+ NPC_ZULIAN_PROWLER = 15101
+};
struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
{
boss_arlokkAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
- uint32 ShadowWordPain_Timer;
- uint32 Gouge_Timer;
- uint32 Mark_Timer;
- uint32 Cleave_Timer;
- uint32 Vanish_Timer;
- uint32 Summon_Timer;
- uint32 Visible_Timer;
+ uint32 m_uiShadowWordPain_Timer;
+ uint32 m_uiGouge_Timer;
+ uint32 m_uiMark_Timer;
+ uint32 m_uiCleave_Timer;
+ uint32 m_uiVanish_Timer;
+ uint32 m_uiSummon_Timer;
+ uint32 m_uiVisible_Timer;
uint64 markedTargetGUID;
uint32 Counter;
- bool PhaseTwo;
- bool VanishedOnce;
+ bool m_bPhaseTwo;
+ bool m_bVanishedOnce;
void Reset()
{
- ShadowWordPain_Timer = 8000;
- Gouge_Timer = 14000;
- Mark_Timer = 35000;
- Cleave_Timer = 4000;
- Vanish_Timer = 60000;
- Summon_Timer = 5000;
- Visible_Timer = 6000;
+ m_uiShadowWordPain_Timer = 8000;
+ m_uiGouge_Timer = 14000;
+ m_uiMark_Timer = 35000;
+ m_uiCleave_Timer = 4000;
+ m_uiVanish_Timer = 60000;
+ m_uiSummon_Timer = 5000;
+ m_uiVisible_Timer = 6000;
Counter = 0;
markedTargetGUID = 0;
- PhaseTwo = false;
- VanishedOnce = false;
+ m_bPhaseTwo = false;
+ m_bVanishedOnce = false;
- m_creature->SetDisplayId(15218);
+ m_creature->SetDisplayId(MODEL_ID_NORMAL);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
- void EnterCombat(Unit *who)
+ void EnterCombat(Unit* pWho)
{
DoScriptText(SAY_AGGRO, m_creature);
}
- void JustDied(Unit* Killer)
+ void JustDied(Unit* pKiller)
{
DoScriptText(SAY_DEATH, m_creature);
- m_creature->SetDisplayId(15218);
+ m_creature->SetDisplayId(MODEL_ID_NORMAL);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- if(pInstance)
- pInstance->SetData(DATA_ARLOKK_DEATH, 0);
+ if(m_pInstance)
+ m_pInstance->SetData(TYPE_ARLOKK, DONE);
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(const uint32 uiDiff)
{
if (!UpdateVictim())
return;
if( m_creature->getVictim() && m_creature->isAlive())
{
- if (!PhaseTwo && ShadowWordPain_Timer < diff)
+ if (!m_bPhaseTwo && m_uiShadowWordPain_Timer < uiDiff)
{
DoCast(m_creature->getVictim(),SPELL_SHADOWWORDPAIN);
- ShadowWordPain_Timer = 15000;
- }else ShadowWordPain_Timer -= diff;
+ m_uiShadowWordPain_Timer = 15000;
+ }
+ else
+ m_uiShadowWordPain_Timer -= uiDiff;
- if (!PhaseTwo && Mark_Timer < diff)
+ if (!m_bPhaseTwo && m_uiMark_Timer < uiDiff)
{
if(Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0, true))
{
DoCast(target, SPELL_MARK);
markedTargetGUID = target->GetGUID();
}
- Mark_Timer = 15000;
- }else Mark_Timer -= diff;
+ m_uiMark_Timer = 15000;
+ }
+ else
+ m_uiMark_Timer -= uiDiff;
- if (Summon_Timer < diff && Counter < 31)
+ if (m_uiSummon_Timer < uiDiff && Counter < 31)
{
- Unit* target = NULL;
- target = SelectUnit(SELECT_TARGET_RANDOM,0);
+ Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0);
Creature *Panther = m_creature->SummonCreature(15101,-11532.79980,-1649.6734,41.4800,0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
Player *markedTarget = Unit::GetPlayer(markedTargetGUID);
@@ -127,7 +152,9 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
{
DoScriptText(SAY_FEAST_PANTHER, m_creature, markedTarget);
Panther ->AI()->AttackStart(markedTarget);
- }else if(Panther && target) Panther ->AI()->AttackStart(target);
+ }
+ else if(Panther && target)
+ Panther ->AI()->AttackStart(target);
Panther = m_creature->SummonCreature(15101,-11532.9970,-1606.4840,41.2979,0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
@@ -137,65 +164,74 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
Panther ->AI()->AttackStart(target);
Counter++;
- Summon_Timer = 5000;
- }else Summon_Timer -= diff;
+ m_uiSummon_Timer = 5000;
+ }
+ else
+ m_uiSummon_Timer -= uiDiff;
- if (Vanish_Timer < diff)
+ if (m_uiVanish_Timer < uiDiff)
{
//Invisble Model
- m_creature->SetDisplayId(11686);
+ m_creature->SetDisplayId(MODEL_ID_BLANK);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
//m_creature->CombatStop();
DoResetThreat();
- VanishedOnce = true;
- Vanish_Timer = 45000;
- Visible_Timer = 6000;
- }else Vanish_Timer -= diff;
+ m_bVanishedOnce = true;
+ m_uiVanish_Timer = 45000;
+ m_uiVisible_Timer = 6000;
+ }
+ else
+ m_uiVanish_Timer -= uiDiff;
- if (VanishedOnce)
+ if (m_bVanishedOnce)
{
- if(Visible_Timer < diff)
+ if(m_uiVisible_Timer < uiDiff)
{
- Unit* target = NULL;
- target = SelectUnit(SELECT_TARGET_RANDOM,0);
//The Panther Model
- m_creature->SetDisplayId(15215);
+ m_creature->SetDisplayId(MODEL_ID_PANTHER);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
const CreatureInfo *cinfo = m_creature->GetCreatureInfo();
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));
m_creature->UpdateDamagePhysical(BASE_ATTACK);
- if(target)
- AttackStart(target);
- //The Panther Model
- m_creature->SetDisplayId(15215);
- m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- PhaseTwo = true;
- }else Visible_Timer -= diff;
+
+ if(Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
+ AttackStart(pTarget);
+
+ m_bPhaseTwo = true;
+ }
+ else
+ m_uiVisible_Timer -= uiDiff;
}
//Cleave_Timer
- if(PhaseTwo && Cleave_Timer < diff)
+ if(m_bPhaseTwo && m_uiCleave_Timer < uiDiff)
{
DoCast(m_creature->getVictim(), SPELL_CLEAVE);
- Cleave_Timer = 16000;
- }Cleave_Timer -=diff;
+ m_uiCleave_Timer = 16000;
+ }
+ else
+ m_uiCleave_Timer -=uiDiff;
//Gouge_Timer
- if(PhaseTwo && Gouge_Timer < diff)
+ if(m_bPhaseTwo && m_uiGouge_Timer < uiDiff)
{
DoCast(m_creature->getVictim(), SPELL_GOUGE);
+
if(DoGetThreat(m_creature->getVictim()))
DoModifyThreatPercent(m_creature->getVictim(),-80);
- Gouge_Timer = 17000+rand()%10000;
- }else Gouge_Timer -= diff;
+ m_uiGouge_Timer = 17000+rand()%10000;
+ }
+ else
+ m_uiGouge_Timer -= uiDiff;
DoMeleeAttackIfReady();
}
}
};
+
CreatureAI* GetAI_boss_arlokk(Creature *_Creature)
{
return new boss_arlokkAI (_Creature);
@@ -204,6 +240,12 @@ CreatureAI* GetAI_boss_arlokk(Creature *_Creature)
void AddSC_boss_arlokk()
{
Script *newscript;
+
+ newscript = new Script;
+ newscript->Name = "go_gong_of_bethekk";
+ newscript->pGOHello = &GOHello_go_gong_of_bethekk;
+ newscript->RegisterSelf();
+
newscript = new Script;
newscript->Name="boss_arlokk";
newscript->GetAI = &GetAI_boss_arlokk;
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp
index 6879c04646f..0618fb9bf32 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp
@@ -46,10 +46,10 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI
{
boss_hakkarAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
uint32 BloodSiphon_Timer;
uint32 CorruptedBlood_Timer;
@@ -143,11 +143,11 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI
}else Enrage_Timer -= diff;
//Checking if Jeklik is dead. If not we cast her Aspect
- if(CheckJeklik_Timer < diff)
+ if (CheckJeklik_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(!pInstance->GetData(DATA_JEKLIKISDEAD))
+ if (m_pInstance->GetData(TYPE_JEKLIK) != DONE)
{
if (AspectOfJeklik_Timer < diff)
{
@@ -160,11 +160,11 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI
}else CheckJeklik_Timer -= diff;
//Checking if Venoxis is dead. If not we cast his Aspect
- if(CheckVenoxis_Timer < diff)
+ if (CheckVenoxis_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(!pInstance->GetData(DATA_VENOXISISDEAD))
+ if (m_pInstance->GetData(TYPE_VENOXIS) != DONE)
{
if (AspectOfVenoxis_Timer < diff)
{
@@ -177,11 +177,11 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI
}else CheckVenoxis_Timer -= diff;
//Checking if Marli is dead. If not we cast her Aspect
- if(CheckMarli_Timer < diff)
+ if (CheckMarli_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(!pInstance->GetData(DATA_MARLIISDEAD))
+ if (m_pInstance->GetData(TYPE_MARLI) != DONE)
{
if (AspectOfMarli_Timer < diff)
{
@@ -195,11 +195,11 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI
}else CheckMarli_Timer -= diff;
//Checking if Thekal is dead. If not we cast his Aspect
- if(CheckThekal_Timer < diff)
+ if (CheckThekal_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(!pInstance->GetData(DATA_THEKALISDEAD))
+ if (m_pInstance->GetData(TYPE_THEKAL) != DONE)
{
if (AspectOfThekal_Timer < diff)
{
@@ -212,11 +212,11 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI
}else CheckThekal_Timer -= diff;
//Checking if Arlokk is dead. If yes we cast her Aspect
- if(CheckArlokk_Timer < diff)
+ if (CheckArlokk_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(!pInstance->GetData(DATA_ARLOKKISDEAD))
+ if (m_pInstance->GetData(TYPE_ARLOKK) != DONE)
{
if (AspectOfArlokk_Timer < diff)
{
@@ -233,6 +233,7 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI
DoMeleeAttackIfReady();
}
};
+
CreatureAI* GetAI_boss_hakkar(Creature *_Creature)
{
return new boss_hakkarAI (_Creature);
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp
index d1ef25a03a8..da1cffea32d 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp
@@ -45,10 +45,10 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI
{
boss_jeklikAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
uint32 Charge_Timer;
uint32 SonicBurst_Timer;
@@ -87,8 +87,8 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI
{
DoScriptText(SAY_DEATH, m_creature);
- if(pInstance)
- pInstance->SetData(DATA_JEKLIK_DEATH, 0);
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_JEKLIK, DONE);
}
void UpdateAI(const uint32 diff)
@@ -96,7 +96,7 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI
if (!UpdateVictim())
return;
- if( m_creature->getVictim() && m_creature->isAlive())
+ if (m_creature->getVictim() && m_creature->isAlive())
{
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth() > 50))
{
@@ -132,27 +132,27 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI
if (target && Bat ) Bat ->AI()->AttackStart(target);
Bat = m_creature->SummonCreature(11368,-12289.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if(target && Bat ) Bat ->AI()->AttackStart(target);
+ if (target && Bat ) Bat ->AI()->AttackStart(target);
Bat = m_creature->SummonCreature(11368,-12293.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if(target && Bat ) Bat ->AI()->AttackStart(target);
+ if (target && Bat ) Bat ->AI()->AttackStart(target);
Bat = m_creature->SummonCreature(11368,-12291.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if(target && Bat ) Bat ->AI()->AttackStart(target);
+ if (target && Bat ) Bat ->AI()->AttackStart(target);
Bat = m_creature->SummonCreature(11368,-12289.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if(target && Bat ) Bat ->AI()->AttackStart(target);
+ if (target && Bat ) Bat ->AI()->AttackStart(target);
Bat = m_creature->SummonCreature(11368,-12293.6220,-1380.2640,144.8304,5.483, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if(target && Bat ) Bat ->AI()->AttackStart(target);
+ if (target && Bat ) Bat ->AI()->AttackStart(target);
SpawnBats_Timer = 60000;
}else SpawnBats_Timer -= diff;
}
else
{
- if(PhaseTwo)
+ if (PhaseTwo)
{
- if(PhaseTwo && ShadowWordPain_Timer < diff)
+ if (PhaseTwo && ShadowWordPain_Timer < diff)
{
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
{
@@ -161,34 +161,34 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI
}
}ShadowWordPain_Timer -=diff;
- if(MindFlay_Timer < diff)
+ if (MindFlay_Timer < diff)
{
DoCast(m_creature->getVictim(), SPELL_MIND_FLAY);
MindFlay_Timer = 16000;
}MindFlay_Timer -=diff;
- if(ChainMindFlay_Timer < diff)
+ if (ChainMindFlay_Timer < diff)
{
m_creature->InterruptNonMeleeSpells(false);
DoCast(m_creature->getVictim(), SPELL_CHAIN_MIND_FLAY);
ChainMindFlay_Timer = 15000 + rand()%15000;
}ChainMindFlay_Timer -=diff;
- if(GreaterHeal_Timer < diff)
+ if (GreaterHeal_Timer < diff)
{
m_creature->InterruptNonMeleeSpells(false);
DoCast(m_creature,SPELL_GREATERHEAL);
GreaterHeal_Timer = 25000 + rand()%10000;
}GreaterHeal_Timer -=diff;
- if(SpawnFlyingBats_Timer < diff)
+ if (SpawnFlyingBats_Timer < diff)
{
Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0);
- if(!target)
+ if (!target)
return;
Creature* FlyingBat = m_creature->SummonCreature(14965, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()+15, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
- if(FlyingBat)
+ if (FlyingBat)
FlyingBat->AI()->AttackStart(target);
SpawnFlyingBats_Timer = 10000 + rand()%5000;
@@ -212,10 +212,10 @@ struct TRINITY_DLL_DECL mob_batriderAI : public ScriptedAI
{
mob_batriderAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
uint32 Bomb_Timer;
uint32 Check_Timer;
@@ -236,7 +236,7 @@ struct TRINITY_DLL_DECL mob_batriderAI : public ScriptedAI
return;
//Bomb_Timer
- if(Bomb_Timer < diff)
+ if (Bomb_Timer < diff)
{
if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0))
{
@@ -246,14 +246,15 @@ struct TRINITY_DLL_DECL mob_batriderAI : public ScriptedAI
}else Bomb_Timer -= diff;
//Check_Timer
- if(Check_Timer < diff)
+ if (Check_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(pInstance->GetData(DATA_JEKLIKISDEAD))
+ if (m_pInstance->GetData(TYPE_JEKLIK) == DONE)
{
m_creature->setDeathState(JUST_DIED);
m_creature->RemoveCorpse();
+ return;
}
}
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp
index e2c3f306e8b..f5bd8fa9958 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp
@@ -46,7 +46,7 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
{
boss_mandokirAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
uint32 KillCount;
@@ -61,7 +61,7 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
float targetY;
float targetZ;
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
bool endWatch;
bool someWatched;
@@ -97,7 +97,7 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
void KilledUnit(Unit* victim)
{
- if(victim->GetTypeId() == TYPEID_PLAYER)
+ if (victim->GetTypeId() == TYPEID_PLAYER)
{
++KillCount;
@@ -105,9 +105,9 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
{
DoScriptText(SAY_DING_KILL, m_creature);
- if (pInstance)
+ if (m_pInstance)
{
- uint64 JindoGUID = pInstance->GetData64(DATA_JINDO);
+ uint64 JindoGUID = m_pInstance->GetData64(DATA_JINDO);
if (JindoGUID)
{
if (Unit* jTemp = Unit::GetUnit(*m_creature,JindoGUID))
@@ -130,12 +130,12 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
- if(!UpdateVictim())
+ if (!UpdateVictim())
return;
- if( m_creature->getVictim() && m_creature->isAlive())
+ if ( m_creature->getVictim() && m_creature->isAlive())
{
- if(!CombatStart)
+ if (!CombatStart)
{
//At combat Start Mandokir is mounted so we must unmount it first
m_creature->Unmount();
@@ -147,17 +147,17 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
if (Watch_Timer < diff) //Every 20 Sec Mandokir will check this
{
- if(WatchTarget) //If someone is watched and If the Position of the watched target is different from the one stored, or are attacking, mandokir will charge him
+ if (WatchTarget) //If someone is watched and If the Position of the watched target is different from the one stored, or are attacking, mandokir will charge him
{
Unit* pUnit = Unit::GetUnit(*m_creature, WatchTarget);
- if( pUnit && (
+ if ( pUnit && (
targetX != pUnit->GetPositionX() ||
targetY != pUnit->GetPositionY() ||
targetZ != pUnit->GetPositionZ() ||
pUnit->isInCombat()))
{
- if(m_creature->IsWithinMeleeRange(pUnit))
+ if (m_creature->IsWithinMeleeRange(pUnit))
{
DoCast(pUnit,24316);
}
@@ -197,7 +197,7 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
endWatch = false;
}
- if(!someWatched)
+ if (!someWatched)
{
//Cleave
if (Cleave_Timer < diff)
@@ -222,11 +222,11 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
for(; i != m_creature->getThreatManager().getThreatList().end(); ++i)
{
Unit* pUnit = Unit::GetUnit(*m_creature, (*i)->getUnitGuid());
- if(pUnit && m_creature->IsWithinMeleeRange(pUnit))
+ if (pUnit && m_creature->IsWithinMeleeRange(pUnit))
TargetInRange++;
}
- if(TargetInRange > 3)
+ if (TargetInRange > 3)
DoCast(m_creature->getVictim(),SPELL_FEAR);
Fear_Timer = 4000;
@@ -243,11 +243,11 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
}
}
//Checking if Ohgan is dead. If yes Mandokir will enrage.
- if(Check_Timer < diff)
+ if (Check_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(pInstance->GetData(DATA_OHGANISDEAD))
+ if (m_pInstance->GetData(TYPE_OHGAN) == DONE)
{
if (!RaptorDead)
{
@@ -270,11 +270,11 @@ struct TRINITY_DLL_DECL mob_ohganAI : public ScriptedAI
{
mob_ohganAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
uint32 SunderArmor_Timer;
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
void Reset()
{
@@ -285,8 +285,8 @@ struct TRINITY_DLL_DECL mob_ohganAI : public ScriptedAI
void JustDied(Unit* Killer)
{
- if(pInstance)
- pInstance->SetData(DATA_OHGAN_DEATH, 0);
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_OHGAN, DONE);
}
void UpdateAI (const uint32 diff)
@@ -296,7 +296,7 @@ struct TRINITY_DLL_DECL mob_ohganAI : public ScriptedAI
return;
//SunderArmor_Timer
- if(SunderArmor_Timer < diff)
+ if (SunderArmor_Timer < diff)
{
DoCast(m_creature->getVictim(), SPELL_SUNDERARMOR);
SunderArmor_Timer = 10000 + rand()%5000;
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp
index 78ddfcf1d9a..79fb6f9653d 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp
@@ -42,10 +42,10 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI
{
boss_marliAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
uint32 SpawnStartSpiders_Timer;
uint32 PoisonVolley_Timer;
@@ -81,8 +81,8 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI
void JustDied(Unit* Killer)
{
DoScriptText(SAY_DEATH, m_creature);
- if(pInstance)
- pInstance->SetData(DATA_MARLI_DEATH, 0);
+ if(m_pInstance)
+ m_pInstance->SetData(TYPE_MARLI, DONE);
}
void UpdateAI(const uint32 diff)
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp
index 5cd5fc61d8f..eb5d3d65114 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp
@@ -54,7 +54,7 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI
{
boss_thekalAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
uint32 MortalCleave_Timer;
@@ -67,7 +67,7 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI
uint32 Check_Timer;
uint32 Resurrect_Timer;
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
bool Enraged;
bool PhaseTwo;
bool WasDead;
@@ -87,9 +87,6 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI
Enraged = false;
PhaseTwo = false;
WasDead = false;
-
- if(pInstance)
- pInstance->SetData(DATA_THEKAL_ALIVE, 0);
}
void EnterCombat(Unit *who)
@@ -100,8 +97,14 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI
void JustDied(Unit* Killer)
{
DoScriptText(SAY_DEATH, m_creature);
- if(pInstance)
- pInstance->SetData(DATA_THEKAL_DEATH, 0);
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_THEKAL, DONE);
+ }
+
+ void JustReachedHome()
+ {
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_THEKAL, NOT_STARTED);
}
void UpdateAI(const uint32 diff)
@@ -110,32 +113,36 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI
return;
//Check_Timer for the death of LorKhan and Zath.
- if(!WasDead && Check_Timer < diff)
+ if (!WasDead && Check_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(pInstance->GetData(DATA_LORKHANISDEAD))
+ if (m_pInstance->GetData(TYPE_LORKHAN) == SPECIAL)
{
//Resurrect LorKhan
- if(Unit *pLorKhan = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_LORKHAN)))
+ if (Unit *pLorKhan = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_LORKHAN)))
{
pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pLorKhan->setFaction(14);
pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pLorKhan->SetHealth(int(pLorKhan->GetMaxHealth()*1.0));
+
+ m_pInstance->SetData(TYPE_LORKHAN, DONE);
}
}
- if(pInstance->GetData(DATA_ZATHISDEAD))
+ if (m_pInstance->GetData(TYPE_ZATH) == SPECIAL)
{
//Resurrect Zath
- Unit *pZath = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ZATH));
- if(pZath)
+ Unit *pZath = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_ZATH));
+ if (pZath)
{
pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pZath->setFaction(14);
pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pZath->SetHealth(int(pZath->GetMaxHealth()*1.0));
+
+ m_pInstance->SetData(TYPE_ZATH, DONE);
}
}
}
@@ -161,14 +168,14 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI
m_creature->SetStandState(UNIT_STAND_STATE_SLEEP);
m_creature->AttackStop();
- if(pInstance)
- pInstance->SetData(DATA_THEKALFAKE_DEATH, 0);
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_THEKAL, SPECIAL);
WasDead=true;
}
//Thekal will transform to Tiger if he died and was not resurrected after 10 seconds.
- if(!PhaseTwo && WasDead)
+ if (!PhaseTwo && WasDead)
{
if (Resurrect_Timer < diff)
{
@@ -240,7 +247,7 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
{
mob_zealot_lorkhanAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
uint32 Shield_Timer;
@@ -251,7 +258,7 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
bool FakeDeath;
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
void Reset()
{
@@ -263,8 +270,8 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
FakeDeath = false;
- if(pInstance)
- pInstance->SetData(DATA_LORKHAN_ALIVE, 0);
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_LORKHAN, NOT_STARTED);
m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -280,38 +287,38 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
return;
//Shield_Timer
- if(Shield_Timer < diff)
+ if (Shield_Timer < diff)
{
DoCast(m_creature,SPELL_SHIELD);
Shield_Timer = 61000;
}else Shield_Timer -= diff;
//BloodLust_Timer
- if(BloodLust_Timer < diff)
+ if (BloodLust_Timer < diff)
{
DoCast(m_creature,SPELL_BLOODLUST);
BloodLust_Timer = 20000+rand()%8000;
}else BloodLust_Timer -= diff;
//Casting Greaterheal to Thekal or Zath if they are in meele range.
- if(GreaterHeal_Timer < diff)
+ if (GreaterHeal_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- Unit *pThekal = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_THEKAL));
- Unit *pZath = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ZATH));
+ Unit *pThekal = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_THEKAL));
+ Unit *pZath = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_ZATH));
- if(!pThekal || !pZath)
+ if (!pThekal || !pZath)
return;
switch(rand()%2)
{
case 0:
- if(m_creature->IsWithinMeleeRange(pThekal))
+ if (m_creature->IsWithinMeleeRange(pThekal))
DoCast(pThekal, SPELL_GREATERHEAL);
break;
case 1:
- if(m_creature->IsWithinMeleeRange(pZath))
+ if (m_creature->IsWithinMeleeRange(pZath))
DoCast(pZath, SPELL_GREATERHEAL);
break;
}
@@ -321,21 +328,21 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
}else GreaterHeal_Timer -= diff;
//Disarm_Timer
- if(Disarm_Timer < diff)
+ if (Disarm_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_DISARM);
Disarm_Timer = 15000+rand()%10000;
}else Disarm_Timer -= diff;
//Check_Timer for the death of LorKhan and Zath.
- if(!FakeDeath && Check_Timer < diff)
+ if (!FakeDeath && Check_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(pInstance->GetData(DATA_THEKALISFAKEDEAD))
+ if (m_pInstance->GetData(TYPE_THEKAL) == SPECIAL)
{
//Resurrect Thekal
- if(Unit *pThekal = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_THEKAL)))
+ if (Unit *pThekal = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_THEKAL)))
{
pThekal->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pThekal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -344,10 +351,10 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
}
}
- if(pInstance->GetData(DATA_ZATHISDEAD))
+ if (m_pInstance->GetData(TYPE_ZATH) == SPECIAL)
{
//Resurrect Zath
- if(Unit *pZath = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_ZATH)))
+ if (Unit *pZath = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_ZATH)))
{
pZath->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pZath->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -367,8 +374,8 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI
m_creature->setFaction(35);
m_creature->AttackStop();
- if(pInstance)
- pInstance->SetData(DATA_LORKHAN_DEATH, 0);
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_LORKHAN, SPECIAL);
FakeDeath = true;
}
@@ -382,7 +389,7 @@ struct TRINITY_DLL_DECL mob_zealot_zathAI : public ScriptedAI
{
mob_zealot_zathAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
uint32 SweepingStrikes_Timer;
@@ -394,7 +401,7 @@ struct TRINITY_DLL_DECL mob_zealot_zathAI : public ScriptedAI
bool FakeDeath;
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
void Reset()
{
@@ -407,8 +414,8 @@ struct TRINITY_DLL_DECL mob_zealot_zathAI : public ScriptedAI
FakeDeath = false;
- if(pInstance)
- pInstance->SetData(DATA_ZATH_ALIVE, 0);
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_ZATH, NOT_STARTED);
m_creature->SetStandState(UNIT_STAND_STATE_STAND);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -424,53 +431,53 @@ struct TRINITY_DLL_DECL mob_zealot_zathAI : public ScriptedAI
return;
//SweepingStrikes_Timer
- if(SweepingStrikes_Timer < diff)
+ if (SweepingStrikes_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SWEEPINGSTRIKES);
SweepingStrikes_Timer = 22000+rand()%4000;
}else SweepingStrikes_Timer -= diff;
//SinisterStrike_Timer
- if(SinisterStrike_Timer < diff)
+ if (SinisterStrike_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SINISTERSTRIKE);
SinisterStrike_Timer = 8000+rand()%8000;
}else SinisterStrike_Timer -= diff;
//Gouge_Timer
- if(Gouge_Timer < diff)
+ if (Gouge_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_GOUGE);
- if(DoGetThreat(m_creature->getVictim()))
+ if (DoGetThreat(m_creature->getVictim()))
DoModifyThreatPercent(m_creature->getVictim(),-100);
Gouge_Timer = 17000+rand()%10000;
}else Gouge_Timer -= diff;
//Kick_Timer
- if(Kick_Timer < diff)
+ if (Kick_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_KICK);
Kick_Timer = 15000+rand()%10000;
}else Kick_Timer -= diff;
//Blind_Timer
- if(Blind_Timer < diff)
+ if (Blind_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_BLIND);
Blind_Timer = 10000+rand()%10000;
}else Blind_Timer -= diff;
//Check_Timer for the death of LorKhan and Zath.
- if(!FakeDeath && Check_Timer < diff)
+ if (!FakeDeath && Check_Timer < diff)
{
- if(pInstance)
+ if (m_pInstance)
{
- if(pInstance->GetData(DATA_LORKHANISDEAD))
+ if (m_pInstance->GetData(TYPE_LORKHAN) == SPECIAL)
{
//Resurrect LorKhan
- if(Unit *pLorKhan = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_LORKHAN)))
+ if (Unit *pLorKhan = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_LORKHAN)))
{
pLorKhan->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pLorKhan->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -479,10 +486,10 @@ struct TRINITY_DLL_DECL mob_zealot_zathAI : public ScriptedAI
}
}
- if(pInstance->GetData(DATA_THEKALISFAKEDEAD))
+ if (m_pInstance->GetData(TYPE_THEKAL) == SPECIAL)
{
//Resurrect Thekal
- if(Unit *pThekal = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_THEKAL)))
+ if (Unit *pThekal = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_THEKAL)))
{
pThekal->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
pThekal->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -502,8 +509,8 @@ struct TRINITY_DLL_DECL mob_zealot_zathAI : public ScriptedAI
m_creature->setFaction(35);
m_creature->AttackStop();
- if(pInstance)
- pInstance->SetData(DATA_ZATH_DEATH, 0);
+ if (m_pInstance)
+ m_pInstance->SetData(TYPE_ZATH, SPECIAL);
FakeDeath = true;
}
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp
index cd073099df1..ded78244534 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp
@@ -41,10 +41,10 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI
{
boss_venoxisAI(Creature *c) : ScriptedAI(c)
{
- pInstance = c->GetInstanceData();
+ m_pInstance = c->GetInstanceData();
}
- ScriptedInstance *pInstance;
+ ScriptedInstance *m_pInstance;
uint32 HolyFire_Timer;
uint32 HolyWrath_Timer;
@@ -80,8 +80,8 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI
void JustDied(Unit* Killer)
{
DoScriptText(SAY_DEATH, m_creature);
- if(pInstance)
- pInstance->SetData(DATA_VENOXIS_DEATH, 0);
+ if(m_pInstance)
+ m_pInstance->SetData(TYPE_VENOXIS, DONE);
}
void UpdateAI(const uint32 diff)
@@ -183,6 +183,7 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI
}
};
+
CreatureAI* GetAI_boss_venoxis(Creature *_Creature)
{
return new boss_venoxisAI (_Creature);
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/def_zulgurub.h b/src/bindings/scripts/scripts/zone/zulgurub/def_zulgurub.h
index f14bd8eca98..3aab5b24b56 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/def_zulgurub.h
+++ b/src/bindings/scripts/scripts/zone/zulgurub/def_zulgurub.h
@@ -5,33 +5,24 @@
#ifndef DEF_ZULGURUB_H
#define DEF_ZULGURUB_H
-#define DATA_ARLOKKISDEAD 1
-#define DATA_ARLOKK_DEATH 2
-#define DATA_JEKLIKISDEAD 3
-#define DATA_JEKLIK_DEATH 4
-#define DATA_JINDO 5
-#define DATA_LORKHAN 6
-#define DATA_LORKHANISALIVE 7
-#define DATA_LORKHANISDEAD 8
-#define DATA_LORKHAN_ALIVE 9
-#define DATA_LORKHAN_DEATH 10
-#define DATA_MARLIISDEAD 11
-#define DATA_MARLI_DEATH 12
-#define DATA_OHGANISDEAD 13
-#define DATA_OHGAN_DEATH 14
-#define DATA_THEKAL 15
-#define DATA_THEKALFAKE_DEATH 16
-#define DATA_THEKALISALIVE 17
-#define DATA_THEKALISDEAD 18
-#define DATA_THEKALISFAKEDEAD 19
-#define DATA_THEKAL_ALIVE 20
-#define DATA_THEKAL_DEATH 21
-#define DATA_VENOXISISDEAD 22
-#define DATA_VENOXIS_DEATH 23
-#define DATA_ZATH 24
-#define DATA_ZATHISALIVE 25
-#define DATA_ZATHISDEAD 26
-#define DATA_ZATH_ALIVE 27
-#define DATA_ZATH_DEATH 28
+enum
+{
+ MAX_ENCOUNTERS = 8,
+
+ TYPE_ARLOKK = 1,
+ TYPE_JEKLIK = 2,
+ TYPE_VENOXIS = 3,
+ TYPE_MARLI = 4,
+ TYPE_OHGAN = 5,
+ TYPE_THEKAL = 6,
+ TYPE_ZATH = 7,
+ TYPE_LORKHAN = 8,
+
+ DATA_JINDO = 10,
+ DATA_LORKHAN = 11,
+ DATA_THEKAL = 12,
+ DATA_ZATH = 13
+};
+
#endif
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/instance_zulgurub.cpp b/src/bindings/scripts/scripts/zone/zulgurub/instance_zulgurub.cpp
index e09335bba92..1cce42d2b4c 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/instance_zulgurub.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/instance_zulgurub.cpp
@@ -26,51 +26,26 @@ EndScriptData */
struct TRINITY_DLL_DECL instance_zulgurub : public ScriptedInstance
{
- instance_zulgurub(Map *map) : ScriptedInstance(map) {Initialize();};
+ instance_zulgurub(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
//If all High Priest bosses were killed. Lorkhan, Zath and Ohgan are added too.
- bool IsBossDied[9];
+ uint32 m_auiEncounter[MAX_ENCOUNTERS];
//Storing Lorkhan, Zath and Thekal because we need to cast on them later. Jindo is needed for healfunction too.
- uint64 LorKhanGUID;
- uint64 ZathGUID;
- uint64 ThekalGUID;
- uint64 JindoGUID;
-
- void OnCreatureCreate(Creature *creature, bool add)
- {
- switch (creature->GetEntry())
- {
- case 11347:
- LorKhanGUID = creature->GetGUID();
- break;
-
- case 11348:
- ZathGUID = creature->GetGUID();
- break;
-
- case 14509:
- ThekalGUID = creature->GetGUID();
- break;
-
- case 11380:
- JindoGUID = creature->GetGUID();
- break;
- }
- }
+ uint64 m_uiLorKhanGUID;
+ uint64 m_uiZathGUID;
+ uint64 m_uiThekalGUID;
+ uint64 m_uiJindoGUID;
void Initialize()
{
- IsBossDied[0] = false;
- IsBossDied[1] = false;
- IsBossDied[2] = false;
- IsBossDied[3] = false;
- IsBossDied[4] = false;
- IsBossDied[5] = false;
- IsBossDied[6] = false;
-
- IsBossDied[7] = false;
- IsBossDied[8] = false;
+ m_uiLorKhanGUID = 0;
+ m_uiZathGUID = 0;
+ m_uiThekalGUID = 0;
+ m_uiJindoGUID = 0;
+
+ for(uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
+ m_auiEncounter[i] = NOT_STARTED;
}
bool IsEncounterInProgress() const
@@ -79,153 +54,99 @@ struct TRINITY_DLL_DECL instance_zulgurub : public ScriptedInstance
return false;
}
- uint32 GetData(uint32 type)
+ void OnCreatureCreate(Creature* pCreature)
{
- switch(type)
+ switch(pCreature->GetEntry())
{
- case DATA_JEKLIKISDEAD:
- if(IsBossDied[0])
- return 1;
- break;
-
- case DATA_VENOXISISDEAD:
- if(IsBossDied[1])
- return 1;
- break;
-
- case DATA_MARLIISDEAD:
- if(IsBossDied[2])
- return 1;
- break;
-
- case DATA_THEKALISDEAD:
- if(IsBossDied[3])
- return 1;
- break;
+ case 11347: m_uiLorKhanGUID = pCreature->GetGUID(); break;
+ case 11348: m_uiZathGUID = pCreature->GetGUID(); break;
+ case 14509: m_uiThekalGUID = pCreature->GetGUID(); break;
+ case 11380: m_uiJindoGUID = pCreature->GetGUID(); break;
+ }
+ }
- case DATA_ARLOKKISDEAD:
- if(IsBossDied[4])
- return 1;
+ void SetData(uint32 uiType, uint32 uiData)
+ {
+ switch(uiType)
+ {
+ case TYPE_ARLOKK:
+ m_auiEncounter[0] = uiData;
break;
- case DATA_LORKHANISDEAD:
- if(IsBossDied[5])
- return 1;
+ case TYPE_JEKLIK:
+ m_auiEncounter[1] = uiData;
break;
- case DATA_ZATHISDEAD:
- if(IsBossDied[6])
- return 1;
+ case TYPE_VENOXIS:
+ m_auiEncounter[2] = uiData;
break;
- case DATA_THEKALISFAKEDEAD:
- if(IsBossDied[7])
- return 1;
+ case TYPE_MARLI:
+ m_auiEncounter[3] = uiData;
break;
- case DATA_OHGANISDEAD:
- if(IsBossDied[8])
- return 1;
+ case TYPE_THEKAL:
+ m_auiEncounter[4] = uiData;
break;
- //Boss is not dead. Resetting function for some bosses after killing them but whiping at the complete encounter.
-
- case DATA_THEKALISALIVE:
- if(IsBossDied[3])
- return 0;
+ case TYPE_LORKHAN:
+ m_auiEncounter[5] = uiData;
break;
- case DATA_LORKHANISALIVE:
- if(IsBossDied[5])
- return 0;
+ case TYPE_ZATH:
+ m_auiEncounter[6] = uiData;
break;
- case DATA_ZATHISALIVE:
- if(IsBossDied[6])
- return 0;
+ case TYPE_OHGAN:
+ m_auiEncounter[7] = uiData;
break;
}
+ }
+ uint32 GetData(uint32 uiType)
+ {
+ switch(uiType)
+ {
+ case TYPE_ARLOKK:
+ return m_auiEncounter[0];
+ case TYPE_JEKLIK:
+ return m_auiEncounter[1];
+ case TYPE_VENOXIS:
+ return m_auiEncounter[2];
+ case TYPE_MARLI:
+ return m_auiEncounter[3];
+ case TYPE_THEKAL:
+ return m_auiEncounter[4];
+ case TYPE_LORKHAN:
+ return m_auiEncounter[5];
+ case TYPE_ZATH:
+ return m_auiEncounter[6];
+ case TYPE_OHGAN:
+ return m_auiEncounter[7];
+ }
return 0;
}
- uint64 GetData64 (uint32 identifier)
+ uint64 GetData64(uint32 uiData)
{
- switch(identifier)
+ switch(uiData)
{
case DATA_LORKHAN:
- return LorKhanGUID;
-
+ return m_uiLorKhanGUID;
case DATA_ZATH:
- return ZathGUID;
-
+ return m_uiZathGUID;
case DATA_THEKAL:
- return ThekalGUID;
-
+ return m_uiThekalGUID;
case DATA_JINDO:
- return JindoGUID;
+ return m_uiJindoGUID;
}
return 0;
- } // end GetData64
-
- void SetData(uint32 type, uint32 data)
- {
- switch(type)
- {
- case DATA_JEKLIK_DEATH:
- IsBossDied[0] = true;
- break;
-
- case DATA_VENOXIS_DEATH:
- IsBossDied[1] = true;
- break;
-
- case DATA_MARLI_DEATH:
- IsBossDied[2] = true;
- break;
-
- case DATA_THEKAL_DEATH:
- IsBossDied[3] = true;
- break;
-
- case DATA_ARLOKK_DEATH:
- IsBossDied[4] = true;
- break;
-
- case DATA_LORKHAN_DEATH:
- IsBossDied[5] = true;
- break;
-
- case DATA_ZATH_DEATH:
- IsBossDied[6] = true;
- break;
-
- case DATA_THEKALFAKE_DEATH:
- IsBossDied[7] = true;
- break;
-
- case DATA_OHGAN_DEATH:
- IsBossDied[8] = true;
- break;
-
- case DATA_LORKHAN_ALIVE:
- IsBossDied[5] = false;
- break;
-
- case DATA_ZATH_ALIVE:
- IsBossDied[6] = false;
- break;
-
- case DATA_THEKAL_ALIVE:
- IsBossDied[7] = false;
- break;
- }
}
};
-InstanceData* GetInstanceData_instance_zulgurub(Map* map)
+InstanceData* GetInstanceData_instance_zulgurub(Map* pMap)
{
- return new instance_zulgurub(map);
+ return new instance_zulgurub(pMap);
}
void AddSC_instance_zulgurub()