mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-29 08:33:47 +00:00
converted all tabs to 4 spaces
This commit is contained in:
@@ -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_
|
||||
|
||||
@@ -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
@@ -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();
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user