void StartEvent(Unit* who) { GetAdvisors(); Talk(SAY_AGGRO); DoZoneInCombat(); instance->SetGuidData(DATA_KARATHRESSEVENT_STARTER, who->GetGUID()); instance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS); }
void Aggro(Unit* pWho) { if (!m_pInstance) return; GetAdvisors(); DoScriptText(SAY_AGGRO, m_creature); m_pInstance->SetData64(DATA_KARATHRESS_STARTER, pWho->GetGUID()); m_pInstance->SetData(TYPE_KARATHRESS_EVENT, IN_PROGRESS); }
void StartEvent(Unit *who) { if (!pInstance) return; GetAdvisors(); DoScriptText(SAY_AGGRO, me); DoZoneInCombat(); pInstance->SetData64(DATA_KARATHRESSEVENT_STARTER, who->GetGUID()); pInstance->SetData(DATA_KARATHRESSEVENT, IN_PROGRESS); }
void Aggro(Unit* pWho) { if (!m_pInstance) return; GetAdvisors(); DoScriptText(SAY_AGGRO, m_creature); if (Player* pPlayer = pWho->GetCharmerOrOwnerPlayerOrPlayerItself()) { m_pInstance->SetData64(DATA_KARATHRESS_STARTER, pPlayer->GetGUID()); m_pInstance->SetData(TYPE_KARATHRESS_EVENT, IN_PROGRESS); } }
void UpdateAI(const uint32 diff) { //Only if not incombat check if the event is started if (!me->isInCombat() && pInstance && pInstance->GetData(DATA_KARATHRESSEVENT)) { Unit *pTarget = Unit::GetUnit((*me), pInstance->GetData64(DATA_KARATHRESSEVENT_STARTER)); if (pTarget) { AttackStart(pTarget); GetAdvisors(); } } //Return since we have no target if (!UpdateVictim()) return; //someone evaded! if (pInstance && !pInstance->GetData(DATA_KARATHRESSEVENT)) { EnterEvadeMode(); return; } //CataclysmicBolt_Timer if (CataclysmicBolt_Timer <= diff) { //select a random unit other than the main tank Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); //if there aren't other units, cast on the tank if (!pTarget) pTarget = me->getVictim(); if (pTarget) DoCast(pTarget, SPELL_CATACLYSMIC_BOLT); CataclysmicBolt_Timer = 10000; } else CataclysmicBolt_Timer -= diff; //SearNova_Timer if (SearNova_Timer <= diff) { DoCast(me->getVictim(), SPELL_SEAR_NOVA); SearNova_Timer = 20000+rand()%40000; } else SearNova_Timer -= diff; //Enrage_Timer if (Enrage_Timer <= diff) { DoCast(me, SPELL_ENRAGE); Enrage_Timer = 90000; } else Enrage_Timer -= diff; //Blessing of Tides Trigger if (!HealthAbovePct(75) && !BlessingOfTides) { BlessingOfTides = true; bool continueTriggering = false; Creature* Advisor; for (uint8 i = 0; i < MAX_ADVISORS; ++i) if (Advisors[i]) { Advisor = (Unit::GetCreature(*me, Advisors[i])); if (Advisor && Advisor->isAlive()) { continueTriggering = true; break; } } if (continueTriggering) { DoCast(me, SPELL_BLESSING_OF_THE_TIDES); me->MonsterYell(SAY_GAIN_BLESSING_OF_TIDES, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_GAIN_BLESSING_OF_TIDES); } } DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 uiDiff) { //Return since we have no target if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) { //check if the event is started if (m_pInstance && m_pInstance->GetData(TYPE_KARATHRESS_EVENT) == IN_PROGRESS) { if (Unit* pTarget = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_KARATHRESS_STARTER))) { AttackStart(pTarget); GetAdvisors(); } } return; } //someone evaded! if (m_pInstance && m_pInstance->GetData(TYPE_KARATHRESS_EVENT) == NOT_STARTED) { EnterEvadeMode(); return; } //m_uiCataclysmicBolt_Timer if (m_uiCataclysmicBolt_Timer < uiDiff) { //select a random unit other than the main tank Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); //if there aren't other units, cast on the tank if (!pTarget) pTarget = m_creature->getVictim(); m_creature->CastSpell(pTarget, SPELL_CATACLYSMIC_BOLT, false); m_uiCataclysmicBolt_Timer = 10000; }else m_uiCataclysmicBolt_Timer -= uiDiff; //hp under 75% if (!m_bBlessingOfTides_MobsChecked && ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 75)) { for(uint8 i = 0; i < MAX_ADVISORS; ++i) { if (Unit* pAdvisor = Unit::GetUnit(*m_creature, m_auiAdvisorsGUID[i])) { //stack max three times (one for each alive) if (pAdvisor->isAlive()) { pAdvisor->InterruptNonMeleeSpells(false); pAdvisor->CastSpell(m_creature, SPELL_BLESSING_OF_THE_TIDES, false); } } } //yell if we now have the aura if (m_creature->HasAura(SPELL_BLESSING_OF_THE_TIDES)) DoScriptText(SAY_GAIN_BLESSING, m_creature); m_bBlessingOfTides_MobsChecked = true; } //m_uiEnrage_Timer if (m_uiEnrage_Timer < uiDiff) { DoCast(m_creature, SPELL_ENRAGE); m_uiEnrage_Timer = 90000; }else m_uiEnrage_Timer -= uiDiff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 uiDiff) { //Return since we have no target if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) { //check if the event is started if (m_pInstance && m_pInstance->GetData(TYPE_KARATHRESS_EVENT) == IN_PROGRESS) { if (Unit* pTarget = Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_KARATHRESS_STARTER))) { AttackStart(pTarget); GetAdvisors(); } } return; } //someone evaded! if (m_pInstance && m_pInstance->GetData(TYPE_KARATHRESS_EVENT) == NOT_STARTED) { EnterEvadeMode(); return; } //m_uiCataclysmicBolt_Timer //Spell musi byc rzucany na target z mana i nie na tanka, chyba ze w threat znajduje sie tylko 1 osoba wtedy na nia //Jesli ktos ma lepszy pomysl na rozwiazanie tego problemu zapraszam do zmiany tej kiszkowatej implementacji :S if (m_uiCataclysmicBolt_Timer < uiDiff) { Unit* pTarget; uint8 k = 1; //8bitow - max 25ppl std::list<HostileReference*>& m_threatlist = m_creature->getThreatManager().getThreatList(); std::list<HostileReference*>::iterator i = m_threatlist.begin(); for (i = m_threatlist.begin(); i!= m_threatlist.end();++i) { error_log("Debug:Fathom Lord Karrathes - petla Cataclysmic Bolt"); // Do usuniecia jesli wszytsko bedzie dzialalo poprawnie pTarget = SelectUnit(SELECT_TARGET_RANDOM, k);// zaczyna od 2 osoby w threat (k=1) - czyli nigdy nie bedzie to tank, chyba ze bedzie solo if (!pTarget) //proba solowania (niezaleznie czy ma mane czy nie zwraca aktualny target jako poprawny target) { pTarget = m_creature->getVictim(); break; } if(pTarget && pTarget->getPowerType() == POWER_MANA) break; ++k; //inkrementacja pozycji w threat } m_creature->CastSpell(pTarget, SPELL_CATACLYSMIC_BOLT, false); m_uiCataclysmicBolt_Timer = 10000; }else m_uiCataclysmicBolt_Timer -= uiDiff; //hp under 75% if (!m_bBlessingOfTides_MobsChecked && ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 75)) { for(uint8 i = 0; i < MAX_ADVISORS; ++i) { if (Unit* pAdvisor = Unit::GetUnit(*m_creature, m_auiAdvisorsGUID[i])) { //stack max three times (one for each alive) if (pAdvisor->isAlive()) { m_creature->InterruptNonMeleeSpells(false); m_creature->CastSpell(m_creature, SPELL_BLESSING_OF_THE_TIDES, true); } } } //yell if we now have the aura if (m_creature->HasAura(SPELL_BLESSING_OF_THE_TIDES)) DoScriptText(SAY_GAIN_BLESSING, m_creature); m_bBlessingOfTides_MobsChecked = true; } //m_uiEnrage_Timer if (m_uiEnrage_Timer < uiDiff) { DoCast(m_creature, SPELL_ENRAGE); m_uiEnrage_Timer = 90000; }else m_uiEnrage_Timer -= uiDiff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 uiDiff) { //Return since we have no target if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) { //check if the event is started if (m_pInstance && m_pInstance->GetData(TYPE_KARATHRESS_EVENT) == IN_PROGRESS) { if (Player* pTarget = m_creature->GetMap()->GetPlayer(m_pInstance->GetData64(DATA_KARATHRESS_STARTER))) { AttackStart(pTarget); GetAdvisors(); } } return; } //someone evaded! if (m_pInstance && m_pInstance->GetData(TYPE_KARATHRESS_EVENT) == NOT_STARTED) { EnterEvadeMode(); return; } //m_uiCataclysmicBolt_Timer if (m_uiCataclysmicBolt_Timer < uiDiff) { Unit* pTarget; ThreatList const& m_threatlist = m_creature->getThreatManager().getThreatList(); if (m_threatlist.empty()) return; for (ThreatList::const_iterator itr = m_threatlist.begin(); itr!= m_threatlist.end();++itr) { if (Unit* pTemp = m_creature->GetMap()->GetUnit((*itr)->getUnitGuid())) { //player and has mana if ((pTemp->GetTypeId() == TYPEID_PLAYER) && (pTemp->getPowerType() == POWER_MANA)) { pTarget = pTemp; break; } } } // in case no player with mana or victim is not a player choose current victim if (!pTarget) pTarget = m_creature->getVictim(); if (!pTarget) return; m_creature->CastSpell(pTarget, SPELL_CATACLYSMIC_BOLT, false); m_uiCataclysmicBolt_Timer = 10000; }else m_uiCataclysmicBolt_Timer -= uiDiff; //hp under 75% if (!m_bBlessingOfTides_MobsChecked && m_creature->GetHealthPercent() < 75.0f) { for(uint8 i = 0; i < MAX_ADVISORS; ++i) { if (Creature* pAdvisor = m_creature->GetMap()->GetCreature(m_auiAdvisorsGUID[i])) { //stack max three times (one for each alive) if (pAdvisor->isAlive()) { m_creature->InterruptNonMeleeSpells(false); m_creature->CastSpell(m_creature, SPELL_BLESSING_OF_THE_TIDES, true); } } } //yell if we now have the aura if (m_creature->HasAura(SPELL_BLESSING_OF_THE_TIDES)) DoScriptText(SAY_GAIN_BLESSING, m_creature); m_bBlessingOfTides_MobsChecked = true; } //m_uiEnrage_Timer if (m_uiEnrage_Timer < uiDiff) { DoCastSpellIfCan(m_creature, SPELL_ENRAGE); m_uiEnrage_Timer = 90000; }else m_uiEnrage_Timer -= uiDiff; DoMeleeAttackIfReady(); }