void UpdateAI(const uint32 uiDiff) { if (!UpdateVictim()) return; if (!m_bIsPhaseTwo) { if (m_uiShadowWordPain_Timer <= uiDiff) { DoCastVictim( SPELL_SHADOWWORDPAIN); m_uiShadowWordPain_Timer = 15000; } else m_uiShadowWordPain_Timer -= uiDiff; if (m_uiMark_Timer <= uiDiff) { Unit* pMarkedTarget = SelectUnit(SELECT_TARGET_RANDOM, 0); if (pMarkedTarget) { DoCast(pMarkedTarget, SPELL_MARK); MarkedTargetGUID = pMarkedTarget->GetGUID(); } else error_log("OSCR: boss_arlokk could not acquire pMarkedTarget."); m_uiMark_Timer = 15000; } else m_uiMark_Timer -= uiDiff; } else { // Thrash Timer if (m_uiThrash_Timer <= uiDiff) { DoCast(me, SPELL_THRASH); m_uiThrash_Timer = urand(5000, 9000); } else m_uiThrash_Timer -= uiDiff; // Ravage Timer if (m_uiRavage_Timer <= uiDiff) { DoCastVictim( SPELL_RAVAGE); m_uiRavage_Timer = 16000; } else m_uiRavage_Timer -= uiDiff; // Whirlwind_Timer if (m_uiWhirlwind_Timer <= uiDiff) { DoCastVictim( SPELL_WHIRLWIND); m_uiWhirlwind_Timer = 16000; } else m_uiWhirlwind_Timer -= uiDiff; // Gouge_Timer if (m_uiGouge_Timer <= uiDiff) { DoCastVictim( SPELL_GOUGE); if (DoGetThreat(me->GetVictim())) DoModifyThreatPercent(me->GetVictim(), -80); m_uiGouge_Timer = 17000 + rand() % 10000; } else m_uiGouge_Timer -= uiDiff; } if (m_uiSummonCount <= 30) { if (m_uiSummon_Timer <= uiDiff) { DoSummonPhanters(); m_uiSummon_Timer = 5000; } else m_uiSummon_Timer -= uiDiff; } if (m_uiVanish_Timer <= uiDiff) { // Invisible Model me->SetDisplayId(MODEL_ID_BLANK); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->AttackStop(); DoResetThreat(); m_bIsVanished = true; m_uiVanish_Timer = 45000; m_uiVisible_Timer = 6000; } else m_uiVanish_Timer -= uiDiff; if (m_bIsVanished) { if (m_uiVisible_Timer <= uiDiff) { // The Panther Model me->SetDisplayId(MODEL_ID_PANTHER); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); const CreatureInfo* cinfo = me->GetCreatureTemplate(); CreatureBaseStats const* cCLS = sObjectMgr.GetCreatureClassLvlStats(me->getLevel(), cinfo->unit_class, cinfo->exp); float basedamage = cCLS->BaseDamage; float weaponBaseMinDamage = basedamage; float weaponBaseMaxDamage = basedamage * 1.5; me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (weaponBaseMinDamage + ((weaponBaseMinDamage / 100) * 35))); me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (weaponBaseMaxDamage + ((weaponBaseMaxDamage / 100) * 35))); me->UpdateDamagePhysical(BASE_ATTACK); if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) { AttackStart(pTarget); DoCast(pTarget, SPELL_BACKSTAB); } m_bIsPhaseTwo = true; m_bIsVanished = false; me->SetObjectScale(1.7f); } else m_uiVisible_Timer -= uiDiff; } else DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 uiDiff) { if (!UpdateVictim()) return; if (!m_bIsPhaseTwo) { if (m_uiShadowWordPain_Timer <= uiDiff) { DoCast(me->getVictim(), SPELL_SHADOWWORDPAIN); m_uiShadowWordPain_Timer = 15000; } else m_uiShadowWordPain_Timer -= uiDiff; if (m_uiMark_Timer <= uiDiff) { Unit* pMarkedTarget = SelectTarget(SELECT_TARGET_RANDOM, 0); if (pMarkedTarget) { DoCast(pMarkedTarget, SPELL_MARK); MarkedTargetGUID = pMarkedTarget->GetGUID(); } else sLog->outError("TSCR: boss_arlokk could not accuire pMarkedTarget."); m_uiMark_Timer = 15000; } else m_uiMark_Timer -= uiDiff; } else { //Cleave_Timer if (m_uiCleave_Timer <= uiDiff) { DoCast(me->getVictim(), SPELL_CLEAVE); m_uiCleave_Timer = 16000; } else m_uiCleave_Timer -= uiDiff; //Gouge_Timer if (m_uiGouge_Timer <= uiDiff) { DoCast(me->getVictim(), SPELL_GOUGE); DoModifyThreatPercent(me->getVictim(), -80); m_uiGouge_Timer = 17000+rand()%10000; } else m_uiGouge_Timer -= uiDiff; } if (m_uiSummonCount <= 30) { if (m_uiSummon_Timer <= uiDiff) { DoSummonPhanters(); m_uiSummon_Timer = 5000; } else m_uiSummon_Timer -= uiDiff; } if (m_uiVanish_Timer <= uiDiff) { //Invisble Model me->SetDisplayId(MODEL_ID_BLANK); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->AttackStop(); DoResetThreat(); m_bIsVanished = true; m_uiVanish_Timer = 45000; m_uiVisible_Timer = 6000; } else m_uiVanish_Timer -= uiDiff; if (m_bIsVanished) { if (m_uiVisible_Timer <= uiDiff) { //The Panther Model me->SetDisplayId(MODEL_ID_PANTHER); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); const CreatureTemplate* cinfo = me->GetCreatureInfo(); me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35))); me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35))); me->UpdateDamagePhysical(BASE_ATTACK); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) AttackStart(target); m_bIsPhaseTwo = true; m_bIsVanished = false; } else m_uiVisible_Timer -= uiDiff; } else DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 uiDiff) { if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; if (!m_bIsPhaseTwo) { if (m_uiShadowWordPain_Timer < uiDiff) { DoCastSpellIfCan(m_creature->getVictim(),SPELL_SHADOWWORDPAIN); m_uiShadowWordPain_Timer = 15000; } else m_uiShadowWordPain_Timer -= uiDiff; if (m_uiMark_Timer < uiDiff) { if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) { if (Player* pMark = pTarget->GetCharmerOrOwnerPlayerOrPlayerItself()) { DoCastSpellIfCan(pMark, SPELL_MARK); m_uiMarkedGUID = pMark->GetGUID(); } else { if (m_uiMarkedGUID) m_uiMarkedGUID = 0; error_log("SD2: boss_arlokk could not accuire a new target to mark."); } } m_uiMark_Timer = 15000; } else m_uiMark_Timer -= uiDiff; } else { //Cleave_Timer if (m_uiCleave_Timer < uiDiff) { DoCastSpellIfCan(m_creature->getVictim(), SPELL_CLEAVE); m_uiCleave_Timer = 16000; } else m_uiCleave_Timer -= uiDiff; //Gouge_Timer if (m_uiGouge_Timer < uiDiff) { DoCastSpellIfCan(m_creature->getVictim(), SPELL_GOUGE); if (m_creature->getThreatManager().getThreat(m_creature->getVictim())) m_creature->getThreatManager().modifyThreatPercent(m_creature->getVictim(),-80); m_uiGouge_Timer = urand(17000, 27000); } else m_uiGouge_Timer -= uiDiff; } if (m_uiSummonCount <= 30) { if (m_uiSummon_Timer < uiDiff) { DoSummonPhanters(); m_uiSummon_Timer = 5000; } else m_uiSummon_Timer -= uiDiff; } if (m_uiVanish_Timer < uiDiff) { //Invisble Model m_creature->SetDisplayId(MODEL_ID_BLANK); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->AttackStop(); DoResetThreat(); m_bIsVanished = true; m_uiVanish_Timer = 45000; m_uiVisible_Timer = 6000; } else m_uiVanish_Timer -= uiDiff; if (m_bIsVanished) { if (m_uiVisible_Timer < uiDiff) { //The Panther Model m_creature->SetDisplayId(MODEL_ID_PANTHER); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35))); m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35))); m_creature->UpdateDamagePhysical(BASE_ATTACK); if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM,0)) AttackStart(pTarget); m_bIsPhaseTwo = true; m_bIsVanished = false; } else m_uiVisible_Timer -= uiDiff; } else DoMeleeAttackIfReady(); }