Пример #1
0
        void Reset()
        {
            m_bIsChangingStance = false;
            m_uiChargingStatus = 0;
            m_uiCharge_Timer = 1000;
            m_uiChangeStance_Timer = 20000 + rand()%5000;
            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 (pInstance)
                pInstance->SetData(TYPE_BJARNGRIM, NOT_STARTED);
        }
Пример #2
0
        void Reset() override
        {
            if (canBuff)
                if (!me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE))
                    me->AddAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE, me);

            Initialize();

            for (uint8 i = 0; i < 2; ++i)
            {
                // Something isn't right here - m_auiStormforgedLieutenantGUID is never assinged to
                if (Creature* pStormforgedLieutenant = ObjectAccessor::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);

            instance->SetBossState(DATA_BJARNGRIM, NOT_STARTED);
        }
Пример #3
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);
        }
        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();
        }
Пример #5
0
        void UpdateAI(const uint32 diff)
        {
            if (!UpdateVictim())
                return;

            if (m_uiChangeStance_Timer <= diff)
            {
                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:
                        DoScriptText(SAY_DEFENSIVE_STANCE, me);
                        DoScriptText(EMOTE_DEFENSIVE_STANCE, me);
                        DoCast(me, SPELL_DEFENSIVE_STANCE);
                        SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
                        break;
                    case STANCE_BERSERKER:
                        DoScriptText(SAY_BERSEKER_STANCE, me);
                        DoScriptText(EMOTE_BERSEKER_STANCE, me);
                        DoCast(me, SPELL_BERSEKER_STANCE);
                        SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SWORD, EQUIP_NO_CHANGE);
                        break;
                    case STANCE_BATTLE:
                        DoScriptText(SAY_BATTLE_STANCE, me);
                        DoScriptText(EMOTE_BATTLE_STANCE, me);
                        DoCast(me, SPELL_BATTLE_STANCE);
                        SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
                        break;
                }

                m_uiChangeStance_Timer = 20000 + rand()%5000;
                return;
            } else m_uiChangeStance_Timer -= diff;

            switch (m_uiStance)
            {
                case STANCE_DEFENSIVE:
                {
                    if (m_uiReflection_Timer <= diff)
                    {
                        DoCast(me, SPELL_SPELL_REFLECTION);
                        m_uiReflection_Timer = 8000 + rand()%1000;
                    } else m_uiReflection_Timer -= diff;

                    if (m_uiKnockAway_Timer <= diff)
                    {
                        DoCast(me, SPELL_KNOCK_AWAY);
                        m_uiKnockAway_Timer = 20000 + rand()%1000;
                    } else m_uiKnockAway_Timer -= diff;

                    if (m_uiPummel_Timer <= diff)
                    {
                        DoCast(me->getVictim(), SPELL_PUMMEL);
                        m_uiPummel_Timer = 10000 + rand()%1000;
                    } else m_uiPummel_Timer -= diff;

                    if (m_uiIronform_Timer <= diff)
                    {
                        DoCast(me, SPELL_IRONFORM);
                        m_uiIronform_Timer = 25000 + rand()%1000;
                    } else m_uiIronform_Timer -= diff;

                    break;
                }
                case STANCE_BERSERKER:
                {
                    float fDist = me->GetExactDist(me->getVictim()->GetPositionX(), me->getVictim()->GetPositionY(), me->getVictim()->GetPositionZ());
                    if (fDist>=8 && fDist<=25)
                        DoCastVictim(SPELL_INTERCEPT);
                    else
                        m_uiIntercept_Timer -= diff;

                    if (m_uiWhirlwind_Timer <= diff)
                    {
                        DoCast(me, SPELL_WHIRLWIND);
                        m_uiWhirlwind_Timer = 10000 + rand()%1000;
                    } else m_uiWhirlwind_Timer -= diff;

                    if (m_uiCleave_Timer <= diff)
                    {
                        DoCast(me->getVictim(), SPELL_CLEAVE);
                        m_uiCleave_Timer = 8000 + rand()%1000;
                    } else m_uiCleave_Timer -= diff;

                    break;
                }
                case STANCE_BATTLE:
                {
                    if (m_uiMortalStrike_Timer <= diff)
                    {
                        DoCast(me->getVictim(), SPELL_MORTAL_STRIKE);
                        m_uiMortalStrike_Timer = 20000 + rand()%1000;
                    } else m_uiMortalStrike_Timer -= diff;

                    if (m_uiSlam_Timer <= diff)
                    {
                        DoCast(me->getVictim(), SPELL_SLAM);
                        m_uiSlam_Timer = 15000 + rand()%1000;
                    } else m_uiSlam_Timer -= diff;

                    break;
                }
            }
            DoMeleeAttackIfReady();
        }