Merge branch 'master' into Playerbot
This commit is contained in:
+1
-1
@@ -94,7 +94,7 @@ public:
|
||||
_conflagrateThreat = me->GetThreatMgr().GetThreat(me->GetVictim());
|
||||
me->GetThreatMgr().ModifyThreatByPercent(target, -100);
|
||||
}
|
||||
events.ScheduleEvent(EVENT_CONFLAGRATION, 10s, 13s);
|
||||
events.ScheduleEvent(EVENT_CONFLAGRATION, 18s, 25s);
|
||||
events.ScheduleEvent(EVENT_CHECK_CONFLAGRATION_TARGET, 10s);
|
||||
break;
|
||||
case EVENT_THUNDERCLAP:
|
||||
|
||||
@@ -89,6 +89,7 @@ struct boss_nalorakk : public BossAI
|
||||
{
|
||||
boss_nalorakk(Creature* creature) : BossAI(creature, DATA_NALORAKKEVENT)
|
||||
{
|
||||
_phase = PHASE_SEND_GUARDS_1;
|
||||
_ranIntro = false;
|
||||
_active = true;
|
||||
creature->SetReactState(REACT_PASSIVE);
|
||||
|
||||
@@ -65,127 +65,110 @@ enum Misc
|
||||
GROUP_DELAY = 1
|
||||
};
|
||||
|
||||
class boss_gurtogg_bloodboil : public CreatureScript
|
||||
struct boss_gurtogg_bloodboil : public BossAI
|
||||
{
|
||||
public:
|
||||
boss_gurtogg_bloodboil() : CreatureScript("boss_gurtogg_bloodboil") { }
|
||||
boss_gurtogg_bloodboil(Creature* creature) : BossAI(creature, DATA_GURTOGG_BLOODBOIL), _recentlySpoken(false) { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
void Reset() override
|
||||
{
|
||||
return GetBlackTempleAI<boss_gurtogg_bloodboilAI>(creature);
|
||||
BossAI::Reset();
|
||||
_recentlySpoken = false;
|
||||
}
|
||||
|
||||
struct boss_gurtogg_bloodboilAI : public BossAI
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
boss_gurtogg_bloodboilAI(Creature* creature) : BossAI(creature, DATA_GURTOGG_BLOODBOIL), _recentlySpoken(false) { }
|
||||
BossAI::JustEngagedWith(who);
|
||||
Talk(SAY_AGGRO);
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
BossAI::Reset();
|
||||
_recentlySpoken = false;
|
||||
}
|
||||
DoCastSelf(SPELL_ACIDIC_WOUND, true);
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
Talk(SAY_AGGRO);
|
||||
|
||||
DoCastSelf(SPELL_ACIDIC_WOUND, true);
|
||||
|
||||
ScheduleTimedEvent(10s, [&] {
|
||||
ScheduleTimedEvent(10s, [&] {
|
||||
if (!me->HasAura(SPELL_FEL_RAGE_SELF))
|
||||
me->CastCustomSpell(SPELL_BLOODBOIL, SPELLVALUE_MAX_TARGETS, 5, me, false);
|
||||
}, 10s);
|
||||
}, 10s);
|
||||
|
||||
ScheduleTimedEvent(38s, [&] {
|
||||
DoCastVictim(me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_FEL_ACID_BREATH2 : SPELL_FEL_ACID_BREATH1);
|
||||
}, 30s);
|
||||
ScheduleTimedEvent(38s, [&] {
|
||||
DoCastVictim(me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_FEL_ACID_BREATH2 : SPELL_FEL_ACID_BREATH1);
|
||||
}, 30s);
|
||||
|
||||
ScheduleTimedEvent(14s, [&] {
|
||||
DoCastVictim(me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_EJECT2 : SPELL_EJECT1);
|
||||
}, 20s);
|
||||
ScheduleTimedEvent(14s, [&] {
|
||||
DoCastVictim(me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_EJECT2 : SPELL_EJECT1);
|
||||
}, 20s);
|
||||
|
||||
ScheduleTimedEvent(5s, [&] {
|
||||
DoCastVictim(me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_ARCING_SMASH2 : SPELL_ARCING_SMASH1);
|
||||
}, 15s);
|
||||
ScheduleTimedEvent(5s, [&] {
|
||||
DoCastVictim(me->HasAura(SPELL_FEL_RAGE_SELF) ? SPELL_ARCING_SMASH2 : SPELL_ARCING_SMASH1);
|
||||
}, 15s);
|
||||
|
||||
ScheduleTimedEvent(1min, [&] {
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 40.0f, true))
|
||||
{
|
||||
me->RemoveAurasByType(SPELL_AURA_MOD_TAUNT);
|
||||
DoCastSelf(SPELL_FEL_RAGE_SELF, true);
|
||||
DoCast(target, SPELL_FEL_RAGE_TARGET, true);
|
||||
DoCast(target, SPELL_FEL_RAGE_2, true);
|
||||
DoCast(target, SPELL_FEL_RAGE_3, true);
|
||||
DoCast(target, SPELL_FEL_RAGE_SIZE, true);
|
||||
target->CastSpell(me, SPELL_TAUNT_GURTOGG, true);
|
||||
|
||||
DoCast(target, SPELL_FEL_GEYSER_SUMMON, true);
|
||||
DoCastSelf(SPELL_FEL_GEYSER_STUN, true);
|
||||
DoCastSelf(SPELL_INSIGNIFICANCE, true);
|
||||
|
||||
me->m_Events.AddEventAtOffset([&] {
|
||||
DoCastVictim(SPELL_CHARGE);
|
||||
}, 2s);
|
||||
|
||||
scheduler.DelayGroup(GROUP_DELAY, 30s);
|
||||
}
|
||||
}, 90s);
|
||||
|
||||
ScheduleUniqueTimedEvent(10min, [&] {
|
||||
Talk(SAY_ENRAGE);
|
||||
DoCastSelf(SPELL_BERSERK, true);
|
||||
}, EVENT_SPELL_BERSERK);
|
||||
|
||||
scheduler.Schedule(28s, [this](TaskContext context) {
|
||||
context.SetGroup(GROUP_DELAY);
|
||||
DoCastVictim(SPELL_BEWILDERING_STRIKE);
|
||||
context.Repeat(30s);
|
||||
});
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
{
|
||||
if (!_recentlySpoken)
|
||||
ScheduleTimedEvent(1min, [&] {
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 40.0f, true))
|
||||
{
|
||||
Talk(SAY_SLAY);
|
||||
me->RemoveAurasByType(SPELL_AURA_MOD_TAUNT);
|
||||
DoCastSelf(SPELL_FEL_RAGE_SELF, true);
|
||||
DoCast(target, SPELL_FEL_RAGE_TARGET, true);
|
||||
DoCast(target, SPELL_FEL_RAGE_2, true);
|
||||
DoCast(target, SPELL_FEL_RAGE_3, true);
|
||||
DoCast(target, SPELL_FEL_RAGE_SIZE, true);
|
||||
target->CastSpell(me, SPELL_TAUNT_GURTOGG, true);
|
||||
|
||||
DoCast(target, SPELL_FEL_GEYSER_SUMMON, true);
|
||||
DoCastSelf(SPELL_FEL_GEYSER_STUN, true);
|
||||
DoCastSelf(SPELL_INSIGNIFICANCE, true);
|
||||
|
||||
me->m_Events.AddEventAtOffset([&] {
|
||||
_recentlySpoken = false;
|
||||
}, 6s);
|
||||
DoCastVictim(SPELL_CHARGE);
|
||||
}, 2s);
|
||||
|
||||
scheduler.DelayGroup(GROUP_DELAY, 30s);
|
||||
}
|
||||
}
|
||||
}, 90s);
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
ScheduleUniqueTimedEvent(10min, [&] {
|
||||
Talk(SAY_ENRAGE);
|
||||
DoCastSelf(SPELL_BERSERK, true);
|
||||
}, EVENT_SPELL_BERSERK);
|
||||
|
||||
scheduler.Schedule(28s, [this](TaskContext context) {
|
||||
context.SetGroup(GROUP_DELAY);
|
||||
DoCastVictim(SPELL_BEWILDERING_STRIKE);
|
||||
context.Repeat(30s);
|
||||
});
|
||||
}
|
||||
|
||||
bool CanAIAttack(Unit const* who) const override
|
||||
{
|
||||
return !who->IsImmunedToDamage(SPELL_SCHOOL_MASK_ALL);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
{
|
||||
if (!_recentlySpoken)
|
||||
{
|
||||
summons.Summon(summon);
|
||||
summon->CastSpell(summon, SPELL_FEL_GEYSER_DAMAGE, false);
|
||||
Talk(SAY_SLAY);
|
||||
me->m_Events.AddEventAtOffset([&] {
|
||||
_recentlySpoken = false;
|
||||
}, 6s);
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
Talk(SAY_DEATH);
|
||||
}
|
||||
void JustSummoned(Creature* summon) override
|
||||
{
|
||||
summons.Summon(summon);
|
||||
summon->CastSpell(summon, SPELL_FEL_GEYSER_DAMAGE, false);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
BossAI::JustDied(killer);
|
||||
Talk(SAY_DEATH);
|
||||
}
|
||||
|
||||
scheduler.Update(diff);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
bool CheckEvadeIfOutOfCombatArea() const override
|
||||
{
|
||||
return me->GetHomePosition().GetExactDist2d(me) > 105.0f;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
bool CheckEvadeIfOutOfCombatArea() const override
|
||||
{
|
||||
return me->GetHomePosition().GetExactDist2d(me) > 105.0f;
|
||||
}
|
||||
|
||||
private:
|
||||
bool _recentlySpoken;
|
||||
};
|
||||
private:
|
||||
bool _recentlySpoken;
|
||||
};
|
||||
|
||||
class spell_gurtogg_bloodboil : public SpellScript
|
||||
@@ -231,7 +214,7 @@ class spell_gurtogg_eject : public SpellScript
|
||||
|
||||
void AddSC_boss_gurtogg_bloodboil()
|
||||
{
|
||||
new boss_gurtogg_bloodboil();
|
||||
RegisterBlackTempleCreatureAI(boss_gurtogg_bloodboil);
|
||||
RegisterSpellScript(spell_gurtogg_bloodboil);
|
||||
RegisterSpellScript(spell_gurtogg_eject);
|
||||
}
|
||||
|
||||
@@ -1209,7 +1209,10 @@ enum WarbladeTear
|
||||
|
||||
struct npc_blade_of_azzinoth : public ScriptedAI
|
||||
{
|
||||
npc_blade_of_azzinoth(Creature* creature) : ScriptedAI(creature) { }
|
||||
npc_blade_of_azzinoth(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
|
||||
void IsSummonedBy(WorldObject* /*summoner*/) override
|
||||
{
|
||||
@@ -1257,12 +1260,13 @@ enum FlameAzzinoth
|
||||
|
||||
struct npc_flame_of_azzinoth : public ScriptedAI
|
||||
{
|
||||
npc_flame_of_azzinoth(Creature* creature) : ScriptedAI(creature), _bladeSummoner(nullptr) { }
|
||||
npc_flame_of_azzinoth(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void IsSummonedBy(WorldObject* /*summoner*/) override
|
||||
{
|
||||
// Flame is set to be Illidan's summon, so we check for nearest blade
|
||||
_bladeSummoner = me->FindNearestCreature(NPC_BLADE_OF_AZZINOTH, 15.0f);
|
||||
if (Creature* _blade = me->FindNearestCreature(NPC_BLADE_OF_AZZINOTH, 15.0f))
|
||||
_bladeGUID = _blade->GetGUID();
|
||||
|
||||
me->SetCorpseDelay(2);
|
||||
me->SetReactState(REACT_DEFENSIVE);
|
||||
@@ -1285,8 +1289,8 @@ struct npc_flame_of_azzinoth : public ScriptedAI
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
ScheduleTimedEvent(10s, [&] {
|
||||
if (_bladeSummoner)
|
||||
if (Unit* target = _bladeSummoner->AI()->SelectTarget(SelectTargetMethod::Random, 0, 30.f, true))
|
||||
if (Creature* _blade = ObjectAccessor::GetCreature(*me, _bladeGUID))
|
||||
if (Unit* target = _blade->AI()->SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
|
||||
DoCast(target, SPELL_CHARGE);
|
||||
}, 5s, 20s);
|
||||
|
||||
@@ -1301,7 +1305,7 @@ struct npc_flame_of_azzinoth : public ScriptedAI
|
||||
}
|
||||
|
||||
private:
|
||||
Creature* _bladeSummoner;
|
||||
ObjectGuid _bladeGUID;
|
||||
};
|
||||
|
||||
class spell_illidan_draw_soul : public SpellScript
|
||||
|
||||
@@ -262,7 +262,7 @@ struct boss_illidari_council_memberAI : public ScriptedAI
|
||||
if (events.GetNextEventTime(EVENT_KILL_TALK) == 0)
|
||||
{
|
||||
Talk(SAY_COUNCIL_SLAY);
|
||||
events.ScheduleEvent(EVENT_KILL_TALK, 6000);
|
||||
events.ScheduleEvent(EVENT_KILL_TALK, 6s);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -303,12 +303,12 @@ struct boss_gathios_the_shatterer : public boss_illidari_council_memberAI
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
boss_illidari_council_memberAI::JustEngagedWith(who);
|
||||
events.ScheduleEvent(EVENT_SPELL_BLESSING, 10000);
|
||||
events.ScheduleEvent(EVENT_SPELL_AURA, 0);
|
||||
events.ScheduleEvent(EVENT_SPELL_SEAL, 2000);
|
||||
events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 6000);
|
||||
events.ScheduleEvent(EVENT_SPELL_JUDGEMENT, 8000);
|
||||
events.ScheduleEvent(EVENT_SPELL_CONSECRATION, 4000);
|
||||
events.ScheduleEvent(EVENT_SPELL_BLESSING, 10s);
|
||||
events.ScheduleEvent(EVENT_SPELL_AURA, 0s);
|
||||
events.ScheduleEvent(EVENT_SPELL_SEAL, 2s);
|
||||
events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 6s);
|
||||
events.ScheduleEvent(EVENT_SPELL_JUDGEMENT, 15s);
|
||||
events.ScheduleEvent(EVENT_SPELL_CONSECRATION, 4s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -328,18 +328,18 @@ struct boss_gathios_the_shatterer : public boss_illidari_council_memberAI
|
||||
me->CastSpell(member, _toggleBlessing ? SPELL_BLESSING_OF_PROTECTION : SPELL_BLESSING_OF_SPELL_WARDING);
|
||||
_toggleBlessing = !_toggleBlessing;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_SPELL_BLESSING, 15000);
|
||||
events.ScheduleEvent(EVENT_SPELL_BLESSING, 15s);
|
||||
break;
|
||||
case EVENT_SPELL_AURA:
|
||||
me->CastSpell(me, _toggleAura ? SPELL_DEVOTION_AURA : SPELL_CHROMATIC_RESISTANCE_AURA);
|
||||
_toggleAura = !_toggleAura;
|
||||
events.ScheduleEvent(EVENT_SPELL_AURA, 60000);
|
||||
events.ScheduleEvent(EVENT_SPELL_AURA, 60s);
|
||||
break;
|
||||
case EVENT_SPELL_CONSECRATION:
|
||||
if (roll_chance_i(50))
|
||||
Talk(SAY_COUNCIL_SPECIAL);
|
||||
me->CastSpell(me, SPELL_CONSECRATION, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_AURA, 30000);
|
||||
events.ScheduleEvent(EVENT_SPELL_AURA, 30s);
|
||||
break;
|
||||
case EVENT_SPELL_HAMMER_OF_JUSTICE:
|
||||
if (Unit* target = me->GetVictim())
|
||||
@@ -349,16 +349,16 @@ struct boss_gathios_the_shatterer : public boss_illidari_council_memberAI
|
||||
events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 20s);
|
||||
break;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 0);
|
||||
events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 0s);
|
||||
break;
|
||||
case EVENT_SPELL_SEAL:
|
||||
me->CastSpell(me, _toggleSeal ? SPELL_SEAL_OF_COMMAND : SPELL_SEAL_OF_BLOOD);
|
||||
_toggleSeal = !_toggleSeal;
|
||||
events.ScheduleEvent(EVENT_SPELL_SEAL, 20000);
|
||||
events.ScheduleEvent(EVENT_SPELL_SEAL, 20s);
|
||||
break;
|
||||
case EVENT_SPELL_JUDGEMENT:
|
||||
me->CastSpell(me->GetVictim(), SPELL_JUDGEMENT, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_JUDGEMENT, 20000);
|
||||
events.ScheduleEvent(EVENT_SPELL_JUDGEMENT, 16s, 20s);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -493,10 +493,10 @@ struct boss_lady_malande : public boss_illidari_council_memberAI
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
boss_illidari_council_memberAI::JustEngagedWith(who);
|
||||
events.ScheduleEvent(EVENT_SPELL_REFLECTIVE_SHIELD, 10000);
|
||||
events.ScheduleEvent(EVENT_SPELL_CIRCLE_OF_HEALING, 20000);
|
||||
events.ScheduleEvent(EVENT_SPELL_DIVINE_WRATH, 5000);
|
||||
events.ScheduleEvent(EVENT_SPELL_EMPOWERED_SMITE, 15000);
|
||||
events.ScheduleEvent(EVENT_SPELL_REFLECTIVE_SHIELD, 10s);
|
||||
events.ScheduleEvent(EVENT_SPELL_CIRCLE_OF_HEALING, 20s);
|
||||
events.ScheduleEvent(EVENT_SPELL_DIVINE_WRATH, 5s);
|
||||
events.ScheduleEvent(EVENT_SPELL_EMPOWERED_SMITE, 15s);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -512,22 +512,22 @@ struct boss_lady_malande : public boss_illidari_council_memberAI
|
||||
{
|
||||
case EVENT_SPELL_CIRCLE_OF_HEALING:
|
||||
me->CastSpell(me, SPELL_CIRCLE_OF_HEALING, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_CIRCLE_OF_HEALING, 20000);
|
||||
events.ScheduleEvent(EVENT_SPELL_CIRCLE_OF_HEALING, 20s);
|
||||
break;
|
||||
case EVENT_SPELL_REFLECTIVE_SHIELD:
|
||||
if (roll_chance_i(50))
|
||||
Talk(SAY_COUNCIL_SPECIAL);
|
||||
me->CastSpell(me, SPELL_REFLECTIVE_SHIELD, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_REFLECTIVE_SHIELD, 40000);
|
||||
events.ScheduleEvent(EVENT_SPELL_REFLECTIVE_SHIELD, 40s);
|
||||
break;
|
||||
case EVENT_SPELL_DIVINE_WRATH:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f))
|
||||
me->CastSpell(target, SPELL_DIVINE_WRATH, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_DIVINE_WRATH, 20000);
|
||||
events.ScheduleEvent(EVENT_SPELL_DIVINE_WRATH, 20s);
|
||||
break;
|
||||
case EVENT_SPELL_EMPOWERED_SMITE:
|
||||
me->CastSpell(me->GetVictim(), SPELL_EMPOWERED_SMITE, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_EMPOWERED_SMITE, 3000);
|
||||
events.ScheduleEvent(EVENT_SPELL_EMPOWERED_SMITE, 3s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -541,8 +541,8 @@ struct boss_veras_darkshadow : public boss_illidari_council_memberAI
|
||||
{
|
||||
me->SetCanDualWield(true);
|
||||
boss_illidari_council_memberAI::JustEngagedWith(who);
|
||||
events.ScheduleEvent(EVENT_SPELL_VANISH, 10000);
|
||||
events.ScheduleEvent(EVENT_SPELL_ENRAGE, 900000);
|
||||
events.ScheduleEvent(EVENT_SPELL_VANISH, 10s);
|
||||
events.ScheduleEvent(EVENT_SPELL_ENRAGE, 90s);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
@@ -566,8 +566,8 @@ struct boss_veras_darkshadow : public boss_illidari_council_memberAI
|
||||
Talk(SAY_COUNCIL_SPECIAL);
|
||||
me->CastSpell(me, SPELL_DEADLY_STRIKE, false);
|
||||
me->CastSpell(me, SPELL_VANISH, false);
|
||||
events.ScheduleEvent(EVENT_SPELL_VANISH, 60000);
|
||||
events.ScheduleEvent(EVENT_SPELL_VANISH_OUT, 29000);
|
||||
events.ScheduleEvent(EVENT_SPELL_VANISH, 60s);
|
||||
events.ScheduleEvent(EVENT_SPELL_VANISH_OUT, 29s);
|
||||
break;
|
||||
case EVENT_SPELL_VANISH_OUT:
|
||||
me->CastSpell(me, SPELL_VANISH_OUT, false);
|
||||
|
||||
@@ -220,6 +220,7 @@ struct npc_akama_shade : public ScriptedAI
|
||||
DoCastSelf(SPELL_STEALTH, true);
|
||||
me->SetWalk(true);
|
||||
_sayLowHealth = false;
|
||||
_died = false;
|
||||
scheduler.CancelAll();
|
||||
}
|
||||
|
||||
@@ -232,14 +233,14 @@ struct npc_akama_shade : public ScriptedAI
|
||||
case POINT_ENGAGE:
|
||||
me->SetHomePosition(me->GetPosition());
|
||||
me->SetFaction(FACTION_ENGAGE);
|
||||
DoCast(me, SPELL_AKAMA_SOUL_CHANNEL, true);
|
||||
DoCastSelf(SPELL_AKAMA_SOUL_CHANNEL, true);
|
||||
break;
|
||||
case POINT_OUTRO:
|
||||
DoCastSelf(SPELL_AKAMA_SOUL_RETRIEVE, true);
|
||||
ScheduleUniqueTimedEvent(15600ms, [&]
|
||||
{
|
||||
Talk(SAY_BROKEN_FREE_0);
|
||||
me->SummonCreatureGroup(SUMMON_GROUP_BROKENS);
|
||||
Talk(SAY_BROKEN_FREE_0);
|
||||
me->SummonCreatureGroup(SUMMON_GROUP_BROKENS);
|
||||
}, 1);
|
||||
ScheduleUniqueTimedEvent(26550ms, [&]
|
||||
{
|
||||
@@ -275,6 +276,19 @@ struct npc_akama_shade : public ScriptedAI
|
||||
_sayLowHealth = true;
|
||||
Talk(SAY_LOW_HEALTH);
|
||||
}
|
||||
else if (damage >= me->GetHealth() && !_died)
|
||||
{
|
||||
damage = me->GetHealth() - 1;
|
||||
Talk(SAY_DEATH);
|
||||
if (Creature* shade = instance->GetCreature(DATA_SHADE_OF_AKAMA))
|
||||
{
|
||||
shade->SetHomePosition(shade->GetHomePosition());
|
||||
shade->AI()->EnterEvadeMode();
|
||||
}
|
||||
|
||||
me->DespawnOrUnsummon();
|
||||
ScriptedAI::EnterEvadeMode(EvadeReason::EVADE_REASON_OTHER);
|
||||
}
|
||||
}
|
||||
|
||||
void DoAction(int32 param) override
|
||||
@@ -298,18 +312,6 @@ struct npc_akama_shade : public ScriptedAI
|
||||
|
||||
void EnterEvadeMode(EvadeReason /*why*/) override { }
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_DEATH);
|
||||
if (Creature* shade = instance->GetCreature(DATA_SHADE_OF_AKAMA))
|
||||
{
|
||||
shade->SetHomePosition(shade->GetHomePosition());
|
||||
shade->AI()->EnterEvadeMode();
|
||||
}
|
||||
|
||||
me->DespawnOrUnsummon();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
ScheduleTimedEvent(2s, [&]
|
||||
@@ -338,6 +340,7 @@ struct npc_akama_shade : public ScriptedAI
|
||||
|
||||
private:
|
||||
bool _sayLowHealth;
|
||||
bool _died;
|
||||
};
|
||||
|
||||
struct npc_creature_generator_akama : public ScriptedAI
|
||||
@@ -445,27 +448,18 @@ private:
|
||||
|
||||
struct npc_ashtongue_sorcerer : public NullCreatureAI
|
||||
{
|
||||
npc_ashtongue_sorcerer(Creature* creature) : NullCreatureAI(creature)
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
npc_ashtongue_sorcerer(Creature* creature) : NullCreatureAI(creature) { }
|
||||
|
||||
void MovementInform(uint32 type, uint32 point) override
|
||||
{
|
||||
if (type == POINT_MOTION_TYPE && point == POINT_ENGAGE)
|
||||
me->CastSpell(me, SPELL_SHADE_SOUL_CHANNEL, true);
|
||||
}
|
||||
|
||||
private:
|
||||
InstanceScript* instance;
|
||||
};
|
||||
|
||||
struct npc_ashtongue_channeler : public NullCreatureAI
|
||||
{
|
||||
npc_ashtongue_channeler(Creature* creature) : NullCreatureAI(creature)
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
npc_ashtongue_channeler(Creature* creature) : NullCreatureAI(creature) { }
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
@@ -484,7 +478,6 @@ struct npc_ashtongue_channeler : public NullCreatureAI
|
||||
}
|
||||
|
||||
private:
|
||||
InstanceScript* instance;
|
||||
TaskScheduler scheduler;
|
||||
};
|
||||
|
||||
|
||||
@@ -294,11 +294,6 @@ struct boss_kaelthas : public BossAI
|
||||
BossAI::AttackStart(who);
|
||||
}
|
||||
|
||||
void JustReachedHome() override
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
{
|
||||
if (_phase == PHASE_NONE && who->IsPlayer() && me->IsValidAttackTarget(who))
|
||||
|
||||
Reference in New Issue
Block a user