void UpdateAI(const uint32 diff) { //Sounds OOC, Kiljaeden Orders if(!m_creature->getVictim()) { if(m_uiKJOrdersTimer < diff) { switch (rand()%5) { case 0: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT1); break; case 1: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT2); break; case 2: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT3); break; case 3: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT4); break; case 4: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT5); break; } m_uiKJOrdersTimer = 30000; }else m_uiKJOrdersTimer -= diff; } /*//Rebirth After Phase1 if(pInstance && pInstance->GetData(DATA_KILJAEDEN) == IN_PROGRESS) { m_creature->setFaction(14); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); //pInstance->SetData(DATA_KILJAEDEN_EVENT, IN_PROGRESS); //pInstance->SetData(DATA_DECIVER, NOT_STARTED); }*/ if(!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; //dragon cast blue shield for(uint8 i=0; i<4; ++i) { if(Unit* Dragon = Unit::GetUnit(*m_creature, DragonGUID[i])) if(Dragon && Dragon->HasAura(SPELL_SHIELD_OF_BLUE)) { m_uiCancelShieldTimer = 5000; std::list<HostileReference *> t_list = m_creature->getThreatManager().getThreatList(); for(std::list<HostileReference *>::iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { Unit *TargetedPlayer = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid()); if (TargetedPlayer && TargetedPlayer->GetTypeId() == TYPEID_PLAYER && TargetedPlayer->IsWithinDistInMap(Dragon, 10) && !TargetedPlayer->HasAura(AURA_BLUESHIELD)) TargetedPlayer->CastSpell(TargetedPlayer,AURA_BLUESHIELD,true); } } } //stop blue shield if(m_uiCancelShieldTimer < diff) { std::list<HostileReference *> t_list = m_creature->getThreatManager().getThreatList(); for(std::list<HostileReference *>::iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { Unit *ShieldedPlayer1 = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid()); if (ShieldedPlayer1 && ShieldedPlayer1->GetTypeId() == TYPEID_PLAYER && ShieldedPlayer1->HasAura(AURA_BLUESHIELD)) { ShieldedPlayer1->RemoveAurasDueToSpell(AURA_BLUESHIELD); } } m_uiCancelShieldTimer = 300000; }else m_uiCancelShieldTimer -= diff; //Kalecgos and Anvena Event if((m_uiKalecgosAnvenaTimer < diff) && m_bIsAnvena) { switch(m_uiKalecgosAnvenaCount) { case 0: DoPlaySoundToSet(m_creature, SAY_KALECGOS_AWAKEN); m_uiKalecgosAnvenaTimer = 5000; break; case 1: DoPlaySoundToSet(m_creature, SAY_ANVEENA_IMPRISONED); m_uiKalecgosAnvenaTimer = 3000; break; case 2: DoPlaySoundToSet(m_creature, SAY_KALECGOS_LETGO); m_uiKalecgosAnvenaTimer = 6000; break; case 5: DoPlaySoundToSet(m_creature, SAY_ANVEENA_LOST); m_uiKalecgosAnvenaTimer = 4000; break; case 4: DoPlaySoundToSet(m_creature, SAY_KALECGOS_FOCUS); m_uiKalecgosAnvenaTimer = 8000; break; case 3: DoPlaySoundToSet(m_creature, SAY_ANVEENA_KALEC); m_uiKalecgosAnvenaTimer = 5000; break; case 6: DoPlaySoundToSet(m_creature, SAY_KALECGOS_FATE); m_uiKalecgosAnvenaTimer = 5000; break; case 7: DoPlaySoundToSet(m_creature, SAY_ANVEENA_GOODBYE); m_creature->CastSpell(m_creature, SPELL_SACRIFICE_OF_ANVEENA, false); m_uiKalecgosAnvenaTimer = 5000; break; case 9: DoPlaySoundToSet(m_creature, SAY_KALECGOS_GOODBYE); ; m_bIsAnvena = false; break; case 8: DoPlaySoundToSet(m_creature, SAY_KALECGOS_ENCOURAGE); m_uiKalecgosAnvenaTimer = 14000; break; } ++m_uiKalecgosAnvenaCount; } m_uiKalecgosAnvenaTimer -= diff; //Kalecgos Event working if((m_uiKalecgosTimer < diff) && !m_bIsKalecgosSpawned) { DoPlaySoundToSet(m_creature, SAY_KALECGOS_JOIN); Kalecgos = m_creature->SummonCreature(ID_KALECGOS, m_creature->GetPositionX()-25, m_creature->GetPositionY()-25, m_creature->GetPositionZ()+10, 0.686f, TEMPSUMMON_TIMED_DESPAWN, 600000); Kalecgos->setFaction(35); //Kalecgos need to start shhooting arcane bolt into Kiljaeden //Dragon->AI()->AttackStart(m_creature); m_bIsKalecgosSpawned = true; }m_uiKalecgosTimer -= diff; //Shield Orb At Start each phases working /* if(m_uiShieldOrbTimer < diff && !m_bPhase5) { uint8 l=1; if(m_bPhase3) l=2; if(m_bPhase4) l=3; for(uint8 k=0; k<l; ++k) { Creature* ShieldOrb = m_creature->SummonCreature(ID_SHIELDORB, m_creature->GetPositionX()+urand(1,15), m_creature->GetPositionY()+urand(1,15), m_creature->GetPositionZ()+15, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); if(ShieldOrb) ShieldOrb->AI()->AttackStart(m_creature->getVictim()); } m_uiShieldOrbTimer = 50000; }else m_uiShieldOrbTimer -= diff;*/ //Sinister Reflects Attack Spell Timer if(m_uiSinnisterCastTimer < diff) { uint8 m_uiSinisterCount = 4; /*if(m_bPhase3) m_uiSinisterCount = 4; if(m_bPhase4) m_uiSinisterCount = 8; if(m_bPhase5) m_uiSinisterCount = 12;*/ for(uint8 i=0; i<m_uiSinisterCount; ++i) { if(Unit* Sinister = Unit::GetUnit(*m_creature, m_uiSinisterGUID[i][0])) { if(Unit* target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM,0)) Sinister->CastSpell(target, m_uiSinisterGUID[i][1], true); } } m_uiSinnisterCastTimer = 8000; }else m_uiSinnisterCastTimer -= diff; //Phase4 //armageddon if((m_uiAramageddonTimer < diff) && m_bPhase4) { uint8 h=3; if(m_bPhase5) h=5; if(!m_bPhase5 && m_bDarknessOfSoulsCasting) h=0; for(uint8 i=0; i<h; ++i) { if(Unit* target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM,0)) Creature* Armagedon = m_creature->SummonCreature(ID_ARMAGEDON, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 15000); } m_uiAramageddonTimer = 14000; }else m_uiAramageddonTimer -= diff; if((m_uiShadowSpikeEndsTimer < diff) && m_bShadowSpikeEnds && m_bPhase3) { if(Unit* target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM,0)) { cShadowSpike = m_creature->SummonCreature(ID_SHADOWSPIKE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 6000); cShadowSpike->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); cShadowSpike->setFaction(14); //target->CastSpell(target, SPELL_SHADOWSPIKE_EXP, false); } ++m_uiSpikesCount; if(m_uiSpikesCount > 9) m_bShadowSpikeEnds = false; m_uiShadowSpikeEndsTimer = 3000; }else m_uiShadowSpikeEndsTimer -= diff; if(m_bShadowSpikeEnds) return; if(m_uiDarknessExplosionTimer < diff && m_bDarknessOfSoulsCasting) { m_creature->CastSpell(m_creature->getVictim(), SPELL_DARKNESS_EXPLOSION, true); m_bDarknessOfSoulsCasting = false; m_uiDarknessExplosionTimer = 600000; m_uiDarknessOfSoulsTimer = 45000; if(m_bPhase5) m_uiDarknessOfSoulsTimer = 25000; }else m_uiDarknessExplosionTimer -= diff; if(m_bDarknessOfSoulsCasting) return; // darkness of a thousand souls from phase 3 on if(m_uiDarknessOfSoulsTimer < diff && m_bPhase3) { switch (rand()%3) { case 0: DoPlaySoundToSet(m_creature, SAY_KJ_DARKNESS1); break; case 1: DoPlaySoundToSet(m_creature, SAY_KJ_DARKNESS2); break; case 2: DoPlaySoundToSet(m_creature, SAY_KJ_DARKNESS3); break; } m_creature->CastSpell(m_creature, SPELL_DARKNESS_OF_SOULS, true); m_bDarknessOfSoulsCasting = true; m_uiDarknessExplosionTimer = 8500; }else m_uiDarknessOfSoulsTimer -= diff; // After Each Phase Dragons Are Spawned if((m_uiOrbTimer < diff) && !m_bBoolOrb) { for(uint8 i=0; i<4; ++i) DragonGUID[i] = 0; switch (rand()%4) { case 0: DoPlaySoundToSet(m_creature, SAY_KALEC_ORB_READY1); break; case 1: DoPlaySoundToSet(m_creature, SAY_KALEC_ORB_READY2); break; case 2: DoPlaySoundToSet(m_creature, SAY_KALEC_ORB_READY3); break; case 3: DoPlaySoundToSet(m_creature, SAY_KALEC_ORB_READY4); break; } uint8 m_uiMaxDragons = 1; if(m_bPhase5) m_uiMaxDragons = 4; for(uint8 i=0; i<m_uiMaxDragons; ++i) { Creature* Dragon = m_creature->SummonCreature(ID_DRAGON, m_creature->GetPositionX()+urand(5,20), m_creature->GetPositionY()+urand(5,20), m_creature->GetPositionZ(), 0, TEMPSUMMON_CORPSE_DESPAWN, 20000); DragonGUID[i] = Dragon->GetGUID(); } m_bBoolOrb = true; }else m_uiOrbTimer -= diff; //FireBloom Damage WorkArround if (m_uiFireBloomCheck < diff) { if(m_uiFireBloomCount < 10) for(uint8 i=0; i<5; ++i) { if(Unit* FireTarget = Unit::GetUnit(*m_creature, m_uiFireBloomTarget[i])) FireTarget->CastSpell(FireTarget, SPELL_FIREBLOOM_EFF, true); } ++m_uiFireBloomCount; m_uiFireBloomCheck = 2000; }else m_uiFireBloomCheck -= diff; //Phase 3 init if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 85) && !m_bPhase3) { DoPlaySoundToSet(m_creature, SAY_KJ_PHASE3); if(Unit* victim = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM,0)) if (victim && (victim->GetTypeId() == TYPEID_PLAYER)) Sinister(((Player*)victim),0,4); m_creature->MonsterYell("entering phase 3",LANG_UNIVERSAL,0); m_uiSinnisterCastTimer = 10000; m_uiShadowSpikeTimer = 30000; m_uiFlameDartTimer = 40000; m_uiDarknessOfSoulsTimer = 45000; m_bShadowSpikeEnds = false; m_bDarknessOfSoulsCasting = false; m_bPhase3 = true; //DragonsTimer m_uiOrbTimer = 35000; m_bBoolOrb = false; } //phase 4 init if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 55) && !m_bPhase4) { DoPlaySoundToSet(m_creature, SAY_KJ_PHASE4); if(Unit* victim = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM,0)) if (victim && (victim->GetTypeId() == TYPEID_PLAYER)) Sinister(((Player*)victim),4,8); m_creature->MonsterYell("entering phase 4",LANG_UNIVERSAL,0); m_uiAramageddonTimer = 2000; //100% ok m_bPhase4 = true; m_uiDarknessOfSoulsTimer = 45000; //DragonsTimer m_uiOrbTimer = 35000; m_bBoolOrb = false; } //phase 5 init if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 25) && !m_bPhase5) { DoPlaySoundToSet(m_creature, SAY_KJ_PHASE5); if(Unit* victim = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM,0)) if (victim && (victim->GetTypeId() == TYPEID_PLAYER)) Sinister(((Player*)victim),8,12); m_creature->MonsterYell("entering phase 5",LANG_UNIVERSAL,0); m_uiShadowSpikeTimer = 1000; m_uiDarknessOfSoulsTimer = 45000; m_bPhase5 = true; //DragonsTimer m_uiOrbTimer = 35000; m_bBoolOrb = false; //Kalecgos and Anvena Event m_uiKalecgosAnvenaTimer = 20000; m_bIsAnvena = true; m_uiKalecgosAnvenaCount = 0; Creature* Anveena = m_creature->SummonCreature(ID_ANVEENA, m_creature->GetPositionX()+urand(20,30), m_creature->GetPositionY()+urand(20,30), m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 120000); Anveena->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); Anveena->setFaction(35); } //spells used from phase 3 on if(m_bPhase3) { if(m_uiShadowSpikeTimer < diff) { DoCast(m_creature->getVictim(), SPELL_SHADOWSPIKE); m_bShadowSpikeEnds = true; m_uiShadowSpikeEndsTimer = 500; m_uiSpikesCount = 0; m_uiShadowSpikeTimer = 90000; }else m_uiShadowSpikeTimer -= diff; //flame dart if(m_uiFlameDartTimer < diff ) { DoCast(m_creature->getVictim(), SPELL_FLAMEDARTS); m_uiFlameDartTimer = 33000; }else m_uiFlameDartTimer -= diff; } //Phase2 // legion lightning all phases if(m_uiLegionLightingTimer < diff) { DoCast(m_creature->getVictim(), SPELL_LEGION_LIGHTING); m_uiLegionLightingTimer = 11000; }else m_uiLegionLightingTimer -= diff; // fire bloom all phases if(m_uiFireBloomTimer < diff) { for(uint8 i=0; i<5; ++i) { Unit* target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0); m_uiFireBloomTarget[i] = target->GetGUID(); m_uiFireBloomCount = 0; //DoCast(target, SPELL_FIREBLOOM, true); } m_uiFireBloomTimer = 25000; }else m_uiFireBloomTimer -= diff; // soul flay all phases if(m_uiSoulFlayTimer < diff) { DoCast(m_creature->getVictim(), SPELL_SOULFLAY); m_uiSoulFlayTimer = 7000; }else m_uiSoulFlayTimer -= diff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { /*if(pInstance && pInstance->GetData(DATA_DECIVER) == SPECIAL) { //DoCast(me->getVictim(), SPELL_REBIRTH, true); me->setFaction(14); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); SetInstanceData(DATA_KILJAEDEN_EVENT, IN_PROGRESS); SetInstanceData(DATA_DECIVER, NOT_STARTED); }*/ if(!CanDoSomething()) return; if(DarknessExplosionTimer < diff && DarknessOfSoulsCasting) { me->CastSpell(me->getVictim(), SPELL_DARKNESS_EXPLOSION, true); DarknessOfSoulsCasting = false; DarknessExplosionTimer = 600000; DarknessOfSoulsTimer = 45000; if(Phase5) DarknessOfSoulsTimer = 25000; }else DarknessExplosionTimer -= diff; if(DarknessOfSoulsCasting) return; if(DarknessOfSoulsTimer < diff) { me->CastSpell(me, SPELL_DARKNESS_OF_SOULS, true); DarknessOfSoulsCasting = true; DarknessExplosionTimer = 8500; }else DarknessOfSoulsTimer -= diff; if((OrbTimer < diff) && !BoolOrb) { //uint8 k=1; //if(Phase5) //k=4; //for(uint i=0; i<k; ++i) //{ Creature* ShieldOrb = me->SummonCreature(ID_DRAGON, me->GetPositionX()+15, me->GetPositionY()+15, me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_DESPAWN, 12000); //} BoolOrb = true; }else OrbTimer -= diff; //Phase5 if(ArwenaSacrificeTimer < diff && !ArwenaSacrificedSelf && Phase5) { me->CastSpell(me, SPELL_SACRIFICE_OF_ANVEENA, false); ArwenaSacrificedSelf = true; }else ArwenaSacrificeTimer -= diff; //FireBloom Damage WorkArround if (FireBloomCheck < diff) { if(FireBloomCount < 10) for(uint8 i=0; i<5; ++i) { if(Unit* FireTarget = Unit::GetUnit(*me, FireBloomTarget[i])) FireTarget->CastSpell(FireTarget, SPELL_FIREBLOOM_EFF, true); } ++FireBloomCount; FireBloomCheck = 2000; }else FireBloomCheck -= diff; //Sinister Reflects Attack if(SinnisterCastTimer < diff) { uint8 SinisterCount = 0; if(Phase3) SinisterCount = 4; if(Phase4) SinisterCount = 8; if(Phase5) SinisterCount = 12; for(uint8 i=0; i<SinisterCount; ++i) if(Unit* Sinister = Unit::GetUnit((*me), SinisterGUID[i][0])) if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) Sinister->CastSpell(target, SinisterGUID[i][1], true); SinnisterCastTimer = 8000; }else SinnisterCastTimer -= diff; //Shield Orb At Start each phases if(ShieldOrbTimer < diff && !Phase5) { uint8 l=1; if(Phase3) l=2; if(Phase4) l=3; for(uint8 k=0; k<l; ++k) { Creature* ShieldOrb = me->SummonCreature(ID_SHIELDORB, OrbSpawn[k][0], OrbSpawn[k][1], me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); if(ShieldOrb) ShieldOrb->AI()->AttackStart(me->getVictim()); } ShieldOrbTimer = 50000; }else ShieldOrbTimer -= diff; //Phases if(((me->GetHealth()*100 / me->GetMaxHealth()) <= 85) && !Phase3) { DoScriptText(SAY_KJ_REFLECTION1,me); if(Unit* victim = SelectUnit(SELECT_TARGET_RANDOM,0)) if (victim && (victim->GetTypeId() == TYPEID_PLAYER)) Sinister(((Player*)victim),0,4); //Start Timerow Dochodzacych w 3 Fazie SinnisterCastTimer = 10000; //ShadowSpikeTimer = 30000; FlameDartTimer = 40000; DarknessOfSoulsTimer = 20000; ShadowSpikeEnds = false; DarknessOfSoulsCasting = false; Phase3 = true; OrbTimer = 35000; BoolOrb = false; } if(((me->GetHealth()*100 / me->GetMaxHealth()) <= 55) && !Phase4) { //SAY_KJ_REFLECTION2 if(Unit* victim = SelectUnit(SELECT_TARGET_RANDOM,0)) if (victim && (victim->GetTypeId() == TYPEID_PLAYER)) Sinister(((Player*)victim),4,8); //Start Timerow Dochodzacych w 4 Fazie AramageddonTimer = 2000; //100% ok Phase4 = true; OrbTimer = 35000; BoolOrb = false; } if(((me->GetHealth()*100 / me->GetMaxHealth()) <= 25) && !Phase5) { //SAY_KJ_REFLECTION1 if(Unit* victim = SelectUnit(SELECT_TARGET_RANDOM,0)) if (victim && (victim->GetTypeId() == TYPEID_PLAYER)) Sinister(((Player*)victim),8,12); //Start Timerow Dochodzacych w 5 Fazie //ShadowSpikeTimer = 1000; ArwenaSacrificeTimer = 29000; ArwenaSacrificedSelf = false; Phase5 = true; OrbTimer = 35000; BoolOrb = false; } //Phase3 if(Phase3) { if(ShadowSpikeTimer < diff) { //DoCast(me->getVictim(), SPELL_SHADOWSPIKE); NOT WORKING ShadowSpikeEnds = true; ShadowSpikeEndsTimer = 500; SpikesCount = 0; ShadowSpikeTimer = 90000; }else ShadowSpikeTimer -= diff; if((ShadowSpikeEndsTimer < diff) && ShadowSpikeEnds) { if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) { target->CastSpell(target, SPELL_SHADOWSPIKE_EXP, false); } ++SpikesCount; if(SpikesCount < 9) ShadowSpikeEnds = false; ShadowSpikeEndsTimer = 3000; }else ShadowSpikeEndsTimer -= diff; if(FlameDartTimer < diff) { DoCast(me->getVictim(), SPELL_FLAMEDARTS); FlameDartTimer = 33000; }else FlameDartTimer -= diff; } //Phase4 if((AramageddonTimer < diff) && Phase4) { /* 3 of these will be in flight constantly throughout this phase and they will stop spawning while he is casting Darkness of a Thousand Souls. */ uint8 h=3; if(Phase5) h=5; if(!Phase5 && DarknessOfSoulsCasting) h=0; for(uint8 i=0; i<h; ++i) { if(Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) Creature* Armagedon = me->SummonCreature(ID_ARMAGEDON, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 15000); } AramageddonTimer = 14000; }else AramageddonTimer -= diff; //Phase2 if(LegionLightingTimer < diff) { DoCast(me->getVictim(), SPELL_LEGION_LIGHTING); LegionLightingTimer = 11000; }else LegionLightingTimer -= diff; if(FireBloomTimer < diff) { for(uint8 i=0; i<5; ++i) { Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0); FireBloomTarget[i] = target->GetGUID(); FireBloomCount = 0; //DoCast(target, SPELL_FIREBLOOM, true); } FireBloomTimer = 25000; }else FireBloomTimer -= diff; if(SoulFlyTimer < diff) { DoCast(me->getVictim(), SPELL_SOULFLY); SoulFlyTimer = 7000; }else SoulFlyTimer -= diff; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { //Sounds OOC, Kiljaeden Orders if(!m_creature->getVictim()) { if(m_uiKJOrdersTimer < diff) { switch (rand()%5) { case 0: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT1); break; case 1: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT2); break; case 2: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT3); break; case 3: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT4); break; case 4: DoPlaySoundToSet(m_creature, SAY_KJ_OFFCOMBAT5); break; } m_uiKJOrdersTimer = 60000; }else m_uiKJOrdersTimer -= diff; } //Rebirth After Phase1 if(pInstance && pInstance->GetData(DATA_DECIVER) == SPECIAL) { m_creature->setFaction(14); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); pInstance->SetData(DATA_KILJAEDEN_EVENT, IN_PROGRESS); pInstance->SetData(DATA_DECIVER, NOT_STARTED); } if(!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; //FireBloom Damage WorkArround if(m_uiFireBloomCheck < diff) { if(m_uiFireBloomCount < 10) for(uint8 i=0; i<5; ++i) { if(Unit* FireTarget = m_creature->GetMap()->GetUnit(m_uiFireBloomTarget[i])) if(FireTarget->isAlive()) FireTarget->CastSpell(FireTarget, SPELL_FIREBLOOM_EFF, true); } ++m_uiFireBloomCount; m_uiFireBloomCheck = 2000; }else m_uiFireBloomCheck -= diff; if((m_uiOrbTimer < diff) && !m_bBoolOrb) { switch (rand()%4) { case 0: DoPlaySoundToSet(m_creature, SAY_KALEC_ORB_READY1); break; case 1: DoPlaySoundToSet(m_creature, SAY_KALEC_ORB_READY2); break; case 2: DoPlaySoundToSet(m_creature, SAY_KALEC_ORB_READY3); break; case 3: DoPlaySoundToSet(m_creature, SAY_KALEC_ORB_READY4); break; } uint8 m_uiMaxDragons = 1; if(m_bPhase5) m_uiMaxDragons = 4; for(uint8 i=0; i<m_uiMaxDragons; ++i) { Creature* Dragon = m_creature->SummonCreature(ID_DRAGON, m_creature->GetPositionX()+urand(20,35), m_creature->GetPositionY()+urand(20,35), m_creature->GetPositionZ()+1, 0, TEMPSUMMON_CORPSE_DESPAWN, 20000); m_uiDragonGUID[i] = Dragon->GetGUID(); } m_bBoolOrb = true; }else m_uiOrbTimer -= diff; //Shield of Blue m_uiDragonGUID[i] for(uint8 i=0; i<4; ++i) { if(Unit* Dragon = m_creature->GetMap()->GetUnit(m_uiDragonGUID[i])) if(Dragon && Dragon->HasAura(SPELL_SHIELD_OF_BLUE)) { m_uiCancelShieldTimer = 6000; std::list<HostileReference *> t_list = m_creature->getThreatManager().getThreatList(); for(std::list<HostileReference *>::iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { Unit* TargetedPlayer = m_creature->GetMap()->GetUnit((*itr)->getUnitGuid()); if (TargetedPlayer && TargetedPlayer->GetTypeId() == TYPEID_PLAYER && TargetedPlayer->IsWithinDistInMap(Dragon, 15) && !TargetedPlayer->HasAura(AURA_BLUESHIELD)) TargetedPlayer->CastSpell(TargetedPlayer,AURA_BLUESHIELD,true); } } } if(m_uiCancelShieldTimer < diff) { std::list<HostileReference *> t_list = m_creature->getThreatManager().getThreatList(); for(std::list<HostileReference *>::iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { Unit *ShieldedPlayer1 = m_creature->GetMap()->GetUnit((*itr)->getUnitGuid()); if (ShieldedPlayer1 && ShieldedPlayer1->GetTypeId() == TYPEID_PLAYER && ShieldedPlayer1->HasAura(AURA_BLUESHIELD)) { ShieldedPlayer1->RemoveAurasDueToSpell(AURA_BLUESHIELD); } } m_uiCancelShieldTimer = 300000; }else m_uiCancelShieldTimer -= diff; //Kalecgos and Anvena Event if((m_uiKalecgosAnvenaTimer < diff) && m_bIsAnvena) { switch(m_uiKalecgosAnvenaCount) { case 0: DoPlaySoundToSet(m_creature, SAY_KALECGOS_AWAKEN); m_uiKalecgosAnvenaTimer = 5000; break; case 1: DoPlaySoundToSet(m_creature, SAY_ANVEENA_IMPRISONED); m_uiKalecgosAnvenaTimer = 3000; break; case 2: DoPlaySoundToSet(m_creature, SAY_KALECGOS_LETGO); m_uiKalecgosAnvenaTimer = 6000; break; case 5: DoPlaySoundToSet(m_creature, SAY_ANVEENA_LOST); m_uiKalecgosAnvenaTimer = 4000; break; case 4: DoPlaySoundToSet(m_creature, SAY_KALECGOS_FOCUS); m_uiKalecgosAnvenaTimer = 8000; break; case 3: DoPlaySoundToSet(m_creature, SAY_ANVEENA_KALEC); m_uiKalecgosAnvenaTimer = 5000; break; case 6: DoPlaySoundToSet(m_creature, SAY_KALECGOS_FATE); m_uiKalecgosAnvenaTimer = 5000; break; case 7: DoPlaySoundToSet(m_creature, SAY_ANVEENA_GOODBYE); m_creature->CastSpell(m_creature, SPELL_SACRIFICE_OF_ANVEENA, false); if(Unit* Anveena = m_creature->GetMap()->GetUnit(m_uiAnveenaGUID)) if(Anveena && Anveena->isAlive()) Anveena->SetVisibility(VISIBILITY_OFF); m_uiKalecgosAnvenaTimer = 5000; break; case 9: DoPlaySoundToSet(m_creature, SAY_KALECGOS_GOODBYE); ; m_bIsAnvena = false; break; case 8: DoPlaySoundToSet(m_creature, SAY_KALECGOS_ENCOURAGE); m_uiKalecgosAnvenaTimer = 14000; break; } ++m_uiKalecgosAnvenaCount; }m_uiKalecgosAnvenaTimer -= diff; //Kalecgos Event if((m_uiKalecgosTimer < diff) && !m_bIsKalecgosSpawned) { DoPlaySoundToSet(m_creature, SAY_KALECGOS_JOIN); float x, y, z; m_creature->GetClosePoint(x, y, z, m_creature->GetObjectBoundingRadius(), 15.0f, urand(0, 6)); if(Creature* cKalecgos = m_creature->SummonCreature(ID_KALECGOS, x, y, z, 0.686f, TEMPSUMMON_TIMED_DESPAWN, 600000)) { m_uiKalecgosGUID = cKalecgos->GetGUID(); cKalecgos->setFaction(35); cKalecgos->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); //Kalecgos need to start shhooting arcane bolt into Kiljaeden //Dragon->AI()->AttackStart(m_creature); } m_bIsKalecgosSpawned = true; }m_uiKalecgosTimer -= diff; //Shield Orb At Start each phases if(m_uiShieldOrbTimer < diff && !m_bPhase5) { uint8 l=1; if(m_bPhase3) l=2; if(m_bPhase4) l=3; for(uint8 k=0; k<l; ++k) { Creature* ShieldOrb = m_creature->SummonCreature(ID_SHIELDORB, m_creature->GetPositionX()+urand(1,15), m_creature->GetPositionY()+urand(1,15), m_creature->GetPositionZ()+10, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); if(ShieldOrb) ShieldOrb->AI()->AttackStart(m_creature->getVictim()); } m_uiShieldOrbTimer = 50000; }else m_uiShieldOrbTimer -= diff; //Sinister Reflects Attack if(m_uiSinnisterCastTimer < diff) { uint8 m_uiSinisterCount = 0; if(m_bPhase3) m_uiSinisterCount = 4; if(m_bPhase4) m_uiSinisterCount = 8; if(m_bPhase5) m_uiSinisterCount = 12; for(uint8 i=0; i<m_uiSinisterCount; ++i) if(Unit* Sinister = m_creature->GetMap()->GetUnit(m_uiSinisterGUID[i][0])) if(Sinister->isAlive()) if(Unit* target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) Sinister->CastSpell(target, m_uiSinisterGUID[i][1], true); m_uiSinnisterCastTimer = urand(8000,16000); }else m_uiSinnisterCastTimer -= diff; //Phase4 if((m_uiAramageddonTimer < diff) && m_bPhase4) { uint8 h=3; if(m_bPhase5) h=5; if(!m_bPhase5 && m_bDarknessOfSoulsCasting) h=0; for(uint8 i=0; i<h; ++i) if(Unit* target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) Creature* Armagedon = m_creature->SummonCreature(ID_ARMAGEDON, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 15000); m_uiAramageddonTimer = urand(20000,30000); }else m_uiAramageddonTimer -= diff; //ShadowSpike Explosions if((m_uiShadowSpikeEndsTimer < diff) && m_bShadowSpikeEnds && m_bPhase3) { if(Unit* target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) { if(Creature* cShadowSpike = m_creature->SummonCreature(ID_SHADOWSPIKE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 6000)) { cShadowSpike->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); cShadowSpike->setFaction(14); } //target->CastSpell(target, SPELL_SHADOWSPIKE_EXP, false); } ++m_uiSpikesCount; if(m_uiSpikesCount > 9) m_bShadowSpikeEnds = false; m_uiShadowSpikeEndsTimer = 3000; }else m_uiShadowSpikeEndsTimer -= diff; if(m_bShadowSpikeEnds) return; if(m_uiDarknessExplosionTimer < diff && m_bDarknessOfSoulsCasting) { //m_creature->CastSpell(m_creature->getVictim(), SPELL_DARKNESS_EXPLOSION, true); m_bDarknessOfSoulsCasting = false; m_uiDarknessExplosionTimer = 600000; m_uiDarknessOfSoulsTimer = 60000; m_uiFireBloomTimer = 25000; if(m_bPhase5) m_uiDarknessOfSoulsTimer = 35000; }else m_uiDarknessExplosionTimer -= diff; if(m_bDarknessOfSoulsCasting) return; if(m_uiDarknessOfSoulsTimer < diff && m_bPhase3) { switch (rand()%3) { case 0: DoPlaySoundToSet(m_creature, SAY_KJ_DARKNESS1); break; case 1: DoPlaySoundToSet(m_creature, SAY_KJ_DARKNESS2); break; case 2: DoPlaySoundToSet(m_creature, SAY_KJ_DARKNESS3); break; } m_creature->CastSpell(m_creature, SPELL_DARKNESS_OF_SOULS, false); m_bDarknessOfSoulsCasting = true; m_uiDarknessExplosionTimer = 8000; }else m_uiDarknessOfSoulsTimer -= diff; //Phases if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 85) && !m_bPhase3) { DoPlaySoundToSet(m_creature, SAY_KJ_PHASE3); if(Unit* victim = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) if (victim && (victim->GetTypeId() == TYPEID_PLAYER)) Sinister(((Player*)victim),0,4); //Start Timerow Dochodzacych w 3 Fazie m_uiFlameDartTimer = 20000; m_uiSinnisterCastTimer = 10000; m_uiShadowSpikeTimer = 30000; m_uiFlameDartTimer = 40000; m_uiDarknessOfSoulsTimer = 60000; m_bShadowSpikeEnds = false; m_bDarknessOfSoulsCasting = false; m_bPhase3 = true; //DragonsTimer m_uiOrbTimer = 35000; m_bBoolOrb = false; } if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 55) && !m_bPhase4) { DoPlaySoundToSet(m_creature, SAY_KJ_PHASE4); if(Unit* victim = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) if (victim && (victim->GetTypeId() == TYPEID_PLAYER)) Sinister(((Player*)victim),4,8); //Start Timerow Dochodzacych w 4 Fazie m_uiFlameDartTimer = 20000; m_uiAramageddonTimer = 2000; //100% ok m_bPhase4 = true; m_uiDarknessOfSoulsTimer = 60000; //DragonsTimer m_uiOrbTimer = 35000; m_bBoolOrb = false; } if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= 25) && !m_bPhase5) { DoPlaySoundToSet(m_creature, SAY_KJ_PHASE5); if(Unit* victim = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) if (victim && (victim->GetTypeId() == TYPEID_PLAYER)) Sinister(((Player*)victim),8,12); //Start Timerow Dochodzacych w 5 Fazie m_uiAramageddonTimer = urand(20000,30000); m_uiFlameDartTimer = 20000; m_uiShadowSpikeTimer = 1000; m_uiDarknessOfSoulsTimer = 60000; m_bPhase5 = true; //DragonsTimer m_uiOrbTimer = 35000; m_bBoolOrb = false; //Kalecgos and Anvena Event m_uiKalecgosAnvenaTimer = 20000; m_bIsAnvena = true; m_uiKalecgosAnvenaCount = 0; if(Creature* cAnveena = m_creature->SummonCreature(ID_ANVEENA, m_creature->GetPositionX()+urand(20,30), m_creature->GetPositionY()+urand(20,30), m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 120000)) { m_uiAnveenaGUID = cAnveena->GetGUID(); cAnveena->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); cAnveena->setFaction(35); } } //Phase3 if(m_bPhase3) { if(m_uiShadowSpikeTimer < diff) { //DoCast(m_creature->getVictim(), SPELL_SHADOWSPIKE); m_bShadowSpikeEnds = true; m_uiShadowSpikeEndsTimer = 500; m_uiSpikesCount = 0; m_uiShadowSpikeTimer = urand(65000,95000); }else m_uiShadowSpikeTimer -= diff; if(m_uiFlameDartTimer < diff) { DoCast(m_creature->getVictim(), SPELL_FLAMEDARTS); m_uiFlameDartTimer = urand(41000,63000); }else m_uiFlameDartTimer -= diff; } //Phase2 if(m_uiLegionLightingTimer < diff) { DoCast(m_creature->getVictim(), SPELL_LEGION_LIGHTING); m_uiLegionLightingTimer = urand(18000,26000); }else m_uiLegionLightingTimer -= diff; if(m_uiFireBloomTimer < diff) { for(uint8 i=0; i<5; ++i) { if (Unit* target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0)) m_uiFireBloomTarget[i] = target->GetGUID(); else m_uiFireBloomTarget[i] = 0; m_uiFireBloomCount = 0; //DoCast(target, SPELL_FIREBLOOM, true); } m_uiFireBloomTimer = urand(34000,56000); }else m_uiFireBloomTimer -= diff; if(m_uiSoulFlyTimer < diff) { DoCast(m_creature->getVictim(), SPELL_SOULFLY); m_uiSoulFlyTimer = 7000; }else m_uiSoulFlyTimer -= diff; DoMeleeAttackIfReady(); }