aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/scripts/northrend/nexus/oculus/boss_drakos.cpp115
1 files changed, 53 insertions, 62 deletions
diff --git a/src/scripts/northrend/nexus/oculus/boss_drakos.cpp b/src/scripts/northrend/nexus/oculus/boss_drakos.cpp
index 29bbf071386..7d276206339 100644
--- a/src/scripts/northrend/nexus/oculus/boss_drakos.cpp
+++ b/src/scripts/northrend/nexus/oculus/boss_drakos.cpp
@@ -53,28 +53,29 @@ enum
struct boss_drakosAI : public ScriptedAI
{
- boss_drakosAI(Creature *c) : ScriptedAI(c), lSummons(me)
+ boss_drakosAI(Creature* pCreature) : ScriptedAI(pCreature), lSummons(me)
{
- pInstance = c->GetInstanceData();
+ pInstance = pCreature->GetInstanceData();
}
- uint32 uiMagicPullTimer ;
- uint32 uiStompTimer ;
- uint32 uiBombSummonTimer ;
- uint32 uiPostPullTimer ;
- bool bIsPulling ;
- bool bPostPull ;
+ uint32 uiMagicPullTimer;
+ uint32 uiStompTimer;
+ uint32 uiBombSummonTimer;
+
+ bool bPostPull;
+
ScriptedInstance* pInstance;
SummonList lSummons;
void Reset()
{
lSummons.DespawnAll();
- uiMagicPullTimer = urand(12*IN_MILISECONDS, 15*IN_MILISECONDS);
- uiStompTimer = urand(3*IN_MILISECONDS, 6*IN_MILISECONDS);
- uiBombSummonTimer = 2*IN_MILISECONDS;
+ uiMagicPullTimer = 15000;
+ uiStompTimer = 17000;
+ uiBombSummonTimer = 2000;
+
bPostPull = false;
- bIsPulling = false;
+
if (pInstance)
pInstance->SetData(DATA_DRAKOS_EVENT, NOT_STARTED);
}
@@ -87,66 +88,54 @@ struct boss_drakosAI : public ScriptedAI
pInstance->SetData(DATA_DRAKOS_EVENT, IN_PROGRESS);
}
- void JustSummoned(Creature* summon)
+ void JustSummoned(Creature* pSummon)
{
- lSummons.Summon(summon);
+ lSummons.Summon(pSummon);
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(const uint32 uiDiff)
{
//Return since we have no target
if (!UpdateVictim())
return;
- if (uiBombSummonTimer < diff)
+ if (uiBombSummonTimer <= uiDiff)
{
- if (bPostPull)
- {
- me->SummonCreature(NPC_UNSTABLE_SPHERE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
- me->SummonCreature(NPC_UNSTABLE_SPHERE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
- }
- else
- me->SummonCreature(NPC_UNSTABLE_SPHERE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
- uiBombSummonTimer = 2*IN_MILISECONDS;
- } else uiBombSummonTimer -= diff;
+ Position pPosition;
+ me->GetPosition(&pPosition);
- if (uiMagicPullTimer < diff)
- {
- if (bIsPulling)
+ if (bPostPull)
{
- if (pInstance)
+ for (uint8 uiI = 0; uiI >= 3; uiI++)
{
- Map::PlayerList const &players = pInstance->instance->GetPlayers();
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- DoCast(itr->getSource(), SPELL_MAGIC_PULL_EFFECT, true);
+ me->GetRandomNearPosition(pPosition, float(urand(0,10)));
+ me->SummonCreature(NPC_UNSTABLE_SPHERE, pPosition);
}
- bIsPulling = false;
- bPostPull = true;
- uiPostPullTimer = 4*IN_MILISECONDS;
- uiMagicPullTimer = urand(15*IN_MILISECONDS, 25*IN_MILISECONDS);
}
else
{
- DoScriptText(RAND(SAY_PULL_1,SAY_PULL_2,SAY_PULL_3,SAY_PULL_4), me);
- DoCast(SPELL_MAGIC_PULL);
- uiMagicPullTimer = 2*IN_MILISECONDS;
- bIsPulling = true;
+ me->GetRandomNearPosition(pPosition, float(urand(0,10)));
+ me->SummonCreature(NPC_UNSTABLE_SPHERE, pPosition);
}
- } else uiMagicPullTimer -= diff;
- if (bPostPull)
+ uiBombSummonTimer = 2000;
+ } else uiBombSummonTimer -= uiDiff;
+
+ if (uiMagicPullTimer <= uiDiff)
{
- if (uiPostPullTimer < diff)
- bPostPull = false;
- else uiPostPullTimer -= diff;
- }
+ DoCast(SPELL_MAGIC_PULL);
+
+ bPostPull = true;
+
+ uiMagicPullTimer = 15000;
+ } else uiMagicPullTimer -= uiDiff;
- if (uiStompTimer < diff)
+ if (uiStompTimer <= uiDiff)
{
DoScriptText(RAND(SAY_STOMP_1,SAY_STOMP_2,SAY_STOMP_3), me);
DoCast(SPELL_THUNDERING_STOMP);
- uiStompTimer = urand(15*IN_MILISECONDS, 18*IN_MILISECONDS);
- } else uiStompTimer -= diff ;
+ uiStompTimer = 17000;
+ } else uiStompTimer -= uiDiff;
DoMeleeAttackIfReady();
}
@@ -161,8 +150,10 @@ struct boss_drakosAI : public ScriptedAI
// start achievement timer (kill Eregos within 20 min)
pInstance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
+
+ lSummons.DespawnAll();
}
- void KilledUnit(Unit * /*victim*/)
+ void KilledUnit(Unit* /*victim*/)
{
DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2,SAY_KILL_3), me);
}
@@ -175,34 +166,34 @@ CreatureAI* GetAI_boss_drakos(Creature* pCreature)
struct npc_unstable_sphereAI : public ScriptedAI
{
- npc_unstable_sphereAI(Creature *c) : ScriptedAI(c) {}
+ npc_unstable_sphereAI(Creature* pCreature) : ScriptedAI(pCreature) {}
uint32 uiPulseTimer;
uint32 uiDeathTimer;
void Reset()
{
- me->SetReactState(REACT_PASSIVE) ;
+ me->SetReactState(REACT_PASSIVE);
me->GetMotionMaster()->MoveRandom(40.0f);
- me->SetSpeed(MOVE_RUN, 2, true);
- me->setFaction(14);
+
me->AddAura(SPELL_UNSTABLE_SPHERE_PASSIVE, me);
me->AddAura(SPELL_UNSTABLE_SPHERE_TIMER, me);
- uiPulseTimer = 3*IN_MILISECONDS;
- uiDeathTimer = 19*IN_MILISECONDS;
+
+ uiPulseTimer = 3000;
+ uiDeathTimer = 19000;
}
- void UpdateAI(const uint32 diff)
+ void UpdateAI(const uint32 uiDiff)
{
- if (uiPulseTimer < diff)
+ if (uiPulseTimer <= uiDiff)
{
DoCast(SPELL_UNSTABLE_SPHERE_PULSE);
uiPulseTimer = 3*IN_MILISECONDS;
- } else uiPulseTimer -= diff;
+ } else uiPulseTimer -= uiDiff;
- if (uiDeathTimer < diff)
+ if (uiDeathTimer <= uiDiff)
me->DisappearAndDie();
- else uiDeathTimer -= diff;
+ else uiDeathTimer -= uiDiff;
}
};
@@ -213,7 +204,7 @@ CreatureAI* GetAI_npc_unstable_sphere(Creature* pCreature)
void AddSC_boss_drakos()
{
- Script *newscript;
+ Script* newscript;
newscript = new Script;
newscript->Name = "boss_drakos";