void EnterEvadeMode() override { m_creature->RemoveAllAurasOnEvade(); m_creature->DeleteThreatList(); m_creature->CombatStop(true); m_creature->LoadCreatureAddon(true); m_creature->SetLootRecipient(NULL); Reset(); if (!m_creature->isAlive()) return; if (m_pInstance) { float dx, dy; float fRespX, fRespY, fRespZ; m_creature->GetRespawnCoord(fRespX, fRespY, fRespZ); m_pInstance->GetMovementDistanceForIndex(4, dx, dy); m_creature->GetMotionMaster()->MovePoint(POINT_EVENT_COMBAT, dx, dy, fRespZ); } else m_creature->GetMotionMaster()->MoveTargetedHome(); }
void Aggro(Unit* /*pWho*/) override { DoScriptText(SAY_AGGRO, m_creature); if (m_pInstance) m_pInstance->SetData(TYPE_BROGGOK_EVENT, IN_PROGRESS); }
void JustDied(Unit* /*pKiller*/) override { DoScriptText(SAY_DIE, m_creature); if (m_pInstance) m_pInstance->SetData(TYPE_KELIDAN_EVENT, DONE); }
// Reset Orientation void MovementInform(uint32 uiMotionType, uint32 uiPointId) override { if (uiMotionType != POINT_MOTION_TYPE || uiPointId != POINT_EVENT_COMBAT) return; if (GameObject* pFrontDoor = m_pInstance->GetSingleGameObjectFromStorage(GO_DOOR_BROGGOK_FRONT)) m_creature->SetFacingToObject(pFrontDoor); }
void JustReachedHome() override { if (m_pInstance) m_pInstance->SetData(TYPE_KELIDAN_EVENT, FAIL); DoCastSpellIfCan(m_creature, SPELL_EVOCATION); m_uiSetupAddsTimer = 2000; }
void MoveInLineOfSight(Unit* pWho) override { if (!m_bDidMagtheridonYell && pWho->GetTypeId() == TYPEID_PLAYER && !((Player*)pWho)->isGameMaster() && m_creature->_IsWithinDist(pWho, 73.0f, false)) { if (m_pInstance) m_pInstance->DoOrSimulateScriptTextForThisInstance(SAY_MAGTHERIDON_INTRO, NPC_MAGTHERIDON); m_bDidMagtheridonYell = true; } ScriptedAI::MoveInLineOfSight(pWho); }
void DoSetupAdds() { m_uiSetupAddsTimer = 0; if (!m_pInstance) return; GuidList lAddGuids; m_pInstance->GetKelidanAddList(lAddGuids); // Sort Adds to vector if not already done if (!lAddGuids.empty()) { m_vAddGuids.reserve(lAddGuids.size()); std::list<Creature*> lAdds; for (GuidList::const_iterator itr = lAddGuids.begin(); itr != lAddGuids.end(); ++itr) { if (Creature* pAdd = m_pInstance->instance->GetCreature(*itr)) lAdds.push_back(pAdd); } // Sort them by angle lAdds.sort(SortByAngle(m_creature)); for (std::list<Creature*>::const_iterator itr = lAdds.begin(); itr != lAdds.end(); ++itr) m_vAddGuids.push_back((*itr)->GetObjectGuid()); } // Respawn killed adds and reset counter m_uiKilledAdds = 0; for (GuidVector::const_iterator itr = m_vAddGuids.begin(); itr != m_vAddGuids.end(); ++itr) { Creature* pAdd = m_pInstance->instance->GetCreature(*itr); if (pAdd && !pAdd->isAlive()) pAdd->Respawn(); } // Cast pentagram uint8 s = m_vAddGuids.size(); for (uint8 i = 0; i < s; ++i) { Creature* pCaster = m_pInstance->instance->GetCreature(m_vAddGuids[i]); Creature* pTarget = m_pInstance->instance->GetCreature(m_vAddGuids[(i + 2) % s]); if (pCaster && pTarget) pCaster->CastSpell(pTarget, SPELL_CHANNELING, TRIGGERED_NONE); } m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); }
void JustDied(Unit* /*pWho*/) override { if (m_pInstance) m_pInstance->SetData(TYPE_BROGGOK_EVENT, DONE); }