Azjol Nerub, Ahn'Kahet: cleanup

--HG--
branch : trunk
This commit is contained in:
Tartalo
2010-03-23 22:34:31 +01:00
parent 72c3c4696b
commit 29201cf687
5 changed files with 217 additions and 222 deletions
@@ -47,24 +47,24 @@ struct boss_amanitarAI : public ScriptedAI
boss_amanitarAI(Creature *c) : ScriptedAI(c) boss_amanitarAI(Creature *c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
FirstTime = true; bFirstTime = true;
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
uint32 roottimer; uint32 uiRootTimer;
uint32 bashtimer; uint32 uiBashTimer;
uint32 bolttimer; uint32 uiBoltTimer;
uint32 spawntimer; uint32 uiSpawnTimer;
bool FirstTime; bool bFirstTime;
void Reset() void Reset()
{ {
roottimer = urand(5000,9000); uiRootTimer = urand(5*IN_MILISECONDS,9*IN_MILISECONDS);
bashtimer = urand(10000,14000); uiBashTimer = urand(10*IN_MILISECONDS,14*IN_MILISECONDS);
bolttimer = urand(15000,30000); uiBoltTimer = urand(15*IN_MILISECONDS,30*IN_MILISECONDS);
spawntimer = 0; uiSpawnTimer = 0;
m_creature->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE); m_creature->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true); m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
@@ -72,11 +72,10 @@ struct boss_amanitarAI : public ScriptedAI
if (pInstance) if (pInstance)
{ {
pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MINI);
if (!FirstTime) if (!bFirstTime)
{
pInstance->SetData(DATA_AMANITAR_EVENT, FAIL); pInstance->SetData(DATA_AMANITAR_EVENT, FAIL);
} else
else FirstTime = false; bFirstTime = false;
} }
} }
@@ -108,9 +107,9 @@ struct boss_amanitarAI : public ScriptedAI
Position pos; Position pos;
victim->GetPosition(&pos); victim->GetPosition(&pos);
m_creature->GetRandomNearPosition(pos, float(urand(5,80))); m_creature->GetRandomNearPosition(pos, float(urand(5,80)));
m_creature->SummonCreature(NPC_POISONOUS_MUSHROOM, pos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000); m_creature->SummonCreature(NPC_POISONOUS_MUSHROOM, pos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30*IN_MILISECONDS);
m_creature->GetRandomNearPosition(pos, float(urand(5,80))); m_creature->GetRandomNearPosition(pos, float(urand(5,80)));
m_creature->SummonCreature(NPC_HEALTHY_MUSHROOM, pos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000); m_creature->SummonCreature(NPC_HEALTHY_MUSHROOM, pos, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30*IN_MILISECONDS);
} }
} }
} }
@@ -121,31 +120,31 @@ struct boss_amanitarAI : public ScriptedAI
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
if (spawntimer <= diff) if (uiSpawnTimer <= diff)
{ {
SpawnAdds(); SpawnAdds();
spawntimer = urand(35000,40000); uiSpawnTimer = urand(35*IN_MILISECONDS,40*IN_MILISECONDS);
} else spawntimer -= diff; } else uiSpawnTimer -= diff;
if (roottimer <= diff) if (uiRootTimer <= diff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, SPELL_ENTANGLING_ROOTS); DoCast(pTarget, SPELL_ENTANGLING_ROOTS);
roottimer = urand(15000,30000); uiRootTimer = urand(15*IN_MILISECONDS,30*IN_MILISECONDS);
} } else uiRootTimer -= diff;
if (bashtimer <= diff) if (uiBashTimer <= diff)
{ {
DoCastVictim(SPELL_BASH); DoCastVictim(SPELL_BASH);
bashtimer = urand(15000,30000); uiBashTimer = urand(15*IN_MILISECONDS,30*IN_MILISECONDS);
} else bashtimer -= diff; } else uiBashTimer -= diff;
if (bolttimer <= diff) if (uiBoltTimer <= diff)
{ {
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, SPELL_VENOM_BOLT_VOLLEY); DoCast(pTarget, SPELL_VENOM_BOLT_VOLLEY);
bolttimer = urand(15000,30000); uiBoltTimer = urand(15*IN_MILISECONDS,30*IN_MILISECONDS);
} else bolttimer -= diff; } else uiBoltTimer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -153,13 +152,10 @@ struct boss_amanitarAI : public ScriptedAI
struct mob_amanitar_mushroomsAI : public Scripted_NoMovementAI struct mob_amanitar_mushroomsAI : public Scripted_NoMovementAI
{ {
mob_amanitar_mushroomsAI(Creature* c) : Scripted_NoMovementAI(c) mob_amanitar_mushroomsAI(Creature* c) : Scripted_NoMovementAI(c) {}
{
c->SetUInt32Value(UNIT_FIELD_DISPLAYID, 26981); // Unsichtbar...
}
uint32 auratimer, uint32 uiAuraTimer;
deathtimer; // Without not all will despawn after 30000! :-( uint32 uiDeathTimer;
void Reset() void Reset()
{ {
@@ -168,8 +164,8 @@ struct mob_amanitar_mushroomsAI : public Scripted_NoMovementAI
if (m_creature->GetEntry() == NPC_POISONOUS_MUSHROOM) if (m_creature->GetEntry() == NPC_POISONOUS_MUSHROOM)
DoCast(m_creature, SPELL_POISONOUS_MUSHROOM_VISUAL_AURA, true); DoCast(m_creature, SPELL_POISONOUS_MUSHROOM_VISUAL_AURA, true);
auratimer = 0; uiAuraTimer = 0;
deathtimer = 30000; uiDeathTimer = 30*IN_MILISECONDS;
} }
void JustDied(Unit *killer) void JustDied(Unit *killer)
@@ -191,17 +187,16 @@ struct mob_amanitar_mushroomsAI : public Scripted_NoMovementAI
{ {
if (m_creature->GetEntry() == NPC_POISONOUS_MUSHROOM) if (m_creature->GetEntry() == NPC_POISONOUS_MUSHROOM)
{ {
if (auratimer <= diff) if (uiAuraTimer <= diff)
{ {
DoCast(m_creature, SPELL_POISONOUS_MUSHROOM_VISUAL_AREA, true); DoCast(m_creature, SPELL_POISONOUS_MUSHROOM_VISUAL_AREA, true);
DoCast(m_creature, SPELL_POISONOUS_MUSHROOM_POISON_CLOUD, false); DoCast(m_creature, SPELL_POISONOUS_MUSHROOM_POISON_CLOUD, false);
auratimer = 7000; uiAuraTimer = 7*IN_MILISECONDS;
} else auratimer -= diff; } else uiAuraTimer -= diff;
} }
if (deathtimer <= diff) if (uiDeathTimer <= diff)
{
m_creature->DisappearAndDie(); m_creature->DisappearAndDie();
} else deathtimer -= diff; else uiDeathTimer -= diff;
} }
}; };
@@ -43,7 +43,9 @@ enum Spells
SPELL_BROOD_PLAGUE = 56130, SPELL_BROOD_PLAGUE = 56130,
H_SPELL_BROOD_PLAGUE = 59467, H_SPELL_BROOD_PLAGUE = 59467,
H_SPELL_BROOD_RAGE = 59465, H_SPELL_BROOD_RAGE = 59465,
SPELL_ENRAGE = 26662 // Enraged if too far away from home SPELL_ENRAGE = 26662, // Enraged if too far away from home
SPELL_SUMMON_SWARMERS = 56119, //2x 30178 -- 2x every 10secs
SPELL_SUMMON_SWARM_GUARD = 56120, //1x 30176 -- every 25secs
}; };
enum Creatures enum Creatures
@@ -52,13 +54,6 @@ enum Creatures
MOB_AHNKAHAR_GUARDIAN_ENTRY = 30176 MOB_AHNKAHAR_GUARDIAN_ENTRY = 30176
}; };
enum CreatureSpells
{
SPELL_SUMMON_SWARMERS = 56119, //2x 30178 -- 2x every 10secs
SPELL_SUMMON_SWARM_GUARD = 56120, //1x 30176 -- every 25secs
SPELL_GUARDIAN_AURA = 56151
};
#define EMOTE_HATCHES "An Ahn'kahar Guardian hatches!" #define EMOTE_HATCHES "An Ahn'kahar Guardian hatches!"
struct boss_elder_nadoxAI : public ScriptedAI struct boss_elder_nadoxAI : public ScriptedAI
@@ -68,29 +63,29 @@ struct boss_elder_nadoxAI : public ScriptedAI
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
} }
uint32 plague_Timer; uint32 uiPlagueTimer;
uint32 rage_Timer; uint32 uiRagueTimer;
uint32 swarmer_spawn_Timer; uint32 uiSwarmerSpawnTimer;
uint32 guard_spawn_Timer; uint32 uiGuardSpawnTimer;
uint32 enrage_Timer; uint32 uiEnragueTimer;
bool GuardSpawned; bool bGuardSpawned;
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
void Reset() void Reset()
{ {
plague_Timer = 13000; uiPlagueTimer = 13*IN_MILISECONDS;
rage_Timer = 20000; uiRagueTimer = 20*IN_MILISECONDS;
swarmer_spawn_Timer = 10000; uiSwarmerSpawnTimer = 10*IN_MILISECONDS;
guard_spawn_Timer = 25000; uiGuardSpawnTimer = 25*IN_MILISECONDS;
enrage_Timer = 5000; uiEnragueTimer = 5*IN_MILISECONDS;
DeadAhnkaharGuardian = false; DeadAhnkaharGuardian = false;
GuardSpawned = false; bGuardSpawned = false;
if (pInstance) if (pInstance)
pInstance->SetData(DATA_ELDER_NADOX_EVENT, NOT_STARTED); pInstance->SetData(DATA_ELDER_NADOX_EVENT, NOT_STARTED);
@@ -106,8 +101,6 @@ struct boss_elder_nadoxAI : public ScriptedAI
void KilledUnit(Unit *victim) void KilledUnit(Unit *victim)
{ {
if (victim == m_creature)
return;
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2,SAY_SLAY_3), m_creature); DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2,SAY_SLAY_3), m_creature);
} }
@@ -128,42 +121,40 @@ struct boss_elder_nadoxAI : public ScriptedAI
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
if (plague_Timer <= diff) if (uiPlagueTimer <= diff)
{ {
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_BROOD_PLAGUE, H_SPELL_BROOD_PLAGUE)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_BROOD_PLAGUE, H_SPELL_BROOD_PLAGUE));
plague_Timer = 15000; uiPlagueTimer = 15*IN_MILISECONDS;
} else plague_Timer -= diff; } else uiPlagueTimer -= diff;
if (IsHeroic()) if (IsHeroic())
if (rage_Timer <= diff) if (uiRagueTimer <= diff)
{ {
Unit* Swarmer = m_creature->FindNearestCreature(MOB_AHNKAHAR_SWARMER, 35); if (Creature *pSwarmer = m_creature->FindNearestCreature(MOB_AHNKAHAR_SWARMER, 35))
if (Swarmer)
{ {
DoCast(Swarmer, H_SPELL_BROOD_RAGE, true); DoCast(pSwarmer, H_SPELL_BROOD_RAGE, true);
rage_Timer = 15000; uiRagueTimer = 15*IN_MILISECONDS;
} }
} else rage_Timer -= diff; } else uiRagueTimer -= diff;
if (swarmer_spawn_Timer <= diff) if (uiSwarmerSpawnTimer <= diff)
{ {
DoCast(m_creature, SPELL_SUMMON_SWARMERS, true); DoCast(m_creature, SPELL_SUMMON_SWARMERS, true);
DoCast(m_creature, SPELL_SUMMON_SWARMERS); DoCast(m_creature, SPELL_SUMMON_SWARMERS);
if (urand(1,3) == 3) // 33% chance of dialog if (urand(1,3) == 3) // 33% chance of dialog
DoScriptText(RAND(SAY_EGG_SAC_1,SAY_EGG_SAC_2), m_creature); DoScriptText(RAND(SAY_EGG_SAC_1,SAY_EGG_SAC_2), m_creature);
swarmer_spawn_Timer = 10000; uiSwarmerSpawnTimer = 10*IN_MILISECONDS;
} else swarmer_spawn_Timer -= diff; } else uiSwarmerSpawnTimer -= diff;
if (!GuardSpawned && guard_spawn_Timer <= diff) if (!bGuardSpawned && uiGuardSpawnTimer <= diff)
{ {
m_creature->MonsterTextEmote(EMOTE_HATCHES,m_creature->GetGUID(),true); m_creature->MonsterTextEmote(EMOTE_HATCHES,m_creature->GetGUID(),true);
DoCast(m_creature, SPELL_SUMMON_SWARM_GUARD); DoCast(m_creature, SPELL_SUMMON_SWARM_GUARD);
GuardSpawned = true; bGuardSpawned = true;
} else guard_spawn_Timer -= diff; } else uiGuardSpawnTimer -= diff;
if (enrage_Timer <= diff) if (uiEnragueTimer <= diff)
{ {
if (m_creature->HasAura(SPELL_ENRAGE,0)) if (m_creature->HasAura(SPELL_ENRAGE,0))
return; return;
@@ -174,8 +165,8 @@ struct boss_elder_nadoxAI : public ScriptedAI
if (!m_creature->IsNonMeleeSpellCasted(false)) if (!m_creature->IsNonMeleeSpellCasted(false))
DoCast(m_creature, SPELL_ENRAGE, true); DoCast(m_creature, SPELL_ENRAGE, true);
enrage_Timer = 5000; uiEnragueTimer = 5*IN_MILISECONDS;
} else enrage_Timer -= diff; } else uiEnragueTimer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
@@ -186,7 +177,11 @@ CreatureAI* GetAI_boss_elder_nadox(Creature* pCreature)
return new boss_elder_nadoxAI(pCreature); return new boss_elder_nadoxAI(pCreature);
} }
#define SPELL_SPRINT 56354 enum AddSpells
{
SPELL_SPRINT = 56354,
SPELL_GUARDIAN_AURA = 56151
};
struct mob_ahnkahar_nerubianAI : public ScriptedAI struct mob_ahnkahar_nerubianAI : public ScriptedAI
{ {
@@ -196,13 +191,13 @@ struct mob_ahnkahar_nerubianAI : public ScriptedAI
} }
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
uint32 sprint_Timer; uint32 uiSprintTimer;
void Reset() void Reset()
{ {
if (m_creature->GetEntry() == 30176) //magic numbers are bad! if (m_creature->GetEntry() == MOB_AHNKAHAR_GUARDIAN_ENTRY) //magic numbers are bad!
DoCast(m_creature, SPELL_GUARDIAN_AURA, true); DoCast(m_creature, SPELL_GUARDIAN_AURA, true);
sprint_Timer = 10000; uiSprintTimer = 10*IN_MILISECONDS;
} }
void JustDied(Unit *killer) void JustDied(Unit *killer)
@@ -215,7 +210,10 @@ struct mob_ahnkahar_nerubianAI : public ScriptedAI
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if (m_creature->GetEntry() == 30176) //magic numbers are bad! if (!UpdateVictim())
return;
if (m_creature->GetEntry() == MOB_AHNKAHAR_GUARDIAN_ENTRY)
m_creature->RemoveAurasDueToSpell(SPELL_GUARDIAN_AURA); m_creature->RemoveAurasDueToSpell(SPELL_GUARDIAN_AURA);
if (pInstance) if (pInstance)
@@ -229,16 +227,17 @@ struct mob_ahnkahar_nerubianAI : public ScriptedAI
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
if (sprint_Timer <= diff) if (uiSprintTimer <= diff)
{ {
DoCast(m_creature, SPELL_SPRINT); DoCast(m_creature, SPELL_SPRINT);
sprint_Timer = 25000; uiSprintTimer = 25*IN_MILISECONDS;
} else sprint_Timer -= diff; } else uiSprintTimer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
}; };
//HACK: No, AI. Replace with proper db content?
struct mob_nadox_eggsAI : public Scripted_NoMovementAI struct mob_nadox_eggsAI : public Scripted_NoMovementAI
{ {
mob_nadox_eggsAI(Creature* c) : Scripted_NoMovementAI(c) mob_nadox_eggsAI(Creature* c) : Scripted_NoMovementAI(c)
@@ -33,7 +33,13 @@ enum Spells
SPELL_SHADOW_BOLT_VOLLEY = 57942, SPELL_SHADOW_BOLT_VOLLEY = 57942,
H_SPELL_SHADOW_BOLT_VOLLEY = 59975, H_SPELL_SHADOW_BOLT_VOLLEY = 59975,
SPELL_SHIVER = 57949, SPELL_SHIVER = 57949,
H_SPELL_SHIVER = 59978 H_SPELL_SHIVER = 59978,
SPELL_CLONE_PLAYER = 57507, //casted on player during insanity
SPELL_INSANITY_PHASING_1 = 57508,
SPELL_INSANITY_PHASING_2 = 57509,
SPELL_INSANITY_PHASING_3 = 57519,
SPELL_INSANITY_PHASING_4 = 57511,
SPELL_INSANITY_PHASING_5 = 57512
}; };
enum Creatures enum Creatures
@@ -126,7 +132,7 @@ struct boss_volazjAI : public ScriptedAI
// Fixme: allow mirror image query to send other guid to get rid of minion status // Fixme: allow mirror image query to send other guid to get rid of minion status
summon->SetUInt64Value(UNIT_FIELD_CREATEDBY, plr->GetGUID()); summon->SetUInt64Value(UNIT_FIELD_CREATEDBY, plr->GetGUID());
// clone // clone
plr->CastSpell(summon, 57507, true); plr->CastSpell(summon, SPELL_CLONE_PLAYER, true);
// set phase // set phase
summon->SetPhaseMask((1<<(4+insanityHandled)),true); summon->SetPhaseMask((1<<(4+insanityHandled)),true);
} }
@@ -138,9 +144,9 @@ struct boss_volazjAI : public ScriptedAI
void Reset() void Reset()
{ {
uiEncounterTimer = 0; uiEncounterTimer = 0;
uiMindFlayTimer = 8000; uiMindFlayTimer = 8*IN_MILISECONDS;
uiShadowBoltVolleyTimer = 5000; uiShadowBoltVolleyTimer = 5*IN_MILISECONDS;
uiShiverTimer = 15000; uiShiverTimer = 15*IN_MILISECONDS;
if (pInstance) if (pInstance)
pInstance->SetData(DATA_HERALD_VOLAZJ, NOT_STARTED); pInstance->SetData(DATA_HERALD_VOLAZJ, NOT_STARTED);
@@ -174,19 +180,19 @@ struct boss_volazjAI : public ScriptedAI
switch (phase) switch (phase)
{ {
case 16: case 16:
spell = 57508; spell = SPELL_INSANITY_PHASING_1;
break; break;
case 32: case 32:
spell = 57509; spell = SPELL_INSANITY_PHASING_2;
break; break;
case 64: case 64:
spell = 57510; spell = SPELL_INSANITY_PHASING_3;
break; break;
case 128: case 128:
spell = 57511; spell = SPELL_INSANITY_PHASING_4;
break; break;
case 256: case 256:
spell = 57512; spell = SPELL_INSANITY_PHASING_5;
break; break;
} }
return spell; return spell;
@@ -256,20 +262,20 @@ struct boss_volazjAI : public ScriptedAI
if (uiMindFlayTimer <= diff) if (uiMindFlayTimer <= diff)
{ {
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MIND_FLAY, H_SPELL_MIND_FLAY)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MIND_FLAY, H_SPELL_MIND_FLAY));
uiMindFlayTimer = 20000; uiMindFlayTimer = 20*IN_MILISECONDS;
} else uiMindFlayTimer -= diff; } else uiMindFlayTimer -= diff;
if (uiShadowBoltVolleyTimer <= diff) if (uiShadowBoltVolleyTimer <= diff)
{ {
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_VOLLEY, H_SPELL_SHADOW_BOLT_VOLLEY)); DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_VOLLEY, H_SPELL_SHADOW_BOLT_VOLLEY));
uiShadowBoltVolleyTimer = 5000; uiShadowBoltVolleyTimer = 5*IN_MILISECONDS;
} else uiShadowBoltVolleyTimer -= diff; } else uiShadowBoltVolleyTimer -= diff;
if (uiShiverTimer <= diff) if (uiShiverTimer <= diff)
{ {
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, DUNGEON_MODE(SPELL_SHIVER, H_SPELL_SHIVER)); DoCast(pTarget, DUNGEON_MODE(SPELL_SHIVER, H_SPELL_SHIVER));
uiShiverTimer = 15000; uiShiverTimer = 15*IN_MILISECONDS;
} else uiShiverTimer -= diff; } else uiShiverTimer -= diff;
uiEncounterTimer += diff; uiEncounterTimer += diff;
@@ -283,7 +289,7 @@ struct boss_volazjAI : public ScriptedAI
if (pInstance) if (pInstance)
{ {
pInstance->SetData(DATA_HERALD_VOLAZJ, DONE); pInstance->SetData(DATA_HERALD_VOLAZJ, DONE);
if (IsHeroic() && uiEncounterTimer < 120000) if (IsHeroic() && uiEncounterTimer < 120*IN_MILISECONDS)
pInstance->DoCompleteAchievement(ACHIEV_QUICK_DEMISE); pInstance->DoCompleteAchievement(ACHIEV_QUICK_DEMISE);
} }
@@ -292,9 +298,6 @@ struct boss_volazjAI : public ScriptedAI
void KilledUnit(Unit *victim) void KilledUnit(Unit *victim)
{ {
if (victim == m_creature)
return;
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2,SAY_SLAY_3), m_creature); DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2,SAY_SLAY_3), m_creature);
} }
}; };
@@ -53,6 +53,11 @@ enum Spells
SPELL_THUNDERSHOCK_H = 60029 // 30Y SPELL_THUNDERSHOCK_H = 60029 // 30Y
}; };
enum Creatures
{
NPC_JEDOGA_CONTROLLER = 30181
};
const Position JedogaPosition[2] = const Position JedogaPosition[2] =
{ {
{372.330994f, -705.278015f, -0.624178f, 5.427970f}, {372.330994f, -705.278015f, -0.624178f, 5.427970f},
@@ -64,8 +69,8 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
boss_jedoga_shadowseekerAI(Creature* c) : ScriptedAI(c) boss_jedoga_shadowseekerAI(Creature* c) : ScriptedAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
FirstTime = true; bFirstTime = true;
predone = false; bPreDone = false;
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
@@ -75,21 +80,21 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
uint32 uiBoltTimer; uint32 uiBoltTimer;
uint32 uiThunderTimer; uint32 uiThunderTimer;
bool predone; bool bPreDone;
bool bOpFerok; bool bOpFerok;
bool bOnGround; bool bOnGround;
bool bOpFerokFail; bool bOpFerokFail;
bool bCanDown; bool bCanDown;
bool FirstTime; bool bFirstTime;
void Reset() void Reset()
{ {
uiOpFerTimer = urand(15000,20000); uiOpFerTimer = urand(15*IN_MILISECONDS,20*IN_MILISECONDS);
uiCycloneTimer = 3000; uiCycloneTimer = 3*IN_MILISECONDS;
uiBoltTimer = 7000; uiBoltTimer = 7*IN_MILISECONDS;
uiThunderTimer = 12000; uiThunderTimer = 12*IN_MILISECONDS;
bOpFerok = false; bOpFerok = false;
bOpFerokFail = false; bOpFerokFail = false;
@@ -98,7 +103,7 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
if (pInstance) if (pInstance)
{ {
if (!FirstTime) if (!bFirstTime)
pInstance->SetData(DATA_JEDOGA_SHADOWSEEKER_EVENT, FAIL); pInstance->SetData(DATA_JEDOGA_SHADOWSEEKER_EVENT, FAIL);
pInstance->SetData64(DATA_PL_JEDOGA_TARGET, 0); pInstance->SetData64(DATA_PL_JEDOGA_TARGET, 0);
@@ -107,12 +112,12 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
} }
MoveUp(); MoveUp();
FirstTime = false; bFirstTime = false;
} }
void EnterCombat(Unit* who) void EnterCombat(Unit* who)
{ {
if (!pInstance || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == 30181)) if (!pInstance || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER))
return; return;
DoScriptText(TEXT_AGGRO, m_creature); DoScriptText(TEXT_AGGRO, m_creature);
@@ -122,7 +127,7 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
void AttackStart(Unit* who) void AttackStart(Unit* who)
{ {
if (!who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == 30181)) if (!who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER))
return; return;
ScriptedAI::AttackStart(who); ScriptedAI::AttackStart(who);
@@ -145,13 +150,13 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
void MoveInLineOfSight(Unit* who) void MoveInLineOfSight(Unit* who)
{ {
if (!pInstance || !who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == 30181)) if (!pInstance || !who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER))
return; return;
if (!predone && who->GetTypeId() == TYPEID_PLAYER && m_creature->GetDistance(who) < 100.0f) if (!bPreDone && who->GetTypeId() == TYPEID_PLAYER && m_creature->GetDistance(who) < 100.0f)
{ {
DoScriptText(RAND(TEXT_PREACHING_1, TEXT_PREACHING_2, TEXT_PREACHING_3, TEXT_PREACHING_4, TEXT_PREACHING_5), m_creature); DoScriptText(RAND(TEXT_PREACHING_1, TEXT_PREACHING_2, TEXT_PREACHING_3, TEXT_PREACHING_4, TEXT_PREACHING_5), m_creature);
predone = true; bPreDone = true;
} }
if (pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS || !bOnGround) if (pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS || !bOnGround)
@@ -243,7 +248,7 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
if (pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) OpferRufen(); if (pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) OpferRufen();
bOnGround = false; bOnGround = false;
uiOpFerTimer = urand(15000,30000); uiOpFerTimer = urand(15*IN_MILISECONDS,30*IN_MILISECONDS);
} }
void OpferRufen() void OpferRufen()
@@ -299,7 +304,7 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
if (uiCycloneTimer <= diff) if (uiCycloneTimer <= diff)
{ {
DoCast(m_creature, DUNGEON_MODE(SPELL_CYCLONE_STRIKE, SPELL_CYCLONE_STRIKE_H), false); DoCast(m_creature, DUNGEON_MODE(SPELL_CYCLONE_STRIKE, SPELL_CYCLONE_STRIKE_H), false);
uiCycloneTimer = urand(15000,30000); uiCycloneTimer = urand(15*IN_MILISECONDS,30*IN_MILISECONDS);
} else uiCycloneTimer -= diff; } else uiCycloneTimer -= diff;
if (uiBoltTimer <= diff) if (uiBoltTimer <= diff)
@@ -307,7 +312,7 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_LIGHTNING_BOLT, SPELL_LIGHTNING_BOLT_H), false); m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_LIGHTNING_BOLT, SPELL_LIGHTNING_BOLT_H), false);
uiBoltTimer = urand(15000,30000); uiBoltTimer = urand(15*IN_MILISECONDS,30*IN_MILISECONDS);
} else uiBoltTimer -= diff; } else uiBoltTimer -= diff;
if (uiThunderTimer <= diff) if (uiThunderTimer <= diff)
@@ -315,7 +320,7 @@ struct boss_jedoga_shadowseekerAI : public ScriptedAI
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_THUNDERSHOCK, SPELL_THUNDERSHOCK_H), false); m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_THUNDERSHOCK, SPELL_THUNDERSHOCK_H), false);
uiThunderTimer = urand(15000,30000); uiThunderTimer = urand(15*IN_MILISECONDS,30*IN_MILISECONDS);
} else uiThunderTimer -= diff; } else uiThunderTimer -= diff;
if (uiOpFerTimer <= diff) if (uiOpFerTimer <= diff)
@@ -337,17 +342,17 @@ struct mob_jedoga_initiandAI : public ScriptedAI
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
uint32 checktimer; uint32 bCheckTimer;
bool walking; bool bWalking;
void Reset() void Reset()
{ {
if (!pInstance) if (!pInstance)
return; return;
walking = false; bWalking = false;
checktimer = 2000; bCheckTimer = 2*IN_MILISECONDS;
if (pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS) if (pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS)
{ {
@@ -369,7 +374,7 @@ struct mob_jedoga_initiandAI : public ScriptedAI
{ {
if (!Killer || !pInstance) return; if (!Killer || !pInstance) return;
if (walking) if (bWalking)
{ {
Creature* boss = m_creature->GetMap()->GetCreature(pInstance->GetData64(DATA_JEDOGA_SHADOWSEEKER)); Creature* boss = m_creature->GetMap()->GetCreature(pInstance->GetData64(DATA_JEDOGA_SHADOWSEEKER));
if (boss && !CAST_AI(boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok) CAST_AI(boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = true; if (boss && !CAST_AI(boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok) CAST_AI(boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = true;
@@ -377,7 +382,7 @@ struct mob_jedoga_initiandAI : public ScriptedAI
if (Killer->GetTypeId() == TYPEID_PLAYER) pInstance->SetData(DATA_INITIAND_KILLED, 1); if (Killer->GetTypeId() == TYPEID_PLAYER) pInstance->SetData(DATA_INITIAND_KILLED, 1);
pInstance->SetData64(DATA_ADD_JEDOGA_OPFER, 0); pInstance->SetData64(DATA_ADD_JEDOGA_OPFER, 0);
walking = false; bWalking = false;
} }
if (Killer->GetTypeId() == TYPEID_PLAYER) pInstance->SetData64(DATA_PL_JEDOGA_TARGET, Killer->GetGUID()); if (Killer->GetTypeId() == TYPEID_PLAYER) pInstance->SetData64(DATA_PL_JEDOGA_TARGET, Killer->GetGUID());
} }
@@ -423,9 +428,9 @@ struct mob_jedoga_initiandAI : public ScriptedAI
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if (pInstance && checktimer <= diff) if (pInstance && bCheckTimer <= diff)
{ {
if (m_creature->GetGUID() == pInstance->GetData64(DATA_ADD_JEDOGA_OPFER) && !walking) if (m_creature->GetGUID() == pInstance->GetData64(DATA_ADD_JEDOGA_OPFER) && !bWalking)
{ {
m_creature->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL); m_creature->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL);
m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false); m_creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false);
@@ -443,9 +448,9 @@ struct mob_jedoga_initiandAI : public ScriptedAI
m_creature->GetMotionMaster()->Clear(false); m_creature->GetMotionMaster()->Clear(false);
m_creature->GetMotionMaster()->MovePoint(1, JedogaPosition[1]); m_creature->GetMotionMaster()->MovePoint(1, JedogaPosition[1]);
walking = true; bWalking = true;
} }
if (!walking) if (!bWalking)
{ {
if (pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS && m_creature->HasAura(SPELL_SPHERE_VISUAL)) if (pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) != IN_PROGRESS && m_creature->HasAura(SPELL_SPHERE_VISUAL))
{ {
@@ -462,8 +467,8 @@ struct mob_jedoga_initiandAI : public ScriptedAI
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
} }
} }
checktimer = 2000; bCheckTimer = 2*IN_MILISECONDS;
} else checktimer -= diff; } else bCheckTimer -= diff;
//Return since we have no target //Return since we have no target
if (!UpdateVictim()) if (!UpdateVictim())
@@ -487,20 +492,20 @@ struct npc_jedogas_aufseher_triggerAI : public Scripted_NoMovementAI
npc_jedogas_aufseher_triggerAI(Creature* c) : Scripted_NoMovementAI(c) npc_jedogas_aufseher_triggerAI(Creature* c) : Scripted_NoMovementAI(c)
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
c->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); // c->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686);
c->setFaction(35); // c->setFaction(35);
removed = false; bRemoved = false;
removed2 = false; bRemoved2 = false;
casted = false; bCasted = false;
casted2 = false; bCasted2 = false;
} }
ScriptedInstance* pInstance; ScriptedInstance* pInstance;
bool removed; bool bRemoved;
bool removed2; bool bRemoved2;
bool casted; bool bCasted;
bool casted2; bool bCasted2;
void Reset() {} void Reset() {}
void EnterCombat(Unit* who) {} void EnterCombat(Unit* who) {}
@@ -512,36 +517,36 @@ struct npc_jedogas_aufseher_triggerAI : public Scripted_NoMovementAI
if (!pInstance) if (!pInstance)
return; return;
if (!removed && m_creature->GetPositionX() > 440.0f) if (!bRemoved && m_creature->GetPositionX() > 440.0f)
{ {
if (pInstance->GetData(DATA_PRINCE_TALDARAM_EVENT) == DONE) if (pInstance->GetData(DATA_PRINCE_TALDARAM_EVENT) == DONE)
{ {
m_creature->InterruptNonMeleeSpells(true); m_creature->InterruptNonMeleeSpells(true);
removed = true; bRemoved = true;
return; return;
} }
if (!casted) if (!bCasted)
{ {
DoCast(m_creature, SPELL_BEAM_VISUAL_JEDOGAS_AUFSEHER_1, false); DoCast(m_creature, SPELL_BEAM_VISUAL_JEDOGAS_AUFSEHER_1, false);
casted = true; bCasted = true;
} }
} }
if (!removed2 && m_creature->GetPositionX() < 440.0f) if (!bRemoved2 && m_creature->GetPositionX() < 440.0f)
{ {
if (!casted2 && pInstance->GetData(DATA_JEDOGA_TRIGGER_SWITCH)) if (!bCasted2 && pInstance->GetData(DATA_JEDOGA_TRIGGER_SWITCH))
{ {
DoCast(m_creature, SPELL_BEAM_VISUAL_JEDOGAS_AUFSEHER_2, false); DoCast(m_creature, SPELL_BEAM_VISUAL_JEDOGAS_AUFSEHER_2, false);
casted2 = true; bCasted2 = true;
} }
if (casted2 && !pInstance->GetData(DATA_JEDOGA_TRIGGER_SWITCH)) if (bCasted2 && !pInstance->GetData(DATA_JEDOGA_TRIGGER_SWITCH))
{ {
m_creature->InterruptNonMeleeSpells(true); m_creature->InterruptNonMeleeSpells(true);
casted2 = false; bCasted2 = false;
} }
if (!removed2 && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == DONE) if (!bRemoved2 && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == DONE)
{ {
m_creature->InterruptNonMeleeSpells(true); m_creature->InterruptNonMeleeSpells(true);
removed2 = true; bRemoved2 = true;
} }
} }
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2009 Trinity <http://www.trinitycore.org/> * Copyright (C) 2009 - 2010 TrinityCore <http://www.trinitycore.org/>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -16,14 +16,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
/* ScriptData
SDName: boss_prince_taldaram
SDAuthor: Tartalo & tlexii
SD%Complete: 0
SDComment:
SDCategory: Ahn'kahet
EndScriptData */
#include "ScriptedPch.h" #include "ScriptedPch.h"
#include "ahnkahet.h" #include "ahnkahet.h"
@@ -57,7 +49,7 @@ enum Misc
#define DATA_GROUND_POSITION_Z 11.4 #define DATA_GROUND_POSITION_Z 11.4
enum Achievements enum Achievements
{ {
ACHIEVEMENT_THE_PARTY_IS_OVER = 1861 ACHIEV_THE_PARTY_IS_OVER = 1861
}; };
enum Yells enum Yells
{ {
@@ -78,6 +70,11 @@ enum CombatPhase
VANISHED, VANISHED,
FEEDING FEEDING
}; };
enum GameObjects
{
GO_SPHERE1 = 193093,
GO_SPHERE2 = 193094
};
struct boss_taldaramAI : public ScriptedAI struct boss_taldaramAI : public ScriptedAI
{ {
@@ -104,10 +101,10 @@ struct boss_taldaramAI : public ScriptedAI
void Reset() void Reset()
{ {
uiBloodthirstTimer = 10000; uiBloodthirstTimer = 10*IN_MILISECONDS;
uiVanishTimer = (25 + rand()%10)*1000; uiVanishTimer = urand(25*IN_MILISECONDS,35*IN_MILISECONDS);
uiEmbraceTimer = 20000; uiEmbraceTimer = 20*IN_MILISECONDS;
uiFlamesphereTimer = 5000; uiFlamesphereTimer = 5*IN_MILISECONDS;
uiEmbraceTakenDamage = 0; uiEmbraceTakenDamage = 0;
Phase = NORMAL; Phase = NORMAL;
uiPhaseTimer = 0; uiPhaseTimer = 0;
@@ -136,7 +133,7 @@ struct boss_taldaramAI : public ScriptedAI
Creature* pSpheres[3]; Creature* pSpheres[3];
//DoCast(m_creature, SPELL_FLAME_SPHERE_SUMMON_1); //DoCast(m_creature, SPELL_FLAME_SPHERE_SUMMON_1);
pSpheres[0] = DoSpawnCreature(CREATURE_FLAME_SPHERE, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000); pSpheres[0] = DoSpawnCreature(CREATURE_FLAME_SPHERE, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10*IN_MILISECONDS);
Unit *pSphereTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); Unit *pSphereTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
if (pSphereTarget && pSpheres[0]) if (pSphereTarget && pSpheres[0])
{ {
@@ -149,9 +146,9 @@ struct boss_taldaramAI : public ScriptedAI
if (IsHeroic()) if (IsHeroic())
{ {
//DoCast(m_creature, H_SPELL_FLAME_SPHERE_SUMMON_1); //DoCast(m_creature, H_SPELL_FLAME_SPHERE_SUMMON_1);
pSpheres[1] = DoSpawnCreature(H_CREATURE_FLAME_SPHERE_1, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000); pSpheres[1] = DoSpawnCreature(H_CREATURE_FLAME_SPHERE_1, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10*IN_MILISECONDS);
//DoCast(m_creature, H_SPELL_FLAME_SPHERE_SUMMON_2); //DoCast(m_creature, H_SPELL_FLAME_SPHERE_SUMMON_2);
pSpheres[2] = DoSpawnCreature(H_CREATURE_FLAME_SPHERE_2, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000); pSpheres[2] = DoSpawnCreature(H_CREATURE_FLAME_SPHERE_2, 0, 0, 5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10*IN_MILISECONDS);
if (pSphereTarget && pSpheres[1] && pSpheres[2]) if (pSphereTarget && pSpheres[1] && pSpheres[2])
{ {
float angle,x,y; float angle,x,y;
@@ -187,7 +184,7 @@ struct boss_taldaramAI : public ScriptedAI
m_creature->SetSpeed(MOVE_WALK, 1.0f, true); m_creature->SetSpeed(MOVE_WALK, 1.0f, true);
m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
Phase = FEEDING; Phase = FEEDING;
uiPhaseTimer = 20000; uiPhaseTimer = 20*IN_MILISECONDS;
break; break;
case FEEDING: case FEEDING:
Phase = NORMAL; Phase = NORMAL;
@@ -198,15 +195,15 @@ struct boss_taldaramAI : public ScriptedAI
if (uiBloodthirstTimer <= diff) if (uiBloodthirstTimer <= diff)
{ {
DoCast(m_creature->getVictim(), SPELL_BLOODTHIRST); DoCast(m_creature->getVictim(), SPELL_BLOODTHIRST);
uiBloodthirstTimer = 10000; uiBloodthirstTimer = 10*IN_MILISECONDS;
} else uiBloodthirstTimer -= diff; } else uiBloodthirstTimer -= diff;
if (uiFlamesphereTimer <= diff) if (uiFlamesphereTimer <= diff)
{ {
DoCast(m_creature, SPELL_CONJURE_FLAME_SPHERE); DoCast(m_creature, SPELL_CONJURE_FLAME_SPHERE);
Phase = CASTING_FLAME_SPHERES; Phase = CASTING_FLAME_SPHERES;
uiPhaseTimer = 3000 + diff; uiPhaseTimer = 3*IN_MILISECONDS + diff;
uiFlamesphereTimer = 15000; uiFlamesphereTimer = 15*IN_MILISECONDS;
} else uiFlamesphereTimer -= diff; } else uiFlamesphereTimer -= diff;
if (uiVanishTimer <= diff) if (uiVanishTimer <= diff)
@@ -234,7 +231,7 @@ struct boss_taldaramAI : public ScriptedAI
uiEmbraceTarget = pEmbraceTarget->GetGUID(); uiEmbraceTarget = pEmbraceTarget->GetGUID();
} }
uiVanishTimer = urand(25000,35000); uiVanishTimer = urand(25*IN_MILISECONDS,35*IN_MILISECONDS);
} else uiVanishTimer -= diff; } else uiVanishTimer -= diff;
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
@@ -268,15 +265,11 @@ struct boss_taldaramAI : public ScriptedAI
{ {
pInstance->SetData(DATA_PRINCE_TALDARAM_EVENT, DONE); pInstance->SetData(DATA_PRINCE_TALDARAM_EVENT, DONE);
//The Party's Over achievement: if (IsHeroic())
AchievementEntry const *AchievThePartyIsOver = GetAchievementStore()->LookupEntry(ACHIEVEMENT_THE_PARTY_IS_OVER);
Map* pMap = m_creature->GetMap();
if (pMap && pMap->IsDungeon() && IsHeroic() && AchievThePartyIsOver)
{ {
Map::PlayerList const &players = pMap->GetPlayers(); Map::PlayerList const &players = pInstance->instance->GetPlayers();
if (players.getSize() < 5) if (players.getSize() < 5)
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) pInstance->DoCompleteAchievement(ACHIEV_THE_PARTY_IS_OVER);
itr->getSource()->CompletedAchievement(AchievThePartyIsOver);
} }
} }
} }
@@ -358,7 +351,7 @@ struct mob_taldaram_flamesphereAI : public ScriptedAI
DoCast(m_creature, SPELL_FLAME_SPHERE_VISUAL); DoCast(m_creature, SPELL_FLAME_SPHERE_VISUAL);
DoCast(m_creature, SPELL_FLAME_SPHERE_SPAWN_EFFECT); DoCast(m_creature, SPELL_FLAME_SPHERE_SPAWN_EFFECT);
DoCast(m_creature, DUNGEON_MODE(SPELL_FLAME_SPHERE_PERIODIC, H_SPELL_FLAME_SPHERE_PERIODIC)); DoCast(m_creature, DUNGEON_MODE(SPELL_FLAME_SPHERE_PERIODIC, H_SPELL_FLAME_SPHERE_PERIODIC));
uiDespawnTimer = 10000; uiDespawnTimer = 10*IN_MILISECONDS;
} }
void EnterCombat(Unit *who) {} void EnterCombat(Unit *who) {}
@@ -401,8 +394,8 @@ bool GOHello_prince_taldaram_sphere(Player *pPlayer, GameObject *pGO)
switch(pGO->GetEntry()) switch(pGO->GetEntry())
{ {
case 193093: pInstance->SetData(DATA_SPHERE1_EVENT,IN_PROGRESS); break; case GO_SPHERE1: pInstance->SetData(DATA_SPHERE1_EVENT,IN_PROGRESS); break;
case 193094: pInstance->SetData(DATA_SPHERE2_EVENT,IN_PROGRESS); break; case GO_SPHERE2: pInstance->SetData(DATA_SPHERE2_EVENT,IN_PROGRESS); break;
} }
CAST_AI(boss_taldaramAI, pPrinceTaldaram->AI())->CheckSpheres(); CAST_AI(boss_taldaramAI, pPrinceTaldaram->AI())->CheckSpheres();