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); }
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); }
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(); }
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(); }