converted all tabs to 4 spaces

This commit is contained in:
Yehonal
2016-06-26 19:23:57 +02:00
parent 52f305111c
commit f6eefedcd5
717 changed files with 132388 additions and 132388 deletions

View File

@@ -16,36 +16,36 @@ enum DataTypes
DATA_RELIQUARY_OF_SOULS = 5,
DATA_MOTHER_SHAHRAZ = 6,
DATA_ILLIDARI_COUNCIL = 7,
DATA_AKAMA_FINISHED = 8,
DATA_AKAMA_FINISHED = 8,
DATA_ILLIDAN_STORMRAGE = 9,
MAX_ENCOUNTERS = 10
MAX_ENCOUNTERS = 10
};
enum CreatureIds
{
NPC_SHADE_OF_AKAMA = 22841,
NPC_AKAMA_SHADE = 23191,
NPC_STORM_FURY = 22848,
NPC_TERON_GOREFIEND = 22871,
NPC_VENGEFUL_SPIRIT = 23109,
NPC_SHADOWY_CONSTRUCT = 23111,
NPC_ANGERED_SOUL_FRAGMENT = 23398,
NPC_HUNGERING_SOUL_FRAGMENT = 23401,
NPC_SUFFERING_SOUL_FRAGMENT = 23399,
NPC_RELIQUARY_OF_THE_LOST = 22856,
NPC_ENSLAVED_SOUL = 23469,
NPC_GATHIOS_THE_SHATTERER = 22949,
NPC_HIGH_NETHERMANCER_ZEREVOR = 22950,
NPC_LADY_MALANDE = 22951,
NPC_VERAS_DARKSHADOW = 22952,
NPC_ILLIDARI_COUNCIL = 23426,
NPC_STORM_FURY = 22848,
NPC_TERON_GOREFIEND = 22871,
NPC_VENGEFUL_SPIRIT = 23109,
NPC_SHADOWY_CONSTRUCT = 23111,
NPC_ANGERED_SOUL_FRAGMENT = 23398,
NPC_HUNGERING_SOUL_FRAGMENT = 23401,
NPC_SUFFERING_SOUL_FRAGMENT = 23399,
NPC_RELIQUARY_OF_THE_LOST = 22856,
NPC_ENSLAVED_SOUL = 23469,
NPC_GATHIOS_THE_SHATTERER = 22949,
NPC_HIGH_NETHERMANCER_ZEREVOR = 22950,
NPC_LADY_MALANDE = 22951,
NPC_VERAS_DARKSHADOW = 22952,
NPC_ILLIDARI_COUNCIL = 23426,
NPC_AKAMA = 23089,
NPC_ILLIDAN_STORMRAGE = 22917,
NPC_PARASITIC_SHADOWFIEND = 23498,
NPC_BLADE_OF_AZZINOTH = 22996,
NPC_FLAME_OF_AZZINOTH = 22997,
NPC_PARASITIC_SHADOWFIEND = 23498,
NPC_BLADE_OF_AZZINOTH = 22996,
NPC_FLAME_OF_AZZINOTH = 22997,
NPC_DRAGON_TURTLE = 22885
NPC_DRAGON_TURTLE = 22885
};
enum GameObjectIds
@@ -67,14 +67,14 @@ enum GameObjectIds
enum MiscIds
{
SPELL_CHEST_PAINS = 41356,
SPELL_WYVERN_STING = 24336,
SPELL_SHADOW_INFERNO_DAMAGE = 39646,
SPELL_CHAOTIC_CHARGE = 41033,
SPELL_DEMENTIA1 = 41406,
SPELL_DEMENTIA2 = 41409,
SPELL_CHEST_PAINS = 41356,
SPELL_WYVERN_STING = 24336,
SPELL_SHADOW_INFERNO_DAMAGE = 39646,
SPELL_CHAOTIC_CHARGE = 41033,
SPELL_DEMENTIA1 = 41406,
SPELL_DEMENTIA2 = 41409,
FACTION_ASHTONGUE = 1820
FACTION_ASHTONGUE = 1820
};
#endif // BLACK_TEMPLE_H_

View File

@@ -8,181 +8,181 @@ REWRITTEN BY XINEF
enum Says
{
SAY_AGGRO = 0,
SAY_SLAY = 1,
SAY_SPECIAL = 2,
SAY_ENRAGE = 3,
SAY_DEATH = 4
SAY_AGGRO = 0,
SAY_SLAY = 1,
SAY_SPECIAL = 2,
SAY_ENRAGE = 3,
SAY_DEATH = 4
};
enum Spells
{
SPELL_ACIDIC_WOUND = 40484,
SPELL_FEL_ACID_BREATH1 = 40508,
SPELL_FEL_ACID_BREATH2 = 40595,
SPELL_ARCING_SMASH1 = 40457,
SPELL_ARCING_SMASH2 = 40599,
SPELL_EJECT1 = 40486,
SPELL_EJECT2 = 40597,
SPELL_BEWILDERING_STRIKE = 40491,
SPELL_BLOODBOIL = 42005,
SPELL_ACID_GEYSER = 40630,
SPELL_BERSERK = 45078,
SPELL_CHARGE = 40602,
SPELL_ACIDIC_WOUND = 40484,
SPELL_FEL_ACID_BREATH1 = 40508,
SPELL_FEL_ACID_BREATH2 = 40595,
SPELL_ARCING_SMASH1 = 40457,
SPELL_ARCING_SMASH2 = 40599,
SPELL_EJECT1 = 40486,
SPELL_EJECT2 = 40597,
SPELL_BEWILDERING_STRIKE = 40491,
SPELL_BLOODBOIL = 42005,
SPELL_ACID_GEYSER = 40630,
SPELL_BERSERK = 45078,
SPELL_CHARGE = 40602,
SPELL_FEL_GEYSER_SUMMON = 40569,
SPELL_FEL_GEYSER_STUN = 40591,
SPELL_FEL_GEYSER_DAMAGE = 40593,
SPELL_FEL_GEYSER_SUMMON = 40569,
SPELL_FEL_GEYSER_STUN = 40591,
SPELL_FEL_GEYSER_DAMAGE = 40593,
SPELL_FEL_RAGE_SELF = 40594,
SPELL_FEL_RAGE_TARGET = 40604,
SPELL_FEL_RAGE_2 = 40616,
SPELL_FEL_RAGE_3 = 41625,
SPELL_FEL_RAGE_SIZE = 46787,
SPELL_TAUNT_GURTOGG = 40603,
SPELL_INSIGNIFICANCE = 40618
SPELL_FEL_RAGE_SELF = 40594,
SPELL_FEL_RAGE_TARGET = 40604,
SPELL_FEL_RAGE_2 = 40616,
SPELL_FEL_RAGE_3 = 41625,
SPELL_FEL_RAGE_SIZE = 46787,
SPELL_TAUNT_GURTOGG = 40603,
SPELL_INSIGNIFICANCE = 40618
};
enum Misc
{
EVENT_SPELL_BLOOD_BOIL = 1,
EVENT_SPELL_BEWILDERING_STRIKE = 2,
EVENT_SPELL_FEL_ACID_BREATH = 3,
EVENT_SPELL_EJECT = 4,
EVENT_SPELL_ARCING_SMASH = 5,
EVENT_SPELL_CHARGE = 6,
EVENT_SPELL_BERSERK = 7,
EVENT_SPELL_FEL_GEYSER = 8,
EVENT_KILL_TALK = 9,
EVENT_SPELL_BLOOD_BOIL = 1,
EVENT_SPELL_BEWILDERING_STRIKE = 2,
EVENT_SPELL_FEL_ACID_BREATH = 3,
EVENT_SPELL_EJECT = 4,
EVENT_SPELL_ARCING_SMASH = 5,
EVENT_SPELL_CHARGE = 6,
EVENT_SPELL_BERSERK = 7,
EVENT_SPELL_FEL_GEYSER = 8,
EVENT_KILL_TALK = 9,
GROUP_DELAY = 1
GROUP_DELAY = 1
};
class boss_gurtogg_bloodboil : public CreatureScript
{
public:
boss_gurtogg_bloodboil() : CreatureScript("boss_gurtogg_bloodboil") { }
public:
boss_gurtogg_bloodboil() : CreatureScript("boss_gurtogg_bloodboil") { }
CreatureAI* GetAI(Creature* creature) const
{
return GetInstanceAI<boss_gurtogg_bloodboilAI>(creature);
}
CreatureAI* GetAI(Creature* creature) const
{
return GetInstanceAI<boss_gurtogg_bloodboilAI>(creature);
}
struct boss_gurtogg_bloodboilAI : public BossAI
{
boss_gurtogg_bloodboilAI(Creature* creature) : BossAI(creature, DATA_GURTOGG_BLOODBOIL)
{
}
struct boss_gurtogg_bloodboilAI : public BossAI
{
boss_gurtogg_bloodboilAI(Creature* creature) : BossAI(creature, DATA_GURTOGG_BLOODBOIL)
{
}
void Reset()
{
BossAI::Reset();
}
void Reset()
{
BossAI::Reset();
}
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
Talk(SAY_AGGRO);
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
Talk(SAY_AGGRO);
me->CastSpell(me, SPELL_ACIDIC_WOUND, true);
events.ScheduleEvent(EVENT_SPELL_BLOOD_BOIL, 10000);
events.ScheduleEvent(EVENT_SPELL_BEWILDERING_STRIKE, 28000, GROUP_DELAY);
events.ScheduleEvent(EVENT_SPELL_FEL_ACID_BREATH, 38000);
events.ScheduleEvent(EVENT_SPELL_EJECT, 14000);
events.ScheduleEvent(EVENT_SPELL_ARCING_SMASH, 5000);
events.ScheduleEvent(EVENT_SPELL_FEL_GEYSER, 60000);
events.ScheduleEvent(EVENT_SPELL_BERSERK, 600000);
}
me->CastSpell(me, SPELL_ACIDIC_WOUND, true);
events.ScheduleEvent(EVENT_SPELL_BLOOD_BOIL, 10000);
events.ScheduleEvent(EVENT_SPELL_BEWILDERING_STRIKE, 28000, GROUP_DELAY);
events.ScheduleEvent(EVENT_SPELL_FEL_ACID_BREATH, 38000);
events.ScheduleEvent(EVENT_SPELL_EJECT, 14000);
events.ScheduleEvent(EVENT_SPELL_ARCING_SMASH, 5000);
events.ScheduleEvent(EVENT_SPELL_FEL_GEYSER, 60000);
events.ScheduleEvent(EVENT_SPELL_BERSERK, 600000);
}
void KilledUnit(Unit* victim)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void KilledUnit(Unit* victim)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
summon->CastSpell(summon, SPELL_FEL_GEYSER_DAMAGE, false);
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
summon->CastSpell(summon, SPELL_FEL_GEYSER_DAMAGE, false);
}
void JustDied(Unit* killer)
{
BossAI::JustDied(killer);
Talk(SAY_DEATH);
}
void JustDied(Unit* killer)
{
BossAI::JustDied(killer);
Talk(SAY_DEATH);
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_SPELL_BERSERK:
Talk(SAY_ENRAGE);
me->CastSpell(me, SPELL_BERSERK, true);
break;
case EVENT_SPELL_BLOOD_BOIL:
me->CastCustomSpell(SPELL_BLOODBOIL, SPELLVALUE_MAX_TARGETS, 5, me, false);
events.ScheduleEvent(EVENT_SPELL_BLOOD_BOIL, 10000);
break;
case EVENT_SPELL_BEWILDERING_STRIKE:
me->CastSpell(me->GetVictim(), SPELL_BEWILDERING_STRIKE, false);
events.ScheduleEvent(EVENT_SPELL_BEWILDERING_STRIKE, 30000, GROUP_DELAY);
break;
case EVENT_SPELL_FEL_ACID_BREATH:
me->CastSpell(me->GetVictim(), me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_FEL_ACID_BREATH2 : SPELL_FEL_ACID_BREATH1, false);
events.ScheduleEvent(EVENT_SPELL_FEL_ACID_BREATH, 30000);
break;
case EVENT_SPELL_EJECT:
me->CastSpell(me->GetVictim(), me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_EJECT2 : SPELL_EJECT1, false);
events.ScheduleEvent(EVENT_SPELL_EJECT, 20000);
break;
case EVENT_SPELL_ARCING_SMASH:
me->CastSpell(me->GetVictim(), me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_ARCING_SMASH2 : SPELL_ARCING_SMASH1, false);
events.ScheduleEvent(EVENT_SPELL_ARCING_SMASH, 15000);
break;
case EVENT_SPELL_FEL_GEYSER:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 40.0f, true))
{
me->RemoveAurasByType(SPELL_AURA_MOD_TAUNT);
me->CastSpell(me, SPELL_FEL_RAGE_SELF, true);
me->CastSpell(target, SPELL_FEL_RAGE_TARGET, true);
me->CastSpell(target, SPELL_FEL_RAGE_2, true);
me->CastSpell(target, SPELL_FEL_RAGE_3, true);
me->CastSpell(target, SPELL_FEL_RAGE_SIZE, true);
target->CastSpell(me, SPELL_TAUNT_GURTOGG, true);
switch (events.ExecuteEvent())
{
case EVENT_SPELL_BERSERK:
Talk(SAY_ENRAGE);
me->CastSpell(me, SPELL_BERSERK, true);
break;
case EVENT_SPELL_BLOOD_BOIL:
me->CastCustomSpell(SPELL_BLOODBOIL, SPELLVALUE_MAX_TARGETS, 5, me, false);
events.ScheduleEvent(EVENT_SPELL_BLOOD_BOIL, 10000);
break;
case EVENT_SPELL_BEWILDERING_STRIKE:
me->CastSpell(me->GetVictim(), SPELL_BEWILDERING_STRIKE, false);
events.ScheduleEvent(EVENT_SPELL_BEWILDERING_STRIKE, 30000, GROUP_DELAY);
break;
case EVENT_SPELL_FEL_ACID_BREATH:
me->CastSpell(me->GetVictim(), me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_FEL_ACID_BREATH2 : SPELL_FEL_ACID_BREATH1, false);
events.ScheduleEvent(EVENT_SPELL_FEL_ACID_BREATH, 30000);
break;
case EVENT_SPELL_EJECT:
me->CastSpell(me->GetVictim(), me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_EJECT2 : SPELL_EJECT1, false);
events.ScheduleEvent(EVENT_SPELL_EJECT, 20000);
break;
case EVENT_SPELL_ARCING_SMASH:
me->CastSpell(me->GetVictim(), me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_ARCING_SMASH2 : SPELL_ARCING_SMASH1, false);
events.ScheduleEvent(EVENT_SPELL_ARCING_SMASH, 15000);
break;
case EVENT_SPELL_FEL_GEYSER:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 40.0f, true))
{
me->RemoveAurasByType(SPELL_AURA_MOD_TAUNT);
me->CastSpell(me, SPELL_FEL_RAGE_SELF, true);
me->CastSpell(target, SPELL_FEL_RAGE_TARGET, true);
me->CastSpell(target, SPELL_FEL_RAGE_2, true);
me->CastSpell(target, SPELL_FEL_RAGE_3, true);
me->CastSpell(target, SPELL_FEL_RAGE_SIZE, true);
target->CastSpell(me, SPELL_TAUNT_GURTOGG, true);
me->CastSpell(target, SPELL_FEL_GEYSER_SUMMON, true);
me->CastSpell(me, SPELL_FEL_GEYSER_STUN, true);
me->CastSpell(me, SPELL_INSIGNIFICANCE, true);
events.ScheduleEvent(EVENT_SPELL_CHARGE, 2000);
events.DelayEvents(30000, GROUP_DELAY);
}
events.ScheduleEvent(EVENT_SPELL_FEL_GEYSER, 90000);
break;
case EVENT_SPELL_CHARGE:
me->CastSpell(me->GetVictim(), SPELL_CHARGE, true);
break;
}
me->CastSpell(target, SPELL_FEL_GEYSER_SUMMON, true);
me->CastSpell(me, SPELL_FEL_GEYSER_STUN, true);
me->CastSpell(me, SPELL_INSIGNIFICANCE, true);
events.ScheduleEvent(EVENT_SPELL_CHARGE, 2000);
events.DelayEvents(30000, GROUP_DELAY);
}
events.ScheduleEvent(EVENT_SPELL_FEL_GEYSER, 90000);
break;
case EVENT_SPELL_CHARGE:
me->CastSpell(me->GetVictim(), SPELL_CHARGE, true);
break;
}
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const
{
return me->GetHomePosition().GetExactDist2d(me) > 105.0f;
}
};
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const
{
return me->GetHomePosition().GetExactDist2d(me) > 105.0f;
}
};
};
@@ -197,16 +197,16 @@ class spell_gurtogg_bloodboil : public SpellScriptLoader
void FilterTargets(std::list<WorldObject*>& targets)
{
if (targets.empty())
return;
if (targets.empty())
return;
targets.sort(Trinity::ObjectDistanceOrderPred(GetCaster(), false));
if (targets.size() > GetSpellValue()->MaxAffectedTargets)
{
std::list<WorldObject*>::iterator itr = targets.begin();
std::advance(itr, GetSpellValue()->MaxAffectedTargets);
targets.erase(itr, targets.end());
}
targets.sort(Trinity::ObjectDistanceOrderPred(GetCaster(), false));
if (targets.size() > GetSpellValue()->MaxAffectedTargets)
{
std::list<WorldObject*>::iterator itr = targets.begin();
std::advance(itr, GetSpellValue()->MaxAffectedTargets);
targets.erase(itr, targets.end());
}
}
void Register()
@@ -232,9 +232,9 @@ class spell_gurtogg_eject : public SpellScriptLoader
void HandleScriptEffect(SpellEffIndex effIndex)
{
PreventHitEffect(effIndex);
if (Unit* target = GetHitUnit())
GetCaster()->getThreatManager().modifyThreatPercent(target, -20);
PreventHitEffect(effIndex);
if (Unit* target = GetHitUnit())
GetCaster()->getThreatManager().modifyThreatPercent(target, -20);
}
void Register()
@@ -252,6 +252,6 @@ class spell_gurtogg_eject : public SpellScriptLoader
void AddSC_boss_gurtogg_bloodboil()
{
new boss_gurtogg_bloodboil();
new spell_gurtogg_bloodboil();
new spell_gurtogg_eject();
new spell_gurtogg_bloodboil();
new spell_gurtogg_eject();
}

File diff suppressed because it is too large Load Diff

View File

@@ -8,153 +8,153 @@ REWRITTEN BY XINEF
enum Says
{
SAY_TAUNT = 0,
SAY_AGGRO = 1,
SAY_SPELL = 2,
SAY_SLAY = 3,
SAY_ENRAGE = 4,
SAY_DEATH = 5,
SAY_EMOTE_FRENZY = 6
SAY_TAUNT = 0,
SAY_AGGRO = 1,
SAY_SPELL = 2,
SAY_SLAY = 3,
SAY_ENRAGE = 4,
SAY_DEATH = 5,
SAY_EMOTE_FRENZY = 6
};
enum Spells
{
SPELL_PRISMATIC_AURA_SHADOW = 40880,
SPELL_PRISMATIC_AURA_FIRE = 40882,
SPELL_PRISMATIC_AURA_NATURE = 40883,
SPELL_PRISMATIC_AURA_ARCANE = 40891,
SPELL_PRISMATIC_AURA_FROST = 40896,
SPELL_PRISMATIC_AURA_HOLY = 40897,
SPELL_SABER_LASH_AURA = 40816,
SPELL_SABER_LASH = 40810,
SPELL_SILENCING_SHRIEK = 40823,
SPELL_RANDOM_PERIODIC = 40867,
SPELL_SINFUL_PERIODIC = 40862,
SPELL_SINISTER_PERIODIC = 40863,
SPELL_VILE_PERIODIC = 40865,
SPELL_WICKED_PERIODIC = 40866,
SPELL_FATAL_ATTRACTION = 40869,
SPELL_FATAL_ATTRACTION_AURA = 41001,
SPELL_FATAL_ATTRACTION_DAMAGE = 40871,
SPELL_ENRAGE = 45078,
SPELL_FRENZY = 40683,
SPELL_SABER_LASH_IMMUNITY = 43690
SPELL_PRISMATIC_AURA_SHADOW = 40880,
SPELL_PRISMATIC_AURA_FIRE = 40882,
SPELL_PRISMATIC_AURA_NATURE = 40883,
SPELL_PRISMATIC_AURA_ARCANE = 40891,
SPELL_PRISMATIC_AURA_FROST = 40896,
SPELL_PRISMATIC_AURA_HOLY = 40897,
SPELL_SABER_LASH_AURA = 40816,
SPELL_SABER_LASH = 40810,
SPELL_SILENCING_SHRIEK = 40823,
SPELL_RANDOM_PERIODIC = 40867,
SPELL_SINFUL_PERIODIC = 40862,
SPELL_SINISTER_PERIODIC = 40863,
SPELL_VILE_PERIODIC = 40865,
SPELL_WICKED_PERIODIC = 40866,
SPELL_FATAL_ATTRACTION = 40869,
SPELL_FATAL_ATTRACTION_AURA = 41001,
SPELL_FATAL_ATTRACTION_DAMAGE = 40871,
SPELL_ENRAGE = 45078,
SPELL_FRENZY = 40683,
SPELL_SABER_LASH_IMMUNITY = 43690
};
enum Misc
{
EVENT_KILL_TALK = 1,
EVENT_CHECK_HEALTH = 2,
EVENT_RANDOM_TALK = 3,
EVENT_SPELL_ENRAGE = 4,
EVENT_SPELL_PRISMATIC_AURA = 5,
EVENT_SPELL_SILENCING_SHRIEK = 6,
EVENT_SPELL_FATAL_ATTRACTION = 7,
EVENT_SPELL_SABER_LASH = 8
EVENT_KILL_TALK = 1,
EVENT_CHECK_HEALTH = 2,
EVENT_RANDOM_TALK = 3,
EVENT_SPELL_ENRAGE = 4,
EVENT_SPELL_PRISMATIC_AURA = 5,
EVENT_SPELL_SILENCING_SHRIEK = 6,
EVENT_SPELL_FATAL_ATTRACTION = 7,
EVENT_SPELL_SABER_LASH = 8
};
class boss_mother_shahraz : public CreatureScript
{
public:
boss_mother_shahraz() : CreatureScript("boss_mother_shahraz") { }
public:
boss_mother_shahraz() : CreatureScript("boss_mother_shahraz") { }
CreatureAI* GetAI(Creature* creature) const
{
return GetInstanceAI<boss_shahrazAI>(creature);
}
CreatureAI* GetAI(Creature* creature) const
{
return GetInstanceAI<boss_shahrazAI>(creature);
}
struct boss_shahrazAI : public BossAI
{
boss_shahrazAI(Creature* creature) : BossAI(creature, DATA_MOTHER_SHAHRAZ)
{
}
struct boss_shahrazAI : public BossAI
{
boss_shahrazAI(Creature* creature) : BossAI(creature, DATA_MOTHER_SHAHRAZ)
{
}
void Reset()
{
BossAI::Reset();
}
void Reset()
{
BossAI::Reset();
}
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
Talk(SAY_AGGRO);
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
Talk(SAY_AGGRO);
me->CastSpell(me, SPELL_SABER_LASH_AURA, true);
me->CastSpell(me, SPELL_RANDOM_PERIODIC, true);
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
events.ScheduleEvent(EVENT_RANDOM_TALK, 60000);
events.ScheduleEvent(EVENT_SPELL_PRISMATIC_AURA, 0);
events.ScheduleEvent(EVENT_SPELL_ENRAGE, 600000);
events.ScheduleEvent(EVENT_SPELL_SILENCING_SHRIEK, 30000);
events.ScheduleEvent(EVENT_SPELL_FATAL_ATTRACTION, 50000);
events.ScheduleEvent(EVENT_SPELL_SABER_LASH, 4000);
}
me->CastSpell(me, SPELL_SABER_LASH_AURA, true);
me->CastSpell(me, SPELL_RANDOM_PERIODIC, true);
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
events.ScheduleEvent(EVENT_RANDOM_TALK, 60000);
events.ScheduleEvent(EVENT_SPELL_PRISMATIC_AURA, 0);
events.ScheduleEvent(EVENT_SPELL_ENRAGE, 600000);
events.ScheduleEvent(EVENT_SPELL_SILENCING_SHRIEK, 30000);
events.ScheduleEvent(EVENT_SPELL_FATAL_ATTRACTION, 50000);
events.ScheduleEvent(EVENT_SPELL_SABER_LASH, 4000);
}
void KilledUnit(Unit* /*victim*/)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void KilledUnit(Unit* /*victim*/)
{
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
}
}
void JustDied(Unit* killer)
{
BossAI::JustDied(killer);
Talk(SAY_DEATH);
}
void JustDied(Unit* killer)
{
BossAI::JustDied(killer);
Talk(SAY_DEATH);
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_CHECK_HEALTH:
if (HealthBelowPct(10))
{
me->CastSpell(me, SPELL_FRENZY, true);
Talk(SAY_EMOTE_FRENZY);
break;
}
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
break;
case EVENT_SPELL_ENRAGE:
me->CastSpell(me, SPELL_ENRAGE, true);
Talk(SAY_ENRAGE);
break;
case EVENT_RANDOM_TALK:
Talk(SAY_TAUNT);
events.ScheduleEvent(EVENT_RANDOM_TALK, urand(60000, 120000));
break;
case EVENT_SPELL_SABER_LASH:
me->CastSpell(me->GetVictim(), SPELL_SABER_LASH, false);
events.ScheduleEvent(EVENT_SPELL_SABER_LASH, 30000);
break;
case EVENT_SPELL_PRISMATIC_AURA:
me->CastSpell(me, RAND(SPELL_PRISMATIC_AURA_SHADOW, SPELL_PRISMATIC_AURA_FIRE, SPELL_PRISMATIC_AURA_NATURE, SPELL_PRISMATIC_AURA_ARCANE, SPELL_PRISMATIC_AURA_FROST, SPELL_PRISMATIC_AURA_HOLY), false);
events.ScheduleEvent(EVENT_SPELL_PRISMATIC_AURA, 15000);
break;
case EVENT_SPELL_SILENCING_SHRIEK:
me->CastSpell(me, SPELL_SILENCING_SHRIEK, false);
events.ScheduleEvent(EVENT_SPELL_SILENCING_SHRIEK, 30000);
break;
case EVENT_SPELL_FATAL_ATTRACTION:
Talk(SAY_SPELL);
me->CastCustomSpell(SPELL_FATAL_ATTRACTION, SPELLVALUE_MAX_TARGETS, 3, me, false);
events.ScheduleEvent(EVENT_SPELL_FATAL_ATTRACTION, 60000);
break;
}
switch (events.ExecuteEvent())
{
case EVENT_CHECK_HEALTH:
if (HealthBelowPct(10))
{
me->CastSpell(me, SPELL_FRENZY, true);
Talk(SAY_EMOTE_FRENZY);
break;
}
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
break;
case EVENT_SPELL_ENRAGE:
me->CastSpell(me, SPELL_ENRAGE, true);
Talk(SAY_ENRAGE);
break;
case EVENT_RANDOM_TALK:
Talk(SAY_TAUNT);
events.ScheduleEvent(EVENT_RANDOM_TALK, urand(60000, 120000));
break;
case EVENT_SPELL_SABER_LASH:
me->CastSpell(me->GetVictim(), SPELL_SABER_LASH, false);
events.ScheduleEvent(EVENT_SPELL_SABER_LASH, 30000);
break;
case EVENT_SPELL_PRISMATIC_AURA:
me->CastSpell(me, RAND(SPELL_PRISMATIC_AURA_SHADOW, SPELL_PRISMATIC_AURA_FIRE, SPELL_PRISMATIC_AURA_NATURE, SPELL_PRISMATIC_AURA_ARCANE, SPELL_PRISMATIC_AURA_FROST, SPELL_PRISMATIC_AURA_HOLY), false);
events.ScheduleEvent(EVENT_SPELL_PRISMATIC_AURA, 15000);
break;
case EVENT_SPELL_SILENCING_SHRIEK:
me->CastSpell(me, SPELL_SILENCING_SHRIEK, false);
events.ScheduleEvent(EVENT_SPELL_SILENCING_SHRIEK, 30000);
break;
case EVENT_SPELL_FATAL_ATTRACTION:
Talk(SAY_SPELL);
me->CastCustomSpell(SPELL_FATAL_ATTRACTION, SPELLVALUE_MAX_TARGETS, 3, me, false);
events.ScheduleEvent(EVENT_SPELL_FATAL_ATTRACTION, 60000);
break;
}
DoMeleeAttackIfReady();
}
};
DoMeleeAttackIfReady();
}
};
};
class spell_mother_shahraz_random_periodic : public SpellScriptLoader
@@ -166,16 +166,16 @@ class spell_mother_shahraz_random_periodic : public SpellScriptLoader
{
PrepareAuraScript(spell_mother_shahraz_random_periodic_AuraScript);
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (effect->GetTickNumber()%5 == 1)
GetUnitOwner()->CastSpell(GetUnitOwner(), RAND(SPELL_SINFUL_PERIODIC, SPELL_SINISTER_PERIODIC, SPELL_VILE_PERIODIC, SPELL_WICKED_PERIODIC), true);
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (effect->GetTickNumber()%5 == 1)
GetUnitOwner()->CastSpell(GetUnitOwner(), RAND(SPELL_SINFUL_PERIODIC, SPELL_SINISTER_PERIODIC, SPELL_VILE_PERIODIC, SPELL_WICKED_PERIODIC), true);
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mother_shahraz_random_periodic_AuraScript::Update, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mother_shahraz_random_periodic_AuraScript::Update, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
@@ -194,16 +194,16 @@ class spell_mother_shahraz_beam_periodic : public SpellScriptLoader
{
PrepareAuraScript(spell_mother_shahraz_beam_periodic_AuraScript);
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0))
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[effect->GetEffIndex()].TriggerSpell, true);
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0))
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[effect->GetEffIndex()].TriggerSpell, true);
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mother_shahraz_beam_periodic_AuraScript::Update, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mother_shahraz_beam_periodic_AuraScript::Update, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
@@ -224,20 +224,20 @@ class spell_mother_shahraz_saber_lash : public SpellScriptLoader
bool CheckProc(ProcEventInfo& eventInfo)
{
return false;
return false;
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (Unit* target = GetUnitOwner()->GetVictim())
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[effect->GetEffIndex()].TriggerSpell, true);
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (Unit* target = GetUnitOwner()->GetVictim())
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[effect->GetEffIndex()].TriggerSpell, true);
}
void Register()
{
DoCheckProc += AuraCheckProcFn(spell_mother_shahraz_saber_lash_AuraScript::CheckProc);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mother_shahraz_saber_lash_AuraScript::Update, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mother_shahraz_saber_lash_AuraScript::Update, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
@@ -258,27 +258,27 @@ class spell_mother_shahraz_fatal_attraction : public SpellScriptLoader
void FilterTargets(std::list<WorldObject*>& targets)
{
targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SABER_LASH_IMMUNITY));
if (targets.size() <= 1)
FinishCast(SPELL_FAILED_DONT_REPORT);
targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SABER_LASH_IMMUNITY));
if (targets.size() <= 1)
FinishCast(SPELL_FAILED_DONT_REPORT);
}
void SetDest(SpellDestination& dest)
{
std::list<Spell::TargetInfo> const* targetsInfo = GetSpell()->GetUniqueTargetInfo();
for (std::list<Spell::TargetInfo>::const_iterator ihit = targetsInfo->begin(); ihit != targetsInfo->end(); ++ihit)
if (Unit* target = ObjectAccessor::GetUnit(*GetCaster(), ihit->targetGUID))
{
dest.Relocate(*target);
if (roll_chance_i(50))
break;
}
std::list<Spell::TargetInfo> const* targetsInfo = GetSpell()->GetUniqueTargetInfo();
for (std::list<Spell::TargetInfo>::const_iterator ihit = targetsInfo->begin(); ihit != targetsInfo->end(); ++ihit)
if (Unit* target = ObjectAccessor::GetUnit(*GetCaster(), ihit->targetGUID))
{
dest.Relocate(*target);
if (roll_chance_i(50))
break;
}
}
void HandleTeleportUnits(SpellEffIndex effIndex)
{
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_FATAL_ATTRACTION_AURA, true);
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_FATAL_ATTRACTION_AURA, true);
}
void Register()
@@ -306,12 +306,12 @@ class spell_mother_shahraz_fatal_attraction_dummy : public SpellScriptLoader
void HandleDummy(SpellEffIndex effIndex)
{
if (Unit* target = GetHitUnit())
{
target->CastSpell(target, SPELL_FATAL_ATTRACTION_DAMAGE, true);
if (AuraEffect* aurEff = target->GetAuraEffect(SPELL_FATAL_ATTRACTION_AURA, EFFECT_1))
aurEff->SetAmount(aurEff->GetTickNumber());
}
if (Unit* target = GetHitUnit())
{
target->CastSpell(target, SPELL_FATAL_ATTRACTION_DAMAGE, true);
if (AuraEffect* aurEff = target->GetAuraEffect(SPELL_FATAL_ATTRACTION_AURA, EFFECT_1))
aurEff->SetAmount(aurEff->GetTickNumber());
}
}
void Register()
@@ -335,18 +335,18 @@ class spell_mother_shahraz_fatal_attraction_aura : public SpellScriptLoader
{
PrepareAuraScript(spell_mother_shahraz_fatal_attraction_aura_AuraScript);
void Update(AuraEffect const* effect)
{
if (effect->GetTickNumber() > uint32(effect->GetAmount()+1))
{
PreventDefaultAction();
SetDuration(0);
}
}
void Update(AuraEffect const* effect)
{
if (effect->GetTickNumber() > uint32(effect->GetAmount()+1))
{
PreventDefaultAction();
SetDuration(0);
}
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mother_shahraz_fatal_attraction_aura_AuraScript::Update, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mother_shahraz_fatal_attraction_aura_AuraScript::Update, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
@@ -359,10 +359,10 @@ class spell_mother_shahraz_fatal_attraction_aura : public SpellScriptLoader
void AddSC_boss_mother_shahraz()
{
new boss_mother_shahraz();
new spell_mother_shahraz_random_periodic();
new spell_mother_shahraz_beam_periodic();
new spell_mother_shahraz_saber_lash();
new spell_mother_shahraz_fatal_attraction();
new spell_mother_shahraz_fatal_attraction_dummy();
new spell_mother_shahraz_fatal_attraction_aura();
new spell_mother_shahraz_random_periodic();
new spell_mother_shahraz_beam_periodic();
new spell_mother_shahraz_saber_lash();
new spell_mother_shahraz_fatal_attraction();
new spell_mother_shahraz_fatal_attraction_dummy();
new spell_mother_shahraz_fatal_attraction_aura();
}

View File

@@ -8,187 +8,187 @@ REWRITTEN BY XINEF
enum Supremus
{
EMOTE_NEW_TARGET = 0,
EMOTE_PUNCH_GROUND = 1,
EMOTE_GROUND_CRACK = 2,
EMOTE_NEW_TARGET = 0,
EMOTE_PUNCH_GROUND = 1,
EMOTE_GROUND_CRACK = 2,
SPELL_SNARE_SELF = 41922,
SPELL_MOLTEN_PUNCH = 40126,
SPELL_HATEFUL_STRIKE = 41926,
SPELL_VOLCANIC_ERUPTION = 40276,
SPELL_VOLCANIC_ERUPTION_TRIGGER = 40117,
SPELL_BERSERK = 45078,
SPELL_CHARGE = 41581,
SPELL_SNARE_SELF = 41922,
SPELL_MOLTEN_PUNCH = 40126,
SPELL_HATEFUL_STRIKE = 41926,
SPELL_VOLCANIC_ERUPTION = 40276,
SPELL_VOLCANIC_ERUPTION_TRIGGER = 40117,
SPELL_BERSERK = 45078,
SPELL_CHARGE = 41581,
NPC_SUPREMUS_PUNCH_STALKER = 23095,
NPC_SUPREMUS_PUNCH_STALKER = 23095,
EVENT_SPELL_BERSERK = 1,
EVENT_SPELL_HATEFUL_STRIKE = 2,
EVENT_SPELL_MOLTEN_FLAMES = 3,
EVENT_SWITCH_PHASE = 4,
EVENT_SPELL_VOLCANIC_ERUPTION = 5,
EVENT_SWITCH_TARGET = 6,
EVENT_CHECK_DIST = 7,
EVENT_SPELL_BERSERK = 1,
EVENT_SPELL_HATEFUL_STRIKE = 2,
EVENT_SPELL_MOLTEN_FLAMES = 3,
EVENT_SWITCH_PHASE = 4,
EVENT_SPELL_VOLCANIC_ERUPTION = 5,
EVENT_SWITCH_TARGET = 6,
EVENT_CHECK_DIST = 7,
EVENT_GROUP_ABILITIES = 1
EVENT_GROUP_ABILITIES = 1
};
class boss_supremus : public CreatureScript
{
public:
boss_supremus() : CreatureScript("boss_supremus") { }
public:
boss_supremus() : CreatureScript("boss_supremus") { }
CreatureAI* GetAI(Creature* creature) const
{
return GetInstanceAI<boss_supremusAI>(creature);
}
CreatureAI* GetAI(Creature* creature) const
{
return GetInstanceAI<boss_supremusAI>(creature);
}
struct boss_supremusAI : public BossAI
{
boss_supremusAI(Creature* creature) : BossAI(creature, DATA_SUPREMUS)
{
}
struct boss_supremusAI : public BossAI
{
boss_supremusAI(Creature* creature) : BossAI(creature, DATA_SUPREMUS)
{
}
void Reset()
{
BossAI::Reset();
}
void Reset()
{
BossAI::Reset();
}
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
SchedulePhase(false);
events.ScheduleEvent(EVENT_SPELL_BERSERK, 900000);
events.ScheduleEvent(EVENT_SPELL_MOLTEN_FLAMES, 4000);
}
SchedulePhase(false);
events.ScheduleEvent(EVENT_SPELL_BERSERK, 900000);
events.ScheduleEvent(EVENT_SPELL_MOLTEN_FLAMES, 4000);
}
void SchedulePhase(bool run)
{
events.CancelEventGroup(EVENT_GROUP_ABILITIES);
events.ScheduleEvent(EVENT_SWITCH_PHASE, 60000);
DoResetThreat();
void SchedulePhase(bool run)
{
events.CancelEventGroup(EVENT_GROUP_ABILITIES);
events.ScheduleEvent(EVENT_SWITCH_PHASE, 60000);
DoResetThreat();
if (!run)
{
events.ScheduleEvent(EVENT_SPELL_HATEFUL_STRIKE, 5000, EVENT_GROUP_ABILITIES);
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false);
me->RemoveAurasDueToSpell(SPELL_SNARE_SELF);
}
else
{
events.ScheduleEvent(EVENT_SPELL_VOLCANIC_ERUPTION, 5000, EVENT_GROUP_ABILITIES);
events.ScheduleEvent(EVENT_SWITCH_TARGET, 0, EVENT_GROUP_ABILITIES);
events.ScheduleEvent(EVENT_CHECK_DIST, 0, EVENT_GROUP_ABILITIES);
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
me->CastSpell(me, SPELL_SNARE_SELF, true);
}
}
if (!run)
{
events.ScheduleEvent(EVENT_SPELL_HATEFUL_STRIKE, 5000, EVENT_GROUP_ABILITIES);
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false);
me->RemoveAurasDueToSpell(SPELL_SNARE_SELF);
}
else
{
events.ScheduleEvent(EVENT_SPELL_VOLCANIC_ERUPTION, 5000, EVENT_GROUP_ABILITIES);
events.ScheduleEvent(EVENT_SWITCH_TARGET, 0, EVENT_GROUP_ABILITIES);
events.ScheduleEvent(EVENT_CHECK_DIST, 0, EVENT_GROUP_ABILITIES);
me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
me->CastSpell(me, SPELL_SNARE_SELF, true);
}
}
void JustDied(Unit* killer)
{
BossAI::JustDied(killer);
}
void JustDied(Unit* killer)
{
BossAI::JustDied(killer);
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
if (summon->GetEntry() == NPC_SUPREMUS_PUNCH_STALKER)
{
summon->ToTempSummon()->InitStats(20000);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
summon->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
}
else
summon->CastSpell(summon, SPELL_VOLCANIC_ERUPTION_TRIGGER, true);
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
if (summon->GetEntry() == NPC_SUPREMUS_PUNCH_STALKER)
{
summon->ToTempSummon()->InitStats(20000);
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
summon->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
}
else
summon->CastSpell(summon, SPELL_VOLCANIC_ERUPTION_TRIGGER, true);
}
void SummonedCreatureDespawn(Creature* summon)
{
summons.Despawn(summon);
}
void SummonedCreatureDespawn(Creature* summon)
{
summons.Despawn(summon);
}
Unit* FindHatefulStrikeTarget()
{
Unit* target = NULL;
ThreatContainer::StorageType const &threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i)
{
Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && me->IsWithinMeleeRange(unit))
if (!target || unit->GetHealth() > target->GetHealth())
target = unit;
}
Unit* FindHatefulStrikeTarget()
{
Unit* target = NULL;
ThreatContainer::StorageType const &threatlist = me->getThreatManager().getThreatList();
for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i)
{
Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid());
if (unit && me->IsWithinMeleeRange(unit))
if (!target || unit->GetHealth() > target->GetHealth())
target = unit;
}
return target;
}
return target;
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_SPELL_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true);
break;
case EVENT_SPELL_HATEFUL_STRIKE:
if (Unit* target = FindHatefulStrikeTarget())
me->CastSpell(target, SPELL_HATEFUL_STRIKE, false);
events.ScheduleEvent(EVENT_SPELL_HATEFUL_STRIKE, urand(1500, 3000), EVENT_GROUP_ABILITIES);
break;
case EVENT_SPELL_MOLTEN_FLAMES:
me->CastSpell(me, SPELL_MOLTEN_PUNCH, false);
events.ScheduleEvent(EVENT_SPELL_MOLTEN_FLAMES, 20000, EVENT_GROUP_ABILITIES);
break;
case EVENT_SWITCH_PHASE:
SchedulePhase(!me->HasAura(SPELL_SNARE_SELF));
break;
case EVENT_SWITCH_TARGET:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
DoResetThreat();
me->AddThreat(target, 5000000.0f);
Talk(EMOTE_NEW_TARGET);
}
events.ScheduleEvent(EVENT_SWITCH_TARGET, 10000, EVENT_GROUP_ABILITIES);
break;
case EVENT_CHECK_DIST:
if (me->GetDistance(me->GetVictim()) > 40.0f)
{
Talk(EMOTE_PUNCH_GROUND);
me->CastSpell(me->GetVictim(), SPELL_CHARGE, true);
events.ScheduleEvent(EVENT_CHECK_DIST, 5000, EVENT_GROUP_ABILITIES);
break;
}
events.ScheduleEvent(EVENT_CHECK_DIST, 1, EVENT_GROUP_ABILITIES);
break;
case EVENT_SPELL_VOLCANIC_ERUPTION:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
me->CastSpell(target, SPELL_VOLCANIC_ERUPTION, true);
Talk(EMOTE_GROUND_CRACK);
}
events.ScheduleEvent(EVENT_SPELL_VOLCANIC_ERUPTION, urand(10000, 18000), EVENT_GROUP_ABILITIES);
break;
}
switch (events.ExecuteEvent())
{
case EVENT_SPELL_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true);
break;
case EVENT_SPELL_HATEFUL_STRIKE:
if (Unit* target = FindHatefulStrikeTarget())
me->CastSpell(target, SPELL_HATEFUL_STRIKE, false);
events.ScheduleEvent(EVENT_SPELL_HATEFUL_STRIKE, urand(1500, 3000), EVENT_GROUP_ABILITIES);
break;
case EVENT_SPELL_MOLTEN_FLAMES:
me->CastSpell(me, SPELL_MOLTEN_PUNCH, false);
events.ScheduleEvent(EVENT_SPELL_MOLTEN_FLAMES, 20000, EVENT_GROUP_ABILITIES);
break;
case EVENT_SWITCH_PHASE:
SchedulePhase(!me->HasAura(SPELL_SNARE_SELF));
break;
case EVENT_SWITCH_TARGET:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
DoResetThreat();
me->AddThreat(target, 5000000.0f);
Talk(EMOTE_NEW_TARGET);
}
events.ScheduleEvent(EVENT_SWITCH_TARGET, 10000, EVENT_GROUP_ABILITIES);
break;
case EVENT_CHECK_DIST:
if (me->GetDistance(me->GetVictim()) > 40.0f)
{
Talk(EMOTE_PUNCH_GROUND);
me->CastSpell(me->GetVictim(), SPELL_CHARGE, true);
events.ScheduleEvent(EVENT_CHECK_DIST, 5000, EVENT_GROUP_ABILITIES);
break;
}
events.ScheduleEvent(EVENT_CHECK_DIST, 1, EVENT_GROUP_ABILITIES);
break;
case EVENT_SPELL_VOLCANIC_ERUPTION:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
me->CastSpell(target, SPELL_VOLCANIC_ERUPTION, true);
Talk(EMOTE_GROUND_CRACK);
}
events.ScheduleEvent(EVENT_SPELL_VOLCANIC_ERUPTION, urand(10000, 18000), EVENT_GROUP_ABILITIES);
break;
}
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const
{
return me->GetPositionX() < 565 || me->GetPositionX() > 865 || me->GetPositionY() < 545 || me->GetPositionY() > 1000;
}
};
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const
{
return me->GetPositionX() < 565 || me->GetPositionX() > 865 || me->GetPositionY() < 545 || me->GetPositionY() > 1000;
}
};
};
void AddSC_boss_supremus()

View File

@@ -8,45 +8,45 @@ REWRITTEN BY XINEF
enum Says
{
SAY_INTRO = 0,
SAY_AGGRO = 1,
SAY_SLAY = 2,
SAY_BLOSSOM = 3,
SAY_INCINERATE = 4,
SAY_CRUSHING = 5,
SAY_DEATH = 6
SAY_INTRO = 0,
SAY_AGGRO = 1,
SAY_SLAY = 2,
SAY_BLOSSOM = 3,
SAY_INCINERATE = 4,
SAY_CRUSHING = 5,
SAY_DEATH = 6
};
enum Spells
{
SPELL_INCINERATE = 40239,
SPELL_SUMMON_DOOM_BLOSSOM = 40188,
SPELL_CRUSHING_SHADOWS = 40243,
SPELL_SHADOW_OF_DEATH = 40251,
SPELL_SHADOW_OF_DEATH_REMOVE = 41999,
SPELL_SUMMON_SPIRIT = 40266,
SPELL_SUMMON_SKELETON1 = 40270,
SPELL_SUMMON_SKELETON2 = 41948,
SPELL_SUMMON_SKELETON3 = 41949,
SPELL_SUMMON_SKELETON4 = 41950,
SPELL_POSSESS_SPIRIT_IMMUNE = 40282,
SPELL_SPIRITUAL_VENGEANCE = 40268,
SPELL_BRIEF_STUN = 41421,
SPELL_INCINERATE = 40239,
SPELL_SUMMON_DOOM_BLOSSOM = 40188,
SPELL_CRUSHING_SHADOWS = 40243,
SPELL_SHADOW_OF_DEATH = 40251,
SPELL_SHADOW_OF_DEATH_REMOVE = 41999,
SPELL_SUMMON_SPIRIT = 40266,
SPELL_SUMMON_SKELETON1 = 40270,
SPELL_SUMMON_SKELETON2 = 41948,
SPELL_SUMMON_SKELETON3 = 41949,
SPELL_SUMMON_SKELETON4 = 41950,
SPELL_POSSESS_SPIRIT_IMMUNE = 40282,
SPELL_SPIRITUAL_VENGEANCE = 40268,
SPELL_BRIEF_STUN = 41421,
SPELL_SPIRIT_LANCE = 40157,
SPELL_SPIRIT_CHAINS = 40175,
SPELL_SPIRIT_VOLLEY = 40314
SPELL_SPIRIT_LANCE = 40157,
SPELL_SPIRIT_CHAINS = 40175,
SPELL_SPIRIT_VOLLEY = 40314
};
enum Misc
{
SET_DATA_INTRO = 1,
SET_DATA_INTRO = 1,
EVENT_SPELL_INCINERATE = 1,
EVENT_SPELL_DOOM_BLOSSOM = 2,
EVENT_SPELL_CRUSHING_SHADOWS = 3,
EVENT_SPELL_SHADOW_OF_DEATH = 4,
EVENT_TALK_KILL = 10
EVENT_SPELL_INCINERATE = 1,
EVENT_SPELL_DOOM_BLOSSOM = 2,
EVENT_SPELL_CRUSHING_SHADOWS = 3,
EVENT_SPELL_SHADOW_OF_DEATH = 4,
EVENT_TALK_KILL = 10
};
struct ShadowOfDeathSelector : public std::unary_function<Unit*, bool>
@@ -59,275 +59,275 @@ struct ShadowOfDeathSelector : public std::unary_function<Unit*, bool>
class boss_teron_gorefiend : public CreatureScript
{
public:
boss_teron_gorefiend() : CreatureScript("boss_teron_gorefiend") { }
public:
boss_teron_gorefiend() : CreatureScript("boss_teron_gorefiend") { }
CreatureAI* GetAI(Creature* creature) const
{
return GetInstanceAI<boss_teron_gorefiendAI>(creature);
}
CreatureAI* GetAI(Creature* creature) const
{
return GetInstanceAI<boss_teron_gorefiendAI>(creature);
}
struct boss_teron_gorefiendAI : public BossAI
{
boss_teron_gorefiendAI(Creature* creature) : BossAI(creature, DATA_TERON_GOREFIEND)
{
intro = false;
}
struct boss_teron_gorefiendAI : public BossAI
{
boss_teron_gorefiendAI(Creature* creature) : BossAI(creature, DATA_TERON_GOREFIEND)
{
intro = false;
}
bool intro;
bool intro;
void Reset()
{
BossAI::Reset();
me->CastSpell(me, SPELL_SHADOW_OF_DEATH_REMOVE, true);
}
void Reset()
{
BossAI::Reset();
me->CastSpell(me, SPELL_SHADOW_OF_DEATH_REMOVE, true);
}
void SetData(uint32 type, uint32 id)
{
if (type || !me->IsAlive())
return;
void SetData(uint32 type, uint32 id)
{
if (type || !me->IsAlive())
return;
if (id == SET_DATA_INTRO && !intro)
{
intro = true;
Talk(SAY_INTRO);
}
}
if (id == SET_DATA_INTRO && !intro)
{
intro = true;
Talk(SAY_INTRO);
}
}
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
events.ScheduleEvent(EVENT_SPELL_INCINERATE, 24000);
events.ScheduleEvent(EVENT_SPELL_DOOM_BLOSSOM, 10000);
events.ScheduleEvent(EVENT_SPELL_CRUSHING_SHADOWS, 17000);
events.ScheduleEvent(EVENT_SPELL_SHADOW_OF_DEATH, 20000);
}
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
events.ScheduleEvent(EVENT_SPELL_INCINERATE, 24000);
events.ScheduleEvent(EVENT_SPELL_DOOM_BLOSSOM, 10000);
events.ScheduleEvent(EVENT_SPELL_CRUSHING_SHADOWS, 17000);
events.ScheduleEvent(EVENT_SPELL_SHADOW_OF_DEATH, 20000);
}
void KilledUnit(Unit* victim)
{
if (events.GetNextEventTime(EVENT_TALK_KILL) == 0)
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_TALK_KILL, 6000);
}
}
void KilledUnit(Unit* victim)
{
if (events.GetNextEventTime(EVENT_TALK_KILL) == 0)
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_TALK_KILL, 6000);
}
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
}
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
}
void JustDied(Unit* killer)
{
BossAI::JustDied(killer);
Talk(SAY_DEATH);
me->CastSpell(me, SPELL_SHADOW_OF_DEATH_REMOVE, true);
}
void JustDied(Unit* killer)
{
BossAI::JustDied(killer);
Talk(SAY_DEATH);
me->CastSpell(me, SPELL_SHADOW_OF_DEATH_REMOVE, true);
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim() )
return;
void UpdateAI(uint32 diff)
{
if (!UpdateVictim() )
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_SPELL_INCINERATE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
if (roll_chance_i(50))
Talk(SAY_INCINERATE);
me->CastSpell(target, SPELL_INCINERATE, false);
}
events.ScheduleEvent(EVENT_SPELL_INCINERATE, 25000);
break;
case EVENT_SPELL_DOOM_BLOSSOM:
if (roll_chance_i(50))
Talk(SAY_BLOSSOM);
switch (events.ExecuteEvent())
{
case EVENT_SPELL_INCINERATE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
if (roll_chance_i(50))
Talk(SAY_INCINERATE);
me->CastSpell(target, SPELL_INCINERATE, false);
}
events.ScheduleEvent(EVENT_SPELL_INCINERATE, 25000);
break;
case EVENT_SPELL_DOOM_BLOSSOM:
if (roll_chance_i(50))
Talk(SAY_BLOSSOM);
me->CastSpell(me, SPELL_SUMMON_DOOM_BLOSSOM, false);
events.ScheduleEvent(EVENT_SPELL_DOOM_BLOSSOM, 40000);
break;
case EVENT_SPELL_CRUSHING_SHADOWS:
if (roll_chance_i(20))
Talk(SAY_CRUSHING);
me->CastCustomSpell(SPELL_CRUSHING_SHADOWS, SPELLVALUE_MAX_TARGETS, 5, me, false);
events.ScheduleEvent(EVENT_SPELL_CRUSHING_SHADOWS, 15000);
break;
case EVENT_SPELL_SHADOW_OF_DEATH:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, ShadowOfDeathSelector()))
me->CastSpell(target, SPELL_SHADOW_OF_DEATH, false);
events.ScheduleEvent(EVENT_SPELL_SHADOW_OF_DEATH, 30000);
break;
}
me->CastSpell(me, SPELL_SUMMON_DOOM_BLOSSOM, false);
events.ScheduleEvent(EVENT_SPELL_DOOM_BLOSSOM, 40000);
break;
case EVENT_SPELL_CRUSHING_SHADOWS:
if (roll_chance_i(20))
Talk(SAY_CRUSHING);
me->CastCustomSpell(SPELL_CRUSHING_SHADOWS, SPELLVALUE_MAX_TARGETS, 5, me, false);
events.ScheduleEvent(EVENT_SPELL_CRUSHING_SHADOWS, 15000);
break;
case EVENT_SPELL_SHADOW_OF_DEATH:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, ShadowOfDeathSelector()))
me->CastSpell(target, SPELL_SHADOW_OF_DEATH, false);
events.ScheduleEvent(EVENT_SPELL_SHADOW_OF_DEATH, 30000);
break;
}
DoMeleeAttackIfReady();
DoMeleeAttackIfReady();
EnterEvadeIfOutOfCombatArea();
}
bool CheckEvadeIfOutOfCombatArea() const
{
return me->GetDistance(me->GetHomePosition()) > 100.0f;
}
};
bool CheckEvadeIfOutOfCombatArea() const
{
return me->GetDistance(me->GetHomePosition()) > 100.0f;
}
};
};
class spell_teron_gorefiend_shadow_of_death : public SpellScriptLoader
{
public:
spell_teron_gorefiend_shadow_of_death() : SpellScriptLoader("spell_teron_gorefiend_shadow_of_death") { }
public:
spell_teron_gorefiend_shadow_of_death() : SpellScriptLoader("spell_teron_gorefiend_shadow_of_death") { }
class spell_teron_gorefiend_shadow_of_death_AuraScript : public AuraScript
{
PrepareAuraScript(spell_teron_gorefiend_shadow_of_death_AuraScript)
class spell_teron_gorefiend_shadow_of_death_AuraScript : public AuraScript
{
PrepareAuraScript(spell_teron_gorefiend_shadow_of_death_AuraScript)
void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
PreventDefaultAction();
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
InstanceScript* instance = GetTarget()->GetInstanceScript();
if (!GetCaster() || !instance || !instance->IsEncounterInProgress())
return;
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
InstanceScript* instance = GetTarget()->GetInstanceScript();
if (!GetCaster() || !instance || !instance->IsEncounterInProgress())
return;
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SPIRIT, true);
GetTarget()->CastSpell(GetTarget(), SPELL_POSSESS_SPIRIT_IMMUNE, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SPIRITUAL_VENGEANCE, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SKELETON1, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SKELETON2, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SKELETON3, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SKELETON4, true);
}
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SPIRIT, true);
GetTarget()->CastSpell(GetTarget(), SPELL_POSSESS_SPIRIT_IMMUNE, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SPIRITUAL_VENGEANCE, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SKELETON1, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SKELETON2, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SKELETON3, true);
GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_SKELETON4, true);
}
void Register()
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_teron_gorefiend_shadow_of_death_AuraScript::Absorb, EFFECT_0);
AfterEffectRemove += AuraEffectRemoveFn(spell_teron_gorefiend_shadow_of_death_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL);
}
};
void Register()
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_teron_gorefiend_shadow_of_death_AuraScript::Absorb, EFFECT_0);
AfterEffectRemove += AuraEffectRemoveFn(spell_teron_gorefiend_shadow_of_death_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_teron_gorefiend_shadow_of_death_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_teron_gorefiend_shadow_of_death_AuraScript();
}
};
class spell_teron_gorefiend_spirit_lance : public SpellScriptLoader
{
public:
spell_teron_gorefiend_spirit_lance() : SpellScriptLoader("spell_teron_gorefiend_spirit_lance") { }
public:
spell_teron_gorefiend_spirit_lance() : SpellScriptLoader("spell_teron_gorefiend_spirit_lance") { }
class spell_teron_gorefiend_spirit_lance_AuraScript : public AuraScript
{
PrepareAuraScript(spell_teron_gorefiend_spirit_lance_AuraScript);
class spell_teron_gorefiend_spirit_lance_AuraScript : public AuraScript
{
PrepareAuraScript(spell_teron_gorefiend_spirit_lance_AuraScript);
void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
if (AuraEffect* effect = GetAura()->GetEffect(EFFECT_2))
amount -= (amount / effect->GetTotalTicks()) * effect->GetTickNumber();
}
void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
if (AuraEffect* effect = GetAura()->GetEffect(EFFECT_2))
amount -= (amount / effect->GetTotalTicks()) * effect->GetTickNumber();
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (AuraEffect* effect = GetAura()->GetEffect(EFFECT_1))
effect->RecalculateAmount();
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (AuraEffect* effect = GetAura()->GetEffect(EFFECT_1))
effect->RecalculateAmount();
}
void Register()
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_teron_gorefiend_spirit_lance_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DECREASE_SPEED);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_teron_gorefiend_spirit_lance_AuraScript::Update, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
void Register()
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_teron_gorefiend_spirit_lance_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DECREASE_SPEED);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_teron_gorefiend_spirit_lance_AuraScript::Update, EFFECT_2, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_teron_gorefiend_spirit_lance_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_teron_gorefiend_spirit_lance_AuraScript();
}
};
class spell_teron_gorefiend_spiritual_vengeance : public SpellScriptLoader
{
public:
spell_teron_gorefiend_spiritual_vengeance() : SpellScriptLoader("spell_teron_gorefiend_spiritual_vengeance") { }
public:
spell_teron_gorefiend_spiritual_vengeance() : SpellScriptLoader("spell_teron_gorefiend_spiritual_vengeance") { }
class spell_teron_gorefiend_spiritual_vengeance_AuraScript : public AuraScript
{
PrepareAuraScript(spell_teron_gorefiend_spiritual_vengeance_AuraScript)
class spell_teron_gorefiend_spiritual_vengeance_AuraScript : public AuraScript
{
PrepareAuraScript(spell_teron_gorefiend_spiritual_vengeance_AuraScript)
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit::Kill(NULL, GetTarget());
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit::Kill(NULL, GetTarget());
}
void Register()
{
AfterEffectRemove += AuraEffectRemoveFn(spell_teron_gorefiend_spiritual_vengeance_AuraScript::HandleEffectRemove, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL);
}
};
void Register()
{
AfterEffectRemove += AuraEffectRemoveFn(spell_teron_gorefiend_spiritual_vengeance_AuraScript::HandleEffectRemove, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_teron_gorefiend_spiritual_vengeance_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_teron_gorefiend_spiritual_vengeance_AuraScript();
}
};
class spell_teron_gorefiend_shadowy_construct : public SpellScriptLoader
{
public:
spell_teron_gorefiend_shadowy_construct() : SpellScriptLoader("spell_teron_gorefiend_shadowy_construct") { }
public:
spell_teron_gorefiend_shadowy_construct() : SpellScriptLoader("spell_teron_gorefiend_shadowy_construct") { }
class spell_teron_gorefiend_shadowy_construct_AuraScript : public AuraScript
{
PrepareAuraScript(spell_teron_gorefiend_shadowy_construct_AuraScript)
class spell_teron_gorefiend_shadowy_construct_AuraScript : public AuraScript
{
PrepareAuraScript(spell_teron_gorefiend_shadowy_construct_AuraScript)
bool Load()
{
return GetUnitOwner()->GetTypeId() == TYPEID_UNIT;
}
bool Load()
{
return GetUnitOwner()->GetTypeId() == TYPEID_UNIT;
}
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NORMAL, true);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ALLOW_ID, SPELL_SPIRIT_LANCE, true);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ALLOW_ID, SPELL_SPIRIT_CHAINS, true);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ALLOW_ID, SPELL_SPIRIT_VOLLEY, true);
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NORMAL, true);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ALLOW_ID, SPELL_SPIRIT_LANCE, true);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ALLOW_ID, SPELL_SPIRIT_CHAINS, true);
GetUnitOwner()->ApplySpellImmune(0, IMMUNITY_ALLOW_ID, SPELL_SPIRIT_VOLLEY, true);
GetUnitOwner()->ToCreature()->SetInCombatWithZone();
Map::PlayerList const& playerList = GetUnitOwner()->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator i = playerList.begin(); i != playerList.end(); ++i)
if (Player* player = i->GetSource())
{
if (GetUnitOwner()->IsValidAttackTarget(player))
GetUnitOwner()->AddThreat(player, 1000000.0f);
}
GetUnitOwner()->ToCreature()->SetInCombatWithZone();
Map::PlayerList const& playerList = GetUnitOwner()->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator i = playerList.begin(); i != playerList.end(); ++i)
if (Player* player = i->GetSource())
{
if (GetUnitOwner()->IsValidAttackTarget(player))
GetUnitOwner()->AddThreat(player, 1000000.0f);
}
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_BRIEF_STUN, true);
}
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_BRIEF_STUN, true);
}
void Register()
{
AfterEffectApply += AuraEffectApplyFn(spell_teron_gorefiend_shadowy_construct_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
void Register()
{
AfterEffectApply += AuraEffectApplyFn(spell_teron_gorefiend_shadowy_construct_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_teron_gorefiend_shadowy_construct_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_teron_gorefiend_shadowy_construct_AuraScript();
}
};
void AddSC_boss_teron_gorefiend()
{
new boss_teron_gorefiend();
new spell_teron_gorefiend_shadow_of_death();
new spell_teron_gorefiend_spirit_lance();
new spell_teron_gorefiend_spiritual_vengeance();
new spell_teron_gorefiend_shadowy_construct();
new spell_teron_gorefiend_shadow_of_death();
new spell_teron_gorefiend_spirit_lance();
new spell_teron_gorefiend_spiritual_vengeance();
new spell_teron_gorefiend_shadowy_construct();
}

View File

@@ -8,33 +8,33 @@ REWRITTEN BY XINEF
enum Yells
{
SAY_AGGRO = 0,
SAY_NEEDLE = 1,
SAY_SLAY = 2,
SAY_SPECIAL = 3,
SAY_ENRAGE = 4,
SAY_DEATH = 5
SAY_AGGRO = 0,
SAY_NEEDLE = 1,
SAY_SLAY = 2,
SAY_SPECIAL = 3,
SAY_ENRAGE = 4,
SAY_DEATH = 5
};
enum Spells
{
SPELL_NEEDLE_SPINE = 39992,
SPELL_NEEDLE_SPINE_DAMAGE = 39835,
SPELL_TIDAL_BURST = 39878,
SPELL_TIDAL_SHIELD = 39872,
SPELL_IMPALING_SPINE = 39837,
SPELL_SUMMON_IMPALING_SPINE = 39929,
SPELL_BERSERK = 26662
SPELL_NEEDLE_SPINE = 39992,
SPELL_NEEDLE_SPINE_DAMAGE = 39835,
SPELL_TIDAL_BURST = 39878,
SPELL_TIDAL_SHIELD = 39872,
SPELL_IMPALING_SPINE = 39837,
SPELL_SUMMON_IMPALING_SPINE = 39929,
SPELL_BERSERK = 26662
};
enum Events
{
EVENT_SPELL_BERSERK = 1,
EVENT_YELL = 2,
EVENT_SPELL_NEEDLE = 3,
EVENT_SPELL_SPINE = 4,
EVENT_SPELL_SHIELD = 5,
EVENT_KILL_SPEAK = 6
EVENT_SPELL_BERSERK = 1,
EVENT_YELL = 2,
EVENT_SPELL_NEEDLE = 3,
EVENT_SPELL_SPINE = 4,
EVENT_SPELL_SHIELD = 5,
EVENT_KILL_SPEAK = 6
};
class boss_najentus : public CreatureScript
@@ -55,27 +55,27 @@ public:
void Reset()
{
BossAI::Reset();
BossAI::Reset();
}
void KilledUnit(Unit* victim)
{
if (victim->GetTypeId() == TYPEID_PLAYER && events.GetNextEventTime(EVENT_KILL_SPEAK) == 0)
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_SPEAK, 5000);
}
if (victim->GetTypeId() == TYPEID_PLAYER && events.GetNextEventTime(EVENT_KILL_SPEAK) == 0)
{
Talk(SAY_SLAY);
events.ScheduleEvent(EVENT_KILL_SPEAK, 5000);
}
}
void JustDied(Unit* killer)
{
BossAI::JustDied(killer);
BossAI::JustDied(killer);
Talk(SAY_DEATH);
}
void EnterCombat(Unit* who)
{
BossAI::EnterCombat(who);
BossAI::EnterCombat(who);
Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_SPELL_BERSERK, 480000);
events.ScheduleEvent(EVENT_YELL, urand(25000, 100000));
@@ -90,29 +90,29 @@ public:
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_SPELL_SHIELD:
me->CastSpell(me, SPELL_TIDAL_SHIELD, false);
me->CastSpell(me, SPELL_TIDAL_SHIELD, false);
events.DelayEvents(10000);
events.ScheduleEvent(EVENT_SPELL_SHIELD, 60000);
events.ScheduleEvent(EVENT_SPELL_SHIELD, 60000);
break;
case EVENT_SPELL_BERSERK:
Talk(SAY_ENRAGE);
me->CastSpell(me, SPELL_BERSERK, true);
break;
case EVENT_SPELL_NEEDLE:
me->CastCustomSpell(SPELL_NEEDLE_SPINE, SPELLVALUE_MAX_TARGETS, 3, me, false);
me->CastCustomSpell(SPELL_NEEDLE_SPINE, SPELLVALUE_MAX_TARGETS, 3, me, false);
events.ScheduleEvent(EVENT_SPELL_NEEDLE, 15000);
break;
case EVENT_SPELL_SPINE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
{
me->CastSpell(target, SPELL_IMPALING_SPINE, false);
target->CastSpell(target, SPELL_SUMMON_IMPALING_SPINE, true);
me->CastSpell(target, SPELL_IMPALING_SPINE, false);
target->CastSpell(target, SPELL_SUMMON_IMPALING_SPINE, true);
Talk(SAY_NEEDLE);
}
events.ScheduleEvent(EVENT_SPELL_SPINE, 20000);
@@ -130,65 +130,65 @@ public:
class spell_najentus_needle_spine : public SpellScriptLoader
{
public:
spell_najentus_needle_spine() : SpellScriptLoader("spell_najentus_needle_spine") { }
public:
spell_najentus_needle_spine() : SpellScriptLoader("spell_najentus_needle_spine") { }
class spell_najentus_needle_spine_SpellScript : public SpellScript
{
PrepareSpellScript(spell_najentus_needle_spine_SpellScript);
class spell_najentus_needle_spine_SpellScript : public SpellScript
{
PrepareSpellScript(spell_najentus_needle_spine_SpellScript);
void HandleDummy(SpellEffIndex effIndex)
{
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_NEEDLE_SPINE_DAMAGE, true);
}
void HandleDummy(SpellEffIndex effIndex)
{
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_NEEDLE_SPINE_DAMAGE, true);
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_najentus_needle_spine_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_najentus_needle_spine_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
return new spell_najentus_needle_spine_SpellScript();
}
SpellScript* GetSpellScript() const
{
return new spell_najentus_needle_spine_SpellScript();
}
};
class spell_najentus_hurl_spine : public SpellScriptLoader
{
public:
spell_najentus_hurl_spine() : SpellScriptLoader("spell_najentus_hurl_spine") { }
public:
spell_najentus_hurl_spine() : SpellScriptLoader("spell_najentus_hurl_spine") { }
class spell_najentus_hurl_spine_SpellScript : public SpellScript
{
PrepareSpellScript(spell_najentus_hurl_spine_SpellScript);
class spell_najentus_hurl_spine_SpellScript : public SpellScript
{
PrepareSpellScript(spell_najentus_hurl_spine_SpellScript);
void HandleSchoolDamage(SpellEffIndex effIndex)
{
Unit* target = GetHitUnit();
if (target && target->HasAura(SPELL_TIDAL_SHIELD))
{
target->RemoveAurasDueToSpell(SPELL_TIDAL_SHIELD);
target->CastSpell(target, SPELL_TIDAL_BURST, true);
}
}
void HandleSchoolDamage(SpellEffIndex effIndex)
{
Unit* target = GetHitUnit();
if (target && target->HasAura(SPELL_TIDAL_SHIELD))
{
target->RemoveAurasDueToSpell(SPELL_TIDAL_SHIELD);
target->CastSpell(target, SPELL_TIDAL_BURST, true);
}
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_najentus_hurl_spine_SpellScript::HandleSchoolDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_najentus_hurl_spine_SpellScript::HandleSchoolDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
SpellScript* GetSpellScript() const
{
return new spell_najentus_hurl_spine_SpellScript();
}
SpellScript* GetSpellScript() const
{
return new spell_najentus_hurl_spine_SpellScript();
}
};
void AddSC_boss_najentus()
{
new boss_najentus();
new spell_najentus_needle_spine();
new spell_najentus_hurl_spine();
new spell_najentus_needle_spine();
new spell_najentus_hurl_spine();
}

File diff suppressed because it is too large Load Diff

View File

@@ -15,15 +15,15 @@ DoorData const doorData[] =
{ GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_GURTOGG_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_TEMPLE_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_TEMPLE_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_TEMPLE_DOOR, DATA_TERON_GOREFIEND, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_TEMPLE_DOOR, DATA_RELIQUARY_OF_SOULS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_MOTHER_SHAHRAZ_DOOR, DATA_MOTHER_SHAHRAZ, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_COUNCIL_DOOR_1, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_COUNCIL_DOOR_2, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_ILLIDAN_GATE, DATA_AKAMA_FINISHED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_ILLIDAN_DOOR_L, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_ILLIDAN_DOOR_R, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_ILLIDAN_GATE, DATA_AKAMA_FINISHED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_ILLIDAN_DOOR_L, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ GO_ILLIDAN_DOOR_R, DATA_ILLIDAN_STORMRAGE, DOOR_TYPE_ROOM, BOUNDARY_NONE },
{ 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }
};
@@ -41,9 +41,9 @@ class instance_black_temple : public InstanceMapScript
ShadeOfAkamaGUID = 0;
AkamaShadeGUID = 0;
TeronGorefiendGUID = 0;
ReliquaryGUID = 0;
ashtongueGUIDs.clear();
TeronGorefiendGUID = 0;
ReliquaryGUID = 0;
ashtongueGUIDs.clear();
GathiosTheShattererGUID = 0;
HighNethermancerZerevorGUID = 0;
LadyMalandeGUID = 0;
@@ -63,12 +63,12 @@ class instance_black_temple : public InstanceMapScript
case NPC_AKAMA_SHADE:
AkamaShadeGUID = creature->GetGUID();
break;
case NPC_TERON_GOREFIEND:
TeronGorefiendGUID = creature->GetGUID();
break;
case NPC_RELIQUARY_OF_THE_LOST:
ReliquaryGUID = creature->GetGUID();
break;
case NPC_TERON_GOREFIEND:
TeronGorefiendGUID = creature->GetGUID();
break;
case NPC_RELIQUARY_OF_THE_LOST:
ReliquaryGUID = creature->GetGUID();
break;
case NPC_GATHIOS_THE_SHATTERER:
GathiosTheShattererGUID = creature->GetGUID();
break;
@@ -90,34 +90,34 @@ class instance_black_temple : public InstanceMapScript
case NPC_ILLIDAN_STORMRAGE:
IllidanStormrageGUID = creature->GetGUID();
break;
case NPC_VENGEFUL_SPIRIT:
case NPC_SHADOWY_CONSTRUCT:
if (Creature* teron = instance->GetCreature(TeronGorefiendGUID))
teron->AI()->JustSummoned(creature);
break;
case NPC_ENSLAVED_SOUL:
if (Creature* reliquary = instance->GetCreature(ReliquaryGUID))
reliquary->AI()->JustSummoned(creature);
break;
case NPC_PARASITIC_SHADOWFIEND:
case NPC_BLADE_OF_AZZINOTH:
case NPC_FLAME_OF_AZZINOTH:
if (Creature* illidan = instance->GetCreature(IllidanStormrageGUID))
illidan->AI()->JustSummoned(creature);
break;
case NPC_ANGERED_SOUL_FRAGMENT:
case NPC_HUNGERING_SOUL_FRAGMENT:
case NPC_SUFFERING_SOUL_FRAGMENT:
creature->SetCorpseDelay(5);
break;
case NPC_VENGEFUL_SPIRIT:
case NPC_SHADOWY_CONSTRUCT:
if (Creature* teron = instance->GetCreature(TeronGorefiendGUID))
teron->AI()->JustSummoned(creature);
break;
case NPC_ENSLAVED_SOUL:
if (Creature* reliquary = instance->GetCreature(ReliquaryGUID))
reliquary->AI()->JustSummoned(creature);
break;
case NPC_PARASITIC_SHADOWFIEND:
case NPC_BLADE_OF_AZZINOTH:
case NPC_FLAME_OF_AZZINOTH:
if (Creature* illidan = instance->GetCreature(IllidanStormrageGUID))
illidan->AI()->JustSummoned(creature);
break;
case NPC_ANGERED_SOUL_FRAGMENT:
case NPC_HUNGERING_SOUL_FRAGMENT:
case NPC_SUFFERING_SOUL_FRAGMENT:
creature->SetCorpseDelay(5);
break;
}
if (creature->GetName().find("Ashtongue") != std::string::npos || creature->GetEntry() == NPC_STORM_FURY)
{
ashtongueGUIDs.push_back(creature->GetGUID());
if (GetBossState(DATA_SHADE_OF_AKAMA) == DONE)
creature->setFaction(FACTION_ASHTONGUE);
}
if (creature->GetName().find("Ashtongue") != std::string::npos || creature->GetEntry() == NPC_STORM_FURY)
{
ashtongueGUIDs.push_back(creature->GetGUID());
if (GetBossState(DATA_SHADE_OF_AKAMA) == DONE)
creature->setFaction(FACTION_ASHTONGUE);
}
}
void OnGameObjectCreate(GameObject* go)
@@ -167,7 +167,7 @@ class instance_black_temple : public InstanceMapScript
uint64 GetData64(uint32 type) const
{
switch (type)
{
{
case NPC_SHADE_OF_AKAMA:
return ShadeOfAkamaGUID;
case NPC_AKAMA_SHADE:
@@ -182,8 +182,8 @@ class instance_black_temple : public InstanceMapScript
return VerasDarkshadowGUID;
case NPC_ILLIDARI_COUNCIL:
return IllidariCouncilGUID;
case NPC_AKAMA:
return AkamaGUID;
case NPC_AKAMA:
return AkamaGUID;
case NPC_ILLIDAN_STORMRAGE:
return IllidanStormrageGUID;
}
@@ -196,20 +196,20 @@ class instance_black_temple : public InstanceMapScript
if (!InstanceScript::SetBossState(type, state))
return false;
if (type == DATA_SHADE_OF_AKAMA && state == DONE)
{
for (std::list<uint64>::const_iterator itr = ashtongueGUIDs.begin(); itr != ashtongueGUIDs.end(); ++itr)
if (Creature* ashtongue = instance->GetCreature(*itr))
ashtongue->setFaction(FACTION_ASHTONGUE);
}
else if (type == DATA_ILLIDARI_COUNCIL && state == DONE)
{
if (Creature* akama = instance->GetCreature(AkamaGUID))
akama->SetVisible(true);
}
if (type == DATA_SHADE_OF_AKAMA && state == DONE)
{
for (std::list<uint64>::const_iterator itr = ashtongueGUIDs.begin(); itr != ashtongueGUIDs.end(); ++itr)
if (Creature* ashtongue = instance->GetCreature(*itr))
ashtongue->setFaction(FACTION_ASHTONGUE);
}
else if (type == DATA_ILLIDARI_COUNCIL && state == DONE)
{
if (Creature* akama = instance->GetCreature(AkamaGUID))
akama->SetVisible(true);
}
return true;
}
return true;
}
std::string GetSaveData()
{
@@ -257,9 +257,9 @@ class instance_black_temple : public InstanceMapScript
protected:
uint64 ShadeOfAkamaGUID;
uint64 AkamaShadeGUID;
uint64 TeronGorefiendGUID;
uint64 ReliquaryGUID;
std::list<uint64> ashtongueGUIDs;
uint64 TeronGorefiendGUID;
uint64 ReliquaryGUID;
std::list<uint64> ashtongueGUIDs;
uint64 GathiosTheShattererGUID;
uint64 HighNethermancerZerevorGUID;
uint64 LadyMalandeGUID;
@@ -277,246 +277,246 @@ class instance_black_temple : public InstanceMapScript
class spell_black_template_harpooners_mark : public SpellScriptLoader
{
public:
spell_black_template_harpooners_mark() : SpellScriptLoader("spell_black_template_harpooners_mark") { }
public:
spell_black_template_harpooners_mark() : SpellScriptLoader("spell_black_template_harpooners_mark") { }
class spell_black_template_harpooners_mark_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_template_harpooners_mark_AuraScript)
class spell_black_template_harpooners_mark_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_template_harpooners_mark_AuraScript)
bool Load()
{
_turtleSet.clear();
return true;
}
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
std::list<Creature*> creatureList;
GetUnitOwner()->GetCreaturesWithEntryInRange(creatureList, 80.0f, NPC_DRAGON_TURTLE);
for (std::list<Creature*>::const_iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
{
(*itr)->TauntApply(GetUnitOwner());
(*itr)->AddThreat(GetUnitOwner(), 10000000.0f);
_turtleSet.insert((*itr)->GetGUID());
}
}
bool Load()
{
_turtleSet.clear();
return true;
}
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
std::list<Creature*> creatureList;
GetUnitOwner()->GetCreaturesWithEntryInRange(creatureList, 80.0f, NPC_DRAGON_TURTLE);
for (std::list<Creature*>::const_iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
{
(*itr)->TauntApply(GetUnitOwner());
(*itr)->AddThreat(GetUnitOwner(), 10000000.0f);
_turtleSet.insert((*itr)->GetGUID());
}
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
for (std::set<uint64>::const_iterator itr = _turtleSet.begin(); itr != _turtleSet.end(); ++itr)
if (Creature* turtle = ObjectAccessor::GetCreature(*GetUnitOwner(), *itr))
{
turtle->TauntFadeOut(GetUnitOwner());
turtle->AddThreat(GetUnitOwner(), -10000000.0f);
}
}
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
for (std::set<uint64>::const_iterator itr = _turtleSet.begin(); itr != _turtleSet.end(); ++itr)
if (Creature* turtle = ObjectAccessor::GetCreature(*GetUnitOwner(), *itr))
{
turtle->TauntFadeOut(GetUnitOwner());
turtle->AddThreat(GetUnitOwner(), -10000000.0f);
}
}
void Register()
{
OnEffectApply += AuraEffectApplyFn(spell_black_template_harpooners_mark_AuraScript::HandleEffectApply, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_black_template_harpooners_mark_AuraScript::HandleEffectRemove, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
void Register()
{
OnEffectApply += AuraEffectApplyFn(spell_black_template_harpooners_mark_AuraScript::HandleEffectApply, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_black_template_harpooners_mark_AuraScript::HandleEffectRemove, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
private:
std::set<uint64> _turtleSet;
};
private:
std::set<uint64> _turtleSet;
};
AuraScript* GetAuraScript() const
{
return new spell_black_template_harpooners_mark_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_black_template_harpooners_mark_AuraScript();
}
};
class spell_black_template_free_friend : public SpellScriptLoader
{
public:
spell_black_template_free_friend() : SpellScriptLoader("spell_black_template_free_friend") { }
public:
spell_black_template_free_friend() : SpellScriptLoader("spell_black_template_free_friend") { }
class spell_black_template_free_friend_SpellScript : public SpellScript
{
PrepareSpellScript(spell_black_template_free_friend_SpellScript);
class spell_black_template_free_friend_SpellScript : public SpellScript
{
PrepareSpellScript(spell_black_template_free_friend_SpellScript);
void HandleScriptEffect(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
Unit* target = GetHitUnit();
if (!target)
return;
void HandleScriptEffect(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
Unit* target = GetHitUnit();
if (!target)
return;
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_CHARM);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_STUN);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_DECREASE_SPEED);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_ROOT);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_CONFUSE);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_FEAR);
}
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_CHARM);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_STUN);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_DECREASE_SPEED);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_ROOT);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_CONFUSE);
target->RemoveAurasDueToSpell(SPELL_AURA_MOD_FEAR);
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_black_template_free_friend_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_black_template_free_friend_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const
{
return new spell_black_template_free_friend_SpellScript();
}
SpellScript* GetSpellScript() const
{
return new spell_black_template_free_friend_SpellScript();
}
};
class spell_black_temple_curse_of_the_bleakheart : public SpellScriptLoader
{
public:
spell_black_temple_curse_of_the_bleakheart() : SpellScriptLoader("spell_black_temple_curse_of_the_bleakheart") { }
public:
spell_black_temple_curse_of_the_bleakheart() : SpellScriptLoader("spell_black_temple_curse_of_the_bleakheart") { }
class spell_black_temple_curse_of_the_bleakheart_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_curse_of_the_bleakheart_AuraScript);
class spell_black_temple_curse_of_the_bleakheart_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_curse_of_the_bleakheart_AuraScript);
void CalcPeriodic(AuraEffect const* /*effect*/, bool& isPeriodic, int32& amplitude)
{
isPeriodic = true;
amplitude = 5000;
}
void CalcPeriodic(AuraEffect const* /*effect*/, bool& isPeriodic, int32& amplitude)
{
isPeriodic = true;
amplitude = 5000;
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (roll_chance_i(20))
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_CHEST_PAINS, true);
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (roll_chance_i(20))
GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_CHEST_PAINS, true);
}
void Register()
{
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_black_temple_curse_of_the_bleakheart_AuraScript::CalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_black_temple_curse_of_the_bleakheart_AuraScript::Update, EFFECT_0, SPELL_AURA_DUMMY);
}
};
void Register()
{
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_black_temple_curse_of_the_bleakheart_AuraScript::CalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_black_temple_curse_of_the_bleakheart_AuraScript::Update, EFFECT_0, SPELL_AURA_DUMMY);
}
};
AuraScript* GetAuraScript() const
{
return new spell_black_temple_curse_of_the_bleakheart_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_black_temple_curse_of_the_bleakheart_AuraScript();
}
};
class spell_black_temple_skeleton_shot : public SpellScriptLoader
{
public:
spell_black_temple_skeleton_shot() : SpellScriptLoader("spell_black_temple_skeleton_shot") { }
public:
spell_black_temple_skeleton_shot() : SpellScriptLoader("spell_black_temple_skeleton_shot") { }
class spell_black_temple_skeleton_shot_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_skeleton_shot_AuraScript)
class spell_black_temple_skeleton_shot_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_skeleton_shot_AuraScript)
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEATH)
GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_2].CalcValue(), true);
}
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEATH)
GetTarget()->CastSpell(GetTarget(), GetSpellInfo()->Effects[EFFECT_2].CalcValue(), true);
}
void Register()
{
AfterEffectRemove += AuraEffectRemoveFn(spell_black_temple_skeleton_shot_AuraScript::HandleEffectRemove, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
};
void Register()
{
AfterEffectRemove += AuraEffectRemoveFn(spell_black_temple_skeleton_shot_AuraScript::HandleEffectRemove, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_black_temple_skeleton_shot_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_black_temple_skeleton_shot_AuraScript();
}
};
class spell_black_temple_wyvern_sting : public SpellScriptLoader
{
public:
spell_black_temple_wyvern_sting() : SpellScriptLoader("spell_black_temple_wyvern_sting") { }
public:
spell_black_temple_wyvern_sting() : SpellScriptLoader("spell_black_temple_wyvern_sting") { }
class spell_black_temple_wyvern_sting_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_wyvern_sting_AuraScript)
class spell_black_temple_wyvern_sting_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_wyvern_sting_AuraScript)
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
if (Unit* caster = GetCaster())
caster->CastSpell(GetTarget(), SPELL_WYVERN_STING, true);
}
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
if (Unit* caster = GetCaster())
caster->CastSpell(GetTarget(), SPELL_WYVERN_STING, true);
}
void Register()
{
AfterEffectRemove += AuraEffectRemoveFn(spell_black_temple_wyvern_sting_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
}
};
void Register()
{
AfterEffectRemove += AuraEffectRemoveFn(spell_black_temple_wyvern_sting_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_STUN, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_black_temple_wyvern_sting_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_black_temple_wyvern_sting_AuraScript();
}
};
class spell_black_temple_charge_rage : public SpellScriptLoader
{
public:
spell_black_temple_charge_rage() : SpellScriptLoader("spell_black_temple_charge_rage") { }
public:
spell_black_temple_charge_rage() : SpellScriptLoader("spell_black_temple_charge_rage") { }
class spell_black_temple_charge_rage_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_charge_rage_AuraScript);
class spell_black_temple_charge_rage_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_charge_rage_AuraScript);
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (Unit* target = GetUnitOwner()->SelectNearbyNoTotemTarget((Unit*)NULL, 50.0f))
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[effect->GetEffIndex()].TriggerSpell, true);
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
if (Unit* target = GetUnitOwner()->SelectNearbyNoTotemTarget((Unit*)NULL, 50.0f))
GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[effect->GetEffIndex()].TriggerSpell, true);
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_black_temple_charge_rage_AuraScript::Update, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_black_temple_charge_rage_AuraScript::Update, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_black_temple_charge_rage_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_black_temple_charge_rage_AuraScript();
}
};
class spell_black_temple_shadow_inferno : public SpellScriptLoader
{
public:
spell_black_temple_shadow_inferno() : SpellScriptLoader("spell_black_temple_shadow_inferno") { }
public:
spell_black_temple_shadow_inferno() : SpellScriptLoader("spell_black_temple_shadow_inferno") { }
class spell_black_temple_shadow_inferno_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_shadow_inferno_AuraScript);
class spell_black_temple_shadow_inferno_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_shadow_inferno_AuraScript);
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
GetUnitOwner()->CastCustomSpell(SPELL_SHADOW_INFERNO_DAMAGE, SPELLVALUE_BASE_POINT0, effect->GetAmount(), GetUnitOwner(), TRIGGERED_FULL_MASK);
GetAura()->GetEffect(effect->GetEffIndex())->SetAmount(effect->GetAmount()+500);
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
GetUnitOwner()->CastCustomSpell(SPELL_SHADOW_INFERNO_DAMAGE, SPELLVALUE_BASE_POINT0, effect->GetAmount(), GetUnitOwner(), TRIGGERED_FULL_MASK);
GetAura()->GetEffect(effect->GetEffIndex())->SetAmount(effect->GetAmount()+500);
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_black_temple_shadow_inferno_AuraScript::Update, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_black_temple_shadow_inferno_AuraScript::Update, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_black_temple_shadow_inferno_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_black_temple_shadow_inferno_AuraScript();
}
};
class spell_black_temple_spell_absorption : public SpellScriptLoader
{
public:
spell_black_temple_spell_absorption() : SpellScriptLoader("spell_black_temple_spell_absorption") { }
public:
spell_black_temple_spell_absorption() : SpellScriptLoader("spell_black_temple_spell_absorption") { }
class spell_black_temple_spell_absorption_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_spell_absorption_AuraScript);
class spell_black_temple_spell_absorption_AuraScript : public AuraScript
{
PrepareAuraScript(spell_black_temple_spell_absorption_AuraScript);
void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
@@ -526,32 +526,32 @@ class spell_black_temple_spell_absorption : public SpellScriptLoader
void Absorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
absorbAmount = dmgInfo.GetDamage();
absorbAmount = dmgInfo.GetDamage();
}
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
uint32 count = GetUnitOwner()->GetAuraCount(SPELL_CHAOTIC_CHARGE);
if (count == 0)
return;
void Update(AuraEffect const* effect)
{
PreventDefaultAction();
uint32 count = GetUnitOwner()->GetAuraCount(SPELL_CHAOTIC_CHARGE);
if (count == 0)
return;
GetUnitOwner()->CastCustomSpell(GetSpellInfo()->Effects[effect->GetEffIndex()].TriggerSpell, SPELLVALUE_BASE_POINT0, effect->GetAmount()*count, GetUnitOwner(), TRIGGERED_FULL_MASK);
GetUnitOwner()->RemoveAurasDueToSpell(SPELL_CHAOTIC_CHARGE);
}
GetUnitOwner()->CastCustomSpell(GetSpellInfo()->Effects[effect->GetEffIndex()].TriggerSpell, SPELLVALUE_BASE_POINT0, effect->GetAmount()*count, GetUnitOwner(), TRIGGERED_FULL_MASK);
GetUnitOwner()->RemoveAurasDueToSpell(SPELL_CHAOTIC_CHARGE);
}
void Register()
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_black_temple_spell_absorption_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_black_temple_spell_absorption_AuraScript::Absorb, EFFECT_2);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_black_temple_spell_absorption_AuraScript::Update, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE);
}
};
void Register()
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_black_temple_spell_absorption_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_black_temple_spell_absorption_AuraScript::Absorb, EFFECT_2);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_black_temple_spell_absorption_AuraScript::Update, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE);
}
};
AuraScript* GetAuraScript() const
{
return new spell_black_temple_spell_absorption_AuraScript();
}
AuraScript* GetAuraScript() const
{
return new spell_black_temple_spell_absorption_AuraScript();
}
};
class spell_black_temple_bloodbolt : public SpellScriptLoader
@@ -566,13 +566,13 @@ class spell_black_temple_bloodbolt : public SpellScriptLoader
void HandleScriptEffect(SpellEffIndex effIndex)
{
PreventHitEffect(effIndex);
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, GetEffectValue(), true);
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, GetEffectValue(), true);
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_black_temple_bloodbolt_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
OnEffectHitTarget += SpellEffectFn(spell_black_temple_bloodbolt_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
@@ -620,8 +620,8 @@ class spell_black_temple_curse_of_vitality : public SpellScriptLoader
void OnPeriodic(AuraEffect const* aurEff)
{
if (GetUnitOwner()->HealthBelowPct(50))
SetDuration(0);
if (GetUnitOwner()->HealthBelowPct(50))
SetDuration(0);
}
void Register()
@@ -647,10 +647,10 @@ class spell_black_temple_dementia : public SpellScriptLoader
void OnPeriodic(AuraEffect const* aurEff)
{
if (roll_chance_i(50))
GetTarget()->CastSpell(GetTarget(), SPELL_DEMENTIA1, true);
else
GetTarget()->CastSpell(GetTarget(), SPELL_DEMENTIA2, true);
if (roll_chance_i(50))
GetTarget()->CastSpell(GetTarget(), SPELL_DEMENTIA1, true);
else
GetTarget()->CastSpell(GetTarget(), SPELL_DEMENTIA2, true);
}
void Register()
@@ -668,16 +668,16 @@ class spell_black_temple_dementia : public SpellScriptLoader
void AddSC_instance_black_temple()
{
new instance_black_temple();
new spell_black_template_harpooners_mark();
new spell_black_template_free_friend();
new spell_black_temple_curse_of_the_bleakheart();
new spell_black_temple_skeleton_shot();
new spell_black_temple_wyvern_sting();
new spell_black_temple_charge_rage();
new spell_black_temple_shadow_inferno();
new spell_black_temple_spell_absorption();
new spell_black_temple_bloodbolt();
new spell_black_temple_consuming_strikes();
new spell_black_temple_curse_of_vitality();
new spell_black_temple_dementia();
new spell_black_template_harpooners_mark();
new spell_black_template_free_friend();
new spell_black_temple_curse_of_the_bleakheart();
new spell_black_temple_skeleton_shot();
new spell_black_temple_wyvern_sting();
new spell_black_temple_charge_rage();
new spell_black_temple_shadow_inferno();
new spell_black_temple_spell_absorption();
new spell_black_temple_bloodbolt();
new spell_black_temple_consuming_strikes();
new spell_black_temple_curse_of_vitality();
new spell_black_temple_dementia();
}