fix(Scripts/Northrend): Last Rites [Quest 12019] (#8691)

This commit is contained in:
Malcrom
2021-10-31 12:41:21 -03:00
committed by GitHub
parent 40d042e83d
commit b6ad5bf8ad
2 changed files with 762 additions and 0 deletions

View File

@@ -1428,10 +1428,670 @@ public:
}
};
/*######
## Quest 12019: Last Rites
######*/
// NPC 26170: Thassarian
enum Thassarian
{
EVENT_THASSARIAN_SCRIPT_1 = 1,
EVENT_THASSARIAN_SCRIPT_2 = 2,
EVENT_THASSARIAN_SCRIPT_3 = 3,
EVENT_THASSARIAN_SCRIPT_4 = 4,
EVENT_THASSARIAN_SCRIPT_5 = 5,
EVENT_THASSARIAN_SCRIPT_6 = 6,
EVENT_THASSARIAN_SCRIPT_7 = 7,
EVENT_THASSARIAN_SCRIPT_8 = 8,
EVENT_THASSARIAN_SCRIPT_9 = 9,
EVENT_THASSARIAN_SCRIPT_10 = 10,
EVENT_THASSARIAN_SCRIPT_11 = 11,
EVENT_THASSARIAN_SCRIPT_12 = 12,
EVENT_THASSARIAN_SCRIPT_13 = 13,
EVENT_THASSARIAN_SCRIPT_14 = 14,
EVENT_THASSARIAN_SCRIPT_15 = 15,
EVENT_THASSARIAN_SCRIPT_16 = 16,
EVENT_THASSARIAN_SCRIPT_17 = 17,
EVENT_THASSARIAN_SCRIPT_18 = 18,
EVENT_THASSARIAN_SCRIPT_19 = 19,
EVENT_THASSARIAN_SCRIPT_20 = 20,
EVENT_THASSARIAN_SCRIPT_21 = 21,
EVENT_THASSARIAN_SCRIPT_22 = 22,
EVENT_THASSARIAN_SCRIPT_23 = 23,
EVENT_THASSARIAN_SCRIPT_24 = 24,
EVENT_THASSARIAN_SCRIPT_25 = 25,
EVENT_THASSARIAN_SCRIPT_26 = 26,
EVENT_THASSARIAN_SCRIPT_27 = 27,
EVENT_THASSARIAN_SCRIPT_28 = 28,
EVENT_THASSARIAN_SCRIPT_29 = 29,
EVENT_THASSARIAN_CAST = 30,
FACTION_UNDEAD_SCOURGE = 974,
FACTION_VALIANCE_EXPEDITION_7 = 1974,
FACTION_UNDEAD_SCOURGE_9 = 1988,
NPC_IMAGE_LICH_KING = 26203,
NPC_COUNSELOR_TALBOT = 25301,
NPC_PRINCE_VALANAR = 28189,
NPC_GENERAL_ARLOS = 25250,
NPC_LERYSSA = 25251,
NPC_TANATHAL = 26173,
SPELL_THASSARIAN_FLAY = 46685,
SPELL_TRANSFORM_VALANAR = 46753,
SPELL_BLOOD_PRESENCE = 50995,
SAY_THASSARIAN_1 = 0,
SAY_THASSARIAN_2 = 1,
SAY_THASSARIAN_3 = 2,
SAY_THASSARIAN_4 = 3,
SAY_THASSARIAN_5 = 4,
SAY_THASSARIAN_6 = 5,
SAY_THASSARIAN_7 = 6,
SAY_TALBOT_1 = 0,
SAY_TALBOT_2 = 1,
SAY_TALBOT_3 = 2,
SAY_TALBOT_4 = 3,
SAY_LICH_1 = 0,
SAY_LICH_2 = 1,
SAY_LICH_3 = 2,
SAY_ARLOS_1 = 0,
SAY_ARLOS_2 = 1,
SAY_LERYSSA_1 = 0,
SAY_LERYSSA_2 = 1,
SAY_LERYSSA_3 = 2,
SAY_LERYSSA_4 = 3,
PATH_THASSARIAN = 1013030,
PATH_ARTHAS = 1013031,
PATH_TALBOT = 1013032,
PATH_ARLOS = 1013033,
PATH_LERYSSA = 1013034
};
class npc_thassarian : public CreatureScript
{
public:
npc_thassarian() : CreatureScript("npc_thassarian") {}
struct npc_thassarianAI : public ScriptedAI
{
npc_thassarianAI(Creature* creature) : ScriptedAI(creature){}
void Reset() override
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
_events.ScheduleEvent(EVENT_THASSARIAN_CAST, 1000);
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
if (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_THASSARIAN_CAST:
{
if (Unit* tanathal = me->FindNearestCreature(NPC_TANATHAL, 10.0f))
{
me->CastSpell(tanathal, SPELL_THASSARIAN_FLAY);
}
}
}
}
}
private:
EventMap _events;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_thassarianAI(creature);
}
};
class npc_thassarian2 : public CreatureScript
{
public:
npc_thassarian2() : CreatureScript("npc_thassarian2") {}
struct npc_thassarian2AI : public ScriptedAI
{
npc_thassarian2AI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
}
void Initialize()
{
_arthasGUID.Clear();
_talbotGUID.Clear();
_leryssaGUID.Clear();
_arlosGUID.Clear();
}
void Reset() override
{
me->setFaction(FACTION_VALIANCE_EXPEDITION_7);
me->SetStandState(UNIT_STAND_STATE_STAND);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
Initialize();
}
void SetData(uint32 /*type*/, uint32 data) override
{
switch (data)
{
case NPC_LERYSSA:
{
if (Creature* arlos = ObjectAccessor::GetCreature(*me, _arlosGUID))
{
arlos->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN);
}
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
{
leryssa->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN);
leryssa->SetOrientation(4.537856f);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_8, 1000);
break;
}
case NPC_COUNSELOR_TALBOT:
{
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_18, 0);
}
break;
default:
break;
}
}
void MovementInform(uint32 type, uint32 param) override
{
if (type == WAYPOINT_MOTION_TYPE && param == 2)
{
me->SetWalk(false);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H);
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_1, 2000);
}
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
if (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_THASSARIAN_SCRIPT_1:
// Summon Arthas and Talbot
if (Creature* arthas = me->SummonCreature(NPC_IMAGE_LICH_KING, 3729.4614f, 3520.386f, 473.4048f, 1.361f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000))
{
_arthasGUID = arthas->GetGUID();
arthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
arthas->SetReactState(REACT_PASSIVE);
arthas->SetWalk(true);
}
if (Creature* talbot = me->SummonCreature(NPC_COUNSELOR_TALBOT, 3748.7627f, 3614.0374f, 473.4048f, 4.5553f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000))
{
_talbotGUID = talbot->GetGUID();
talbot->SetWalk(true);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_2, 1000);
break;
case EVENT_THASSARIAN_SCRIPT_2:
// Arthas load path
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
{
arthas->GetMotionMaster()->MovePath(PATH_ARTHAS, false);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_3, 1000);
break;
case EVENT_THASSARIAN_SCRIPT_3:
// Talbot load path
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
talbot->GetMotionMaster()->MovePath(PATH_TALBOT, false);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_4, 20000);
break;
case EVENT_THASSARIAN_SCRIPT_4:
// Talbot transform and knell
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
talbot->CastSpell(talbot, SPELL_TRANSFORM_VALANAR);
talbot->UpdateEntry(NPC_PRINCE_VALANAR);
talbot->SetFullHealth();
talbot->setFaction(FACTION_UNDEAD_SCOURGE);
talbot->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
talbot->SetReactState(REACT_PASSIVE);
talbot->SetStandState(UNIT_STAND_STATE_KNEEL);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_5, 7000);
break;
case EVENT_THASSARIAN_SCRIPT_5:
// Talbot say text 1
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
talbot->AI()->Talk(SAY_TALBOT_1);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_6, 9000);
break;
case EVENT_THASSARIAN_SCRIPT_6:
// Summon General Arlos and Leryssa
if (Creature* arlos = me->SummonCreature(NPC_GENERAL_ARLOS, 3746.2825f, 3616.3699f, 473.4048f, 4.5029f, TEMPSUMMON_CORPSE_TIMED_DESPAWN))
{
_arlosGUID = arlos->GetGUID();
arlos->SetWalk(true);
arlos->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
arlos->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
arlos->GetMotionMaster()->MovePath(PATH_ARLOS, false);
}
if (Creature* leryssa = me->SummonCreature(NPC_LERYSSA, 3751.0986f, 3614.9219f, 473.4048f, 4.5029f, TEMPSUMMON_CORPSE_TIMED_DESPAWN))
{
_leryssaGUID = leryssa->GetGUID();
leryssa->SetWalk(true);
leryssa->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
leryssa->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
leryssa->GetMotionMaster()->MovePath(PATH_LERYSSA, false);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_7, 7000);
break;
case EVENT_THASSARIAN_SCRIPT_7:
// Talbot say text 2
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
talbot->AI()->Talk(SAY_TALBOT_2);
}
break;
case EVENT_THASSARIAN_SCRIPT_8:
// Thassarian say text 1 and move to location
Talk(SAY_THASSARIAN_1);
me->SetWalk(false);
me->GetMotionMaster()->MovePoint(0, 3722.527f, 3567.2583f, 477.44086f);
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_9, 7000);
break;
case EVENT_THASSARIAN_SCRIPT_9:
// Thassarian say text 2
Talk(SAY_THASSARIAN_2);
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_10, 6000);
break;
case EVENT_THASSARIAN_SCRIPT_10:
// Arthas turn to Thassarian and Talbot stand
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
{
arthas->SetFacingToObject(me);
}
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
talbot->SetStandState(UNIT_STAND_STATE_STAND);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_11, 4000);
break;
case EVENT_THASSARIAN_SCRIPT_11:
// Arthas say text 2
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
{
arthas->AI()->Talk(SAY_LICH_2);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_12, 18000);
break;
case EVENT_THASSARIAN_SCRIPT_12:
// Thassarian say text 3
Talk(SAY_THASSARIAN_3);
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_13, 10000);
break;
case EVENT_THASSARIAN_SCRIPT_13:
// Talbot say text 3
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
talbot->AI()->Talk(SAY_TALBOT_3);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_14, 5000);
break;
case EVENT_THASSARIAN_SCRIPT_14:
// Arthas turn to Talbot say text 3
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
{
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
arthas->SetFacingToObject(talbot);
}
arthas->AI()->Talk(SAY_LICH_3);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_15, 5000);
break;
case EVENT_THASSARIAN_SCRIPT_15:
// Arthas turn to me and emote
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
{
arthas->SetFacingToObject(me);
arthas->HandleEmoteCommand(EMOTE_ONESHOT_POINT);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_16, 5000);
break;
case EVENT_THASSARIAN_SCRIPT_16:
// Arthas despawn
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
{
arthas->RemoveFromWorld();
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_17, 3000);
break;
case EVENT_THASSARIAN_SCRIPT_17:
// Talbot say text 4 and attack
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
talbot->AI()->Talk(SAY_TALBOT_4);
talbot->setFaction(FACTION_UNDEAD_SCOURGE_9);
talbot->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
talbot->SetReactState(REACT_AGGRESSIVE);
talbot->Attack(me, false);
}
break;
case EVENT_THASSARIAN_SCRIPT_18:
// Arlos say text 1
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H);
if (Creature* arlos = ObjectAccessor::GetCreature(*me, _arlosGUID))
{
arlos->AI()->Talk(SAY_ARLOS_1);
arlos->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
arlos->SetStandState(UNIT_STAND_STATE_KNEEL);
}
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
{
leryssa->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_19, 3000);
break;
case EVENT_THASSARIAN_SCRIPT_19:
// Leryssa set facing to me
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
if (Creature* leryssa = me->FindNearestCreature(NPC_LERYSSA, 50.0f, true))
{
_leryssaGUID = leryssa->GetGUID();
leryssa->SetFacingToObject(me);
me->SetFacingToObject(leryssa);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_20, 3000);
break;
case EVENT_THASSARIAN_SCRIPT_20:
// Arlos say text 2 and die. Leryssa say text 1
if (Creature* arlos = me->FindNearestCreature(NPC_GENERAL_ARLOS, 50.0f, true))
{
_arlosGUID = arlos->GetGUID();
arlos->AI()->Talk(SAY_ARLOS_2);
arlos->SetStandState(UNIT_STAND_STATE_DEAD);
}
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
{
leryssa->AI()->Talk(SAY_LERYSSA_1);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_21, 5000);
break;
case EVENT_THASSARIAN_SCRIPT_21:
// Thassarian say text 4
me->SetStandState(UNIT_STAND_STATE_KNEEL);
Talk(SAY_THASSARIAN_4);
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_22, 3000);
break;
case EVENT_THASSARIAN_SCRIPT_22:
// Leryssa run to Thassarian
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
{
leryssa->SetWalk(false);
leryssa->MonsterMoveWithSpeed(3726.751f, 3568.1633f, 477.44086f, leryssa->GetSpeed(MOVE_RUN));
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_23, 2000);
break;
case EVENT_THASSARIAN_SCRIPT_23:
// Leryssa say text 2
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
{
leryssa->AI()->Talk(SAY_LERYSSA_2);
leryssa->SetStandState(UNIT_STAND_STATE_SIT);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_24, 5000);
break;
case EVENT_THASSARIAN_SCRIPT_24:
// Thassarian say text 5
Talk(SAY_THASSARIAN_5);
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_25, 10000);
break;
case EVENT_THASSARIAN_SCRIPT_25:
// Leryssa say text 3
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
{
leryssa->AI()->Talk(SAY_LERYSSA_3);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_26, 12000);
break;
case EVENT_THASSARIAN_SCRIPT_26:
// Thassarian say text 6
Talk(SAY_THASSARIAN_6);
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_27, 11000);
break;
case EVENT_THASSARIAN_SCRIPT_27:
// Leryssa say text 4
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
{
leryssa->AI()->Talk(SAY_LERYSSA_4);
}
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_28, 12000);
break;
case EVENT_THASSARIAN_SCRIPT_28:
// Thassarian say text 7
Talk(SAY_THASSARIAN_7);
_events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_29, 35000);
break;
case EVENT_THASSARIAN_SCRIPT_29:
Cleanup();
me->DespawnOrUnsummon(30000ms, 120s);
break;
default:
break;
}
}
if (!UpdateVictim())
{
return;
}
DoMeleeAttackIfReady();
}
void JustDied(Unit* /*killer*/) override
{
Cleanup();
me->DespawnOrUnsummon(1000ms, 120s);
}
void Cleanup()
{
if (Creature* talbot = ObjectAccessor::GetCreature(*me, _talbotGUID))
{
talbot->RemoveFromWorld();
}
if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID))
{
leryssa->RemoveFromWorld();
}
if (Creature* arlos = ObjectAccessor::GetCreature(*me, _arlosGUID))
{
arlos->RemoveFromWorld();
}
if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID))
{
arthas->RemoveFromWorld();
}
}
void sGossipHello(Player* /*player*/) override
{
if (!me->HasAura(SPELL_BLOOD_PRESENCE))
{
DoCastSelf(SPELL_BLOOD_PRESENCE);
}
}
void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override
{
if (action == 0)
{
_playerGUID = player->GetGUID();
CloseGossipMenuFor(player);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->GetMotionMaster()->MovePath(PATH_THASSARIAN, false);
}
}
private:
EventMap _events;
ObjectGuid _playerGUID;
ObjectGuid _arthasGUID;
ObjectGuid _talbotGUID;
ObjectGuid _leryssaGUID;
ObjectGuid _arlosGUID;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_thassarian2AI(creature);
}
};
// NPC 25251: Leryssa
class npc_leryssa : public CreatureScript
{
public:
npc_leryssa() : CreatureScript("npc_leryssa") {}
struct npc_leryssaAI : public ScriptedAI
{
npc_leryssaAI(Creature* creature) : ScriptedAI(creature) {}
void MovementInform(uint32 type, uint32 param) override
{
if (type == WAYPOINT_MOTION_TYPE && param == 2)
{
if (me->IsSummon())
{
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
{
summoner->ToCreature()->AI()->SetData(1, NPC_LERYSSA);
}
}
}
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_leryssaAI(creature);
}
};
// NPC 25301: Counselor Talbot
enum CounselorTalbot
{
AREA_LAST_RITES = 4128,
SPELL_DEFLECTION = 51009,
SPELL_SOUL_BLAST = 50992,
SPELL_VAMPIRIC_BOLT = 51016,
EVENT_DEFLECTION = 1,
EVENT_SOUL_BLAST = 2,
EVENT_VAMPIRIC_BOLT = 3
};
class npc_counselor_talbot : public CreatureScript
{
public:
npc_counselor_talbot() : CreatureScript("npc_counselor_talbot") {}
struct npc_counselor_talbotAI : public ScriptedAI
{
npc_counselor_talbotAI(Creature* creature) : ScriptedAI(creature) {}
void Reset() override {}
void EnterCombat(Unit* /*who*/) override
{
_events.ScheduleEvent(EVENT_DEFLECTION, 10000, 20000);
_events.ScheduleEvent(EVENT_SOUL_BLAST, 4000, 6000);
_events.ScheduleEvent(EVENT_VAMPIRIC_BOLT, 0);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
return;
}
if (me->GetAreaId() == AREA_LAST_RITES)
{
_events.Update(diff);
if (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_DEFLECTION:
DoCastSelf(SPELL_DEFLECTION);
_events.ScheduleEvent(EVENT_DEFLECTION, 10000, 20000);
break;
case EVENT_SOUL_BLAST:
DoCastVictim(SPELL_SOUL_BLAST);
_events.ScheduleEvent(EVENT_SOUL_BLAST, 4000, 6000);
break;
case EVENT_VAMPIRIC_BOLT:
DoCastVictim(SPELL_VAMPIRIC_BOLT);
_events.ScheduleEvent(EVENT_VAMPIRIC_BOLT, 3000, 4000);
break;
default:
break;
}
}
}
DoMeleeAttackIfReady();
}
void JustDied(Unit* /*killer*/) override
{
if (me->IsSummon())
{
if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit())
{
summoner->ToCreature()->AI()->SetData(1, NPC_COUNSELOR_TALBOT);
}
}
}
private:
EventMap _events;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_counselor_talbotAI(creature);
}
};
void AddSC_borean_tundra()
{
// Ours
new spell_q11919_q11940_drake_hunt();
new npc_thassarian();
new npc_thassarian2();
new npc_leryssa();
new npc_counselor_talbot();
// Theirs
new npc_sinkhole_kill_credit();