void Aggro(Unit *who) { //Close the room for boss fight if(pInstance) pInstance->SetData(ENCOUNT_ANUBREKHAN, IN_PROGRESS); switch(rand()%3) { case 0: DoScriptText(SAY_AGGRO1, m_creature); break; case 1: DoScriptText(SAY_AGGRO2, m_creature); break; case 2: DoScriptText(SAY_AGGRO3, m_creature); break; } CheckAch(); }
void Aggro(Unit* who) { // Cheaters must die =) blizzGuard1 = (TemporarySummon*)m_creature->SummonCreature(5764, BLIZZ_GUARDIAN1_X, BLIZZ_GUARDIAN1_Y, BLIZZ_GUARDIAN1_Z, BLIZZ_GUARDIAN1_O, TEMPSUMMON_MANUAL_DESPAWN, 120*IN_MILLISECONDS); blizzGuard2 = (TemporarySummon*)m_creature->SummonCreature(5764, BLIZZ_GUARDIAN2_X, BLIZZ_GUARDIAN2_Y, BLIZZ_GUARDIAN2_Z, BLIZZ_GUARDIAN2_O, TEMPSUMMON_MANUAL_DESPAWN, 120*IN_MILLISECONDS); if(m_pInstance) m_pInstance->SetData(TYPE_HEIGAN, IN_PROGRESS); CheckAch(); switch(rand()%3) { case 0: DoScriptText(SAY_AGGRO1, m_creature); break; case 1: DoScriptText(SAY_AGGRO2, m_creature); break; case 2: DoScriptText(SAY_AGGRO3, m_creature); break; } m_creature->SetInCombatWithZone(); }
void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; if (m_uiEvadeCheckCooldown < diff) { if (m_creature->GetDistance2d(3307.02f, -3476.27f) > 125.0f) EnterEvadeMode(); m_uiEvadeCheckCooldown = 2000; } else m_uiEvadeCheckCooldown -= diff; //Berserk_Timer if (Berserk_Timer < diff) { DoCast(m_creature,SPELL_BERSERK); Berserk_Timer = 300000; }else Berserk_Timer -= diff; if (m_bIsRegularMode) { //SumonFirstCryptGuard_Timer if (SummonFirst_Timer < diff) { if (CryptGuard_count < MAX_CRYPT_GUARDS) m_creature->SummonCreature(MOB_CRYPT_GUARD,3330.0f,-3477.0f,288.0f,3.2f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); SummonFirst_Timer = 2000000; }else SummonFirst_Timer -= diff; } //RiseFromCorpse_Timer if (RiseFromCorpse_Timer < diff) { RiseFromCorpse_Timer = 60000 + (rand()%10000); const Map::PlayerList &players = m_creature->GetMap()->GetPlayers(); if (players.isEmpty()) return; for(Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i) if (Player* pPlayer = i->getSource()) { if (pPlayer->isGameMaster()) continue; if (pPlayer->isDead()) pPlayer->CastSpell(pPlayer,SPELL_SELF_SPAWN_5,true); } }else RiseFromCorpse_Timer -= diff; if(!swarm) { //Impale_Timer if (Impale_Timer < diff) { //Cast Impale on a random target //Do NOT cast it when we are afflicted by locust swarm if (!m_creature->HasAura(SPELL_LOCUSTSWARM,SpellEffectIndex(1))) if (Unit* target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM,SpellEffectIndex(1))) DoCast(target,m_bIsRegularMode ? SPELL_IMPALE : SPELL_IMPALE_H); Impale_Timer = 15000; }else Impale_Timer -= diff; //LocustSwarm_Timer if (LocustSwarm_Timer < diff) { //Cast Locust Swarm buff on ourselves DoCast(m_creature, !m_bIsRegularMode ? SPELL_LOCUSTSWARM_H:SPELL_LOCUSTSWARM); swarm = true; //Summon Crypt Guard immidietly after Locust Swarm if (CryptGuard_count < MAX_CRYPT_GUARDS) m_creature->SummonCreature(MOB_CRYPT_GUARD,3330.0f,-3477.0f,288.0f,3.2f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,10000); LocustSwarm_Timer = 20000; }else LocustSwarm_Timer -= diff; } else { if (LocustSwarm_Timer < diff) { swarm = false; LocustSwarm_Timer = 85000; }else LocustSwarm_Timer -= diff; } if (Ach_Timer<diff) { if (m_bIsRegularMode && m_ach_10ppl) CheckAch(); else if (!m_bIsRegularMode && m_ach_25ppl) CheckAch(); Ach_Timer = 10000; }else Ach_Timer -= diff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; if (Ach_Timer<diff) { CheckAch(); Ach_Timer = 8000; }else Ach_Timer -= diff; //Don't let Heigan walk thru the door if (m_creature->GetPositionX()>2822 && m_creature->GetPositionY()>(-3700)) { EnterEvadeMode(); return; } if (m_creature->GetPositionY()<(-3739)) { EnterEvadeMode(); return; } //Slow Dance if (phase == 1) { if(phaseTimer < diff) { //Let's start fast dance phase = 2; //Teleport To Start Position //m_creature->NearTeleportTo(2793.86, -3707.38, 276.627, 0.593412); m_creature->GetMap()->CreatureRelocation(m_creature, 2793.86f, -3707.38f, 276.627f, 0.593412f); m_creature->SendMonsterMove(2793.86f, -3707.38f, 276.627f, SPLINETYPE_FACINGTARGET, SPLINEFLAG_NONE, 0); switch (rand()%5) { case 0: DoScriptText(SAY_TAUNT1, m_creature); break; case 1: DoScriptText(SAY_TAUNT2, m_creature); break; case 2: DoScriptText(SAY_TAUNT3, m_creature); break; case 3: DoScriptText(SAY_TAUNT4, m_creature); break; case 4: DoScriptText(SAY_TAUNT5, m_creature); break; } //Cast channeling AOE DoCast(m_creature, SPELL_PLAGUECLOUD); phaseTimer = 45000; safeSpot = 1; }else phaseTimer-=diff; //Disease all nearby players if(diseaseTimer < diff) { DoCast(m_creature, m_bIsRegularMode ? SPELL_FEAVER_H : SPELL_FEAVER); diseaseTimer=20000; }else diseaseTimer-=diff; //Debuff all players in 20 yard radius to 300% cast time if(disruptTimer < diff) { DoCast(m_creature, SPELL_DISRUPTION, false); disruptTimer = urand(5000, 10000); }else disruptTimer-=diff; DoMeleeAttackIfReady(); } else if(phase == 2) { if(phaseTimer < diff) { switch (rand()%5) { case 0: DoScriptText(SAY_TAUNT1, m_creature); break; case 1: DoScriptText(SAY_TAUNT2, m_creature); break; case 2: DoScriptText(SAY_TAUNT3, m_creature); break; case 3: DoScriptText(SAY_TAUNT4, m_creature); break; case 4: DoScriptText(SAY_TAUNT5, m_creature); break; } phase = 1; m_creature->GetMotionMaster()->Clear(); m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); AttackStart(m_creature->getVictim()); phaseTimer = 90000; safeSpot = 1; }else phaseTimer-=diff; } }