Azjol Nerub, Ahn'Kahet: cleanup
--HG-- branch : trunk
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user