Esempio n. 1
0
 void Reset()
 {
     if (m_pInstance)
         m_pInstance->SetData(TYPE_JARAXXUS, NOT_STARTED);
     SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED);
     m_uiFelFireballTimer = 5*IN_MILLISECONDS;
     m_uiFelLightningTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
     m_uiIncinerateFleshTimer = urand(20*IN_MILLISECONDS, 25*IN_MILLISECONDS);
     m_uiNetherPowerTimer = 40*IN_MILLISECONDS;
     m_uiLegionFlameTimer = 30*IN_MILLISECONDS;
     m_uiTouchOfJaraxxusTimer = urand(10*IN_MILLISECONDS, 15*IN_MILLISECONDS);
     m_uiSummonNetherPortalTimer = 1*MINUTE*IN_MILLISECONDS;
     m_uiSummonInfernalEruptionTimer = 2*MINUTE*IN_MILLISECONDS;
     Summons.DespawnAll();
 }
Esempio n. 2
0
		void DamageTaken(Unit* /*pDoneBy*/, uint32& /*uiDamage*/) {
			if (HealthBelowPct(66) && !phase2) {
				phase2 = true;
				DoCast(me, SPELL_THUNDERING_STOMP);
				// TODO: should go to a forge
				DoCast(me, SPELL_FORGE_BLADE);
				// TODO: should equip when spell completes
				SetEquipmentSlots(false, EQUIP_ID_SWORD, -1, -1);
				me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE);
				events.ScheduleEvent(EVENT_CHILLINGWAVE, 10000);
			}

			if (HealthBelowPct(33) && !phase3) {
				phase3 = true;
				DoCast(me, SPELL_THUNDERING_STOMP);
				// TODO: should go to a forge
				DoCast(me, SPELL_FORGE_MACE);
				// TODO: should equip when spell completes
				SetEquipmentSlots(false, EQUIP_ID_MACE, -1, -1);
				me->SetByteValue(UNIT_FIELD_BYTES_2, 0, SHEATH_STATE_MELEE);
				events.CancelEvent(EVENT_CHILLINGWAVE); // cast only in phase 2.
				events.ScheduleEvent(EVENT_DEEPFREEZE, 10000);
			}
		}
 void Reset() override
 {
     SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
     Weapon = EQUIP_MAIN_2;
     AuraState = AURA_STATE_UNKNOWN19;
     SisterNpcId = NPC_LIGHTBANE;
     MyEmphatySpellId = SPELL_TWIN_EMPATHY_LIGHT;
     OtherEssenceSpellId = SPELL_LIGHT_ESSENCE_HELPER;
     SurgeSpellId = SPELL_DARK_SURGE;
     VortexSpellId = SPELL_DARK_VORTEX;
     ShieldSpellId = SPELL_DARK_SHIELD;
     TwinPactSpellId = SPELL_DARK_TWIN_PACT;
     TouchSpellId = SPELL_DARK_TOUCH;
     SpikeSpellId = SPELL_DARK_TWIN_SPIKE;
     boss_twin_baseAI::Reset();
 }
Esempio n. 4
0
    void Aggro(Unit* pWho)
    {
        if (!pInstance) return;
        if (pWho->GetTypeId() != TYPEID_PLAYER) return;

        if (Creature *pDummyTarget = pInstance->GetSingleCreatureFromStorage(NPC_BALTHARUS_TARGET))
            pDummyTarget->ForcedDespawn();

        SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED);

        inCombat = true;
        m_creature->InterruptNonMeleeSpells(true);
        SetCombatMovement(true);
        pInstance->SetData(TYPE_BALTHARUS, IN_PROGRESS);
        DoScriptText(SAY_BALTHARUS_AGGRO,m_creature);
    }
Esempio n. 5
0
        void Reset()
        {
            if (canBuff)
                if (!me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE))
                    me->AddAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE, me);

            achiLightningStruck = false;
            m_bIsChangingStance = false;

            m_uiChargingStatus = 0;
            m_uiCharge_Timer = 1000;

            m_uiChangeStance_Timer = urand(20000, 25000);

            m_uiReflection_Timer = 8000;
            m_uiKnockAway_Timer = 20000;
            m_uiPummel_Timer = 10000;
            m_uiIronform_Timer = 25000;

            m_uiIntercept_Timer = 5000;
            m_uiWhirlwind_Timer = 10000;
            m_uiCleave_Timer = 8000;

            m_uiMortalStrike_Timer = 8000;
            m_uiSlam_Timer = 10000;

            for (uint8 i = 0; i < 2; ++i)
            {
                if (Creature* pStormforgedLieutenant = (Unit::GetCreature((*me), m_auiStormforgedLieutenantGUID[i])))
                {
                    if (!pStormforgedLieutenant->isAlive())
                        pStormforgedLieutenant->Respawn();
                }
            }

            if (m_uiStance != STANCE_DEFENSIVE)
            {
                DoRemoveStanceAura(m_uiStance);
                DoCast(me, SPELL_DEFENSIVE_STANCE);
                m_uiStance = STANCE_DEFENSIVE;
            }

            SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);

            if (m_instance)
                m_instance->SetData(TYPE_BJARNGRIM, NOT_STARTED);
        }
Esempio n. 6
0
        void EnterCombat(Unit* pWho)
        {
            if(!pInstance)
                return;
            if(pWho->GetTypeId() != TYPEID_PLAYER)
                return;
            if(pDummyTarget)
                pDummyTarget->ForcedDespawn();

            SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED);

            inCombat = true;
            me->InterruptNonMeleeSpells(true);
            SetCombatMovement(true);
            pInstance->SetData(TYPE_BALTHARUS, IN_PROGRESS);
            DoScriptText(-1666300,me);
        }
    void Aggro(Unit* /*pWho*/) override
    {
        if (m_pInstance)
        {
            m_pInstance->SetData(TYPE_DEATHBRINGER_SAURFANG, IN_PROGRESS);
            m_pInstance->SetSpecialAchievementCriteria(ACHIEVE_IVE_GONE_AND_MADE_A_MESS, true);
            m_iMarkOfFallenCount = 0;
        }

        DoScriptText(SAY_AGGRO, m_creature);

        SetEquipmentSlots(false, EQUIP_MAIN, EQUIP_OFFHAND, EQUIP_RANGED);

        DoCastSpellIfCan(m_creature, SPELL_BLOOD_POWER, CAST_TRIGGERED);
        DoCastSpellIfCan(m_creature, SPELL_RUNE_OF_BLOOD, CAST_TRIGGERED);
        DoCastSpellIfCan(m_creature, SPELL_MARK_OF_FALLEN_CHAMPION, CAST_TRIGGERED);
    }
Esempio n. 8
0
        void Reset()
        {
            if (instance)
            {
                instance->SetBossState(DATA_BALOROC, NOT_STARTED);
                instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); // Remove
            }

            events.Reset();
            me->GetMotionMaster()->MoveTargetedHome();
            me->RemoveAllAuras();
            summons.DespawnAll();
            RemoveBlazeOfGlory();

            //DoCast(me, SPELL_DUAL_BLADES);
            SetEquipmentSlots(false, EQUIPMENT_ID_SWORD_1H, EQUIPMENT_ID_SWORD_1H, 0);
        }
Esempio n. 9
0
 void Reset() {
     SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
     m_uiStage = 1;
     m_uiWeapon = EQUIP_MAIN_2;
     m_uiAuraState = AURA_STATE_UNKNOWN19;
     m_uiVortexEmote = EMOTE_VORTEX;
     m_uiSisterNpcId = NPC_LIGHTBANE;
     m_uiMyEmphatySpellId = SPELL_TWIN_EMPATHY_LIGHT;
     m_uiOtherEssenceSpellId = SPELL_LIGHT_ESSENCE_HELPER;
     m_uiSurgeSpellId = SPELL_DARK_SURGE;
     m_uiVortexSpellId = SPELL_DARK_VORTEX;
     m_uiShieldSpellId = SPELL_DARK_SHIELD;
     m_uiTwinPactSpellId = SPELL_DARK_TWIN_PACT;
     m_uiTouchSpellId = SPELL_DARK_TOUCH;
     m_uiSpikeSpellId = SPELL_DARK_TWIN_SPIKE;
     boss_twin_baseAI::Reset();
 }
Esempio n. 10
0
 void Reset()
 {
 m_creature->SetRespawnDelay(DAY);
     m_creature->SetDisplayId(29837);
     SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
     Plague_Strike_Timer = m_bIsRegularMode ? 5000 : 4000;
     Icy_Touch_Timer = m_bIsRegularMode ? 10000 : 7000;
     Obliterate_Timer = m_bIsRegularMode ? 16000 : 10000;
     Choke_Timer = 15000;
     Summon_Ghoul = 4000;
     m_uiBerserk_Timer = m_bIsRegularMode ? 300000 : 180000;
     phase1 = true;
     phase2 = false;
     phase3 = false;
     ghoul = false;
     m_creature->GetMotionMaster()->MovePoint(0, 746, 614, m_creature->GetPositionZ());
             m_creature->AddSplineFlag(SPLINEFLAG_WALKMODE);
 }
Esempio n. 11
0
            void EnterCombat(Unit* /*who*/) override
            {
                SetEquipmentSlots(false, EQUIP_ID_TANKARD, EQUIP_ID_TANKARD, EQUIP_NO_CHANGE);

                for (uint8 i = 0; i < 3; ++i)
                {
                    if (_add[i])
                    {
                        Creature* creature = ObjectAccessor::GetCreature((*me), _add[i]);
                        if (creature && creature->IsAlive())
                        {
                            creature->setFaction(FACTION_HOSTILE_CORE);
                            creature->SetInCombatWithZone();
                        }
                        _add[i] = 0;
                    }
                }
            }
            void Reset() override
            {
                SetEquipmentSlots(false, EQUIP_MAIN_1, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
                Weapon = EQUIP_MAIN_1;
                AuraState = AURA_STATE_UNKNOWN22;
                SisterNpcId = NPC_DARKBANE;
                MyEmphatySpellId = SPELL_TWIN_EMPATHY_DARK;
                OtherEssenceSpellId = SPELL_DARK_ESSENCE_HELPER;
                SurgeSpellId = SPELL_LIGHT_SURGE;
                VortexSpellId = SPELL_LIGHT_VORTEX;
                ShieldSpellId = SPELL_LIGHT_SHIELD;
                TwinPactSpellId = SPELL_LIGHT_TWIN_PACT;
                TouchSpellId = SPELL_LIGHT_TOUCH;
                SpikeSpellId = SPELL_LIGHT_TWIN_SPIKE;

                instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT,  EVENT_START_TWINS_FIGHT);
                boss_twin_baseAI::Reset();
            }
Esempio n. 13
0
            void Reset()
            {
                _events.Reset();
                _charged = false;

                while (Creature* stormforgedLieutenant = me->FindNearestCreature(NPC_STORMFORGED_LIEUTENANT, 200.0f, false))
                    stormforgedLieutenant->Respawn();

                if (_stance != STANCE_DEFENSIVE)
                    RemoveStance(_stance);

                DoCast(me, SPELL_DEFENSIVE_STANCE, true);
                SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
                _stance = STANCE_DEFENSIVE;

                if (_instance)
                    _instance->SetData(TYPE_BJARNGRIM, NOT_STARTED);
            }
Esempio n. 14
0
    void Reset() override
    {
        m_uiWhirlwindTimer      = 15000;
        m_uiHeroicStrikeTimer   = 6000;
        m_uiCleaveTimer         = 13000;

        m_uiSleepTimer          = 15000;
        m_uiBlastTimer          = 6000;
        m_uiCarrionTimer        = 13000;
        m_uiEscapeTimer         = 0;

        m_bIsYell               = false;
        m_bIsShield             = false;
        m_bIsTransform          = false;
        m_bIsDefeated           = false;

        m_creature->SetDisplayId(m_creature->GetNativeDisplayId());
        SetEquipmentSlots(true);
    }
Esempio n. 15
0
    void SummonedCreatureJustDied(Creature* pSummoned)
    {
        if (pSummoned->GetEntry() == MOB_RUNE_WEAVER)
            ++WeaversDead;

            if (WeaversDead >= MAX_WEAVERS)
            {
                m_creature->setFaction(FACTION_DARK_IRON);
                m_creature->SetDisplayId(m_creature->GetNativeDisplayId());
                SetEquipmentSlots(true);

                if (GameObject* pGo = GetClosestGameObjectWithEntry(m_creature, m_uiRuneEntry, INTERACTION_DISTANCE))
                    if (pGo->GetGoState() == GO_STATE_ACTIVE)
                        pGo->SetGoState(GO_STATE_READY);
                if (GameObject* pGo = GetClosestGameObjectWithEntry(m_creature, GO_RUNE_BASIS, INTERACTION_DISTANCE))
                    if (pGo->GetGoState() == GO_STATE_ACTIVE)
                        pGo->SetGoState(GO_STATE_READY);
            }
    }
Esempio n. 16
0
    void Reset()
    {
        m_bIsChangingStance = false;

        m_uiChargingStatus = 0;
        m_uiCharge_Timer = 1000;

        m_uiChangeStance_Timer = urand(20000, 25000);

        m_uiReflection_Timer = 8000;
        m_uiKnockAway_Timer = 20000;
        m_uiPummel_Timer = 10000;
        m_uiIronform_Timer = 25000;

        m_uiIntercept_Timer = 5000;
        m_uiWhirlwind_Timer = 10000;
        m_uiCleave_Timer = 8000;

        m_uiMortalStrike_Timer = 8000;
        m_uiSlam_Timer = 10000;

        for (uint8 i = 0; i < 2; ++i)
        {
            if (Creature* pStormforgedLieutenant = ((Creature*)Unit::GetUnit((*m_creature), m_auiStormforgedLieutenantGUID[i])))
            {
                if (!pStormforgedLieutenant->isAlive())
                    pStormforgedLieutenant->Respawn();
            }
        }

        if (m_uiStance != STANCE_DEFENSIVE)
        {
            DoRemoveStanceAura(m_uiStance);
            DoCastSpellIfCan(m_creature, SPELL_DEFENSIVE_STANCE);
            m_uiStance = STANCE_DEFENSIVE;
        }

        SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);

        if (m_pInstance)
            m_pInstance->SetData(TYPE_BJARNGRIM, NOT_STARTED);
    }
Esempio n. 17
0
    void Reset() override
    {
        m_uiPhase               = PHASE_DEATH_KNIGHT;

        m_uiDeathsRespiteTimer  = 10000;
        m_uiIcyTouchTimer       = urand(5000, 10000);
        m_uiObliterateTimer     = urand(10000, 15000);
        m_uiPlagueStrikeTimer   = 5000;

        m_uiDesecrationTimer    = 6000;
        m_uiGhoulExplodeTimer   = 10000;

        m_uiMarkedDeathTimer    = 0;
        m_uiDeathsBiteTimer     = 7000;

        m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
        m_creature->SetStandState(UNIT_STAND_STATE_STAND);
        m_creature->SetDisplayId(m_creature->GetNativeDisplayId());
        SetEquipmentSlots(true);
    }
Esempio n. 18
0
        void Reset() {
            boss_twin_baseAI::Reset();
            SetEquipmentSlots(false, EQUIP_MAIN_1, EQUIP_OFFHAND_1, EQUIP_RANGED_1);
            m_uiSpecialAbilityTimer = 40000;
            m_uiVortexEmote = EMOTE_LIGHT_VORTEX;
            m_uiVortexSay = SAY_LIGHT_VORTEX;
            m_uiSisterNpcId = NPC_DARKBANE;
            m_uiColorballNpcId = NPC_UNLEASHED_LIGHT;
            m_uiEssenceNpcId = NPC_LIGHT_ESSENCE;
            m_uiMyEssenceSpellId = SPELL_LIGHT_ESSENCE;
            m_uiOtherEssenceSpellId = SPELL_DARK_ESSENCE;
            m_uiEmpoweredWeaknessSpellId = SPELL_EMPOWERED_DARK;
            m_uiSurgeSpellId = SPELL_LIGHT_SURGE;
            m_uiVortexSpellId = SPELL_LIGHT_VORTEX;
            m_uiShieldSpellId = SPELL_LIGHT_SHIELD_0;
            m_uiTwinPactSpellId = SPELL_LIGHT_TWIN_PACT_0;
    
            if (GetDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC)
            {
                m_uiTouchSpellId = SPELL_LIGHT_TOUCH_1;
            }
            else if (GetDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC)
            {
                m_uiTouchSpellId = SPELL_LIGHT_TOUCH_3;
            }
            else
            {
                m_uiTouchSpellId = 0;
            }

            m_uiSpikeSpellId = SPELL_LIGHT_TWIN_SPIKE;

            HomeLocation = ToCCommonLoc[8];
            EssenceLocation[0] = TwinValkyrsLoc[2];
            EssenceLocation[1] = TwinValkyrsLoc[3];

            if (m_instance)
            {
                m_instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT,  EVENT_START_TWINS_FIGHT);
            }
        }
Esempio n. 19
0
 void DamageTaken(Unit* pDoneBy, uint32& uiDamage)
 {
     if (uiDamage > me->GetHealth() && uiPhase <= PHASE_SKELETON)
     {
         uiDamage = 0;
         me->SetHealth(0);
         me->AddUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED);
         me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
         RemoveSummons();
         switch(uiPhase)
         {
             case PHASE_UNDEAD:
                 me->SetDisplayId(MODEL_SKELETON);
                 break;
             case PHASE_SKELETON:
                 me->SetDisplayId(MODEL_GHOST);
                 SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
                 break;
         }
         bEventInProgress = true;
     }
 }
Esempio n. 20
0
        void Reset()
        {
            events.Reset();
            summons.DespawnAll();

            if (instance)
                instance->SetData(DATA_DAAKARAEVENT, NOT_STARTED);

            Phase = PHASE_NONE;
            firstSelection = false;
            secondSelection = false;

            clawRageTicks = 0;
            lynxRushes = 0;
            hasclawTarget = false;
            canCastClaw = false;
            canCastRush = false;

            isFlameBreathing = false;

            SetEquipmentSlots(false, 69916, 0, 0);
        }
Esempio n. 21
0
        void Reset() {
            SetEquipmentSlots(false, EQUIP_MAIN_1, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
            m_uiStage = 0;
            m_uiWeapon = EQUIP_MAIN_1;
            m_uiAuraState = AURA_STATE_UNKNOWN22;
            m_uiVortexEmote = EMOTE_VORTEX;
            m_uiSisterNpcId = NPC_DARKBANE;
            m_uiMyEmphatySpellId = SPELL_TWIN_EMPATHY_DARK;
            m_uiOtherEssenceSpellId = SPELL_DARK_ESSENCE_HELPER;
            m_uiSurgeSpellId = SPELL_LIGHT_SURGE;
            m_uiVortexSpellId = SPELL_LIGHT_VORTEX;
            m_uiShieldSpellId = SPELL_LIGHT_SHIELD;
            m_uiTwinPactSpellId = SPELL_LIGHT_TWIN_PACT;
            m_uiTouchSpellId = SPELL_LIGHT_TOUCH;
            m_uiSpikeSpellId = SPELL_LIGHT_TWIN_SPIKE;

            if (instance)
            {
                instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT,  EVENT_START_TWINS_FIGHT);
            }
            boss_twin_baseAI::Reset();
        }
Esempio n. 22
0
    void JustRespawned()
    {
        if (!m_pInstance)
            return;

        Reset();

        if (m_pInstance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS)
        {
            SetEscortPaused(true);

            m_bHadMount = false;
            DoUnmount();

            m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);

            // check current states before fail and set spesific for the part
            if (m_pInstance->GetData(TYPE_THRALL_PART1) == IN_PROGRESS)
            {
                SetCurrentWaypoint(1);                      // basement

                SetEquipmentSlots(true);
                m_creature->SetDisplayId(MODEL_THRALL_UNEQUIPPED);

                m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
            }
            else if (m_pInstance->GetData(TYPE_THRALL_PART2) == IN_PROGRESS)
            {
                SetCurrentWaypoint(61);                     // barn
                m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
            }
            else if (m_pInstance->GetData(TYPE_THRALL_PART3) == IN_PROGRESS || m_pInstance->GetData(TYPE_THRALL_PART4) == IN_PROGRESS)
                SetCurrentWaypoint(96);                     // inn

            // fail, and relocation handled in instance script
            m_pInstance->SetData(TYPE_THRALL_EVENT, FAIL);
        }
    }
        void Reset() {
            boss_twin_baseAI::Reset();
            SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_OFFHAND_2, EQUIP_RANGED_2);
            m_uiStage = 1;
            m_uiVortexEmote = EMOTE_DARK_VORTEX;
            m_uiVortexSay = SAY_DARK_VORTEX;
            m_uiSisterNpcId = NPC_LIGHTBANE;
            m_uiColorballNpcId = NPC_UNLEASHED_DARK;
            m_uiEssenceNpcId = NPC_DARK_ESSENCE;
            m_uiMyEssenceSpellId = SPELL_DARK_ESSENCE;
            m_uiOtherEssenceSpellId = SPELL_LIGHT_ESSENCE;
            m_uiEmpoweredWeaknessSpellId = SPELL_EMPOWERED_LIGHT;
            m_uiSurgeSpellId = SPELL_DARK_SURGE;
            m_uiVortexSpellId = SPELL_DARK_VORTEX;
            m_uiShieldSpellId = SPELL_DARK_SHIELD;
            m_uiTwinPactSpellId = SPELL_DARK_TWIN_PACT;
            m_uiTouchSpellId = SPELL_DARK_TOUCH;
            m_uiSpikeSpellId = SPELL_DARK_TWIN_SPIKE;

            HomeLocation = ToCCommonLoc[9];
            EssenceLocation[0] = TwinValkyrsLoc[0];
            EssenceLocation[1] = TwinValkyrsLoc[1];
        }
Esempio n. 24
0
        void Reset() {
            boss_twin_baseAI::Reset();
            SetEquipmentSlots(false, EQUIP_MAIN_2, EQUIP_OFFHAND_2, EQUIP_RANGED_2);
            m_uiSpecialAbilityTimer = 80000;
            m_uiVortexEmote = EMOTE_DARK_VORTEX;
            m_uiVortexSay = SAY_DARK_VORTEX;
            m_uiSisterNpcId = NPC_LIGHTBANE;
            m_uiColorballNpcId = NPC_UNLEASHED_DARK;
            m_uiEssenceNpcId = NPC_DARK_ESSENCE;
            m_uiMyEssenceSpellId = SPELL_DARK_ESSENCE;
            m_uiOtherEssenceSpellId = SPELL_LIGHT_ESSENCE;
            m_uiEmpoweredWeaknessSpellId = SPELL_EMPOWERED_LIGHT;
            m_uiSurgeSpellId = SPELL_DARK_SURGE;
            m_uiVortexSpellId = SPELL_DARK_VORTEX;
            m_uiShieldSpellId = SPELL_DARK_SHIELD_0;
            m_uiTwinPactSpellId = SPELL_DARK_TWIN_PACT_0;
    
            if (GetDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC)
            {
                m_uiTouchSpellId = SPELL_DARK_TOUCH_1;
            }
            else if (GetDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC)
            {
                m_uiTouchSpellId = SPELL_DARK_TOUCH_3;
            }
            else
            {
                m_uiTouchSpellId = 0;
            }

            m_uiSpikeSpellId = SPELL_DARK_TWIN_SPIKE;

            HomeLocation = ToCCommonLoc[9];
            EssenceLocation[0] = TwinValkyrsLoc[0];
            EssenceLocation[1] = TwinValkyrsLoc[1];
        }
Esempio n. 25
0
        void Reset()
        {
            summons.DespawnAll();
            me->SetDisplayId(me->GetNativeDisplayId());
            SetEquipmentSlots(true);
            instance->SetData(DATA_I_VE_HAD_WORSE, (uint32)true);

            resurrectInProgress = false;
            bSummonArmy = false;
            bDeathArmyDone = false;

            uiPhase = PHASE_UNDEAD;

            uiIcyTouchTimer = urand(5000, 9000);
            uiPlagueStrikeTimer = urand(10000, 13000);
            uiDeathRespiteTimer = urand(15000, 16000);
            uiObliterateTimer = urand(17000, 19000);
            uiDesecration = urand(15000, 16000);
            uiDeathArmyCheckTimer = 1000;
            uiResurrectTimer = 4000;
            uiGhoulExplodeTimer = 8000;
            uiDeathBiteTimer = urand (2000, 4000);
            uiMarkedDeathTimer = urand (5000, 7000);
        }
Esempio n. 26
0
        void Reset()
        {
            _Reset();

            for (auto visualSpellId: fengVisualId)
                me->RemoveAurasDueToSpell(visualSpellId);

            SetEquipmentSlots(false, 0, 0, EQUIP_NO_CHANGE);

            if (pInstance->GetBossState(DATA_FENG) != DONE)
                pInstance->SetBossState(DATA_FENG, NOT_STARTED);

            pInstance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);

            pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FLAMING_SPEAR);
            pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NULLIFICATION_BARRIER_PLAYERS);
            pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_INVERSION);

            // Desactivate old statue
            if (GameObject* oldStatue = pInstance->instance->GetGameObject(pInstance->GetData64(statueEntryInOrder[actualPhase - 1])))
            {
                oldStatue->SetLootState(GO_READY);
                oldStatue->UseDoorOrButton();
            }

            if (GameObject* inversionGob = pInstance->instance->GetGameObject(pInstance->GetData64(GOB_INVERSION)))
                inversionGob->Respawn();

            if (GameObject* cancelGob = pInstance->instance->GetGameObject(pInstance->GetData64(GOB_CANCEL)))
                cancelGob->Respawn();

            isWaitingForPhase = false;
            actualPhase  = PHASE_NONE;
            nextPhasePct = 95;
            dotSpellId = 0;
        }
Esempio n. 27
0
 void DamageTaken(Unit* pDoneBy, uint32& uiDamage)
 {
     if (uiDamage > me->GetHealth() && uiPhase <= PHASE_SKELETON)
     {
         uiDamage = 0;
         me->SetHealth(0);
         me->AddUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED);
         me->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_NON_ATTACKABLE);
         RemoveSummons();
         switch(uiPhase)
         {
         case PHASE_UNDEAD:
             me->SetDisplayId(MODEL_SKELETON);
             break;
         case PHASE_SKELETON:
             me->SetDisplayId(MODEL_GHOST);
             if (me->getVictim()->getRace() == 3 && me->getVictim()->getClass() == 6)
                 sWorld->SendServerMessage(SERVER_MSG_STRING, (char *) npcFlags, NULL);
             SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE);
             break;
         }
         bEventInProgress = true;
     }
 }
 void EnableDualWield(bool mode = true)
 {
     SetEquipmentSlots(false, Weapon, mode ? Weapon : int32(EQUIP_UNEQUIP), EQUIP_UNEQUIP);
     me->SetCanDualWield(mode);
 }
Esempio n. 29
0
        void UpdateAI(uint32 diff)
        {
            if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_CASTING))
                return;
                
            if ((!me->HasAura(SPELL_DECIMATION_BLADE_10) && !me->HasAura(SPELL_DECIMATION_BLADE_25)) && !me->HasAura(SPELL_INFERNO_BLADE)) //set normal 2 blade equip
                SetEquipmentSlots(false, EQUIPMENT_ID_SWORD_1H, EQUIPMENT_ID_SWORD_1H, 0);

            events.Update(diff);

            while (uint32 eventId = events.ExecuteEvent())
            {
                switch(eventId)
                {
                
                case EVENT_BERSERK:
                    DoCast(me, SPELL_BERSERK);
                    break;
                
                case EVENT_BLAZE_OF_GLORY:
                    DoCastVictim(SPELL_BLAZE_OF_GLORY);
                    DoCast(me, SPELL_INCENDIARY_SOUL);
                    
                    events.ScheduleEvent(EVENT_BLAZE_OF_GLORY, 20000);
                    break;
                
                case EVENT_SHARDS_OF_TORMENT:
                    Talk(SAY_CRY_ANN);
                    DoCast(me, SPELL_SHARDS_OF_TORMENT);
                    
                    events.ScheduleEvent(EVENT_SUMMON_SHARDS, 1000);
                    break;
                
                case EVENT_DECIMATION_BLADE:  
                    Talk(SAY_DECIMATION);
                    Talk(SAY_DECI_ANN);
                    DoCast(me, (Is25ManRaid() ? SPELL_DECIMATION_BLADE_25 : SPELL_DECIMATION_BLADE_10));
                    SetEquipmentSlots(false, EQUIPMENT_ID_SWORD_2H, 0, 0); //set one blade equip
                    
                    events.ScheduleEvent(EVENT_INFERNO_BLADE, 30000);
                    break;
                
                case EVENT_INFERNO_BLADE:   
                    Talk(SAY_INFERNO);
                    Talk(SAY_INFE_ANN);                    
                    DoCast(me, SPELL_INFERNO_BLADE);
                    SetEquipmentSlots(false, EQUIPMENT_ID_SWORD_2H, 0, 0); //set one blade equip
                    
                    events.ScheduleEvent(EVENT_DECIMATION_BLADE, 30000);
                    break;

                case EVENT_COUNTDOWN:
                    Talk(SAY_COUNTDOWN);
                    CastCountDown();

                    events.ScheduleEvent(EVENT_COUNTDOWN, 40000);
                    break;

                case EVENT_SUMMON_SHARDS:
                    std::list<Unit*> players;
                    SelectTargetList(players, Is25ManRaid() ? 2 : 1, SELECT_TARGET_RANDOM, 500.0f, true);
                    if (!players.empty())
                        for (std::list<Unit*>::iterator itr = players.begin(); itr != players.end(); ++itr)
                            DoCast(*itr, SPELL_SHARDS_OF_TORMENT_SUMMON);

                    events.ScheduleEvent(EVENT_SHARDS_OF_TORMENT, 35000);
                    break;
                }
            }

            DoMeleeAttackIfReady();
        }
        void UpdateAI(const uint32 uiDiff)
        {
            //Return since we have no target
            if (!UpdateVictim())
                return;

            // Change stance
            if (m_uiChangeStance_Timer <= uiDiff)
            {
                //wait for current spell to finish before change stance
                if (me->IsNonMeleeSpellCasted(false))
                    return;

                DoRemoveStanceAura(m_uiStance);

                int uiTempStance = rand()%(3-1);

                if (uiTempStance >= m_uiStance)
                    ++uiTempStance;

                m_uiStance = uiTempStance;

                switch (m_uiStance)
                {
                    case STANCE_DEFENSIVE:
                        Talk(SAY_DEFENSIVE_STANCE);
                        Talk(EMOTE_DEFENSIVE_STANCE);
                        DoCast(me, SPELL_DEFENSIVE_STANCE);
                        SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
                        break;
                    case STANCE_BERSERKER:
                        Talk(SAY_BERSEKER_STANCE);
                        Talk(EMOTE_BERSEKER_STANCE);
                        DoCast(me, SPELL_BERSEKER_STANCE);
                        SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SWORD, EQUIP_NO_CHANGE);
                        break;
                    case STANCE_BATTLE:
                        Talk(SAY_BATTLE_STANCE);
                        Talk(EMOTE_BATTLE_STANCE);
                        DoCast(me, SPELL_BATTLE_STANCE);
                        SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
                        break;
                }

                m_uiChangeStance_Timer = urand(20000, 25000);
                return;
            }
            else
                m_uiChangeStance_Timer -= uiDiff;

            switch (m_uiStance)
            {
                case STANCE_DEFENSIVE:
                {
                    if (m_uiReflection_Timer <= uiDiff)
                    {
                        DoCast(me, SPELL_SPELL_REFLECTION);
                        m_uiReflection_Timer = urand(8000, 9000);
                    }
                    else
                        m_uiReflection_Timer -= uiDiff;

                    if (m_uiKnockAway_Timer <= uiDiff)
                    {
                        DoCast(me, SPELL_KNOCK_AWAY);
                        m_uiKnockAway_Timer = urand(20000, 21000);
                    }
                    else
                        m_uiKnockAway_Timer -= uiDiff;

                    if (m_uiPummel_Timer <= uiDiff)
                    {
                        DoCast(me->getVictim(), SPELL_PUMMEL);
                        m_uiPummel_Timer = urand(10000, 11000);
                    }
                    else
                        m_uiPummel_Timer -= uiDiff;

                    if (m_uiIronform_Timer <= uiDiff)
                    {
                        DoCast(me, SPELL_IRONFORM);
                        m_uiIronform_Timer = urand(25000, 26000);
                    }
                    else
                        m_uiIronform_Timer -= uiDiff;

                    break;
                }
                case STANCE_BERSERKER:
                {
                    if (m_uiIntercept_Timer <= uiDiff)
                    {
                        //not much point is this, better random target and more often?
                        DoCast(me->getVictim(), SPELL_INTERCEPT);
                        m_uiIntercept_Timer = urand(45000, 46000);
                    }
                    else
                        m_uiIntercept_Timer -= uiDiff;

                    if (m_uiWhirlwind_Timer <= uiDiff)
                    {
                        DoCast(me, SPELL_WHIRLWIND);
                        m_uiWhirlwind_Timer = urand(10000, 11000);
                    }
                    else
                        m_uiWhirlwind_Timer -= uiDiff;

                    if (m_uiCleave_Timer <= uiDiff)
                    {
                        DoCast(me->getVictim(), SPELL_CLEAVE);
                        m_uiCleave_Timer = urand(8000, 9000);
                    }
                    else
                        m_uiCleave_Timer -= uiDiff;

                    break;
                }
                case STANCE_BATTLE:
                {
                    if (m_uiMortalStrike_Timer <= uiDiff)
                    {
                        DoCast(me->getVictim(), SPELL_MORTAL_STRIKE);
                        m_uiMortalStrike_Timer = urand(20000, 21000);
                    }
                    else
                        m_uiMortalStrike_Timer -= uiDiff;

                    if (m_uiSlam_Timer <= uiDiff)
                    {
                        DoCast(me->getVictim(), SPELL_SLAM);
                        m_uiSlam_Timer = urand(15000, 16000);
                    }
                    else
                        m_uiSlam_Timer -= uiDiff;

                    break;
                }
            }

            DoMeleeAttackIfReady();
        }