void WaypointReached(uint32 i) { Player* pPlayer = GetPlayerForEscort(); if (!pPlayer) return; switch (i) { case 9: if (Creature *Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 100.0f)) MrfloppyGUID = Mrfloppy->GetGUID(); break; case 10: if (Unit::GetCreature(*me, MrfloppyGUID)) { DoScriptText(SAY_WORGHAGGRO1, me); me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX()+5, me->GetPositionY()+2, me->GetPositionZ()+1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000); } break; case 11: if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); break; case 17: if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); DoScriptText(SAY_WORGRAGGRO3, me); if (Creature *RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX()+10, me->GetPositionY()+8, me->GetPositionZ()+2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000)) { RWORG->setFaction(35); RWORGGUID = RWORG->GetGUID(); } break; case 18: if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) { if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID)) RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ()); DoCast(Mrfloppy, SPELL_MRFLOPPY); } break; case 19: if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) { if (Mrfloppy->HasAura(SPELL_MRFLOPPY, 0)) { if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID)) Mrfloppy->EnterVehicle(RWORG); } } break; case 20: if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID)) RWORG->HandleEmoteCommand(34); break; case 21: if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) { if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID)) { RWORG->Kill(Mrfloppy); Mrfloppy->ExitVehicle(); RWORG->setFaction(14); RWORG->GetMotionMaster()->MovePoint(0, RWORG->GetPositionX()+10, RWORG->GetPositionY()+80, RWORG->GetPositionZ()); DoScriptText(SAY_VICTORY2, me); } } break; case 22: if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) { if (Mrfloppy->isDead()) { if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID)) RWORG->DisappearAndDie(); me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ()); Mrfloppy->setDeathState(ALIVE); Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); DoScriptText(SAY_VICTORY3, me); } } break; case 24: if (pPlayer) { Completed = true; pPlayer->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me); DoScriptText(SAY_QUEST_COMPLETE, me, pPlayer); } me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); break; case 25: DoScriptText(SAY_VICTORY4, me); break; case 27: me->DisappearAndDie(); if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID)) Mrfloppy->DisappearAndDie(); break; } }
void UpdateEscortAI(const uint32 uiDiff) { if (uiPhaseTimer <= uiDiff) { switch (uiStep) { case 1: if (instance) { if (instance->GetData(DATA_BRANN_EVENT) != NOT_STARTED) return; instance->SetData(DATA_BRANN_EVENT, IN_PROGRESS); } bIsBattle = false; DoScriptText(SAY_ESCORT_START, me); SetRun(true); JumpToNextStep(0); break; case 3: SetEscortPaused(false); JumpToNextStep(0); break; case 5: if (instance) if (Creature* temp = (Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))) DoScriptText(SAY_EVENT_INTRO_3_ABED, temp); JumpToNextStep(8500); break; case 6: DoScriptText(SAY_EVENT_A_1, me); JumpToNextStep(6500); break; case 7: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_A_2_KADD, temp); JumpToNextStep(12500); break; case 8: DoScriptText(SAY_EVENT_A_3, me); if (instance) instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), true); if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bKaddrakActivated = true; JumpToNextStep(5000); break; case 9: me->SetReactState(REACT_PASSIVE); SpawnDwarf(1); JumpToNextStep(20000); break; case 10: DoScriptText(SAY_EVENT_B_1, me); JumpToNextStep(6000); break; case 11: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_B_2_MARN, temp); SpawnDwarf(1); JumpToNextStep(20000); break; case 12: DoScriptText(SAY_EVENT_B_3, me); if (instance) instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), true); if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bMarnakActivated = true; JumpToNextStep(10000); break; case 13: SpawnDwarf(1); JumpToNextStep(10000); break; case 14: SpawnDwarf(2); JumpToNextStep(20000); break; case 15: DoScriptText(SAY_EVENT_C_1, me); SpawnDwarf(1); JumpToNextStep(10000); break; case 16: SpawnDwarf(2); JumpToNextStep(20000); break; case 17: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_C_2_ABED, temp); SpawnDwarf(1); JumpToNextStep(20000); break; case 18: DoScriptText(SAY_EVENT_C_3, me); if (instance) instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), true); if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bAbedneumActivated = true; JumpToNextStep(5000); break; case 19: SpawnDwarf(2); JumpToNextStep(10000); break; case 20: SpawnDwarf(1); JumpToNextStep(15000); break; case 21: DoScriptText(SAY_EVENT_D_1, me); SpawnDwarf(3); JumpToNextStep(20000); break; case 22: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_D_2_ABED, temp); SpawnDwarf(1); JumpToNextStep(5000); break; case 23: SpawnDwarf(2); JumpToNextStep(15000); break; case 24: DoScriptText(SAY_EVENT_D_3, me); SpawnDwarf(3); JumpToNextStep(5000); break; case 25: SpawnDwarf(1); JumpToNextStep(5000); break; case 26: SpawnDwarf(2); JumpToNextStep(10000); break; case 27: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_D_4_ABED, temp); SpawnDwarf(1); JumpToNextStep(10000); break; case 28: me->SetReactState(REACT_DEFENSIVE); DoScriptText(SAY_EVENT_END_01, me); me->SetStandState(UNIT_STAND_STATE_STAND); if (instance) instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), true); if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) temp->DealDamage(temp, temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); bIsBattle = true; SetEscortPaused(false); JumpToNextStep(6500); break; case 29: DoScriptText(SAY_EVENT_END_02, me); if (instance) instance->SetData(DATA_BRANN_EVENT, DONE); me->CastSpell(me, SPELL_REWARD_ACHIEVEMENT, true); JumpToNextStep(5500); break; case 30: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_03_ABED, temp); JumpToNextStep(8500); break; case 31: DoScriptText(SAY_EVENT_END_04, me); JumpToNextStep(11500); break; case 32: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_05_ABED, temp); JumpToNextStep(11500); break; case 33: DoScriptText(SAY_EVENT_END_06, me); JumpToNextStep(4500); break; case 34: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_07_ABED, temp); JumpToNextStep(22500); break; case 35: DoScriptText(SAY_EVENT_END_08, me); JumpToNextStep(7500); break; case 36: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_09_KADD, temp); JumpToNextStep(18500); break; case 37: DoScriptText(SAY_EVENT_END_10, me); JumpToNextStep(5500); break; case 38: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_11_KADD, temp); JumpToNextStep(20500); break; case 39: DoScriptText(SAY_EVENT_END_12, me); JumpToNextStep(2500); break; case 40: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_13_KADD, temp); JumpToNextStep(19500); break; case 41: DoScriptText(SAY_EVENT_END_14, me); JumpToNextStep(10500); break; case 42: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_15_MARN, temp); JumpToNextStep(6500); break; case 43: DoScriptText(SAY_EVENT_END_16, me); JumpToNextStep(6500); break; case 44: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_17_MARN, temp); JumpToNextStep(25500); break; case 45: DoScriptText(SAY_EVENT_END_18, me); JumpToNextStep(23500); break; case 46: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_19_MARN, temp); JumpToNextStep(3500); break; case 47: DoScriptText(SAY_EVENT_END_20, me); JumpToNextStep(8500); break; case 48: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_21_ABED, temp); JumpToNextStep(5500); break; case 49: { if (instance) { instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), false); instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), false); instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), false); instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), false); } Player* player = GetPlayerForEscort(); if (player) player->GroupEventHappens(QUEST_HALLS_OF_STONE, me); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); JumpToNextStep(180000); break; } case 50: SetEscortPaused(false); break; } } else uiPhaseTimer -= uiDiff; if (!bIsLowHP && HealthBelowPct(30)) { DoScriptText(SAY_LOW_HEALTH, me); bIsLowHP = true; } else if (bIsLowHP && !HealthBelowPct(30)) bIsLowHP = false; if (!UpdateVictim()) return; DoMeleeAttackIfReady(); }
void WaypointReached(uint32 waypointId) override { Player* player = GetPlayerForEscort(); if (!player) return; switch (waypointId) { case 9: if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 100.0f)) _mrfloppyGUID = Mrfloppy->GetGUID(); break; case 10: if (ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { Talk(SAY_WORGHAGGRO1); me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX()+5, me->GetPositionY()+2, me->GetPositionZ()+1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000); } break; case 11: if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); break; case 17: if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); Talk(SAY_WORGRAGGRO3); if (Creature* RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX()+10, me->GetPositionY()+8, me->GetPositionZ()+2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000)) { RWORG->setFaction(35); _RavenousworgGUID = RWORG->GetGUID(); } break; case 18: if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ()); DoCast(Mrfloppy, SPELL_MRFLOPPY); } break; case 19: if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { if (Mrfloppy->HasAura(SPELL_MRFLOPPY)) { if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) Mrfloppy->EnterVehicle(RWORG); } } break; case 20: if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) RWORG->HandleEmoteCommand(34); break; case 21: if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) { RWORG->Kill(Mrfloppy); Mrfloppy->ExitVehicle(); RWORG->setFaction(14); RWORG->GetMotionMaster()->MovePoint(0, RWORG->GetPositionX()+10, RWORG->GetPositionY()+80, RWORG->GetPositionZ()); Talk(SAY_VICTORY2); } } break; case 22: if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) { if (Mrfloppy->isDead()) { if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID)) RWORG->DisappearAndDie(); me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ()); Mrfloppy->setDeathState(ALIVE); Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); Talk(SAY_VICTORY3); } } break; case 24: if (player) { player->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me); Talk(SAY_QUEST_COMPLETE, player); } me->SetWalk(false); break; case 25: Talk(SAY_VICTORY4); break; case 27: me->DisappearAndDie(); if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID)) Mrfloppy->DisappearAndDie(); break; } }
void UpdateAI(uint32 diff) { if (speechCounter) { if (speechTimer <= diff) { Player* player = Unit::GetPlayer(*me, playerGUID); if (!player) { EnterEvadeMode(); return; } switch (speechCounter) { case 1: Talk(SAY_PERSUADED1); speechTimer = 8000; break; case 2: Talk(SAY_PERSUADED2); speechTimer = 8000; break; case 3: Talk(SAY_PERSUADED3); speechTimer = 8000; break; case 4: Talk(SAY_PERSUADED4); speechTimer = 8000; break; case 5: sCreatureTextMgr->SendChat(me, SAY_PERSUADED5, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); speechTimer = 8000; break; case 6: Talk(SAY_PERSUADED6); player->Kill(me); speechCounter = 0; player->GroupEventHappens(QUEST_HOW_TO_WIN_FRIENDS, me); return; } ++speechCounter; DoCastAOE(SPELL_THREAT_PULSE, true); } else speechTimer -= diff; return; } if (!UpdateVictim()) return; DoMeleeAttackIfReady(); }
void WaypointReached(uint32 i) { Player* pPlayer = GetPlayerForEscort(); if (!pPlayer) return; switch(i) { case 23: DoScriptText(SAY_OOX_AMBUSH, me); break; case 24: for (uint8 i = 0; i < 3; ++i) { float x, y, z; switch (i) { case 0: me->GetNearPoint(x, y, z, 0.0f, 15.0f, 0.0f); me->SummonCreature(SPAWN_FIRST, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 1: me->GetNearPoint(x, y, z, 0.0f, 15.0f, 2.0f); me->SummonCreature(SPAWN_FIRST, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 2: me->GetNearPoint(x, y, z, 0.0f, 15.0f, 4.0f); me->SummonCreature(SPAWN_FIRST, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; } } break; case 57: DoScriptText(SAY_OOX_AMBUSH, me); break; case 58: for (uint8 i = 0; i < 3; ++i) { float x, y, z; switch (i) { case 0: me->GetNearPoint(x, y, z, 0.0f, 15.0f, 0.0f); me->SummonCreature(SPAWN_SECOND_1, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 1: me->GetNearPoint(x, y, z, 0.0f, 15.0f, 2.0f); me->SummonCreature(SPAWN_SECOND_2, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 2: me->GetNearPoint(x, y, z, 0.0f, 15.0f, 4.0f); me->SummonCreature(SPAWN_SECOND_2, x, y, z, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; } } break; case 88: if (pPlayer) { DoScriptText(SAY_OOX_END, me); pPlayer->GroupEventHappens(Q_OOX17, me); } break; } }
void WaypointReached(uint32 i) override { Player* pPlayer = GetPlayerForEscort(); if (!pPlayer) { return; } switch (i) { case 0: DoScriptText(SAY_START_2, m_creature, pPlayer); break; case 13: #if defined (WOTLK) || defined (CATA) DoScriptText(SAY_END, m_creature, pPlayer); #endif #if defined (CLASSIC) || defined (TBC) switch (urand(0, 1)) { case 0: DoScriptText(SAY_END, m_creature, pPlayer); break; case 1: DoScriptText(SAY_PROGRESS, m_creature); break; } #endif pPlayer->GroupEventHappens(QUEST_ERLAND, m_creature); #if defined (CLASSIC) || defined (TBC) m_creature->SetWalk(false); #endif break; #if defined (WOTLK) || defined (CATA) case 14: if (Creature* pRane = GetClosestCreatureWithEntry(m_creature, NPC_RANE, 45.0f)) DoScriptText(SAY_RANE, pRane, m_creature); break; case 15: DoScriptText(SAY_RANE_REPLY, m_creature); break; #endif case 16: #if defined (WOTLK) || defined (CATA) DoScriptText(SAY_CHECK_NEXT, m_creature); #endif #if defined (CLASSIC) || defined (TBC) m_creature->SetWalk(true); SetEscortPaused(true); #endif break; #if defined (WOTLK) || defined (CATA) case 24: DoScriptText(SAY_QUINN, m_creature); break; #endif case 25: #if defined (CLASSIC) || defined (TBC) SetEscortPaused(true); #endif #if defined (WOTLK) || defined (CATA) if (Creature* pQuinn = GetClosestCreatureWithEntry(m_creature, NPC_QUINN, 45.0f)) DoScriptText(SAY_QUINN_REPLY, pQuinn, m_creature); #endif break; #if defined (WOTLK) || defined (CATA) case 26: DoScriptText(SAY_BYE, m_creature); break; #endif } }
void UpdateEscortAI(const uint32 uiDiff) { if (uiPhaseTimer <= uiDiff) { switch (uiStep) { case 1: if (instance) { if (instance->GetData(DATA_BRANN_EVENT) != NOT_STARTED) return; instance->SetData(DATA_BRANN_EVENT, IN_PROGRESS); } bIsBattle = false; DoScriptText(SAY_ESCORT_START, me); SetRun(true); JumpToNextStep(0); break; case 3: SetEscortPaused(false); JumpToNextStep(0); break; case 5: if (instance) if (Creature* temp = (Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))) DoScriptText(SAY_EVENT_INTRO_3_ABED, temp); JumpToNextStep(8500); break; case 6: DoScriptText(SAY_EVENT_A_1, me); JumpToNextStep(6500); break; case 7: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_A_2_KADD, temp); JumpToNextStep(12500); break; case 8: DoScriptText(SAY_EVENT_A_3, me); if (instance) if (GameObject* goKaddrak = instance->instance->GetGameObject(instance->GetData64(DATA_GO_KADDRAK))) { goKaddrak->SetGoAnimProgress(0); goKaddrak->SendCustomAnim(goKaddrak->GetGoAnimProgress()); } if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bKaddrakActivated = true; JumpToNextStep(5000); break; case 9: me->SetReactState(REACT_PASSIVE); SpawnDwarf(1); JumpToNextStep(20000); break; case 10: DoScriptText(SAY_EVENT_B_1, me); JumpToNextStep(6000); break; case 11: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_B_2_MARN, temp); SpawnDwarf(1); JumpToNextStep(20000); break; case 12: DoScriptText(SAY_EVENT_B_3, me); if (instance) if (GameObject* goMarnak = instance->instance->GetGameObject(instance->GetData64(DATA_GO_MARNAK))) { goMarnak->SetGoAnimProgress(0); goMarnak->SendCustomAnim(goMarnak->GetGoAnimProgress()); } if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bMarnakActivated = true; JumpToNextStep(10000); break; case 13: SpawnDwarf(1); JumpToNextStep(10000); break; case 14: SpawnDwarf(2); JumpToNextStep(20000); break; case 15: DoScriptText(SAY_EVENT_C_1, me); SpawnDwarf(1); JumpToNextStep(10000); break; case 16: SpawnDwarf(2); JumpToNextStep(20000); break; case 17: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_C_2_ABED, temp); SpawnDwarf(1); JumpToNextStep(20000); break; case 18: DoScriptText(SAY_EVENT_C_3, me); if (instance) if (GameObject* goAbedneum = instance->instance->GetGameObject(instance->GetData64(DATA_GO_ABEDNEUM))) { goAbedneum->SetGoAnimProgress(0); goAbedneum->SendCustomAnim(goAbedneum->GetGoAnimProgress()); } if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->bAbedneumActivated = true; JumpToNextStep(5000); break; case 19: SpawnDwarf(2); JumpToNextStep(10000); break; case 20: SpawnDwarf(1); JumpToNextStep(15000); break; case 21: DoScriptText(SAY_EVENT_D_1, me); SpawnDwarf(3); JumpToNextStep(20000); break; case 22: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_D_2_ABED, temp); SpawnDwarf(1); JumpToNextStep(5000); break; case 23: SpawnDwarf(2); JumpToNextStep(15000); break; case 24: DoScriptText(SAY_EVENT_D_3, me); SpawnDwarf(3); JumpToNextStep(5000); break; case 25: SpawnDwarf(1); JumpToNextStep(5000); break; case 26: SpawnDwarf(2); JumpToNextStep(10000); break; case 27: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_D_4_ABED, temp); SpawnDwarf(1); JumpToNextStep(10000); break; case 28: me->SetReactState(REACT_DEFENSIVE); DoScriptText(SAY_EVENT_END_01, me); me->SetStandState(UNIT_STAND_STATE_STAND); DespawnDwarf(); if (instance) { instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), true); instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), true); instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), true); instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), true); } if (Creature* temp = Unit::GetCreature(*me, uiControllerGUID)) { CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, temp->AI())->activatedByBrann = false; temp->DealDamage(temp, temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); } bIsBattle = true; SetEscortPaused(false); JumpToNextStep(6500); break; case 29: { DoScriptText(SAY_EVENT_END_02, me); if (instance) { instance->SetData(DATA_BRANN_EVENT, DONE); // Achievement criteria is with spell 59046 which does not exist. // There is thus no way it can be given by casting the spell on the players. instance->UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, 59046, me); } me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); Player* player = GetPlayerForEscort(); if (player) player->GroupEventHappens(QUEST_HALLS_OF_STONE, me); JumpToNextStep(5500); break; } case 30: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_03_ABED, temp); JumpToNextStep(8500); break; case 31: DoScriptText(SAY_EVENT_END_04, me); JumpToNextStep(11500); break; case 32: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_05_ABED, temp); JumpToNextStep(11500); break; case 33: DoScriptText(SAY_EVENT_END_06, me); JumpToNextStep(4500); break; case 34: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_07_ABED, temp); JumpToNextStep(22500); break; case 35: DoScriptText(SAY_EVENT_END_08, me); JumpToNextStep(7500); break; case 36: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_09_KADD, temp); JumpToNextStep(18500); break; case 37: DoScriptText(SAY_EVENT_END_10, me); JumpToNextStep(5500); break; case 38: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_11_KADD, temp); JumpToNextStep(20500); break; case 39: DoScriptText(SAY_EVENT_END_12, me); JumpToNextStep(2500); break; case 40: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_13_KADD, temp); JumpToNextStep(19500); break; case 41: DoScriptText(SAY_EVENT_END_14, me); JumpToNextStep(10500); break; case 42: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_15_MARN, temp); JumpToNextStep(6500); break; case 43: DoScriptText(SAY_EVENT_END_16, me); JumpToNextStep(6500); break; case 44: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_17_MARN, temp); JumpToNextStep(25500); break; case 45: DoScriptText(SAY_EVENT_END_18, me); JumpToNextStep(23500); break; case 46: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_19_MARN, temp); JumpToNextStep(3500); break; case 47: DoScriptText(SAY_EVENT_END_20, me); JumpToNextStep(8500); break; case 48: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_21_ABED, temp); JumpToNextStep(5500); break; case 49: { if (instance) { instance->HandleGameObject(instance->GetData64(DATA_GO_TRIBUNAL_CONSOLE), false); instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), false); instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), false); instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), false); instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), false); } JumpToNextStep(180000); break; } case 50: SetEscortPaused(false); break; } } else uiPhaseTimer -= uiDiff; if (!bIsLowHP && HealthBelowPct(30)) { DoScriptText(SAY_LOW_HEALTH, me); bIsLowHP = true; } else if (bIsLowHP && !HealthBelowPct(30)) bIsLowHP = false; if (!UpdateVictim()) return; DoMeleeAttackIfReady(); }
void SmartAI::EndPath(bool fail) { GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_ENDED, nullptr, mLastWP->id, GetScript()->GetPathId()); RemoveEscortState(SMART_ESCORT_ESCORTING | SMART_ESCORT_PAUSED | SMART_ESCORT_RETURNING); mWayPoints = nullptr; mCurrentWPID = 0; mWPPauseTimer = 0; mLastWP = nullptr; if (mCanRepeatPath) { if (IsAIControlled()) StartPath(mRun, GetScript()->GetPathId(), true); } else GetScript()->SetPathId(0); ObjectList* targets = GetScript()->GetTargetList(SMART_ESCORT_TARGETS); if (targets && mEscortQuestID) { if (targets->size() == 1 && GetScript()->IsPlayer((*targets->begin()))) { Player* player = (*targets->begin())->ToPlayer(); if (!fail && player->IsAtGroupRewardDistance(me) && !player->HasCorpse()) player->GroupEventHappens(mEscortQuestID, me); if (fail && player->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE) player->FailQuest(mEscortQuestID); if (Group* group = player->GetGroup()) { for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next()) { Player* groupGuy = groupRef->GetSource(); if (!fail && groupGuy->IsAtGroupRewardDistance(me) && !groupGuy->HasCorpse()) groupGuy->AreaExploredOrEventHappens(mEscortQuestID); if (fail && groupGuy->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE) groupGuy->FailQuest(mEscortQuestID); } } } else { for (ObjectList::iterator iter = targets->begin(); iter != targets->end(); ++iter) { if (GetScript()->IsPlayer((*iter))) { Player* player = (*iter)->ToPlayer(); if (!fail && player->IsAtGroupRewardDistance(me) && !player->HasCorpse()) player->AreaExploredOrEventHappens(mEscortQuestID); if (fail && player->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE) player->FailQuest(mEscortQuestID); } } } } if (mDespawnState == 1) StartDespawn(); }
void WaypointReached(uint32 i) { Player* pPlayer = GetPlayerForEscort(); if (!pPlayer) return; Creature* Godfrey = me->FindNearestCreature(NPC_GODFREY, 50, true); if (!Godfrey) return; switch (i) { case 1: DoScriptText(SAY_WP_1, me, Godfrey); me->SetUInt64Value(UNIT_FIELD_TARGET, Godfrey->GetGUID()); me->HandleEmoteCommand(5); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); break; case 2: Godfrey->HandleEmoteCommand(434); DoScriptText(SAY_WP_2, me, Godfrey); me->HandleEmoteCommand(15); break; case 3: DoScriptText(SAY_WP_3, me, Godfrey); me->HandleEmoteCommand(1); break; case 4: DoScriptText(SAY_WP_4, Godfrey); break; case 5: DoScriptText(SAY_WP_5, Godfrey); break; case 6: DoScriptText(SAY_WP_6, Godfrey); break; case 7: DoScriptText(SAY_WP_7, me, Godfrey); me->HandleEmoteCommand(1); break; case 8: DoScriptText(SAY_WP_8, me, Godfrey); me->HandleEmoteCommand(16); break; case 9: DoScriptText(SAY_WP_9, me, Godfrey); me->HandleEmoteCommand(5); break; case 10: DoScriptText(SAY_WP_10, me, Godfrey); DoCast(Godfrey, SPELL_HOLY_FIRE); break; case 11: Godfrey->HandleEmoteCommand(434); DoScriptText(SAY_WP_11, Godfrey); break; case 12: DoScriptText(SAY_WP_12, me, Godfrey); DoCast(Godfrey, SPELL_HOLY_FIRE); break; case 13: DoScriptText(SAY_WP_13, me, Godfrey); DoCast(Godfrey, SPELL_HOLY_FIRE); break; case 14: Godfrey->HandleEmoteCommand(434); DoScriptText(SAY_WP_14, Godfrey); break; case 15: DoScriptText(SAY_WP_15, me, Godfrey); DoCast(Godfrey, SPELL_HOLY_FIRE); break; case 16: DoScriptText(SAY_WP_16, me, Godfrey); break; case 17: DoScriptText(SAY_WP_17, me, Godfrey); break; case 18: DoScriptText(SAY_WP_18, Godfrey); break; case 19: DoScriptText(SAY_WP_19, me, Godfrey); break; case 20: DoScriptText(SAY_WP_20, Godfrey); break; case 21: DoScriptText(SAY_WP_21, Godfrey); break; case 22: DoScriptText(SAY_WP_22, me, Godfrey); break; case 23: DoScriptText(SAY_WP_23, Godfrey); break; case 24: DoScriptText(SAY_WP_24, Godfrey); break; case 25: DoScriptText(SAY_WP_25, me, Godfrey); break; case 26: DoScriptText(SAY_WP_26, me); me->SetUInt64Value(UNIT_FIELD_TARGET, pPlayer->GetGUID()); break; case 27: DoScriptText(SAY_WP_27, me, Godfrey); me->SetUInt64Value(UNIT_FIELD_TARGET, Godfrey->GetGUID()); Completed = true; if (pPlayer) pPlayer->GroupEventHappens(QUEST_A_RIGHTEOUS_SERMON, me); break; } }
void WaypointReached(uint32 waypointId) { Player* player = GetPlayerForEscort(); if (!player) return; switch (waypointId) { case 0: DoScriptText(SAY1, me, player); break; case 4: DoScriptText(WHISP1, me, player); break; case 6: DoScriptText(WHISP2, me, player); break; case 7: DoScriptText(WHISP3, me, player); break; case 8: DoScriptText(WHISP4, me, player); break; case 17: DoScriptText(WHISP5, me, player); break; case 18: DoScriptText(WHISP6, me, player); break; case 19: DoScriptText(WHISP7, me, player); break; case 33: DoScriptText(WHISP8, me, player); break; case 34: DoScriptText(WHISP9, me, player); break; case 35: DoScriptText(WHISP10, me, player); break; case 36: DoScriptText(WHISP11, me, player); break; case 43: DoScriptText(WHISP12, me, player); break; case 44: DoScriptText(WHISP13, me, player); break; case 49: DoScriptText(WHISP14, me, player); break; case 50: DoScriptText(WHISP15, me, player); break; case 51: DoScriptText(WHISP16, me, player); break; case 52: DoScriptText(WHISP17, me, player); break; case 53: DoScriptText(WHISP18, me, player); break; case 54: DoScriptText(WHISP19, me, player); break; case 55: DoScriptText(WHISP20, me, player); break; case 56: DoScriptText(WHISP21, me, player); player->GroupEventHappens(10211, me); break; } }
void SetData(uint32 type, uint32 data) { Player* player = GetPlayerInMap(); if (!player) { sLog->outDebug("TSCR: Instance Black Portal: SetData (Type: %u Data %u) cannot find any player.", type, data); return; } switch (type) { case TYPE_MEDIVH: if (data == SPECIAL && Encounter[0] == IN_PROGRESS) { --mShieldPercent; UpdateBMWorldState(WORLD_STATE_BM_SHIELD, mShieldPercent); if (!mShieldPercent) { if (Unit *medivh = Unit::GetUnit(*player, MedivhGUID)) { if (medivh->isAlive()) { medivh->DealDamage(medivh, medivh->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); Encounter[0] = FAIL; Encounter[1] = NOT_STARTED; } } } } else { if (data == IN_PROGRESS) { sLog->outDebug("TSCR: Instance Dark Portal: Starting event."); InitWorldState(); Encounter[1] = IN_PROGRESS; NextPortal_Timer = 15000; } if (data == DONE) { //this may be completed further out in the post-event if (Unit *medivh = Unit::GetUnit(*player, MedivhGUID)) { player->GroupEventHappens(QUEST_OPENING_PORTAL, medivh); player->GroupEventHappens(QUEST_MASTER_TOUCH, medivh); } } Encounter[0] = data; } break; case TYPE_RIFT: if (data == SPECIAL) { if (mRiftPortalCount < 7) NextPortal_Timer = 5000; } else Encounter[1] = data; break; } }
void WaypointReached(uint32 i) { Player* player = GetPlayerForEscort(); if (!player) return; switch(i) { case 0: me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H); break; case 1: if (GameObject* cage = me->FindNearestGameObject(GO_CAGE_HARRISON, 20)) { cage->SetGoState(GO_STATE_ACTIVE); cageH = cage->GetGUID(); } Talk(JONES_SAY_START); break; case 5: Talk(JONES_SAY_PROGRESS1); // Summon Adarrah if (Creature* adarrah = me->SummonCreature(NPC_ADARRAH, 4912.772461f, -4797.773458f, 32.644875f, 3.741192f, TEMPSUMMON_TIMED_DESPAWN,300000)) adarrahGUID = adarrah->GetGUID(); if (GameObject* cage = GameObject::GetGameObject(*me,cageH)) cage->SetGoState(GO_STATE_READY); // Close Jones's cage break; case 6: Talk(JONES_SAY_PROGRESS2); break; case 8: me->HandleEmoteCommand(EMOTE_ONESHOT_USE_STANDING); // Jones manipulates cage lock break; case 9: if (GameObject* cage = me->FindNearestGameObject(GO_CAGE_ADARRAH, 20)) { cage->SetGoState(GO_STATE_ACTIVE); cageA = cage->GetGUID(); } Talk(JONES_SAY_PROGRESS3); // Set Adarrah's data to 1 1 if (Creature* adarrah = Creature::GetCreature(*me,adarrahGUID)) adarrah->AI()->SetData(1,1); break; case 13: me->SetStandState(UNIT_STAND_STATE_KNEEL); // Kneels and gets skull mace from pile (for gong) break; case 14: // Change equipment, show Jones with skull mace me->SetStandState(UNIT_STAND_STATE_STAND); SetEquipmentSlots(false, EQUIP_ID_MAIN_HAND, EQUIP_ID_OFF_HAND, EQUIP_NO_CHANGE); if (GameObject* cage = GameObject::GetGameObject(*me,cageA)) cage->SetGoState(GO_STATE_READY); // Close Adarrah's cage break; case 16: // gong hit 1 me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H); me->PlayDirectSound(SOUND_GONG); DoCast(player,SPELL_CAMERA_SHAKE_MED); break; case 17: // gong hit 2 me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H); me->PlayDirectSound(SOUND_GONG); DoCast(player,SPELL_CAMERA_SHAKE_MED); break; case 18: Talk(JONES_SAY_PROGRESS4); break; case 19: Talk(JONES_SAY_PROGRESS5); break; case 21: // set firewall state to block exit if (GameObject* firewall = me->FindNearestGameObject(GO_FIREWALL,50)) { firewall->SetGoState(GO_STATE_READY); firewallGUID = firewall->GetGUID(); } // spawn Tecahuna (snake boss) if (Creature* tecahuna = me->SummonCreature(NPC_TECAHUNA,4906.78f,-4818.94f,32.55777f,2.447285f,TEMPSUMMON_CORPSE_TIMED_DESPAWN,5000)) tecahunaGUID = tecahuna->GetGUID(); break; case 22: Talk(JONES_SAY_PROGRESS6); SetRun(); break; case 23: SetRun(false); break; case 24: Talk(JONES_SAY_PROGRESS7); break; case 25: Talk(JONES_SAY_PROGRESS8); SetRun(); break; case 26: // Change Tecahuna factionID if (Creature* tecahuna = Creature::GetCreature(*me,tecahunaGUID)) tecahuna->setFaction(16); // Set hostile break; case 27: // set firewall state to open if (GameObject* firewall = GameObject::GetGameObject(*me,firewallGUID)) firewall->SetGoState(GO_STATE_ACTIVE); break; case 48: Talk(JONES_SAY_END); player->GroupEventHappens(QUEST_DUN_DA_DUN_TAH,me); break; } }
void UpdateEscortAI(const uint32 uiDiff) { if (uiPhaseTimer <= uiDiff) { switch(uiStep) { case 1: if (pInstance) { if (pInstance->GetData(DATA_BRANN_EVENT) != NOT_STARTED) return; pInstance->SetData(DATA_BRANN_EVENT, IN_PROGRESS); } bIsBattle = false; DoScriptText(SAY_ESCORT_START, m_creature); SetRun(true); JumpToNextStep(0); break; case 3: SetEscortPaused(false); JumpToNextStep(0); break; case 5: if (pInstance) if (Creature* pTemp = (Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM)))) DoScriptText(SAY_EVENT_INTRO_3_ABED, pTemp); JumpToNextStep(8500); break; case 6: DoScriptText(SAY_EVENT_A_1, m_creature); JumpToNextStep(6500); break; case 7: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_A_2_KADD, pTemp); JumpToNextStep(12500); break; case 8: DoScriptText(SAY_EVENT_A_3, m_creature); if (pInstance) pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_KADDRAK),true); if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID)) CAST_AI(mob_tribuna_controllerAI, pTemp->AI())->bKaddrakActivated = true; JumpToNextStep(5000); break; case 9: m_creature->SetReactState(REACT_PASSIVE); SpawnDwarf(1); JumpToNextStep(20000); break; case 10: DoScriptText(SAY_EVENT_B_1, m_creature); JumpToNextStep(6000); break; case 11: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_B_2_MARN, pTemp); SpawnDwarf(1); JumpToNextStep(20000); break; case 12: DoScriptText(SAY_EVENT_B_3, m_creature); if (pInstance) pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_MARNAK),true); if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID)) CAST_AI(mob_tribuna_controllerAI, pTemp->AI())->bMarnakActivated = true; JumpToNextStep(10000); break; case 13: SpawnDwarf(1); JumpToNextStep(10000); break; case 14: SpawnDwarf(2); JumpToNextStep(20000); break; case 15: DoScriptText(SAY_EVENT_C_1, m_creature); SpawnDwarf(1); JumpToNextStep(10000); break; case 16: SpawnDwarf(2); JumpToNextStep(20000); break; case 17: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_C_2_ABED, pTemp); SpawnDwarf(1); JumpToNextStep(20000); break; case 18: DoScriptText(SAY_EVENT_C_3, m_creature); if (pInstance) pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_ABEDNEUM),true); if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID)) CAST_AI(mob_tribuna_controllerAI, pTemp->AI())->bAbedneumActivated = true; JumpToNextStep(5000); break; case 19: SpawnDwarf(2); JumpToNextStep(10000); break; case 20: SpawnDwarf(1); JumpToNextStep(15000); break; case 21: DoScriptText(SAY_EVENT_D_1, m_creature); SpawnDwarf(3); JumpToNextStep(20000); break; case 22: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_D_2_ABED, pTemp); SpawnDwarf(1); JumpToNextStep(5000); break; case 23: SpawnDwarf(2); JumpToNextStep(15000); break; case 24: DoScriptText(SAY_EVENT_D_3, m_creature); SpawnDwarf(3); JumpToNextStep(5000); break; case 25: SpawnDwarf(1); JumpToNextStep(5000); break; case 26: SpawnDwarf(2); JumpToNextStep(10000); break; case 27: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_D_4_ABED, pTemp); SpawnDwarf(1); JumpToNextStep(10000); break; case 28: m_creature->SetReactState(REACT_DEFENSIVE); DoScriptText(SAY_EVENT_END_01, m_creature); m_creature->SetStandState(UNIT_STAND_STATE_STAND); if (pInstance) pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_SKY_FLOOR),true); if (Creature* pTemp = Unit::GetCreature(*m_creature, uiControllerGUID)) pTemp->DealDamage(pTemp, pTemp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); bIsBattle = true; SetEscortPaused(false); JumpToNextStep(6500); break; case 29: DoScriptText(SAY_EVENT_END_02, m_creature); if (pInstance) { pInstance->SetData(DATA_BRANN_EVENT, DONE); // Achievement criteria is with spell 59046 which does not exist. // There is thus no way it can be given by casting the spell on the players. pInstance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 59046); if (!bHasBeenDamaged) pInstance->DoCompleteAchievement(ACHIEV_BRANN_SPANKIN_NEW); } JumpToNextStep(5500); break; case 30: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_03_ABED, pTemp); JumpToNextStep(8500); break; case 31: DoScriptText(SAY_EVENT_END_04, m_creature); JumpToNextStep(11500); break; case 32: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_05_ABED, pTemp); JumpToNextStep(11500); break; case 33: DoScriptText(SAY_EVENT_END_06, m_creature); JumpToNextStep(4500); break; case 34: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_07_ABED, pTemp); JumpToNextStep(22500); break; case 35: DoScriptText(SAY_EVENT_END_08, m_creature); JumpToNextStep(7500); break; case 36: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_09_KADD, pTemp); JumpToNextStep(18500); break; case 37: DoScriptText(SAY_EVENT_END_10, m_creature); JumpToNextStep(5500); break; case 38: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_11_KADD, pTemp); JumpToNextStep(20500); break; case 39: DoScriptText(SAY_EVENT_END_12, m_creature); JumpToNextStep(2500); break; case 40: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_13_KADD, pTemp); JumpToNextStep(19500); break; case 41: DoScriptText(SAY_EVENT_END_14, m_creature); JumpToNextStep(10500); break; case 42: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_15_MARN, pTemp); JumpToNextStep(6500); break; case 43: DoScriptText(SAY_EVENT_END_16, m_creature); JumpToNextStep(6500); break; case 44: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_17_MARN, pTemp); JumpToNextStep(25500); break; case 45: DoScriptText(SAY_EVENT_END_18, m_creature); JumpToNextStep(23500); break; case 46: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_19_MARN, pTemp); JumpToNextStep(3500); break; case 47: DoScriptText(SAY_EVENT_END_20, m_creature); JumpToNextStep(8500); break; case 48: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_21_ABED, pTemp); JumpToNextStep(5500); break; case 49: { if (pInstance) { pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_KADDRAK),false); pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_MARNAK),false); pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_ABEDNEUM),false); pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_SKY_FLOOR),false); } Player* pPlayer = GetPlayerForEscort(); if (pPlayer) pPlayer->GroupEventHappens(QUEST_HALLS_OF_STONE, m_creature); m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); JumpToNextStep(180000); break; } case 50: SetEscortPaused(false); break; } } else uiPhaseTimer -= uiDiff; if (!bIsLowHP && HealthBelowPct(30)) { DoScriptText(SAY_LOW_HEALTH, m_creature); bIsLowHP = true; } else if (bIsLowHP && !HealthBelowPct(30)) bIsLowHP = false; if (!UpdateVictim()) return; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { if (!phase) return; if (timer <= diff) { Player* player = Player::GetPlayer(*me, playerGUID); Creature* orphan = Creature::GetCreature(*me, orphanGUID); if (!orphan || !player) { Reset(); return; } switch (phase) { case 1: orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ()); orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_11); timer = 5000; break; case 2: orphan->SetFacingToObject(me); orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_12); timer = 5000; break; case 3: orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_13); timer = 5000; break; case 4: Talk(TEXT_ALEXSTRASZA_2); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->SetFacingToObject(orphan); timer = 5000; break; case 5: orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_14); timer = 5000; break; case 6: me->SetStandState(UNIT_STAND_STATE_STAND); me->SetOrientation(me->GetHomePosition().GetOrientation()); player->GroupEventHappens(QUEST_THE_DRAGON_QUEEN_ORACLE, me); orphan->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); Reset(); return; case 7: orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ()); orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_11); timer = 5000; break; case 8: if(Creature* krasus = me->FindNearestCreature(NPC_KRASUS, 10.0f)) { orphan->SetFacingToObject(krasus); krasus->AI()->Talk(TEXT_KRASUS_8); } timer = 5000; break; case 9: orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_12); timer = 5000; break; case 10: orphan->SetFacingToObject(me); Talk(TEXT_ALEXSTRASZA_2); timer = 5000; break; case 11: orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_13); timer = 5000; break; case 12: player->GroupEventHappens(QUEST_THE_DRAGON_QUEEN_WOLVAR, me); orphan->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); Reset(); return; } ++phase; } else timer -= diff; }
void HandleAnimation() { Player* plr = Unit::GetPlayer(*me, PlayerGUID); if (!plr) return; Unit* Fandral = plr->FindNearestCreature(C_FANDRAL_STAGHELM, 100, me); Unit* Arygos = plr->FindNearestCreature(C_ARYGOS, 100,me); Unit* Caelestrasz = plr->FindNearestCreature(C_CAELESTRASZ, 100, me); Unit* Merithra = plr->FindNearestCreature(C_MERITHRA, 100,me); if (!Fandral || !Arygos || !Caelestrasz || !Merithra) return; Unit* mob; AnimationTimer = EventAnim[AnimationCount].Timer; if (eventEnd == false) { switch (AnimationCount) { case 0: DoScriptText(ANACHRONOS_SAY_1, me , Fandral); break; case 1: Fandral->SetUInt64Value(UNIT_FIELD_TARGET, me->GetGUID()); DoScriptText(FANDRAL_SAY_1, Fandral,me); break; case 2: Fandral->SetUInt64Value(UNIT_FIELD_TARGET,0); DoScriptText(MERITHRA_EMOTE_1,Merithra); break; case 3: DoScriptText(MERITHRA_SAY_1,Merithra); break; case 4: DoScriptText(ARYGOS_EMOTE_1,Arygos); break; case 5: Caelestrasz->SetUInt64Value(UNIT_FIELD_TARGET, Fandral->GetGUID()); DoScriptText(CAELESTRASZ_SAY_1, Caelestrasz); break; case 6: DoScriptText(MERITHRA_SAY_2, Merithra); break; case 7: Caelestrasz->SetUInt64Value(UNIT_FIELD_TARGET, 0); Merithra->GetMotionMaster()->MoveCharge(-8065,1530,2.61f,10); break; case 8: DoScriptText(MERITHRA_YELL_1,Merithra); break; case 9: Merithra->CastSpell(Merithra,25105,true); break; case 10: Merithra->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); Merithra->AddUnitMovementFlag(MOVEFLAG_LEVITATING); Merithra->GetMotionMaster()->MoveCharge(-8065,1530,6.61f,3); break; case 11: Merithra->CastSpell(Merithra,24818,false); break; case 12: Merithra->GetMotionMaster()->MoveCharge(-8100,1530,50,42); break; case 13: break; case 14: DoScriptText(ARYGOS_SAY_1,Arygos); Merithra->SetVisibility(VISIBILITY_OFF); break; case 15: Arygos->GetMotionMaster()->MoveCharge(-8065,1530,2.61f,10); Merithra->GetMotionMaster()->MoveCharge(-8034.535f,1535.14f,2.61f,42); break; case 16: DoScriptText(ARYGOS_YELL_1, Arygos); break; case 17: Arygos->CastSpell(Arygos,25107,true); break; case 18: Arygos->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); Arygos->AddUnitMovementFlag(MOVEFLAG_LEVITATING); Arygos->GetMotionMaster()->MoveCharge(-8065,1530,6.61f,42); break; case 19: Arygos->CastSpell(Arygos,44799,false); break; case 20: Arygos->GetMotionMaster()->MoveCharge(-8095,1530,50,42); break; case 21: break; case 22: DoScriptText(CAELESTRASZ_SAY_2,Caelestrasz, Fandral); break; case 23: Caelestrasz->GetMotionMaster()->MoveCharge(-8065,1530,2.61f,10); Arygos->SetVisibility(VISIBILITY_OFF); Arygos->GetMotionMaster()->MoveCharge(-8034.535f,1535.14f,2.61f,10); break; case 24: DoScriptText(CAELESTRASZ_YELL_1, Caelestrasz); break; case 25: Caelestrasz->CastSpell(Caelestrasz,25106,true); break; case 26: Caelestrasz->HandleEmoteCommand(254); Caelestrasz->AddUnitMovementFlag(MOVEFLAG_LEVITATING); Caelestrasz->GetMotionMaster()->MoveCharge(-8065,1530,7.61f,4); break; case 27: Caelestrasz->CastSpell(Caelestrasz,43294,false); break; case 28: DoScriptText(ANACHRONOS_SAY_2,me, Fandral); break; case 29: Caelestrasz->GetMotionMaster()->MoveCharge(-8095,1530,50,42); DoScriptText(FANDRAL_SAY_2, Fandral, me); break; case 30: break; case 31: DoScriptText(ANACHRONOS_SAY_3, me, Fandral); break; case 32: Caelestrasz->SetVisibility(VISIBILITY_OFF); Caelestrasz->GetMotionMaster()->MoveCharge(-8034.535f,1535.14f,2.61f,42); Fandral->GetMotionMaster()->MoveCharge(-8108,1529,2.77f,8); me->GetMotionMaster()->MoveCharge(-8113,1525,2.77f,8); break;//both run to the gate case 33: DoScriptText(ANACHRONOS_SAY_4, me); Caelestrasz->GetMotionMaster()->MoveCharge(-8050,1473,65,15); break; //Text: sands will stop case 34: DoCast(plr, 23017, true);//Arcane Channeling break; case 35: me->CastSpell(-8088,1520.43f,2.67f,25158,true); break; case 36: DoCast(plr, 25159, true); break; case 37: me->SummonGameObject(GO_GATE_OF_AHN_QIRAJ,-8130,1525,17.5f,0,0,0,0,0,0); break; case 38: DoCast(plr, 25166, true); me->SummonGameObject(GO_GLYPH_OF_AHN_QIRAJ,-8130,1525,17.5f,0,0,0,0,0,0); break; case 39: DoScriptText(ANACHRONOS_SAY_5, me, Fandral); break; case 40: Fandral->CastSpell(me, 25167, true); break; case 41: Fandral->SummonGameObject(GO_ROOTS_OF_AHN_QIRAJ,-8130,1525,17.5f,0,0,0,0,0,0); DoScriptText(FANDRAL_SAY_3, Fandral); break; case 42: me->CastStop(); DoScriptText(FANDRAL_EMOTE_1, Fandral); break; case 43: Fandral->CastStop(); break; case 44: DoScriptText(ANACHRONOS_SAY_6, me); break; case 45: DoScriptText(ANACHRONOS_SAY_7, me); break; case 46: DoScriptText(ANACHRONOS_SAY_8, me); me->GetMotionMaster()->MoveCharge(-8110,1527,2.77f,4); break; case 47: DoScriptText(ANACHRONOS_EMOTE_1, me); break; case 48: DoScriptText(FANDRAL_SAY_4,Fandral,me); break; case 49: DoScriptText(FANDRAL_SAY_5,Fandral,me); break; case 50: DoScriptText(FANDRAL_EMOTE_2,Fandral); Fandral->CastSpell(-8127,1525,17.5f,33806,true); break; case 51: { uint32 loopbreaker = 0; uint32 entries[4] = { 15423, 15424, 15414, 15422 }; for (uint8 i = 0; i < 4; i++) { mob = plr->FindNearestCreature(entries[i],300,true); loopbreaker = 0; while (mob != NULL && loopbreaker < 67) { mob->RemoveFromWorld(); mob = plr->FindNearestCreature(entries[i],300,true); loopbreaker++; } mob = plr->FindNearestCreature(entries[i],300,false); loopbreaker = 0; while (mob != NULL && loopbreaker < 67) { mob->RemoveFromWorld(); mob = plr->FindNearestCreature(entries[i],300,false); loopbreaker++; } } break; } case 52: Fandral->GetMotionMaster()->MoveCharge(-8028.75f, 1538.795f, 2.61f,4); DoScriptText(ANACHRONOS_SAY_9, me,Fandral); break; case 53: DoScriptText(FANDRAL_SAY_6,Fandral); break; case 54: DoScriptText(ANACHRONOS_EMOTE_2,me); break; case 55: Fandral->SetVisibility(VISIBILITY_OFF); break; case 56: DoScriptText(ANACHRONOS_EMOTE_3, me); me->GetMotionMaster()->MoveCharge(-8116,1522,3.65f,4); break; case 57: me->GetMotionMaster()->MoveCharge(-8116.7f,1527,3.7f,4); break; case 58: me->GetMotionMaster()->MoveCharge(-8112.67f,1529.9f,2.86f,4); break; case 59: me->GetMotionMaster()->MoveCharge(-8117.99f,1532.24f,3.94f,4); break; case 60: if (plr) DoScriptText(ANACHRONOS_SAY_10, me,plr); me->GetMotionMaster()->MoveCharge(-8113.46f,1524.16f,2.89f,4); break; case 61: me->GetMotionMaster()->MoveCharge(-8057.1f,1470.32f,2.61f,6); if (plr->IsInRange(me,0,15)) plr->GroupEventHappens(QUEST_A_PAWN_ON_THE_ETERNAL_BOARD ,me); break; case 62: me->SetDisplayId(15500); break; case 63: me->HandleEmoteCommand(254); me->AddUnitMovementFlag(MOVEFLAG_LEVITATING); break; case 64: me->GetMotionMaster()->MoveCharge(-8000,1400,150,9); break; case 65: me->SetVisibility(VISIBILITY_OFF); if (Creature* AnachronosQuestTrigger = (Unit::GetCreature(*me, AnachronosQuestTriggerGUID))) { DoScriptText(ARYGOS_YELL_1,me); AnachronosQuestTrigger->AI()->EnterEvadeMode(); eventEnd=true; } break; } } ++AnimationCount; }
void UpdateAI(const uint32 uiDiff) { if (m_bIsEventInProgress) { if (m_uiTimeOutTimer && m_uiTimeOutTimer < uiDiff) { if (!m_playerGuid) { //player are expected to use GO within a minute, if not, event will fail. Reset(); return; } m_uiTimeOutTimer = 0; } else m_uiTimeOutTimer -= uiDiff; if (m_uiCheckAliveStateTimer < uiDiff) { if (Creature* pChallenger = m_creature->GetMap()->GetCreature(m_aChallengerGuids[m_uiChallengerCount])) { if (!pChallenger->isAlive()) { Player* pPlayer = m_creature->GetMap()->GetPlayer(m_playerGuid); if (pPlayer && !pPlayer->isAlive()) { Reset(); return; } ++m_uiChallengerCount; //count starts at 0 if (m_uiChallengerCount == MAX_CHALLENGER) { if (pPlayer && pPlayer->isAlive()) pPlayer->GroupEventHappens(QUEST_SECOND_TRIAL, m_creature); Reset(); return; } else m_uiEngageTimer = 15000; } } m_uiCheckAliveStateTimer = 2500; } else m_uiCheckAliveStateTimer -= uiDiff; if (m_uiEngageTimer && m_uiEngageTimer < uiDiff) { Player* pPlayer = m_creature->GetMap()->GetPlayer(m_playerGuid); if (pPlayer && pPlayer->isAlive()) { if (Creature* pCreature = m_creature->GetMap()->GetCreature(m_aChallengerGuids[m_uiChallengerCount])) { DoScriptText(uiSayId[m_uiChallengerCount], m_creature, pPlayer); pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pCreature->AI()->AttackStart(pPlayer); } } m_uiEngageTimer = 0; } else m_uiEngageTimer -= uiDiff; } }
void UpdateEscortAI(const uint32 uiDiff) { if (m_uiPhaseTimer && m_uiPhaseTimer <= uiDiff) { switch (m_uiStep) { // Begin Event case 0: // TODO, this is wrong, must be "using or similar" m_creature->SetStandState(UNIT_STAND_STATE_KNEEL); m_uiPhaseTimer = 1500; break; case 1: DoScriptText(SAY_EVENT_INTRO_2, m_creature); m_uiPhaseTimer = 2500; break; case 2: if (m_pInstance) m_pInstance->DoUseDoorOrButton(GO_TRIBUNAL_CONSOLE); m_uiPhaseTimer = 6500; break; case 3: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_INTRO_3_ABED); m_uiPhaseTimer = 8500; break; // Activate Kaddrak case 4: DoScriptText(SAY_EVENT_A_1, m_creature); m_uiPhaseTimer = 6500; break; case 5: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_A_2_KADD); m_uiPhaseTimer = 12500; break; case 6: DoScriptText(SAY_EVENT_A_3, m_creature); m_uiPhaseTimer = 6000; break; case 7: if (m_pInstance) m_pInstance->ActivateFace(FACE_KADDRAK, false); m_uiPhaseTimer = 5000; break; case 8: SpawnDwarf(NPC_DARK_RUNE_PROTECTOR); m_uiPhaseTimer = 20000; break; // Activate Marnak case 9: DoScriptText(SAY_EVENT_B_1, m_creature); m_uiPhaseTimer = 6000; break; case 10: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_B_2_MARN); SpawnDwarf(NPC_DARK_RUNE_PROTECTOR); m_uiPhaseTimer = 20000; break; case 11: DoScriptText(SAY_EVENT_B_3, m_creature); m_uiPhaseTimer = 5000; break; case 12: if (m_pInstance) m_pInstance->ActivateFace(FACE_MARNAK, false); m_uiPhaseTimer = 10000; break; case 13: SpawnDwarf(NPC_DARK_RUNE_PROTECTOR); m_uiPhaseTimer = 10000; break; case 14: SpawnDwarf(NPC_DARK_RUNE_STORMCALLER); m_uiPhaseTimer = (20000); break; case 15: DoScriptText(SAY_EVENT_C_1, m_creature); SpawnDwarf(NPC_DARK_RUNE_PROTECTOR); m_uiPhaseTimer = 10000; break; case 16: SpawnDwarf(NPC_DARK_RUNE_STORMCALLER); m_uiPhaseTimer = 20000; break; // Activate Abedneum case 17: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_C_2_ABED); SpawnDwarf(NPC_DARK_RUNE_PROTECTOR); m_uiPhaseTimer = 20000; break; case 18: DoScriptText(SAY_EVENT_C_3, m_creature); m_uiPhaseTimer = 5000; break; case 19: if (m_pInstance) m_pInstance->ActivateFace(FACE_ABEDNEUM, false); m_uiPhaseTimer = 5000; break; case 20: SpawnDwarf(NPC_DARK_RUNE_STORMCALLER); m_uiPhaseTimer = 10000; break; case 21: SpawnDwarf(NPC_DARK_RUNE_PROTECTOR); m_uiPhaseTimer = 15000; break; case 22: DoScriptText(SAY_EVENT_D_1, m_creature); SpawnDwarf(NPC_IRON_GOLEM_CUSTODIAN); m_uiPhaseTimer = 20000; break; case 23: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_D_2_ABED); SpawnDwarf(NPC_DARK_RUNE_PROTECTOR); m_uiPhaseTimer = 5000; break; case 24: SpawnDwarf(NPC_DARK_RUNE_STORMCALLER); m_uiPhaseTimer = 15000; break; case 25: DoScriptText(SAY_EVENT_D_3, m_creature); SpawnDwarf(NPC_IRON_GOLEM_CUSTODIAN); m_uiPhaseTimer = 5000; break; case 26: SpawnDwarf(NPC_DARK_RUNE_PROTECTOR); m_uiPhaseTimer = 5000; break; case 27: SpawnDwarf(NPC_DARK_RUNE_STORMCALLER); m_uiPhaseTimer = 10000; break; case 28: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_D_4_ABED); SpawnDwarf(NPC_DARK_RUNE_PROTECTOR); m_uiPhaseTimer = 10000; break; // End Event case 29: DoScriptText(SAY_EVENT_END_01, m_creature); m_creature->SetStandState(UNIT_STAND_STATE_STAND);// TODO TODO if (m_pInstance) m_pInstance->SetData(TYPE_TRIBUNAL, SPECIAL); // Kill remaining npcs SetEscortPaused(false); m_uiPhaseTimer = 3000; // break; // case 30: if (m_pInstance) m_pInstance->ActivateFace(FACE_ABEDNEUM, true); m_uiPhaseTimer = 0; break; case 30: DoScriptText(SAY_EVENT_END_02, m_creature); m_uiPhaseTimer = 5500; break; case 31: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_03_ABED); m_uiPhaseTimer = 8500; break; case 32: DoScriptText(SAY_EVENT_END_04, m_creature); m_uiPhaseTimer = 11500; break; case 33: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_05_ABED); m_uiPhaseTimer = 11500; break; case 34: DoScriptText(SAY_EVENT_END_06, m_creature); m_uiPhaseTimer = 4500; break; case 35: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_07_ABED); m_uiPhaseTimer = 22500; break; case 36: DoScriptText(SAY_EVENT_END_08, m_creature); m_uiPhaseTimer = 7500; break; case 37: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_END_09_KADD); m_uiPhaseTimer = 18500; break; case 38: DoScriptText(SAY_EVENT_END_10, m_creature); m_uiPhaseTimer = 5500; break; case 39: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_END_11_KADD); m_uiPhaseTimer = 20500; break; case 40: DoScriptText(SAY_EVENT_END_12, m_creature); m_uiPhaseTimer = 2500; break; case 41: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_KADDRAK, SAY_EVENT_END_13_KADD); m_uiPhaseTimer = 19500; break; case 42: DoScriptText(SAY_EVENT_END_14, m_creature); m_uiPhaseTimer = 10500; break; case 43: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_END_15_MARN); m_uiPhaseTimer = 6500; break; case 44: DoScriptText(SAY_EVENT_END_16, m_creature); m_uiPhaseTimer = 6500; break; case 45: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_END_17_MARN); m_uiPhaseTimer = 25500; break; case 46: DoScriptText(SAY_EVENT_END_18, m_creature); m_uiPhaseTimer = 23500; break; case 47: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_MARNAK, SAY_EVENT_END_19_MARN); m_uiPhaseTimer = 3500; break; case 48: DoScriptText(SAY_EVENT_END_20, m_creature); m_uiPhaseTimer = 8500; break; case 49: if (m_pInstance) m_pInstance->DoFaceSpeak(FACE_ABEDNEUM, SAY_EVENT_END_21_ABED); m_uiPhaseTimer = 5500; break; case 50: { if (m_pInstance) { m_pInstance->DoUseDoorOrButton(GO_TRIBUNAL_FLOOR); m_pInstance->SetData(TYPE_TRIBUNAL, DONE); } // Should cast spell 59046 (doesn't exist in client dbc), criterias are ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET Player* pPlayer = GetPlayerForEscort(); if (pPlayer) pPlayer->GroupEventHappens(QUEST_HALLS_OF_STONE, m_creature); DoCastSpellIfCan(m_creature, SPELL_ACHIEVEMENT_CHECK, CAST_TRIGGERED); m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); m_uiPhaseTimer = 180000; break; } case 51: SetEscortPaused(false); break; } ++m_uiStep; } else if (m_uiPhaseTimer) m_uiPhaseTimer -= uiDiff; if (!m_bIsLowHP && m_creature->GetHealthPercent() < 30) { DoScriptText(SAY_LOW_HEALTH, m_creature); m_bIsLowHP = true; } else if (m_bIsLowHP && m_creature->GetHealthPercent() > 30) m_bIsLowHP = false; // No Combat abilities needed here if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; }
void WaypointReached(uint32 i) { Player* pPlayer = GetPlayerForEscort(); if (!pPlayer) return; switch(i) { case 0: DoScriptText(SAY_REM_START, me, pPlayer); break; case 5: DoScriptText(SAY_REM_RAMP1_1, me, pPlayer); break; case 6: DoSpawnCreature(NPC_GRAVEL_SCOUT, -10.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); DoSpawnCreature(NPC_GRAVEL_BONE, -10.0f, 7.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 9: DoScriptText(SAY_REM_RAMP1_2, me, pPlayer); break; case 14: //depend quest rewarded? DoScriptText(SAY_REM_BOOK, me, pPlayer); break; case 15: DoScriptText(SAY_REM_TENT1_1, me, pPlayer); break; case 16: DoSpawnCreature(NPC_GRAVEL_SCOUT, -10.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); DoSpawnCreature(NPC_GRAVEL_BONE, -10.0f, 7.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 17: DoScriptText(SAY_REM_TENT1_2, me, pPlayer); break; case 26: DoScriptText(SAY_REM_MOSS, me, pPlayer); break; case 27: DoScriptText(EMOTE_REM_MOSS, me, pPlayer); break; case 28: DoScriptText(SAY_REM_MOSS_PROGRESS, me, pPlayer); break; case 29: DoSpawnCreature(NPC_GRAVEL_SCOUT, -15.0f, 3.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); DoSpawnCreature(NPC_GRAVEL_BONE, -15.0f, 5.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); DoSpawnCreature(NPC_GRAVEL_GEO, -15.0f, 7.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); break; case 31: DoScriptText(SAY_REM_PROGRESS, me, pPlayer); break; case 41: DoScriptText(SAY_REM_REMEMBER, me, pPlayer); break; case 42: DoScriptText(EMOTE_REM_END, me, pPlayer); pPlayer->GroupEventHappens(QUEST_ABSENT_MINDED_PT2, me); break; } }
void UpdateAI(const uint32 diff) { if (SayTimer <= diff) { if (Event) SayTimer = NextStep(++Step); } else SayTimer -= diff; if (Attack) { Player* player = Unit::GetPlayer(*me, PlayerGUID); me->setFaction(14); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); if (player) { Unit* Creepjack = me->FindNearestCreature(NPC_CREEPJACK, 20); if (Creepjack) { Creepjack->Attack(player, true); Creepjack->setFaction(14); Creepjack->GetMotionMaster()->MoveChase(player); Creepjack->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } Unit* Malone = me->FindNearestCreature(NPC_MALONE, 20); if (Malone) { Malone->Attack(player, true); Malone->setFaction(14); Malone->GetMotionMaster()->MoveChase(player); Malone->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } DoStartMovement(player); AttackStart(player); } Attack = false; } if ((me->GetHealth()*100)/me->GetMaxHealth() < 1 && !Done) { Unit* Creepjack = me->FindNearestCreature(NPC_CREEPJACK, 20); if (Creepjack) { CAST_CRE(Creepjack)->AI()->EnterEvadeMode(); Creepjack->setFaction(1194); Creepjack->GetMotionMaster()->MoveTargetedHome(); Creepjack->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } Unit* Malone = me->FindNearestCreature(NPC_MALONE, 20); if (Malone) { CAST_CRE(Malone)->AI()->EnterEvadeMode(); Malone->setFaction(1194); Malone->GetMotionMaster()->MoveTargetedHome(); Malone->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); } me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->setFaction(1194); Done = true; DoScriptText(SAY_GIVEUP, me, NULL); me->DeleteThreatList(); me->CombatStop(); me->GetMotionMaster()->MoveTargetedHome(); Player* player = Unit::GetPlayer(*me, PlayerGUID); if (player) player->GroupEventHappens(QUEST_WBI, me); } DoMeleeAttackIfReady(); }