void StartEvent(Unit *who) { if (!pInstance) return; GetCouncil(); DoScriptText(SAY_AGGRO, m_creature); pInstance->SetData64(DATA_MAULGAREVENT_TANK, who->GetGUID()); pInstance->SetData(DATA_MAULGAREVENT, IN_PROGRESS); }
void Aggro(Unit *pWho) { if (!m_pInstance) return; GetCouncil(); DoScriptText(SAY_AGGRO, m_creature); m_creature->CallForHelp(50.0f); if (m_pInstance->GetData(TYPE_MAULGAR_EVENT) == NOT_STARTED) m_pInstance->SetData(TYPE_MAULGAR_EVENT, IN_PROGRESS); }
void StartEvent(Unit* who) { if (!instance) return; GetCouncil(); Talk(SAY_AGGRO); instance->SetData64(DATA_MAULGAREVENT_TANK, who->GetGUID()); instance->SetData(DATA_MAULGAREVENT, IN_PROGRESS); DoZoneInCombat(); }
void UpdateAI(const uint32 diff) { //Only if not incombat check if the event is started if(!me->isInCombat() && pInstance && pInstance->GetData(DATA_MAULGAREVENT)) { Unit* target = Unit::GetUnit((*me), pInstance->GetData64(DATA_MAULGAREVENT_TANK)); if(target) { AttackStart(target); GetCouncil(); } } //Return since we have no target if(!UpdateVictim()) return; //someone evaded! if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT)) { EnterEvadeMode(); return; } //ArcingSmash_Timer if(ArcingSmash_Timer <= diff) { DoCast(me->getVictim(), SPELL_ARCING_SMASH); ArcingSmash_Timer = 10000; } else ArcingSmash_Timer -= diff; //Whirlwind_Timer if(Whirlwind_Timer <= diff) { DoCast(me->getVictim(), SPELL_WHIRLWIND); Whirlwind_Timer = 55000; } else Whirlwind_Timer -= diff; //MightyBlow_Timer if(MightyBlow_Timer <= diff) { DoCast(me->getVictim(), SPELL_MIGHTY_BLOW); MightyBlow_Timer = 30000+rand()%10000; } else MightyBlow_Timer -= diff; //Entering Phase 2 if(!Phase2 && HealthBelowPct(50)) { Phase2 = true; DoScriptText(SAY_ENRAGE, me); DoCast(me, SPELL_DUAL_WIELD, true); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, 0); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0); } if(Phase2) { //Charging_Timer if(Charging_Timer <= diff) { Unit* target = NULL; target = SelectTarget(SELECT_TARGET_RANDOM, 0); if(target) { AttackStart(target); DoCast(target, SPELL_BERSERKER_C); } Charging_Timer = 20000; } else Charging_Timer -= diff; //Intimidating Roar if(Roar_Timer <= diff) { DoCast(me, SPELL_ROAR); Roar_Timer = 40000+(rand()%10000); } else Roar_Timer -= diff; } DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { //Only if not incombat check if the event is started if (!me->IsInCombat() && pInstance && pInstance->GetData(DATA_MAULGAREVENT)) { Unit* pTarget = Unit::GetUnit((*me), pInstance->GetData64(DATA_MAULGAREVENT_TANK)); if (pTarget) { AttackStart(pTarget); GetCouncil(); } } //Return since we have no target if (!UpdateVictim()) return; //ArcingSmash_Timer if (ArcingSmash_Timer <= diff) { DoCastVictim( SPELL_ARCING_SMASH); ArcingSmash_Timer = 10000; } else ArcingSmash_Timer -= diff; //Whirlwind_Timer if (Whirlwind_Timer <= diff) { DoCastVictim( SPELL_WHIRLWIND); Whirlwind_Timer = 55000; } else Whirlwind_Timer -= diff; //MightyBlow_Timer if (MightyBlow_Timer <= diff) { DoCastVictim( SPELL_MIGHTY_BLOW); MightyBlow_Timer = 30000 + rand() % 10000; } else MightyBlow_Timer -= diff; //Entering Phase 2 if (!Phase2 && (me->GetHealth() * 100 / me->GetMaxHealth()) < 50) { Phase2 = true; DoScriptText(SAY_ENRAGE, me); DoCast(me, SPELL_FLURRY); me->CastSpell(me, SPELL_DUAL_WIELD, true); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 0); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY + 1, 0); } if (Phase2) { const CreatureInfo* cinfo = me->GetCreatureTemplate(); me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg + ((cinfo->mindmg / 100) * 1))); me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg + ((cinfo->maxdmg / 100) * 1))); me->UpdateDamagePhysical(BASE_ATTACK); //Charging_Timer if (Charging_Timer <= diff) { Unit* pTarget = NULL; pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0); if (pTarget) { AttackStart(pTarget); DoCast(pTarget, SPELL_BERSERKER_C); } Charging_Timer = 20000; } else Charging_Timer -= diff; //Intimidating Roar if (Roar_Timer <= diff) { DoCast(me, SPELL_ROAR); Roar_Timer = 40000 + (rand() % 10000); } else Roar_Timer -= diff; } DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { //Only if not incombat check if the event is started if (!m_creature->isInCombat() && pInstance && pInstance->GetData(DATA_MAULGAREVENT)) { Unit* target = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_MAULGAREVENT_TANK)); if (target) { AttackStart(target); GetCouncil(); } } //Return since we have no target if (!m_creature->SelectHostilTarget() || !m_creature->getVictim()) return; //someone evaded! if (pInstance && !pInstance->GetData(DATA_MAULGAREVENT)) EnterEvadeMode(); //ArcingSmash_Timer if (ArcingSmash_Timer < diff) { DoCast(m_creature->getVictim(), SPELL_ARCING_SMASH); ArcingSmash_Timer = 8000+rand()%4000; }else ArcingSmash_Timer -= diff; //Whirlwind_Timer if (Whirlwind_Timer < diff) { DoCast(m_creature->getVictim(), SPELL_WHIRLWIND); Whirlwind_Timer = 30000+rand()%10000; }else Whirlwind_Timer -= diff; //MightyBlow_Timer if (MightyBlow_Timer < diff) { DoCast(m_creature->getVictim(), SPELL_MIGHTY_BLOW); MightyBlow_Timer = 20000+rand()%15000; }else MightyBlow_Timer -= diff; //Entering Phase 2 if (!Phase2 && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 50) { Phase2 = true; DoScriptText(SAY_ENRAGE, m_creature); DoCast(m_creature, SPELL_FLURRY); } if (Phase2) { //Charge_Timer if (Charge_Timer < diff) { if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0)) DoCast(target, SPELL_CHARGE); Charge_Timer = 14000 + rand()%6000; }else Charge_Timer -= diff; //MightyBlow_Timer if (Fear_Timer < diff) { DoCast(m_creature->getVictim(), SPELL_FEAR); Fear_Timer = 20000+rand()%15000; }else Fear_Timer -= diff; } DoMeleeAttackIfReady(); }