void EnterCombat(Unit *who) { DoScriptText(SAY_AGGRO, me); DoZoneInCombat(); EnterPhase(PHASE_FIGHT); instance->SetBossState(BOSS_HEIGAN, IN_PROGRESS); }
void EnterCombat(Unit* /*who*/) { _EnterCombat(); DoScriptText(SAY_AGGRO, me); EnterPhase(PHASE_FIGHT); safetyDance = true; }
void EnterCombat(Unit * /*who*/) { _EnterCombat(); TeleportHeiganCheaters(); DoScriptText(SAY_AGGRO, me); EnterPhase(PHASE_FIGHT); }
void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); EnterPhase(PHASE_FIGHT); safetyDance = true; }
void Aggro(Unit *who) { DoZoneInCombat(); m_creature->CastSpell(m_creature, AURA_SUNWELL_RADIANCE, true); m_creature->CastSpell(m_creature, AURA_NOXIOUS_FUMES, true); EnterPhase(PHASE_GROUND); }
void EnterCombat(Unit* /*pWho*/) { _EnterCombat(); TeleportHeiganCheaters(); DoScriptText(SAY_AGGRO, me); EnterPhase(PHASE_FIGHT); safetyDance = true; }
void EnterCombat(Unit * /*who*/) { if (pInstance) pInstance->SetData(DATA_HALAZZIEVENT, IN_PROGRESS); me->MonsterYell(YELL_AGGRO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_AGGRO); EnterPhase(PHASE_LYNX); }
void EnterCombat(Unit *who) { if(pInstance) pInstance->SetData(DATA_HALAZZIEVENT, IN_PROGRESS); DoScriptText(YELL_AGGRO, m_creature); EnterPhase(PHASE_LYNX); }
void Aggro(Unit* pWho) { DoScriptText(SAY_AGGRO, m_creature); m_creature->SetInCombatWithZone(); EnterPhase(PHASE_LYNX); if (pInstance) pInstance->SetData(TYPE_HALAZZI, IN_PROGRESS); }
void EnterCombat(Unit *who) { m_creature->setActive(true); DoZoneInCombat(); m_creature->CastSpell(m_creature, AURA_SUNWELL_RADIANCE, true); m_creature->CastSpell(m_creature, AURA_NOXIOUS_FUMES, true); EnterPhase(PHASE_GROUND); if(pInstance) pInstance->SetData(DATA_FELMYST_EVENT, IN_PROGRESS); }
void EnterCombat(Unit* /*who*/) { events.ScheduleEvent(EVENT_BERSERK, 600000); DoZoneInCombat(); EnterPhase(PHASE_GROUND); DoCast(me, AURA_SUNWELL_RADIANCE, true); DoCast(me, AURA_NOXIOUS_FUMES, true); if (pInstance) pInstance->SetData(DATA_FELMYST_EVENT, IN_PROGRESS); }
void EnterCombat(Unit* /*who*/) { if (instance) instance->SetData(DATA_ZULJINEVENT, IN_PROGRESS); DoZoneInCombat(); Talk(YELL_INTRO); SpawnAdds(); EnterPhase(0); }
void EnterCombat(Unit * /*who*/) { if (pInstance) pInstance->SetData(DATA_ZULJINEVENT, IN_PROGRESS); DoZoneInCombat(); me->MonsterYell(YELL_INTRO,LANG_UNIVERSAL,NULL); DoPlaySoundToSet(me, SOUND_INTRO); SpawnAdds(); EnterPhase(0); }
void JustEngagedWith(Unit* /*who*/) override { events.ScheduleEvent(EVENT_BERSERK, 600000); me->setActive(true); DoZoneInCombat(); DoCast(me, AURA_SUNWELL_RADIANCE, true); DoCast(me, AURA_NOXIOUS_FUMES, true); EnterPhase(PHASE_GROUND); instance->SetBossState(DATA_FELMYST, IN_PROGRESS); }
void Reset() override { instance->SetData(DATA_HALAZZIEVENT, NOT_STARTED); summons.DespawnAll(); Initialize(); DoCast(me, SPELL_DUAL_WIELD, true); Phase = PHASE_NONE; EnterPhase(PHASE_LYNX); }
void EnterCombat(Unit* /*who*/) { me->setActive(true); DoZoneInCombat(); me->CastSpell(me, AURA_SUNWELL_RADIANCE, true); me->CastSpell(me, AURA_NOXIOUS_FUMES, true); me->RemoveUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY + MOVEMENTFLAG_ONTRANSPORT); me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); EnterPhase(PHASE_GROUND); if (pInstance) pInstance->SetData(DATA_FELMYST_EVENT, IN_PROGRESS); }
void Reset() { if (pInstance) pInstance->SetData(DATA_HALAZZIEVENT, NOT_STARTED); TransformCount = 0; BerserkTimer = 600000; CheckTimer = 1000; DoCast(me, SPELL_DUAL_WIELD, true); Phase = PHASE_NONE; EnterPhase(PHASE_LYNX); }
void Reset() override { instance->SetData(DATA_HALAZZIEVENT, NOT_STARTED); summons.DespawnAll(); LynxGUID = 0; TransformCount = 0; BerserkTimer = 600000; CheckTimer = 1000; DoCast(me, SPELL_DUAL_WIELD, true); Phase = PHASE_NONE; EnterPhase(PHASE_LYNX); }
void EnterCombat(Unit* /*who*/) { Talk(YELL_AGGRO); if (instance) { instance->SetData(DATA_DAAKARAEVENT, IN_PROGRESS); instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me); // Add } if (GameObject* door = me->FindNearestGameObject(186859, 80.0f)) door->SetGoState(GO_STATE_READY); EnterPhase(PHASE_TROLL); events.ScheduleEvent(EVENT_BERSERK, 10 * MINUTE * IN_MILLISECONDS); }
void Reset() { if(pInstance && pInstance->GetData(DATA_HALAZZIEVENT) != DONE) pInstance->SetData(DATA_HALAZZIEVENT, NOT_STARTED); TransformCount = 0; BerserkTimer = 600000; CheckTimer = 1000; DoCast(m_creature, SPELL_DUAL_WIELD, true); Phase = PHASE_NONE; EnterPhase(PHASE_LYNX); checkTimer2 = 3000; Intro = false; }
void UpdateAI(const uint32 diff) { if (!UpdateVictim() || !CheckInRoom()) return; _DoAggroPulse(diff); events.Update(diff); while (uint32 eventId = events.ExecuteEvent()) { switch(eventId) { case EVENT_DISRUPT: DoCastAOE(SPELL_SPELL_DISRUPTION); events.ScheduleEvent(EVENT_DISRUPT, urand(5000, 10000)); break; case EVENT_FEVER: DoCastAOE(SPELL_DECREPIT_FEVER); events.ScheduleEvent(EVENT_FEVER, urand(20000, 25000)); break; case EVENT_PHASE: // TODO : Add missing texts for both phase switches EnterPhase(phase == PHASE_FIGHT ? PHASE_DANCE : PHASE_FIGHT); break; case EVENT_ERUPT: instance->SetData(DATA_HEIGAN_ERUPT, eruptSection); TeleportHeiganCheaters(); if (eruptSection == 0) eruptDirection = true; else if (eruptSection == 3) eruptDirection = false; eruptDirection ? ++eruptSection : --eruptSection; events.ScheduleEvent(EVENT_ERUPT, phase == PHASE_FIGHT ? 10000 : 4000); break; } } DoMeleeAttackIfReady(); }
void MovementInform(uint32 type, uint32 id) { if (type != POINT_MOTION_TYPE) return; switch (id) { case 1: uiFlightCount++; uiFlightTimer = 1; break; case 2: me->RemoveAurasDueToSpell(SPELL_FOG_BREATH); fogactivated = false; uiFlightCount++; uiFlightTimer = 3000; break; case 3: me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); float x, y, z; me->GetPosition(x, y, z); me->UpdateGroundPositionZ(x, y, z); me->Relocate(x, y, z); me->SendMovementFlagUpdate(); EnterPhase(PHASE_GROUND); if (Unit *target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0)) { AttackStart(target); me->GetMotionMaster()->MoveChase(target); } else EnterEvadeMode(); break; } }
void UpdateAI(const uint32 diff) { if(!UpdateVictim()) return; events.Update(diff); while(uint32 eventId = events.ExecuteEvent()) { switch(eventId) { case EVENT_DISRUPT: DoCastAOE(SPELL_SPELL_DISRUPTION); events.ScheduleEvent(EVENT_DISRUPT, 5000); return; case EVENT_FEVER: DoCastAOE(SPELL_DECREPIT_FEVER); events.ScheduleEvent(EVENT_FEVER, 20000); return; case EVENT_PHASE: EnterPhase(phase == PHASE_FIGHT ? PHASE_DANCE : PHASE_FIGHT); return; case EVENT_ERUPT: instance->SetData(DATA_HEIGAN_ERUPT, eruptSection); if(eruptSection == 0) eruptDirection = true; else if(eruptSection == 3) eruptDirection = false; eruptDirection ? ++eruptSection : --eruptSection; events.ScheduleEvent(EVENT_ERUPT, phase == PHASE_FIGHT ? 10000 : 3000); break; } } DoMeleeAttackIfReady(); }
void HandleFlightSequence() { switch (uiFlightCount) { case 0: //me->AttackStop(); me->GetMotionMaster()->Clear(false); me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); me->StopMoving(); Talk(YELL_TAKEOFF); events.ScheduleEvent(EVENT_FLIGHT_SEQUENCE, 2000); break; case 1: me->GetMotionMaster()->MovePoint(0, me->GetPositionX()+1, me->GetPositionY(), me->GetPositionZ()+10); break; case 2: { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true); if (!target) target = Unit::GetUnit(*me, instance ? instance->GetData64(DATA_PLAYER_GUID) : 0); if (!target) { EnterEvadeMode(); return; } Creature* Vapor = me->SummonCreature(MOB_VAPOR, target->GetPositionX()-5+rand()%10, target->GetPositionY()-5+rand()%10, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 9000); if (Vapor) { Vapor->AI()->AttackStart(target); me->InterruptNonMeleeSpells(false); DoCast(Vapor, SPELL_VAPOR_CHANNEL, false); // core bug Vapor->CastSpell(Vapor, SPELL_VAPOR_TRIGGER, true); } events.ScheduleEvent(EVENT_FLIGHT_SEQUENCE, 10000); break; } case 3: { DespawnSummons(MOB_VAPOR_TRAIL); //DoCast(me, SPELL_VAPOR_SELECT); need core support Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true); if (!target) target = Unit::GetUnit(*me, instance ? instance->GetData64(DATA_PLAYER_GUID) : 0); if (!target) { EnterEvadeMode(); return; } //target->CastSpell(target, SPELL_VAPOR_SUMMON, true); need core support Creature* pVapor = me->SummonCreature(MOB_VAPOR, target->GetPositionX()-5+rand()%10, target->GetPositionY()-5+rand()%10, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 9000); if (pVapor) { if (pVapor->AI()) pVapor->AI()->AttackStart(target); me->InterruptNonMeleeSpells(false); DoCast(pVapor, SPELL_VAPOR_CHANNEL, false); // core bug pVapor->CastSpell(pVapor, SPELL_VAPOR_TRIGGER, true); } events.ScheduleEvent(EVENT_FLIGHT_SEQUENCE, 10000); break; } case 4: DespawnSummons(MOB_VAPOR_TRAIL); events.ScheduleEvent(EVENT_FLIGHT_SEQUENCE, 1); break; case 5: { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true); if (!target) target = Unit::GetUnit(*me, instance ? instance->GetData64(DATA_PLAYER_GUID) : 0); if (!target) { EnterEvadeMode(); return; } breathX = target->GetPositionX(); breathY = target->GetPositionY(); float x, y, z; target->GetContactPoint(me, x, y, z, 70); me->GetMotionMaster()->MovePoint(0, x, y, z+10); break; } case 6: me->SetOrientation(me->GetAngle(breathX, breathY)); me->StopMoving(); //DoTextEmote("takes a deep breath.", NULL); events.ScheduleEvent(EVENT_FLIGHT_SEQUENCE, 10000); break; case 7: { DoCast(me, SPELL_FOG_BREATH, true); float x, y, z; me->GetPosition(x, y, z); x = 2 * breathX - x; y = 2 * breathY - y; me->GetMotionMaster()->MovePoint(0, x, y, z); events.ScheduleEvent(EVENT_SUMMON_FOG, 1); break; } case 8: me->CastStop(SPELL_FOG_BREATH); me->RemoveAurasDueToSpell(SPELL_FOG_BREATH); ++uiBreathCount; events.ScheduleEvent(EVENT_FLIGHT_SEQUENCE, 1); if (uiBreathCount < 3) uiFlightCount = 4; break; case 9: if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO)) DoStartMovement(target); else { EnterEvadeMode(); return; } break; case 10: me->SetDisableGravity(false); me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); EnterPhase(PHASE_GROUND); AttackStart(SelectTarget(SELECT_TARGET_TOPAGGRO)); break; } ++uiFlightCount; }
void UpdateAI(uint32 diff) { if (!UpdateVictim()) { if (phase == PHASE_FLIGHT && !me->IsInEvadeMode()) EnterEvadeMode(); return; } events.Update(diff); if (me->IsNonMeleeSpellCasted(false)) return; if (phase == PHASE_GROUND) { switch (events.ExecuteEvent()) { case EVENT_BERSERK: Talk(YELL_BERSERK); DoCast(me, SPELL_BERSERK, true); events.ScheduleEvent(EVENT_BERSERK, 10000); break; case EVENT_CLEAVE: DoCast(me->GetVictim(), SPELL_CLEAVE, false); events.ScheduleEvent(EVENT_CLEAVE, urand(5000, 10000)); break; case EVENT_CORROSION: DoCast(me->GetVictim(), SPELL_CORROSION, false); events.ScheduleEvent(EVENT_CORROSION, urand(20000, 30000)); break; case EVENT_GAS_NOVA: DoCast(me, SPELL_GAS_NOVA, false); events.ScheduleEvent(EVENT_GAS_NOVA, urand(20000, 25000)); break; case EVENT_ENCAPSULATE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 150, true)) DoCast(target, SPELL_ENCAPSULATE_CHANNEL, false); events.ScheduleEvent(EVENT_ENCAPSULATE, urand(25000, 30000)); break; case EVENT_FLIGHT: EnterPhase(PHASE_FLIGHT); break; default: DoMeleeAttackIfReady(); break; } } if (phase == PHASE_FLIGHT) { switch (events.ExecuteEvent()) { case EVENT_BERSERK: Talk(YELL_BERSERK); DoCast(me, SPELL_BERSERK, true); break; case EVENT_FLIGHT_SEQUENCE: HandleFlightSequence(); break; case EVENT_SUMMON_FOG: { float x, y, z; me->GetPosition(x, y, z); me->UpdateGroundPositionZ(x, y, z); if (Creature* Fog = me->SummonCreature(MOB_VAPOR_TRAIL, x, y, z, 0, TEMPSUMMON_TIMED_DESPAWN, 10000)) { Fog->RemoveAurasDueToSpell(SPELL_TRAIL_TRIGGER); Fog->CastSpell(Fog, SPELL_FOG_TRIGGER, true); me->CastSpell(Fog, SPELL_FOG_FORCE, true); } } events.ScheduleEvent(EVENT_SUMMON_FOG, 1000); break; } } }
void UpdateAI(const uint32 diff) { if (!UpdateVictim()) { if (events.IsInPhase(PHASE_FLIGHT) && !me->IsInEvadeMode()) EnterEvadeMode(); return; } if (me->IsNonMeleeSpellCast(false)) return; events.Update(diff); switch (events.ExecuteEvent()) { case EVENT_BERSERK: if (!me->HasAura(SPELL_BERSERK)) { DoScriptText(YELL_BERSERK, me); DoCast(me, SPELL_BERSERK, true); } events.ScheduleEvent(EVENT_BERSERK, 10000); break; case EVENT_CLEAVE: DoCastVictim( SPELL_CLEAVE, false); events.ScheduleEvent(EVENT_CLEAVE, urand(5000, 10000), 0, PHASE_GROUND); break; case EVENT_CORROSION: DoCastVictim( SPELL_CORROSION, false); events.ScheduleEvent(EVENT_CORROSION, urand(20000, 30000), 0, PHASE_GROUND); break; case EVENT_GAS_NOVA: DoCast(me, SPELL_GAS_NOVA, false); events.ScheduleEvent(EVENT_GAS_NOVA, urand(21000, 26000), 0, PHASE_GROUND); break; case EVENT_ENCAPSULATE: if (Unit* encapsTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 150.0f, true)) DoCast(encapsTarget, SPELL_ENCAPSULATE_CHANNEL, false); if (Unit* tank = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, 150.0f, true)) me->SetTarget(tank->GetGUID()); events.ScheduleEvent(EVENT_ENCAPSULATE, 33000, 0, PHASE_GROUND); break; case EVENT_DEMONIC_VAPOR: DoCast(me, SPELL_VAPOR_SELECT, true); demonicCount++; if (demonicCount < 2) events.ScheduleEvent(EVENT_DEMONIC_VAPOR, 11000, 0, PHASE_FLIGHT); else events.CancelEvent(EVENT_DEMONIC_VAPOR); break; case EVENT_FLIGHT: EnterPhase(PHASE_FLIGHT); break; case EVENT_FOG_CORRUPTION: if (!fogactivated) { events.CancelEvent(EVENT_FOG_CORRUPTION); break; } if (pInstance) { switch (chosenLane) { case 0: pInstance->SetData((direction ? DATA_ACTIVATE_SOUTH_TO_LEFT : DATA_ACTIVATE_SOUTH_TO_RIGHT), (uint32) me->GetPositionY()); break; case 1: pInstance->SetData((direction ? DATA_ACTIVATE_CENTER_TO_LEFT : DATA_ACTIVATE_CENTER_TO_RIGHT), (uint32) me->GetPositionY()); break; case 2: pInstance->SetData((direction ? DATA_ACTIVATE_NORTH_TO_LEFT : DATA_ACTIVATE_NORTH_TO_RIGHT), (uint32) me->GetPositionY()); break; } } events.ScheduleEvent(EVENT_FOG_CORRUPTION, 50, 0, PHASE_FLIGHT); break; default: if (events.IsInPhase(PHASE_GROUND)) DoMeleeAttackIfReady(); else if (events.IsInPhase(PHASE_FLIGHT)) { if (uiFlightTimer) { if (uiFlightTimer <= diff) { uiFlightTimer = 0; HandleFlightSequence(); } else uiFlightTimer -= diff; } } break; } }
void EnterCombat(Unit* /*who*/) override { instance->SetData(DATA_HALAZZIEVENT, IN_PROGRESS); Talk(SAY_AGGRO); EnterPhase(PHASE_LYNX); }
void SpellHit(Unit*, const SpellInfo* spell) override { if (spell->Id == SPELL_TRANSFORM_SPLIT2) EnterPhase(PHASE_HUMAN); }
void UpdateAI(const uint32 diff) { if (!UpdateVictim()) return; if (BerserkTimer <= diff) { me->MonsterYell(YELL_BERSERK, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(me, SOUND_BERSERK); DoCast(me, SPELL_BERSERK, true); BerserkTimer = 60000; } else BerserkTimer -= diff; if (Phase == PHASE_LYNX || Phase == PHASE_ENRAGE) { if (SaberlashTimer <= diff) { // A tank with more than 490 defense skills should receive no critical hit //DoCast(me, 41296, true); DoCast(me->getVictim(), SPELL_SABER_LASH, true); //me->RemoveAurasDueToSpell(41296); SaberlashTimer = 30000; } else SaberlashTimer -= diff; if (FrenzyTimer <= diff) { DoCast(me, SPELL_FRENZY); FrenzyTimer = urand(10000, 15000); } else FrenzyTimer -= diff; if (Phase == PHASE_LYNX) { if (CheckTimer <= diff) { if (HealthBelowPct(25 * (3 - TransformCount))) EnterPhase(PHASE_SPLIT); CheckTimer = 1000; } else CheckTimer -= diff; } } if (Phase == PHASE_HUMAN || Phase == PHASE_ENRAGE) { if (TotemTimer <= diff) { DoCast(me, SPELL_SUMMON_TOTEM); TotemTimer = 20000; } else TotemTimer -= diff; if (ShockTimer <= diff) { if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) { if (pTarget->IsNonMeleeSpellCasted(false)) DoCast(pTarget, SPELL_EARTHSHOCK); else DoCast(pTarget, SPELL_FLAMESHOCK); ShockTimer = 10000 + rand()%5000; } } else ShockTimer -= diff; if (Phase == PHASE_HUMAN) { if (CheckTimer <= diff) { if (!HealthAbovePct(20) /*HealthBelowPct(10)*/) EnterPhase(PHASE_MERGE); else { Unit *Lynx = Unit::GetUnit(*me, LynxGUID); if (Lynx && !Lynx->HealthAbovePct(20) /*Lynx->HealthBelowPct(10)*/) EnterPhase(PHASE_MERGE); } CheckTimer = 1000; } else CheckTimer -= diff; } } if (Phase == PHASE_MERGE) { if (CheckTimer <= diff) { Unit *Lynx = Unit::GetUnit(*me, LynxGUID); if (Lynx) { Lynx->GetMotionMaster()->MoveFollow(me, 0, 0); me->GetMotionMaster()->MoveFollow(Lynx, 0, 0); if (me->IsWithinDistInMap(Lynx, 6.0f)) { if (TransformCount < 3) EnterPhase(PHASE_LYNX); else EnterPhase(PHASE_ENRAGE); } } CheckTimer = 1000; } else CheckTimer -= diff; } DoMeleeAttackIfReady(); }
void SpellHit(Unit*, const SpellEntry *spell) { if (spell->Id == SPELL_TRANSFORM_SPLIT2) EnterPhase(PHASE_HUMAN); }