mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2025-11-29 17:38:24 +08:00
1236 lines
57 KiB
C++
1236 lines
57 KiB
C++
/*
|
|
* Copyright (C)
|
|
*
|
|
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
|
|
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
|
*/
|
|
|
|
#include "ScriptMgr.h"
|
|
#include "ScriptPCH.h"
|
|
#include "ScriptedCreature.h"
|
|
#include "ScriptedGossip.h"
|
|
#include "ScriptedEscortAI.h"
|
|
#include "Player.h"
|
|
|
|
enum LightOfDawnSays
|
|
{
|
|
SAY_LIGHT_OF_DAWN01 = 0, // pre text
|
|
SAY_LIGHT_OF_DAWN02 = 1,
|
|
SAY_LIGHT_OF_DAWN03 = 2,
|
|
SAY_LIGHT_OF_DAWN04 = 3, // intro
|
|
SAY_LIGHT_OF_DAWN05 = 4,
|
|
SAY_LIGHT_OF_DAWN06 = 5,
|
|
SAY_LIGHT_OF_DAWN07 = 6, // During the fight - Korfax, Champion of the Light
|
|
SAY_LIGHT_OF_DAWN08 = 7, // Lord Maxwell Tyrosus
|
|
SAY_LIGHT_OF_DAWN09 = 8, // Highlord Darion Mograine
|
|
SAY_LIGHT_OF_DAWN25 = 24, // After the fight
|
|
SAY_LIGHT_OF_DAWN26 = 25, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN27 = 26, // Highlord Darion Mograine
|
|
SAY_LIGHT_OF_DAWN28 = 27, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN29 = 28, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN30 = 29, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN31 = 30, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN32 = 31, // Highlord Alexandros Mograine
|
|
SAY_LIGHT_OF_DAWN33 = 32, // Highlord Darion Mograine
|
|
SAY_LIGHT_OF_DAWN34 = 33, // Highlord Darion Mograine
|
|
SAY_LIGHT_OF_DAWN35 = 34, // Darion Mograine
|
|
SAY_LIGHT_OF_DAWN36 = 35, // Darion Mograine
|
|
SAY_LIGHT_OF_DAWN37 = 36, // Highlord Alexandros Mograine
|
|
SAY_LIGHT_OF_DAWN38 = 37, // Darion Mograine
|
|
SAY_LIGHT_OF_DAWN39 = 38, // Highlord Alexandros Mograine
|
|
SAY_LIGHT_OF_DAWN40 = 39, // Darion Mograine
|
|
SAY_LIGHT_OF_DAWN41 = 40, // Highlord Alexandros Mograine
|
|
SAY_LIGHT_OF_DAWN42 = 41, // Highlord Alexandros Mograine
|
|
SAY_LIGHT_OF_DAWN43 = 42, // The Lich King
|
|
SAY_LIGHT_OF_DAWN44 = 43, // Highlord Darion Mograine
|
|
SAY_LIGHT_OF_DAWN45 = 44, // The Lich King
|
|
SAY_LIGHT_OF_DAWN46 = 45, // The Lich King
|
|
SAY_LIGHT_OF_DAWN47 = 46, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN48 = 47, // The Lich King
|
|
SAY_LIGHT_OF_DAWN49 = 48, // The Lich King
|
|
SAY_LIGHT_OF_DAWN50 = 49, // Lord Maxwell Tyrosus
|
|
SAY_LIGHT_OF_DAWN51 = 50, // The Lich King
|
|
SAY_LIGHT_OF_DAWN52 = 51, // Highlord Darion Mograine
|
|
SAY_LIGHT_OF_DAWN53 = 52, // Highlord Darion Mograine
|
|
SAY_LIGHT_OF_DAWN54 = 53, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN55 = 54, // The Lich King
|
|
SAY_LIGHT_OF_DAWN56 = 55, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN57 = 56, // The Lich King
|
|
SAY_LIGHT_OF_DAWN58 = 57, // The Lich King
|
|
SAY_LIGHT_OF_DAWN59 = 58, // The Lich King
|
|
SAY_LIGHT_OF_DAWN60 = 59, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN61 = 60, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN62 = 61, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN63 = 62, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN64 = 63, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN65 = 64, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN66 = 65, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN67 = 66, // Highlord Tirion Fordring
|
|
SAY_LIGHT_OF_DAWN68 = 67, // Highlord Darion Mograine
|
|
|
|
EMOTE_LIGHT_OF_DAWN01 = 68, // Emotes
|
|
EMOTE_LIGHT_OF_DAWN02 = 69,
|
|
EMOTE_LIGHT_OF_DAWN03 = 70,
|
|
EMOTE_LIGHT_OF_DAWN04 = 71,
|
|
EMOTE_LIGHT_OF_DAWN05 = 72,
|
|
EMOTE_LIGHT_OF_DAWN06 = 73,
|
|
EMOTE_LIGHT_OF_DAWN07 = 74,
|
|
EMOTE_LIGHT_OF_DAWN08 = 75,
|
|
EMOTE_LIGHT_OF_DAWN09 = 76,
|
|
EMOTE_LIGHT_OF_DAWN10 = 77,
|
|
EMOTE_LIGHT_OF_DAWN11 = 78,
|
|
EMOTE_LIGHT_OF_DAWN12 = 79,
|
|
EMOTE_LIGHT_OF_DAWN13 = 80,
|
|
EMOTE_LIGHT_OF_DAWN14 = 81,
|
|
EMOTE_LIGHT_OF_DAWN15 = 82,
|
|
EMOTE_LIGHT_OF_DAWN16 = 83,
|
|
EMOTE_LIGHT_OF_DAWN17 = 84,
|
|
EMOTE_LIGHT_OF_DAWN18 = 85
|
|
};
|
|
|
|
enum LightOfDawnEncounter
|
|
{
|
|
// Intro Events
|
|
EVENT_START_COUNTDOWN_1 = 1,
|
|
EVENT_START_COUNTDOWN_2,
|
|
EVENT_START_COUNTDOWN_3,
|
|
EVENT_START_COUNTDOWN_4,
|
|
EVENT_START_COUNTDOWN_5,
|
|
EVENT_START_COUNTDOWN_6,
|
|
EVENT_START_COUNTDOWN_7,
|
|
EVENT_START_COUNTDOWN_8,
|
|
EVENT_START_COUNTDOWN_9,
|
|
EVENT_START_COUNTDOWN_10,
|
|
EVENT_START_COUNTDOWN_11,
|
|
EVENT_START_COUNTDOWN_12,
|
|
EVENT_START_COUNTDOWN_13,
|
|
EVENT_START_COUNTDOWN_14,
|
|
// Fight Events
|
|
EVENT_SPELL_ANTI_MAGIC_ZONE,
|
|
EVENT_SPELL_DEATH_STRIKE,
|
|
EVENT_SPELL_DEATH_EMBRACE,
|
|
EVENT_SPELL_UNHOLY_BLIGHT,
|
|
EVENT_SPELL_TALK,
|
|
// Positioning
|
|
EVENT_FINISH_FIGHT_1,
|
|
EVENT_FINISH_FIGHT_2,
|
|
EVENT_FINISH_FIGHT_3,
|
|
EVENT_FINISH_FIGHT_4,
|
|
EVENT_FINISH_FIGHT_5,
|
|
// Outro
|
|
EVENT_OUTRO_SCENE_1,
|
|
EVENT_OUTRO_SCENE_2,
|
|
EVENT_OUTRO_SCENE_3,
|
|
EVENT_OUTRO_SCENE_4,
|
|
EVENT_OUTRO_SCENE_5,
|
|
EVENT_OUTRO_SCENE_6,
|
|
EVENT_OUTRO_SCENE_7,
|
|
EVENT_OUTRO_SCENE_8,
|
|
EVENT_OUTRO_SCENE_9,
|
|
EVENT_OUTRO_SCENE_10,
|
|
EVENT_OUTRO_SCENE_11,
|
|
EVENT_OUTRO_SCENE_12,
|
|
EVENT_OUTRO_SCENE_13,
|
|
EVENT_OUTRO_SCENE_14,
|
|
EVENT_OUTRO_SCENE_15,
|
|
EVENT_OUTRO_SCENE_16,
|
|
EVENT_OUTRO_SCENE_17,
|
|
EVENT_OUTRO_SCENE_18,
|
|
EVENT_OUTRO_SCENE_19,
|
|
EVENT_OUTRO_SCENE_20,
|
|
EVENT_OUTRO_SCENE_21,
|
|
EVENT_OUTRO_SCENE_22,
|
|
EVENT_OUTRO_SCENE_23,
|
|
EVENT_OUTRO_SCENE_24,
|
|
EVENT_OUTRO_SCENE_25,
|
|
EVENT_OUTRO_SCENE_26,
|
|
EVENT_OUTRO_SCENE_27,
|
|
EVENT_OUTRO_SCENE_28,
|
|
EVENT_OUTRO_SCENE_29,
|
|
EVENT_OUTRO_SCENE_30,
|
|
EVENT_OUTRO_SCENE_31,
|
|
EVENT_OUTRO_SCENE_32,
|
|
EVENT_OUTRO_SCENE_33,
|
|
EVENT_OUTRO_SCENE_34,
|
|
EVENT_OUTRO_SCENE_35,
|
|
EVENT_OUTRO_SCENE_36,
|
|
EVENT_OUTRO_SCENE_37,
|
|
EVENT_OUTRO_SCENE_38,
|
|
EVENT_OUTRO_SCENE_39,
|
|
EVENT_OUTRO_SCENE_40,
|
|
EVENT_OUTRO_SCENE_41,
|
|
EVENT_OUTRO_SCENE_42,
|
|
EVENT_OUTRO_SCENE_43,
|
|
EVENT_OUTRO_SCENE_44,
|
|
EVENT_OUTRO_SCENE_45,
|
|
EVENT_OUTRO_SCENE_46,
|
|
EVENT_OUTRO_SCENE_47,
|
|
EVENT_OUTRO_SCENE_48,
|
|
EVENT_OUTRO_SCENE_49,
|
|
EVENT_OUTRO_SCENE_50,
|
|
EVENT_OUTRO_SCENE_51,
|
|
EVENT_OUTRO_SCENE_52,
|
|
EVENT_OUTRO_SCENE_53,
|
|
EVENT_OUTRO_SCENE_54,
|
|
EVENT_OUTRO_SCENE_55,
|
|
EVENT_OUTRO_SCENE_56,
|
|
EVENT_OUTRO_SCENE_57,
|
|
EVENT_OUTRO_SCENE_58,
|
|
EVENT_OUTRO_SCENE_59,
|
|
EVENT_OUTRO_SCENE_60,
|
|
EVENT_OUTRO_SCENE_61,
|
|
|
|
ACTION_START_EVENT = 1,
|
|
ACTION_PLAY_EMOTE = 1,
|
|
ACTION_POSITION_NPCS = 2,
|
|
|
|
ENCOUNTER_START_TIME = 5,
|
|
ENCOUNTER_TOTAL_DEFENDERS = 300,
|
|
ENCOUNTER_TOTAL_SCOURGE = 10000,
|
|
|
|
WORLD_STATE_DEFENDERS_COUNT = 3590,
|
|
WORLD_STATE_SCOURGE_COUNT = 3591,
|
|
WORLD_STATE_SOLDIERS_ENABLE = 3592,
|
|
WORLD_STATE_COUNTDOWN_ENABLE = 3603,
|
|
WORLD_STATE_COUNTDOWN_TIME = 3604,
|
|
WORLD_STATE_EVENT_BEGIN_ENABLE = 3605,
|
|
|
|
ENCOUNTER_STATE_NONE = 0,
|
|
ENCOUNTER_STATE_FIGHT = 1,
|
|
ENCOUNTER_STATE_OUTRO = 2,
|
|
};
|
|
|
|
enum LightOfDawnNPCs
|
|
{
|
|
// Defenders
|
|
NPC_DEFENDER_OF_THE_LIGHT = 29174,
|
|
NPC_KORFAX_CHAMPION_OF_THE_LIGHT = 29176,
|
|
NPC_COMMANDER_ELIGOR_DAWNBRINGER = 29177,
|
|
NPC_LORD_MAXWELL_TYROSUS = 29178,
|
|
NPC_LEONID_BARTHALOMEW_THE_REVERED = 29179,
|
|
NPC_DUKE_NICHOLAS_ZVERENHOFF = 29180,
|
|
NPC_RAYNE = 29181,
|
|
NPC_RIMBLAT_EARTHSHATTER = 29182,
|
|
|
|
// Scourge
|
|
NPC_RAMPAGING_ABOMINATION = 29186,
|
|
NPC_ACHERUS_GHOUL = 29219,
|
|
NPC_WARRIOR_OF_THE_FROZEN_WASTES = 29206,
|
|
NPC_FLESH_BEHEMOTH = 29190,
|
|
|
|
NPC_HIGHLORD_DARION_MOGRAINE = 29173,
|
|
NPC_KOLTIRA_DEATHWEAVER = 29199,
|
|
NPC_ORBAZ_BLOODBANE = 29204,
|
|
NPC_THASSARIAN = 29200,
|
|
|
|
// Outro
|
|
NPC_HIGHLORD_TIRION_FORDRING = 29175,
|
|
NPC_HIGHLORD_ALEXANDROS_MOGRAINE = 29227, // ghost
|
|
NPC_DARION_MOGRAINE = 29228, // ghost
|
|
NPC_THE_LICH_KING = 29183,
|
|
};
|
|
|
|
enum LightOfDawnGOs
|
|
{
|
|
GO_HOLY_LIGHTNING = 191301,
|
|
GO_LIGHT_OF_DAWN = 191330
|
|
};
|
|
|
|
enum LightOfDawnSpells
|
|
{
|
|
// Intro Spells
|
|
SPELL_CAMERA_SHAKE_INIT = 36455,
|
|
SPELL_CAMERA_SHAKE = 39983,
|
|
SPELL_THE_MIGHT_OF_MOGRAINE = 53642,
|
|
|
|
// Mograine Fight
|
|
SPELL_ANTI_MAGIC_ZONE1 = 52893,
|
|
SPELL_DEATH_STRIKE = 53639,
|
|
SPELL_DEATH_EMBRACE = 53635,
|
|
SPELL_ICY_TOUCH1 = 49723,
|
|
SPELL_UNHOLY_BLIGHT = 53640,
|
|
|
|
// Outro
|
|
SPELL_THE_LIGHT_OF_DAWN = 53658,
|
|
SPELL_ALEXANDROS_MOGRAINE_SPAWN = 53667,
|
|
SPELL_ICEBOUND_VISAGE = 53274,
|
|
SPELL_SOUL_FEAST_ALEX = 53677,
|
|
SPELL_MOGRAINE_CHARGE = 53679,
|
|
SPELL_REBUKE = 53680,
|
|
SPELL_SOUL_FEAST_TIRION = 53685,
|
|
SPELL_APOCALYPSE = 53210,
|
|
SPELL_THROW_ASHBRINGER = 53701,
|
|
SPELL_REBIRTH_OF_THE_ASHBRINGER = 53702,
|
|
SPELL_TIRION_CHARGE = 53705,
|
|
SPELL_EXIT_TELEPORT_VISUAL = 61456,
|
|
SPELL_LAY_ON_HANDS = 53778,
|
|
SPELL_THE_LIGHT_OF_DAWN_Q = 53606
|
|
};
|
|
|
|
const Position LightOfDawnPos[] =
|
|
{
|
|
{2304.2f, -5290.7f, 82.01f, 4.56f}, // 0 First Home Pos
|
|
{2253.5f, -5310.6f, 82.17f, 5.28f}, // 1 Second Home Pos
|
|
{2169.1f, -5227.1f, 82.59f, 5.7f}, // 2 Orbaz Flee Pos
|
|
{2289.259f, -5280.355f, 86.112f, 4.41f}, // 3 Koltira Loc1
|
|
{2273.289f, -5273.675f, 86.701f, 5.01f}, // 4 Thassarian Loc1
|
|
{2280.81f, -5284.09f, 86.608f, 4.76f}, // 5 Morgraine Loc1
|
|
{2281.335f, -5300.409f, 85.170f, 1.528f}, // 6 Tirion Summon loc
|
|
{2281.198f, -5257.397f, 80.224f, 4.66f}, // 7 Alexandros loc1
|
|
{2281.156f, -5259.934f, 80.647f, 0}, // 8 Alexandros loc2
|
|
{2281.294f, -5281.895f, 82.445f, 1.35f}, // 9 Darion loc1
|
|
{2281.093f, -5263.013f, 81.125f, 0}, // 10 Darion loc2
|
|
{2283.896f, -5287.914f, 83.066f, 1.55f}, // 11 Tirion Fordring loc2
|
|
{2281.313f, -5250.282f, 79.322f, 4.69f}, // 12 Lich King spawns
|
|
{2281.523f, -5261.058f, 80.877f, 0}, // 13 Lich king moves forward
|
|
{2264.27f, -5267.29f, 80.16f, 0}, // 14 Tirion Fordring loc3
|
|
{2270.99f, -5278.00f, 81.89f, 0} // 15 Tirion Fordring loc4
|
|
};
|
|
|
|
const Position LightOfDawnFightPos[] =
|
|
{
|
|
{2279.68f, -5256.75f, 79.79f, 4.8f},
|
|
{2280.40f, -5276.56f, 82.11f, 4.8f},
|
|
{2256.43f, -5281.3f, 82.29f, 5.0f},
|
|
{2251.87f, -5304.08f, 82.17f, 4.8f},
|
|
{2244.88f, -5256.03f, 74.88f, 5.8f},
|
|
{2294.29f, -5281.35f, 81.91f, 4.8f},
|
|
{2314.2f, -5268.1f, 82.43f, 3.6f},
|
|
{2289.72f, -5299.65f, 83.49f, 3.2f},
|
|
{2274.02f, -5303.58f, 85.05f, 1.4f},
|
|
{2258.42f, -5307.72f, 81.98f, 0.1f}
|
|
};
|
|
|
|
class DelayedSummonEvent : public BasicEvent
|
|
{
|
|
public:
|
|
DelayedSummonEvent(Unit* owner, uint32 entry, Position pos) : _owner(owner), _entry(entry), _pos(pos) { }
|
|
|
|
bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/)
|
|
{
|
|
_owner->SummonCreature(_entry, _pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3000);
|
|
return true;
|
|
}
|
|
|
|
private:
|
|
Unit* _owner;
|
|
uint32 _entry;
|
|
Position _pos;
|
|
};
|
|
|
|
class npc_highlord_darion_mograine : public CreatureScript
|
|
{
|
|
public:
|
|
npc_highlord_darion_mograine() : CreatureScript("npc_highlord_darion_mograine") { }
|
|
|
|
CreatureAI* GetAI(Creature* creature) const
|
|
{
|
|
return new npc_highlord_darion_mograineAI(creature);
|
|
}
|
|
|
|
bool OnGossipHello(Player* player, Creature* creature)
|
|
{
|
|
if (creature->IsQuestGiver())
|
|
player->PrepareQuestMenu(creature->GetGUID());
|
|
|
|
if (player->GetQuestStatus(12801) == QUEST_STATUS_INCOMPLETE && !creature->AI()->GetData(WORLD_STATE_SOLDIERS_ENABLE))
|
|
player->ADD_GOSSIP_ITEM(0, "I am ready, Highlord. Let the siege of Light's Hope begin!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
|
|
|
|
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
|
|
|
|
return true;
|
|
}
|
|
|
|
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
|
|
{
|
|
if (action == GOSSIP_ACTION_INFO_DEF+1)
|
|
{
|
|
player->PlayerTalkClass->ClearMenus();
|
|
player->CLOSE_GOSSIP_MENU();
|
|
creature->AI()->DoAction(ACTION_START_EVENT);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
struct npc_highlord_darion_mograineAI : public ScriptedAI
|
|
{
|
|
npc_highlord_darion_mograineAI(Creature* creature) : ScriptedAI(creature), summons(me)
|
|
{
|
|
battleStarted = ENCOUNTER_STATE_NONE;
|
|
me->SetCorpseDelay(3*60);
|
|
me->SetRespawnTime(3*60);
|
|
resetExecuted = false;
|
|
}
|
|
|
|
EventMap events;
|
|
SummonList summons;
|
|
uint32 startTimeRemaining;
|
|
uint32 defendersRemaining;
|
|
uint32 scourgeRemaining;
|
|
uint8 battleStarted;
|
|
bool resetExecuted;
|
|
|
|
void DoAction(int32 param)
|
|
{
|
|
if (param == ACTION_START_EVENT && !startTimeRemaining && events.Empty())
|
|
{
|
|
Talk(SAY_LIGHT_OF_DAWN01);
|
|
|
|
startTimeRemaining = ENCOUNTER_START_TIME;
|
|
defendersRemaining = ENCOUNTER_TOTAL_DEFENDERS;
|
|
scourgeRemaining = ENCOUNTER_TOTAL_SCOURGE;
|
|
|
|
SendInitialWorldStates();
|
|
|
|
events.Reset();
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_1, 60000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_2, 120000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_3, 180000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_4, 240000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_5, 300000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_6, 308000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_7, 312000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_8, 316000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_9, 320000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_10, 324000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_11, 332000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_12, 335000);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_13, 337500);
|
|
events.ScheduleEvent(EVENT_START_COUNTDOWN_14, 345000);
|
|
}
|
|
}
|
|
|
|
uint32 GetData(uint32 type) const
|
|
{
|
|
switch (type)
|
|
{
|
|
case WORLD_STATE_DEFENDERS_COUNT: return defendersRemaining;
|
|
case WORLD_STATE_SCOURGE_COUNT: return scourgeRemaining;
|
|
case WORLD_STATE_SOLDIERS_ENABLE: return me->IsAlive() && (startTimeRemaining || battleStarted);
|
|
case WORLD_STATE_COUNTDOWN_ENABLE: return me->IsAlive() && startTimeRemaining;
|
|
case WORLD_STATE_COUNTDOWN_TIME: return startTimeRemaining;
|
|
case WORLD_STATE_EVENT_BEGIN_ENABLE: return me->IsAlive() && !startTimeRemaining && battleStarted;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void SendUpdateWorldState(uint32 id, uint32 state)
|
|
{
|
|
Map::PlayerList const& players = me->GetMap()->GetPlayers();
|
|
if (!players.isEmpty())
|
|
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
|
if (Player* player = itr->GetSource())
|
|
if (player->GetPhaseMask() & 128) // Xinef: client skips players without chapter 5 aura anyway, speedup
|
|
player->SendUpdateWorldState(id, state);
|
|
}
|
|
|
|
void SendInitialWorldStates()
|
|
{
|
|
SendUpdateWorldState(WORLD_STATE_DEFENDERS_COUNT, GetData(WORLD_STATE_DEFENDERS_COUNT));
|
|
SendUpdateWorldState(WORLD_STATE_SCOURGE_COUNT, GetData(WORLD_STATE_SCOURGE_COUNT));
|
|
SendUpdateWorldState(WORLD_STATE_SOLDIERS_ENABLE, GetData(WORLD_STATE_SOLDIERS_ENABLE));
|
|
SendUpdateWorldState(WORLD_STATE_COUNTDOWN_ENABLE, GetData(WORLD_STATE_COUNTDOWN_ENABLE));
|
|
SendUpdateWorldState(WORLD_STATE_COUNTDOWN_TIME, GetData(WORLD_STATE_COUNTDOWN_TIME));
|
|
SendUpdateWorldState(WORLD_STATE_EVENT_BEGIN_ENABLE, GetData(WORLD_STATE_EVENT_BEGIN_ENABLE));
|
|
}
|
|
|
|
void JustSummoned(Creature* cr)
|
|
{
|
|
summons.Summon(cr);
|
|
|
|
if (me->IsInCombat() && cr->GetEntry() != NPC_HIGHLORD_TIRION_FORDRING && battleStarted == ENCOUNTER_STATE_FIGHT)
|
|
{
|
|
Position pos = LightOfDawnFightPos[urand(0, 9)];
|
|
if (Unit* target = cr->SelectNearbyTarget(NULL, 10.0f))
|
|
if (target->GetTypeId() == TYPEID_UNIT)
|
|
target->GetMotionMaster()->MoveCharge(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), me->GetSpeed(MOVE_RUN));
|
|
cr->GetMotionMaster()->MoveCharge(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), me->GetSpeed(MOVE_RUN));
|
|
}
|
|
|
|
if (battleStarted == ENCOUNTER_STATE_OUTRO && cr->GetEntry() == NPC_DEFENDER_OF_THE_LIGHT)
|
|
{
|
|
cr->SetReactState(REACT_PASSIVE);
|
|
cr->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
|
cr->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H);
|
|
cr->HandleEmoteCommand(EMOTE_STATE_READY1H);
|
|
}
|
|
}
|
|
|
|
void SummonedCreatureDies(Creature* creature, Unit*)
|
|
{
|
|
// Refill Armies and update counters
|
|
if (battleStarted != ENCOUNTER_STATE_FIGHT)
|
|
return;
|
|
|
|
me->m_Events.AddEvent(new DelayedSummonEvent(me, creature->GetEntry(), *creature), me->m_Events.CalculateTime(3000));
|
|
if (creature->GetEntry() >= NPC_RAMPAGING_ABOMINATION)
|
|
{
|
|
--scourgeRemaining;
|
|
SendUpdateWorldState(WORLD_STATE_SCOURGE_COUNT, GetData(WORLD_STATE_SCOURGE_COUNT));
|
|
}
|
|
else
|
|
{
|
|
--defendersRemaining;
|
|
SendUpdateWorldState(WORLD_STATE_DEFENDERS_COUNT, GetData(WORLD_STATE_DEFENDERS_COUNT));
|
|
|
|
if (defendersRemaining == 200)
|
|
FinishFight();
|
|
}
|
|
}
|
|
|
|
void JustDied(Unit*)
|
|
{
|
|
summons.DespawnAll();
|
|
me->SetCorpseDelay(3*60);
|
|
me->SetRespawnTime(3*60);
|
|
}
|
|
|
|
void FinishFight()
|
|
{
|
|
if (Creature* tirion = me->SummonCreature(NPC_HIGHLORD_TIRION_FORDRING, LightOfDawnPos[6], TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000))
|
|
{
|
|
tirion->LoadEquipment(0, true);
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN25);
|
|
events.Reset();
|
|
events.ScheduleEvent(EVENT_FINISH_FIGHT_1, 10000);
|
|
events.ScheduleEvent(EVENT_FINISH_FIGHT_2, 20000);
|
|
events.ScheduleEvent(EVENT_FINISH_FIGHT_3, 22000);
|
|
events.ScheduleEvent(EVENT_FINISH_FIGHT_4, 23000);
|
|
events.ScheduleEvent(EVENT_FINISH_FIGHT_5, 24000);
|
|
|
|
tirion->SummonGameObject(GO_HOLY_LIGHTNING, 2254.84f, -5298.75f, 82.168f, 1.134f, 0, 0, 0.537102f, 0.843517f, 20);
|
|
tirion->SummonGameObject(GO_HOLY_LIGHTNING, 2296.24f, -5296.44f, 81.9964f, 5.3398f, 0, 0, 0.454395f, -0.8908f, 20);
|
|
tirion->SummonGameObject(GO_HOLY_LIGHTNING, 2314.29f, -5261.78f, 83.1349f, 3.05822f, 0, 0, 0.999131f, 0.0416735f, 20);
|
|
tirion->SummonGameObject(GO_HOLY_LIGHTNING, 2278.43f, -5270.14f, 81.7247f, 0.70988f, 0, 0, 0.347534f, 0.937667f, 20);
|
|
}
|
|
}
|
|
|
|
void EnterCombat(Unit*)
|
|
{
|
|
if (battleStarted != ENCOUNTER_STATE_FIGHT)
|
|
return;
|
|
|
|
events.RescheduleEvent(EVENT_SPELL_ANTI_MAGIC_ZONE, 15000);
|
|
events.RescheduleEvent(EVENT_SPELL_DEATH_STRIKE, 8000);
|
|
events.RescheduleEvent(EVENT_SPELL_DEATH_EMBRACE, 5000);
|
|
events.RescheduleEvent(EVENT_SPELL_UNHOLY_BLIGHT, 10000);
|
|
events.RescheduleEvent(EVENT_SPELL_TALK, 10000);
|
|
}
|
|
|
|
void Reset()
|
|
{
|
|
if (resetExecuted)
|
|
return;
|
|
|
|
resetExecuted = true;
|
|
JustRespawned();
|
|
}
|
|
|
|
void JustRespawned()
|
|
{
|
|
events.Reset();
|
|
summons.DespawnAll();
|
|
|
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
|
me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
|
|
me->SetStandState(UNIT_STAND_STATE_STAND);
|
|
me->SetVisible(true);
|
|
me->setActive(true);
|
|
me->SetWalk(false);
|
|
|
|
battleStarted = ENCOUNTER_STATE_NONE;
|
|
startTimeRemaining = 0;
|
|
defendersRemaining = 0;
|
|
scourgeRemaining = 0;
|
|
|
|
SendInitialWorldStates();
|
|
me->SummonCreatureGroup(30);
|
|
}
|
|
|
|
Creature* GetEntryFromSummons(uint32 entry)
|
|
{
|
|
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
|
|
if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
|
|
if (summon->GetEntry() == entry)
|
|
return summon;
|
|
return NULL;
|
|
}
|
|
|
|
void MovementInform(uint32 type, uint32 point)
|
|
{
|
|
if (type == POINT_MOTION_TYPE && point == 2)
|
|
{
|
|
me->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN);
|
|
Talk(EMOTE_LIGHT_OF_DAWN05);
|
|
events.Reset();
|
|
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_1, 2000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_2, 19000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_3, 38000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_4, 50000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_5, 62000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_6, 68000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_7, 71000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_8, 72000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_9, 74000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_10, 77000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_11, 79000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_12, 82000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_13, 85000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_14, 92000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_15, 98000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_16, 105000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_17, 120000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_18, 131000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_19, 158000);
|
|
}
|
|
}
|
|
|
|
void UpdateAI(uint32 diff)
|
|
{
|
|
events.Update(diff);
|
|
uint32 eventId = events.ExecuteEvent();
|
|
|
|
switch (eventId)
|
|
{
|
|
case EVENT_START_COUNTDOWN_1:
|
|
SendUpdateWorldState(WORLD_STATE_COUNTDOWN_TIME, 4);
|
|
break;
|
|
case EVENT_START_COUNTDOWN_2:
|
|
SendUpdateWorldState(WORLD_STATE_COUNTDOWN_TIME, 3);
|
|
break;
|
|
case EVENT_START_COUNTDOWN_3:
|
|
SendUpdateWorldState(WORLD_STATE_COUNTDOWN_TIME, 2);
|
|
break;
|
|
case EVENT_START_COUNTDOWN_4:
|
|
Talk(SAY_LIGHT_OF_DAWN02);
|
|
SendUpdateWorldState(WORLD_STATE_COUNTDOWN_TIME, 1);
|
|
break;
|
|
case EVENT_START_COUNTDOWN_5:
|
|
battleStarted = ENCOUNTER_STATE_FIGHT;
|
|
me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
|
|
Talk(SAY_LIGHT_OF_DAWN04); // Wrong order in DB!
|
|
SendUpdateWorldState(WORLD_STATE_COUNTDOWN_TIME, 0);
|
|
SendUpdateWorldState(WORLD_STATE_COUNTDOWN_ENABLE, 0);
|
|
SendUpdateWorldState(WORLD_STATE_EVENT_BEGIN_ENABLE, 1);
|
|
break;
|
|
case EVENT_START_COUNTDOWN_6:
|
|
case EVENT_START_COUNTDOWN_7:
|
|
case EVENT_START_COUNTDOWN_8:
|
|
case EVENT_START_COUNTDOWN_9:
|
|
case EVENT_START_COUNTDOWN_10:
|
|
if (eventId == EVENT_START_COUNTDOWN_6)
|
|
{
|
|
Talk(SAY_LIGHT_OF_DAWN05);
|
|
me->CastSpell(me, SPELL_CAMERA_SHAKE_INIT, true);
|
|
}
|
|
else
|
|
me->CastSpell(me, SPELL_CAMERA_SHAKE, true);
|
|
me->SummonCreatureGroup(eventId - EVENT_START_COUNTDOWN_6);
|
|
break;
|
|
case EVENT_START_COUNTDOWN_11:
|
|
Talk(SAY_LIGHT_OF_DAWN06);
|
|
break;
|
|
case EVENT_START_COUNTDOWN_12:
|
|
summons.DoAction(ACTION_PLAY_EMOTE);
|
|
break;
|
|
case EVENT_START_COUNTDOWN_13:
|
|
{
|
|
uint8 first = 1;
|
|
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
|
|
{
|
|
if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
|
|
{
|
|
Position pos = LightOfDawnPos[first];
|
|
summon->SetHomePosition(pos);
|
|
summon->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true, false);
|
|
}
|
|
first = first == 0 ? 1 : 0;
|
|
}
|
|
Position pos = LightOfDawnPos[first];
|
|
me->SetHomePosition(pos);
|
|
me->SetWalk(false);
|
|
me->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true, true);
|
|
me->CastSpell(me, SPELL_THE_MIGHT_OF_MOGRAINE, true);
|
|
break;
|
|
}
|
|
case EVENT_START_COUNTDOWN_14:
|
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
|
me->SummonCreatureGroup(5);
|
|
return;
|
|
case EVENT_FINISH_FIGHT_1:
|
|
summons.DespawnEntry(NPC_DEFENDER_OF_THE_LIGHT);
|
|
battleStarted = ENCOUNTER_STATE_OUTRO;
|
|
break;
|
|
case EVENT_FINISH_FIGHT_2:
|
|
{
|
|
summons.DespawnEntry(NPC_RAMPAGING_ABOMINATION);
|
|
summons.DespawnEntry(NPC_ACHERUS_GHOUL);
|
|
summons.DespawnEntry(NPC_WARRIOR_OF_THE_FROZEN_WASTES);
|
|
summons.DespawnEntry(NPC_FLESH_BEHEMOTH);
|
|
summons.DespawnEntry(NPC_DEFENDER_OF_THE_LIGHT);
|
|
|
|
if (Creature* orbaz = GetEntryFromSummons(NPC_ORBAZ_BLOODBANE))
|
|
{
|
|
orbaz->SetReactState(REACT_PASSIVE);
|
|
orbaz->AI()->Talk(EMOTE_LIGHT_OF_DAWN04);
|
|
orbaz->GetMotionMaster()->MovePoint(2, LightOfDawnPos[2], true, true);
|
|
orbaz->DespawnOrUnsummon(7000);
|
|
}
|
|
|
|
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
|
|
if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
|
|
{
|
|
summon->CombatStop(true);
|
|
summon->DeleteThreatList();
|
|
summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
|
summon->SetReactState(REACT_PASSIVE);
|
|
summon->GetMotionMaster()->Clear(false);
|
|
}
|
|
me->CombatStop(true);
|
|
me->DeleteThreatList();
|
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
|
me->SetReactState(REACT_PASSIVE);
|
|
me->GetMotionMaster()->Clear(false);
|
|
|
|
// Position main stars
|
|
summons.DoAction(ACTION_POSITION_NPCS);
|
|
|
|
me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, 2276.66f, -5273.60f, 81.86f, 5.14f, TEMPSUMMON_CORPSE_DESPAWN);
|
|
me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, 2272.11f, -5279.08f, 82.01f, 5.69f, TEMPSUMMON_CORPSE_DESPAWN);
|
|
me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, 2285.11f, -5276.73f, 82.08f, 4.23f, TEMPSUMMON_CORPSE_DESPAWN);
|
|
me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, 2290.06f, -5286.41f, 82.51f, 3.16f, TEMPSUMMON_CORPSE_DESPAWN);
|
|
break;
|
|
}
|
|
case EVENT_FINISH_FIGHT_3:
|
|
if (Creature* koltira = GetEntryFromSummons(NPC_KOLTIRA_DEATHWEAVER))
|
|
{
|
|
koltira->SetWalk(true);
|
|
koltira->SetHomePosition(*koltira);
|
|
koltira->CastSpell(koltira, SPELL_THE_LIGHT_OF_DAWN, false);
|
|
koltira->GetMotionMaster()->MoveCharge(LightOfDawnPos[3].GetPositionX(), LightOfDawnPos[3].GetPositionY(), LightOfDawnPos[3].GetPositionZ(), 4.0f, 2);
|
|
}
|
|
break;
|
|
case EVENT_FINISH_FIGHT_4:
|
|
if (Creature* thassarin = GetEntryFromSummons(NPC_THASSARIAN))
|
|
{
|
|
thassarin->SetWalk(true);
|
|
thassarin->SetHomePosition(*thassarin);
|
|
thassarin->CastSpell(thassarin, SPELL_THE_LIGHT_OF_DAWN, false);
|
|
thassarin->GetMotionMaster()->MoveCharge(LightOfDawnPos[4].GetPositionX(), LightOfDawnPos[4].GetPositionY(), LightOfDawnPos[4].GetPositionZ(), 4.0f, 2);
|
|
}
|
|
break;
|
|
case EVENT_FINISH_FIGHT_5:
|
|
me->SetWalk(true);
|
|
me->SetHomePosition(*me);
|
|
me->RemoveAllAuras();
|
|
me->CastSpell(me, SPELL_THE_LIGHT_OF_DAWN, false);
|
|
me->GetMotionMaster()->MoveCharge(LightOfDawnPos[5].GetPositionX(), LightOfDawnPos[5].GetPositionY(), LightOfDawnPos[5].GetPositionZ(), 4.0f, 2);
|
|
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN26);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_1:
|
|
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
|
me->SetFacingTo(4.8f);
|
|
Talk(SAY_LIGHT_OF_DAWN27);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_2:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN28);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_3:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN29);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_4:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN30);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_5:
|
|
me->SetStandState(UNIT_STAND_STATE_STAND);
|
|
Talk(SAY_LIGHT_OF_DAWN31);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_6:
|
|
if (Creature* alex = me->SummonCreature(NPC_HIGHLORD_ALEXANDROS_MOGRAINE, LightOfDawnPos[7].GetPositionX(), LightOfDawnPos[7].GetPositionY(), LightOfDawnPos[7].GetPositionZ(), LightOfDawnPos[7].GetOrientation(), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000))
|
|
{
|
|
alex->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
|
alex->GetMotionMaster()->MovePoint(0, LightOfDawnPos[8].GetPositionX(), LightOfDawnPos[8].GetPositionY(), LightOfDawnPos[8].GetPositionZ());
|
|
alex->CastSpell(alex, SPELL_ALEXANDROS_MOGRAINE_SPAWN, true);
|
|
//alex->AI()->Talk(EMOTE_LIGHT_OF_DAWN06);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_7:
|
|
if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE))
|
|
{
|
|
alex->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
|
alex->AI()->Talk(SAY_LIGHT_OF_DAWN32);
|
|
me->SetFacingToObject(alex);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_8:
|
|
Talk(SAY_LIGHT_OF_DAWN33);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_9:
|
|
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
|
Talk(SAY_LIGHT_OF_DAWN34);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_10:
|
|
if (Creature* darion = me->SummonCreature(NPC_DARION_MOGRAINE, LightOfDawnPos[9].GetPositionX(), LightOfDawnPos[9].GetPositionY(), LightOfDawnPos[9].GetPositionZ(), LightOfDawnPos[9].GetOrientation(), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000))
|
|
{
|
|
darion->AI()->Talk(SAY_LIGHT_OF_DAWN35);
|
|
darion->SetWalk(false);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_11:
|
|
if (Creature* darion = GetEntryFromSummons(NPC_DARION_MOGRAINE))
|
|
{
|
|
//darion->AI()->Talk(EMOTE_LIGHT_OF_DAWN07);
|
|
darion->GetMotionMaster()->MovePoint(0, LightOfDawnPos[10].GetPositionX(), LightOfDawnPos[10].GetPositionY(), LightOfDawnPos[10].GetPositionZ());
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_12:
|
|
if (Creature* darion = GetEntryFromSummons(NPC_DARION_MOGRAINE))
|
|
darion->AI()->Talk(EMOTE_LIGHT_OF_DAWN08);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_13:
|
|
if (Creature* darion = GetEntryFromSummons(NPC_DARION_MOGRAINE))
|
|
darion->AI()->Talk(SAY_LIGHT_OF_DAWN36);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_14:
|
|
if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE))
|
|
alex->AI()->Talk(SAY_LIGHT_OF_DAWN37);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_15:
|
|
if (Creature* darion = GetEntryFromSummons(NPC_DARION_MOGRAINE))
|
|
darion->AI()->Talk(SAY_LIGHT_OF_DAWN38);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_16:
|
|
if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE))
|
|
alex->AI()->Talk(SAY_LIGHT_OF_DAWN39);
|
|
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->GetMotionMaster()->MovePoint(0, LightOfDawnPos[11].GetPositionX(), LightOfDawnPos[11].GetPositionY(), LightOfDawnPos[11].GetPositionZ());
|
|
break;
|
|
case EVENT_OUTRO_SCENE_17:
|
|
if (Creature* darion = GetEntryFromSummons(NPC_DARION_MOGRAINE))
|
|
darion->AI()->Talk(SAY_LIGHT_OF_DAWN40);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_18:
|
|
if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE))
|
|
alex->AI()->Talk(SAY_LIGHT_OF_DAWN41);
|
|
|
|
if (Creature* darion = GetEntryFromSummons(NPC_DARION_MOGRAINE))
|
|
darion->DespawnOrUnsummon(3000);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_19:
|
|
if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE))
|
|
alex->AI()->Talk(SAY_LIGHT_OF_DAWN42);
|
|
|
|
events.Reset();
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_20, 4000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_21, 4500);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_22, 7000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_23, 9000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_24, 14000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_25, 21200);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_26, 22500);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_27, 24000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_28, 28000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_29, 34000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_30, 36000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_31, 51000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_32, 68000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_33, 73000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_34, 76000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_35, 77000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_36, 81000);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_20:
|
|
if (Creature* lk = me->SummonCreature(NPC_THE_LICH_KING, LightOfDawnPos[12].GetPositionX(), LightOfDawnPos[12].GetPositionY(), LightOfDawnPos[12].GetPositionZ(), LightOfDawnPos[12].GetOrientation(), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000))
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN43);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_21:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
lk->CastSpell(lk, SPELL_ICEBOUND_VISAGE, true);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_22:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
{
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN45);
|
|
if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE))
|
|
{
|
|
alex->RemoveAllAuras();
|
|
lk->CastSpell(alex, SPELL_SOUL_FEAST_ALEX, false);
|
|
}
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_23:
|
|
if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE))
|
|
{
|
|
alex->DespawnOrUnsummon(5000);
|
|
alex->SetVisible(false);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_24:
|
|
me->SetStandState(UNIT_STAND_STATE_STAND);
|
|
Talk(SAY_LIGHT_OF_DAWN44);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_25:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
lk->GetMotionMaster()->MovePoint(0, LightOfDawnPos[13].GetPositionX(), LightOfDawnPos[13].GetPositionY(), LightOfDawnPos[13].GetPositionZ());
|
|
break;
|
|
case EVENT_OUTRO_SCENE_26:
|
|
me->CastSpell(me, SPELL_MOGRAINE_CHARGE, false);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_27:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
{
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN46);
|
|
lk->CastSpell(me, SPELL_REBUKE, false);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_28:
|
|
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
{
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN47);
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
tirion->SetFacingToObject(lk);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_29:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
{
|
|
lk->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
|
|
lk->PlayDirectSound(14820);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_30:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN48);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_31:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN49);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_32:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
{
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
{
|
|
lk->CastSpell(lk, SPELL_SOUL_FEAST_TIRION, false);
|
|
tirion->AI()->Talk(EMOTE_LIGHT_OF_DAWN12);
|
|
}
|
|
|
|
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
|
|
if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
|
|
if (summon->GetEntry() <= NPC_RIMBLAT_EARTHSHATTER && summon->GetEntry() != NPC_HIGHLORD_TIRION_FORDRING)
|
|
{
|
|
float o = lk->GetAngle(summon);
|
|
summon->GetMotionMaster()->MovePoint(3, lk->GetPositionX() + 2.0f*cos(o), lk->GetPositionY() + 2.0f*sin(o), lk->GetPositionZ());
|
|
summon->ToTempSummon()->SetTempSummonType(TEMPSUMMON_MANUAL_DESPAWN);
|
|
}
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_33:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
{
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN51);
|
|
lk->CastSpell(lk, SPELL_APOCALYPSE, true);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_34:
|
|
for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr)
|
|
if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr))
|
|
if (summon->GetEntry() <= NPC_RIMBLAT_EARTHSHATTER && summon->GetEntry() != NPC_HIGHLORD_TIRION_FORDRING)
|
|
Unit::Kill(summon, summon);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_35:
|
|
Talk(SAY_LIGHT_OF_DAWN52);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_36:
|
|
me->SetStandState(UNIT_STAND_STATE_STAND);
|
|
Talk(SAY_LIGHT_OF_DAWN53);
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
me->SetFacingToObject(tirion);
|
|
|
|
events.Reset();
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_37, 1000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_38, 5000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_39, 7000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_40, 9000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_41, 13000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_42, 16000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_43, 17000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_44, 19000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_45, 25000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_46, 32000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_47, 42000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_48, 52000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_49, 54000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_50, 58000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_51, 65000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_52, 70000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_53, 84000);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_37:
|
|
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_UNEQUIP));
|
|
me->CastSpell(me, SPELL_THROW_ASHBRINGER, true);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_38:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
{
|
|
tirion->RemoveAllAuras();
|
|
tirion->CastSpell(me, SPELL_REBIRTH_OF_THE_ASHBRINGER, true);
|
|
tirion->SummonGameObject(GO_LIGHT_OF_DAWN, tirion->GetPositionX(), tirion->GetPositionY(), tirion->GetPositionZ(), tirion->GetOrientation(), 0, 0, 0, 0, 180);
|
|
tirion->LoadEquipment(1, true);
|
|
}
|
|
me->SetStandState(UNIT_STAND_STATE_DEAD);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_39:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
{
|
|
tirion->RemoveAllAuras();
|
|
tirion->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_40:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN54);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_41:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN55);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_42:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN56);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_43:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
{
|
|
tirion->CastSpell(tirion, SPELL_TIRION_CHARGE, true);
|
|
tirion->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
|
|
tirion->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_44:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN57);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_45:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN58);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_46:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
lk->AI()->Talk(SAY_LIGHT_OF_DAWN59);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_47:
|
|
if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING))
|
|
{
|
|
lk->CastSpell(lk, SPELL_EXIT_TELEPORT_VISUAL, true);
|
|
lk->DespawnOrUnsummon(1500);
|
|
}
|
|
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
{
|
|
float o = me->GetAngle(tirion);
|
|
tirion->GetMotionMaster()->MovePoint(4, me->GetPositionX() + 2.0f*cos(o), me->GetPositionY() + 2.0f*sin(o), me->GetPositionZ(), false);
|
|
tirion->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
|
|
tirion->setFaction(35);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_48:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->CastSpell(me, SPELL_LAY_ON_HANDS, false);
|
|
me->SetStandState(UNIT_STAND_STATE_KNEEL);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_49:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
{
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN60);
|
|
tirion->SetWalk(true);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_50:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->GetMotionMaster()->MovePoint(4, LightOfDawnPos[14].GetPositionX(), LightOfDawnPos[14].GetPositionY(), LightOfDawnPos[14].GetPositionZ());
|
|
break;
|
|
case EVENT_OUTRO_SCENE_51:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->GetMotionMaster()->MovePoint(4, LightOfDawnPos[15].GetPositionX(), LightOfDawnPos[15].GetPositionY(), LightOfDawnPos[15].GetPositionZ());
|
|
break;
|
|
case EVENT_OUTRO_SCENE_52:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
{
|
|
tirion->SetFacingToObject(me);
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN61);
|
|
}
|
|
break;
|
|
case EVENT_OUTRO_SCENE_53:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN62);
|
|
|
|
events.Reset();
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_54, 6000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_55, 14000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_56, 27000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_57, 37000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_58, 44000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_59, 50000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_60, 63000);
|
|
events.ScheduleEvent(EVENT_OUTRO_SCENE_61, 150000);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_54:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN63);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_55:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN64);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_56:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN65);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_57:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN66);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_58:
|
|
if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING))
|
|
tirion->AI()->Talk(SAY_LIGHT_OF_DAWN67);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_59:
|
|
Talk(SAY_LIGHT_OF_DAWN68);
|
|
me->SetStandState(UNIT_STAND_STATE_STAND);
|
|
break;
|
|
case EVENT_OUTRO_SCENE_60:
|
|
{
|
|
Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers();
|
|
if (!PlayerList.isEmpty())
|
|
{
|
|
for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
|
if (i->GetSource()->IsAlive() && me->IsWithinDistInMap(i->GetSource(), 100))
|
|
i->GetSource()->CastSpell(i->GetSource(), SPELL_THE_LIGHT_OF_DAWN_Q, false);
|
|
}
|
|
me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP|UNIT_NPC_FLAG_QUESTGIVER);
|
|
break;
|
|
}
|
|
case EVENT_OUTRO_SCENE_61:
|
|
summons.DespawnAll();
|
|
me->DespawnOrUnsummon(1);
|
|
events.Reset();
|
|
return;
|
|
}
|
|
|
|
if (battleStarted != ENCOUNTER_STATE_FIGHT)
|
|
return;
|
|
|
|
if (!UpdateVictim())
|
|
return;
|
|
|
|
switch (eventId)
|
|
{
|
|
case EVENT_SPELL_ANTI_MAGIC_ZONE:
|
|
DoCast(me, SPELL_ANTI_MAGIC_ZONE1);
|
|
events.RescheduleEvent(eventId, urand(25000, 30000));
|
|
break;
|
|
case EVENT_SPELL_DEATH_STRIKE:
|
|
DoCastVictim(SPELL_DEATH_STRIKE);
|
|
events.RescheduleEvent(eventId, urand(5000, 10000));
|
|
break;
|
|
case EVENT_SPELL_DEATH_EMBRACE:
|
|
DoCastVictim(SPELL_DEATH_EMBRACE);
|
|
events.RescheduleEvent(eventId, urand(15000, 20000));
|
|
break;
|
|
case EVENT_SPELL_UNHOLY_BLIGHT:
|
|
DoCast(me, SPELL_UNHOLY_BLIGHT);
|
|
events.RescheduleEvent(eventId, 60000);
|
|
break;
|
|
case EVENT_SPELL_TALK:
|
|
Talk(SAY_LIGHT_OF_DAWN09);
|
|
events.RescheduleEvent(eventId, urand(15000, 20000));
|
|
break;
|
|
}
|
|
|
|
DoMeleeAttackIfReady();
|
|
}
|
|
};
|
|
};
|
|
|
|
class spell_chapter5_light_of_dawn_aura : public SpellScriptLoader
|
|
{
|
|
public:
|
|
spell_chapter5_light_of_dawn_aura() : SpellScriptLoader("spell_chapter5_light_of_dawn_aura") { }
|
|
|
|
class spell_chapter5_light_of_dawn_aura_AuraScript : public AuraScript
|
|
{
|
|
PrepareAuraScript(spell_chapter5_light_of_dawn_aura_AuraScript);
|
|
|
|
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
|
{
|
|
GetUnitOwner()->Dismount();
|
|
GetUnitOwner()->SetCanFly(true);
|
|
GetUnitOwner()->SetDisableGravity(true);
|
|
GetUnitOwner()->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
|
}
|
|
|
|
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
|
{
|
|
GetUnitOwner()->SetCanFly(false);
|
|
GetUnitOwner()->SetDisableGravity(false);
|
|
GetUnitOwner()->RemoveUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
|
GetUnitOwner()->GetMotionMaster()->MoveFall();
|
|
}
|
|
|
|
void Register()
|
|
{
|
|
OnEffectApply += AuraEffectApplyFn(spell_chapter5_light_of_dawn_aura_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
|
OnEffectRemove += AuraEffectRemoveFn(spell_chapter5_light_of_dawn_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
|
}
|
|
};
|
|
|
|
AuraScript* GetAuraScript() const
|
|
{
|
|
return new spell_chapter5_light_of_dawn_aura_AuraScript();
|
|
}
|
|
};
|
|
|
|
class spell_chapter5_rebuke : public SpellScriptLoader
|
|
{
|
|
public:
|
|
spell_chapter5_rebuke() : SpellScriptLoader("spell_chapter5_rebuke") { }
|
|
|
|
class spell_chapter5_rebuke_SpellScript : public SpellScript
|
|
{
|
|
PrepareSpellScript(spell_chapter5_rebuke_SpellScript);
|
|
|
|
void HandleLeapBack(SpellEffIndex effIndex)
|
|
{
|
|
PreventHitEffect(effIndex);
|
|
if (Unit* unitTarget = GetHitUnit())
|
|
unitTarget->KnockbackFrom(2282.86f, -5263.45f, 40.0f, 8.0f);
|
|
}
|
|
|
|
void Register()
|
|
{
|
|
OnEffectLaunchTarget += SpellEffectFn(spell_chapter5_rebuke_SpellScript::HandleLeapBack, EFFECT_0, SPELL_EFFECT_LEAP_BACK);
|
|
}
|
|
};
|
|
|
|
SpellScript* GetSpellScript() const
|
|
{
|
|
return new spell_chapter5_rebuke_SpellScript();
|
|
}
|
|
};
|
|
|
|
void AddSC_the_scarlet_enclave_c5()
|
|
{
|
|
new npc_highlord_darion_mograine();
|
|
new spell_chapter5_light_of_dawn_aura();
|
|
new spell_chapter5_rebuke();
|
|
}
|