// searches for one of 5 top threat targets from sisters' threat list, but not her main target Unit* GetNovaTarget() { if(Creature* Alythess = me->GetCreature(pInstance->GetData64(DATA_ALYTHESS))) { Unit* target = Alythess->AI()->SelectUnit(SELECT_TARGET_TOPAGGRO, urand(0,4), 300.0f, true, Alythess->getVictimGUID()); if(target && target->isAlive()) return target; } return NULL; }
// searches for one of 5 top threat targets from sisters' threat list, but not her main target Unit* GetConflagTarget() { if(Creature* Sacrolash = me->GetCreature(pInstance->GetData64(DATA_SACROLASH))) { Unit* target = Sacrolash->AI()->SelectUnit(SELECT_TARGET_TOPAGGRO, urand(0,4), 300.0f, true, Sacrolash->getVictimGUID()); if(target && target->isAlive()) return target; } return NULL; }
void EnterEvadeMode() { if (pInstance->GetData(DATA_SACROLASH) == DONE) { if(Unit* Sacrolash = me->GetUnit(pInstance->GetData64(DATA_SACROLASH))) Sacrolash->ToCreature()->Respawn(); pInstance->SetData(DATA_SACROLASH, NOT_STARTED); } ScriptedAI::EnterEvadeMode(); }
void EnterEvadeMode() { if (pInstance->GetData(DATA_ALYTHESS) == DONE) { if(Unit* Alythess = me->GetUnit(pInstance->GetData64(DATA_ALYTHESS))) Alythess->ToCreature()->Respawn(); pInstance->SetData(DATA_ALYTHESS, NOT_STARTED); } ScriptedAI::EnterEvadeMode(); }
void IsSummonedBy(Unit *pSummoner) { ForceSpellCast(SPELL_IMAGE_VISUAL, CAST_SELF, INTERRUPT_AND_CAST_INSTANTLY); DoZoneInCombat(); //if (Unit *pTarget = SelectUnit(SELECT_TARGET_FARTHEST, urand(0, 4), 400, true)) if(Creature* Alythess = me->GetCreature(pInstance->GetData64(DATA_ALYTHESS))) { if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0, 400, true, Alythess->getVictimGUID(), 10.0f)) AttackStart(pTarget); } }
uint32 IntroStep(uint32 step) { Creature* pSacrolash = me->GetCreature(pInstance->GetData64(DATA_SACROLASH)); if (!pSacrolash) return 0; switch (step) { case 0: return 0; case 1: DoScriptText(YELL_INTRO_SAC_1, pSacrolash); return 1000; case 2: DoScriptText(YELL_INTRO_ALY_2, me); return 1000; case 3: DoScriptText(YELL_INTRO_SAC_3, pSacrolash); return 2000; case 4: DoScriptText(YELL_INTRO_ALY_4, me); return 1000; case 5: DoScriptText(YELL_INTRO_SAC_5, pSacrolash); return 2000; case 6: DoScriptText(YELL_INTRO_ALY_6, me); return 1000; case 7: DoScriptText(YELL_INTRO_SAC_7, pSacrolash); return 3000; case 8: DoScriptText(YELL_INTRO_ALY_8, me); return 3000; case 9: pInstance->SetData(DATA_EREDAR_TWINS_INTRO, DONE); return 900000; default: return 10000; } }
void UpdateAI(const uint32 diff) { if(!pInstance->instance->GetCreature(pInstance->GetData64(DATA_ZARITHRIAN))->isAlive()) me->DisappearAndDie(); if(!UpdateVictim()) return; if(uiLavaAttackTimer <= diff) { DoCastVictim(pInstance->instance->GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL ? SPELL_ONYX_LAVA_ATTACK_25 : SPELL_ONYX_LAVA_ATTACK); uiLavaAttackTimer = urand(2000, 5000); }else uiLavaAttackTimer -= diff; if(uiBlastNovaTimer <= diff) { DoCastVictim(pInstance->instance->GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL ? SPELL_BLAST_NOVA_25 : SPELL_BLAST_NOVA); uiBlastNovaTimer = urand(8000, 10000); }else uiBlastNovaTimer -= diff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { if(!pInstance) return; ScriptedAI::UpdateAI(diff); UpdateTimer = pInstance->GetData(SPECHIAL_TIMER); if(UpdateTimer <= diff) { switch(pInstance->GetData(PHASE_SPECHIAL)) { case 39: DoScriptText(SAY_INTRO_LICHTKING_2, me); pInstance->SetData(PHASE_SPECHIAL, 40); pInstance->SetData(SPECHIAL_TIMER, 24500); break; case 41: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK); pInstance->SetData(PHASE_SPECHIAL, 42); pInstance->SetData(SPECHIAL_TIMER, 31500); break; case 42: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); DoScriptText(SAY_INTRO_LICHTKING_4, me); pInstance->SetData(PHASE_SPECHIAL, 43); pInstance->SetData(SPECHIAL_TIMER, 70000); break; case 43: me->CastSpell(me,72262,false); pInstance->SetData(PHASE_SPECHIAL, 44); pInstance->SetData(SPECHIAL_TIMER, 12000); break; case 44: pInstance->SetData(PHASE_SPECHIAL, 45); pInstance->SetData(SPECHIAL_TIMER, 18000); break; case 45: pInstance->HandleGameObject(pInstance->GetData64(20), true); pInstance->SetData(PHASE_SPECHIAL, 46); pInstance->SetData(SPECHIAL_TIMER, 2500); break; case 46: DoScriptText(SAY_INTRO_LICHTKING_5, me); me->ForcedDespawn(); pInstance->SetData(PHASE_SPECHIAL, 47); pInstance->SetData(SPECHIAL_TIMER, 15500); break; } } else { UpdateTimer -= diff; pInstance->SetData(SPECHIAL_TIMER, UpdateTimer); } }
void UpdateAI(const uint32 diff) { if(!pInstance) return; ScriptedAI::UpdateAI(diff); UpdateTimer = pInstance->GetData(SPECHIAL_TIMER); if(UpdateTimer <= diff) { switch(pInstance->GetData(PHASE_SPECHIAL)) { case 1: if(pInstance->GetData(PHASE_1)==0) { DoScriptText(SAY_INTRO_START, me); pInstance->SetData(PHASE_SPECHIAL, 2); pInstance->SetData(SPECHIAL_TIMER, 70000); } break; case 2: if(pInstance->GetData(PHASE_1)==0) { DoScriptText(SAY_INTRO_BEGINN, me); pInstance->SetData(PHASE_SPECHIAL, 3); pInstance->SetData(SPECHIAL_TIMER, 15000); } break; case 3: if(pInstance->GetData(PHASE_1)==0) { DoScriptText(SAY_INTRO_3, me); pInstance->SetData(PHASE_SPECHIAL, 4); pInstance->SetData(SPECHIAL_TIMER, 15000); } break; case 4: if(pInstance->GetData(PHASE_1)==0) { Gormok = me->SummonCreature(NPC_GORMOK_IMPALER, 563.14f, 215.38f, 395.08f, 4.68f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); Gormok->GetMotionMaster()->MovePoint(0, 563.74f, 173.53f, 394.32f); Gormok->SetReactState(REACT_PASSIVE); Gormok->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); pInstance->SetData(PHASE_SPECHIAL, 5); pInstance->SetData(SPECHIAL_TIMER, 15000); } break; case 6: if(pInstance->GetData(PHASE_1)==0) { pInstance->SetData(PHASE_SPECHIAL, 7); pInstance->SetData(SPECHIAL_TIMER, 5000); } break; case 7: if(pInstance->GetData(PHASE_1)==0) { Creature* cre = Unit::GetCreature(*me, pInstance->GetData64(NPC_ANONSER)); CAST_AI(npc_tcrus_announcerAI, cre->AI())->StartEvent(); Gormok->SetReactState(REACT_AGGRESSIVE); Gormok->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); pInstance->SetData(PHASE_SPECHIAL, 8); pInstance->SetData(SPECHIAL_TIMER, 6000); } break; case 8: if(pInstance->GetData(PHASE_1)==IN_PROGRESS) { pInstance->SetData(PHASE_SPECHIAL, 9); pInstance->SetData(SPECHIAL_TIMER, 500); } break; case 9: if(pInstance->GetData(PHASE_2)==IN_PROGRESS) { DoScriptText(SAY_INTRO_DREADSCALE, me); Dreadscale = me->SummonCreature(NPC_DREADSCALE,562.354675, 215.781113, 395.087036, 4.725680,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000); Dreadscale->SetReactState(REACT_PASSIVE); Dreadscale->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); Dreadscale->GetMotionMaster()->MovePoint(0, 563.74f, 173.53f, 394.32f); Acidmaw = me->SummonCreature(NPC_ACIDMAW,546.526184, 157.534195, 394.320557, 4.725680,TEMPSUMMON_CORPSE_TIMED_DESPAWN,10000); Acidmaw->SetVisibility(VISIBILITY_OFF); Acidmaw->SetReactState(REACT_PASSIVE); pInstance->SetData(PHASE_SPECHIAL, 10); pInstance->SetData(SPECHIAL_TIMER, 25000); } break; case 10: if(pInstance->GetData(PHASE_2)==IN_PROGRESS) { Acidmaw->SetVisibility(VISIBILITY_ON); Acidmaw->CastSpell(Acidmaw, 35177, false); Acidmaw->SetReactState(REACT_AGGRESSIVE); Dreadscale->SetReactState(REACT_AGGRESSIVE); Dreadscale->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); pInstance->SetData(PHASE_SPECHIAL, 11); pInstance->SetData(SPECHIAL_TIMER, 5000); } break; case 11: if(pInstance->GetData(PHASE_3)==IN_PROGRESS) { IceHowl = me->SummonCreature(NPC_ICEHOWL, 563.14f, 215.38f, 395.08f, 4.68f, TEMPSUMMON_DEAD_DESPAWN, 600000); IceHowl->GetMotionMaster()->MovePoint(0, 563.74f, 173.53f, 394.32f); IceHowl->SetReactState(REACT_PASSIVE); IceHowl->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); DoScriptText(SAY_INTRO_EISHEULER, me); pInstance->SetData(PHASE_SPECHIAL, 12); pInstance->SetData(SPECHIAL_TIMER, 20000); } break; case 12: if(pInstance->GetData(PHASE_3)==IN_PROGRESS) { IceHowl->SetReactState(REACT_AGGRESSIVE); IceHowl->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); pInstance->SetData(PHASE_SPECHIAL, 13); pInstance->SetData(SPECHIAL_TIMER, 500); } break; case 13: if(pInstance->GetData(PHASE_3)==DONE) { DoScriptText(-1999930, me); pInstance->SetData(PHASE_SPECHIAL, 14); pInstance->SetData(SPECHIAL_TIMER, 500); } break; case 15: DoScriptText(SAY_JARAXXUS_INTRO_1, me); pInstance->SetData(PHASE_SPECHIAL, 16); Fizzle = me->SummonCreature(NPC_FIZZLEBANG, 564.008057, 176.066330, 394.372772, 4.719572, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000); pInstance->SetData(SPECHIAL_TIMER, 500); break; case 29: DoScriptText(SAY_JARAXXUS_INTRO_7, me); pInstance->SetData(PHASE_SPECHIAL, 30); pInstance->SetData(SPECHIAL_TIMER, 10000); break; case 30: if (Creature* pJaraxxus = GetClosestCreatureWithEntry(me, NPC_LORD_JARAXXUS, 100.0f)) Jaraxxus = pJaraxxus; Jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); Jaraxxus->SetReactState(REACT_AGGRESSIVE); pInstance->SetData(PHASE_SPECHIAL, 31); pInstance->SetData(SPECHIAL_TIMER, 5000); break; case 31: if(pInstance->GetData(PHASE_4)==IN_PROGRESS) { pInstance->SetData(PHASE_SPECHIAL, 32); pInstance->SetData(SPECHIAL_TIMER, 5000); } break; case 32: if(pInstance->GetData(PHASE_4)==DONE) { DoScriptText(SAY_JARAXXUS_OUTRO_1, me); pInstance->SetData(PHASE_SPECHIAL, 33); pInstance->SetData(SPECHIAL_TIMER, 45500); } break; case 35: if(pInstance->GetData(PHASE_4)==DONE) { DoScriptText(SAY_JARAXXUS_OUTRO_4, me); pInstance->SetData(PHASE_SPECHIAL, 36); pInstance->SetData(SPECHIAL_TIMER, 15500); } break; case 37: DoScriptText(SAY_INTRO_LICHTKING_1, me); pInstance->SetData(PHASE_SPECHIAL, 38); pInstance->SetData(SPECHIAL_TIMER, 36000); break; case 38: Lichking = me->SummonCreature(NPC_LICH_KING, 564.008057, 176.066330, 394.372772, 4.719572); Lichking->GetMotionMaster()->MovePoint(0, 563.955444f, 140.563583f, 393.836548f); Lichking->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); pInstance->SetData(PHASE_SPECHIAL, 39); pInstance->SetData(SPECHIAL_TIMER, 500); break; case 40: DoScriptText(SAY_INTRO_LICHTKING_3, me); pInstance->SetData(PHASE_SPECHIAL, 41); pInstance->SetData(SPECHIAL_TIMER, 10500); break; case 50: if(pInstance->GetData(PHASE_5)==IN_PROGRESS) { DoScriptText(SAY_INTRO_FACTION_HORDE_1, me); pInstance->SetData(PHASE_SPECHIAL, 51); pInstance->SetData(SPECHIAL_TIMER, 25000); } break; case 52: DoScriptText(SAY_INTRO_FACTION_HORDE_3, me); pInstance->SetData(PHASE_SPECHIAL, 53); pInstance->SetData(SPECHIAL_TIMER, 25000); break; case 54: if(pInstance->GetData(PHASE_5)==DONE) { DoScriptText(SAY_OUTRO_FACTION, me); pInstance->SetData(PHASE_SPECHIAL, 55); pInstance->SetData(SPECHIAL_TIMER, 25000); } break; case 57: DoScriptText(SAY_INTRO_TWINS, me); pInstance->SetData(PHASE_SPECHIAL, 58); pInstance->SetData(SPECHIAL_TIMER, 25000); break; case 58: DoScriptText(SAY_INTRO_BEGINN, me); pInstance->SetData(PHASE_SPECHIAL, 59); pInstance->SetData(SPECHIAL_TIMER, 25000); break; } } else { UpdateTimer -= diff; pInstance->SetData(SPECHIAL_TIMER, UpdateTimer); } }
void StartEvent() { pInstance = (ScriptedInstance*)me->GetInstanceData(); if(pInstance && pInstance->GetData(PHASE_1) == NOT_STARTED && pInstance->GetData(PHASE_2) == NOT_STARTED && pInstance->GetData(PHASE_3) == NOT_STARTED && pInstance->GetData(PHASE_4) == NOT_STARTED && pInstance->GetData(PHASE_5) == NOT_STARTED && pInstance->GetData(PHASE_6) == NOT_STARTED && pInstance->GetData(PHASE_7) == NOT_STARTED) { pInstance->SetData(PHASE_1, IN_PROGRESS); } if(pInstance && pInstance->GetData(PHASE_1) == DONE && pInstance->GetData(PHASE_2) == DONE && pInstance->GetData(PHASE_3) == DONE && pInstance->GetData(PHASE_4) == NOT_STARTED && pInstance->GetData(PHASE_5) == NOT_STARTED && pInstance->GetData(PHASE_6) == NOT_STARTED && pInstance->GetData(PHASE_7) == NOT_STARTED) { pInstance->SetData(PHASE_4, IN_PROGRESS); } if(pInstance && pInstance->GetData(PHASE_1) == DONE && pInstance->GetData(PHASE_2) == DONE && pInstance->GetData(PHASE_3) == DONE && pInstance->GetData(PHASE_4) == DONE && pInstance->GetData(PHASE_5) == NOT_STARTED && pInstance->GetData(PHASE_6) == NOT_STARTED && pInstance->GetData(PHASE_7) == NOT_STARTED) { pInstance->SetData(PHASE_5, IN_PROGRESS); SummonChampions(); } if(pInstance && pInstance->GetData(PHASE_1) == DONE && pInstance->GetData(PHASE_2) == DONE && pInstance->GetData(PHASE_3) == DONE && pInstance->GetData(PHASE_4) == DONE && pInstance->GetData(PHASE_5) == DONE && pInstance->GetData(PHASE_6) == NOT_STARTED && pInstance->GetData(PHASE_7) == NOT_STARTED) { Fjola = me->SummonCreature(NPC_FJOLA, 565.11, 260.0, 397.09+4, 4.72, TEMPSUMMON_MANUAL_DESPAWN, 0); Fjola->SetFlying(true); Fjola->GetMotionMaster()->MovePoint(0, 579.90f, 172.35f, 394.68f); Eydis = me->SummonCreature(NPC_EYDIS, 563.11, 260.0, 397.09+4, 4.72, TEMPSUMMON_MANUAL_DESPAWN, 0); Eydis->SetFlying(true); Eydis->GetMotionMaster()->MovePoint(0, 548.57f, 172.59f, 394.68f); pInstance->SetData(PHASE_6, IN_PROGRESS); } if(pInstance && pInstance->GetData(PHASE_1) == DONE && pInstance->GetData(PHASE_2) == DONE && pInstance->GetData(PHASE_3) == DONE && pInstance->GetData(PHASE_4) == DONE && pInstance->GetData(PHASE_5) == DONE && pInstance->GetData(PHASE_6) == DONE && pInstance->GetData(PHASE_7) == NOT_STARTED) { pInstance->SetData(PHASE_7, IN_PROGRESS); pInstance->HandleGameObject(pInstance->GetData64(20), true); } }