void JustSummoned(Creature* summoned) { if (summoned && summoned->GetEntry() == MOB_VOID_TRAVELER) CAST_AI(mob_voidtraveler::mob_voidtravelerAI, summoned->AI())->VorpilGUID = me->GetGUID(); }
void boss_attumen::boss_attumenAI::UpdateAI(const uint32 diff) { if (ResetTimer) { if (ResetTimer <= diff) { ResetTimer = 0; Unit* pMidnight = Unit::GetUnit(*me, Midnight); if (pMidnight) { pMidnight->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pMidnight->SetVisible(true); } Midnight = 0; me->SetVisible(false); me->Kill(me); } else ResetTimer -= diff; } //Return since we have no target if (!UpdateVictim()) return; if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)) return; if (CleaveTimer <= diff) { DoCast(me->getVictim(), SPELL_SHADOWCLEAVE); CleaveTimer = urand(10000, 15000); } else CleaveTimer -= diff; if (CurseTimer <= diff) { DoCast(me->getVictim(), SPELL_INTANGIBLE_PRESENCE); CurseTimer = 30000; } else CurseTimer -= diff; if (RandomYellTimer <= diff) { DoScriptText(RAND(SAY_RANDOM1, SAY_RANDOM2), me); RandomYellTimer = urand(30000, 60000); } else RandomYellTimer -= diff; if (me->GetUInt32Value(UNIT_FIELD_DISPLAYID) == MOUNTED_DISPLAYID) { if (ChargeTimer <= diff) { Unit* target = NULL; std::list<HostileReference*> t_list = me->getThreatManager().getThreatList(); std::vector<Unit*> target_list; for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { target = Unit::GetUnit(*me, (*itr)->getUnitGuid()); if (target && !target->IsWithinDist(me, ATTACK_DISTANCE, false)) target_list.push_back(target); target = NULL; } if (!target_list.empty()) target = *(target_list.begin()+rand()%target_list.size()); DoCast(target, SPELL_BERSERKER_CHARGE); ChargeTimer = 20000; } else ChargeTimer -= diff; } else { if (HealthBelowPct(25)) { Creature* pMidnight = Unit::GetCreature(*me, Midnight); if (pMidnight && pMidnight->GetTypeId() == TYPEID_UNIT) { CAST_AI(boss_midnight::boss_midnightAI, (pMidnight->AI()))->Mount(me); me->SetHealth(pMidnight->GetHealth()); DoResetThreat(); } } } DoMeleeAttackIfReady(); }
void WaypointReached(uint32 i) { if (!pInstance) return; switch(i) { case 8: SetRun(false); me->SummonCreature(18764, 2181.87f, 112.46f, 89.45f, 0.26f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); break; case 9: DoScriptText(SAY_TH_ARMORY, me); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, THRALL_WEAPON_MODEL); //me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO, THRALL_WEAPON_INFO); //me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO+1, 781); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, THRALL_SHIELD_MODEL); //me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO+2, THRALL_SHIELD_INFO); //me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO+3, 1038); break; case 10: me->SetDisplayId(THRALL_MODEL_EQUIPPED); break; case 11: SetRun(); break; case 15: me->SummonCreature(MOB_ENTRY_RIFLE, 2200.28f, 137.37f, 87.93f, 5.07f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_WARDEN, 2197.44f, 131.83f, 87.93f, 0.78f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_VETERAN, 2203.62f, 135.40f, 87.93f, 3.70f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_VETERAN, 2200.75f, 130.13f, 87.93f, 1.48f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); break; case 21: me->SummonCreature(MOB_ENTRY_RIFLE, 2135.80f, 154.01f, 67.45f, 4.98f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_WARDEN, 2144.36f, 151.87f, 67.74f, 4.46f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_VETERAN, 2142.12f, 154.41f, 67.12f, 4.56f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_VETERAN, 2138.08f, 155.38f, 67.24f, 4.60f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); break; case 25: me->SummonCreature(MOB_ENTRY_RIFLE, 2102.98f, 192.17f, 65.24f, 6.02f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_WARDEN, 2108.48f, 198.75f, 65.18f, 5.15f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_VETERAN, 2106.11f, 197.29f, 65.18f, 5.63f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_VETERAN, 2104.18f, 194.82f, 65.18f, 5.75f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); break; case 29: DoScriptText(SAY_TH_SKARLOC_MEET, me); me->SummonCreature(ENTRY_SCARLOC, 2036.48f, 271.22f, 63.43f, 5.27f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); //temporary, skarloc should rather be triggered to walk up to thrall break; case 30: SetEscortPaused(true); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); SetRun(false); break; case 31: DoScriptText(SAY_TH_MOUNTS_UP, me); DoMount(); SetRun(); break; case 37: //possibly regular patrollers? If so, remove this and let database handle them me->SummonCreature(MOB_ENTRY_WATCHMAN, 2124.26f, 522.16f, 56.87f, 3.99f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_WATCHMAN, 2121.69f, 525.37f, 57.11f, 4.01f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_SENTRY, 2124.65f, 524.55f, 56.63f, 3.98f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); break; case 59: me->SummonCreature(SKARLOC_MOUNT, 2488.64f, 625.77f, 58.26f, 4.71f, TEMPSUMMON_TIMED_DESPAWN, 10000); DoUnmount(); HadMount = false; SetRun(false); break; case 60: me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); //make horsie run off SetEscortPaused(true); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); pInstance->SetData(TYPE_THRALL_PART2, DONE); SetRun(); break; case 64: SetRun(false); break; case 68: me->SummonCreature(MOB_ENTRY_BARN_PROTECTOR, 2500.22f, 692.60f, 55.50f, 2.84f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_BARN_LOOKOUT, 2500.13f, 696.55f, 55.51f, 3.38f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_BARN_GUARDSMAN, 2500.55f, 693.64f, 55.50f, 3.14f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_BARN_GUARDSMAN, 2500.94f, 695.81f, 55.50f, 3.14f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); break; case 71: SetRun(); break; case 81: SetRun(false); break; case 83: me->SummonCreature(MOB_ENTRY_CHURCH_PROTECTOR, 2627.33f, 646.82f, 56.03f, 4.28f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000); me->SummonCreature(MOB_ENTRY_CHURCH_LOOKOUT, 2624.14f, 648.03f, 56.03f, 4.50f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000); me->SummonCreature(MOB_ENTRY_CHURCH_GUARDSMAN, 2625.32f, 649.60f, 56.03f, 4.38f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000); me->SummonCreature(MOB_ENTRY_CHURCH_GUARDSMAN, 2627.22f, 649.00f, 56.03f, 4.34f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000); break; case 84: DoScriptText(SAY_TH_CHURCH_END, me); SetRun(); break; case 91: me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); SetRun(false); break; case 93: me->SummonCreature(MOB_ENTRY_INN_PROTECTOR, 2652.71f, 660.31f, 61.93f, 1.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_INN_LOOKOUT, 2648.96f, 662.59f, 61.93f, 0.79f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_INN_GUARDSMAN, 2657.36f, 662.34f, 61.93f, 2.68f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); me->SummonCreature(MOB_ENTRY_INN_GUARDSMAN, 2656.39f, 659.77f, 61.93f, 2.61f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); break; case 94: if (uint64 TarethaGUID = pInstance->GetData64(DATA_TARETHA)) { if (Unit* Taretha = Unit::GetUnit((*me), TarethaGUID)) DoScriptText(SAY_TA_ESCAPED, Taretha, me); } break; case 95: DoScriptText(SAY_TH_MEET_TARETHA, me); pInstance->SetData(TYPE_THRALL_PART3, DONE); SetEscortPaused(true); break; case 96: DoScriptText(SAY_TH_EPOCH_WONDER, me); break; case 97: DoScriptText(SAY_TH_EPOCH_KILL_TARETHA, me); SetRun(); break; case 98: //trigger epoch Yell("Thrall! Come outside and face your fate! ....") //from here, thrall should not never be allowed to move to point 106 which he currently does. break; case 106: { //trigger taretha to run down outside if (Creature* Taretha = pInstance->instance->GetCreature(pInstance->GetData64(DATA_TARETHA))) { if (Player* pPlayer = GetPlayerForEscort()) CAST_AI(npc_escortAI, (Taretha->AI()))->Start(false, true, pPlayer->GetGUID()); } //kill credit Creature for quest Map* pMap = me->GetMap(); Map::PlayerList const& players = pMap->GetPlayers(); if (!players.isEmpty() && pMap->IsDungeon()) { for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { if (Player* pPlayer = itr->getSource()) pPlayer->KilledMonsterCredit(20156, 0); } } //alot will happen here, thrall and taretha talk, erozion appear at spot to explain me->SummonCreature(EROZION_ENTRY, 2646.47f, 680.416f, 55.38f, 4.16f, TEMPSUMMON_TIMED_DESPAWN, 120000); } break; case 108: //last waypoint, just set Thrall invisible, respawn is turned off me->SetVisible(false); break; } }
void JustDied(Unit* killer) { if (Creature* herald = me->FindNearestCreature(ENTRY_VAZRUDEN_HERALD, 150)) CAST_AI(boss_vazruden_the_herald::boss_vazruden_the_heraldAI, herald->AI())->SentryDownBy(killer); }
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { if (GetTarget()->IsAIEnabled) CAST_AI(LoathebAI, GetTarget()->GetAI())->Talk(SAY_NECROTIC_AURA_REMOVED); }
void UpdateAI(const uint32 diff) { //Return since we have no target if (me->HasAura(AURA_BANISH, 0) || !UpdateVictim()) { if (BanishTimer <= diff) { CheckBanish();//no need to check every update tick BanishTimer = 1000; } else BanishTimer -= diff; return; } if (me->HasAura(SPELL_WHIRLWIND, 0)) { if (Whirlwind_Timer <= diff) { Unit* newTarget = SelectUnit(SELECT_TARGET_RANDOM, 0); if (newTarget) { DoResetThreat(); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MovePoint(0,newTarget->GetPositionX(),newTarget->GetPositionY(),newTarget->GetPositionZ()); } Whirlwind_Timer = 2000; } else Whirlwind_Timer -= diff; } // reseting after changing forms and after ending whirlwind if (NeedThreatReset && !me->HasAura(SPELL_WHIRLWIND, 0)) { // when changing forms seting timers (or when ending whirlwind - to avoid adding new variable i use Whirlwind_Timer to countdown 2s while whirlwinding) if (DemonForm) InnerDemons_Timer = 30000; else Whirlwind_Timer = 15000; NeedThreatReset = false; DoResetThreat(); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(me->getVictim()); } //Enrage_Timer (10 min) if (Berserk_Timer <= diff && !EnrageUsed) { me->InterruptNonMeleeSpells(false); DoCast(me, SPELL_BERSERK); EnrageUsed = true; } else Berserk_Timer -= diff; if (!DemonForm) { //Whirldind Timer if (!me->HasAura(SPELL_WHIRLWIND, 0)) { if (Whirlwind_Timer <= diff) { DoCast(me, SPELL_WHIRLWIND); // while whirlwinding this variable is used to countdown target's change Whirlwind_Timer = 2000; NeedThreatReset = true; } else Whirlwind_Timer -= diff; } //Switch_Timer if (!IsFinalForm) { if (SwitchToDemon_Timer <= diff) { //switch to demon form me->RemoveAurasDueToSpell(SPELL_WHIRLWIND,0); me->SetDisplayId(MODEL_DEMON); DoScriptText(SAY_SWITCH_TO_DEMON, me); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY , 0); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 0); DemonForm = true; NeedThreatReset = true; SwitchToDemon_Timer = 45000; } else SwitchToDemon_Timer -= diff; DoMeleeAttackIfReady(); } } else { //ChaosBlast_Timer if (!me->getVictim()) return; if (me->GetDistance(me->getVictim()) < 30) me->StopMoving(); if (ChaosBlast_Timer <= diff) { // will cast only when in range of spell if (me->GetDistance(me->getVictim()) < 30) { //DoCast(me->getVictim(), SPELL_CHAOS_BLAST, true); int damage = 100; me->CastCustomSpell(me->getVictim(), SPELL_CHAOS_BLAST, &damage, NULL, NULL, false, NULL, NULL, me->GetGUID()); } ChaosBlast_Timer = 3000; } else ChaosBlast_Timer -= diff; //Summon Inner Demon if (InnerDemons_Timer <= diff) { std::list<HostileReference *>& ThreatList = me->getThreatManager().getThreatList(); std::vector<Unit* > TargetList; for (std::list<HostileReference *>::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr) { Unit* tempTarget = Unit::GetUnit(*me, (*itr)->getUnitGuid()); if (tempTarget && tempTarget->GetTypeId() == TYPEID_PLAYER && tempTarget->GetGUID() != me->getVictim()->GetGUID() && TargetList.size()<5) TargetList.push_back(tempTarget); } SpellEntry *spell = (SpellEntry *)GetSpellStore()->LookupEntry(SPELL_INSIDIOUS_WHISPER); for (std::vector<Unit* >::const_iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr) { if ((*itr) && (*itr)->isAlive()) { Creature* demon = me->SummonCreature(INNER_DEMON_ID, (*itr)->GetPositionX()+10, (*itr)->GetPositionY()+10, (*itr)->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); if (demon) { demon->AI()->AttackStart((*itr)); CAST_AI(mob_inner_demonAI, demon->AI())->victimGUID = (*itr)->GetGUID(); for (int i=0; i<3; i++) { if (!spell->Effect[i]) continue; (*itr)->AddAura(new InsidiousAura(spell, i, NULL, (*itr), (*itr))); } if (InnerDemon_Count > 4) InnerDemon_Count = 0; //Safe storing of creatures InnderDemon[InnerDemon_Count] = demon->GetGUID(); //Update demon count ++InnerDemon_Count; } } } DoScriptText(SAY_INNER_DEMONS, me); InnerDemons_Timer = 999999; } else InnerDemons_Timer -= diff; //Switch_Timer if (SwitchToHuman_Timer <= diff) { //switch to nightelf form me->SetDisplayId(MODEL_NIGHTELF); me->LoadEquipment(me->GetEquipmentId()); CastConsumingMadness(); DespawnDemon(); DemonForm = false; NeedThreatReset = true; SwitchToHuman_Timer = 60000; } else SwitchToHuman_Timer -= diff; } if (!IsFinalForm && (me->GetHealth()*100 / me->GetMaxHealth()) < 15) { //at this point he divides himself in two parts CastConsumingMadness(); DespawnDemon(); Creature* Copy = NULL; Copy = DoSpawnCreature(DEMON_FORM, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 6000); if (Copy) { Demon = Copy->GetGUID(); if (me->getVictim()) Copy->AI()->AttackStart(me->getVictim()); } //set nightelf final form IsFinalForm = true; DemonForm = false; DoScriptText(SAY_FINAL_FORM, me); me->SetDisplayId(MODEL_NIGHTELF); me->LoadEquipment(me->GetEquipmentId()); } }
void JustDied(Unit* Killer) { if (Creature *Kelidan = me->FindNearestCreature(ENTRY_KELIDAN, 100)) CAST_AI(boss_kelidan_the_breakerAI, Kelidan->AI())->ChannelerDied(Killer); }
void UpdateAI(const uint32 diff) { if (uiResurectTimer) { if (uiResurectTimer <= diff) { if (uiResurectPhase == 1) { Unit* ingvar = Unit::GetUnit(*me, pInstance ? pInstance->GetData64(DATA_INGVAR) : 0); if (ingvar) { ingvar->SetStandState(UNIT_STAND_STATE_STAND); ingvar->CastSpell(ingvar, SPELL_SCOURG_RESURRECTION_HEAL, false); } uiResurectTimer = 3000; uiResurectPhase = 2; } else if (uiResurectPhase == 2) { if (Creature* ingvar = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_INGVAR) : 0)) { ingvar->RemoveAurasDueToSpell(SPELL_SCOURG_RESURRECTION_DUMMY); if (boss_ingvar_the_plunderer::boss_ingvar_the_plundererAI* pAI = CAST_AI(boss_ingvar_the_plunderer::boss_ingvar_the_plundererAI, ingvar->AI())) pAI->StartZombiePhase(); me->GetMotionMaster()->MovePoint(2, x+1, y, z+30); ++uiResurectPhase; uiResurectTimer = 0; } } } else uiResurectTimer -= diff; } }
bool OnGossipHello(Player* player, Creature* creature) override { if (player->GetQuestStatus(QUEST_GOOD_HELP_IS_HARD_TO_FIND) == QUEST_STATUS_INCOMPLETE && !CAST_AI(npc_defiant_troll::npc_defiant_trollAI, creature->AI())->IsWorking()) { player->CastSpell(creature, SPELL_LIGHTNING_VISUAL, true); player->KilledMonsterCredit(DEFFIANT_KILL_CREDIT, creature->GetGUID()); creature->AI()->Talk(SAY_WORK); creature->RemoveAllAuras(); if (GameObject* deposit = creature->FindNearestGameObject(GO_DEPOSIT, 20)) creature->GetMotionMaster()->MovePoint(1, deposit->GetPositionX() - 1.0f, deposit->GetPositionY(), deposit->GetPositionZ()); if (player->GetQuestStatus(QUEST_GOOD_HELP_IS_HARD_TO_FIND) == QUEST_STATUS_COMPLETE) player->RemoveAura(SPELL_LIGHTNING_VISUAL); player->CLOSE_GOSSIP_MENU(); return true; } player->CLOSE_GOSSIP_MENU(); return false; }
void JustDied(Unit* pKiller) { if (pInstance) if (Creature* pSjonnir = Unit::GetCreature(*me, pInstance->GetData64(DATA_SJONNIR))) CAST_AI(boss_sjonnirAI, pSjonnir->AI())->KilledIronSludge(); }
void DoSplit(int atPercent /* 75 50 25 */) { DoScriptText(SAY_SPLIT, me); ov_mycoordinates *place1 = new ov_mycoordinates(-8340.782227f, 2083.814453f, 125.648788f, 0); ov_mycoordinates *place2 = new ov_mycoordinates(-8341.546875f, 2118.504639f, 133.058151f, 0); ov_mycoordinates *place3 = new ov_mycoordinates(-8318.822266f, 2058.231201f, 133.058151f, 0); ov_mycoordinates *bossc=place1, *i1=place2, *i2=place3; switch (urand(0, 2)) { case 0: bossc=place1; i1=place2; i2=place3; break; case 1: bossc=place2; i1=place1; i2=place3; break; case 2: bossc=place3; i1=place1; i2=place2; break; } for (uint16 i = 0; i < 41; ++i) { if (Player* target = CAST_PLR(SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))) { if (Group* pGrp = target->GetGroup()) for (uint8 ico = 0; ico < TARGETICONCOUNT; ++ico) { //if (grp->m_targetIcons[ico] == me->GetGUID()) -- private member :( pGrp->SetTargetIcon(ico, 0, 0); } break; } } me->RemoveAllAuras(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetVisible(false); me->SetPosition(bossc->x, bossc->y, bossc->z, bossc->r); Invisible = true; DoResetThreat(); DoStopAttack(); switch (atPercent) { case 75: Images75 = true; break; case 50: Images50 = true; break; case 25: Images25 = true; break; } Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0); Creature* Image1 = me->SummonCreature(15263, i1->x, i1->y, i1->z, i1->r, TEMPSUMMON_CORPSE_DESPAWN, 30000); if (Image1) { Image1->SetMaxHealth(me->GetMaxHealth() / 5); Image1->SetHealth(me->GetHealth() / 5); if (target) Image1->AI()->AttackStart(target); CAST_AI(boss_skeram::boss_skeramAI, Image1->AI())->IsImage = true; } Creature* Image2 = me->SummonCreature(15263, i2->x, i2->y, i2->z, i2->r, TEMPSUMMON_CORPSE_DESPAWN, 30000); if (Image2) { Image2->SetMaxHealth(me->GetMaxHealth() / 5); Image2->SetHealth(me->GetHealth() / 5); if (target) Image2->AI()->AttackStart(target); CAST_AI(boss_skeram::boss_skeramAI, Image2->AI())->IsImage = true; } Invisible = true; delete place1; delete place2; delete place3; }
void JustSummoned(Creature* summon) override { CAST_AI(npc_injured_soldier_dummy::npc_injured_soldier_dummyAI, summon->AI())->_phase = 1; }
void mob_qiraj_war_spawn::mob_qiraj_war_spawnAI::JustDied(Unit* /*slayer*/) { me->RemoveCorpse(); if (Creature* Mob = (Unit::GetCreature(*me, MobGUID))) CAST_AI(npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI, Mob->AI())->LiveCounter(); };
bool OnGossipHello(Player* pPlayer, GameObject* pGO) { if (Creature *pAnraphet = pGO->FindNearestCreature(BOSS_TEMPLE_GUARDIAN_ANHUUR, 1000, true)) if (boss_temple_guardian_anhuur::boss_temple_guardian_anhuurAI* pAI = CAST_AI(boss_temple_guardian_anhuur::boss_temple_guardian_anhuurAI, pAnraphet->AI())) pAI->ActivateLever(pGO->GetEntry()); pGO->SetGoState(GO_STATE_ACTIVE); //pPlayer->CastSpell(pGO, 68398, false); if (Creature* beam = pGO->FindNearestCreature(40183, 30.0f, true)) beam->Kill(beam); return true; }
void UpdateAI(const uint32 diff) { if (!EventBegun) return; if (HealthBelowPct(15) && !HasYelledOnce) { DoScriptText(SAY_LOW_HEALTH, me); HasYelledOnce = true; } if (ShadeGUID && !StartCombat) { Creature* Shade = (Unit::GetCreature((*me), ShadeGUID)); if (Shade && Shade->isAlive()) { if (CAST_AI(boss_shade_of_akama::boss_shade_of_akamaAI, Shade->AI())->IsBanished) { if (CastSoulRetrieveTimer <= diff) { DoCast(Shade, SPELL_AKAMA_SOUL_CHANNEL); CastSoulRetrieveTimer = 500; } else CastSoulRetrieveTimer -= diff; } else { me->InterruptNonMeleeSpells(false); StartCombat = true; } } } if (ShadeHasDied && (WayPointId == 1)) { if (pInstance) pInstance->SetData(DATA_SHADEOFAKAMAEVENT, DONE); me->GetMotionMaster()->MovePoint(WayPointId, AkamaWP[1].x, AkamaWP[1].y, AkamaWP[1].z); ++WayPointId; } if (!ShadeHasDied && StartCombat) { if (CheckTimer <= diff) { if (ShadeGUID) { Creature* Shade = Unit::GetCreature((*me), ShadeGUID); if (Shade && !Shade->isAlive()) { ShadeHasDied = true; WayPointId = 0; me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); me->GetMotionMaster()->MovePoint(WayPointId, AkamaWP[0].x, AkamaWP[0].y, AkamaWP[0].z); } if (Shade && Shade->isAlive()) { if (Shade->getThreatManager().getThreatList().size() < 2) Shade->AI()->EnterEvadeMode(); } } CheckTimer = 5000; } else CheckTimer -= diff; } if (SummonBrokenTimer && BrokenSummonIndex < 4) { if (SummonBrokenTimer <= diff) { for (uint8 i = 0; i < 4; ++i) { float x = BrokenCoords[BrokenSummonIndex].x + (i*5); float y = BrokenCoords[BrokenSummonIndex].y + (1*5); float z = BrokenCoords[BrokenSummonIndex].z; float o = BrokenCoords[BrokenSummonIndex].o; Creature* Broken = me->SummonCreature(CREATURE_BROKEN, x, y, z, o, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000); if (Broken) { float wx = BrokenWP[BrokenSummonIndex].x + (i*5); float wy = BrokenWP[BrokenSummonIndex].y + (i*5); float wz = BrokenWP[BrokenSummonIndex].z; Broken->GetMotionMaster()->MovePoint(0, wx, wy, wz); Broken->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); BrokenList.push_back(Broken->GetGUID()); } } ++BrokenSummonIndex; SummonBrokenTimer = 1000; } else SummonBrokenTimer -= diff; } if (SoulRetrieveTimer) { if (SoulRetrieveTimer <= diff) { switch (EndingTalkCount) { case 0: me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); ++EndingTalkCount; SoulRetrieveTimer = 2000; SummonBrokenTimer = 1; break; case 1: DoScriptText(SAY_FREE, me); ++EndingTalkCount; SoulRetrieveTimer = 25000; break; case 2: if (!BrokenList.empty()) { bool Yelled = false; for (std::list<uint64>::const_iterator itr = BrokenList.begin(); itr != BrokenList.end(); ++itr) if (Creature* pUnit = Unit::GetCreature(*me, *itr)) { if (!Yelled) { DoScriptText(SAY_BROKEN_FREE_01, pUnit); Yelled = true; } pUnit->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL); } } ++EndingTalkCount; SoulRetrieveTimer = 1500; break; case 3: if (!BrokenList.empty()) { for (std::list<uint64>::const_iterator itr = BrokenList.begin(); itr != BrokenList.end(); ++itr) if (Creature* pUnit = Unit::GetCreature(*me, *itr)) // This is the incorrect spell, but can't seem to find the right one. pUnit->CastSpell(pUnit, 39656, true); } ++EndingTalkCount; SoulRetrieveTimer = 5000; break; case 4: if (!BrokenList.empty()) { for (std::list<uint64>::const_iterator itr = BrokenList.begin(); itr != BrokenList.end(); ++itr) if (Creature* pUnit = Unit::GetCreature((*me), *itr)) pUnit->MonsterYell(SAY_BROKEN_FREE_02, LANG_UNIVERSAL, 0); } SoulRetrieveTimer = 0; break; } } else SoulRetrieveTimer -= diff; } if (!UpdateVictim()) return; if (DestructivePoisonTimer <= diff) { Creature* Shade = Unit::GetCreature((*me), ShadeGUID); if (Shade && Shade->isAlive()) DoCast(Shade, SPELL_DESTRUCTIVE_POISON); DestructivePoisonTimer = 15000; } else DestructivePoisonTimer -= diff; if (LightningBoltTimer <= diff) { DoCast(me->getVictim(), SPELL_LIGHTNING_BOLT); LightningBoltTimer = 10000; } else LightningBoltTimer -= diff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { npc_escortAI::UpdateAI(diff); if (PlayerGUID) { Player* AuraPlayer = Unit::GetPlayer(*me,PlayerGUID); if (!AuraPlayer) { me->DisappearAndDie(); return; } else { if (AuraPlayer->isDead()) { AuraPlayer->FailQuest(QUEST_A_FALL_FROM_GRACE); me->DisappearAndDie(); return; } if (EndSequence) { if (EndSequenceTimer <= diff) { EndSequenceTimer = 12000; if (EndSayCount == 6) { me->GetMotionMaster()->MoveJump(HighAbbotLandgrenJumpPos[0][0][0], HighAbbotLandgrenJumpPos[0][0][1], HighAbbotLandgrenJumpPos[0][0][2], 0.5f, 8.0f); EndSequenceTimer = 2000; } if (EndSayCount == 7) { me->MonsterSay(HighAbbotText[6], LANG_UNIVERSAL, 0); EndSequenceTimer = 2000; } if (EndSayCount == 8) { AuraPlayer->KilledMonsterCredit(27444, 0); if (AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE)) AuraPlayer->RemoveAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE); if (AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE)) AuraPlayer->RemoveAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE); EndSequence = false; } if (EndSayCount < 6) me->MonsterSay(HighAbbotText[EndSayCount], LANG_UNIVERSAL, PlayerGUID); EndSayCount++; } else EndSequenceTimer -= diff; } if (!EventStarted && me->GetEntry() == NPC_HIGH_ABBOT_LANDGREN_ESCORTEE_ENTRY) { Start(false, false, PlayerGUID, 0, false); EventStarted = true; } if (CheckPlayerDist) if (AuraPlayer->GetDistance(2827.796f, -420.191f, 118.196f) < 4) StartMove(); if (AuraCheckTimer <= diff) { if (AuraPlayer && AuraPlayer->GetQuestStatus(QUEST_A_FALL_FROM_GRACE) == QUEST_STATUS_INCOMPLETE && AuraPlayer->getQuestStatusMap()[QUEST_A_FALL_FROM_GRACE].CreatureOrGOCount[0] == 1 && !AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE) && !AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE)) { switch(AuraPlayer->getGender()) { case GENDER_FEMALE: AuraPlayer->CastSpell(AuraPlayer, SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE, false); break; case GENDER_MALE: AuraPlayer->CastSpell(AuraPlayer, SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE, false); break; } } AuraCheckTimer = 300; } else AuraCheckTimer -= diff; if (me->GetEntry() != NPC_HIGH_ABBOT_LANDGREN_ESCORTEE_ENTRY) { if (BodyGuardStart && AuraPlayer->GetQuestStatus(QUEST_A_FALL_FROM_GRACE) == QUEST_STATUS_INCOMPLETE && AuraPlayer->getQuestStatusMap()[QUEST_A_FALL_FROM_GRACE].CreatureOrGOCount[0] == 1) { if (Creature* tmp = me->FindNearestCreature(NPC_DEVOUT_BODYGUARD, Range, true)) { if (BodyGuardMoveTimer <= diff) { CAST_AI(npc_devout_bodyguard::npc_devout_bodyguardAI, tmp->AI())->StartMove(); BodyGuardMoveTimer = 6000; Range = 4.0f; if (GuardCount == 1) BodyGuardStart = false; GuardCount++; } else BodyGuardMoveTimer -= diff; } } } } } }
void UpdateAI(const uint32 uiDiff) { if (uiPhase) { if (uiTimer <= uiDiff) { switch(uiPhase) { case 1: DoScriptText(SAY_QUEST_ACCEPT_ATTACK, me); uiTimer = 3000; uiPhase = 2; break; case 2: if (Creature* pTyrion = me->FindNearestCreature(NPC_TYRION, 10.0f)) DoScriptText(SAY_TYRION_1, pTyrion); uiTimer = 3000; uiPhase = 3; break; case 3: me->UpdateEntry(NPC_PRIESTESS_TYRIONA, ALLIANCE); uiTimer = 2000; uiPhase = 4; break; case 4: SetEscortPaused(false); uiPhase = 0; uiTimer = 0; break; case 5: if (Creature* pGuard = me->FindNearestCreature(NPC_STORMWIND_ROYAL, 10.0f, true)) DoScriptText(SAY_GUARD_1, pGuard); uiTimer = 3000; uiPhase = 6; break; case 6: DoScriptText(SAY_SPYBOT_2, me); uiTimer = 3000; uiPhase = 7; break; case 7: SetEscortPaused(false); uiTimer = 0; uiPhase = 0; break; case 8: if (Creature* pLescovar = me->FindNearestCreature(NPC_LORD_GREGOR_LESCOVAR, 10.0f)) DoScriptText(SAY_LESCOVAR_1, pLescovar); uiTimer = 3000; uiPhase = 9; break; case 9: DoScriptText(SAY_SPYBOT_4, me); uiTimer = 3000; uiPhase = 10; break; case 10: if (Creature* pLescovar = me->FindNearestCreature(NPC_LORD_GREGOR_LESCOVAR, 10.0f)) { if (Player* pPlayer = GetPlayerForEscort()) { CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->Start(false, false, pPlayer->GetGUID()); CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->SetMaxPlayerDistance(200.0f); } } me->DisappearAndDie(); uiTimer = 0; uiPhase = 0; break; } } else uiTimer -= uiDiff; } npc_escortAI::UpdateAI(uiDiff); if (!UpdateVictim()) return; DoMeleeAttackIfReady(); }
bool DoEncounterAction(Unit *who, bool attack, bool reset, bool checkAllDead) { if (!instance) return false; Creature *Thane = CAST_CRE(Unit::GetUnit(*me, instance->GetData64(DATA_THANE))); Creature *Lady = CAST_CRE(Unit::GetUnit(*me, instance->GetData64(DATA_LADY))); Creature *Baron = CAST_CRE(Unit::GetUnit(*me, instance->GetData64(DATA_BARON))); Creature *Sir = CAST_CRE(Unit::GetUnit(*me, instance->GetData64(DATA_SIR))); if (Thane && Lady && Baron && Sir) { if (attack && who) { CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->encounterActionAttack = true; CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->encounterActionAttack = true; CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->encounterActionAttack = true; CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->encounterActionAttack = true; CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->AttackStart(who); CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->AttackStart(who); CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->AttackStart(who); CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->AttackStart(who); } if (reset) { if (instance->GetBossState(BOSS_HORSEMEN) != NOT_STARTED) { if (!Thane->isAlive()) Thane->Respawn(); if (!Lady->isAlive()) Lady->Respawn(); if (!Baron->isAlive()) Baron->Respawn(); if (!Sir->isAlive()) Sir->Respawn(); CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->encounterActionReset = true; CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->encounterActionReset = true; CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->encounterActionReset = true; CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->encounterActionReset = true; CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Thane->AI())->EnterEvadeMode(); CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Lady->AI())->EnterEvadeMode(); CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Baron->AI())->EnterEvadeMode(); CAST_AI(boss_four_horsemen::boss_four_horsemenAI, Sir->AI())->EnterEvadeMode(); } } if (checkAllDead) return !Thane->isAlive() && !Lady->isAlive() && !Baron->isAlive() && !Sir->isAlive(); } return false; }
void UpdateAI(const uint32 diff) { if (!me->isInCombat()) { if (RandChat_Timer <= diff) { DoScriptText(RandomTaunt[rand()%6].id, me); RandChat_Timer = 90000; } else RandChat_Timer -= diff; } if (!UpdateVictim()) return; if (NeedCheckCube) NeedCheckCubeStatus(); if (Berserk_Timer <= diff) { DoCast(me, SPELL_BERSERK, true); DoScriptText(EMOTE_BERSERK, me); Berserk_Timer = 60000; } else Berserk_Timer -= diff; if (Cleave_Timer <= diff) { DoCast(me->getVictim(), SPELL_CLEAVE); Cleave_Timer = 10000; } else Cleave_Timer -= diff; if (BlastNova_Timer <= diff) { // to avoid earthquake interruption if (!me->HasUnitState(UNIT_STATE_STUNNED)) { DoScriptText(EMOTE_BLASTNOVA, me); DoCast(me, SPELL_BLASTNOVA); BlastNova_Timer = 60000; } } else BlastNova_Timer -= diff; if (Quake_Timer <= diff) { // to avoid blastnova interruption if (!me->IsNonMeleeSpellCasted(false)) { DoCast(me, SPELL_QUAKE_TRIGGER, true); Quake_Timer = 50000; } } else Quake_Timer -= diff; if (Blaze_Timer <= diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { float x, y, z; target->GetPosition(x, y, z); Creature* summon = me->SummonCreature(MOB_ABYSSAL, x, y, z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); if (summon) { CAST_AI(mob_abyssal::mob_abyssalAI, summon->AI())->SetTrigger(2); DoCast(summon, SPELL_BLAZE_TARGET, true); summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } } Blaze_Timer = urand(20000, 40000); } else Blaze_Timer -= diff; if (!Phase3 && HealthBelowPct(30) && !me->IsNonMeleeSpellCasted(false) // blast nova && !me->HasUnitState(UNIT_STATE_STUNNED)) // shadow cage and earthquake { Phase3 = true; DoScriptText(SAY_CHAMBER_DESTROY, me); DoCast(me, SPELL_CAMERA_SHAKE, true); DoCast(me, SPELL_DEBRIS_KNOCKDOWN, true); if (instance) instance->SetData(DATA_COLLAPSE, true); } if (Phase3) { if (Debris_Timer <= diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { float x, y, z; target->GetPosition(x, y, z); Creature* summon = me->SummonCreature(MOB_ABYSSAL, x, y, z, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); if (summon) CAST_AI(mob_abyssal::mob_abyssalAI, summon->AI())->SetTrigger(1); } Debris_Timer = 10000; } else Debris_Timer -= diff; } DoMeleeAttackIfReady(); }
void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff) { if (EntryYellTimer) { if (EntryYellTimer <= diff) { Talk(SAY_JULIANNE_ENTER); EntryYellTimer = 0; } else EntryYellTimer -= diff; } if (AggroYellTimer) { if (AggroYellTimer <= diff) { Talk(SAY_JULIANNE_AGGRO); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->setFaction(16); AggroYellTimer = 0; } else AggroYellTimer -= diff; } if (DrinkPoisonTimer) { //will do this 2secs after spell hit. this is time to display visual as expected if (DrinkPoisonTimer <= diff) { PretendToDie(me); Phase = PHASE_ROMULO; SummonRomuloTimer = 10000; DrinkPoisonTimer = 0; } else DrinkPoisonTimer -= diff; } if (Phase == PHASE_ROMULO && !SummonedRomulo) { if (SummonRomuloTimer <= diff) { if (Creature* pRomulo = me->SummonCreature(CREATURE_ROMULO, ROMULO_X, ROMULO_Y, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, HOUR*2*IN_MILLISECONDS)) { RomuloGUID = pRomulo->GetGUID(); CAST_AI(boss_romulo::boss_romuloAI, pRomulo->AI())->JulianneGUID = me->GetGUID(); CAST_AI(boss_romulo::boss_romuloAI, pRomulo->AI())->Phase = PHASE_ROMULO; DoZoneInCombat(pRomulo); pRomulo->setFaction(16); } SummonedRomulo = true; } else SummonRomuloTimer -= diff; } if (ResurrectSelfTimer) { if (ResurrectSelfTimer <= diff) { Resurrect(me); Phase = PHASE_BOTH; IsFakingDeath = false; if (me->GetVictim()) AttackStart(me->GetVictim()); ResurrectSelfTimer = 0; ResurrectTimer = 1000; } else ResurrectSelfTimer -= diff; } if (!UpdateVictim() || IsFakingDeath) return; if (RomuloDead) { if (ResurrectTimer <= diff) { Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID)); if (Romulo && CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath) { Talk(SAY_JULIANNE_RESURRECT); Resurrect(Romulo); CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath = false; RomuloDead = false; ResurrectTimer = 10000; } } else ResurrectTimer -= diff; } if (BlindingPassionTimer <= diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_BLINDING_PASSION); BlindingPassionTimer = urand(30000, 45000); } else BlindingPassionTimer -= diff; if (DevotionTimer <= diff) { DoCast(me, SPELL_DEVOTION); DevotionTimer = urand(15000, 45000); } else DevotionTimer -= diff; if (PowerfulAttractionTimer <= diff) { DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0), SPELL_POWERFUL_ATTRACTION); PowerfulAttractionTimer = urand(5000, 30000); } else PowerfulAttractionTimer -= diff; if (EternalAffectionTimer <= diff) { if (urand(0, 1) && SummonedRomulo) { Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID)); if (Romulo && Romulo->IsAlive() && !RomuloDead) DoCast(Romulo, SPELL_ETERNAL_AFFECTION); } else DoCast(me, SPELL_ETERNAL_AFFECTION); EternalAffectionTimer = urand(45000, 60000); } else EternalAffectionTimer -= diff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 uiDiff) { if (!UpdateVictim()) return; if (m_uiBerserkTimer <= uiDiff) { DoScriptText(SAY_BERSERK, me); DoCast(SPELL_BERSERK); m_uiBerserkTimer = 600000; } else m_uiBerserkTimer -= uiDiff; if (getDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL || getDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL) { if (!me->HasAura(SPELL_BONE_STORM_CHANNEL)) { if (m_uiBoneSpikeGraveyardTimer < uiDiff) { DoScriptText(RAND(SAY_BONESPIKE_1,SAY_BONESPIKE_2,SAY_BONESPIKE_3), me); uint32 count = RAID_MODE(1,3,1,3); for (uint8 i = 1; i <= count; i++) { Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 200, true); if (pTarget && !pTarget->HasAura(SPELL_BONE_SPIKE_IMPALING)) { Creature* Bone = me->SummonCreature(CREATURE_BONE_SPIKE, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 999999); CAST_AI(npc_bone_spikeAI, Bone->AI())->SetPrisoner(pTarget); Bone->CastSpell(pTarget, SPELL_BONE_SPIKE_IMPALING, true); } } m_uiBoneSpikeGraveyardTimer = 15000; } else m_uiBoneSpikeGraveyardTimer -= uiDiff; if (m_uiColdFlameTimer <= uiDiff) { me->SummonCreature(CREATURE_COLD_FLAME, me->GetPositionX()+20, me->GetPositionY()+20, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 8000); me->SummonCreature(CREATURE_COLD_FLAME, me->GetPositionX()-20, me->GetPositionY()-20, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 8000); me->SummonCreature(CREATURE_COLD_FLAME, me->GetPositionX()+20, me->GetPositionY()-20, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 8000); me->SummonCreature(CREATURE_COLD_FLAME, me->GetPositionX()-20, me->GetPositionY()+20, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 8000); m_uiColdFlameTimer = 15000; } else m_uiColdFlameTimer -= uiDiff; } } if (getDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC || getDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC) { if (m_uiBoneSpikeGraveyardTimer < uiDiff) { DoScriptText(RAND(SAY_BONESPIKE_1,SAY_BONESPIKE_2,SAY_BONESPIKE_3), me); uint32 count = RAID_MODE(1,3,1,3); for (uint8 i = 1; i <= count; i++) { Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 200, true); if (pTarget && !pTarget->HasAura(SPELL_BONE_SPIKE_IMPALING)) { Creature* Bone = me->SummonCreature(CREATURE_BONE_SPIKE, pTarget->GetPositionX(), pTarget->GetPositionY(), pTarget->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 999999); CAST_AI(npc_bone_spikeAI, Bone->AI())->SetPrisoner(pTarget); Bone->CastSpell(pTarget, SPELL_BONE_SPIKE_IMPALING, true); } } m_uiBoneSpikeGraveyardTimer = 15000; } else m_uiBoneSpikeGraveyardTimer -= uiDiff; } if (!me->HasAura(SPELL_BONE_STORM_CHANNEL)) { if (m_uiBoneStormChanelTimer <= uiDiff) { DoCast(SPELL_BONE_STORM_CHANNEL); DoScriptText(SAY_BONE_STORM, me); m_uiBoneStormChanelTimer = 45000; } else m_uiBoneStormChanelTimer -= uiDiff; if (m_uiSaberSlashTimer <= uiDiff) { Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); DoCast(pTarget, RAID_MODE(SPELL_SABER_SLASH_10_NORMAL,SPELL_SABER_SLASH_25_NORMAL,SPELL_SABER_SLASH_10_HEROIC,SPELL_SABER_SLASH_10_HEROIC)); m_uiSaberSlashTimer = 6000; } else m_uiSaberSlashTimer -= uiDiff; } if (me->HasAura(SPELL_BONE_STORM_CHANNEL)) { if (m_uiBoneStormTimer <= uiDiff) { DoCastAOE(RAID_MODE(SPELL_BONE_STORM_10_NORMAL,SPELL_BONE_STORM_25_NORMAL,SPELL_BONE_STORM_10_HEROIC,SPELL_BONE_STORM_25_HEROIC)); m_uiBoneStormTimer = 1500; } else m_uiBoneStormTimer -= uiDiff; if (m_uiBoneStormRemoveTimer <= uiDiff) { me->RemoveAurasDueToSpell(SPELL_BONE_STORM_CHANNEL); m_uiBoneStormRemoveTimer = 20000; } else m_uiBoneStormRemoveTimer -= uiDiff; } DoMeleeAttackIfReady(); }
void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &damage) { if (damage < me->GetHealth()) return; //anything below only used if incoming damage will kill if (Phase == PHASE_JULIANNE) { damage = 0; //this means already drinking, so return if (IsFakingDeath) return; me->InterruptNonMeleeSpells(true); DoCast(me, SPELL_DRINK_POISON); IsFakingDeath = true; //IS THIS USEFULL? Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)); return; } if (Phase == PHASE_ROMULO) { TC_LOG_ERROR("scripts", "boss_julianneAI: cannot take damage in PHASE_ROMULO, why was i here?"); damage = 0; return; } if (Phase == PHASE_BOTH) { //if this is true then we have to kill romulo too if (RomuloDead) { if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID))) { Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); Romulo->GetMotionMaster()->Clear(); Romulo->setDeathState(JUST_DIED); Romulo->CombatStop(true); Romulo->DeleteThreatList(); Romulo->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); } return; } //if not already returned, then romulo is alive and we can pretend die if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID))) { PretendToDie(me); IsFakingDeath = true; CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->ResurrectTimer = 10000; CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->JulianneDead = true; damage = 0; return; } } TC_LOG_ERROR("scripts", "boss_julianneAI: DamageTaken reach end of code, that should not happen."); }
void UpdateAI(const uint32 diff) { if (Intro && !Done) { if (AggroTimer <= diff) { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); DoScriptText(SAY_AGGRO, me); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); Done = true; if (AggroTargetGUID) { Unit* pUnit = Unit::GetUnit((*me), AggroTargetGUID); if (pUnit) AttackStart(pUnit); DoZoneInCombat(); } else { EnterEvadeMode(); return; } } else AggroTimer -= diff; } if (!UpdateVictim() || !Done) return; if (SummonShadowsTimer <= diff) { //MindControlGhost(); for (uint8 i = 0; i < 2; ++i) { Creature* Shadow = NULL; float X = CalculateRandomLocation(me->GetPositionX(), 10); Shadow = me->SummonCreature(CREATURE_SHADOWY_CONSTRUCT, X, me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 0); if (Shadow) { Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1); if (!pTarget) pTarget = me->getVictim(); if (pTarget) Shadow->AI()->AttackStart(pTarget); } } SummonShadowsTimer = 60000; } else SummonShadowsTimer -= diff; if (SummonDoomBlossomTimer <= diff) { if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0)) { float X = CalculateRandomLocation(pTarget->GetPositionX(), 20); float Y = CalculateRandomLocation(pTarget->GetPositionY(), 20); float Z = pTarget->GetPositionZ(); Z = me->GetMap()->GetHeight(X, Y, Z); Creature* DoomBlossom = me->SummonCreature(CREATURE_DOOM_BLOSSOM, X, Y, Z, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 20000); if (DoomBlossom) { DoomBlossom->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); DoomBlossom->setFaction(me->getFaction()); DoomBlossom->AddThreat(pTarget, 1.0f); CAST_AI(mob_doom_blossom::mob_doom_blossomAI, DoomBlossom->AI())->SetTeronGUID(me->GetGUID()); pTarget->CombatStart(DoomBlossom); SetThreatList(DoomBlossom); SummonDoomBlossomTimer = 35000; } } } else SummonDoomBlossomTimer -= diff; if (IncinerateTimer <= diff) { Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1); if (!pTarget) pTarget = me->getVictim(); if (pTarget) { DoScriptText(RAND(SAY_SPECIAL1,SAY_SPECIAL2), me); DoCast(pTarget, SPELL_INCINERATE); IncinerateTimer = 20000 + rand()%31 * 1000; } } else IncinerateTimer -= diff; if (CrushingShadowsTimer <= diff) { Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0); if (pTarget && pTarget->isAlive()) DoCast(pTarget, SPELL_CRUSHING_SHADOWS); CrushingShadowsTimer = 10000 + rand()%16 * 1000; } else CrushingShadowsTimer -= diff; /*** NOTE FOR FUTURE DEV: UNCOMMENT BELOW ONLY IF MIND CONTROL IS FULLY IMPLEMENTED **/ /*if (ShadowOfDeathTimer <= diff) { Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1); if (!pTarget) pTarget = me->getVictim(); if (pTarget && pTarget->isAlive() && pTarget->GetTypeId() == TYPEID_PLAYER) { DoCast(pTarget, SPELL_SHADOW_OF_DEATH); GhostGUID = pTarget->GetGUID(); ShadowOfDeathTimer = 30000; SummonShadowsTimer = 53000; // Make it VERY close but slightly less so that we can check if the aura is still on the player } } else ShadowOfDeathTimer -= diff;*/ if (RandomYellTimer <= diff) { DoScriptText(RAND(SAY_SPELL1,SAY_SPELL2), me); RandomYellTimer = 50000 + rand()%51 * 1000; } else RandomYellTimer -= diff; if (!me->HasAura(SPELL_BERSERK)) { if (EnrageTimer <= diff) { DoCast(me, SPELL_BERSERK); DoScriptText(SAY_ENRAGE, me); } else EnrageTimer -= diff; } DoMeleeAttackIfReady(); }
void HandleExtraEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { if(Unit* caster = GetCaster()) if(Creature* creCaster = caster->ToCreature()) CAST_AI(boss_ick::boss_ickAI, creCaster->AI())->_ResetThreat(GetTarget()); }
void SetMidnight(Creature* pAttumen, uint64 value) { CAST_AI(boss_attumen::boss_attumenAI, pAttumen->AI())->Midnight = value; }
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, me); SetRun(true); JumpToNextStep(0); break; case 3: SetEscortPaused(false); JumpToNextStep(0); break; case 5: if (pInstance) if (Creature* pTemp = (Unit::GetCreature(*me, pInstance->GetData64(DATA_ABEDNEUM)))) DoScriptText(SAY_EVENT_INTRO_3_ABED, pTemp); JumpToNextStep(8500); break; case 6: DoScriptText(SAY_EVENT_A_1, me); JumpToNextStep(6500); break; case 7: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_A_2_KADD, pTemp); JumpToNextStep(12500); break; case 8: DoScriptText(SAY_EVENT_A_3, me); if (pInstance) pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_KADDRAK),true); if (Creature* pTemp = Unit::GetCreature(*me, uiControllerGUID)) CAST_AI(mob_tribuna_controller::mob_tribuna_controllerAI, pTemp->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 (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_B_2_MARN, pTemp); SpawnDwarf(1); JumpToNextStep(20000); break; case 12: DoScriptText(SAY_EVENT_B_3, me); if (pInstance) pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_MARNAK),true); if (Creature* pTemp = Unit::GetCreature(*me, uiControllerGUID)) CAST_AI(mob_tribuna_controller::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, me); SpawnDwarf(1); JumpToNextStep(10000); break; case 16: SpawnDwarf(2); JumpToNextStep(20000); break; case 17: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_C_2_ABED, pTemp); SpawnDwarf(1); JumpToNextStep(20000); break; case 18: DoScriptText(SAY_EVENT_C_3, me); if (pInstance) pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_ABEDNEUM),true); if (Creature* pTemp = Unit::GetCreature(*me, uiControllerGUID)) CAST_AI(mob_tribuna_controller::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, me); SpawnDwarf(3); JumpToNextStep(20000); break; case 22: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, 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, me); 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(*me, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_D_4_ABED, pTemp); SpawnDwarf(1); JumpToNextStep(10000); break; case 28: me->SetReactState(REACT_DEFENSIVE); DoScriptText(SAY_EVENT_END_01, me); me->SetStandState(UNIT_STAND_STATE_STAND); if (pInstance) pInstance->HandleGameObject(pInstance->GetData64(DATA_GO_SKY_FLOOR),true); if (Creature* pTemp = Unit::GetCreature(*me, 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, me); 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(*me, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_03_ABED, pTemp); JumpToNextStep(8500); break; case 31: DoScriptText(SAY_EVENT_END_04, me); JumpToNextStep(11500); break; case 32: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_05_ABED, pTemp); JumpToNextStep(11500); break; case 33: DoScriptText(SAY_EVENT_END_06, me); JumpToNextStep(4500); break; case 34: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_ABEDNEUM))) DoScriptText(SAY_EVENT_END_07_ABED, pTemp); JumpToNextStep(22500); break; case 35: DoScriptText(SAY_EVENT_END_08, me); JumpToNextStep(7500); break; case 36: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_09_KADD, pTemp); JumpToNextStep(18500); break; case 37: DoScriptText(SAY_EVENT_END_10, me); JumpToNextStep(5500); break; case 38: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_11_KADD, pTemp); JumpToNextStep(20500); break; case 39: DoScriptText(SAY_EVENT_END_12, me); JumpToNextStep(2500); break; case 40: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_KADDRAK))) DoScriptText(SAY_EVENT_END_13_KADD, pTemp); JumpToNextStep(19500); break; case 41: DoScriptText(SAY_EVENT_END_14, me); JumpToNextStep(10500); break; case 42: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_15_MARN, pTemp); JumpToNextStep(6500); break; case 43: DoScriptText(SAY_EVENT_END_16, me); JumpToNextStep(6500); break; case 44: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_17_MARN, pTemp); JumpToNextStep(25500); break; case 45: DoScriptText(SAY_EVENT_END_18, me); JumpToNextStep(23500); break; case 46: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, pInstance->GetData64(DATA_MARNAK))) DoScriptText(SAY_EVENT_END_19_MARN, pTemp); JumpToNextStep(3500); break; case 47: DoScriptText(SAY_EVENT_END_20, me); JumpToNextStep(8500); break; case 48: if (pInstance) if (Creature* pTemp = Unit::GetCreature(*me, 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, 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 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; Talk(SAY_ESCORT_START); 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)))) temp->AI()->Talk(SAY_EVENT_INTRO_3_ABED); JumpToNextStep(8500); break; case 6: Talk(SAY_EVENT_A_1); JumpToNextStep(6500); break; case 7: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) temp->AI()->Talk(SAY_EVENT_A_2_KADD); JumpToNextStep(12500); break; case 8: Talk(SAY_EVENT_A_3); 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: Talk(SAY_EVENT_B_1); JumpToNextStep(6000); break; case 11: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) temp->AI()->Talk(SAY_EVENT_B_2_MARN); SpawnDwarf(1); JumpToNextStep(20000); break; case 12: Talk(SAY_EVENT_B_3); 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: Talk(SAY_EVENT_C_1); 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))) temp->AI()->Talk(SAY_EVENT_C_2_ABED); SpawnDwarf(1); JumpToNextStep(20000); break; case 18: Talk(SAY_EVENT_C_3); 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: Talk(SAY_EVENT_D_1); SpawnDwarf(3); JumpToNextStep(20000); break; case 22: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_D_2_ABED); SpawnDwarf(1); JumpToNextStep(5000); break; case 23: SpawnDwarf(2); JumpToNextStep(15000); break; case 24: Talk(SAY_EVENT_D_3); 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))) temp->AI()->Talk(SAY_EVENT_D_4_ABED); SpawnDwarf(1); JumpToNextStep(10000); break; case 28: me->SetReactState(REACT_DEFENSIVE); Talk(SAY_EVENT_END_01); 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: Talk(SAY_EVENT_END_02); 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))) temp->AI()->Talk(SAY_EVENT_END_03_ABED); JumpToNextStep(8500); break; case 31: Talk(SAY_EVENT_END_04); JumpToNextStep(11500); break; case 32: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_END_05_ABED); JumpToNextStep(11500); break; case 33: Talk(SAY_EVENT_END_06); JumpToNextStep(4500); break; case 34: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_END_07_ABED); JumpToNextStep(22500); break; case 35: Talk(SAY_EVENT_END_08); JumpToNextStep(7500); break; case 36: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) temp->AI()->Talk(SAY_EVENT_END_09_KADD); JumpToNextStep(18500); break; case 37: Talk(SAY_EVENT_END_10); JumpToNextStep(5500); break; case 38: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) temp->AI()->Talk(SAY_EVENT_END_11_KADD); JumpToNextStep(20500); break; case 39: Talk(SAY_EVENT_END_12); JumpToNextStep(2500); break; case 40: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK))) temp->AI()->Talk(SAY_EVENT_END_13_KADD); JumpToNextStep(19500); break; case 41: Talk(SAY_EVENT_END_14); JumpToNextStep(10500); break; case 42: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) temp->AI()->Talk(SAY_EVENT_END_15_MARN); JumpToNextStep(6500); break; case 43: Talk(SAY_EVENT_END_16); JumpToNextStep(6500); break; case 44: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) temp->AI()->Talk(SAY_EVENT_END_17_MARN); JumpToNextStep(25500); break; case 45: Talk(SAY_EVENT_END_18); JumpToNextStep(23500); break; case 46: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK))) temp->AI()->Talk(SAY_EVENT_END_19_MARN); JumpToNextStep(3500); break; case 47: Talk(SAY_EVENT_END_20); JumpToNextStep(8500); break; case 48: if (instance) if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))) temp->AI()->Talk(SAY_EVENT_END_21_ABED); 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)) { Talk(SAY_LOW_HEALTH); bIsLowHP = true; } else if (bIsLowHP && !HealthBelowPct(30)) bIsLowHP = false; if (!UpdateVictim()) return; DoMeleeAttackIfReady(); }
void JustDied(Unit * /*killer*/) { if (Creature* pAnomalus = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_ANOMALUS) : 0)) if (pInstance && pInstance->GetData(DATA_ANOMALUS_EVENT) == IN_PROGRESS) CAST_AI(boss_anomalus::boss_anomalusAI,pAnomalus->AI())->bDeadChaoticRift = true; }
void JustDied(Unit* /*killer*/) { if (Creature* pNovos = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_NOVOS) : 0)) CAST_AI(boss_novos::boss_novosAI, pNovos->AI())->RemoveCrystal(); }
void UpdateAI(const uint32 diff) { if(!UpdateVictim()) return; if ((me->GetHealth()*100) / me->GetMaxHealth() <= 75) { me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); DoCast(me, SPELL_TWILIGHT_PRECISION); DoCast(me, SPELL_DUSK_SHROUD); me->SetReactState(REACT_AGGRESSIVE); } if (m_uiBerserkTimer <= diff) { DoCast(me, SPELL_BERSERK); DoScriptText(SAY_BERSERK, me); m_uiBerserkTimer = 9999999; } else m_uiBerserkTimer -= diff; if (m_uiCleaveTimer <= diff) { DoCast(me, SPELL_CLEAVE); m_uiCleaveTimer = 15000; } else m_uiCleaveTimer -= diff; if (m_uiTailLashTimer <= diff) { DoCast(me, SPELL_TAILLASH); m_uiTailLashTimer = 10000; } else m_uiTailLashTimer -= diff; if (m_uiDarkBreathTimer <= diff) { DoCast(me, SPELL_DARKBREATH); m_uiDarkBreathTimer = 20000; } else m_uiDarkBreathTimer -= diff; if (m_uiSoulConsumptionTimer <= diff) { SoulConsumption(); m_uiSoulConsumptionTimer = 15000; ConsumptionTick = 2000; } else m_uiSoulConsumptionTimer -= diff; if (ConsumptionTick <= diff) { ConsumptionMark(); ConsumptionTick = 2000; } else ConsumptionTick -= diff; if ((me->GetHealth()*100) / me->GetMaxHealth() <= 50) { DoCast(me, SPELL_TWILIGHT_DIVISION); me->SummonGameObject(202795, 3173.488, 513.578, 72.88, 4.47206, 0, 0, 0, 0, 0); me->SummonGameObject(202795, 3131.944, 551.508, 72.88, 4.47206, 0, 0, 0, 0, 0); } if (check_Timer < diff) { UpdateDps(); uint32 multiple = 0; if (pHalion) { CAST_AI(boss_halionAI, pHalion->AI())->UpdateDps(); uint32 pHalion_dps = CAST_AI(boss_halionAI, pHalion->AI())->dps_last; uint32 dpstotal = pHalion_dps + dps_last; float dpspercent = pHalion_dps / dpstotal * 100; if ( dpspercent<5 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_100D, true); DoCast(me, SPELL_CORPOREALITY_100I); } else if ( dpspercent<15 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_80D, true); DoCast(me, SPELL_CORPOREALITY_80I); } else if ( dpspercent<25 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_60D, true); DoCast(me, SPELL_CORPOREALITY_60I); } else if ( dpspercent<35 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_40D, true); DoCast(me, SPELL_CORPOREALITY_40I); } else if ( dpspercent<45 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_20D, true); DoCast(me, SPELL_CORPOREALITY_20I); } else if ( dpspercent<55 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_EVEN, true); DoCast(me, SPELL_CORPOREALITY_EVEN); } else if ( dpspercent<65 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_20I, true); DoCast(me, SPELL_CORPOREALITY_20D); } else if ( dpspercent<75 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_40I, true); DoCast(me, SPELL_CORPOREALITY_40D); } else if ( dpspercent<85 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_60I, true); DoCast(me, SPELL_CORPOREALITY_60D); } else if ( dpspercent<95 ) { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_80I, true); DoCast(me, SPELL_CORPOREALITY_80D); } else { pHalion->CastSpell(pHalion, SPELL_CORPOREALITY_100I, true); DoCast(me, SPELL_CORPOREALITY_100D); } } check_Timer = 5000; } else check_Timer -= diff; DoMeleeAttackIfReady(); }