mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 17:05:44 +01:00
Scripts/Instances: Follow-up to #16346. Fix Illidan and Northrend Beasts.
(cherry picked from commit 4e922a5146)
# Conflicts:
# src/server/scripts/Outland/BlackTemple/boss_illidan.cpp
This commit is contained in:
@@ -191,7 +191,7 @@ class boss_gormok : public CreatureScript
|
||||
{
|
||||
case 0:
|
||||
instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR));
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->SetInCombatWithZone();
|
||||
break;
|
||||
@@ -595,7 +595,7 @@ struct boss_jormungarAI : public BossAI
|
||||
case EVENT_SUMMON_ACIDMAW:
|
||||
if (Creature* acidmaw = me->SummonCreature(NPC_ACIDMAW, ToCCommonLoc[9].GetPositionX(), ToCCommonLoc[9].GetPositionY(), ToCCommonLoc[9].GetPositionZ(), 5, TEMPSUMMON_MANUAL_DESPAWN))
|
||||
{
|
||||
acidmaw->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
acidmaw->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
acidmaw->SetReactState(REACT_AGGRESSIVE);
|
||||
acidmaw->SetInCombatWithZone();
|
||||
acidmaw->CastSpell(acidmaw, SPELL_EMERGE);
|
||||
@@ -752,7 +752,7 @@ class boss_dreadscale : public CreatureScript
|
||||
{
|
||||
case 0:
|
||||
instance->DoCloseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR));
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->SetInCombatWithZone();
|
||||
break;
|
||||
@@ -925,7 +925,7 @@ class boss_icehowl : public CreatureScript
|
||||
break;
|
||||
case 2:
|
||||
instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR));
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->SetInCombatWithZone();
|
||||
break;
|
||||
|
||||
@@ -539,6 +539,7 @@ public:
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->setActive(true);
|
||||
DoZoneInCombat();
|
||||
}
|
||||
@@ -585,7 +586,7 @@ public:
|
||||
|
||||
void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
|
||||
{
|
||||
if (spell->Id == SPELL_GLAIVE_RETURNS) // Re-equip our warblades!
|
||||
if (spell->Id == SPELL_GLAIVE_RETURNS) // Re-equip our warglaives!
|
||||
{
|
||||
if (!me->GetVirtualItemId(0))
|
||||
SetEquipmentSlots(false, EQUIP_ID_MAIN_HAND, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
|
||||
@@ -673,7 +674,7 @@ public:
|
||||
Timer[EVENT_TALK_SEQUENCE] = 100;
|
||||
me->RemoveAllAuras();
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->GetMotionMaster()->Clear(false);
|
||||
me->AttackStop();
|
||||
break;
|
||||
@@ -791,99 +792,99 @@ public:
|
||||
{
|
||||
switch (FlightCount)
|
||||
{
|
||||
case 1: // lift off
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||
me->SetDisableGravity(true);
|
||||
me->StopMoving();
|
||||
Talk(SAY_ILLIDAN_TAKEOFF);
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 3000;
|
||||
break;
|
||||
case 2: // move to center
|
||||
me->GetMotionMaster()->MovePoint(0, CENTER_X + 5, CENTER_Y, CENTER_Z); // +5, for SPELL_THROW_GLAIVE bug
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||
break;
|
||||
case 3: // throw one glaive
|
||||
{
|
||||
uint8 i=1;
|
||||
Creature* Glaive = me->SummonCreature(BLADE_OF_AZZINOTH, GlaivePosition[i].x, GlaivePosition[i].y, GlaivePosition[i].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
if (Glaive)
|
||||
case 1: // lift off
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||
me->SetDisableGravity(true);
|
||||
me->StopMoving();
|
||||
Talk(SAY_ILLIDAN_TAKEOFF);
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 3000;
|
||||
break;
|
||||
case 2: // move to center
|
||||
me->GetMotionMaster()->MovePoint(0, CENTER_X + 5, CENTER_Y, CENTER_Z); // +5, for SPELL_THROW_GLAIVE bug
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||
break;
|
||||
case 3: // throw one glaive
|
||||
{
|
||||
GlaiveGUID[i] = Glaive->GetGUID();
|
||||
Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Glaive->SetDisplayId(MODEL_INVISIBLE);
|
||||
Glaive->setFaction(me->getFaction());
|
||||
DoCast(Glaive, SPELL_THROW_GLAIVE2);
|
||||
}
|
||||
}
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 700;
|
||||
break;
|
||||
case 4: // throw another
|
||||
SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
|
||||
{
|
||||
uint8 i=0;
|
||||
Creature* Glaive = me->SummonCreature(BLADE_OF_AZZINOTH, GlaivePosition[i].x, GlaivePosition[i].y, GlaivePosition[i].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
if (Glaive)
|
||||
{
|
||||
GlaiveGUID[i] = Glaive->GetGUID();
|
||||
Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Glaive->SetDisplayId(MODEL_INVISIBLE);
|
||||
Glaive->setFaction(me->getFaction());
|
||||
DoCast(Glaive, SPELL_THROW_GLAIVE, true);
|
||||
}
|
||||
}
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 5000;
|
||||
break;
|
||||
case 5: // summon flames
|
||||
SummonFlamesOfAzzinoth();
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 3000;
|
||||
break;
|
||||
case 6: // fly to hover point
|
||||
me->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||
break;
|
||||
case 7: // return to center
|
||||
me->GetMotionMaster()->MovePoint(0, CENTER_X, CENTER_Y, CENTER_Z);
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||
break;
|
||||
case 8: // glaive return
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
{
|
||||
if (!GlaiveGUID[i].IsEmpty())
|
||||
{
|
||||
Unit* Glaive = ObjectAccessor::GetUnit(*me, GlaiveGUID[i]);
|
||||
uint8 i=1;
|
||||
Creature* Glaive = me->SummonCreature(BLADE_OF_AZZINOTH, GlaivePosition[i].x, GlaivePosition[i].y, GlaivePosition[i].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
if (Glaive)
|
||||
{
|
||||
Glaive->CastSpell(me, SPELL_GLAIVE_RETURNS, false); // Make it look like the Glaive flies back up to us
|
||||
Glaive->SetDisplayId(MODEL_INVISIBLE); // disappear but not die for now
|
||||
GlaiveGUID[i] = Glaive->GetGUID();
|
||||
Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Glaive->SetDisplayId(MODEL_INVISIBLE);
|
||||
Glaive->setFaction(me->getFaction());
|
||||
DoCast(Glaive, SPELL_THROW_GLAIVE2);
|
||||
}
|
||||
}
|
||||
}
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
|
||||
break;
|
||||
case 9: // land
|
||||
me->SetDisableGravity(false);
|
||||
me->StopMoving();
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
{
|
||||
if (!GlaiveGUID[i].IsEmpty())
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 700;
|
||||
break;
|
||||
case 4: // throw another
|
||||
SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
|
||||
{
|
||||
if (Creature* glaive = ObjectAccessor::GetCreature(*me, GlaiveGUID[i]))
|
||||
glaive->DespawnOrUnsummon();
|
||||
|
||||
GlaiveGUID[i].Clear();
|
||||
uint8 i=0;
|
||||
Creature* Glaive = me->SummonCreature(BLADE_OF_AZZINOTH, GlaivePosition[i].x, GlaivePosition[i].y, GlaivePosition[i].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
|
||||
if (Glaive)
|
||||
{
|
||||
GlaiveGUID[i] = Glaive->GetGUID();
|
||||
Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Glaive->SetDisplayId(MODEL_INVISIBLE);
|
||||
Glaive->setFaction(me->getFaction());
|
||||
DoCast(Glaive, SPELL_THROW_GLAIVE, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
|
||||
break;
|
||||
case 10: // attack
|
||||
DoResetThreat();
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetSheath(SHEATH_STATE_MELEE);
|
||||
EnterPhase(PHASE_NORMAL_2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 5000;
|
||||
break;
|
||||
case 5: // summon flames
|
||||
SummonFlamesOfAzzinoth();
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 3000;
|
||||
break;
|
||||
case 6: // fly to hover point
|
||||
me->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||
break;
|
||||
case 7: // return to center
|
||||
me->GetMotionMaster()->MovePoint(0, CENTER_X, CENTER_Y, CENTER_Z);
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||
break;
|
||||
case 8: // glaive return
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
{
|
||||
if (!GlaiveGUID[i].IsEmpty())
|
||||
{
|
||||
Unit* Glaive = ObjectAccessor::GetUnit(*me, GlaiveGUID[i]);
|
||||
if (Glaive)
|
||||
{
|
||||
Glaive->CastSpell(me, SPELL_GLAIVE_RETURNS, false); // Make it look like the Glaive flies back up to us
|
||||
Glaive->SetDisplayId(MODEL_INVISIBLE); // disappear but not die for now
|
||||
}
|
||||
}
|
||||
}
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
|
||||
break;
|
||||
case 9: // land
|
||||
me->SetDisableGravity(false);
|
||||
me->StopMoving();
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
{
|
||||
if (!GlaiveGUID[i].IsEmpty())
|
||||
{
|
||||
if (Creature* glaive = ObjectAccessor::GetCreature(*me, GlaiveGUID[i]))
|
||||
glaive->DespawnOrUnsummon();
|
||||
|
||||
GlaiveGUID[i].Clear();
|
||||
}
|
||||
}
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
|
||||
break;
|
||||
case 10: // attack
|
||||
DoResetThreat();
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetSheath(SHEATH_STATE_MELEE);
|
||||
EnterPhase(PHASE_NORMAL_2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
++FlightCount;
|
||||
}
|
||||
@@ -913,23 +914,23 @@ public:
|
||||
|
||||
switch (TransformCount)
|
||||
{
|
||||
case 2:
|
||||
DoResetThreat();
|
||||
break;
|
||||
case 4:
|
||||
EnterPhase(PHASE_DEMON);
|
||||
break;
|
||||
case 7:
|
||||
DoResetThreat();
|
||||
break;
|
||||
case 9:
|
||||
if (!MaievGUID.IsEmpty())
|
||||
EnterPhase(PHASE_NORMAL_MAIEV); // Depending on whether we summoned Maiev, we switch to either phase 5 or 3
|
||||
else
|
||||
EnterPhase(PHASE_NORMAL_2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case 2:
|
||||
DoResetThreat();
|
||||
break;
|
||||
case 4:
|
||||
EnterPhase(PHASE_DEMON);
|
||||
break;
|
||||
case 7:
|
||||
DoResetThreat();
|
||||
break;
|
||||
case 9:
|
||||
if (!MaievGUID.IsEmpty())
|
||||
EnterPhase(PHASE_NORMAL_MAIEV); // Depending on whether we summoned Maiev, we switch to either phase 5 or 3
|
||||
else
|
||||
EnterPhase(PHASE_NORMAL_2);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (Phase == PHASE_TRANSFORM_SEQUENCE)
|
||||
Timer[EVENT_TRANSFORM_SEQUENCE] = DemonTransformation[TransformCount].timer;
|
||||
@@ -957,37 +958,37 @@ public:
|
||||
|
||||
switch (Phase)
|
||||
{
|
||||
case PHASE_NORMAL:
|
||||
if (HealthBelowPct(65))
|
||||
EnterPhase(PHASE_FLIGHT_SEQUENCE);
|
||||
break;
|
||||
case PHASE_NORMAL:
|
||||
if (HealthBelowPct(65))
|
||||
EnterPhase(PHASE_FLIGHT_SEQUENCE);
|
||||
break;
|
||||
|
||||
case PHASE_NORMAL_2:
|
||||
if (HealthBelowPct(30))
|
||||
EnterPhase(PHASE_TALK_SEQUENCE);
|
||||
break;
|
||||
case PHASE_NORMAL_2:
|
||||
if (HealthBelowPct(30))
|
||||
EnterPhase(PHASE_TALK_SEQUENCE);
|
||||
break;
|
||||
|
||||
case PHASE_NORMAL_MAIEV:
|
||||
if (HealthBelowPct(1))
|
||||
EnterPhase(PHASE_TALK_SEQUENCE);
|
||||
break;
|
||||
case PHASE_NORMAL_MAIEV:
|
||||
if (HealthBelowPct(1))
|
||||
EnterPhase(PHASE_TALK_SEQUENCE);
|
||||
break;
|
||||
|
||||
case PHASE_TALK_SEQUENCE:
|
||||
if (Event == EVENT_TALK_SEQUENCE)
|
||||
HandleTalkSequence();
|
||||
break;
|
||||
case PHASE_TALK_SEQUENCE:
|
||||
if (Event == EVENT_TALK_SEQUENCE)
|
||||
HandleTalkSequence();
|
||||
break;
|
||||
|
||||
case PHASE_FLIGHT_SEQUENCE:
|
||||
if (Event == EVENT_FLIGHT_SEQUENCE)
|
||||
HandleFlightSequence();
|
||||
break;
|
||||
case PHASE_FLIGHT_SEQUENCE:
|
||||
if (Event == EVENT_FLIGHT_SEQUENCE)
|
||||
HandleFlightSequence();
|
||||
break;
|
||||
|
||||
case PHASE_TRANSFORM_SEQUENCE:
|
||||
if (Event == EVENT_TRANSFORM_SEQUENCE)
|
||||
HandleTransformSequence();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case PHASE_TRANSFORM_SEQUENCE:
|
||||
if (Event == EVENT_TRANSFORM_SEQUENCE)
|
||||
HandleTransformSequence();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (me->IsNonMeleeSpellCast(false))
|
||||
@@ -998,63 +999,63 @@ public:
|
||||
switch (Event)
|
||||
{
|
||||
// PHASE_NORMAL
|
||||
case EVENT_BERSERK:
|
||||
Talk(SAY_ILLIDAN_ENRAGE);
|
||||
DoCast(me, SPELL_BERSERK, true);
|
||||
Timer[EVENT_BERSERK] = 5000; // The buff actually lasts forever.
|
||||
break;
|
||||
case EVENT_BERSERK:
|
||||
Talk(SAY_ILLIDAN_ENRAGE);
|
||||
DoCast(me, SPELL_BERSERK, true);
|
||||
Timer[EVENT_BERSERK] = 5000; // The buff actually lasts forever.
|
||||
break;
|
||||
|
||||
case EVENT_TAUNT:
|
||||
Talk(SAY_ILLIDAN_TAUNT);
|
||||
Timer[EVENT_TAUNT] = urand(25000, 35000);
|
||||
break;
|
||||
case EVENT_TAUNT:
|
||||
Talk(SAY_ILLIDAN_TAUNT);
|
||||
Timer[EVENT_TAUNT] = urand(25000, 35000);
|
||||
break;
|
||||
|
||||
case EVENT_SHEAR:
|
||||
// no longer exists in 3.0f.2
|
||||
// DoCastVictim(SPELL_SHEAR);
|
||||
Timer[EVENT_SHEAR] = 25000 + (rand32() % 16 * 1000);
|
||||
break;
|
||||
case EVENT_SHEAR:
|
||||
// no longer exists in 3.0f.2
|
||||
// DoCastVictim(SPELL_SHEAR);
|
||||
Timer[EVENT_SHEAR] = 25000 + (rand32() % 16 * 1000);
|
||||
break;
|
||||
|
||||
case EVENT_FLAME_CRASH:
|
||||
DoCastVictim(SPELL_FLAME_CRASH);
|
||||
Timer[EVENT_FLAME_CRASH] = urand(30000, 40000);
|
||||
break;
|
||||
case EVENT_FLAME_CRASH:
|
||||
DoCastVictim(SPELL_FLAME_CRASH);
|
||||
Timer[EVENT_FLAME_CRASH] = urand(30000, 40000);
|
||||
break;
|
||||
|
||||
case EVENT_PARASITIC_SHADOWFIEND:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 200, true))
|
||||
DoCast(target, SPELL_PARASITIC_SHADOWFIEND, true);
|
||||
Timer[EVENT_PARASITIC_SHADOWFIEND] = urand(35000, 45000);
|
||||
}
|
||||
break;
|
||||
case EVENT_PARASITIC_SHADOWFIEND:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 200, true))
|
||||
DoCast(target, SPELL_PARASITIC_SHADOWFIEND, true);
|
||||
Timer[EVENT_PARASITIC_SHADOWFIEND] = urand(35000, 45000);
|
||||
}
|
||||
break;
|
||||
|
||||
case EVENT_PARASITE_CHECK:
|
||||
Timer[EVENT_PARASITE_CHECK] = 0;
|
||||
break;
|
||||
case EVENT_PARASITE_CHECK:
|
||||
Timer[EVENT_PARASITE_CHECK] = 0;
|
||||
break;
|
||||
|
||||
case EVENT_DRAW_SOUL:
|
||||
DoCastVictim(SPELL_DRAW_SOUL);
|
||||
Timer[EVENT_DRAW_SOUL] = urand(50000, 60000);
|
||||
break;
|
||||
case EVENT_DRAW_SOUL:
|
||||
DoCastVictim(SPELL_DRAW_SOUL);
|
||||
Timer[EVENT_DRAW_SOUL] = urand(50000, 60000);
|
||||
break;
|
||||
|
||||
// PHASE_NORMAL_2
|
||||
case EVENT_AGONIZING_FLAMES:
|
||||
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_AGONIZING_FLAMES);
|
||||
Timer[EVENT_AGONIZING_FLAMES] = 0;
|
||||
break;
|
||||
// PHASE_NORMAL_2
|
||||
case EVENT_AGONIZING_FLAMES:
|
||||
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_AGONIZING_FLAMES);
|
||||
Timer[EVENT_AGONIZING_FLAMES] = 0;
|
||||
break;
|
||||
|
||||
case EVENT_TRANSFORM_NORMAL:
|
||||
EnterPhase(PHASE_TRANSFORM_SEQUENCE);
|
||||
break;
|
||||
case EVENT_TRANSFORM_NORMAL:
|
||||
EnterPhase(PHASE_TRANSFORM_SEQUENCE);
|
||||
break;
|
||||
|
||||
// PHASE_NORMAL_MAIEV
|
||||
case EVENT_ENRAGE:
|
||||
DoCast(me, SPELL_ENRAGE);
|
||||
Timer[EVENT_ENRAGE] = 0;
|
||||
break;
|
||||
// PHASE_NORMAL_MAIEV
|
||||
case EVENT_ENRAGE:
|
||||
DoCast(me, SPELL_ENRAGE);
|
||||
Timer[EVENT_ENRAGE] = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
@@ -1063,32 +1064,32 @@ public:
|
||||
{
|
||||
switch (Event)
|
||||
{
|
||||
case EVENT_FIREBALL:
|
||||
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_FIREBALL);
|
||||
Timer[EVENT_FIREBALL] = 3000;
|
||||
break;
|
||||
case EVENT_FIREBALL:
|
||||
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_FIREBALL);
|
||||
Timer[EVENT_FIREBALL] = 3000;
|
||||
break;
|
||||
|
||||
case EVENT_DARK_BARRAGE:
|
||||
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_DARK_BARRAGE);
|
||||
Timer[EVENT_DARK_BARRAGE] = 0;
|
||||
break;
|
||||
case EVENT_DARK_BARRAGE:
|
||||
DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_DARK_BARRAGE);
|
||||
Timer[EVENT_DARK_BARRAGE] = 0;
|
||||
break;
|
||||
|
||||
case EVENT_EYE_BLAST:
|
||||
CastEyeBlast();
|
||||
Timer[EVENT_EYE_BLAST] = 0;
|
||||
break;
|
||||
case EVENT_EYE_BLAST:
|
||||
CastEyeBlast();
|
||||
Timer[EVENT_EYE_BLAST] = 0;
|
||||
break;
|
||||
|
||||
case EVENT_MOVE_POINT:
|
||||
Phase = PHASE_FLIGHT_SEQUENCE;
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0; // do not start Event when changing hover point
|
||||
HoverPoint += (rand32() % 3 + 1);
|
||||
if (HoverPoint > 3)
|
||||
HoverPoint -= 4;
|
||||
me->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
|
||||
break;
|
||||
case EVENT_MOVE_POINT:
|
||||
Phase = PHASE_FLIGHT_SEQUENCE;
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0; // do not start Event when changing hover point
|
||||
HoverPoint += (rand32() % 3 + 1);
|
||||
if (HoverPoint > 3)
|
||||
HoverPoint -= 4;
|
||||
me->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1096,29 +1097,29 @@ public:
|
||||
{
|
||||
switch (Event)
|
||||
{
|
||||
case EVENT_SHADOW_BLAST:
|
||||
me->GetMotionMaster()->Clear(false);
|
||||
if (me->GetVictim() && (!me->IsWithinDistInMap(me->GetVictim(), 50) || !me->IsWithinLOSInMap(me->GetVictim())))
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim(), 30);
|
||||
else
|
||||
me->GetMotionMaster()->MoveIdle();
|
||||
DoCastVictim(SPELL_SHADOW_BLAST);
|
||||
Timer[EVENT_SHADOW_BLAST] = 4000;
|
||||
break;
|
||||
case EVENT_SHADOWDEMON:
|
||||
DoCast(me, SPELL_SUMMON_SHADOWDEMON);
|
||||
Timer[EVENT_SHADOWDEMON] = 0;
|
||||
Timer[EVENT_FLAME_BURST] += 10000;
|
||||
break;
|
||||
case EVENT_FLAME_BURST:
|
||||
DoCast(me, SPELL_FLAME_BURST);
|
||||
Timer[EVENT_FLAME_BURST] = 15000;
|
||||
break;
|
||||
case EVENT_TRANSFORM_DEMON:
|
||||
EnterPhase(PHASE_TRANSFORM_SEQUENCE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case EVENT_SHADOW_BLAST:
|
||||
me->GetMotionMaster()->Clear(false);
|
||||
if (me->GetVictim() && (!me->IsWithinDistInMap(me->GetVictim(), 50) || !me->IsWithinLOSInMap(me->GetVictim())))
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim(), 30);
|
||||
else
|
||||
me->GetMotionMaster()->MoveIdle();
|
||||
DoCastVictim(SPELL_SHADOW_BLAST);
|
||||
Timer[EVENT_SHADOW_BLAST] = 4000;
|
||||
break;
|
||||
case EVENT_SHADOWDEMON:
|
||||
DoCast(me, SPELL_SUMMON_SHADOWDEMON);
|
||||
Timer[EVENT_SHADOWDEMON] = 0;
|
||||
Timer[EVENT_FLAME_BURST] += 10000;
|
||||
break;
|
||||
case EVENT_FLAME_BURST:
|
||||
DoCast(me, SPELL_FLAME_BURST);
|
||||
Timer[EVENT_FLAME_BURST] = 15000;
|
||||
break;
|
||||
case EVENT_TRANSFORM_DEMON:
|
||||
EnterPhase(PHASE_TRANSFORM_SEQUENCE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1148,7 +1149,7 @@ public:
|
||||
|
||||
/********************************** End of Illidan AI* *****************************************/
|
||||
|
||||
/******* Functions and vars for Akama's AI* *****/
|
||||
/******* Functions and vars for Maiev's AI* *****/
|
||||
class boss_maiev_shadowsong : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@@ -1377,6 +1378,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/******* Functions and vars for Akama's AI* *****/
|
||||
class npc_akama_illidan : public CreatureScript
|
||||
{
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user