void UpdateAI(const uint32 diff) { if (pInstance && pInstance->GetData(DATA_PRINCEKELESETH_EVENT) == IN_PROGRESS) { if (isDead) { if (Respawn_Time <= diff) { Resurrect(); Respawn_Time = 12000; } else Respawn_Time -= diff; } else { if (!UpdateVictim()) return; if (Decrepify_Timer <= diff) { DoCast(me->getVictim(), SPELL_DECREPIFY); Decrepify_Timer = 30000; } else Decrepify_Timer -= diff; DoMeleeAttackIfReady(); } }else { if (me->isAlive()) me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); } }
void AMech_RPGCharacter::OutOfCombat() { TArray<AMech_RPGCharacter*> charactersFound = UMiscLibrary::GetCharactersInRange(1500, this->GetActorLocation()); for (AMech_RPGCharacter* character : charactersFound) { if (!character->IsDead() && character->IsEnemy(this) && character->inCombat) { SetInCombat(); return; } } inCombat = false; OnStopFiring.Broadcast(); if (OnOutOfCombat.IsBound()) OnOutOfCombat.Broadcast(); //if (!isPlayer && !isAlly) { stats->SetVisibility(false, true); //} if (IsDead() && GetGroup()->GetPlayer() != nullptr) { Resurrect(); } else if (IsDead()) { Reset(); GetWorld()->GetTimerManager().SetTimer(TimerHandle_Invunrelbility, this, &AMech_RPGCharacter::RemoveFromPlay, 6.0F); } }
void SpellHit(Unit* /*pWho*/, const SpellEntry* pSpell) { if (pSpell->Id == SPELL_RESURRECT && !PhaseTwo) { Resurrect(me); IsResurrecting = false; ZathDead = false; } }
void SpellHit(Unit* /*pWho*/, const SpellEntry* pSpell) { if (pSpell->Id == SPELL_RESURRECT) { Resurrect(me); IsResurrecting = false; ThekalDead = false; } }
void Reset() override { Initialize(); if (IsFakingDeath) { Resurrect(me); IsFakingDeath = false; } }
void boss_romuloAI::UpdateAI(const uint32 diff) { if (!UpdateVictim() || IsFakingDeath) return; if (JulianneDead) { if (ResurrectTimer <= diff) { Creature* Julianne = (Unit::GetCreature((*me), JulianneGUID)); if (Julianne && CAST_AI(boss_julianneAI, Julianne->AI())->IsFakingDeath) { DoScriptText(SAY_ROMULO_RESURRECT, me); Resurrect(Julianne); CAST_AI(boss_julianneAI, Julianne->AI())->IsFakingDeath = false; JulianneDead = false; ResurrectTimer = 10000; } } else ResurrectTimer -= diff; } if (BackwardLungeTimer <= diff) { Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true); if (pTarget && !me->HasInArc(M_PI, pTarget)) { DoCast(pTarget, SPELL_BACKWARD_LUNGE); BackwardLungeTimer = urand(15000, 30000); } } else BackwardLungeTimer -= diff; if (DaringTimer <= diff) { DoCast(me, SPELL_DARING); DaringTimer = urand(20000, 40000); } else DaringTimer -= diff; if (DeadlySwatheTimer <= diff) { if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(pTarget, SPELL_DEADLY_SWATHE); DeadlySwatheTimer = urand(15000, 25000); } else DeadlySwatheTimer -= diff; if (PoisonThrustTimer <= diff) { DoCastVictim( SPELL_POISON_THRUST); PoisonThrustTimer = urand(10000, 20000); } else PoisonThrustTimer -= diff; DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim() || IsFakingDeath) return; if (JulianneDead) { if (ResurrectTimer <= diff) { Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID)); if (Julianne && ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->IsFakingDeath) { Talk(SAY_ROMULO_RESURRECT); Resurrect(Julianne); ENSURE_AI(boss_julianne::boss_julianneAI, Julianne->AI())->IsFakingDeath = false; JulianneDead = false; ResurrectTimer = 10000; } } else ResurrectTimer -= diff; } if (BackwardLungeTimer <= diff) { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100, true); if (target && !me->HasInArc(float(M_PI), target)) { DoCast(target, SPELL_BACKWARD_LUNGE); BackwardLungeTimer = urand(15000, 30000); } } else BackwardLungeTimer -= diff; if (DaringTimer <= diff) { DoCast(me, SPELL_DARING); DaringTimer = urand(20000, 40000); } else DaringTimer -= diff; if (DeadlySwatheTimer <= diff) { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(target, SPELL_DEADLY_SWATHE); DeadlySwatheTimer = urand(15000, 25000); } else DeadlySwatheTimer -= diff; if (PoisonThrustTimer <= diff) { DoCastVictim(SPELL_POISON_THRUST); PoisonThrustTimer = urand(10000, 20000); } else PoisonThrustTimer -= diff; DoMeleeAttackIfReady(); }
void Reset() { RomuloGUID = 0; Phase = PHASE_JULIANNE; BlindingPassionTimer = 30000; DevotionTimer = 15000; EternalAffectionTimer = 25000; PowerfulAttractionTimer = 5000; SummonRomuloTimer = 10000; DrinkPoisonTimer = 0; ResurrectSelfTimer = 0; if (IsFakingDeath) { Resurrect(me); IsFakingDeath = false; } SummonedRomulo = false; RomuloDead = false; }
void UpdateAI(const uint32 diff) { if (m_uiHealTimer) { if (m_uiHealTimer <= diff) { Resurrect(); m_bHasRessed = true; m_uiHealTimer = 0; } else { m_uiHealTimer -= diff; return; } } if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; DoMeleeAttackIfReady(); }
void boss_julianne::boss_julianneAI::UpdateAI(const uint32 diff) { if (EntryYellTimer) { if (EntryYellTimer <= diff) { DoScriptText(SAY_JULIANNE_ENTER, me); EntryYellTimer = 0; } else EntryYellTimer -= diff; } if (AggroYellTimer) { if (AggroYellTimer <= diff) { DoScriptText(SAY_JULIANNE_AGGRO, me); 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 = (Unit::GetCreature((*me), RomuloGUID)); if (Romulo && CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath) { DoScriptText(SAY_JULIANNE_RESURRECT, me); Resurrect(Romulo); CAST_AI(boss_romulo::boss_romuloAI, Romulo->AI())->IsFakingDeath = false; RomuloDead = false; ResurrectTimer = 10000; } } else ResurrectTimer -= diff; } if (BlindingPassionTimer <= diff) { if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) DoCast(pTarget, 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(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_POWERFUL_ATTRACTION); PowerfulAttractionTimer = urand(5000,30000); } else PowerfulAttractionTimer -= diff; if (EternalAffectionTimer <= diff) { if (urand(0,1) && SummonedRomulo) { Creature* Romulo = (Unit::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 diff) { if (!UpdateVictim()) return; if (!PhaseTwo) { // Transform to Phase 2 if (LorkhanDead && ZathDead && ThekalDead) { me->InterruptNonMeleeSpells(false); DoCast(me, SPELL_TIGER_FORM); Resurrect(me); me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); const CreatureTemplate *cinfo = me->GetCreatureTemplate(); me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg / 100) * 40))); me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg / 100) * 40))); me->UpdateDamagePhysical(BASE_ATTACK); DoResetThreat(); PhaseTwo = true; DoScriptText(SAY_TRANSFORM, me); } if (ThekalDead) return; // Resurrecting if (LorkhanDead || ZathDead) if (!IsResurrecting && (CheckDeath_Timer - 2000) <= diff) { if (ZathDead) if (Unit* pZath = Unit::GetUnit(*me, ZathGUID)) pZath->CastSpell(pZath, SPELL_RESURRECT, false, 0, 0, pZath->GetGUID()); if (LorkhanDead) if (Unit* pLorkhan = Unit::GetUnit(*me, LorkhanGUID)) pLorkhan->CastSpell(pLorkhan, SPELL_RESURRECT, false, 0, 0, pLorkhan->GetGUID()); IsResurrecting = true; } else CheckDeath_Timer -= diff; // Mortal Cleave Timer if (MortalCleave_Timer <= diff) { DoCast(me->getVictim(), SPELL_MORTALCLEAVE); MortalCleave_Timer = 15000 + rand()%5000; } else MortalCleave_Timer -= diff; // Silence Timer if (Silence_Timer <= diff) // Cast on a random target in range? { DoCast(me->getVictim(), SPELL_SILENCE); Silence_Timer = 20000 + rand()%5000; } else Silence_Timer -= diff; } else // Phase 2 spells { // Enrage below 25% health if (!Enraged && (me->GetHealth() < (me->GetMaxHealth() * 0.25))) { DoCast(me, SPELL_ENRAGE); Enraged = true; } // Charge Timer if (Charge_Timer <= diff) { if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) { DoCast(pTarget, SPELL_CHARGE); DoResetThreat(); AttackStart(pTarget); } Charge_Timer = 15000 + rand()%7000; } else Charge_Timer -= diff; // Frenzy Timer if (Frenzy_Timer <= diff) { DoCast(me, SPELL_FRENZY); Frenzy_Timer = 30000; } else Frenzy_Timer -= diff; // Force Punch Timer if (ForcePunch_Timer <= diff) { DoCast(me->getVictim(), SPELL_SILENCE); ForcePunch_Timer = 16000 + rand()%5000; } else ForcePunch_Timer -= diff; // Summon Zulian Guardians if (SummonTigers_Timer <= diff) { DoCast(me->getVictim(), SPELL_SUMMONTIGERS); SummonTigers_Timer = 10000 + rand()%4000; } else SummonTigers_Timer -= diff; } DoMeleeAttackIfReady(); }
void Reset() { m_uiHealTimer = 0; m_bHasRessed = false; Resurrect(); }