// Note: This seems like a very complicated fix. The fix needs to be handled by the core, as implementation of limited-target AoE spells are still not limited. void CastBloodboil() { std::list<Unit *> targets; Map *map = m_creature->GetMap(); if(map->IsDungeon()) { InstanceMap::PlayerList const &PlayerList = ((InstanceMap*)map)->GetPlayers(); for (InstanceMap::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { if (Player* i_pl = i->getSource()) { if(i_pl && i_pl->isAlive()) targets.push_back(i_pl); } } } //Sort the list of players targets.sort(ObjectDistanceOrderReversed(m_creature)); //Resize so we only get top 5 targets.resize(5); //Aura each player in the targets list with Bloodboil. for(std::list<Unit *>::iterator itr = targets.begin(); itr != targets.end(); ++itr) { Unit* target = *itr; if(target && target->isAlive()) m_creature->AddAura(SPELL_BLOODBOIL, target); } targets.clear(); }
void WaypointReached(uint32 i) { Unit* player = Unit::GetUnit((*me), GetEventStarterGUID()); if (!player) return; switch(i) { case 1: me->MonsterSay(SAY_DANKE, LANG_UNIVERSAL, NULL); Map *map = me->GetMap(); if(map->IsDungeon()) { InstanceMap::PlayerList const &PlayerList = ((InstanceMap*)map)->GetPlayers(); for (InstanceMap::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { if (Player* i_pl = i->getSource()) { if(i_pl->GetQuestStatus(10097) == QUEST_STATUS_INCOMPLETE) i_pl->KilledMonsterCredit(N_LAKKA,0); } } } break; } }
void CleanUpAura() { Map *map = me->GetMap(); if(map->IsDungeon()) { InstanceMap::PlayerList const &PlayerList = ((InstanceMap*)map)->GetPlayers(); for (InstanceMap::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { if (Player* i_pl = i->getSource()) { if(i_pl->isAlive()) { i_pl->RemoveAurasDueToSpell(SPELL_INSIGNIFIGANCE); i_pl->RemoveAurasDueToSpell(SPELL_FEL_RAGE_1); i_pl->RemoveAurasDueToSpell(SPELL_FEL_RAGE_2); i_pl->RemoveAurasDueToSpell(SPELL_FEL_RAGE_3); i_pl->RemoveAurasDueToSpell(SPELL_FEL_RAGE_SCALE); } } } } }
uint32 NextStep(uint32 Step) { Unit* arca = Unit::GetUnit(*me, ArcanagosGUID); Map* map = me->GetMap(); switch (Step) { case 0: return 9999999; case 1: me->MonsterYell(SAY_DIALOG_MEDIVH_1, LANG_UNIVERSAL, 0); return 10000; case 2: if (arca) CAST_CRE(arca)->MonsterYell(SAY_DIALOG_ARCANAGOS_2, LANG_UNIVERSAL, 0); return 20000; case 3: me->MonsterYell(SAY_DIALOG_MEDIVH_3, LANG_UNIVERSAL, 0); return 10000; case 4: if (arca) CAST_CRE(arca)->MonsterYell(SAY_DIALOG_ARCANAGOS_4, LANG_UNIVERSAL, 0); return 20000; case 5: me->MonsterYell(SAY_DIALOG_MEDIVH_5, LANG_UNIVERSAL, 0); return 20000; case 6: if (arca) CAST_CRE(arca)->MonsterYell(SAY_DIALOG_ARCANAGOS_6, LANG_UNIVERSAL, 0); return 10000; case 7: FireArcanagosTimer = 500; return 5000; case 8: FireMedivhTimer = 500; DoCast(me, SPELL_MANA_SHIELD); return 10000; case 9: me->MonsterTextEmote(EMOTE_DIALOG_MEDIVH_7, 0, false); return 10000; case 10: if (arca) DoCast(arca, SPELL_CONFLAGRATION_BLAST, false); return 1000; case 11: if (arca) CAST_CRE(arca)->MonsterYell(SAY_DIALOG_ARCANAGOS_8, LANG_UNIVERSAL, 0); return 5000; case 12: arca->GetMotionMaster()->MovePoint(0, -11010.82f, -1761.18f, 156.47f); arca->setActive(true); arca->InterruptNonMeleeSpells(true); arca->SetSpeed(MOVE_FLIGHT, 2.0f); return 10000; case 13: me->MonsterYell(SAY_DIALOG_MEDIVH_9, LANG_UNIVERSAL, 0); return 10000; case 14: me->SetVisible(false); me->ClearInCombat(); if (map->IsDungeon()) { InstanceMap::PlayerList const &PlayerList = map->GetPlayers(); for (InstanceMap::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { if (i->getSource()->isAlive()) { if (i->getSource()->GetQuestStatus(9645) == QUEST_STATUS_INCOMPLETE) i->getSource()->CompleteQuest(9645); } } } return 50000; case 15: arca->DealDamage(arca, arca->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); return 5000; default : return 9999999; } }