/* * Copyright (C) 2008-2011 TrinityCore * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ScriptPCH.h" #include "ScriptedEscortAI.h" #define LESS_MOB // if you do not have a good server and do not want it to be laggy as hell //Light of Dawn enum mograine { #ifdef LESS_MOB ENCOUNTER_DK_NUMBER = 5, // how many player queue to start the quest , or - ENCOUNTER_DK_TIMER = 10, // *every 5 minutes. These have to be done in instance data ENCOUNTER_DEFENDER_NUMBER = 10, // how many of defender ENCOUNTER_EARTHSHATTER_NUMBER = 1, // how many of earthshatter ENCOUNTER_ABOMINATION_NUMBER = 2, // how many of abomination ENCOUNTER_BEHEMOTH_NUMBER = 1, // how many of behemoth ENCOUNTER_GHOUL_NUMBER = 5, // how many of ghoul ENCOUNTER_WARRIOR_NUMBER = 1, // how many of warrior #else ENCOUNTER_DK_NUMBER = 5, // how many player queue to start the quest , or - ENCOUNTER_DK_TIMER = 10, // *every 5 minutes. These have to be done in instance data ENCOUNTER_DEFENDER_NUMBER = 20, // how many of defender ENCOUNTER_EARTHSHATTER_NUMBER = 20, // how many of earthshatter ENCOUNTER_ABOMINATION_NUMBER = 3, // how many of abomination ENCOUNTER_BEHEMOTH_NUMBER = 2, // how many of behemoth ENCOUNTER_GHOUL_NUMBER = 10, // how many of ghoul ENCOUNTER_WARRIOR_NUMBER = 2, // how many of warrior #endif ENCOUNTER_TOTAL_DAWN = 300, // Total number ENCOUNTER_TOTAL_SCOURGE = 10000, WORLD_STATE_REMAINS = 3592, WORLD_STATE_COUNTDOWN = 3603, WORLD_STATE_EVENT_BEGIN = 3605, SAY_LIGHT_OF_DAWN01 = -1609201, // pre text SAY_LIGHT_OF_DAWN02 = -1609202, SAY_LIGHT_OF_DAWN03 = -1609203, SAY_LIGHT_OF_DAWN04 = -1609204, // intro SAY_LIGHT_OF_DAWN05 = -1609205, SAY_LIGHT_OF_DAWN06 = -1609206, SAY_LIGHT_OF_DAWN07 = -1609207, // During the fight - Korfax, Champion of the Light SAY_LIGHT_OF_DAWN08 = -1609208, // Lord Maxwell Tyrosus SAY_LIGHT_OF_DAWN09 = -1609209, // Highlord Darion Mograine SAY_LIGHT_OF_DAWN10 = -1609210, SAY_LIGHT_OF_DAWN11 = -1609211, SAY_LIGHT_OF_DAWN12 = -1609212, SAY_LIGHT_OF_DAWN13 = -1609213, SAY_LIGHT_OF_DAWN14 = -1609214, SAY_LIGHT_OF_DAWN15 = -1609215, SAY_LIGHT_OF_DAWN16 = -1609216, SAY_LIGHT_OF_DAWN17 = -1609217, SAY_LIGHT_OF_DAWN18 = -1609218, SAY_LIGHT_OF_DAWN19 = -1609219, SAY_LIGHT_OF_DAWN20 = -1609220, SAY_LIGHT_OF_DAWN21 = -1609221, SAY_LIGHT_OF_DAWN22 = -1609222, SAY_LIGHT_OF_DAWN23 = -1609223, SAY_LIGHT_OF_DAWN24 = -1609224, SAY_LIGHT_OF_DAWN25 = -1609225, // After the fight SAY_LIGHT_OF_DAWN26 = -1609226, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN27 = -1609227, // Highlord Darion Mograine SAY_LIGHT_OF_DAWN28 = -1609228, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN29 = -1609229, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN30 = -1609230, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN31 = -1609231, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN32 = -1609232, // Highlord Alexandros Mograine SAY_LIGHT_OF_DAWN33 = -1609233, // Highlord Darion Mograine SAY_LIGHT_OF_DAWN34 = -1609234, // Highlord Darion Mograine SAY_LIGHT_OF_DAWN35 = -1609235, // Darion Mograine SAY_LIGHT_OF_DAWN36 = -1609236, // Darion Mograine SAY_LIGHT_OF_DAWN37 = -1609237, // Highlord Alexandros Mograine SAY_LIGHT_OF_DAWN38 = -1609238, // Darion Mograine SAY_LIGHT_OF_DAWN39 = -1609239, // Highlord Alexandros Mograine SAY_LIGHT_OF_DAWN40 = -1609240, // Darion Mograine SAY_LIGHT_OF_DAWN41 = -1609241, // Highlord Alexandros Mograine SAY_LIGHT_OF_DAWN42 = -1609242, // Highlord Alexandros Mograine SAY_LIGHT_OF_DAWN43 = -1609243, // The Lich King SAY_LIGHT_OF_DAWN44 = -1609244, // Highlord Darion Mograine SAY_LIGHT_OF_DAWN45 = -1609245, // The Lich King SAY_LIGHT_OF_DAWN46 = -1609246, // The Lich King SAY_LIGHT_OF_DAWN47 = -1609247, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN48 = -1609248, // The Lich King SAY_LIGHT_OF_DAWN49 = -1609249, // The Lich King SAY_LIGHT_OF_DAWN50 = -1609250, // Lord Maxwell Tyrosus SAY_LIGHT_OF_DAWN51 = -1609251, // The Lich King SAY_LIGHT_OF_DAWN52 = -1609252, // Highlord Darion Mograine SAY_LIGHT_OF_DAWN53 = -1609253, // Highlord Darion Mograine SAY_LIGHT_OF_DAWN54 = -1609254, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN55 = -1609255, // The Lich King SAY_LIGHT_OF_DAWN56 = -1609256, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN57 = -1609257, // The Lich King SAY_LIGHT_OF_DAWN58 = -1609258, // The Lich King SAY_LIGHT_OF_DAWN59 = -1609259, // The Lich King SAY_LIGHT_OF_DAWN60 = -1609260, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN61 = -1609261, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN62 = -1609262, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN63 = -1609263, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN64 = -1609264, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN65 = -1609265, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN66 = -1609266, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN67 = -1609267, // Highlord Tirion Fordring SAY_LIGHT_OF_DAWN68 = -1609268, // Highlord Darion Mograine EMOTE_LIGHT_OF_DAWN01 = -1609269, // Emotes EMOTE_LIGHT_OF_DAWN02 = -1609270, EMOTE_LIGHT_OF_DAWN03 = -1609271, EMOTE_LIGHT_OF_DAWN04 = -1609272, EMOTE_LIGHT_OF_DAWN05 = -1609273, EMOTE_LIGHT_OF_DAWN06 = -1609274, EMOTE_LIGHT_OF_DAWN07 = -1609275, EMOTE_LIGHT_OF_DAWN08 = -1609276, EMOTE_LIGHT_OF_DAWN09 = -1609277, EMOTE_LIGHT_OF_DAWN10 = -1609278, EMOTE_LIGHT_OF_DAWN11 = -1609279, EMOTE_LIGHT_OF_DAWN12 = -1609280, EMOTE_LIGHT_OF_DAWN13 = -1609281, EMOTE_LIGHT_OF_DAWN14 = -1609282, EMOTE_LIGHT_OF_DAWN15 = -1609283, EMOTE_LIGHT_OF_DAWN16 = -1609284, EMOTE_LIGHT_OF_DAWN17 = -1609285, EMOTE_LIGHT_OF_DAWN18 = -1609286, GO_LIGHT_OF_DAWN = 191330, SPELL_THE_LIGHT_OF_DAWN_Q = 53606, // quest credit // ---- Dark Knight npc -------------------- // Highlord Darion Mograine NPC_HIGHLORD_DARION_MOGRAINE = 29173, SPELL_ANTI_MAGIC_ZONE1 = 52893, SPELL_DEATH_STRIKE = 53639, SPELL_DEATH_EMBRACE = 53635, SPELL_ICY_TOUCH1 = 49723, SPELL_THE_LIGHT_OF_DAWN = 53658, SPELL_THE_MIGHT_OF_MOGRAINE = 53642, // on players when begins SPELL_UNHOLY_BLIGHT = 53640, SPELL_ALEXANDROS_MOGRAINE_SPAWN = 53667, SPELL_MOGRAINE_CHARGE = 53679, SPELL_ASHBRINGER = 53701, // Koltira Deathweaver & Orbaz Bloodbane are using the same abilities NPC_KOLTIRA_DEATHWEAVER = 29199, NPC_ORBAZ_BLOODBANE = 29204, // this guy fleed NPC_THASSARIAN = 29200, // he also does SPELL_THE_LIGHT_OF_DAWN 53658 SPELL_BLOOD_STRIKE1 = 52374, SPELL_DEATH_GRIP = 49576, SPELL_ICY_TOUCH2 = 52372, SPELL_PLAGUE_STRIKE1 = 50668, // all do SPELL_HERO_AGGRO_AURA 53627 // Lich King NPC_THE_LICH_KING = 29183, // show up at end SPELL_APOCALYPSE = 53210, SPELL_TELEPORT_VISUAL = 52233, SPELL_SOUL_FEAST_ALEX = 53677, // on Alexandros SPELL_SOUL_FEAST_TIRION = 53685, // on Tirion SPELL_ICEBOUND_VISAGE = 53274, // not sure what is it for SPELL_REBUKE = 53680, // others NPC_RAMPAGING_ABOMINATION = 29186, SPELL_CLEAVE1 = 53633, SPELL_SCOURGE_HOOK = 50335, SPELL_SCOURGE_AGGRO_AURA = 53624, NPC_FLESH_BEHEMOTH = 29190, // giant guy SPELL_STOMP = 53634, SPELL_THUNDERCLAP = 36706, SPELL_HERO_AGGRO_AURA = 53627, NPC_ACHERUS_GHOUL = 29219, // just ghoul.... SPELL_GHOULPLOSION = 53632, NPC_WARRIOR_OF_THE_FROZEN_WASTES = 29206, // use SPELL_CLEAVE 53631 NPC_HIGHLORD_ALEXANDROS_MOGRAINE = 29227, // ghost NPC_DARION_MOGRAINE = 29228, // ghost // ---- Dawn npc -------------------- // Highlord Tirion Fordring NPC_HIGHLORD_TIRION_FORDRING = 29175, EQUIP_HIGHLORD_TIRION_FORDRING = 13262, SPELL_LAY_ON_HANDS = 53778, SPELL_REBIRTH_OF_THE_ASHBRINGER = 53702, SPELL_TIRION_CHARGE = 53705, SPELL_TIRION_CHARGE_VISUAL = 53706, // others NPC_KORFAX_CHAMPION_OF_THE_LIGHT = 29176, SPELL_CLEAVE = 53631, SPELL_HEROIC_LEAP = 53625, NPC_LORD_MAXWELL_TYROSUS = 29178, NPC_LEONID_BARTHALOMEW_THE_REVERED = 29179, NPC_DUKE_NICHOLAS_ZVERENHOFF = 29180, NPC_COMMANDER_ELIGOR_DAWNBRINGER = 29177, SPELL_HOLY_LIGHT2 = 37979, NPC_RAYNE = 29181, SPELL_REJUVENATION = 20664, SPELL_STARFALL = 20678, SPELL_TRANQUILITY = 25817, SPELL_WRATH = 21807, NPC_DEFENDER_OF_THE_LIGHT = 29174, // also does SPELL_HEROIC_LEAP 53625 SPELL_HOLY_LIGHT1 = 29427, SPELL_HOLY_STRIKE = 53643, SPELL_HOLY_WRATH = 53638, SPELL_UPPERCUT = 53629, NPC_RIMBLAT_EARTHSHATTER = 29182, SPELL_CHAIN_HEAL = 33642, SPELL_THUNDER = 53630 }; struct Location { float x, y, z, o; }; void UpdateWorldState(Map *map, uint32 id, uint32 state) { Map::PlayerList const& players = map->GetPlayers(); if (!players.isEmpty()) { for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { if (Player* pPlayer = itr->getSource()) pPlayer->SendUpdateWorldState(id, state); } } } static Location LightofDawnLoc[]= { {2281.335f, -5300.409f, 85.170f, 0}, // 0 Tirion Fordring loc {2283.896f, -5287.914f, 83.066f, 1.55f}, // 1 Tirion Fordring loc2 {2281.461f, -5263.014f, 81.164f, 0}, // 2 Tirion charges {2262.277f, -5293.477f, 82.167f, 0}, // 3 Tirion run {2270.286f, -5287.73f, 82.262f, 0}, // 4 Tirion relocate {2269.511f, -5288.289f, 82.225f, 0}, // 5 Tirion forward {2262.277f, -5293.477f, 82.167f, 0}, // 6 Tirion runs to Darion {2270.286f, -5287.73f, 82.262f, 0}, {2269.511f, -5288.289f, 82.225f, 0}, {2273.205f, -5288.848f, 82.617f, 0}, // 9 Korfax loc1 {2274.739f, -5287.926f, 82.684f, 0}, // 10 Korfax loc2 {2253.673f, -5318.004f, 81.724f, 0}, // 11 Korfax kicked {2287.028f, -5309.644f, 87.253f, 0}, // 12 Maxwell loc1 {2286.978f, -5308.025f, 86.83f, 0}, // 13 Maxwell loc2 {2248.877f, -5307.586f, 82.166f, 0}, // 14 maxwell kicked {2278.58f, -5316.933f, 88.319f, 0}, // 15 Eligor loc1 {2278.535f, -5315.479f, 88.08f, 0}, // 16 Eligor loc2 {2259.416f, -5304.505f, 82.149f, 0}, // 17 eligor kicked {2289.259f, -5280.355f, 82.112f, 0}, // 18 Koltira loc1 {2289.02f, -5281.985f, 82.207f, 0}, // 19 Koltira loc2 {2273.289f, -5273.675f, 81.701f, 0}, // 20 Thassarian loc1 {2273.332f, -5275.544f, 81.849f, 0}, // 21 Thassarian loc2 {2281.198f, -5257.397f, 80.224f, 4.66f}, // 22 Alexandros loc1 {2281.156f, -5259.934f, 80.647f, 0}, // 23 Alexandros loc2 {2281.294f, -5281.895f, 82.445f, 1.35f}, // 24 Darion loc1 {2281.093f, -5263.013f, 81.125f, 0}, // 25 Darion loc1 {2281.313f, -5250.282f, 79.322f, 4.69f}, // 26 Lich King spawns {2281.523f, -5261.058f, 80.877f, 0}, // 27 Lich king move forwards {2272.709f, -5255.552f, 78.226f, 0}, // 28 Lich king kicked {2273.972f, -5257.676f, 78.862f, 0}, // 29 Lich king moves forward }; class npc_highlord_darion_mograine : public CreatureScript { public: npc_highlord_darion_mograine() : CreatureScript("npc_highlord_darion_mograine") { } bool OnGossipSelect(Player* pPlayer, Creature* creature, uint32 /*uiSender*/, uint32 uiAction) { pPlayer->PlayerTalkClass->ClearMenus(); switch (uiAction) { case GOSSIP_ACTION_INFO_DEF+1: pPlayer->CLOSE_GOSSIP_MENU(); CAST_AI(npc_highlord_darion_mograine::npc_highlord_darion_mograineAI, creature->AI())->uiStep = 1; CAST_AI(npc_highlord_darion_mograine::npc_highlord_darion_mograineAI, creature->AI())->Start(true, false, pPlayer->GetGUID()); break; } return true; } bool OnGossipHello(Player* pPlayer, Creature* creature) { if (creature->isQuestGiver()) pPlayer->PrepareQuestMenu(creature->GetGUID()); if (pPlayer->GetQuestStatus(12801) == QUEST_STATUS_INCOMPLETE) pPlayer->ADD_GOSSIP_ITEM(0, "I am ready.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(creature), creature->GetGUID()); return true; } CreatureAI* GetAI(Creature* creature) const { return new npc_highlord_darion_mograineAI(creature); } struct npc_highlord_darion_mograineAI : public npc_escortAI { npc_highlord_darion_mograineAI(Creature* creature) : npc_escortAI(creature) { Reset(); } bool bIsBattle; uint32 uiStep; uint32 uiPhase_timer; uint32 uiFight_duration; uint32 uiTotal_dawn; uint32 uiTotal_scourge; uint32 uiSummon_counter; // Darion Mograine uint32 uiAnti_magic_zone; uint32 uiDeath_strike; uint32 uiDeath_embrace; uint32 uiIcy_touch; uint32 uiUnholy_blight; uint32 uiFight_speech; uint32 uiSpawncheck; uint32 uiTargetcheck; // Dawn uint64 uiTirionGUID; uint64 uiAlexandrosGUID; uint64 uiDarionGUID; uint64 uiKorfaxGUID; uint64 uiMaxwellGUID; uint64 uiEligorGUID; uint64 uiRayneGUID; uint64 uiDefenderGUID[ENCOUNTER_DEFENDER_NUMBER]; uint64 uiEarthshatterGUID[ENCOUNTER_EARTHSHATTER_NUMBER]; // Death uint64 uiKoltiraGUID; uint64 uiOrbazGUID; uint64 uiThassarianGUID; uint64 uiLichKingGUID; uint64 uiAbominationGUID[ENCOUNTER_ABOMINATION_NUMBER]; uint64 uiBehemothGUID[ENCOUNTER_BEHEMOTH_NUMBER]; uint64 uiGhoulGUID[ENCOUNTER_GHOUL_NUMBER]; uint64 uiWarriorGUID[ENCOUNTER_WARRIOR_NUMBER]; void Reset() { if (!HasEscortState(STATE_ESCORT_ESCORTING)) { bIsBattle = false; uiStep = 0; uiPhase_timer = 3000; uiFight_duration = 300000; // 5 minutes uiTotal_dawn = ENCOUNTER_TOTAL_DAWN; uiTotal_scourge = ENCOUNTER_TOTAL_SCOURGE; uiSummon_counter = 0; uiAnti_magic_zone = urand(1000, 6000); uiDeath_strike = urand(5000, 10000); uiDeath_embrace = urand(5000, 10000); uiIcy_touch = urand(5000, 10000); uiUnholy_blight = urand(5000, 10000); uiFight_speech = 15000; uiSpawncheck = 1000; uiTargetcheck = 10000; me->SetStandState(UNIT_STAND_STATE_STAND); me->Mount(25279); me->SetVisible(true); UpdateWorldState(me->GetMap(), WORLD_STATE_REMAINS, 0); //UpdateWorldState(me->GetMap(), WORLD_STATE_COUNTDOWN, 0); UpdateWorldState(me->GetMap(), WORLD_STATE_EVENT_BEGIN, 0); if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) pTemp->setDeathState(JUST_DIED); if (Creature* pTemp = Unit::GetCreature(*me, uiKorfaxGUID)) pTemp->setDeathState(JUST_DIED); if (Creature* pTemp = Unit::GetCreature(*me, uiMaxwellGUID)) pTemp->setDeathState(JUST_DIED); if (Creature* pTemp = Unit::GetCreature(*me, uiEligorGUID)) pTemp->setDeathState(JUST_DIED); if (Creature* pTemp = Unit::GetCreature(*me, uiRayneGUID)) pTemp->setDeathState(JUST_DIED); uiTirionGUID = 0; uiKorfaxGUID = 0; uiMaxwellGUID = 0; uiEligorGUID = 0; uiRayneGUID = 0; for (uint8 i = 0; i < ENCOUNTER_DEFENDER_NUMBER; ++i) { if (Creature* pTemp = Unit::GetCreature(*me, uiDefenderGUID[i])) pTemp->setDeathState(JUST_DIED); uiDefenderGUID[i] = 0; } for (uint8 i = 0; i < ENCOUNTER_EARTHSHATTER_NUMBER; ++i) { if (Creature* pTemp = Unit::GetCreature(*me, uiEarthshatterGUID[i])) pTemp->setDeathState(JUST_DIED); uiEarthshatterGUID[i] = 0; } if (Creature* pTemp = Unit::GetCreature(*me, uiKoltiraGUID)) pTemp->Respawn(); if (Creature* pTemp = Unit::GetCreature(*me, uiOrbazGUID)) pTemp->Respawn(); if (Creature* pTemp = Unit::GetCreature(*me, uiThassarianGUID)) pTemp->Respawn(); if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) pTemp->Respawn(); uiKoltiraGUID = 0; uiOrbazGUID = 0; uiThassarianGUID = 0; uiLichKingGUID = 0; for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i) { if (Creature* pTemp = Unit::GetCreature(*me, uiAbominationGUID[i])) pTemp->setDeathState(JUST_DIED); uiAbominationGUID[i] = 0; } for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i) { if (Creature* pTemp = Unit::GetCreature(*me, uiBehemothGUID[i])) pTemp->setDeathState(JUST_DIED); uiBehemothGUID[i] = 0; } for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) { if (Creature* pTemp = Unit::GetCreature(*me, uiGhoulGUID[i])) pTemp->setDeathState(JUST_DIED); uiGhoulGUID[i] = 0; } for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) { if (Creature* pTemp = Unit::GetCreature(*me, uiWarriorGUID[i])) pTemp->setDeathState(JUST_DIED); uiWarriorGUID[i] = 0; } } } void AttackStart(Unit* who) { if (!who) return; if (who == me) return; if (me->Attack(who, true)) { me->AddThreat(who, 0.0f); me->SetInCombatWith(who); who->SetInCombatWith(me); DoStartMovement(who); } } void MoveInLineOfSight(Unit* who) { if (!who) return; if (who->isTargetableForAttack() && me->IsHostileTo(who)) if (me->IsWithinDistInMap(who, 20) && me->IsWithinLOSInMap(who)) AttackStart(who); } void SetHoldState(bool bOnHold) { SetEscortPaused(bOnHold); } void WaypointReached(uint32 i) { switch (i) { case 0: me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); SetHoldState(true); break; case 1: SetHoldState(true); SpawnNPC(); if (Creature* pTemp = Unit::GetCreature(*me, uiKorfaxGUID)) DoScriptText(SAY_LIGHT_OF_DAWN07, pTemp); if (Creature* pTemp = Unit::GetCreature(*me, uiMaxwellGUID)) DoScriptText(SAY_LIGHT_OF_DAWN08, pTemp); for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) NPCChangeTarget(uiGhoulGUID[i]); for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) NPCChangeTarget(uiWarriorGUID[i]); for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i) NPCChangeTarget(uiAbominationGUID[i]); for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i) NPCChangeTarget(uiBehemothGUID[i]); NPCChangeTarget(uiKoltiraGUID); NPCChangeTarget(uiOrbazGUID); NPCChangeTarget(uiThassarianGUID); me->Unmount(); me->CastSpell(me, SPELL_THE_MIGHT_OF_MOGRAINE, true); // need to fix, on player only if (Creature* pTemp = Unit::GetCreature(*me, uiKoltiraGUID)) pTemp->Unmount(); if (Creature* pTemp = Unit::GetCreature(*me, uiThassarianGUID)) pTemp->Unmount(); bIsBattle = true; break; case 2: me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); DoCast(me, SPELL_THE_LIGHT_OF_DAWN); break; case 3: { //Unit* pTirion = Unit::GetCreature(*me, uiTirionGUID); DoScriptText(EMOTE_LIGHT_OF_DAWN05, me); if (me->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0)) me->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN); if (Creature* pTemp = Unit::GetCreature(*me, uiKoltiraGUID)) { if (pTemp->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0)) pTemp->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN); pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[19].x, LightofDawnLoc[19].y, LightofDawnLoc[19].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiThassarianGUID)) { if (pTemp->HasAura(SPELL_THE_LIGHT_OF_DAWN, 0)) pTemp->RemoveAurasDueToSpell(SPELL_THE_LIGHT_OF_DAWN); pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[21].x, LightofDawnLoc[21].y, LightofDawnLoc[21].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiKorfaxGUID)) { pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[10].x, LightofDawnLoc[10].y, LightofDawnLoc[10].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiMaxwellGUID)) { pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[13].x, LightofDawnLoc[13].y, LightofDawnLoc[13].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiEligorGUID)) { pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[16].x, LightofDawnLoc[16].y, LightofDawnLoc[16].z); } JumpToNextStep(10000); } break; case 4: DoScriptText(SAY_LIGHT_OF_DAWN27, me); me->SetStandState(UNIT_STAND_STATE_KNEEL); if (Creature* pTemp = Unit::GetCreature(*me, uiKoltiraGUID)) pTemp->SetStandState(UNIT_STAND_STATE_KNEEL); if (Creature* pTemp = Unit::GetCreature(*me, uiThassarianGUID)) pTemp->SetStandState(UNIT_STAND_STATE_KNEEL); SetHoldState(true); break; case 5: DoScriptText(SAY_LIGHT_OF_DAWN33, me); SetHoldState(true); break; case 6: SetHoldState(true); me->HandleEmoteCommand(EMOTE_ONESHOT_SPECIALATTACK1H); JumpToNextStep(1000); break; case 7: SetHoldState(true); JumpToNextStep(2000); break; case 8: me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_UNEQUIP)); if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) me->CastSpell(pTemp, SPELL_ASHBRINGER, true); DoScriptText(EMOTE_LIGHT_OF_DAWN14, me); SetHoldState(true); break; } } void EnterEvadeMode() { if (!bIsBattle)//do not reset self if we are in battle npc_escortAI::EnterEvadeMode(); } void UpdateAI(const uint32 diff) { npc_escortAI::UpdateAI(diff); if (!bIsBattle) { if (uiPhase_timer <= diff) { // ******* Before battle ***************************************************************** switch (uiStep) { case 0: // countdown //UpdateWorldState(me->GetMap(), WORLD_STATE_COUNTDOWN, 1); break; case 1: // just delay //UpdateWorldState(me->GetMap(), WORLD_STATE_REMAINS, 1); UpdateWorldState(me->GetMap(), WORLD_STATE_COUNTDOWN, 0); UpdateWorldState(me->GetMap(), WORLD_STATE_EVENT_BEGIN, 1); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); JumpToNextStep(3000); break; case 2: DoScriptText(SAY_LIGHT_OF_DAWN04, me); if (Creature* pKoltira = GetClosestCreatureWithEntry(me, NPC_KOLTIRA_DEATHWEAVER, 50.0f)) uiKoltiraGUID = pKoltira->GetGUID(); if (Creature* pOrbaz = GetClosestCreatureWithEntry(me, NPC_ORBAZ_BLOODBANE, 50.0f)) uiOrbazGUID = pOrbaz->GetGUID(); if (Creature* pThassarian = GetClosestCreatureWithEntry(me, NPC_THASSARIAN, 50.0f)) uiThassarianGUID = pThassarian->GetGUID(); JumpToNextStep(10000); break; case 3: // rise DoScriptText(SAY_LIGHT_OF_DAWN05, me); JumpToNextStep(3000); break; case 4: // summon ghoul // Dunno whats the summon spell, so workaround DoCast(me, 33271); // shack effect uiPhase_timer = 500; if (uiSummon_counter < ENCOUNTER_GHOUL_NUMBER) { Unit* pTemp = me->SummonCreature(NPC_ACHERUS_GHOUL, (me->GetPositionX()-20)+rand()%40, (me->GetPositionY()-20)+rand()%40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->setFaction(2084); uiGhoulGUID[uiSummon_counter] = pTemp->GetGUID(); ++uiSummon_counter; } else { uiSummon_counter = 0; ++uiStep; } break; case 5: // summon abomination DoCast(me, 33271); // shack effect uiPhase_timer = 500; if (uiSummon_counter < ENCOUNTER_ABOMINATION_NUMBER) { Unit* pTemp = me->SummonCreature(NPC_RAMPAGING_ABOMINATION, (me->GetPositionX()-20)+rand()%40, (me->GetPositionY()-20)+rand()%40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->setFaction(2084); uiAbominationGUID[uiSummon_counter] = pTemp->GetGUID(); ++uiSummon_counter; } else { uiSummon_counter = 0; ++uiStep; } break; case 6: // summon warrior DoCast(me, 33271); // shack effect uiPhase_timer = 500; if (uiSummon_counter < ENCOUNTER_WARRIOR_NUMBER) { Unit* pTemp = me->SummonCreature(NPC_WARRIOR_OF_THE_FROZEN_WASTES, (me->GetPositionX()-20)+rand()%40, (me->GetPositionY()-20)+rand()%40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->setFaction(2084); uiWarriorGUID[uiSummon_counter] = pTemp->GetGUID(); ++uiSummon_counter; } else { uiSummon_counter = 0; ++uiStep; } break; case 7: // summon warrior DoCast(me, 33271); // shack effect uiPhase_timer = 500; if (uiSummon_counter < ENCOUNTER_BEHEMOTH_NUMBER) { Unit* pTemp = me->SummonCreature(NPC_FLESH_BEHEMOTH, (me->GetPositionX()-20)+rand()%40, (me->GetPositionY()-20)+rand()%40, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->setFaction(2084); uiBehemothGUID[uiSummon_counter] = pTemp->GetGUID(); ++uiSummon_counter; } else { uiSummon_counter = 0; ++uiStep; } break; case 8: // summon announce DoScriptText(SAY_LIGHT_OF_DAWN06, me); JumpToNextStep(5000); break; case 9: // charge begins SetHoldState(false); if (Creature* pTemp = Unit::GetCreature(*me, uiKoltiraGUID)) { pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiOrbazGUID)) { pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiThassarianGUID)) { pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); } for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i) if (Creature* pTemp = Unit::GetCreature(*me, uiAbominationGUID[i])) pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i) if (Creature* pTemp = Unit::GetCreature(*me, uiBehemothGUID[i])) pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) if (Creature* pTemp = Unit::GetCreature(*me, uiGhoulGUID[i])) pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) if (Creature* pTemp = Unit::GetCreature(*me, uiWarriorGUID[i])) pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z); JumpToNextStep(5000); break; // ******* After battle ***************************************************************** case 11: // Tirion starts to speak if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN28, pTemp); JumpToNextStep(21000); break; case 12: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN29, pTemp); JumpToNextStep(13000); break; case 13: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN30, pTemp); JumpToNextStep(13000); break; case 14: me->SetStandState(UNIT_STAND_STATE_STAND); DoScriptText(SAY_LIGHT_OF_DAWN31, me); JumpToNextStep(7000); break; case 15: // summon gate if (Unit* pTemp = me->SummonCreature(NPC_HIGHLORD_ALEXANDROS_MOGRAINE, LightofDawnLoc[22].x, LightofDawnLoc[22].y, LightofDawnLoc[22].z, LightofDawnLoc[22].o, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000)) { pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pTemp->CastSpell(pTemp, SPELL_ALEXANDROS_MOGRAINE_SPAWN, true); DoScriptText(EMOTE_LIGHT_OF_DAWN06, pTemp); uiAlexandrosGUID = pTemp->GetGUID(); } JumpToNextStep(4000); break; case 16: // Alexandros out if (Creature* pTemp = Unit::GetCreature(*me, uiAlexandrosGUID)) { pTemp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[23].x, LightofDawnLoc[23].y, LightofDawnLoc[23].z); DoScriptText(SAY_LIGHT_OF_DAWN32, pTemp); } SetHoldState(false); // makes darion turns back JumpToNextStep(5000); break; case 17: me->SetStandState(UNIT_STAND_STATE_KNEEL); DoScriptText(SAY_LIGHT_OF_DAWN34, me); JumpToNextStep(5000); break; case 18: // Darion's spirit out if (Unit* pTemp = me->SummonCreature(NPC_DARION_MOGRAINE, LightofDawnLoc[24].x, LightofDawnLoc[24].y, LightofDawnLoc[24].z, LightofDawnLoc[24].o, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000)) { DoScriptText(SAY_LIGHT_OF_DAWN35, pTemp); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); uiDarionGUID = pTemp->GetGUID(); } JumpToNextStep(4000); break; case 19: // runs to father if (Creature* pTemp = Unit::GetCreature(*me, uiDarionGUID)) { DoScriptText(EMOTE_LIGHT_OF_DAWN07, pTemp); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[25].x, LightofDawnLoc[25].y, LightofDawnLoc[25].z); } JumpToNextStep(4000); break; case 20: if (Creature* pTemp = Unit::GetCreature(*me, uiDarionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN36, pTemp); JumpToNextStep(4000); break; case 21: if (Creature* pTemp = Unit::GetCreature(*me, uiDarionGUID)) DoScriptText(EMOTE_LIGHT_OF_DAWN08, pTemp); JumpToNextStep(4000); break; case 22: if (Creature* pTemp = Unit::GetCreature(*me, uiAlexandrosGUID)) DoScriptText(SAY_LIGHT_OF_DAWN37, pTemp); JumpToNextStep(8000); break; case 23: if (Creature* pTemp = Unit::GetCreature(*me, uiDarionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN38, pTemp); JumpToNextStep(8000); break; case 24: if (Creature* pTemp = Unit::GetCreature(*me, uiAlexandrosGUID)) DoScriptText(SAY_LIGHT_OF_DAWN39, pTemp); if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) // Tirion moves forward here pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[1].x, LightofDawnLoc[1].y, LightofDawnLoc[1].z); JumpToNextStep(15000); break; case 25: if (Creature* pTemp = Unit::GetCreature(*me, uiDarionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN40, pTemp); JumpToNextStep(11000); break; case 26: if (Creature* pTemp = Unit::GetCreature(*me, uiAlexandrosGUID)) DoScriptText(SAY_LIGHT_OF_DAWN41, pTemp); JumpToNextStep(5000); break; case 27: if (Creature* pTemp = Unit::GetCreature(*me, uiDarionGUID)) pTemp->setDeathState(JUST_DIED); JumpToNextStep(24000); break; case 28: if (Creature* pTemp = Unit::GetCreature(*me, uiAlexandrosGUID)) DoScriptText(SAY_LIGHT_OF_DAWN42, pTemp); JumpToNextStep(6000); break; case 29: // lich king spawns if (Unit* pTemp = me->SummonCreature(NPC_THE_LICH_KING, LightofDawnLoc[26].x, LightofDawnLoc[26].y, LightofDawnLoc[26].z, LightofDawnLoc[26].o, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000)) { DoScriptText(SAY_LIGHT_OF_DAWN43, pTemp); uiLichKingGUID = pTemp->GetGUID(); if (Unit* pAlex = Unit::GetCreature(*me, uiAlexandrosGUID)) pTemp->CastSpell(pAlex, SPELL_SOUL_FEAST_ALEX, false); } JumpToNextStep(2000); break; case 30: if (Creature* pTemp = Unit::GetCreature(*me, uiAlexandrosGUID)) // just hide him { DoScriptText(EMOTE_LIGHT_OF_DAWN09, pTemp); pTemp->SetVisible(false); } if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) { pTemp->InterruptNonMeleeSpells(false); DoScriptText(SAY_LIGHT_OF_DAWN45, pTemp); } JumpToNextStep(3000); break; case 31: me->SetStandState(UNIT_STAND_STATE_STAND); DoScriptText(EMOTE_LIGHT_OF_DAWN10, me); DoScriptText(SAY_LIGHT_OF_DAWN44, me); JumpToNextStep(3000); break; case 32: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[27].x, LightofDawnLoc[27].y, LightofDawnLoc[27].z); JumpToNextStep(6000); break; case 33: // Darion supports to jump to lich king here if (Unit::GetCreature(*me, uiLichKingGUID)) DoCast(me, SPELL_MOGRAINE_CHARGE); // jumping charge // doesn't make it looks well, so workarounds, Darion charges, looks better me->SetSpeed(MOVE_RUN, 3.0f); me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); SetHoldState(false); JumpToNextStep(0); break; case 35: // Lich king counterattacks if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) { pTemp->HandleEmoteCommand(EMOTE_ONESHOT_KICK); DoScriptText(SAY_LIGHT_OF_DAWN46, pTemp); } me->SetSpeed(MOVE_RUN, 6.0f); me->SetStandState(UNIT_STAND_STATE_DEAD); SetHoldState(false); // Darion got kicked by lich king JumpToNextStep(0); break; case 37: // Lich king counterattacks me->SetStandState(UNIT_STAND_STATE_KNEEL); JumpToNextStep(3000); break; case 38: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN47, pTemp); JumpToNextStep(8000); break; case 39: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) DoScriptText(SAY_LIGHT_OF_DAWN48, pTemp); JumpToNextStep(15000); break; case 40: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) DoScriptText(SAY_LIGHT_OF_DAWN49, pTemp); JumpToNextStep(17000); break; case 41: // Lich king - Apocalypse if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) { DoScriptText(EMOTE_LIGHT_OF_DAWN11, pTemp); DoScriptText(SAY_LIGHT_OF_DAWN51, pTemp); if (Unit* pTirion = Unit::GetCreature(*me, uiTirionGUID)) { pTirion->SetStandState(UNIT_STAND_STATE_KNEEL); //pTemp->CastSpell(pTirion, SPELL_APOCALYPSE, false); // not working pTemp->CastSpell(pTirion, SPELL_SOUL_FEAST_TIRION, false); DoScriptText(EMOTE_LIGHT_OF_DAWN12, pTirion); } } JumpToNextStep(2000); break; case 42: // Maxwell yells for attack { float fLichPositionX = 0, fLichPositionY = 0, fLichPositionZ = 0; if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) { fLichPositionX = pTemp->GetPositionX(); fLichPositionY = pTemp->GetPositionY(); fLichPositionZ = pTemp->GetPositionZ(); } if (fLichPositionX && fLichPositionY) { Unit* pTemp; pTemp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000); pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->SetSpeed(MOVE_RUN, 2.0f); pTemp->setFaction(me->getFaction()); pTemp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); uiDefenderGUID[0] = pTemp->GetGUID(); pTemp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000); pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->SetSpeed(MOVE_RUN, 2.0f); pTemp->setFaction(me->getFaction()); pTemp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); uiEarthshatterGUID[0] = pTemp->GetGUID(); } if (Creature* pTemp = Unit::GetCreature(*me, uiMaxwellGUID)) { pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->SetSpeed(MOVE_RUN, 2.0f); pTemp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); DoScriptText(SAY_LIGHT_OF_DAWN50, pTemp); } if (Creature* pTemp = Unit::GetCreature(*me, uiKorfaxGUID)) { pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->SetSpeed(MOVE_RUN, 2.0f); pTemp->HandleEmoteCommand(EMOTE_STATE_ATTACK_UNARMED); pTemp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); } if (Creature* pTemp = Unit::GetCreature(*me, uiEligorGUID)) { pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->SetSpeed(MOVE_RUN, 2.0f); pTemp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); } } JumpToNextStep(4500); break; case 43: // They all got kicked if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) DoScriptText(EMOTE_LIGHT_OF_DAWN13, pTemp); if (Creature* pTemp = Unit::GetCreature(*me, uiMaxwellGUID)) { pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); pTemp->SetSpeed(MOVE_RUN, 6.0f); pTemp->SetStandState(UNIT_STAND_STATE_DEAD); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[14].x, LightofDawnLoc[14].y, LightofDawnLoc[14].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiKorfaxGUID)) { pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); pTemp->SetSpeed(MOVE_RUN, 6.0f); pTemp->SetStandState(UNIT_STAND_STATE_DEAD); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[11].x, LightofDawnLoc[11].y, LightofDawnLoc[11].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiEligorGUID)) { pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); pTemp->SetSpeed(MOVE_RUN, 6.0f); pTemp->SetStandState(UNIT_STAND_STATE_DEAD); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[17].x, LightofDawnLoc[17].y, LightofDawnLoc[17].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiDefenderGUID[0])) { pTemp->SetSpeed(MOVE_RUN, 6.0f); pTemp->SetStandState(UNIT_STAND_STATE_DEAD); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiEarthshatterGUID[0])) { pTemp->SetSpeed(MOVE_RUN, 6.0f); pTemp->SetStandState(UNIT_STAND_STATE_DEAD); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[0].x+rand()%10, LightofDawnLoc[0].y+rand()%10, LightofDawnLoc[0].z); } JumpToNextStep(3000); break; case 44: // make them stand up if (Creature* pTemp = Unit::GetCreature(*me, uiMaxwellGUID)) pTemp->SetStandState(UNIT_STAND_STATE_STAND); if (Creature* pTemp = Unit::GetCreature(*me, uiKorfaxGUID)) pTemp->SetStandState(UNIT_STAND_STATE_STAND); if (Creature* pTemp = Unit::GetCreature(*me, uiEligorGUID)) pTemp->SetStandState(UNIT_STAND_STATE_STAND); JumpToNextStep(1000); break; case 45: DoScriptText(SAY_LIGHT_OF_DAWN52, me); JumpToNextStep(5000); break; case 46: // Darion stand up, "not today" me->SetSpeed(MOVE_RUN, 1.0f); me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); me->SetStandState(UNIT_STAND_STATE_STAND); DoScriptText(SAY_LIGHT_OF_DAWN53, me); SetHoldState(false); // Darion throws sword JumpToNextStep(7000); break; case 47: // Ashbringer rebirth me->SetStandState(UNIT_STAND_STATE_KNEEL); DoScriptText(EMOTE_LIGHT_OF_DAWN15, me); if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) { pTemp->SetStandState(UNIT_STAND_STATE_STAND); pTemp->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_HIGHLORD_TIRION_FORDRING)); pTemp->CastSpell(pTemp, SPELL_REBIRTH_OF_THE_ASHBRINGER, false); } JumpToNextStep(1000); break; case 48: // Show the cleansing effect (dawn of light) //if (GameObject* pGo = me->GetMap()->GetGameObject(uiDawnofLightGUID)) // pGo->SetPhaseMask(128, true); me->SummonGameObject(GO_LIGHT_OF_DAWN, 2283.896f, -5287.914f, 83.066f, 0, 0, 0, 0, 0, 30000); if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) { if (pTemp->HasAura(SPELL_REBIRTH_OF_THE_ASHBRINGER, 0)) pTemp->RemoveAurasDueToSpell(SPELL_REBIRTH_OF_THE_ASHBRINGER); pTemp->CastSpell(pTemp, 41542, false); // workarounds, light expoded, makes it cool pTemp->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); } if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) pTemp->InterruptNonMeleeSpells(false); JumpToNextStep(2500); break; case 49: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN54, pTemp); JumpToNextStep(4000); break; case 50: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) DoScriptText(SAY_LIGHT_OF_DAWN55, pTemp); JumpToNextStep(5000); break; case 51: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN56, pTemp); JumpToNextStep(1000); break; case 52: // Tiron charges if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) { DoScriptText(EMOTE_LIGHT_OF_DAWN16, pTemp); pTemp->CastSpell(pTemp, SPELL_TIRION_CHARGE, false); // jumping charge pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); pTemp->SetSpeed(MOVE_RUN, 3.0f); // workarounds, make Tirion still running pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[2].x, LightofDawnLoc[2].y, LightofDawnLoc[2].z); if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) pTemp->Relocate(LightofDawnLoc[28].x, LightofDawnLoc[28].y, LightofDawnLoc[28].z); // workarounds, he should kick back by Tirion, but here we relocate him } JumpToNextStep(1500); break; case 53: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) DoScriptText(SAY_LIGHT_OF_DAWN57, pTemp); JumpToNextStep(1000); break; case 54: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) { pTemp->SetSpeed(MOVE_RUN, 1.0f); me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[29].x, LightofDawnLoc[29].y, LightofDawnLoc[29].z); // 26 } JumpToNextStep(4000); break; case 55: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) pTemp->SetStandState(UNIT_STAND_STATE_KNEEL); JumpToNextStep(2000); break; case 56: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) pTemp->SetStandState(UNIT_STAND_STATE_STAND); JumpToNextStep(1500); break; case 57: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) DoScriptText(SAY_LIGHT_OF_DAWN58, pTemp); JumpToNextStep(10000); break; case 58: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) DoScriptText(SAY_LIGHT_OF_DAWN59, pTemp); JumpToNextStep(10000); break; case 59: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) pTemp->CastSpell(pTemp, SPELL_TELEPORT_VISUAL, false); if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) // Tirion runs to Darion { pTemp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); pTemp->SetSpeed(MOVE_RUN, 1.0f); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[6].x, LightofDawnLoc[6].y, LightofDawnLoc[6].z); } JumpToNextStep(2500); break; case 60: if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) // Lich king disappears here { DoScriptText(EMOTE_LIGHT_OF_DAWN17, pTemp); pTemp->Kill(pTemp); } JumpToNextStep(10000); break; case 61: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN60, pTemp); JumpToNextStep(3000); break; case 62: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) { pTemp->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[7].x, LightofDawnLoc[7].y, LightofDawnLoc[7].z); } JumpToNextStep(5500); break; case 63: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) { pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[8].x, LightofDawnLoc[8].y, LightofDawnLoc[8].z); DoScriptText(SAY_LIGHT_OF_DAWN61, pTemp); } JumpToNextStep(15000); break; case 64: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN62, pTemp); JumpToNextStep(7000); break; case 65: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN63, pTemp); JumpToNextStep(10000); break; case 66: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN64, pTemp); JumpToNextStep(11000); break; case 67: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN65, pTemp); JumpToNextStep(10000); break; case 68: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN66, pTemp); JumpToNextStep(8000); break; case 69: if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN67, pTemp); JumpToNextStep(10000); break; case 70: me->SetStandState(UNIT_STAND_STATE_STAND); DoScriptText(SAY_LIGHT_OF_DAWN68, me); JumpToNextStep(10000); break; case 71: //if (GameObject* pGo = me->GetMap()->GetGameObject(uiDawnofLightGUID)) // Turn off dawn of light // pGo->SetPhaseMask(0, true); { Map *map = me->GetMap(); // search players with in 50 yards for quest credit Map::PlayerList const &PlayerList = map->GetPlayers(); if (!PlayerList.isEmpty()) { for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) if (i->getSource()->isAlive() && me->IsWithinDistInMap(i->getSource(), 50)) i->getSource()->CastSpell(i->getSource(), SPELL_THE_LIGHT_OF_DAWN_Q, false); } } me->SetVisible(false); // respawns another Darion for quest turn in me->SummonCreature(NPC_HIGHLORD_DARION_MOGRAINE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 180000); JumpToNextStep(1000); break; case 72: SetHoldState(false); // Escort ends JumpToNextStep(25000); break; case 73: if (Creature* pTemp = Unit::GetCreature(*me, uiKoltiraGUID)) pTemp->DespawnOrUnsummon(); if (Creature* pTemp = Unit::GetCreature(*me, uiOrbazGUID)) pTemp->DespawnOrUnsummon(); if (Creature* pTemp = Unit::GetCreature(*me, uiThassarianGUID)) pTemp->DespawnOrUnsummon(); if (Creature* pTemp = Unit::GetCreature(*me, uiLichKingGUID)) pTemp->DespawnOrUnsummon(); me->DespawnOrUnsummon(); break; } } else uiPhase_timer -= diff; } // ******* During battle ***************************************************************** else { if (uiAnti_magic_zone <= diff) { DoCast(me, SPELL_ANTI_MAGIC_ZONE1); uiAnti_magic_zone = 25000 + rand()%5000; } else uiAnti_magic_zone -= diff; if (uiDeath_strike <= diff) { DoCast(me->getVictim(), SPELL_DEATH_STRIKE); uiDeath_strike = 5000 + rand()%5000; } else uiDeath_strike -= diff; if (uiDeath_embrace <= diff) { DoCast(me->getVictim(), SPELL_DEATH_EMBRACE); uiDeath_embrace = 5000 + rand()%5000; } else uiDeath_embrace -= diff; if (uiIcy_touch <= diff) { DoCast(me->getVictim(), SPELL_ICY_TOUCH1); uiIcy_touch = 5000 + rand()%5000; } else uiIcy_touch -= diff; if (uiUnholy_blight <= diff) { DoCast(me->getVictim(), SPELL_UNHOLY_BLIGHT); uiUnholy_blight = 5000 + rand()%5000; } else uiUnholy_blight -= diff; if (uiFight_speech <= diff) { DoScriptText(RAND(SAY_LIGHT_OF_DAWN09, SAY_LIGHT_OF_DAWN10, SAY_LIGHT_OF_DAWN11, SAY_LIGHT_OF_DAWN12, SAY_LIGHT_OF_DAWN13, SAY_LIGHT_OF_DAWN14, SAY_LIGHT_OF_DAWN15, SAY_LIGHT_OF_DAWN16, SAY_LIGHT_OF_DAWN17, SAY_LIGHT_OF_DAWN18, SAY_LIGHT_OF_DAWN19, SAY_LIGHT_OF_DAWN20, SAY_LIGHT_OF_DAWN21, SAY_LIGHT_OF_DAWN22, SAY_LIGHT_OF_DAWN23, SAY_LIGHT_OF_DAWN24), me); uiFight_speech = 15000 + rand()%5000; } else uiFight_speech -= diff; // Check spawns if (uiSpawncheck <= diff) { SpawnNPC(); uiSpawncheck = 1000; } else uiSpawncheck -= diff; // Check targets if (uiTargetcheck <= diff) { for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) NPCChangeTarget(uiGhoulGUID[i]); for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) NPCChangeTarget(uiWarriorGUID[i]); for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i) NPCChangeTarget(uiAbominationGUID[i]); for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i) NPCChangeTarget(uiBehemothGUID[i]); NPCChangeTarget(uiKoltiraGUID); NPCChangeTarget(uiOrbazGUID); NPCChangeTarget(uiThassarianGUID); uiTargetcheck = 10000; } else uiTargetcheck -= diff; // Battle end if (uiFight_duration <= diff + 5000) { if (!uiTirionGUID) if (Unit* pTemp = me->SummonCreature(NPC_HIGHLORD_TIRION_FORDRING, LightofDawnLoc[0].x, LightofDawnLoc[0].y, LightofDawnLoc[0].z, 1.528f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000)) { pTemp->setFaction(me->getFaction()); pTemp->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_UNEQUIP)); DoScriptText(SAY_LIGHT_OF_DAWN25, pTemp); uiTirionGUID = pTemp->GetGUID(); } } if (uiFight_duration <= diff) { bIsBattle = false; uiFight_duration = 300000; if (me->HasAura(SPELL_THE_MIGHT_OF_MOGRAINE, 0)) me->RemoveAurasDueToSpell(SPELL_THE_MIGHT_OF_MOGRAINE); me->RemoveAllAuras(); me->DeleteThreatList(); me->CombatStop(true); me->InterruptNonMeleeSpells(false); me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); for (uint8 i = 0; i < ENCOUNTER_DEFENDER_NUMBER; ++i) DespawnNPC(uiDefenderGUID[i]); for (uint8 i = 0; i < ENCOUNTER_EARTHSHATTER_NUMBER; ++i) DespawnNPC(uiEarthshatterGUID[i]); for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i) DespawnNPC(uiAbominationGUID[i]); for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i) DespawnNPC(uiBehemothGUID[i]); for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) DespawnNPC(uiGhoulGUID[i]); for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) DespawnNPC(uiWarriorGUID[i]); if (Creature* pTemp = Unit::GetCreature(*me, uiKorfaxGUID)) { pTemp->RemoveAllAuras(); pTemp->DeleteThreatList(); pTemp->CombatStop(true); pTemp->AttackStop(); pTemp->setFaction(me->getFaction()); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[9].x, LightofDawnLoc[9].y, LightofDawnLoc[9].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiMaxwellGUID)) { pTemp->RemoveAllAuras(); pTemp->DeleteThreatList(); pTemp->CombatStop(true); pTemp->AttackStop(); pTemp->setFaction(me->getFaction()); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[12].x, LightofDawnLoc[12].y, LightofDawnLoc[12].z); } if (Creature* pTemp = Unit::GetCreature(*me, uiEligorGUID)) { pTemp->RemoveAllAuras(); pTemp->DeleteThreatList(); pTemp->CombatStop(true); pTemp->AttackStop(); pTemp->setFaction(me->getFaction()); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[15].x, LightofDawnLoc[15].y, LightofDawnLoc[15].z); } DespawnNPC(uiRayneGUID); if (Creature* pTemp = Unit::GetCreature(*me, uiKoltiraGUID)) { pTemp->RemoveAllAuras(); pTemp->DeleteThreatList(); pTemp->CombatStop(true); pTemp->AttackStop(); pTemp->setFaction(me->getFaction()); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[18].x, LightofDawnLoc[18].y, LightofDawnLoc[18].z); pTemp->CastSpell(pTemp, SPELL_THE_LIGHT_OF_DAWN, false); } if (Creature* pTemp = Unit::GetCreature(*me, uiOrbazGUID)) DoScriptText(EMOTE_LIGHT_OF_DAWN04, pTemp); if (Creature* pTemp = Unit::GetCreature(*me, uiThassarianGUID)) { pTemp->RemoveAllAuras(); pTemp->DeleteThreatList(); pTemp->CombatStop(true); pTemp->AttackStop(); pTemp->setFaction(me->getFaction()); pTemp->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); pTemp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[20].x, LightofDawnLoc[20].y, LightofDawnLoc[20].z); pTemp->CastSpell(pTemp, SPELL_THE_LIGHT_OF_DAWN, false); } if (Creature* pTemp = Unit::GetCreature(*me, uiTirionGUID)) DoScriptText(SAY_LIGHT_OF_DAWN26, pTemp); SetHoldState(false); } else uiFight_duration -= diff; DoMeleeAttackIfReady(); } } void JumpToNextStep(uint32 uiTimer) { uiPhase_timer = uiTimer; ++uiStep; } void NPCChangeTarget(uint64 ui_GUID) { if (Creature* pTemp = Unit::GetCreature(*me, ui_GUID)) if (pTemp->isAlive()) if (Unit* pTarger = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (pTarger->isAlive()) { // pTemp->DeleteThreatList(); pTemp->AddThreat(pTarger, 0.0f); pTemp->AI()->AttackStart(pTarger); pTemp->SetInCombatWith(pTarger); pTarger->SetInCombatWith(pTemp); // pTemp->GetMotionMaster()->MoveChase(pTarger, 20.0f); } } void SpawnNPC() { Unit* pTemp = NULL; // Death for (uint8 i = 0; i < ENCOUNTER_GHOUL_NUMBER; ++i) { pTemp = Unit::GetCreature(*me, uiGhoulGUID[i]); if (!pTemp) { pTemp = me->SummonCreature(NPC_ACHERUS_GHOUL, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->setFaction(2084); uiGhoulGUID[i] = pTemp->GetGUID(); } } for (uint8 i = 0; i < ENCOUNTER_ABOMINATION_NUMBER; ++i) { pTemp = Unit::GetCreature(*me, uiAbominationGUID[i]); if (!pTemp) { pTemp = me->SummonCreature(NPC_WARRIOR_OF_THE_FROZEN_WASTES, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->setFaction(2084); uiAbominationGUID[i] = pTemp->GetGUID(); } } for (uint8 i = 0; i < ENCOUNTER_WARRIOR_NUMBER; ++i) { pTemp = Unit::GetCreature(*me, uiWarriorGUID[i]); if (!pTemp) { pTemp = me->SummonCreature(NPC_RAMPAGING_ABOMINATION, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->setFaction(2084); uiWarriorGUID[i] = pTemp->GetGUID(); } } for (uint8 i = 0; i < ENCOUNTER_BEHEMOTH_NUMBER; ++i) { pTemp = Unit::GetCreature(*me, uiBehemothGUID[i]); if (!pTemp) { pTemp = me->SummonCreature(NPC_FLESH_BEHEMOTH, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->setFaction(2084); uiBehemothGUID[i] = pTemp->GetGUID(); } } // Dawn for (uint8 i = 0; i < ENCOUNTER_DEFENDER_NUMBER; ++i) { pTemp = Unit::GetCreature(*me, uiDefenderGUID[i]); if (!pTemp) { pTemp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->setFaction(2089); me->AddThreat(pTemp, 0.0f); uiDefenderGUID[i] = pTemp->GetGUID(); } } for (uint8 i = 0; i < ENCOUNTER_EARTHSHATTER_NUMBER; ++i) { pTemp = Unit::GetCreature(*me, uiEarthshatterGUID[i]); if (!pTemp) { pTemp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->setFaction(2089); me->AddThreat(pTemp, 0.0f); uiEarthshatterGUID[i] = pTemp->GetGUID(); } } pTemp = Unit::GetCreature(*me, uiKorfaxGUID); if (!pTemp) { pTemp = me->SummonCreature(NPC_KORFAX_CHAMPION_OF_THE_LIGHT, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000); pTemp->setFaction(2089); me->AddThreat(pTemp, 0.0f); uiKorfaxGUID = pTemp->GetGUID(); } pTemp = Unit::GetCreature(*me, uiMaxwellGUID); if (!pTemp) { pTemp = me->SummonCreature(NPC_LORD_MAXWELL_TYROSUS, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000); pTemp->setFaction(2089); me->AddThreat(pTemp, 0.0f); uiMaxwellGUID = pTemp->GetGUID(); } pTemp = Unit::GetCreature(*me, uiEligorGUID); if (!pTemp) { pTemp = me->SummonCreature(NPC_COMMANDER_ELIGOR_DAWNBRINGER, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 600000); pTemp->setFaction(2089); me->AddThreat(pTemp, 0.0f); uiEligorGUID = pTemp->GetGUID(); } pTemp = Unit::GetCreature(*me, uiRayneGUID); if (!pTemp) { pTemp = me->SummonCreature(NPC_RAYNE, LightofDawnLoc[0].x+rand()%30, LightofDawnLoc[0].y+rand()%30, LightofDawnLoc[0].z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000); pTemp->setFaction(2089); me->AddThreat(pTemp, 0.0f); uiRayneGUID = pTemp->GetGUID(); } } void DespawnNPC(uint64 pGUID) { if (Creature* pTemp = Unit::GetCreature(*me, pGUID)) if (pTemp->isAlive()) { pTemp->SetVisible(false); pTemp->Kill(pTemp); } } }; }; /*###### ## npc the lich king in dawn of light ######*/ class npc_the_lich_king_tirion_dawn : public CreatureScript { public: npc_the_lich_king_tirion_dawn() : CreatureScript("npc_the_lich_king_tirion_dawn") { } CreatureAI* GetAI(Creature* creature) const { return new npc_the_lich_king_tirion_dawnAI (creature); } struct npc_the_lich_king_tirion_dawnAI : public ScriptedAI { npc_the_lich_king_tirion_dawnAI(Creature* creature) : ScriptedAI(creature) { Reset(); } void Reset() {} void AttackStart(Unit* /*who*/) {} // very sample, just don't make them aggreesive void UpdateAI(const uint32 /*diff*/) {} void JustDied(Unit* /*killer*/) {} }; }; void AddSC_the_scarlet_enclave_c5() { new npc_highlord_darion_mograine(); new npc_the_lich_king_tirion_dawn(); }